HAL库ADC的DMA采集

1.利用CubeMX配置ADC

(1)我这里用的是F103的芯片,配置PC4(ADC1_IN14)为检测引脚

(2)配置ADC时钟,要小于14MHz

(3)配置ADC参数,选择需要的模式,我这里只有一个通道

(4)配置DMA,数据传递为外设到存储器,单次模式(转换完成后结束,再次使用需要重新开启),循环模式(连续转换),数据位选半字,外设地址不递增,内存地址看情况(这里选递增)。



2.编程中用到的函数


HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length)
//开启ADC的DMA转换,在这个函数里面,包含三个子函数HAL_ADC_Start,HAL_DMA_Start,SET_BIT(hadc1.Instance->CR2, ADC_CR2_DMA)(使能ADC的DMA功能,ADC_DMA_ENABLE)
HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc)
//停止DMA的采集
注意:如果DMA采用的Normal模式,上面的两个函数都应该写进while里,如果采用的Circular模式,则只用在while外面写一次。另外,我用stm32l151芯片时,这两个函数必须成对出现才能采集到正确的数据,而用stm32f103时,则不需要使用HAL_ADC_Stop_DMA


3.代码实现






4.补充说明


如果程序阻塞在HAL_ADC_Start_DMA()里面,可能是一直再进DMA中断,可以将DMA的NVIC使能的代码注释掉,能够解决问题

猜你喜欢

转载自www.cnblogs.com/yf4695/p/10016351.html