历史上的今天
返回首页

历史上的今天

今天是:2026年01月11日(星期日)

2023年01月11日 | stm32的PWM实现过程

2023-01-11 来源:zhihu

stm32的PWM实现过程

  PWM是定时器扩展出来的一个功能(本质上是使用一个比较计数器的功能),配置过程一般为选定定时器、复用GPIO口、选择通道(传入比较值)、使能相应系统时钟、设定相应的预分频、计数周期、PWM模式(有两种)、电平极性等。具体介绍如下:

  一、定时器的特点归类

  STM32中一共有11个定时器,即 2个看门狗定时器、1个系统嘀嗒定时器(SysTick)及8个Timer定时器,详情如下表所示。



  二、定时器所在时钟线路



  三、PWM波形产生的原理

  通用定时器可以利用GPIO引脚进行脉冲输出,在配置为比较输出、PWM输出功能时,捕获/比较寄存器TIMx_CCR被用作比较功能,下面把它简称为比较寄存器。

  这里直接举例说明定时器的PWM输出工作过程:若配置脉冲计数器TIMx_CNT为向上计数,而重载寄存器TIMx_ARR被配置为N,即TIMx_CNT的当前计数值数值X在TIMxCLK时钟源的驱动下不断累加,当TIMx_CNT的数值X大于N时,会重置TIMx_CNT数值为0重新计数。

  四、STM32产生PWM的配置方法

  1、配置GPIO口:

  查看具体的GPIO引脚,以及查看GPIO口的复用功能(参考手册),我们这块用的是PC6。

  a.定时器1的引脚复用功能映像:



  b.定时器2的引脚复用功能映像:



  c.定时器3的引脚复用功能映像:



  d.定时器4的引脚复用功能映像:



  根据以上重映像表,我们使用定时器3的通道2作为PWM的输出引脚,所以需要对PB5引脚进行配置,对IO口操作代码:

  GPIO_InitTypeDef GPIO_InitStructure;//定义结构体

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);//使能GPIO外设和AFIO复用功能模块时钟

  GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); //选择Timer3完全重映像

  //选择定时器3的通道1作为PWM的输出引脚TIM3_CH1->PB6 GPIOC.6

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //TIM_CH1

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽功能

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化引脚

  2、初始化定时器


  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定义初始化结构体

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟

  //初始化TIM3

  TIM_TimeBaseStructure.TIM_Period = 255; //自动重装载寄存器的值

  TIM_TimeBaseStructure.TIM_Prescaler =7199; //TIMX预分频的值

  TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据以上功能对定时器进行初始化

  3、设置TIM3_CH1的PWM模式,使能TIM3的CH1输出


  TIM_OCInitTypeDef TIM_OCInitStructure;//定义结构体

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//选择定时器模式,TIM脉冲宽度调制模式1

  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能

  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//输出比较极性低

  TIM_OC1Init(TIM3, &TIM_OCInitStructure);//根据结构体信息进行初始化

  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能定时器TIM2在CCR1上的预装载值

  4、使能定时器3


  TIM_Cmd(TIM3, ENABLE); //使能定时器TIM3

  5、使用PWM


  经过上述操作,我们只需调用函数(如下)给通道1传值即可实现PWM波形正常输出。


  static void PWM_Channel1_Out(u16 pwm)

  {

  TIM3->CCR1 = pwm;

  }


推荐阅读

史海拾趣

启臣微(Chip)公司的发展小趣事

在产品质量方面,启臣微始终坚持严格的标准和精细的工艺流程。公司建立了一套完善的质量管理体系,从原材料采购到产品出厂,每一个环节都经过严格把关。这种对品质的执着追求,让启臣微的产品在市场上赢得了良好的口碑,也为公司赢得了众多客户的信赖。

成都成电硅海公司的发展小趣事

成都成电硅海公司自2009年成立以来,就以其独特的技术创新能力在电子行业中崭露头角。公司创始人李德全深谙半导体行业的技术趋势,带领团队攻克了一个又一个技术难题。在成立初期,公司就成功研发出一款高性能的硅基材料,这一创新不仅打破了国外企业的技术垄断,还为公司赢得了市场的初步认可。

