1.cubemx配置
cubemx版本:v6.1.1
注:配置信息含义,可参见https://blog.csdn.net/qq_43225938/article/details/84098810(如有侵权,请联系删除)
DMA配置
注:DMA不是自动添加的,需要先手动点击“add”,添加DMA通道
NVIC中全局中断最好不用打开,否则会频繁进中断,影响程序循环。
2.程序设置
2.1 ADC的初始化,和DMA的初始化,cubemx已自动添加
2.2需要手动开启ADC和DMA
#define ADC_DATA_LEN 12
uint16_t adcConvertedValue[ADC_DATA_LEN];
void ADC_DMA_INIT(void)
{
/* Set DMA transfer addresses of source and destination */
LL_DMA_ConfigAddresses(DMA2,
LL_DMA_STREAM_0,
LL_ADC_DMA_GetRegAddr(ADC1, LL_ADC_DMA_REG_REGULAR_DATA),
(uint32_t)&adcConvertedValue,
LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
/* Set DMA transfer size */
LL_DMA_SetDataLength(DMA2,LL_DMA_STREAM_0,ADC_DATA_LEN);
/* Enable the DMA transfer */
LL_DMA_EnableStream(DMA2,LL_DMA_STREAM_0);
LL_ADC_Enable(ADC1);
/* Start ADC group regular conversion */
LL_ADC_REG_StartConversionSWStart(ADC1);
LL_ADC_REG_SetDMATransfer(ADC1,LL_ADC_REG_DMA_TRANSFER_UNLIMITED);
}
LL_DMA_ConfigAddresses:配置DMA,将DMA与ADC1链接到一起
LL_DMA_SetDataLength:设置DMA的长度,与存储ADC值得数组长度相等
LL_DMA_EnableStream:使能DMA传输
LL_ADC_Enable:打开ADC
LL_ADC_REG_StartConversionSWStart:启动ADC组常规转换,SWStart 与cubmx配置中 ADCs_Regular_ConversionMode 的 External Trigger Conversion Source ADC相对应
LL_ADC_REG_SetDMATransfer:设置ADC组常规转换数据传输
2.3读取ADC值
uint8_t adcVoltPut(void)
{
float vdd = 0.0f;
vdd = __LL_ADC_CALC_DATA_TO_VOLTAGE(VDDA_APPLI,adcConvertedValue[0],LL_ADC_RESOLUTION_12B);
PrintLog(1,"VDD = %2.4f\r\n",vdd / 1000.0);
return 0;
}
这里只读了adcConvertedValue的第一个数,实际上,adcConvertedValue数组里边的数是在一直被DMA刷新的。