历史上的今天
返回首页

历史上的今天

今天是:2024年09月22日(星期日)

正在发生

2018年09月22日 | STM32 ADC单次转换实例

2018-09-22 来源:eefocus

ADC的初始化步骤:

1.初始化ADC所用的通道IO

2.开启ADC的时钟并初始化ADC的结构体

3.调用ADC_Cmd函数进行使能ADC,目的是可以进行读写ADC的寄存器

4.校准ADC(这一步不是必须的,校准ADC时ADC硬件会生成一个校准码,来减小测量误差,校准过的ADC比不校准的准确)

5.调用ADC_RegularChannelConfig写入规则通道的信息(包括写入SQR寄存器的值,采样时间等)

6.调用ADC_SoftwareStartConvCmd函数开启ADC采样

7.等待采样完成,并读取ADC数据

ADC部分代码如下:

#include "adc.h"

static void ADC_GPIO_Config(void)

{

  GPIO_InitTypeDef  GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ʹÄÜPB,PE¶Ë¿ÚʱÖÓ

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

void ADC_Mode_Config(void)

{

  ADC_InitTypeDef ADC_InitStructure;

ADC_GPIO_Config();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);

ADC_DeInit(ADC1);

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;

ADC_InitStructure.ADC_ScanConvMode=DISABLE;

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

ADC_InitStructure.ADC_NbrOfChannel=ADC_Channel_1;

ADC_Init(ADC1,&ADC_InitStructure);

  ADC_Cmd(ADC1,ENABLE);

ADC_ResetCalibration(ADC1);

while(ADC_GetResetCalibrationStatus(ADC1)==SET);

ADC_StartCalibration(ADC1);

while(ADC_GetCalibrationStatus(ADC1)==SET);

}

u16 ADC_STARTConver(void)

{

u16 adcconverdata;

ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);

ADC_SoftwareStartConvCmd(ADC1,ENABLE);

while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));

adcconverdata=ADC_GetConversionValue(ADC1);

return adcconverdata;

}

main函数中执行如下循环

    AdcConverValue=ADC_STARTConver();

printf("AdcConverValue=%d \r\n",AdcConverValue);

接下来就是执行结果了:

STM32ADC单次转换实例

上面是我引脚悬空时候的结果,下图是测量0V时的图片:

STM32ADC单次转换实例

值得注意的是ADC_Cmd这个命令,当把上面程序的ADC_SoftwareStartConvCmd(ADC1,ENABLE);命令更换为ADC_Cmd(ADC1,ENABLE);命令时程序仍然正常运行,原因如下:

void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState)

{

 

  assert_param(IS_ADC_ALL_PERIPH(ADCx));

  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)

  {

   

    ADCx->CR2 |= CR2_ADON_Set;

  }

  else

  {

   

    ADCx->CR2 &= CR2_ADON_Reset;

  }

}

从上面的函数原型可以看出ADC_CMD函数设置的是CR2寄存器的ADON位

打开参考手册,找到这个位,解释如下:

STM32ADC单次转换实例

从上图中我们可以看到,当该位为1时,再写入1的话则是启动ADC转换,而不是无效命令,我们程序在ADC初始化的时候已经调用过一次ADC_CMD函数,所以该位为1,所以当我们将ADC_SoftwareStartConvCmd(ADC1,ENABLE);函数更换为ADC_Cmd(ADC1,ENABLE)时,程序一点影响都没有,照常运行。


推荐阅读

史海拾趣

启珑(CHIPLON)公司的发展小趣事

一次性生成5个关于启珑(CHIPLON)公司在电子行业发展起来的相关故事可能内容过多,我可以先为您提供1个相关故事作为示例,如您满意,我可以继续提供。

启珑微电子推出创新DSP系列

近年来,随着数字技术的飞速发展,电子行业对高性能处理器的需求日益增长。在这一背景下,启珑微电子(CHIPLON)凭借其深厚的技术积累和敏锐的市场洞察力,成功推出了全新的CLM320F28335系列DSP(数字信号处理器)。

这款产品一经发布,就引起了行业内的广泛关注。CLM320F28335系列DSP以其高效的32位RISC-V CPU内核、高精度、低成本、低功耗、高性能以及外设集成度高等特点,迅速在市场中占据了一席之地。与传统的定点DSP相比,这款产品的优势显而易见,尤其是在数据处理和A/D转换方面表现更为出色。

