我在一个项目上工作,我想使用ADC转换(我在stm32L476上工作),但我正在努力使用我的代码 . 我的目标是在地面和我的3.3引脚之间放一个电位器,然后用Putty在PA1上看到结果 . 这是我的ADC初始化的代码:
void BSP_Threshold_Init(){
//Enable GPIOA clock
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN;
//Configure PA1 as input
GPIOA->MODER &= ~GPIO_MODER_MODE1_Msk;
GPIOA->MODER |= (0x00 <<GPIO_MODER_MODE1_Pos);
// Enable ADC clock
RCC->APB2ENR |= RCC_AHB2ENR_ADCEN;
// Reset ADC configuration
ADC1->CR = 0x00000000;
ADC1->CFGR = 0x00000000;
ADC1->CFGR2 = 0x00000000;
ADC1->SQR1 = 0x00000000;
ADC123_COMMON->CCR = 0x00000000;
// Enable continuous conversion mode
ADC1->CFGR |= ADC_CFGR_CONT;
// 12-bit resolution
ADC1->CFGR |= (0x00 <<ADC_CFGR_RES_Pos);
// Set sampling time to 24.5 ADC clock cycles
ADC1->SMPR1 |= (0x03 << 0U);
// Choose the number of conversion (here 1)
ADC1->SQR1 |= (0x00 << 0U);
//Choose the channel of the first conversion
ADC1->SQR1 |= (0x01 << 6U);
//// Select HCLK/1 as ADC clock
ADC123_COMMON->CCR |= (0x01 <<ADC_CCR_CKMODE_Pos);
// Enable ADC
ADC1->CR |= ADC_CR_ADEN;
// Start conversion
ADC1->CR |= ADC_CR_ADSTART;
}
然后在我的主要部分,我想在Putty上打印我的ADC的 Value (我和Putty一起工作过几次,所以我觉得这里没有问题) .
这是我主要的代码部分:
while(1)
{
// Wait here until ADC EOC
while ((ADC1->ISR & ADC_ISR_EOC) != ADC_ISR_EOC);
// Report result to console
my_printf("ADC value = %x\r\n", ADC1->DR);
// Wait about 200ms
for (i=0; i<500000; i++);
}
我在初始阶段使用my_printf打印了其他内容,但是当进行循环时,没有任何内容出现 . 你有什么我可以做错的线索吗?我不知道我的问题是来自我的ADC配置,还是来自我的时钟配置或我在主电源中等待ADC转换的方式 .
提前致谢 .