STMCU小助手
发布时间:2022-9-4 19:51
|
生成例程 使用STM32CUBEMX生成例程,这里使用NUCLEO-F103RB开发板- X, O; O9 m$ ~( N4 T3 Y - @. e0 @. ~* } F6 S: s2 D7 m
查看原理图,PA8设置为PWM输出管脚。
生成独立的文件。: {( z+ a# E. C, u1 ` ! t& U$ h# h! k- n- u
工作过程) H# b1 @" ?; R5 C( ^8 x0 C 查看下面工作原理图可以得知,时钟可以由内部Internal clock产生或者外部ETR。 同时可以设置复位,使能,向上/向下,计数。1 W3 O6 [/ X% K) C
! r: X1 X- i( Y( u" ^5 M 查看下列文档可以得知,定时器主要有TIMx_CNT、TIMx_PSC、TIMx_ARR、TIMx_RCR控制。 同时预分频器(TIMx_PSC)范围位1-65535。" G0 k9 Z6 P6 Y8 U% q. H5 T T
) m* e2 C8 \5 w7 }& E6 D" X5 i4 l 查看TIMx_PSC说明,可以得知定时器频率为 fCK_PSC / (PSC[15:0] + 1)( \; S' s0 c8 i* G5 }' Y1 q! k
6 d/ h3 ~6 f' y3 M% E$ i/ J 可以看到,当psc设置为不同的值的时候,计数频率也会发生改变。% N- P" F; t& F% g1 E 8 [& \: t" r3 k5 w) n8 ]
同时ARR可以改变计数值,当写入的arr越大,他的频率越低,计数周期是ARR+1。
PWM频率计算如下所示。/ @+ D( p1 s2 t/ n G
6 C7 Y X4 a- U. Y. m" ^: O 在上面配置TIM1参数,预分频系数设置为64-1, 自动重载值设置为1000-1,那么PWM频率为64,000,000/((64-1+1)*(1000-1+1))=1000Hz,即1KHz。
只要TIM1_CNT<TIM1_CCRx,PWM参考信号OCxREF总是为高的。若TIM1_CNT>= TIM1_CCRx,OCxRER为低。若TIM1_CCRx中的比较值大于自动重载值(在TIM1_ARR中)则OCxREF仍保持1。若比较值是0则OCxREF保持0。下图的例子显示了当TIM1_ARR=8时一些边沿对齐的PWM波形。' ]: {1 a5 d0 C- y1 y3 o
- ?. a) U/ d9 w7 P- Z __HAL_TIM_SET_COMPARE() 设置ccr,可以通过此函数修改pwm。( T% G6 O, V( D9 @1 O4 a 9 c$ \) o/ s, P
; a$ x5 U9 c4 j" r6 S 由于上述设置计数值位1000,那么设置30%的正占空比的ccr应该配置为30%*1000=300,代码如下所示。
& b) F" X% R7 K( D- H% u; ]' D 修改PWM频率 修改PWM频率可以修改PSC或者ARR来进行改变。 - G1 V1 ]5 L6 x; T# h9 f4 z8 w __HAL_TIM_SET_AUTORELOAD (): k, V7 |4 f% y2 q9 A1 a7 i 设置TIM自动重新加载寄存器值。 " G( H6 z7 |* s9 r" T4 l. M. b
9 Q; F+ i, X, Z* ~' U, ?2 r 初始设置为PSC为64-1,ARR为1000-1,若设置为500-1,那么他的频率应该是64M/(64-1+1)(500-1+1)=2k( |* ?" Y" N# x: Y 占空比为300/500*100%=60%5 J& E/ c6 Y- S8 ~9 b/ F8 [ 3 \4 J; o. }9 b" w) j' s
9 P" h8 L$ q3 q5 ], `0 r2 w + Z% @3 o) s5 u) ^6 p% t" I __HAL_TIM_SET_PRESCALER()$ S4 K8 D0 P* S1 g( O+ I 在运行时设置TIM Prescaler。 0 N) J O0 [* ^5 V$ W; Q4 a
! c, [8 D( }# K8 s" x8 V2 s 初始设置为ARR为500-1,PSC为64-1,若设置为32-1,那么他的频率应该是64M/(32-1+1)(500-1+1)=4k 占空比为300/500*100%=60%
) ^. p6 y% S5 B' x2 r; f ————————————————. j: g% w$ v' j" U! G 版权声明:记帖4 ]0 ~+ y" L* |( I8 g+ Z1 L O) }+ H+ s. n |
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
《MCUBoot课程》学习笔记+从信任链原理到量产实践
STM32CubeIDE 2.2.0新版本发布
CubeMX生成CubeIDE工程代码乱码
STM32CubeIDE实时时钟(RTC)经验分享
实战经验 | ClassB功能安全认证代码与应用代码分区的实现要点
【STM32U3 评测】人体行为识别
【STM32U3 评测】串口控制步进电机与LabVIEW数据采集
实战经验 | STM32CubeIDE实用技巧之如何指定变量、函数、文件到指定内存
微信公众号
手机版