2021-03-16 ADC联合DMA,使用HAL和LL混合编程

本次使用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序列转换完成.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容