ADC通道

文章目录

  • ADC简介
  • cubeMX配置
  • keil使用
  • HAL库
    • Handler
    • ADC状态控制函数
    • ADC DMA控制函数
    • ADC中断控制函数
    • 回调函数

ADC简介

ADC简介

cubeMX配置

ADC通道_第1张图片

  • ADCs_Common_Settings
    • Mode:ADC 模式

  • ADC_Settings
    • Data Alignment:数据对齐Right alignment 右对齐
    • Scan Conversion Mode:扫描模式
    • Continuous Conversion Mode:连续转换 / 单次转换
    • DiscontinuousConvMode:间断模式

  • ADC_Regular_ConversionMode
    • Enable Regular Conversions:使能规则组转换。
    • Number Of Conversion:ADC转换通道数目,有几个写几个就行。
    • External Trigger Conversion Source: 外部触发选择。
    • Rank:Channel ADC转换通道,Sampling Time 采样周期选择
  • ADC_Injected_ConversionMode:是否使能注入转换。注入通道只有在规则通道存在时才会出现。
  • WatchDog:是否使能模拟看门狗中断。当被 ADC 转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断。

ADC通道_第2张图片

  • ADC时钟分频为6 / 8

keil使用

cubeMX自动生成hadcx结构体

  • 初始化ADC

在进入循环前、ADC初始化之后进行ADC校准。

HAL_ADCEx_Calibration_Start(&hadc1);    //ADC校准
HAL_ADC_Start_IT(&hadc1); //开启ADC转换

  • 轮询的方式(一般为单通道)
    1. 开启ADC
      HAL_ADC_Start()
    2. 等待ADC转换结束
      HAL_ADC_PollForConversion()
    3. 获取ADC转换值
      HAL_ADC_GetValue()
    4. 停止ADC
      HAL_ADC_Stop()

  • 中断的方式
    1. 先在main.c中定义一个保存ADC值的变量修饰为const volatile uint32_t。
    2. 然后,在回调函数中读取ADC的值,所以需要extern那个定义在mian.c里的变量。
    extern __IO uint32_t ADC_ConvertedValue;
    
    void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
    {
        ADC_ConvertedValue = HAL_ADC_GetValue(hadc);
    }
    
    1. 开启ADC和中断
      HAL_ADC_Start_IT()
    2. 结束ADC和中断
      HAL_ADC_Stop_IT()

  • DMA方式

    1. 开启ADC和DMA
    //
    //
    HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length)
    
    1. 停止DMA
      HAL_ADC_Stop_DMA()

HAL库

Handler

typedef struct __ADC_HandleTypeDef
{
  ADC_TypeDef                   *Instance;              /*!< Register base address */
  ADC_InitTypeDef               Init;                   /*!< ADC required parameters */
  DMA_HandleTypeDef             *DMA_Handle;            /*!< Pointer DMA Handler */
  HAL_LockTypeDef               Lock;                   /*!< ADC locking object */
  __IO uint32_t                 State;                  /*!< ADC communication state (bitmap of ADC states) */
  __IO uint32_t                 ErrorCode;              /*!< ADC Error code */
  void (* ConvCpltCallback)(struct __ADC_HandleTypeDef *hadc);              /*!< ADC conversion complete callback */
  void (* ConvHalfCpltCallback)(struct __ADC_HandleTypeDef *hadc);          /*!< ADC conversion DMA half-transfer callback */
  void (* LevelOutOfWindowCallback)(struct __ADC_HandleTypeDef *hadc);      /*!< ADC analog watchdog 1 callback */
  void (* ErrorCallback)(struct __ADC_HandleTypeDef *hadc);                 /*!< ADC error callback */
  void (* InjectedConvCpltCallback)(struct __ADC_HandleTypeDef *hadc);      /*!< ADC group injected conversion complete callback */       /*!< ADC end of sampling callback */
  void (* MspInitCallback)(struct __ADC_HandleTypeDef *hadc);               /*!< ADC Msp Init callback */
  void (* MspDeInitCallback)(struct __ADC_HandleTypeDef *hadc);             /*!< ADC Msp DeInit callback */
}ADC_HandleTypeDef;

ADC状态控制函数

HAL_StatusTypeDef       HAL_ADC_Start(ADC_HandleTypeDef* hadc);
HAL_StatusTypeDef       HAL_ADC_Stop(ADC_HandleTypeDef* hadc);
HAL_StatusTypeDef       HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);
HAL_StatusTypeDef       HAL_ADC_PollForEvent(ADC_HandleTypeDef* hadc, uint32_t EventType, uint32_t Timeout);

HAL_StatusTypeDef       HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConfTypeDef* sConfig);
HAL_StatusTypeDef       HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef* hadc, ADC_AnalogWDGConfTypeDef* AnalogWDGConfig);

uint32_t                HAL_ADC_GetValue(ADC_HandleTypeDef* hadc);
uint32_t HAL_ADC_GetState(ADC_HandleTypeDef* hadc);
void ADC_StabilizationTime(uint32_t DelayUs);
uint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc);

ADC DMA控制函数

HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);
HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc);
void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma);
void ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma);
void ADC_DMAError(DMA_HandleTypeDef *hdma);

ADC中断控制函数

HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);
HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc);

回调函数

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);
void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc);
void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc);
void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc);

HAL_StatusTypeDef HAL_ADC_RegisterCallback(ADC_HandleTypeDef *hadc, HAL_ADC_CallbackIDTypeDef CallbackID, pADC_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_ADC_UnRegisterCallback(ADC_HandleTypeDef *hadc, HAL_ADC_CallbackIDTypeDef CallbackID);




                                     ------ BY Flier

2023.10.5

你可能感兴趣的:(#,HAL库,arm开发,单片机,c语言,stm32,嵌入式硬件)