历史上的今天
返回首页

历史上的今天

今天是:2024年12月29日(星期日)

2018年12月29日 | stm32学习笔记(十二)ADC实验

2018-12-29 来源:eefocus


#include "adc.h"

 #include "delay.h"

//////////////////////////////////////////////////////////////////////////////////  

//本程序只供学习使用,未经作者许可,不得用于其它任何用途

//ALIENTEK miniSTM32开发板

//ADC 代码    

//正点原子@ALIENTEK

//技术论坛:www.openedv.com

//修改日期:2012/9/7

//版本:V1.0

//版权所有,盗版必究。

//Copyright(C) 广州市星翼电子科技有限公司 2009-2019

//All rights reserved   

////////////////////////////////////////////////////////////////////////////////// 

   

   

//初始化ADC

//这里我们仅以规则通道为例

//我们默认将开启通道0~3    

void  Adc_Init(void)

{

ADC_InitTypeDef ADC_InitStructure; 

GPIO_InitTypeDef GPIO_InitStructure;

 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE );   //使能ADC1通道时钟

 

 

RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M

 

//PA1 作为模拟通道输入引脚                         

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚

GPIO_Init(GPIOA, &GPIO_InitStructure);

 

ADC_DeInit(ADC1);  //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值

 

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在独立模式

ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在单通道模式

ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐

ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目

ADC_Init(ADC1, &ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器   

 

  

ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1


ADC_ResetCalibration(ADC1); //使能复位校准  

 

while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束


ADC_StartCalibration(ADC1); //开启AD校准

 

while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束

 

// ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能

 

}   

//获得ADC值

//ch:通道值 0~3

u16 Get_Adc(u8 ch)   

{

  //设置指定ADC的规则组通道,一个序列,采样时间

ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采样时间为239.5周期       

  

ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能

 

while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

 

return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果

}

 

u16 Get_Adc_Average(u8 ch,u8 times)

