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

【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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版