打印
[牛人杂谈]

MCU代码通用设置

[复制链接]
638|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
deviceplugs|  楼主 | 2016-4-13 20:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
入行已经三年多了,已经在Cypress开发过一套比较完整的电机控制代码了,结果昨天除了些奇怪的问题,花了点时间找到原因,结果是一些比较低级的错误,先记录下来:
1. 在main()函数开始的时候记得加入上电延时
       芯片是使用的stm32F103,当时第一次使用M3核的单片机,因此看了很多例程,在例程上删减后,不断的增加新的功能,到如今的规模。产品已经开始准备小批量量产了,但是在量产的前一天下班前,突然发现一个很异常的现象。单片机AD到的初始电压值严重偏离正常值,**一闪,想起来上电后没有加延时就进行了配置和电压采样,这样不出问题才怪呢。这样的常识估计大家都知道。可是每当大家使用新的芯片时一般都是从例程上开始的,尤其容易忘了这一点。
      上电延时为200ms左右,如果需要采集初始电压,最好设置到1s以上。这样误差比较小一下。

2. 一些自己计算的数值最好放到预处理#define中去
     在注释中可以写上当时计算的公式。当然最好的办法是让编译器自己去计算出值。好处很多:1.如果过比较长的一段时间后需要修改,只要看一下公式,就很容易改动了。不需要苦思冥想当时是如何想的;2.改动方便,并且如果公式中别的因素变了的话,这个计算值也会跟着改变,不怕遗漏 ;3. 减少自己计算过程中的错误

3. #define预处理中的计算
    大家都知道,在单片机中最好先算乘法然后再算除法。对于编译器的预处理也是如此。这样可以显著的减少误差。另外如果要做两次除法,比如X*Y/Z/A,那么最好改成X*Y/(Z*A)。后者基本上接近真实值,前者因为有两次除法,因此有比较大的误差。

沙发
734774645| | 2016-4-13 22:36 | 只看该作者
一定要该带括号的带括号,不要相信大学考试哪个,什么优先级,直接括号就搞定了,这样在别人看的时候也好明白。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

135

帖子

2

粉丝