stm32的PWM实现过程

发布者:Tiger8最新更新时间:2023-01-11 来源: zhihu关键字:stm32  PWM  实现过程 手机看文章 扫描二维码
随时随地手机看文章

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;

  }


关键字:stm32  PWM  实现过程 引用地址:stm32的PWM实现过程

上一篇:零基础入门stm32你的学习思路对了吗
下一篇:学习笔记之STM32 USART串口应用

推荐阅读最新更新时间:2024-11-09 12:16

stm32 flash写数据怎么存储的
STM32是一款广泛应用于嵌入式系统开发的微控制器,它的Flash存储器是其中一个重要的组成部分。在本文中,我将详细介绍STM32 Flash的存储机制,包括其结构、特点以及如何写入数据。 一、STM32 Flash的结构 STM32 Flash存储器通常被分为多个扇区,每个扇区大小为2KB到256KB不等,根据不同的型号有所不同。每个扇区可以独立进行擦除和写入操作,这使得STM32 Flash存储器非常灵活和易于使用。 Flash存储器的每个单元通常被称为“页”,一个页大小通常为1KB到2KB。这些页可以独立进行写入操作,并且无需进行整个扇区的擦除。这个特性使得STM32 Flash在实时数据存储和更新方面更加高效。 二、STM
[单片机]
STM32自学笔记(1.什么是STM32
STM32微控制器的核心: Cortex-M3处理器。 嵌套中断向量控制器(NVIC)是Cortex-M3处理器中一个比较关键的组件。提供了标准的中断架构和优秀的中断响应能力,为超过240个终端源提供专门的中断入口,并可以赋予每个中断源单独的优先级。 Cortex-M3的CPU支持两种运行模式: 线程模式和处理模式(都拥有自己独立的堆栈)。 Cortex-M3还包括一个24位的可自动重装载定时器,可以为实现内核(RTOS)提供一个周期性中断。 Cortex-M3支持新型的ARM Thumb-2指令集。 STM32具有精密性、可靠性和安全性 可靠性 有两个看门狗定时器。 第一个叫窗口看门狗,窗口看门狗必
[单片机]
AD1256之STM32程序——STM32测试高精度ADC篇(四)
1.ADS1256概述 ADS1256是TI(TexasInstruments)公司推出的一款低噪声高分辨率的24位Sigma-Delta(E-v)模数转换器(ADC)。E-vADC与传统的逐次逼近型和积分型ADC相比有转换误差小而价格低廉的优点,但由于受带宽和有效采样率的限制,E-vADC不适用于高频数据采集的场合。该款ADS1256可适合于采集最高频率只有几千赫兹的模拟数据的系统中,数据输出速率最高可为30K采样点/秒(SPS),4路差分与8路伪差分输入,有完善的自校正和系统校正系统,SPI串行数据传输接口。本文结合笔者自己的应用经验,对该ADC的基本原理以及应用做简要介绍。 ADS1256性价比很高,是TI公司24位
[单片机]
AD1256之<font color='red'>STM32</font>程序——<font color='red'>STM32</font>测试高精度ADC篇(四)
STM32的时钟系统学习笔记(基于STM32F407)
RCC(Reset clock Control 复位时钟控制器) 时钟源(时钟生成) 常规:外部晶振、芯片内部振荡器、锁相环(PLL) PS:(Phase Locked Loop): 为锁相回路或锁相环 其他:以太网、USB OTG FS、或其他外设的时钟源 STM32F407时钟树关系图(重点理解经常用到) 时钟总线 RCC通过多个预分频器配置时钟总线 PS:预分频器 (Prescaler-PSC)用来将定时器时钟源进行分频输出 总线类型:AHB、低速APB1、高速APB2 PS: AHB(Advanced High Performance Bus),高级高性能总线 APB(Advanc
[单片机]
<font color='red'>STM32</font>的时钟系统学习笔记(基于STM32F407)
STM32速成笔记(2)—GPIO
一、什么是GPIO GPIO(英语:General-purpose input/output),通用型之输入输出的简称,可以用来输入高低电平或者输出高低电平。这里的高电平指的是3.3V,低电平指的是0V。通常称GPIO为IO口,或者引脚。 STM32F103ZET6有GPIOx_0~GPIOx_15,其中x = A,B,C,D,E,F,G。 二、GPIO的输入/输出模式 GPIO有多种输入输出模式,输入模式有 • 输入浮空 输入浮空指的是GPIO与外设之间既不接高电平,也不接低电平,呈高阻态。除了类似于在数据传输时将GPIO配置为输入浮空外,一般不配置为该模式。因为输入浮空状态的GPIO电压具有不确定性,可能是0V,
[单片机]
<font color='red'>STM32</font>速成笔记(2)—GPIO
结合STM32单片来讲讲结构体的运用
摘要:听说还有好多学单片机的小伙伴不会用结构体?指针和结构体是学单片机必须要掌握的,如果你C语言掌握的不牢,单片机根本学不到精髓,只能完成一些低级的项目。看得懂结构体并且能够灵活运用结构体才能说你入门了单片机。本篇将以最通俗的方式结合STM32单片来讲讲结构体的运用。解决你学完C语言、考过了计算机二级还是看不懂单片机结构体的苦恼。宝藏文章,记得点赞转发收藏。 大家知道指针和结构体是单片机的难点,所以就去学习C语言,找视频看书。 这里面每一个视频的播放量都非常高。对于单纯的学习C语言,这里讲的很清楚。看完你不禁在下面评论一句:哇!讲的真的太清楚了吧!但是等你真正的学单片机的时候,你会发现我不是学过C语言吗?计算机二级我也过了
[单片机]
详细的STM32启动配置流程解析
大家不妨设想一下,cpu 的工作是什么,cpu 是没有主观意识的,它只会按照特定的指令执行相应的操作,用专业术语来说就是:取指 - 译码 - 执行,译码和执行肯定是在 cpu 内部进行操作的,并且前提是已经取到了指令。那现在问题来了,指令在哪? cpu上电复位后执行的第一步操作就是取指令 问题1:指令存储在何处 我们在电脑上编写的程序最终是要烧写到芯片内部的 FLASH中(此处特指STM32)。 问题2:如何将可执行文件烧写至 FLASH 上 STM32 的启动方式有很多种,从主存 FLASH 启动,从 system memory 启动,从 SRAM 中启动。 问题3:从 SRAM 中启动,为什么需要重新设置中断向量表 接下来
[单片机]
详细的<font color='red'>STM32</font>启动配置流程解析
STM32 ucos 下添加CAN模块
1.CAN IO RX TX 的设定和重映射 GPIO_PinRemapConfig(GPIO_Remap2_CAN, ENABLE); //端口重映射到PD0,PD1 2.clock CAN IO CLOCK 的开启 、*-------gpio for can------------*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE); CAN 自身CLOCK 的开启、 /* CAN Periph clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved