我正在尝试配置STM32F407VET6微控制器的ADC。我使用以下代码。
int main(void)
{
// GPIOF Clock enable
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOFEN;
// Analog modes on PF3, PF4, PF5, PF6, PF7, PF8
GPIOF->MODER = ( 3 << 16 ) | ( 3 << 14 ) | ( 3 << 12 ) | ( 3 << 10 ) | ( 3 << 8 ) | ( 3 << 6 );
// ADC3 Clock enable
RCC->APB2ENR |= RCC_APB2ENR_ADC3EN;
// ADC3 Sequence: ADC3_IN9, ADC3_IN14, ADC3_IN15, ADC3_IN4, ADC3_IN5, ADC3_IN6
ADC3->SQR3 = ( 9 << 0 ) | ( 14 << 5 ) | ( 15 << 10 ) | ( 4 << 15 ) | ( 5 << 20 ) | ( 6 << 25 );
// ADC3 Sequence length = 5
ADC3->SQR1 = ( 5 << 20 );
// 56 cycles time selection on all of ADC3 channels
ADC3->SMPR1 = ( 3 << 0 ) | ( 3 << 3 ) | ( 3 << 6 ) | ( 3 << 9 ) | ( 3 << 12 ) | ( 3 << 15 ) | ( 3 << 18 ) | ( 3 << 21 ) | ( 3 << 24 );
ADC3->SMPR2 = ( 3 << 0 ) | ( 3 << 3 ) | ( 3 << 6 ) | ( 3 << 9 ) | ( 3 << 12 ) | ( 3 << 15 ) | ( 3 << 18 ) | ( 3 << 21 ) | ( 3 << 24 ) | ( 3 << 27 );
// Continuous conversion
ADC3->CR2 |= ADC_CR2_CONT;
// EOC event after each conversion
ADC3->CR2 |= ADC_CR2_EOCS;
// Scan sequence
ADC3->CR1 |= ADC_CR1_SCAN;
// End-of-conversion interrupt enable
ADC3->CR1 |= ADC_CR1_EOCIE;
// Global ADC interrupt enable
NVIC_EnableIRQ (ADC_IRQn);
// Start conversion on ADC3
ADC3->CR2 |= ADC_CR2_SWSTART;
while(1) {}
}
int adc_data;
void ADC_IRQHandler(void) {
if(ADC3->SR & ADC_SR_EOC) {
ADC3->SR &= ~ADC_SR_EOC;
}
}
编译和固件之后,我在 ADC_IRQHandler 中断处理程序中放置了一个断点,并等待中断处理程序的输入被拦截。在我看来,每个通道的每次转换后,都应该调用一个中断处理程序。但没有进入处理程序,即使一次。 我在互联网上找不到配置我的 ADC 操作场景的示例,我已经重读了一周的手册并更改了代码 - 没有任何更改。可能是什么问题?