美文网首页
2021-03-16 ADC联合DMA,使用HAL和LL混合编程

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

作者: SavageZ | 来源:发表于2021-03-16 13:48 被阅读0次

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

相关文章

网友评论

      本文标题:2021-03-16 ADC联合DMA,使用HAL和LL混合编程

      本文链接:https://www.haomeiwen.com/subject/yucdcltx.html