历史上的今天
今天是:2025年02月12日(星期三)
2019年02月12日 | STM32—ADC单通道采集模拟量
2019-02-12 来源:eefocus
前言:
最近在调试STM32L152芯片ADC单通道采集数据程序,总结下STM32L152芯片ADC单通道采集模拟量的使用方法。
硬件平台:STM32L152
软件平台:keil v5+cubeMX
函数库:HAL库
ADC配置过程:
1.先初始化ADC的管脚,本例中ADC对应PA1管脚。
ADC_HandleTypeDef hadc;
void ADC_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*Configure GPIO pin : PA1 */
GPIO_InitStructure.Pin = GPIO_PIN_1;
GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
GPIO_InitStructure.Pull = GPIO_NOPULL;
HAL_GPIO_Init(ADC1_GPIO, &GPIO_InitStructure);
}
2.初始化ADC的各参数
void MX_ADC_Init(void)
{
ADC_ChannelConfTypeDef sConfig;
/**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) */
hadc.Instance = ADC1;
hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;//时钟分频
hadc.Init.Resolution = ADC_RESOLUTION_12B;//ADC的分辨率
hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;//右对齐,低12有效
hadc.Init.ScanConvMode = ADC_SCAN_DISABLE;//关闭浏览模式,即单通道有效
hadc.Init.EOCSelection = ADC_EOC_SEQ_CONV;
hadc.Init.LowPowerAutoWait = ADC_AUTOWAIT_DISABLE;
hadc.Init.LowPowerAutoPowerOff = ADC_AUTOPOWEROFF_DISABLE;
hadc.Init.ChannelsBank = ADC_CHANNELS_BANK_A;
hadc.Init.ContinuousConvMode = DISABLE; //单次转化模式
hadc.Init.NbrOfConversion = 1;//通道数量
hadc.Init.DiscontinuousConvMode = DISABLE;
hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;// 软件触发
hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc.Init.DMAContinuousRequests = DISABLE;
if (HAL_ADC_Init(&hadc) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. */
sConfig.Channel = ADC1_Channel;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_4CYCLES;
if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
3.获取ADC采集数据
u16 ADC_ReadData(void)
{
static u16 AD_Data;
HAL_ADC_Start(&hadc);
HAL_ADC_PollForConversion(&hadc,100);
AD_Data=(u16)HAL_ADC_GetValue(&hadc);
HAL_ADC_Stop(&hadc);
delay_ms(5);
return AD_Data;
}
4.获取采集数据进行平均
u16 ADC_average(u8 times)
{
u32 sum=0,i,adc_average;
for(i=0;i { sum+=ADC_ReadData(); } adc_average=sum/times; return adc_average; } 需要获取ADC数据时直接调用ADC_average函数即可。
史海拾趣
|
关于视频系统处理器选择的建议基于ARM核心的Freescale的i.MX系列芯片是视频应用的佼佼者。 比如i.MX27和i.MX31 i.MX27嵌入式开发板是高清视频输入输出的首选,i.mx27芯片提供了更高的灵活性和更强大的多媒体处理能力,成为IP视频和语音(V2IP)、移 ...… 查看全部问答> |
|
关于7行5列LED键盘指示灯的编程,请高手解惑!十万火急!万分感谢! 7行5列的LED键盘指示灯,键按下时相应的LED指示灯也会亮! 灯亮的原则:列为高电平,行为低电平。 我想问的是,如果我知道了第0行第0列的键按下了,想要第0行第0列的灯亮,那么是不是应该让列所在的存储器第0位置1,其余列置0!即将0x01输入到相 ...… 查看全部问答> |
|
单片机的用途非常广阔,各种智能控制的产品中都少不了它的身影,前景看好,因此引起了一阵阵学习单片机的热潮。 相信很多初学单片机的朋友都是从做流水灯开始的,因为流水灯的电路较为简单。看着按照自己的设想做成的流水灯变幻着不同的花样, ...… 查看全部问答> |
|
如题, 望版主推荐 一直以来,因ARM开发板每次换屏的时候都要重新生成NK,有没人做过在板子上驱动一个显卡IC来驱动LCD? 如果有,IC型号大家了解的有哪些? 如果增加了这个显卡IC,那么原来的Display驱动还要不要? 大家一起讨论讨论,突然想 ...… 查看全部问答> |
|
关于vs2005开发windows ce 5程序部署到机器的问题 1:首先非常感谢您的帮助,同时我找遍了google和baidu,没有找到,或许是关键字搜索的不好。所以来此提问。 2:问题描述如下 机器是广州市微嵌计算机科技的Arm9 的硬件系统,采用的是windows ce 5.0。该设备有一个特点是会将hwDir目 ...… 查看全部问答> |
|
小弟要实现如下功能: 当我点击打印操作时,程序弹出一个对话框,显示正在打印,在打印的过程中,必须使程序无法响应用户的其它任何操作。当打印结束时,显示打印成功或打印失败,然后才让程序可以继续响应用户其它操作。 请问这个如何解决哈? … 查看全部问答> |




