本次使用STM32F072芯片,使用CubeIDE开发环境.
在CubeMX里配置好ADC和DMA后,选择HAL模式生成代码.
需要手动将LL驱动拷贝到项目的HAL_Driver文件夹中,并进行包含操作.
#include "stm32f0xx_ll_adc.h"
#include "stm32f0xx_ll_dma.h"
在主程序中需要进行的配置如下:
配置DMA目标内存地址,传输数据长度,外设地址,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序列转换,所以选择ADC中断为EOS(End Of Sequence).
需要实现的中断Callback为:DMA传输完成,ADC序列转换完成.
网友评论