您现在的位置: 主页 > MCU > 单片机技术应用 > STM32F0 ADC学习 -
本文所属标签:
为本文创立个标签吧:

STM32F0 ADC学习 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-07 

[导读]
开始时候使用的是stdlib的库,最近发现cube库用的越来越广泛了,遂开始使用cube库来完成ADC的多通道采集实验。 ADC 的driver 在STM32F0XX_HAL_DRIVER当中,有stm32f0xx_hal_adc.c文件中,我们可以在stm

 

本文引用地址: http://www.21ic.com/app/mcu/201804/764238.htm

开始时候使用的是stdlib的库,最近发现cube库用的越来越广泛了,遂开始使用cube库来完成ADC的多通道采集实验。

ADC 的driver 在STM32F0XX_HAL_DRIVER当中,有stm32f0xx_hal_adc.c文件中,我们可以在stm32f0xx_hal_conf.h中开启 宏定义 ADC 模块。

 

ADC有三种工作模式,polling\ interrupt\DMA

 

 

我这里使用了polling的方式来获取多通道的数据。

 

 

首先是要声明两个参数设置的结构体

 

ADC_HandleTypeDef AdcHandle;

ADC_ChannelConfTypeDef sConfig;

 

[cpp] view plain copy

AdcHandle.Instance = ADC1;

 

AdcHandle.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;

AdcHandle.Init.LowPowerAutoWait = DISABLE;

AdcHandle.Init.LowPowerAutoPowerOff = DISABLE;

AdcHandle.Init.Resolution = ADC_RESOLUTION_12B;

AdcHandle.Init.ScanConvMode = ADC_SCAN_ENABLE;

AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;

AdcHandle.Init.ContinuousConvMode = ENABLE;

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;//

AdcHandle.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;

 

/* Initialize ADC peripheral according to the passed parameters */

if (HAL_ADC_DeInit(&AdcHandle) != HAL_OK)

{

Error_Handler();

}

 

if (HAL_ADC_Init(&AdcHandle) != HAL_OK)

{

Error_Handler();

}

 

/* ### - 2 - Start calibration ############################################ */

if (HAL_ADCEx_Calibration_Start(&AdcHandle) != HAL_OK)

{

Error_Handler();

}

 

基本的参数设置

 

比较重要的参数有ADC clock设置,sample cycle,ADC分辨率,多通道 scan mode设置。

 

ADC clock 有两个时钟源可以选择,一个是内部的14MHZ的时钟,,另一个为APB的时钟 最大为14MHZ.

 

get_ADC_value 为读取AD值的模块,形参为通道,输入通道名称得到该通道对应的AD值。

 

 

float get_ADC_value(uint32_t channel)

{

// uint32_t nResultDMA;

float temp;

start_adc();

config_channel(channel);

 

HAL_ADC_Start(&AdcHandle);

HAL_ADC_PollForConversion(&AdcHandle,1);

 

temp=HAL_ADC_GetValue(&AdcHandle);

HAL_ADC_Stop(&AdcHandle);

//temp=temp*3/4096;

return temp;

 

}

 

 



              查看评论 回复



 

"STM32F0 ADC学习 -"的相关文章

网站地图

围观()