一、打开cubemx0 @* B" @6 O6 f3 O2 `; v
LED0和LED1连接在PB0和PB1上,刚好是TIM3的PWM通道3和通道4( E# T+ `# w% v- Z8 X
! O7 W' d& K7 r5 t1 w
二、配置PWM参数
. ~$ ]8 [+ V/ g" a# |开启TIM3的通道3和通道4
2 t. a3 y9 W7 y
% K; O8 ^ b6 _& r
+ e$ Z2 A- Y/ B& l3 [( C, S. x" b4 c. Z, S. o, V5 u
配置PWM的频率为108000000/(108*500)=20kHZ/ G, X" \5 a- [$ ^) H8 k, Q
; p( @$ c5 |% M" [* Z& v! _# O4 q- b3 n* g7 A
& A) ^6 ~+ e0 @! T6 w" O) G, Y' J配置PWM通道3和通道4. a8 o# |6 `8 y, z8 F; [
' U" Z+ w% B: L
: S) U6 g. h5 t2 s7 F
1 K. H7 s# ?% L在程序中改变pulse的值,即可改变占空比pulse的取值范围在0-count period之间
3 o. |, i" u) T: J! l1 ]; S' E3 H
) p h9 m9 f( M8 u+ z* k, s8 M" `三、生成代码
3 _3 u0 e7 k; k; a在main函数中增加代码,开启PWM输出) b: X( `: P$ _# h
: d" b$ M6 H, P3 A: I9 }
+ S) r9 D/ W( Q6 P7 f4 f
6 f# D* `7 y$ }: K在tim.c中增加pwm控制函数9 b4 }' R0 w7 w0 p. }7 W
8 v6 y; e5 w; a) F7 C, H. ?
- void SetPwm(uint16_t pwm1,uint16_t pwm2)1 |; M2 H* n* B( }1 K
- {- t9 P9 o/ s4 C! B# |) m; A& N
- TIM3->CCR3=pwm1;! O' v# N' Z5 ` E& ~- I
- TIM3->CCR4=pwm2;
- H0 _, ~# @3 h4 {8 d$ @+ @5 P - }
复制代码
: I. e1 D0 Z4 A' e8 M也可以使用hal库进行修改,但这样比较复杂
" `; S& I) r6 ~: V4 N. L
& ~6 T; g# s O7 U- void SetPwm(uint16_t pwm1,uint16_t pwm2)& }! p; Z4 p) X* z1 |* _$ r0 R2 D
- {
! g+ `& O3 A$ F* M5 ^ - TIM_OC_InitTypeDef sConfigOC;
& c( w0 y: ?& s7 d. e6 q - sConfigOC.Pulse = pwm1;: U* S: H. G9 O* h+ ^
- HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3);7 F; a& p1 x8 [2 P! ]! f
- HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
: S% f4 b) X& J* _ - sConfigOC.Pulse = pwm2; k- C$ j4 @8 k6 O9 d
- HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4);# ^* z2 i$ w! ~# n. G9 A5 B
- HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
9 b) e. {# ^& f0 J- ?5 m+ @ - }
复制代码 7 k& I& M$ Y' b: r% C6 v$ r9 c u7 f
在主函数添加呼吸灯代码,添加完成如下
7 G2 x6 V. a7 v; ]% w: {: S4 j6 d( `' n* M, N0 C7 N* i: {5 }
" v2 L5 Q+ G! q- p M% t0 X! [6 Y4 |% R2 Y
四、下载代码观看现象 i6 y- [ I5 |
将代码下载到开发板中可以看到LED0和LED1呈现出呼吸灯的效果+ M! }1 x8 _+ f3 J' M; b
. v4 w9 n$ _1 w. R5 L6 m- l
6 V( ^9 D7 D) E( G |