本次使用STM32F072芯片,使用CubeIDE開發(fā)環(huán)境.
在CubeMX里配置好ADC和DMA后,選擇HAL模式生成代碼.
需要手動將LL驅(qū)動拷貝到項目的HAL_Driver文件夾中,并進行包含操作.
#include "stm32f0xx_ll_adc.h"
#include "stm32f0xx_ll_dma.h"
在主程序中需要進行的配置如下:
配置DMA目標內(nèi)存地址,傳輸數(shù)據(jù)長度,外設(shè)地址,DMA中斷.
LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1, (uint32_t)&arrayValueAdcConvertRaw);
LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1, LL_ADC_DMA_GetRegAddr(ADC1, LL_ADC_DMA_REG_REGULAR_DATA));
LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, ADC_CONVERT_BUFFER_SIZE);
LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_LIMITED);
配置ADC中斷.
開啟DMA通道,開啟DMA中斷,開啟ADC中斷.
/* ADC interrupt*/
LL_ADC_EnableIT_EOS(ADC1);
/* Enable DMA*/
LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
校準ADC.
while(HAL_ADCEx_Calibration_Start(&hadc) != HAL_OK)
{
Error_Handler();
}
開啟ADC
LL_ADC_Enable(ADC1);
本次使用了2通道ADC序列轉(zhuǎn)換,所以選擇ADC中斷為EOS(End Of Sequence).
需要實現(xiàn)的中斷Callback為:DMA傳輸完成,ADC序列轉(zhuǎn)換完成.