|
第七章:STM32CubeMx普通PWM基本使用方法 STM32CubeMx 普通PWM基本使用方法 本文实例说明: 这里是使用 TIM3_CH2输出 一个频率为50kHz;占空比为50% 的PWM信号。 1 先配置STM32CubeMX 参数,如图:
9 e; b( C, `7 A0 w7 J
重点说明: PWM 频率 = APB1 Timerclocks (MHz) / [(Prescaler+1) * (Counter Period+1)] APB1 Timer clocks (MHz) :64MHz Counter Period : 20 Prescaler :设置为64-1 那么此时PWM时钟设置为: f = 64000000 / 64 /20 = 50KHz Pulse :设置为10 ,也就是占比为:10/20 = 50% Fast Mode:如果频率太高可以使能快速模式。可以大大提高PWM反应时间;同时将IO口输出速度调高。 2 代码分析: - static void MX_TIM3_Init(void)# t" ?8 M: m; C2 h/ V
- {0 |+ e6 P6 e! v
9 S0 N4 ]/ {$ c0 u6 a- /* USER CODE BEGIN TIM3_Init 0 */& A9 Y) v1 @# I @) S2 t; u0 @$ h
- : c+ s+ `$ p. ~* K- V" z6 o/ h
- /* USER CODE END TIM3_Init 0 */
5 m. a0 E& p5 d4 J4 y. ]
0 F7 m4 c5 ]4 I* p) u4 e- TIM_MasterConfigTypeDef sMasterConfig = {0};
. O# q) O; a4 E; g2 } R* O - TIM_OC_InitTypeDef sConfigOC = {0};5 P7 B/ q7 ]7 T3 F+ s( n% n
& j$ K! a) \5 | S, a- /* USER CODE BEGIN TIM3_Init 1 */# H. w+ z6 v4 V, K
- $ v3 W# j- W. K% i' U' ]$ n9 Y- p* z
- /* USER CODE END TIM3_Init 1 */2 D: ?% N8 q* _6 {/ @
- htim3.Instance = TIM3;
) X3 M; Y, P7 S: e% s7 ` - htim3.Init.Prescaler = 64-1;
# M1 W( z# {( f: u. m - htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
, p. o0 B8 ?3 D- o - htim3.Init.Period = 20-1;
4 ?; r$ C6 t. w, [; L7 C - htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
2 m3 `6 D5 g5 O0 O: { - htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;9 y% |3 y8 H+ C: s6 P
- if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)% ^, y+ e. \5 Z' X. f: k' }
- {- g1 P2 ?7 Y* f2 V8 K
- Error_Handler();3 M6 M. z: G4 e% |! v
- }
+ i5 M7 R: W! g& K - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;$ V& R$ h0 M" l1 ^. ~, t
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;) D8 W& Z" c; _! }
- if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)4 [% Y7 N* D1 U# D
- {
* y2 k( Y3 D) J- H7 w$ s - Error_Handler();
6 d* }! ^% I* }9 } - }6 L7 A2 b! [2 n! K* R2 N, B% F
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
9 ]2 e- p9 d' {! W) H) @; G - sConfigOC.Pulse = 10;
" N' l8 A/ ]0 F7 Q! [0 @ - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
$ ~! P' c- {" y4 X6 R/ G - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; j& D) `# p2 V! }# e; j2 H* z
- if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
1 v* d: P/ T4 J" c, S+ E/ O - {
9 [7 k* V0 ~1 C - Error_Handler();
4 b% ?, [! _ R3 ] - }
: y: G& B$ f7 Z- a; t9 n( N - /* USER CODE BEGIN TIM3_Init 2 */
5 @9 A2 p& d' b! B* P3 T3 [$ ? - HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); //启动PWM输出函数
4 Q- Y8 ?! y0 z( l! ^ - __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, 10);//这个函数可以设置占空比
! H0 |4 u. Z7 v - /* USER CODE END TIM3_Init 2 */( S/ o% } E& C- @) L3 R! g' {
- HAL_TIM_MspPostInit(&htim3);/ m* E9 ]7 }0 X
- }0 x4 j9 W( T' y' \8 {- }
复制代码5 g! z/ P* o' {* I- u' M9 c
3 实验现象: 文章出处: LinuxARM 电子爱好者 9 x( q3 R/ F8 M7 l. c
|