1. 程式人生 > >STM32L073RZ進行兩路AD電壓訊號採集(非DMA方式)

STM32L073RZ進行兩路AD電壓訊號採集(非DMA方式)

使用STM32L073RZ除錯兩路AD電壓訊號採集,剛開始用DMA方式,發現開啟DMA轉換USB虛擬串列埠無法識別。現在想不通過DMA方式來進行兩路AD電壓訊號採集。單路讀取方法為
aADCxConvertedData = HAL_ADC_GetValue(&hadc);
兩路AD電壓訊號採集(非DMA方式)為:使用非連續轉換,每次配置某個通道 、然後啟動ADC,讀取資料;再開啟另一通道,啟動ADC,讀取資料。
部分程式為:

static uint16_t   aADCxConvertedData[2];
static void MX_ADC_Init(void)
{
  hadc.Instance
= ADC1; hadc.Init.OversamplingMode = DISABLE; hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV1; hadc.Init.Resolution = ADC_RESOLUTION_12B; hadc.Init.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD; hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc.Init.ContinuousConvMode = DISABLE; hadc.Init.DiscontinuousConvMode = ENABLE; hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc.Init.DMAContinuousRequests = DISABLE; hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED; hadc.Init
.LowPowerAutoWait = DISABLE; hadc.Init.LowPowerFrequencyMode = DISABLE; hadc.Init.LowPowerAutoPowerOff = DISABLE; if (HAL_ADC_Init(&hadc) != HAL_OK) { Error_Handler(); } /**Configure for the selected ADC regular channel to be converted. */ // sConfig.Channel = ADC_CHANNEL_8; // sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; // if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) // { // Error_Handler(); // } // /**Configure for the selected ADC regular channel to be converted. // */ // sConfig.Channel = ADC_CHANNEL_9; // if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) // { // Error_Handler(); // } } int main(void) { HAL_Init(); /* Configure the system clock */ SystemClock_Config(); BSP_LED_Init(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_ADC_Init(); while (1) { sConfig.Channel = ADC_CHANNEL_8; sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) { Error_Handler(); } if (HAL_ADC_Start(&hadc) != HAL_OK) { Error_Handler(); } aADCxConvertedData[0] = HAL_ADC_GetValue(&hadc); sConfig.Channel = ADC_CHANNEL_9; if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) { Error_Handler(); } if (HAL_ADC_Start(&hadc) != HAL_OK) { Error_Handler(); } aADCxConvertedData[1] = HAL_ADC_GetValue(&hadc); } }