你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【MCU实战经验】基于STM32F107的嵌入式操作系统学习笔记

[复制链接]
putiandiao 提问时间:2014-3-31 20:14 /
    前段时间学习RTOS,μC/OS-III,教材是micrium的中文版,板卡是中国版板卡,例子非常详细,代码风格很好,值得学习。
    附件对《嵌入式实时操作系统UCOS-III应用开发--基于STM32微控制器》的第一个例子给出了自己的分析和解读,对入门有一定的帮助作用。
    STM32F107的内部资源也非常丰富,板卡本身的外设和扩展能力也不错。试验过micrium的嵌入式TCP/IP,也很不错,只是提供库,并且限制很多,有点不爽。
    希望拿到这块性能更高的STM32F4的板卡,期待在上面移植μC/OS-III和GUI以及嵌入式协议栈。也期待和大家一起进步!
 
 2014-4-30 08:35:55
    刚好STM32的官方社区上传了不少的中文资料,这些都是和实际应用开发密切相关的,在指导我们的设计和调试工作具有现实意义。
000.png
    在需要文档的时候,直接以名称进行搜索即可。
    接下来将简略记录每个文档的阅读笔记。
1、PCB 漏电引起 LSE 停振 (1)文档
        文档中有几个关键的地方,一个是振荡器的设计,最基本的就是要满足起振条件。具体分析可以参考另外一篇文档《Pierce振荡器设计》,此文详细解读了ST MCU的振荡器设计原理和计算方法,注意,公式的来源在本文中给出,有兴趣的可以看一看。
        当你发现LSE停振时,首先要检查的就是设计上的原因。是否是设计不合格,就导致了无法起振,尤其是遇到大批量产品时,更应该注意。(在这里,有必要提一下的就是电容的容差可能很大,如果计算出的指标处于起振的边缘地带,可以说就找到了问题的根源)
        在查找错误的过程中,要特别注意操作顺序,并记录下来。比如本文的操作,先刮除电子绝缘胶、乙醇清洗、热风枪吹干、上电测试,结果正常,而对比试验中无热风枪吹干,因此结果不正常。因此怀疑有水气凝结导致漏电,最终导致LSE无法起振。
        根据不断的分析和测试,以及和电子绝缘胶工厂的联系,认为凝固过程中,有乙醇分子游离出来,但是我们知道,乙醇是不导电的,它之所以导电,是因为吸收了空气中的水汽(或者是胶体中的水汽),并且电离导致的。应该说,是在这种电子绝缘胶凝固的过程中,吸收了空气中的水汽,并且最终导致漏电。
        根据文档介绍,我认为就是胶体干得不彻底,也就是说表面干了,里层的微量水分还是存在于胶体中,甚至在PCB上,所以,出现此故障。
 
2、潮湿环境下不工作
        第一眼看到,可能就是时钟模块不能正常工作了。
        认真检查以下端口:VDD、VSS、VDDA、VSSA、VBAT、Vref+、Vref-、VRST、BOOT0、BOOT1。
        结果发现其BOOT0悬空,未做任何连接,这将导致STM32因环境不同而进入不同的模式。
        BOOT1端子对外驱动其他芯片,暂不考虑。
        将其下拉或者是接一个拨码开关,手动选择启动模式。
 
3、外部IC连接NRST导致MCU内部复位信号失效的问题
        内部复位失败,很可能就是复位信号冲突。之前在LPC3250的复位电路设计中,使用了外部看门狗复位电路,复位输出信号连接到74LVC2G07DCK缓冲器,高电平时,74LVC2G07DCK输出高阻态,因此不影响LPC3250的内部看门狗复位。
        据文中描述,外部强制给STM32 MCU复位引脚高电平,而MCU内部复位输出低电平,除了导致复位失败以外,还会因为大电流导致损坏器件(NRST通路上的导通内阻很小)
        文中仔细分析了STM32内部复位电路。并且给出了基于PP、OD的设计方法。OD模式直接可用,PP模式则需要增加一个反向二极管,防止高电平对MCU造成影响。如果处于PP模式下,硬件已经固化,那么软件上可以将在输出低电平时输出低电平,在非低电平时,将其IO设置为输入模式,并且下拉,相当于释放 NRST。
        此文的参考价值很不错。
 
4、跳不出的 while 循环
        哈哈哈,编译器的问题。不由得想到了本科毕设的时候,写的一个if……else语句中,总有部分条件控制部分不执行,当时也不知道怎么解决的,反正折腾了很久(当时用的51)。不过,现在想想,可能也是变量的定义问题和编译器优化的问题导致的。
        volatile修饰变量,编译器每次都在其存储位置读取变量值,而不是缓存中。否则,编译器一优化,将导致缓存中的数据不发生变化,这样就会出现本文所描述的跳不出while循环了。
        顺便学习下从汇编代码中找出原因。
 
5、在IAR 6.5下如何将数据存放至flash中
        文中提到了ICF文件,前几天一直想看来着,就网上搜索了一番,学习了不少有深度的东西。
        https://www.stmcu.org.cn/file:///C:/Users/lyzqlove/AppData/Local/YNote/Data/ly2008lq2006@126.com/8c6aba819759411995de55d43d81bff0/clipboard.png
    对于ICF文件的详细解读,请参考《IAR环境下的ICF文件解析》,这里不再赘述。
 
6、MDK Logic Analyzer 功能在STM32中的实现问题
        使用MDK的逻辑调试功能的一个例子。主要是开发环境的配置。
 
7、STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题
        显示问题,源于引脚复用,并且切换导致的时序错误。
 
8、CR95HF 的初始化步骤
        关于NFC芯片的初始化的简介,主要是复位和唤醒。
 
9、时钟失效后 CPU 还会运行
        这篇文档也不错,虽然外部的晶振被接地了,但是PLL的输出依然存在,只是不再满足相关的公式了。也就是说,“输入信号频率为0时,输出信号也为0”是不成立的。
        因此,通过有无时钟来驱动CPU执行指令的方式来判断HSE是否失效的方案是行不通过的。
        解决方法是开启CSS,也就是时钟安全系统。具体操作,请移步对应文档,以及芯片数据手册。
 
9、浮点 DSP 运算效率不高
        非常有用。平时在写程序过程中,虽然用到浮点的地方非常少,但是真要用起来,恐怕也会犯同样的错误。本文介绍了如何高效的利用CM4的浮点运算能力。硬件配置都很强大后,那么软件设计需要跟上才行。
        有机会接触到CM4后,一定要好好的学习研究下。以后的工作中就要用到这些了。
 
10、进入了已屏蔽的中断
        中断的操作,进入中断服务程序,检测中断请求标志位,之后要清除中断请求标志位,防止重复进入中断。原因有两个,一个是外设中断请求标识一直存在,另外一个就是中断服务程序退出过快导致CPU尚未来得及
理会外设发出的撤销中断请求标识。好吧,还是看原文,说得很明白。
 
11、鬼魅一样的 Hard Fault
        缓存溢出导致总线错误,最终升级为Hard Fault,文中分析了几种错误类型,以及从软硬件上给出了错误排查的方向。
 
12、未完待续。。。
 
 
 
 
 
 
 
 
 
 
 
 
 

STM32F107嵌入式实时操作系统学习文档 2.doc

下载

1.29 MB, 下载次数: 29, 下载积分: ST金币 -1

收藏 1 评论1 发布时间:2014-3-31 20:14

举报

1个回答
沐紫 回答时间:2014-5-13 14:05:55

RE:【MCU实战经验】基于STM32F107的嵌入式操作系统学习笔记

期待继续!
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版