最近做项目用到STM32F051的片子,遇到了两个小坑。


我的一个项目,需要ADC采集。两路ADC输入通道。PA0-ADCIn0; PA1-ADCIn1.


一开始想使用最简单的方式,单次转换。第一次采In0, 第2次采集In1.


STM32F0 的ADC库里面提供了ADC转换的函数:如下:


ADC_StartOfConversion(ADC1);


while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);


AdcProValRig[AdcLoopId] =ADC_GetConversionValue(ADC1);


ADC_StopOfConversion(ADC1);



解释:ADC_StartOfConversion 开始连续转换,也可以配置为,不是连续转换。在ADC初始化结构体中配置。


然后等待ADC转换结束,然后读取ADC的转换结果(同时会自动清空EOC标识)。


然后停止转换。  


接下来采集In1 , 理所当然,在采集前配置ADC的通道指向In1.


ADC_ChannelConfig(ADC1, ADC_Channel_1 , ADC_SampleTime_71_5Cycles);


但是设置完了之后,发现,根本没有鸟用啊。 采集的数据还是 之前IN0的通道。WHAT???


最后去看了一下原函数:居然是或运算!!!! 我的理解是,STM32 的ADC库设计,让你尽量使用规则或者注入模式去使用ADC。如下:


void ADC_ChannelConfig(ADC_TypeDef* ADCx, uint32_t ADC_Channel, uint32_t ADC_SampleTime)

{

  uint32_t tmpreg = 0;


  /* Check the parameters */

  assert_param(IS_ADC_ALL_PERIPH(ADCx));

  assert_param(IS_ADC_CHANNEL(ADC_Channel));

  assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime));


  /* Configure the ADC Channel */

  ADCx->CHSELR |= (uint32_t)ADC_Channel;


  /* Clear the Sampling time Selection bits */

  tmpreg &= ~ADC_SMPR1_SMPR;


  /* Set the ADC Sampling Time register */

  tmpreg |= (uint32_t)ADC_SampleTime;


  /* Configure the ADC Sample time register */

  ADCx->SMPR = tmpreg ;

}

那就直接写通道到寄存器吧:


ADC1->CHSELR = ADC_CHSELR_CHSEL1;


第2个小坑: 就是在向FLASH 写入参数的时候,单片机会死机,后来找到问题了,在写FLASH的时候,要关闭中断。可能是我写入到FLASH的内容多,时间长,写进入后,还要读出来,校验。而我的串口通讯,波特率时38400很快,读写FLASH期间,频繁的进入中断,导致死机。

关键字:STM32  ADC  通道设置  写FLASH 引用地址:STM32中的一些小坑-ADC通道设置-写FLASH

上一篇:MDK V5.12 + ST-Link V2 + Win10 STM32开发环境搭建1
下一篇:stm32 实现串口中断接收浮点型、整型数据

推荐阅读

2017年全球机器人增长速度连续五年创新高,其中美洲增长22%,约5万台;欧洲增长20%,约6.7万台;亚洲增长34%,约25.5万台,其中中国增长59%,达13.8万台。2018年以来,工业机器人市场出现了两大趋势:一是机器人与人工智能技术的融合,智能机器人是对机器人产业的突破,在灵活性、安全性、承载性上均有更大提升;二是协作机器人的出现。 当前,很多国内...
基于STM32CubeMx的CAN配置信息volatile1.系统时钟APB1=36MHZ2.CAN计算通信率计算公式,参考数据手册, CAN bit timing register (CAN_BTR) 寄存器NominalBitTime计算公式: NominalBitTime =1 t × q + tBS1 + tBS23.STM32CubeMx设置的Prescaler为8->对应BRP=7,TimeSeg1=6->对应TS1=5,TimeSeg2=2->对应TB2=2,STM32F103ZE对应APB1设置为...
随着人工智能和数字化的发展,数百万工作可以由机器人来完成。机器到底会夺去多少工作岗位,杜塞尔多夫DICE研究所:机器人不会夺走人类的工作岗位! 1994年以来,德国引进了13100个工业机器人,人类的工作岗位并没有因此丢失。虽然每个工业机器人相当于两个劳动力,但是也开辟了相关领域服务类新岗位。 欧洲经济科学研究(ZEW)的一项新研究显示,人类...
1.整体流程图上图中的AdcTsIntHandle是总的中断,里面会进行判断,如果是ADC中断,则调用ADC中断函数,如果是触摸屏中断,那么就调用触摸屏中断函数。2.touchscreen.c#include "../s3c2440_soc.h" #define ADC_INT_BIT (10)#define TC_INT_BIT (9) #define INT_ADC_TC (31) /* ADCTSC&#39;s bits */#define WAIT_PEN_DOWN (0<<8)#defi...

