历史上的今天
返回首页

历史上的今天

今天是: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函数即可。

推荐阅读

史海拾趣

安国国际(ALCOR)公司的发展小趣事

在全球化趋势的推动下,安国国际积极拓展海外市场,与全球多家知名企业和研究机构建立了紧密的合作关系。通过与国际伙伴的技术合作和市场共享,安国得以更快地了解市场需求和技术动态,加速产品研发和市场推广。同时,公司还加强了对全球供应链的管理和优化,确保产品质量和交货期的稳定性。这些举措为安国国际在全球市场的竞争提供了有力支持。

这五个故事展示了安国国际在电子行业中的发展历程和取得的成就。从创业初期的USB键盘集线器控制芯片研发到产品线拓展、组织架构调整、专注于U盘控制IC开发以及全球化布局与合作伙伴关系的建立,安国国际始终坚持以技术创新为驱动,以市场需求为导向,不断提升自身的核心竞争力和市场份额。

E-T-A Circuit Breakers公司的发展小趣事

E-T-A公司自1948年由Jakob Ellenberger和Harald A. Poensgen创立以来,一直由该家族掌管。尽管公司已经发展成为一个国际性的企业,但家族第二代和第三代领导人仍然保持着对公司的掌控和管理。他们秉承了家族的创业精神和价值观,坚持以客户为中心,以技术创新为驱动,不断推动公司向前发展。在家族传承的推动下,E-T-A公司得以保持其独特的企业文化和核心竞争力,在电子行业中持续领跑。

DOMINANT公司的发展小趣事

为了进一步提升市场竞争力,统明亮公司在2016年推出了一款新型直角DomiLED产品。这款LED产品具有高光照强度、低热阻等特点,广泛应用于测光照明领域。新型直角DomiLED的推出,不仅丰富了统明亮的产品线,也进一步巩固了其在LED市场的领先地位。这款产品的成功推出,也充分展示了统明亮公司在LED技术创新方面的实力。

ATOP_Technologies公司的发展小趣事

ATOP Technologies自1989年创立以来,以创新、智能、整合、坚持为核心价值观,初期主要专注于工业自动化领域的产品研发。在创立初期,公司面临着资金紧张、市场竞争激烈等挑战。然而,凭借着对技术的深刻理解和对市场的敏锐洞察,ATOP Technologies逐步在工业自动化领域站稳脚跟,并开始积累起一批忠实的客户。

Aavid Niagra公司的发展小趣事

随着电子产品的更新换代速度加快,散热技术也面临着更高的要求。Aavid Niagra公司敏锐地捕捉到了这一市场变化,加大了在研发方面的投入,推出了一系列创新性的散热产品。这些产品不仅提高了电子设备的性能稳定性,还大大降低了能耗,赢得了客户的广泛好评。公司的技术创新能力成为了其持续发展的核心竞争力。

Alpha Industries公司的发展小趣事

随着电子技术的飞速发展,军事装备也在不断升级。Alpha Industries敏锐地捕捉到了这一趋势,开始将电子技术应用于其军事服装设计中。例如,公司研发了一款带有GPS定位功能的飞行夹克,帮助飞行员在复杂环境中快速定位。此外,Alpha Industries还利用电子传感器技术,开发出能够监测士兵体温和心率的战地风衣,为军队提供更为全面的保障。

问答坊 | AI 解惑

关于视频系统处理器选择的建议

关于视频系统处理器选择的建议基于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板上如何增加显卡芯片

如题, 望版主推荐 一直以来,因ARM开发板每次换屏的时候都要重新生成NK,有没人做过在板子上驱动一个显卡IC来驱动LCD? 如果有,IC型号大家了解的有哪些? 如果增加了这个显卡IC,那么原来的Display驱动还要不要? 大家一起讨论讨论,突然想 ...…

查看全部问答>

谁能详细讲讲 uboot smdk2410.h 里面配置信息的含义?

谢谢! 我是初学者,不明白里面都在配置些什么,不明白哪些是最重要的。…

查看全部问答>

关于vs2005开发windows ce 5程序部署到机器的问题

1:首先非常感谢您的帮助,同时我找遍了google和baidu,没有找到,或许是关键字搜索的不好。所以来此提问。 2:问题描述如下    机器是广州市微嵌计算机科技的Arm9 的硬件系统,采用的是windows ce 5.0。该设备有一个特点是会将hwDir目 ...…

查看全部问答>

如何使程序某个功能运行时不响应其它操作

小弟要实现如下功能: 当我点击打印操作时,程序弹出一个对话框,显示正在打印,在打印的过程中,必须使程序无法响应用户的其它任何操作。当打印结束时,显示打印成功或打印失败,然后才让程序可以继续响应用户其它操作。 请问这个如何解决哈? …

查看全部问答>

讨论: 用fread, fwrite存取结构数据安全吗?

同样的软件,平时都用的好好的,但有半天fread出来的数据都不对。于是才产生这个疑问.…

查看全部问答>

压力传感器在汽车空调系统中是如何应用的?

在汽车空调系统中,压力传感器都应用在那部分,又是给那里提供数据,这些数据的作用。请各位大侠指点指点。谢谢!…

查看全部问答>