0
私は非常に奇妙な問題があります。私は3つのプロジェクトで同じマイクロを使用します。それらのうちの2つは、HSIクロックソース、1つのHSEを使用します。電源はまったく同じ方法で供給されます。 HSIのものは何の問題もなくADCキャリブレーションを通過しますが、HSEは邪魔になります。まったく同じ初期化手順。私が読んで、レジスタから書くことができるようADCは間違いなく動作しますが、私は、ADCの測定値を取得していますが、ループは、あなたが意味するものではありませんが、私はあなたにSTM32F303 ADCがキャリブレーションでスタックする
static inline void ADCCalibration(ADC_TypeDef *ADC) {
uint32_t start = HAL_GetTick();
ADC -> CR |= ADC_CR_ADCAL;
while((ADC1 -> CR & ADC_CR_ADCAL)) {
if((HAL_GetTick() - start) > ADC_CAL_TIMEOUT) {
__BKPT();
}
}
}
__HAL_RCC_ADC12_CLK_ENABLE();
__HAL_RCC_ADC34_CLK_ENABLE();
ADC1 -> DIFSEL = 0;
ADC2 -> DIFSEL = 0;
ADC3 -> DIFSEL = 0;
ADC4 -> DIFSEL = 0;
while(ADC1 -> DIFSEL || ADC2 -> DIFSEL || ADC3 -> DIFSEL || ADC4 -> DIFSEL);
ADC1 -> CR &= ~(ADC_CR_ADVREGEN_Msk);
ADC1 -> CR |= ADC_CR_ADVREGEN_0;
ADC2 -> CR &= ~(ADC_CR_ADVREGEN_Msk);
ADC2 -> CR |= ADC_CR_ADVREGEN_0;
ADC3 -> CR &= ~(ADC_CR_ADVREGEN_Msk);
ADC3 -> CR |= ADC_CR_ADVREGEN_0;
ADC4 -> CR &= ~(ADC_CR_ADVREGEN_Msk);
ADC4 -> CR |= ADC_CR_ADVREGEN_0;
__ADC_Delay();
ADCCalibration(ADC1);
ADCCalibration(ADC2);
ADCCalibration(ADC3);
ADCCalibration(ADC4);
ADC1 -> CR |= ADC_CR_ADEN;
ADC2 -> CR |= ADC_CR_ADEN;
ADC3 -> CR |= ADC_CR_ADEN;
ADC4 -> CR |= ADC_CR_ADEN;
はい。まあ見つけました:)しかしそれは問題ではありませんでした。問題はPLLとADCのクロック設定にありました。このマイクロは、ADCがデュアルクロックドメインアーキテクチャを備えているため、いくつかの追加設定が必要です。今それは動作します。 –