历史上的今天
今天是:2024年10月09日(星期三)
2019年10月09日 | STM32F0 ADC学习
2019-10-09 来源:eefocus
开始时候使用的是stdlib的库,最近发现cube库用的越来越广泛了,遂开始使用cube库来完成ADC的多通道采集实验。
ADC 的driver 在STM32F0XX_HAL_DRIVER当中,有stm32f0xx_hal_adc.c文件中,我们可以在stm32f0xx_hal_conf.h中开启 宏定义 ADC 模块。
ADC有三种工作模式,polling interruptDMA
我这里使用了polling的方式来获取多通道的数据。
首先是要声明两个参数设置的结构体
ADC_HandleTypeDef AdcHandle;
ADC_ChannelConfTypeDef sConfig;
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;
}
下一篇:stm32中ADC初始化程序
史海拾趣
|
四、报价管理 1、设计流程 技术进行方案设计并确认所需设备的要求,统筹按技术提供信息在资料库中查询相关产品并生成设备清单与底价单与报价单,业务对方案与报价进行审核以确定符合客户与公司利益 2、目前状况 有一个同事比较熟悉安防市场,对 ...… 查看全部问答> |
|
用超级终端和DNW都一样,可以肯定不是波特率设置不对,因为我用的是默认的波特率,读入正常,就是可以正确的读取开发板上的信息,但是输入信息的时候显示是乱码。 如输入N显示的是L输入A显示的是@回车相当于删除~~~空格没反应 我输入命令NAND FLA ...… 查看全部问答> |
|
恩智浦高速低功耗ARM Cortex-M3微控制器 - LPC1700 [问:zyw] PWM的输出边沿和中心方式,是固定的还是可选择? [答:George] 是可以选择的。 [2009-6-18 10:25:07] [问:ningzb] 你好,我们正在做一个电力系统的设备,现在正在选型,一直关注LPC17系列,现在急需1.知道的是 ...… 查看全部问答> |
|
proteus单片机仿真教程大全 视频 文档 从入门到精通proteus单片机教程大全 视频 文档 从入门到精通网上收录来了很多proteus仿真的教程资料,在这里跟大家共享一下,有需要的下载看一看吧。 文档教程proteus入门教程proteus快速入 ...… 查看全部问答> |




