使用 STM32G431KB 连续转换模式的单通道 ADC。程序卡在进行校准的 while 循环中。还注意到ADC12_Common寄存器没用0b0001的值、即 clock 二分频。我从 PLLP 分频器分出42.5MHz 给ADC提供时钟。
void Initialization(void){ RCC->AHB2ENR |= RCC_AHB2ENR_GPIOBEN | RCC_AHB2ENR_ADC12EN; GPIOB->MODER |= GPIO_MODER_MODER0; //Set PB0 as Analog ADC12_COMMON->CCR |= (0b0001 << ADC_CCR_PRESC_Pos); //ADC Clock divided by 2 ADC1->CR &= ~(ADC_CR_DEEPPWD); //Disable ADC Deep-Power-Down mode ADC1->CR |= ADC_CR_ADVREGEN; //Enable ADC Voltage Regulator DummyDelay(5000); ADC1->CR &= ~(ADC_CR_ADEN); //Disable ADC ADC1->CR &= ~(ADC_CR_ADCALDIF); //Single Ended Mode Calibration ADC1->CR |= ADC_CR_ADCAL; //Start Calibration while(ADC1->CR & ADC_CR_ADCAL); //Wait Until Calibration Complete ADC1->CFGR |= ADC_CFGR_CONT; //ADC continuous mode ADC1->CFGR &= ~(ADC_CFGR_RES); //12-bit ADC ADC1->SQR1 |= (1 << ADC_SQR1_L_Pos) | (15 << ADC_SQR1_SQ1_Pos); // Only 1 conversion for ADC channel 15 ADC1->CR |= ADC_CR_ADEN; //Enable ADC while(!(ADC1->ISR & ADC_ISR_ADRDY)); //Wait Until ADC Enables }
|