历史上的今天
返回首页

历史上的今天

今天是:2024年10月08日(星期二)

正在发生

2019年10月08日 | STM32中的一些小坑-ADC通道设置-写FLASH

2019-10-08 来源:eefocus

最近做项目用到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期间,频繁的进入中断,导致死机。

推荐阅读

史海拾趣

GuangDong Province MengCo Semiconductor Co., Ltd公司的发展小趣事
对于易发热的元器件(如制动电阻),应加强散热设计,确保其在工作过程中能够正常散热。
Greenray Industries Inc公司的发展小趣事

为了加速绿色技术的推广和应用,GreenTech积极寻求与全球知名企业的战略合作。例如,公司与一家国际领先的电动汽车制造商达成合作协议,共同研发用于电动汽车的高效电池管理系统。通过这一合作,GreenTech不仅提升了自身在电池技术领域的竞争力,还成功将绿色技术应用于实际产品中,推动了电动汽车行业的绿色发展。

EIC [EIC discrete Semiconductors]公司的发展小趣事

在国内市场取得一定成绩后,EIC公司开始将目光投向国际市场。公司积极参加国际电子展会,与国际知名企业进行技术交流与合作,不断拓展海外市场。通过国际化战略的实施,EIC的产品逐渐进入了欧洲、北美等发达国家和地区,并在当地建立了完善的销售和服务网络。这一过程中,EIC不仅提升了品牌影响力,也积累了丰富的国际化运营经验。

Daco Semiconductor Co Ltd公司的发展小趣事

随着技术的不断成熟,Daco开始积极寻求市场拓展。公司首先与几家知名的电子设备制造商建立了合作关系,为其提供定制的半导体解决方案。同时,Daco也积极参与国际半导体展览和交流活动,与全球的行业同仁建立了广泛的联系。通过不断的市场拓展和战略合作,Daco的产品逐渐进入了全球市场,公司的知名度和影响力也得到了显著提升。

Amecon Magnetics公司的发展小趣事

Amecon Magnetics公司成立于XXXX年,初始阶段主要专注于磁性材料的研发与生产。在创立初期,公司面临着资金短缺、技术挑战以及市场竞争激烈等多重困难。然而,创始人凭借对磁性材料领域的深刻理解和坚定信念,带领团队不断突破技术难题,逐步开发出具有竞争力的产品。

Holy Stone公司的发展小趣事

Holy Stone企业股份有限公司创立于1981年,总部位于台北市。创立之初,公司凭借创办人深厚的电子技术背景,迅速在电子元件市场站稳脚跟。起初,Holy Stone主要作为专业的电子零件代理商,为客户提供专业的技术服务与解决方案。这一阶段,公司通过扎实的专业技术基础和敏锐的市场洞察力,逐步建立起稳定的客户基础,为后续的发展奠定了坚实的基础。

问答坊 | AI 解惑

四电压比较器LM339的8个典型应用例子

LM339集成块内部装有四个独立的电压比较器,该电压比较器的特点是:1)失调电压小,典型值为2mV;2)电源电压范围宽,单电源为2-36V,双电源电压为±1V-±18V;3)对比较信号源的内阻限制较宽;4)共模范围很大,为0~(Ucc-1.5V)Vo;5)差动输入电 ...…

查看全部问答>

请教:usb serial 问题

平台:S3C2440 + WINCE60 添加了USB FUNCTION的相关组件,把设备映射成 Serial. 但是系统起来后,PC端检测不到设备。没任何反映。 用万用表测试 USB PORT的 D+ 也有3V。(D+用一个IO口控制,已经置为高)。请问PC端什么检测不到呢?谢谢。…

查看全部问答>

modbus协议地址问题

PC对PLC通过MODBUS协议通讯时 给出的映射表是这样的 H0000      P区域 H1000      M区域 H2000      L区域 H3000      K区域 现在我要对一个M1900(已经 ...…

查看全部问答>

求购一毕业设计(单片机的无线多路遥控发射接收)

哪位朋友有现成的卖给小弟,学生没多少钱只能出100元 要求 基于单片机的无线多路遥控发射,接收系统 本系统设计成8路受控对象的8种状态进行控制,采用多路遥控发射,接收系统将控制信号调制到高频上, 通过空间传输,实现对远程设备的状态控制.发端通 ...…

查看全部问答>

烧坏的开发板还有救吗?

今天特别郁闷,做实验室一不小心,把外部24V电接到了开发板的地,用的开发板是ST原厂出产的STM3210C-EVAL,两千大洋。 请问版主,是否还有药可救啊。…

查看全部问答>

到底.能不能用现成的开发板.还是必须用最小系统板?

本帖最后由 paulhyde 于 2014-9-15 09:46 编辑 我看文件意思是必须用最小系统板.可是有点事我们老师现在有点事回家了.临走留下交代说用现成开发板就行..说往年也是这么说.用开发板没问题的.纠结了.问问大家意思 谢啦  …

查看全部问答>

2013全国电子大赛电源类过电流保护电路

本帖最后由 paulhyde 于 2014-9-15 03:19 编辑 希望参加比赛的朋友一起进来,能把自己的经验分享一下,大家共同进步    …

查看全部问答>

哪位大神有ADS软件,求分享

哪位大神有ADS软件,求分享。要破解的,不想花钱买。 …

查看全部问答>

迅为4412开发板编写简单应用调用驱动

本文转自迅为4412精英版群: 本期实验比较简单,就是写一个简单的应用程序调用前面写的驱动。 硬件工具1)iTOP4412 开发板2)U 盘或者 TF 卡3)PC 机4)串口9.1.1.2软件工具1)虚拟机 Vmware2)Ubuntu12.04.23)超级终端(串口助手)4)实验配套 ...…

查看全部问答>