2025-11-08 06:24:43
要停止STM32的AD转换得先关ADC时钟再禁用总中断。比如用RCC_APB2PeriphClockCmd把ADC时钟设为低功耗模式,再用NVIC_DisableIRQ总中断。转换完成后数据会存到寄存器里,这时候关中断就不会被其他程序干扰了。
为什么得先关时钟再关中断呢?因为ADC时钟一停转换就立刻停止,但中断没关的话CPU可能还在处理别的任务。比如NVIC总中断关闭后CPU不再响应其他中断请求,这时候ADC寄存器里的数据才不会乱掉。数据手册里写着ADC转换时间取决于时钟频率,时钟停了转换时间就归零。比如STM32F1的ADC1时钟如果从14MHz降到1MHz,转换时间从13.6μs变成13.6ms,但关时钟后转换时间直接变成0。而且总中断没关的话,比如在读取数据时突然来个外部中断,CPU会暂停ADC操作去处理中断,导致数据不准确。所以必须先关时钟让转换彻底结束,再关中断防止数据被覆盖。
本题链接: