打印
[STM32F2]

定时器在中断模式下触发 ADC 转换,转换完成后触发ADC中断

[复制链接]
114|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhouyou99|  楼主 | 2025-3-31 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用定时器中断触发 adc开始转换,转换完成后调用 ADC IRQ 处理程序。

目前可以进入定时器中断,但是还没有成功进入ADC中断程序。

请教这种中断嵌套想法是否可行?需要什么样的操作流程?

使用特权

评论回复
沙发
梅花香自123| | 2025-3-31 22:55 | 只看该作者
可以通过 HAL_ADC_GetValue() 获取 ADC 转换结果,并进行后续处理。

使用特权

评论回复
板凳
公羊子丹| | 2025-4-1 07:34 | 只看该作者
你的 ADC 中断开启了吗?检查 HAL_NVIC_EnableIRQ(ADC_IRQn); 是否调用,并且优先级是否合适。

使用特权

评论回复
地板
周半梅| | 2025-4-1 07:35 | 只看该作者
你用的是 HAL_ADC_Start_IT() 吗?如果用的是 HAL_ADC_Start(),它不会触发中断,需要手动查询转换完成标志。

使用特权

评论回复
5
帛灿灿| | 2025-4-1 07:36 | 只看该作者
你的 ADC 转换模式是 单次 还是 连续?如果是 单次,记得每次都要重新启动 HAL_ADC_Start_IT()。

使用特权

评论回复
6
童雨竹| | 2025-4-1 07:37 | 只看该作者
你的 ADC 触发源设置对了吗?定时器 TRGO 需要配置为 Update Event,然后 ADC 触发源选择 TIMx_TRGO。

使用特权

评论回复
7
万图| | 2025-4-1 07:38 | 只看该作者
你在 HAL_ADC_ConvCpltCallback() 里加了 printf 或 HAL_GPIO_TogglePin() 了吗?有可能中断触发了但你没看到。

使用特权

评论回复
8
Wordsworth| | 2025-4-1 07:39 | 只看该作者
试试手动触发 ADC 看看能不能进入 ADC 中断?如果 HAL_ADC_Start_IT() 直接调用能触发中断,那说明 TIM 触发有问题。

使用特权

评论回复
9
Bblythe| | 2025-4-1 07:39 | 只看该作者
你有没有打开 ADC 的 EOC 标志?ADC->CR2 |= ADC_CR2_EOCS; 让它在每次转换完成后触发 EOC 中断。

使用特权

评论回复
10
Pulitzer| | 2025-4-1 07:40 | 只看该作者
你的 ADC 是用 DMA 还是 普通 模式?如果用了 DMA,它不会触发 EOC,需要看 HAL_ADC_ConvHalfCpltCallback()。

使用特权

评论回复
11
Uriah| | 2025-4-1 07:41 | 只看该作者
ADC_IRQHandler() 有没有被正确重定向?检查 startup_stm32f2xx.s 里 ADC_IRQHandler 对应的是不是你的 ADC 处理函数。

使用特权

评论回复
12
Clyde011| | 2025-4-1 07:42 | 只看该作者
试试提高 ADC 中断的 NVIC 优先级,让它比 TIM 更高,可能是 TIM 中断占用了太长时间导致 ADC 中断无法进入。

使用特权

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

本版积分规则

6

主题

6

帖子

0

粉丝