STM32G431定时器产生PWM(Hal库)

(1)选中需要的板子STM32G431定时器产生PWM(Hal库)_第1张图片

STM32G431定时器产生PWM(Hal库)_第2张图片(2)配置时钟树:G431的主频最高是170MHZ,蓝桥杯嵌入式教程里设置的是80MHZ,一般来说过低会导致性能的浪费,过高超过170M会导致不稳定。这里设定的是170MHZSTM32G431定时器产生PWM(Hal库)_第3张图片

我用的板子上没有外部晶振,所以选用16MHZ的内部晶振,选中内外晶振后通过正上方的Resolve Clock lssues可以快速帮助我们配饰各分频和倍频系数,只需微改变可得到需要的频率。本次用到的输出pwm的是定时器3,挂载在APB2总线上,定时器的频率总是与系统主频一致,这里默认配置即可。

(3)外设配置

第一步:配置GPIO,将PA6和PA7的模式分别设置为TIM3_CH1和TIM3_CH2

STM32G431定时器产生PWM(Hal库)_第4张图片

第二步:配置SYS、STM32G431定时器产生PWM(Hal库)_第5张图片

第三步:配置TIM3

时钟选择内部时钟,通道选择如图,其他默认失能

STM32G431定时器产生PWM(Hal库)_第6张图片配置参数设置:

这里简单说一下PWM(脉冲宽度调制)的原理:在具有惯性的系统中,通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常用的领域有电机,舵机的控速。可能说的有点玄乎,一句话概括一下就是通过设置一个叫做占空比的参数,可以随心所欲得到一个0-3.3V之间的输出电压。

PWM的参数有3个,频率,占空比,还有分辨率。

频率=定时器时钟频率/PSC+1/ARR+1,一般在几KHZ为佳

占空比=CCR+1/ARR+1,直接影响输出的模拟电压,控制转速等,如当占空比等于0.5时,输出的电压是3.3*0.5=1.15V

分辨率:1/(ARR+1),占空比变化的步距,值越小,可调控的值越精确,但是一般情况下不用特殊设置

PWM模式有1和2两种,均属于输出比较的模式,这里采用PWM1,PSC给17000-1,ARR给100-1,使能自动重装载,CCR初始值给50,至于其他的NVIC,DMA等,只对输出PWM来说都用不上,无需设置。

STM32G431定时器产生PWM(Hal库)_第7张图片

STM32G431定时器产生PWM(Hal库)_第8张图片

之后便在Cubemax中配置完了产生pwm所需的所有基础,生成文件即可STM32G431定时器产生PWM(Hal库)_第9张图片

(4)keil里调用初始化函数

除HAL_TIM_PWM_start()外,生成MDK文件时编译器会自动帮我们调用各个初始化函数。因此千万不要忘记主动写上HAL_TIM_PWM_start(),我就因为漏了这个函数找了好久的bug

STM32G431定时器产生PWM(Hal库)_第10张图片

(5)如何随心所欲的更改输出电压的值

在初始化中设置完CCR的值之后,占空比会保持不变,如果我们想改变输出电压即占空比的值,只能改变CCR的值,hal库为我们封装好了函数:__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_x,n); STM32G431定时器产生PWM(Hal库)_第11张图片结尾提一句,烧录完程序之后一定要重启,断电再上电或者按板子上的RST键都可以,不然程序是无法正常运行的

你可能感兴趣的:(stm32,嵌入式硬件,单片机)