Dover Corporation公司的发展小趣事

Dover Corporation的电梯业务始于1955年,当时Dover Elevator从Rotary Lift中分离出来,成为一家独立运营的公司。此后,公司通过一系列的收购,如谢泼德华纳电梯公司、Acme Elevator等,迅速扩大了其电梯业务。这些收购不仅使Dover成为美国第三大电梯公司,也为其在电梯行业中的持续领先地位奠定了基础。

Ferroperm公司的发展小趣事

随着全球环保意识的不断提高,Ferroperm公司也积极响应环保号召,致力于可持续发展。他们采用环保材料和生产工艺,减少生产过程中的污染和废弃物排放。同时,Ferroperm还积极参与环保公益活动,推动环保理念的普及和传播。这种对环保的关注和投入不仅体现了公司的社会责任感,也为公司的长远发展奠定了坚实的基础。

Esc Electronics Corp公司的发展小趣事

面对电子行业技术的快速迭代和市场竞争的加剧,Esc始终保持创新驱动的发展策略。公司不断加大对研发创新的投入力度,推动产品升级和产业升级。通过引入新技术、新工艺和新材料,Esc成功开发出一系列具有竞争力的新产品,并在市场上取得了显著的成绩。同时,公司还积极参与行业标准的制定和推广工作,推动整个电子行业的进步和发展。

华大北斗(Allystar)公司的发展小趣事

随着全球化进程的加速,Esc开始寻求国际合作和业务拓展的机会。公司与国际知名企业建立了战略合作关系,共同研发新产品、开拓市场。同时,Esc还积极拓展海外市场,通过设立海外分公司、参加国际展会等方式,加强与国际市场的联系和合作。这些努力不仅为Esc带来了更多的业务机会,也提升了公司的国际影响力。

问答坊 | AI 解惑

VS2005 开发WINCE应用程序问题

   VS2005 开发WINCE应用程序时,创建项目时必须从“智能设备”这创建(win32,mfc的应用程序)?然后在选择相应的SDK,不能从WIN32或者MFC出创建?…

查看全部问答>

请大家能否给份Rhapsody 软件的使用说明或者帮助文档

小弟想学习嵌入式软件的建模开发,准备学习Rhapsody ,但发现我的Rhapsody 软件安装了后却没有帮助文档,请哪个大侠能否给点资料,万份感谢!!!…

查看全部问答>

pc并口能直接和coms电路连接嘛?

pc并口能直接和coms电路连接嘛?…

查看全部问答>

自己编译一个程序后一直停留在此(有图)画面

用DNW烧linux的zIamge.bins后,,,,启动后DNW终端就一直停在这个画面 是不是我在编译镜像之前有些设置没有设置好咧..?  还是 [ 本帖最后由 3108009356 于 2011-5-5 00:02 编辑 ]…

查看全部问答>

基于PCF8591ADC转换的高手来看下把!

这是用430写的  大虾指点下 #include \"MSP430G2553.h\"#include \"delay.h\" #define uchar unsigned char#define uint unsigned int #define DataDir     P1DIR#define DataPort    P1OUT #defin ...…

查看全部问答>

STM32+物联网项目方案有奖竟赛--赠野火最新STM32开发板一套

本帖最后由 paulhyde 于 2014-9-15 03:41 编辑 我们论坛里有很多学生和初学者,很多人都是埋头看例程,埋头看手册,很少有人抬起头来思考真正的行业应用,这次的活动是为了让大家能够将学习到的单片机知识和实际的应用做一个结合。 由于征 ...…

查看全部问答>

一个经典的手机充电器方案原理图给大家鉴赏

特点:电路简单,性能稳定,兼容性/容错能力强(针对低端充电器所使用的便宜的物料、变压器),针对电容触摸屏手机在不加Y电容情况下可以实现无干扰输出,全电压输入,最大可以做到5V/1A(5W)优点:1.         硬性 ...…

查看全部问答>

ARM微处理器的指令大全

3.1  ARM微处理器的指令集概述     3.1.1  ARM微处理器的指令的分类与格式     ARM微处理器的指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过 ...…

查看全部问答>