[STM32C5] 定时器第二通道启动触发断言失败

[复制链接]
51|2
地瓜patch 发表于 2026-11-4 10:03 | 显示全部楼层 |阅读模式
我在 STM32CubeMX2 中配置了一个定时器,使用 2 个通道`HAL_TIM_CHANNEL_1`和`HAL_TIM_CHANNEL_3`。在`mx_system_init()`之后,我使用如下代码:

hal_tim_handle_t *htim5 = mx_tim5_gethandle();
if (HAL_TIM_OC_StartChannel(htim5, HAL_TIM_CHANNEL_1) != HAL_OK) {
return (-1);
}
if (HAL_TIM_OC_StartChannel(htim5, HAL_TIM_CHANNEL_3) != HAL_OK) {
return (-1);
}
if (HAL_TIM_Start(htim5) != HAL_OK) {
return (-1);
}
第一个通道正常启动,但当我尝试启动第二个通道时,代码在`HAL_TIM_OC_StartChannel`中触发了断言:
/* Check and update the channel state */
ASSERT_DBG_STATE(htim->channel_states[channel],
HAL_TIM_OC_CHANNEL_STATE_IDLE);
需要做不同的处理吗?


probedog 发表于 2026-11-4 10:27 | 显示全部楼层
断言检查的是 channel_states[channel] 是不是 IDLE。通道 3 的断言失败,说明它在代码眼里根本不是空闲状态,要么没初始化成 IDLE,要么之前被别的逻辑改掉了。
elephant00 发表于 2026-11-4 10:31 | 显示全部楼层
先看 .ioc 里 CH3 到底有没有真的 enable,再看生成的 mx_tim5.c 里有没有对应的初始化。两处都确认了还不行,就自己实现 assert 函数把出错时的通道号和状态值打印出来。
solty 发表于 2026-11-4 10:59 | 显示全部楼层
先去翻 mx_tim5.c,确认通道 3 的初始化代码到底有没有生成出来。CubeMX2 界面上勾了 CH3,不代表生成的代码里真的调了 HAL_TIM_OC_ConfigChannel 或者类似函数去把状态设成 IDLE。
spicy 发表于 2026-11-4 12:30 | 显示全部楼层
有人遇到同样问题,最后发现是自己工程里 CubeMX2 的配置和实际生成的 mx_tim5.c 代码对不上。界面显示 CH3 使能了,但生成的代码漏了,重新生成一遍就好了。
stormwind123 发表于 2026-11-4 14:15 | 显示全部楼层
检查 CubeMX2 里 HAL System Init 配置下的 assert 选项。如果开了参数断言但没生成默认的 assert 处理函数,程序可能跑不到你预期的位置,或者断言行为异常。
七毛钱 发表于 2026-11-4 14:50 | 显示全部楼层
你用的通道号是 HAL_TIM_CHANNEL_3。确认 HAL2 里 channel_states 数组的索引方式,有些实现里通道号和数组下标不是一一对应的,CH3 可能映射到 index 2 而不是 3。如果传错了,读到的就是别的通道的状态。
classroom 发表于 2026-11-4 15:29 | 显示全部楼层
把断言暂时注释掉,用示波器或逻辑分析仪看 CH3 引脚有没有波形。有用户就是这么做的,注释后确认通道 3 和 4 都能正常输出,说明硬件配置没问题,纯粹是软件状态机的事。
cr315 发表于 2026-11-4 16:21 | 显示全部楼层
别在 HAL_TIM_OC_StartChannel 之前就调 HAL_TIM_Start。你代码里顺序是对的,但确认一下 mx_system_init() 里面有没有别的地方已经把定时器启动了,导致通道状态提前变了。
duo点 发表于 2026-11-4 16:59 | 显示全部楼层
CubeMX2 里通道 3 的 Channel direction 是不是选成了 Output?如果是 Input 或者没使能,HAL_TIM_OC_StartChannel 本来就不该被调用,断言失败反而是正确的保护。
flycamelaaa 发表于 2026-11-4 19:31 | 显示全部楼层
把 CubeMX2 工程删了重新生成一次。有用户就是这么解决的,重新生成后同样的代码跑起来完全不报断言了,之前的问题大概率是生成过程中某一步没同步导致的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

3166

主题

18450

帖子

31

粉丝
快速回复 在线客服 返回列表 返回顶部