值得一提的是,CLM320F28335系列DSP拥有150MHz的高速处理能力,并配备了32位浮点处理单元,这使其在处理复杂算法和大量数据时能够游刃有余。同时,它还具备6个DMA通道,支持ADC、McBSP和EMIF,以及多达18路的PWM输出,其中有6路为高精度PWM输出(HRPWM),这些特性使其在工业自动化、电机控制等领域具有广泛应用前景。

该产品设计的另一个亮点是,它能够直接PIN对PIN替代国际同类产品,这意味着用户在使用启珑的DSP时,无需更改原有的电路板设计或系统软件,即可实现完全的替代兼容,这一设计无疑大大降低了用户的替换成本和使用难度。

随着CLM320F28335系列DSP的成功推出,启珑微电子在电子行业的地位得到了进一步提升。这一产品的成功,不仅展示了启珑微电子强大的研发实力,也为其在激烈的市场竞争中赢得了更多的市场份额。

若您想要探索更多内容,随时可以继续输入。

GS Yuasa Battery Sales UK Ltd.公司的发展小趣事

对于基本二阶段低通滤波器电路,网友可能会有多方面的问题。以下是一些常见问题及其详细回答:

1. 基本二阶段低通滤波器电路的结构是怎样的?

回答:基本二阶段低通滤波器电路通常由两个一阶低通滤波器级联而成,每个一阶低通滤波器包含一个电阻和一个电容。具体来说,电路由两个电阻(R1, R2)和两个电容(C1, C2)组成。输入信号首先经过R1和C1组成的一阶低通滤波器,然后其输出再经过R2和C2组成的第二个一阶低通滤波器。这种结构可以有效滤除输入信号中的高频分量,只保留低频部分。

2. 如何计算二阶段低通滤波器的截止频率?

回答:二阶段低通滤波器的截止频率并非简单地将两个一阶滤波器的截止频率相加或平均。实际上,其截止频率与两个电阻和两个电容的值都有关。对于RC滤波器,单个一阶低通滤波器的截止频率为f_c1 = 1/(2πR1C1)和f_c2 = 1/(2πR2C2)。然而,对于二阶RC低通滤波器,其总截止频率通常使用以下公式计算:

f_c = \frac{1}{2\pi\sqrt{R_1R_2C_1C_2}} \] 这个公式考虑了两个滤波阶段的相互作用。 ### 3. 二阶段低通滤波器相比一阶滤波器有哪些优势? **回答**:二阶段低通滤波器相比一阶滤波器在滤波效果上有显著优势。具体来说,二阶段滤波器在通带内的增益更为平坦,而在阻带内的衰减速度更快(通常为-40dB/dec,比一阶滤波器的-20dB/dec快)。这意味着二阶段滤波器能更好地滤除高频噪声,保留低频信号,从而改善信号的纯度和信噪比。 ### 4. Sallen-Key结构和多路反馈结构(MFB)有什么区别? **回答**:Sallen-Key结构和多路反馈结构(MFB)是二阶低通滤波器的两种常见拓扑结构。Sallen-Key结构通常用于单位增益、高增益精度和低Q值的应用中,其电路结构相对简单,且对运算放大器的性能依赖性较小。而多路反馈结构(MFB)则适用于需要高Q值和高增益的应用场景。MFB结构通过引入额外的反馈路径来实现更高的Q值和更灵活的增益控制,但相应地,其电路复杂度也更高。 ### 5. 在实际应用中,如何选择合适的二阶段低通滤波器参数? **回答**:在选择二阶段低通滤波器的参数时,需要根据具体的应用需求来确定。首先,需要明确滤波器的截止频率,这取决于需要滤除的高频噪声的频率范围。其次,需要考虑滤波器的增益和相位特性,以确保信号在通过滤波器后能够保持所需的幅度和相位关系。最后,还需要考虑滤波器的稳定性和实现复杂度,以确保滤波器在实际应用中能够稳定可靠地工作。 在实际设计过程中,可能需要通过仿真软件来验证所选参数的效果,并根据仿真结果进行调整和优化。此外,还需要注意选择高质量的元件来构建滤波器电路,以确保滤波器的性能和稳定性。
Eby Electro Inc公司的发展小趣事

Eby Electro Inc在发展壮大的同时,始终关注社会责任的履行。公司积极参与环保和公益活动,推广绿色电子产品,减少生产过程中的环境污染。此外,公司还设立了奖学金和助学金,支持教育事业的发展。这些举措不仅提升了公司的社会形象,也为公司赢得了更多的社会支持和认可。

