STMCU小助手
发布时间:2022-9-4 19:51
|
生成例程7 v Y- c/ a; B4 S 使用STM32CUBEMX生成例程,这里使用NUCLEO-F103RB开发板' W" v1 `/ j" f2 p , i s" u' A e( m. ~, b
0 |2 l/ f9 Z3 p4 C 查看原理图,PA8设置为PWM输出管脚。 7 k. F6 t/ W3 i: }; i# ^
生成独立的文件。 / p$ Y( i) }9 W4 s
4 q+ |0 p1 ?" I, _- F 工作过程: n: H2 T$ v1 O6 z 查看下面工作原理图可以得知,时钟可以由内部Internal clock产生或者外部ETR。7 {; K3 T0 W J; O 同时可以设置复位,使能,向上/向下,计数。 ( I: J4 e2 `: N( I, J/ z- Y" Y- G( \& h
8 [0 b$ U Q3 M+ X 查看下列文档可以得知,定时器主要有TIMx_CNT、TIMx_PSC、TIMx_ARR、TIMx_RCR控制。0 K9 s8 U! \1 f' H2 I5 e; r 同时预分频器(TIMx_PSC)范围位1-65535。 & ~( u7 O) @2 k8 R2 m! K
$ K- `/ F0 L" q 查看TIMx_PSC说明,可以得知定时器频率为 fCK_PSC / (PSC[15:0] + 1)( T. t. l0 ]6 ?
可以看到,当psc设置为不同的值的时候,计数频率也会发生改变。 7 S+ j( `' Y4 P- v! H
9 }" \$ W8 U v8 H0 q+ G/ n* u1 ] 同时ARR可以改变计数值,当写入的arr越大,他的频率越低,计数周期是ARR+1。) c+ U) M9 n5 k" n" w( Q, | , v1 P M6 |1 Z7 N# C+ n$ o
PWM频率计算如下所示。$ R+ o; @; n- T ( D" m7 P6 M/ S- u
在上面配置TIM1参数,预分频系数设置为64-1, 自动重载值设置为1000-1,那么PWM频率为64,000,000/((64-1+1)*(1000-1+1))=1000Hz,即1KHz。% y) ? K6 z9 _3 A6 S% e * U- z' G1 s a9 ^! R1 H/ A0 l) r
' a* r+ c1 z% ~$ r a. R* a" A 只要TIM1_CNT<TIM1_CCRx,PWM参考信号OCxREF总是为高的。若TIM1_CNT>= TIM1_CCRx,OCxRER为低。若TIM1_CCRx中的比较值大于自动重载值(在TIM1_ARR中)则OCxREF仍保持1。若比较值是0则OCxREF保持0。下图的例子显示了当TIM1_ARR=8时一些边沿对齐的PWM波形。 / b$ R7 e9 L- W/ \
__HAL_TIM_SET_COMPARE()0 y: _0 N$ Y& N% a3 U4 X t 设置ccr,可以通过此函数修改pwm。 ; a/ u6 q6 H! Z9 ]0 W: P
由于上述设置计数值位1000,那么设置30%的正占空比的ccr应该配置为30%*1000=300,代码如下所示。 3 D; O7 v9 Q) u. _" e [) e
+ y7 c+ y9 U" t8 z ^ 修改PWM频率 修改PWM频率可以修改PSC或者ARR来进行改变。 ' E) F6 E; \8 r8 E, u* a __HAL_TIM_SET_AUTORELOAD () 设置TIM自动重新加载寄存器值。9 M3 M# a" k) {2 f S
; I5 j7 H4 ?% P9 c$ L( |3 S 初始设置为PSC为64-1,ARR为1000-1,若设置为500-1,那么他的频率应该是64M/(64-1+1)(500-1+1)=2k! v9 p3 z* M" ^ h& C4 @ 占空比为300/500*100%=60% 9 i* S) {* _4 Y7 n* q* J
) R& k" g/ \; w8 ^0 L6 c& f) g& c __HAL_TIM_SET_PRESCALER() 在运行时设置TIM Prescaler。 % U8 Z+ r0 ~0 d4 [. Z
8 t* Y% f' D- R5 D9 e. Z, ] 初始设置为ARR为500-1,PSC为64-1,若设置为32-1,那么他的频率应该是64M/(32-1+1)(500-1+1)=4k 占空比为300/500*100%=60% 5 F2 U1 |: B: Y8 M8 T
———————————————— y4 Q* C" ~) y5 i: n 版权声明:记帖 ; A6 I1 N e1 X0 ?1 }# m$ M * @6 A8 |# k$ h! F- o. W9 H8 B |
【NUCLEO-C562RE】OLED 显示
保姆级教程:CMake 工程导入 STM32CubeIDE 步骤
STM32CubeCLT 1.22.0新版本发布
【下载问题解决】关于ST官网下载软件问题解决
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
《MCUBoot课程》学习笔记+从信任链原理到量产实践
STM32CubeIDE 2.2.0新版本发布
CubeMX生成CubeIDE工程代码乱码
STM32CubeIDE实时时钟(RTC)经验分享
微信公众号
手机版