无锡网站设,福步外贸,短视频营销成功案例,网站开发的英文文献STM32 ADC — DMA乒乓缓存 文章目录 STM32 ADC --- DMA乒乓缓存软件切换实现乒乓利用DMA双缓冲实现乒乓 通过cubeMX配置生成HAL工程这里使用的是上篇文章#xff08;STM32 ADC — DMA采样#xff09;中生成的工程配置
软件切换实现乒乓
cubeMX默认生成的工程中是打开DMA中断…STM32 ADC — DMA乒乓缓存 文章目录 STM32 ADC --- DMA乒乓缓存软件切换实现乒乓利用DMA双缓冲实现乒乓 通过cubeMX配置生成HAL工程这里使用的是上篇文章STM32 ADC — DMA采样中生成的工程配置
软件切换实现乒乓
cubeMX默认生成的工程中是打开DMA中断的这章我们需要用到该中断固不要将该中断关闭对于上节的配置使用将DMA中断关闭也是可以正常工作的。
DMA在传输完成时会调用void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)该回调函数
#define SAMPLE_NUM 10
#define CHANNEL_NUM 2
uint16_t adc_converted_value[SAMPLE_NUM][CHANNEL_NUM]; //行表示存储的ADC数据个数列表示对应的通道uint16_t adc_converted_value2[SAMPLE_NUM][CHANNEL_NUM];//注意这里不能关闭DMA中断
//HAL_NVIC_DisableIRQ(DMA2_Stream0_IRQn);
HAL_ADC_Start_DMA(hadc1, (uint32_t *)adc_converted_value, SAMPLE_NUM*CHANNEL_NUM);// 中断回调函数DMA传输完成时会自动调用该函数
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {if(hadc-Instance ADC1) {static uint32_t cnt 0;cnt;if(cnt 0x1) {//切换DMA内存地址HAL_ADC_Stop_DMA(hadc1);HAL_ADC_Start_DMA(hadc1, (uint32_t *)adc_converted_value2, SAMPLE_NUM*CHANNEL_NUM);//TODO: 数据处理} else {//切换DMA内存地址HAL_ADC_Stop_DMA(hadc1);HAL_ADC_Start_DMA(hadc1, (uint32_t *)adc_converted_value, SAMPLE_NUM*CHANNEL_NUM);// TODO: 数据处理}}
}利用DMA双缓冲实现乒乓
参考文章https://shequ.stmicroelectronics.cn/thread-625398-1-1.html