遇到无法找到PWM设备的问题时,请按以下步骤系统排查:
rtconfig.h 中启用了宏定义: #define BSP_USING_TIM3
#define BSP_USING_PWM
#define BSP_USING_PWM3在 board/Kconfig 中确保配置正确:
config BSP_USING_TIM3
bool "Enable TIM3"
default n
config BSP_USING_PWM3
bool "Enable PWM3 (TIM3 Channel)"
select BSP_USING_PWM
select BSP_USING_TIM3
default ntim_config.h 中添加TIM3配置: #ifdef BSP_USING_TIM3
#ifndef TIM3_CONFIG
#define TIM3_CONFIG
{
.tim_handle.Instance = TIM3,
.name = "pwm3",
.irq_type = HAL_TIM_IRQ_UPDATE,
}
#endif
#endif /* BSP_USING_TIM3 */drv_pwm.c 中调用了注册函数: #ifdef BSP_USING_PWM3
rt_device_pwm_register("pwm3", &drv_pwm, &tim_config[3]); // 索引需匹配
#endifmain.c 中是否有 MX_TIM3_Init() 函数,并在 stm32h7xx_hal_msp.c 中确认: void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) {
if(htim->Instance == TIM3) {
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
}list_device 命令,查看是否有 pwm3 设备。 rt_device_t dev = rt_device_find("pwm3");
if (dev == RT_NULL) {
rt_kprintf("PWM3 device not found!n");
}drv_pwm.c 的 rt_hw_pwm_init() 中打印日志,确认是否执行到TIM3注册。SystemClock_Config() 是否启用APB1时钟(__HAL_RCC_TIM3_CLK_ENABLE())。rt_device_pwm_register() 的返回值,确认是否成功(返回RT_EOK)。drv_pwm.c 中TIM13的注册流程。BSP_USING_TIM13)并适配到TIM3。| 步骤 | 检查内容 |
|---|---|
| 设备宏定义 | rtconfig.h 中 BSP_USING_TIM3 和 BSP_USING_PWM3 是否定义 |
| 引脚复用 | CubeMX中PB0(或其他)配置为TIM3_CH3,Alternate Function=AF2 |
| 驱动注册 | tim_config.h 结构体命名一致;drv_pwm.c 注册索引正确 |
| 时钟使能 | stm32h7xx_hal_msp.c 中确认 __HAL_RCC_TIM3_CLK_ENABLE() 被调用 |
| 设备列表 | MSH执行 list_device 观察是否有 pwm3 设备 |
| 日志跟踪 | 在PWM驱动初始化函数中添加调试日志,确认TIM3加载流程 |
通过逐步比对上述配置,通常可定位到缺失的环节。重点注意 设备树宏定义、驱动注册索引 和 CubeMX引脚复用 三个高频出错点。
举报
更多回帖