定时器PWM波实验 p( D5 M$ M0 Q. r+ V1 Q% g5 U) H5 T 实验说明0 B& @9 m" V7 m I& ]5 t; l u 芯片:STM32F103RCT6 实验内容:使用定时器2的通道1输出PWM波控制LED灯的亮度。 实验操作7 M, _% I J5 B2 D 1、基础配置 1)sys中,选好调试方式,例如jtag-4pin。 2)RCC时钟,晶振选择。 3)时钟树配置。 ( P5 n4 R3 r6 L8 R8 {( R 4)中断分组配置。 以上步骤可以参考之前的实验。; ^2 W8 j$ y+ ~: A5 e- P% T 2、外设配置—PWM波配置 本次实验使用的是TIM2的通道1来输出PWM波。6 ^, A& y. f% b# b- G( } 1) 如下图打开TIM2功能配置视图。2 E$ s6 N) ?1 A1 G" O- Z ( ^- ?) y9 J2 T5 E* J0 L( \2 g 2)选择时钟,并且选择通道1的PWM模式。 * r/ Z! ?/ C0 s4 u9 e 注意载芯片示意图上 会看到下图 PA0 就是TIM2 的通道1 PWM波输出口。/ b8 p6 j+ S6 R& E: B z4 C3 M# u/ Y 1 \5 ~; ]9 Q- P V7 F2 r, q @ r% p: Y( \ o p$ C4 X0 H$ c 3)配置PWM波的参数( F0 \! f. c4 T& {. W% z ) d1 d4 _+ y1 q, C) V7 m: D 上图中需要理解两个点, 6 x2 m6 M9 a6 a6 s6 Q PWM 的频率 :1 A' C5 i6 v* }' ^3 m; k. U0 l ( s/ v: h& s' d4 ]) b' b6 J PWM模式和极性:1 w( \1 r- C( E4 x+ k3 H PWM模式1,在向上计数时,一旦TIMx_CNT < TIMx_CCR1(就是上图中的6,计数比较值)。时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。5 S# k$ P. e" \, L PWM模式2- 在向上计数时,一旦TIMx_CNT < TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT > TIMx_CCR1时通道1为有效电平,否则为无效电平 - U' T) G: V9 U& i( S 输出比较极性的指的是你在比较匹配之后输出口输出的极性。 这个函数就是让你设置有效极性,也就是设置比较输出的有效电平。你可以设置为高电平有效或者低电平有效。如果设置为高电平有效,那么当定时器比较匹配之后,输出口输出高电平,否则就反一下。 这里我自己的理解是,如果是PWM模式1,且向上计数,如果极性设置为低,那么 TIMx_CNT < TIMx_CCR1 时,输出低电平,更简单就是占空比为1 – TIMx_CCR1/(ARR+1). 如果极性为高,占空比就是TIMx_CCR1/(ARR+1)、' i0 Q4 L% J$ Q4 ^ 3 生成代码 由于这里不用中断,所以不用配置中断优先级。所以写好工程的名字和路径后,直接生成代码即可。# _$ U- E* v" i5 p+ L 2 O) b7 |% J6 h3 c6 C5 A/ M! ^ 4 在工程中开启PWM) ~% D5 N* f& J k8 F, `+ R 在完成以上设置之后,我们需要使能 TIM2 并且使能 TIM2_CH1 输出。在 HAL 库中,函数 HAL_TIM_PWM_Start 可以用来实现这两个功能,函数声明如下: $ y+ `5 c& o9 q
该函数第二个入口参数 Channel 是用来设置要使能的通道号。 0 Z) |# U! R2 n$ h% M" x4 j2 v ! N5 F* Q0 {$ M- B7 ` 5 修改占空比+ j# M. h- o! E- z 推荐使用寄存器的方式& C7 {+ q8 ^$ }& D 2 o% {% S. k4 x, A
6 测试0 F& u9 P8 _ ]7 L7 I 下载程序,然后可以使用万用表测试PA0口的电压值,为0.54~0.55V! q+ | b' e, P s- ~, }) N 9 {) ^# f4 T r/ H S: W (PWM模式1,极性为高 所以占空比为 150/900 * 3.3 为0.55V。 ! }3 R* V" |2 [' m& N . `+ a9 G4 r4 ]! k' U% a |
基于STM32生成外部Flash Loader的方法经验分享
【经验分享】STM32驱动RC522读卡完整资料分享,包含原理图、PCB、驱动工程文件
【经验分享】HRTIMER 产生多相相移信号
基于STM32 DFSDM应用技术经验分享
基于STM32 快速入门 BlueNRG SDK 固件开发
基于STM32的BlueNRG 系列协处理器简介经验分享
获取编译时间作为版本号
【经验分享】STM32CubeIDE使用说明 —— 实时调试
宽禁带技术如何带来颠覆性变革
基于STM32的数据意外变化导致条件判断流程异常