打印
[STM32F1]

STM32CubeMX 生成文件中缺失中断代码的补救措施

[复制链接]
90|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jerry尧|  楼主 | 2025-3-3 22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32CubeMX 为 STM32F103 生成代码时,在“NVIC Configuration”中勾选了“DMA2 Stream0 global interrupt”,但是在stm32f1xx_hal_msp.cHAL_NVIC_EnableIRQ函数中没有添加相应的中断使能代码,可以按照以下步骤进行手动修改。
voidHAL_ADC_MspInit(ADC_HandleTypeDef* hadc){
GPIO_InitTypeDef GPIO_InitStruct;
if(hadc->Instance==ADC1)
{
...
HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn); // No Add
}
}

使用特权

评论回复
沙发
公羊子丹| | 2025-3-4 07:41 | 只看该作者
确实有时候 CubeMX 生成的代码会遗漏一些中断配置,手动补上是个好办法,不过每次重新生成代码时要注意别被覆盖了。

使用特权

评论回复
板凳
周半梅| | 2025-3-4 07:43 | 只看该作者
你在 NVIC 配置里勾选了中断,但是 stm32f1xx_hal_msp.c 里没生成 HAL_NVIC_EnableIRQ,会不会是 CubeMX 版本问题?可以试试换个版本看看。

使用特权

评论回复
地板
帛灿灿| | 2025-3-4 07:45 | 只看该作者
这个问题我也遇到过,除了手动添加 HAL_NVIC_EnableIRQ,还可以在 main.c 里再确认一下中断是否真的启用了。

使用特权

评论回复
5
童雨竹| | 2025-3-4 07:47 | 只看该作者
STM32F1 里没有 DMA2,应该是 DMA1_StreamX,是不是写错了?F1 系列的 DMA 通道命名和 F4 及以后的系列不太一样。

使用特权

评论回复
6
万图| | 2025-3-4 07:49 | 只看该作者
你试过在 CubeMX 里重新取消勾选再勾选一次中断配置吗?有时候 CubeMX 需要重新生成才能正确识别。

使用特权

评论回复
7
Wordsworth| | 2025-3-4 07:51 | 只看该作者
这种情况在 CubeMX 里并不少见,建议把 HAL_NVIC_EnableIRQ 放到 main.c 里,避免重新生成代码后被覆盖。

使用特权

评论回复
8
Bblythe| | 2025-3-4 07:53 | 只看该作者
这个问题可能和 HAL_ADC_MspInit 的调用时机有关,你可以加个 printf 试试看,这个函数是不是正常执行了?

使用特权

评论回复
9
Pulitzer| | 2025-3-4 07:57 | 只看该作者
你可以试试在 stm32f1xx_it.c 里手动添加 DMA2_Stream0_IRQHandler,然后看看中断是否真的触发了。

使用特权

评论回复
10
Uriah| | 2025-3-4 08:00 | 只看该作者
除了 HAL_NVIC_EnableIRQ,你有检查 HAL_NVIC_SetPriority 是否正确配置了吗?有时候优先级没设置对,中断也不会触发。

使用特权

评论回复
11
Clyde011| | 2025-3-4 08:02 | 只看该作者
这个问题挺常见的,如果经常遇到,建议手动写 NVIC 配置,别完全依赖 CubeMX 生成的代码,这样能更稳一些。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

7

帖子

0

粉丝