历史上的今天
今天是:2025年05月14日(星期三)
2018年05月14日 | STM32F0 ADC学习
2018-05-14 来源:eefocus
开始时候使用的是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;
}
史海拾趣
|
《ARM Linux入门与实践》一书当中,关于触摸屏的那一节有几个地方不理解。 该程序的说明是:“代码并没有使用S3C2410A中的触摸屏控制器,而是通过直接控制FPIO的4个晶体管的导通和截止” P220: void Wait_Touch(void) { XMON_O ...… 查看全部问答> |
|
组建一个简单的工业以太网,一台x86工控机当服务器,用网线联一台工业以太网交换机,交换机再连一台PLC,PLC 连接底层设备。 假设服务器上我装的就是普通的windows XP操作系统,上面运行我的工控软件。 请问我这个算是工业以太网吗?工业以太网不 ...… 查看全部问答> |
|
近来忙着家事,有一段时间没有上来了,今天顺着2011-1-11,这么多棍棍的日子,上来溜达一下。 看到自从夏老师到网站上来座镇解答FPGA的相关问题,网站上FPGA的热情洋溢,很有气氛,觉得这里有蛮多朋友 ...… 查看全部问答> |
|
main函数,我想大家都了解,只要你会C编程,你就会知道main?我想它是比你第一个 "hello world!"还早的程序。可是它的作用呢?我想不是每个会C编程的人都知道?如果 当你有一天可以对main说拜拜时,那你就算是入门了!这里高手如云,望 ...… 查看全部问答> |
|
请问能否仅通过430的串口往里面烧写程序? 谢谢! 搜了一下,有很多卖BSL的,除了需要TXD、RXD外,还需要一些别的脚。 有没有这么一种软件?当430的串口与计算机串口通过MAX232之类的芯片一接,在电脑上运行这个软件,直接就把程序烧进去了。… 查看全部问答> |