{

u32 temp_val=0;

u8 t;

for(t=0;t

{

temp_val+=Get_Adc(ch);

delay_ms(5);

}

return temp_val/times;

}  


推荐阅读

史海拾趣

Gold Peak Group公司的发展小趣事
控制电路的布局应合理,避免元件之间的电磁干扰和机械碰撞。
Ho Chien Electronics Group Inc公司的发展小趣事
定期对控制电路进行检查和维护,确保接触器、继电器等元件的性能良好,触点无粘连或损坏。
芯邦(Chipsbank)公司的发展小趣事

近年来,芯邦科技的营收规模逐渐增大,从2020年到2022年,公司的营业收入分别达到了0.99亿元、1.75亿元和1.92亿元。尽管增速呈现下降趋势,但芯邦科技在电子行业中依然保持着稳健的市场表现。同时,公司也注重研发投入,不断提升产品的技术水平和市场适应性。

富士康(FOXCONN)公司的发展小趣事

面对日新月异的半导体技术,FMS始终保持对创新的执着追求。公司不断加大研发投入,致力于新产品的研发与旧产品的升级换代。同时,FMS还积极关注行业动态,紧跟市场趋势,不断调整和优化产品结构,以满足客户日益多样化的需求。展望未来,FMS将继续秉承“新速勤俭、创造利润、热诚信义、前瞻未来”的经营理念,致力于成为全球半导体供应链中的佼佼者,为客户提供更加优质的产品和服务。

AUK Contractors Co Ltd公司的发展小趣事

随着公司业务的不断扩展,AUK Contractors Co Ltd意识到单一市场已无法满足其增长需求。于是,公司积极寻求国际合作,与多个国家的电子企业建立了战略伙伴关系。通过技术交流和资源共享,公司成功打开了新的市场,实现了业务的快速增长。

益升华(Essentra)公司的发展小趣事

随着公司业务的不断发展,益升华(Essentra)公司意识到海外市场的重要性。于是,公司开始积极拓展海外市场,通过设立海外分公司、与当地企业合作等方式,将产品推向全球。在拓展海外市场的过程中,益升华(Essentra)公司始终坚持品质第一的原则,赢得了海外客户的信赖和好评。如今,公司的工业零部件全球网络已覆盖23个国家或地区,成为国际知名的塑料及金属零部件生产商和销售商。

问答坊 | AI 解惑

多层PCB压机温度和压力均匀性测试方法

多层PCB加工过程中必不可少的就是使用到压合机,而压合机压力的均匀性和温度的均匀性对压合的品质影响相当之大,而如何通过试验的方式进行定期的检测其稳定性,从而保证产品的压合品质呢。论坛里有就这个问题进行的相关讨论,现在其中的讨论结果综 ...…

查看全部问答>

嵌入式软件测试的十大秘诀

在嵌入式软件开发过程中,一般来说,花在测试和花在编码的时间比为3:1(实际上可能更多)。这个比例随着你的编程和测试水平的提高而不断下降,但不论怎样,软件测试对一般人来讲很重要。很多年前,一位开发人员为了在对嵌入式有更深层次的理解,向Ora ...…

查看全部问答>

最新轨迹机器人

最新轨迹机器人…

查看全部问答>

3路LVDS串行传输

3路并行40M的LVDS信号想通过一根光纤传输,到另一端然后再还原成3路并行LVDS信号,首先肯定是先将3路信号转化成串行数据,然后再发送到接收端,接收端再把串行数据还原成并行数据。光纤传输有现成的模块,逻辑部分想用FPGA做,现在发现若对40M的信 ...…

查看全部问答>

大家来看看我的SD卡初始化问题,用SPI模式

死活不成功,用的是micro SDHC  参考SD2.0标准,但循环接受ACMDD41就会一直不停的接受到0x01 不知怎么回事 希望高手解答呵呵 void SDCardInit( void ) {            u8 ret = 0 ;       ...…

查看全部问答>

编译通过,却无法近期系统

我用PB成功编译通过,但是下载到开发版上面却无法正常开机提示如下: VBridge is not initialized!   Bail out.. +CS8900:DriverEntry InitEthDevice Port ok. Product ID = a00 InitEthDevice Port ok. [HSMMC0] Initializing the ...…

查看全部问答>

创建新线程后,在调试跟踪的时候,新线程中对传入参数(一个控件)实施操作的时候报错

点击一个按钮后,创建一个线程,传入一个参数(一个控件,比如是CComboBox),在新线程里对该控件实施操作的时候,系统提示说MFCCE300.DLL错误,语句定到ASSERT一行,说SENDMESSAGE的时候有错误,如果是跟踪调试的话,线程变量显示的那个小窗体的标题就灰了不 ...…

查看全部问答>

不知道如何了解:USB函数中各个CallBack究竟做了什么事?

USB_Lib程序中,出现五六个回调函数,不知道它们究竟做了. 比方SOF_Callback, 顾名思义理解为产生帧头,但到底这样理解对不对,心中没有数? 何况,除了SOF_Callback外,还有一些XXX_Callback函数本身名称也不太清楚的,更不容易理解了. …

查看全部问答>

【TI官方】关于小批量特价购买TI器件的通知

本帖最后由 paulhyde 于 2014-9-15 03:42 编辑 各有关高校: 为了更好的支持2011年全国大学生电子设计竞赛,TI与E络盟公司(前身即为派睿电子,一家专注于小批量销售的英国公司)合作,推出了今年的小批量特价销售计划:即经TI授权的学校,能够以 ...…

查看全部问答>

usb_dev_serial例程分析

       最近在学习Stellaris系列MCU的USB模块,做了点笔记,论坛上关于USB这一块的分析很少,虽然是菜鸟但还是发上来,供大家批判!哈哈。       共同学习共同进步啊!!        简介 ...…

查看全部问答>