我是靠谱客的博主 花痴萝莉,最近开发中收集的这篇文章主要介绍hal库模拟量_【HAL库每天一例】第023例:ADC-多通道采集(DMA),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

/* 包含头文件 ----------------------------------------------------------------*/

#include "adc/bsp_adc.h"

/* 私有类型定义 --------------------------------------------------------------*/

/* 私有宏定义 ----------------------------------------------------------------*/

/* 私有变量 ------------------------------------------------------------------*/

ADC_HandleTypeDef hadcx;

DMA_HandleTypeDef hdma_adcx;

/* 扩展变量 ------------------------------------------------------------------*/

/* 私有函数原形 --------------------------------------------------------------*/

/* 函数体 --------------------------------------------------------------------*/

/**

* 函数功能: AD转换初始化

* 输入参数: 无

* 返 回 值: 无

* 说    明:无

*/

void MX_ADCx_Init(void)

{

ADC_ChannelConfTypeDef sConfig;

// ADC功能配置

hadcx.Instance = ADCx;

hadcx.Init.ScanConvMode = ADC_SCAN_ENABLE;

hadcx.Init.ContinuousConvMode = ENABLE;

hadcx.Init.DiscontinuousConvMode = DISABLE;

hadcx.Init.ExternalTrigConv = ADC_SOFTWARE_START;

hadcx.Init.DataAlign = ADC_DATAALIGN_RIGHT;

hadcx.Init.NbrOfConversion = ADC_NUMOFCHANNEL;

HAL_ADC_Init(&hadcx);

// 配置采样通道

sConfig.Channel = ADC_CHANNEL1;

sConfig.Rank = 1;

sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5;

HAL_ADC_ConfigChannel(&hadcx, &sConfig);

// 配置采样通道

sConfig.Channel = ADC_CHANNEL2;

sConfig.Rank = 2;

HAL_ADC_ConfigChannel(&hadcx, &sConfig);

// 配置采样通道

sConfig.Channel = ADC_CHANNEL3;

sConfig.Rank = 3;

HAL_ADC_ConfigChannel(&hadcx, &sConfig);

// 配置采样通道

sConfig.Channel = ADC_CHANNEL4;

sConfig.Rank = 4;

HAL_ADC_ConfigChannel(&hadcx, &sConfig);

}

/**

* 函数功能: ADC外设初始化配置

* 输入参数: hadc:AD外设句柄类型指针

* 返 回 值: 无

* 说    明: 该函数被HAL库内部调用

*/

void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)

{

GPIO_InitTypeDef GPIO_InitStruct;

if(hadc->Instance==ADCx)

{

/* 外设时钟使能 */

ADCx_RCC_CLK_ENABLE();

/* AD转换通道引脚时钟使能 */

ADC_GPIO_ClK_ENABLE();

/* DMA时钟使能 */

DMAx_RCC_CLK_ENABLE();

/* AD转换通道引脚初始化 */

GPIO_InitStruct.Pin = ADC_GPIO_PIN1|ADC_GPIO_PIN2|ADC_GPIO_PIN3|ADC_GPIO_PIN4;

GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;

HAL_GPIO_Init(ADC_GPIO, &GPIO_InitStruct);

/* DMA外设初始化配置 */

hdma_adcx.Instance = ADC_DMAx_CHANNELn;

hdma_adcx.Init.Direction = DMA_PERIPH_TO_MEMORY;

hdma_adcx.Init.PeriphInc = DMA_PINC_DISABLE;

hdma_adcx.Init.MemInc = DMA_MINC_ENABLE;

hdma_adcx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;

hdma_adcx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;

hdma_adcx.Init.Mode = DMA_CIRCULAR;

hdma_adcx.Init.Priority = DMA_PRIORITY_HIGH;

HAL_DMA_Init(&hdma_adcx);

/* 连接DMA */

__HAL_LINKDMA(hadc,DMA_Handle,hdma_adcx);

/* 外设中断优先级配置和使能中断 */

HAL_NVIC_SetPriority(ADC_DMAx_CHANNELn_IRQn, 0, 0);

HAL_NVIC_EnableIRQ(ADC_DMAx_CHANNELn_IRQn);

}

}

/**

* 函数功能: ADC外设反初始化配置

* 输入参数: hadc:AD外设句柄类型指针

* 返 回 值: 无

* 说    明: 该函数被HAL库内部调用

*/

void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)

{

if(hadc->Instance==ADCx)

{

/* 禁用ADC外设时钟 */

ADCx_RCC_CLK_DISABLE();

/* AD转换通道引脚反初始化 */

HAL_GPIO_DeInit(ADC_GPIO, ADC_GPIO_PIN1|ADC_GPIO_PIN2|ADC_GPIO_PIN3|ADC_GPIO_PIN4);

/* DMA外设反初始化*/

HAL_DMA_DeInit(hadc->DMA_Handle);

}

}

最后

以上就是花痴萝莉为你收集整理的hal库模拟量_【HAL库每天一例】第023例:ADC-多通道采集(DMA)的全部内容,希望文章能够帮你解决hal库模拟量_【HAL库每天一例】第023例:ADC-多通道采集(DMA)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部