DACHANG公司的发展小趣事

DACHANG公司深知创新是企业发展的根本动力。因此,公司始终将创新作为自己的核心竞争力,不断推出具有创新性的产品和解决方案。无论是产品设计、技术研发还是市场营销,DACHANG公司都积极引入新的理念和模式,为公司的发展注入了源源不断的活力。

A-BRIGHT公司的发展小趣事

A-BRIGHT公司注重与产业链上下游企业的合作与共赢。公司与多家原材料供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和质量。同时,A-BRIGHT也与多家知名的电子产品制造商展开合作,共同开发新产品,实现了资源共享和互利共赢。

兆易创新(GigaDevice)公司的发展小趣事

A-BRIGHT公司的起点并不起眼,只是电子行业里众多小公司之一。然而,在XXXX年,公司成功研发出了一种新型的高效率LED芯片,这一技术突破使得A-BRIGHT的产品在能效和寿命上大幅超越竞争对手。这一创新迅速吸引了市场的关注,A-BRIGHT的订单量激增,公司开始逐渐崭露头角。

问答坊 | AI 解惑

自己动手制作机器人,看起来很好玩

来源:窗户纸  http://www.getproject.com.cn/post/98.html 机器人,听起来挺神秘的,在大多数科幻电影和文学作品中,机器人通常无所不知,无所不能,跟人类相比起来,简直就是完美无瑕了。因此,作品中的机器人,要么是人类的好朋友, ...…

查看全部问答>

用DSP产生的FSK调制信号发射

本帖最后由 paulhyde 于 2014-9-15 09:23 编辑 我产生的调制信号频率150K,在不混频的情况下可以直接通过功率放大器进行电感耦合吗???两个电感线圈的距离为5CM 具体功率放大器怎样设计???  …

查看全部问答>

产品使用报告格式

如题,哪位大侠有产品使用报告的格式呀??借来用用…

查看全部问答>

探究CDC类的方法ExtTextOut 中的一个参数

virtual BOOL ExtTextOut ( int x, int y, UINT nOptions, LPCRECT lpRect, LPCTSTR lpszString, UINT nCount, LPINT lpDxWidths ); 想请教一下参数nOptions是否有效?本人通过测试,觉得ETO-CLIPPED、ETO-OPAQUE、NULL三者之间没有 ...…

查看全部问答>

VC++关于directshow图像旋转90度输出花屏的问题

VC++关于directshow图像旋转90度输出花屏的问题 我在transfilter对图像做了一个90度的旋转,再传给第三个filter,发现图像是花屏,解析度为176x144 如果解析度为高,宽相等就是正常的(如:240x240) 请问是什么原因?…

查看全部问答>

求vxworks的ospf源码 ?

求vxworks的ospf源码,哪位大侠有?请给一份,先谢了! jorsen_gong@hotmai.com …

查看全部问答>

招驱动工程师

岗位名称:驱动工程师 岗位要求: 1.电子、通信、计算机、自控类相关专业本科以上学历; 2.1年以上嵌入式产品开发经验,熟悉各种常用的外围扩展芯片的驱动。 比如SCI,SPI,I2C总线,smartcard,tuner。 3.精通C语言、汇编,有嵌入式系统和实时 ...…

查看全部问答>

香版!STM8S208的BEEP功能是不是不能用?

我问ST工程师的邮件:~~:    你好!    我需要用到BEEP功能,可是设定寄存器后跑程序,发现BEEP寄存器并没有改变.OPTION里面我有把PD4设成BEEP功能,OPTION里的PRSC设成(16MHZ TO 128KHZ P ...…

查看全部问答>

LPC11C14 IAP与CAN API问题

我在用LPC11C14写IAP在线升级程序时,将用户程序的向量表复制到RAM的0地址,再通过重映射寄存器重映射到FLASH的0地址,实现了用户程序调用中断,但现在要把CAN API的程序加上去,而CAN API要占用RAM的0x1000 0050-0x1000 00B8 ...…

查看全部问答>

学习FPGA过程中的困惑

现在刚开始接触FPGA不久,看了很长时间论坛了,也学习了Verilog,试着学习应用quartusii和modelsim,现在依旧感觉没有多大进步,好像根本还没有入门,简单的仿真还能进行,遇到复杂点的,比如几个模块联合编译仿真就总是仿真失败,也没有找到原因! ...…

查看全部问答>