欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    STM32学习笔记通用定时器PWM输出.pdf

    • 资源ID:82059652       资源大小:179.32KB        全文页数:8页
    • 资源格式: PDF        下载积分:19.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要19.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    STM32学习笔记通用定时器PWM输出.pdf

    STM32 学习笔记(5):通用定时器 PWM 输出 2011年3月30日 TIMER 输出 PWM 1.TIMER 输出 PWM 基本概念 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进 行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。一般用来控制步进电机的速度等等。STM32 的定时器除了 TIM6 和 TIM7 之外,其他的定时器都可以用来产生 PWM 输出,其中高级定时器 TIM1 和 TIM8 可以同时 产生 7 路的 PWM 输出,而通用定时器也能同时产生 4 路的 PWM 输出。1.1PWM 输出模式 STM32 的 PWM 输出有两种模式,模式 1 和模式 2,由 TIMx_CCMRx 寄存器中的 OCxM 位确定的(“110”为模式 1,“111”为模式 2)。模式 1 和模式 2 的区别如下:110:PWM 模式 1在向上计数时,一旦 TIMx_CNTTIMx_CCR1 时通道 1 为无效电平(OC1REF=0),否则为有效电平(0C1REF=1)。111:PWM 模式 2在向上计数时,一旦 TIMx_CNTTIMx_CCR1 时通道 1 为有效电平,否则为无效电平。由此看来,模式 1 和模式 2 正好互补,互为相反,所以在运用起来差别也并不太大。而从计数模式上来看,PWM 也和 TIMx 在作定时器时一样,也有向上计数模式、向下计数模式和中心对齐模式,关于 3 种模式 的具体资料,可以查看 STM32 参考手册的“14.3.9 PWM 模式”一节,在此就不详细赘述了。1.2PWM 输出管脚 PWM 的输出管脚是确定好的,具体的引脚功能可以查看 STM32 参考手册的“8.3.7 定时器复用功能重映射”一节。在此需 要强调的是,不同的 TIMx 有分配不同的引脚,但是考虑到管脚复用功能,STM32 提出了一个重映像的概念,就是说通过设置 某一些相关的寄存器,来使得在其他非原始指定的管脚上也能输出 PWM。但是这些重映像的管脚也是由参考手册给出的。比如 说 TIM3 的第 2 个通道,在没有重映像的时候,指定的管脚是 PA.7,如果设置部分重映像之后,TIM3_CH2 的输出就被映射到 PB.5 上了,如果设置了完全重映像的话,TIM3_CH2 的输出就被映射到 PC.7 上了。1.3 PWM 输出信号 PWM 输出的是一个方波信号,信号的频率是由 TIMx 的时钟频率和 TIMx_ARR 预分频器所决定的,具体设置方法在前面一个学 习笔记中有详细的交代。而输出信号的占空比则是由 TIMx_CRRx 寄存器确定的。其公式为“占空比=(TIMx_CRRx/TIMx_ARR)*100%”,因此,可以通过向 CRR 中填入适当的数来输出自己所需的频率和占空比的方波信号。2.TIMER 输出 PWM 实现步骤 1.设置 RCC 时钟;2.设置 GPIO 时钟;3.设置 TIMx 定时器的相关寄存器;4.设置 TIMx 定时器的 PWM 相关寄存器。第 1 步设置 RCC 时钟已经在前文中给出了详细的代码,在此就不再多说了。需要注意的是通用定时器 TIMx 是由 APB1 提供时钟,而 GPIO 则是由 APB2 提供时钟。注意,如果需要对 PWM 的输出进行重映像的话,还需要开启引脚复用时钟 AFIO。第 2 步设置 GPIO 时钟时,GPIO 模式应该设置为复用推挽输出 GPIO_Mode_AF_PP,如果需要引脚重映像的话,则需要 用 GPIO_PinRemapConfig()函数进行设置。第 3 步设置 TIMx 定时器的相关寄存器时,和前一篇学习笔记一样,设置好相关的 TIMx 的时钟和技术模式等等。具体设 置参看“TIMER 基本定时功能”的学习笔记。第 4 步设置 PWM 相关寄存器,首先要设置 PWM 模式(默认情况下 PWM 是冻结的),然后设置占空比(根据前面所述 公式进行计算),再设置输出比较极性:当设置为 High 时,输出信号不反相,当设置为 Low 时,输出信号反相之后再输出。最 重要是是要使能 TIMx 的输出状态和使能 TIMx 的 PWM 输出使能。相关设置完成之后,就可以通过 TIM_Cmd()来打开 TIMx 定时器,从而得到 PWM 输出了 3.TIMER 输出 PWM 源代码 由于我现在手上的奋斗开发板是将 PB.5 接到 LED 上,因此需要使用 TIM3 的 CH2 通道,并且要进行引脚重映像。打开 TIM3 之后,PWM 输出,使得 LED 点亮,通过改变 PWM_cfg()中的占空比可以调节 LED 的亮度。#include stm32f10 x_lib.h void RCC_cfg();void GPIO_cfg();void TIMER_cfg();void PWM_cfg();/占空比,取值范围为 0-100 int dutyfactor=50;int main()int Temp;RCC_cfg();GPIO_cfg();TIMER_cfg();PWM_cfg();/使能 TIM3 计时器,开始输出 PWM TIM_Cmd(TIM3,ENABLE);while(1);void RCC_cfg()/定义错误状态变量 ErrorStatus HSEStartUpStatus;/将 RCC 寄存器重新设置为默认值 RCC_DeInit();/打开外部高速时钟晶振 RCC_HSEConfig(RCC_HSE_ON);/等待外部高速时钟晶振工作 HSEStartUpStatus=RCC_WaitForHSEStartUp();if(HSEStartUpStatus=SUCCESS)/设置 AHB 时钟(HCLK)为系统时钟 RCC_HCLKConfig(RCC_SYSCLK_Div1);/设置高速 AHB 时钟(APB2)为 HCLK 时钟 RCC_PCLK2Config(RCC_HCLK_Div1);/设置低速 AHB 时钟(APB1)为 HCLK 的 2 分频 RCC_PCLK1Config(RCC_HCLK_Div2);/设置 FLASH 代码延时 FLASH_SetLatency(FLASH_Latency_2);/使能预取指缓存 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/设置 PLL 时钟,为 HSE 的 9 倍频 8MHz*9=72MHz RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);/使能 PLL RCC_PLLCmd(ENABLE);/等待 PLL 准备就绪 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)=RESET);/设置 PLL 为系统时钟源 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/判断 PLL 是否是系统时钟 while(RCC_GetSYSCLKSource()!=0 x08);/开启 TIM3 的时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);/开启 GPIOB 的时钟和复用功能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);void GPIO_cfg()GPIO_InitTypeDef GPIO_InitStructure;/部分映射,将 TIM3_CH2 映射到 PB5/GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);/选择引脚 5 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;/输出频率最大 50MHz GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/复用推挽输出 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOB,&GPIO_InitStructure);void TIMER_cfg()TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;/重新将 Timer 设置为缺省值 TIM_DeInit(TIM3);/采用内部时钟给 TIM3 提供时钟源 TIM_InternalClockConfig(TIM3);/预分频系数为 0,即不进行预分频,此时 TIMER 的频率为 72MHz TIM_TimeBaseStructure.TIM_Prescaler=0;/设置时钟分割 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;/设置计数器模式为向上计数模式 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;/设置计数溢出大小,每计 7200 个数就产生一个更新事件,即 PWM 的输出频率为 10kHz TIM_TimeBaseStructure.TIM_Period=7200-1;/将配置应用到 TIM3 中 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);void PWM_cfg()TIM_OCInitTypeDef TimOCInitStructure;/设置缺省值 TIM_OCStructInit(&TimOCInitStructure);/PWM 模式 1 输出 TimOCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;/设置占空比,占空比=(CCRx/ARR)*100%或(TIM_Pulse/TIM_Period)*100%TimOCInitStructure.TIM_Pulse=dutyfactor*7200/100;/TIM 输出比较极性高 TimOCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;/使能输出状态 TimOCInitStructure.TIM_OutputState=TIM_OutputState_Enable;/TIM3 的 CH2 输出 TIM_OC2Init(TIM3,&TimOCInitStructure);/设置 TIM3 的 PWM 输出为使能 TIM_CtrlPWMOutputs(TIM3,ENABLE);

    注意事项

    本文(STM32学习笔记通用定时器PWM输出.pdf)为本站会员(l***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开