本帖最后由 yuanliangbeyond 于 2025-6-27 16:29 编辑
APM32F003F6P6芯片,ADC采集五个引脚的电压,实际只能读取到3个,原因不明.
- void ADC_Calibration(void){
- uint8_t i;
- int8_t offset = 0;
- uint16_t adcData = 0;
- ADC_SetOffset(0);
- ADC_EnableCompensation();
- ADC_ClearStatusFlag(ADC_FLAG_CC);
- ADC_Enable();
- ADC_StartConversion();
- for(i = 0; i < 10; i++) {
- while(ADC_ReadStatusFlag(ADC_FLAG_CC) == RESET);
- ADC_ClearStatusFlag(ADC_FLAG_CC);
- }
- ADC_Disable();
- adcData = ADC_ReadData();
- offset = (int8_t)(0x800 - adcData);
- ADC_SetOffset(offset);
- ADC_DisableCompensation();
- ADC_ClearStatusFlag(ADC_FLAG_CC);
- }
- void ADC_ContinuousScanInit(void){
- ADC_Config_T adcConfig;
- GPIO_Config_T gpioConfig;
- gpioConfig.intEn = GPIO_EINT_DISABLE;
- gpioConfig.mode = GPIO_MODE_IN_FLOATING;
- gpioConfig.pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_4| GPIO_PIN_3; //AIN0:PC5, AIN1:PC6,AIN2:PC4, AIN3:PD2--烧录口,AIN4:PD3,AIN5:PD5,AIN6:PD6,AIN7:PC3
- GPIO_Config(GPIOC, &gpioConfig);
- gpioConfig.pin = GPIO_PIN_3;
- GPIO_Config(GPIOD, &gpioConfig);
- ADC_SetMode(ADC_MODE_SINGLE_END);
- ADC_ConfigStructInit(&adcConfig);
- adcConfig.div = ADC_DIV_4;
- adcConfig.convMode = ADC_CONV_MODE_CONTINUOUS;
- adcConfig.scanMode = ADC_SCAN_MODE_ENABLE;
- adcConfig.interrupt = ADC_INT_CC;
- adcConfig.channel = ADC_CHANNEL_2; //ADC_CHANNEL_0 ADC_CHANNEL_1 ADC_CHANNEL_2
- ADC_Config(&adcConfig);
- ADC_Calibration();
- ADC_Enable();
- ADC_StartConversion();
- }
- void ADC_PollForConversion(void){
- uint16_t voltage = 0;
- uint16_t adcArray[10] = {0};
- uint8_t bufferIndex;
- SEGGER_RTT_printf(0, "===========ADC_PollForConversion===2222=======\r\n");
- if(ADC_ReadStatusFlag(ADC_FLAG_CC) == SET){
- // SEGGER_RTT_printf(0, "===========ADC_PollForConversion===55555=======\r\n");
- ADC_ClearStatusFlag(ADC_FLAG_CC);
- for(bufferIndex = 0; bufferIndex < 8; bufferIndex++){
- adcArray[bufferIndex] = ADC_ReadBufferData((ADC_BUFFER_IDX_T)(bufferIndex));
- }
- for(bufferIndex = 0; bufferIndex < 8; bufferIndex++){
-
- voltage = (adcArray[bufferIndex] * 3300) / 4095;
- // printf("ADC Channel %d Value:%d\r\n", bufferIndex, voltage);
- SEGGER_RTT_printf(0, "===========ADC_PollForConversion=1111==========ADC, Channel:%d, vol:%d \r\n",bufferIndex, voltage);
- }
- }
- }
|