RT-Thread论坛
直播中

张超

8年用户 1355经验值
私信 关注
[问答]

按照官方文档在ART-PI上开启PWM,但是串口输出找不到设备,怎么解决?


大佬们,我在cubemx里打开了tiM3及其通道3,
rtthread-setting,里打开了PWM,硬件On-chip Peripheral里添加了TIM3,并且使能了他,
tim_config.h里也仿照TIM13加入了有关TIM3的代码,
STM32h7xx_hal_msp.c里也打开了TIM3的使能,
最后按照官方文档上的代码,拷贝到ART-PI的模板例程里。但是不能发现TIM3的设备









回帖(1)

京五环以外

2025-9-19 17:49:25

遇到无法找到PWM设备的问题时,请按以下步骤系统排查:


1. 检查设备树配置



  • 确认在 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 n



2. 验证驱动注册



  • tim_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]); // 索引需匹配
    #endif


3. 排查CubeMX配置



  • 引脚映射:确认TIM3通道3对应引脚(如PB0)已正确配置为复用输出模式(AF2)。

  • 时钟树:检查TIM3的时钟源是否使能(APB1总线)。

  • 生成代码验证:检查生成的 main.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);
         }
    }


4. 检查RT-Thread设备列表



  • 在MSH终端执行 list_device 命令,查看是否有 pwm3 设备。

  • 若无输出,在应用代码中主动查找设备:
     rt_device_t dev = rt_device_find("pwm3");
    if (dev == RT_NULL) {
         rt_kprintf("PWM3 device not found!n");
    }


5. 调试关键函数



  • 驱动初始化:在 drv_pwm.crt_hw_pwm_init() 中打印日志,确认是否执行到TIM3注册。

  • 底层时钟:检查 SystemClock_Config() 是否启用APB1时钟(__HAL_RCC_TIM3_CLK_ENABLE())。

  • 注册返回值:捕获 rt_device_pwm_register() 的返回值,确认是否成功(返回RT_EOK)。


6. 硬件连接验证



  • 使用示波器测量TIM3通道3对应引脚(如PB0),观察是否有信号输出(即使未设置占空比,默认可能有低电平)。


7. 参考成功配置



  • 对比ART-PI SDK中已启用的PWM(如TIM13)的完整配置路径:

    • 查看 drv_pwm.c 中TIM13的注册流程。

    • 复制其设备树定义(BSP_USING_TIM13)并适配到TIM3。



关键排查点总结:



































步骤 检查内容
设备宏定义 rtconfig.hBSP_USING_TIM3BSP_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引脚复用 三个高频出错点。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分