STM32 NUCLEO-F411RE的TIM4预分频器、自动重装值设置及80%占空比PWM配置
解决STM32 NUCLEO-F411RE控制L298N驱动电机的PWM配置问题
核心参数计算(TIM4预分频器、自动重装值、CCR1设置)
NUCLEO-F411RE的TIM4挂载在APB1总线,默认系统时钟配置下,APB1预分频为2,因此TIM4的时钟频率为84MHz(APB1时钟42MHz × 2,因APB预分频>1时定时器时钟翻倍)。
直流电机适配的PWM频率范围为1kHz~20kHz(避免低频噪音与电机抖动),这里以10kHz为例计算参数:
1. 预分频器(PSC)与自动重装寄存器(ARR)计算
PWM频率公式:
PWM频率 = TIM时钟 / [(PSC + 1) × (ARR + 1)]
代入数值推导:
10000 = 84000000 / [(PSC+1) × (ARR+1)] → (PSC+1) × (ARR+1) = 8400
选择PSC=83(PSC+1=84),则:
ARR+1 = 8400 / 84 = 100 → ARR=99
2. 80%占空比的CCR1值计算
占空比公式:
占空比 = (CCR1 / (ARR + 1)) × 100%
代入80%占空比:
0.8 = CCR1 / 100 → CCR1=80
配置步骤(CubeMX + 代码)
CubeMX配置
- 开启TIM4时钟,通道1设置为PWM输出模式1(向上计数时,CNT<CCR1输出高电平)
- 设置TIM4的
Prescaler=83,Counter Period=99 - PB6配置为复用推挽输出,复用功能选择
TIM4_CH1 - PA11、PA12配置为推挽输出,默认电平按需设置
代码修改
CCR1赋值只需在初始化阶段执行一次,无需在while循环重复操作:/* USER CODE BEGIN 2 */ HAL_GPIO_WritePin(GPIOA, Dir1_Pin, GPIO_PIN_SET); // 正转:PA11高,PA12低 HAL_GPIO_WritePin(GPIOA, Dir2_Pin, GPIO_PIN_RESET); HAL_TIM_Base_Start(&htim4); HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); htim4.Instance->CCR1 = 80; // 设置80%占空比 /* USER CODE END 2 */ /* Infinite loop */ while (1) { // 无需重复赋值CCR1 }
电机仅滴答不转的排查要点
- 共地检查:L298N的GND必须与STM32开发板GND连接,否则信号逻辑不统一
- 电源验证:L298N的VM引脚接6V蓄电池,确保电量充足;电机接线牢固无松动
- PWM输出检测:用示波器测量PB6引脚,确认存在10kHz、80%占空比的PWM波形
- 电机状态确认:手动转动电机轴,排查是否存在卡死情况
- 电平兼容性:L298N输入逻辑高电平阈值≥2.3V,STM32的3.3V输出满足要求,无需额外电平转换
内容的提问来源于stack exchange,提问作者m.unicorn
相关产品推荐
相关产品推荐