史海拾趣

问答坊 | AI 解惑

基于虚拟仪器的核能海水谈化实验测控平台

基于虚拟仪器的核能海水谈化实验测控平台为了研究竖直蒸发管高温多效海水淡化(VTEMED)系统的工艺流程和关键工艺技术及稳定运行时学参数影响等,清华大学核能与新能源技术研究院建立了大型双塔4效高温多效海水淡化实验装置。为位的温度、压强及流 ...…

查看全部问答∨

Atmega48-串口电压表(pdf)+Atmega48/88/168的基本程序(还没亲自试验)

一个蛮好玩的设计。 主要就是Atmega48的AD和串口通信部分,总体不是很难的。 可以自己动手做一个…… [ 本帖最后由 mxdaiyi 于 2010-1-20 17:10 编辑 ]…

查看全部问答∨

电力行业企业高薪招聘嵌入式开发人员!!

    欢迎满足以下条件之一的有识之士与我们联系,公司网址:     www.nerc.com.cn,发送简历邮箱地址:whl668@epri.ac.cn。     1.具有2年以上电力行业嵌入式产品开发经验。         2. ...…

查看全部问答∨

100PIN的IO方式点亮T6963液晶控制器240*128LCD

STM32F103VET6接T6963控制器LCD(240*128),本来想用FSMC来驱动的,但搞了几天都没成功,现用IO方式十分钟就成功点亮LCD。现在源程序与大家分享。现在主要问题是刷屏速度较慢(清屏时从上到下明显看到一过程)。后面还是想用FSMC方式。希望现在所 ...…

查看全部问答∨

刚用不到一月的EWSTM8先烈入门贴

有银要看EWSTM8的小白鼠,,,俺就是一只,不过是只老的。 上一个PP, 下载 (109.87 KB) 2010-5-20 12:54 再上一个小白鼠入门记。 IAR EWSTM8工程创建.pdf (636.96 KB) 下载次数: 136 2010-5-20 12:54 ...…

查看全部问答∨

中断问题

关于中断,中断向量即中断处理程序的入口地址,中断向量表里存放着各个中断的中断向量。我有几个问题,不知对否 1.大部分中断向量表可以用户自己配置,是不是就是说中断向量可以自己写,这样跳转到那个程序入口即可以用户自己定义? 2.很多控制器 ...…

查看全部问答∨

三相信号发生器DIY 完工,提交程序和PCB

[程序附件:    硬件 视频 $(\'swf_JTj\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.y ...…

查看全部问答∨

汇编高手请进

ORG 0000HLJMP STARTORG 0040HSTART: MOV R7,#04H ;       MOV R6,#0FEH    ;    MOV DPTR, #TAB ; LOOP:     MOV A,R7     MOVC A,@ ...…

查看全部问答∨

LM4F PeripheralOverview

LM4F PeripheralOverview…

查看全部问答∨

51单片机 精准时钟

要在51单片机实现精准时钟汇编程序,要求:能显示年月日时分秒,误差是0.01,还有需要整点提示。用c语言可能方便点,但是要求用汇编,我就不知道了,能不能有高手 解答一下。。。。。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved