STM32 HAL库之库之DMA模式模式ADC
HAL_ADC_Init()
用户自行调用 加载ADC属性
//ADC句柄声明
ADC_HandleTypeDef AdcHandle;
AdcHandle.Instance = ADC1;
AdcHandle.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
AdcHandle.Init.LowPowerAutoWait = DISABLE;
AdcHandle.Init.LowPowerAutoPowerOff = DISABLE;
AdcHandle.Init.Resolution = ADC_RESOLUTION_10B;
AdcHandle.Init.ScanConvMode = ADC_SCAN_ENABLE; //扫描模式
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT; //右对齐
AdcHandle.Init.ContinuousConvMode = DISABLE; //不连续转换
AdcHandle.Init.DiscontinuousConvMode = DISABLE; //禁止不连续采样模式
AdcHandle.Init.ExternalTrigConv = ADC_SOFTWARE_START; //软件触发
AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;//外部触发规则
AdcHandle.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
AdcHandle.Init.DMAContinuousRequests = DISABLE; //DMA转换请求,指定DMA执行单次(当转换数达标时停止传送)or连
续请求模式;备注:连续模式:
//DMA必须配置为循环模式,否则当DMA buffer存满时将触发溢出; ENABLE or DISABLE
AdcHandle.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; //选择数据溢出时的行为:保存数据或覆盖数据;这个参数只
作用于规则组,包含DMA
//根据传递的参数初始化ADC外设
if (HAL_ADC_Init(&AdcHandle) != HAL_OK)
{
Error_Handler();
}
HAL_ADCEx_Calibration_Start()
自动校准ADC,调用即可
//开始校准
if (HAL_ADCEx_Calibration_Start(&AdcHandle) != HAL_OK)
{
Error_Handler();
}
HAL_ADC_ConfigChannel()
外设控制函数,动态配置外设参数,以下为配置规则组通道
//ADC通道配置结构声明
ADC_ChannelConfTypeDef sConfig;
//频道配置
//选择要转换的通道0
sConfig.Channel = ADC_CHANNEL_VBAT; //通道
sConfig.Rank = ADC_RANK_NONE;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
if (HAL_ADC_ConfigChannel(&AdcHandle, &sConfig) != HAL_OK)
{
Error_Handler();
}
自定义初始化自定义初始化
HAL_ADC_MspInit()
由HAL_ADC_Init()调用,对底层初始化,主要包括时钟,IO,DMA等,以下函数为DMA配置
void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)
{
static DMA_HandleTypeDef DmaHandle;
//启用外设和GPIO时钟
//使能ADC1 Periph时钟
__HAL_RCC_ADC1_CLK_ENABLE();
//启用DMA1时钟
__HAL_RCC_DMA1_CLK_ENABLE();
评论0