本帖最后由 toofree 于 2019-3-2 02:31 编辑 5 C N2 b* U S7 n: V 4 u. z" c: P- ?- @- ~ 【STM8-SO8-DISCO】——7、TIM输出PWM,呼吸灯 本实验,在上一贴基础上,增加定时器TIM2产生PWM信号。通过定时器TIM2产生PWM信号,在主循环中不断改变点空比,从而实现呼吸灯效果。* K, K9 a) p# R, @$ ? (上一贴链接:【STM8-SO8-DISCO】——6、TIM4时基测试 https://www.stmcu.org.cn/module/f ... 9541&fromuid=307297 ) 原理图显示LED灯LD1为高电平驱动点亮。 ' v0 d7 U( U# ~: g 对应STM8S001J3M3为PA3/PB5管脚2 B# Z5 f' _. t6 ^! B6 Q2 I 使用STM8CubeMX,可看到PA3/PB5管脚,同时为定时器2的第三通道TIM2_CH3。 数据手册中TIM2的大致参考如下,详细功能操作请参考芯片用户参考手册。- \8 B! p4 V! V2 D% d! | # H+ G* _' W) P' o 添加的TIM2部分代码,参考样例工和“STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Examples\TIM2\TIM2_PWM_DutyCycleConfiguration”。 添加CCR3_Val变量定义。 ' Z1 C, a! t( v$ k( f 增加TIM2初始化配置函数调用。改变CCR3_Val的值,CCR3_Val从0逐渐增大到999,然后在从999逐渐减小到0,如此往复;更新寄存器TIM2->CCR3H、TIM2->CCR3L;循环延时1mS。9 _8 n9 ^" h+ K" T/ Q TIM2初始化配置函数TIM2_Config(),注释掉CH1、CH2通道相关代码,只保留CH3部分。5 v" u' R6 P. W2 I6 b) M TIM2定时时钟16分频,即1MHz;PWM周期为1000个时钟,即1mS。 设定CH3通道为PWM1 Mode方式,PWM脉冲正极性;开启CH3通道CCR3预加载;开启TIM2的ARR寄存器预加载功能;开启TIM2。 * N! X0 K% I& r; w: @' J4 j 编译,下载程序,并全速运行。 实验现象为:程序运行5S后,板上用户LED灯LD1,由暗逐渐变亮,然后再逐渐变暗,实现呼吸灯效果。6 |7 D7 }/ R& s) ^! J. B# T5 X ! h" V6 H: O% F! p( q 用逻辑分析仪抓取到的数据,可以看出PWM周期为1ms。(标尺取了10个周期,共10ms)。 0 w; z/ }* T, |" N$ E 由亮变暗,再变亮,过程中,有一个周期为全灭的状态,即转折点。之后,每一个周期,高电平时间将逐渐增加。 ! q" ?$ e: }/ U7 r 将上图中,编号1号波形展宽,可看到高电平时间为1us;6 w1 y& x6 e5 G" G' x0 i. G: W! c 编号1号波形为2us, ~+ @! J! D2 C ; O. N7 p8 R4 j2 _& b. |# ? 编号3号波形为3us。3 @4 F1 l h5 X7 { 程序比较简陋,请凑合看。 本贴测试工程附上:; N U) r) _, {: i0 N0 ?2 c |
参与人数 1 | ST金币 +1 | 收起 理由 |
---|---|---|
toyourheart2018 | + 1 |
学习观摩 |
感谢分享 |
感谢分享!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |