前段时间学习RTOS,μC/OS-III,教材是micrium的中文版,板卡是中国版板卡,例子非常详细,代码风格很好,值得学习。 附件对《嵌入式实时操作系统UCOS-III应用开发--基于STM32微控制器》的第一个例子给出了自己的分析和解读,对入门有一定的帮助作用。 STM32F107的内部资源也非常丰富,板卡本身的外设和扩展能力也不错。试验过micrium的嵌入式TCP/IP,也很不错,只是提供库,并且限制很多,有点不爽。 希望拿到这块性能更高的STM32F4的板卡,期待在上面移植μC/OS-III和GUI以及嵌入式协议栈。也期待和大家一起进步! 2014-4-30 08:35:55 刚好STM32的官方社区上传了不少的中文资料,这些都是和实际应用开发密切相关的,在指导我们的设计和调试工作具有现实意义。 在需要文档的时候,直接以名称进行搜索即可。 接下来将简略记录每个文档的阅读笔记。 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
【MCU实战经验】基于STM32F103C8T6的hart总线调试器设计
求教STM32F103进入STOP模式后用外部中断唤醒的问题
基于STM32F103RCT6的无源蜂鸣器音乐播放(生日快乐歌)
STM32F103c8t6有没有DAC 功能?
STM32F103x中文数据手册
新手求教,为何在我电脑上找不到STM32F1Xx.h文件
金龙107例程汇总(STM32F107)
万利STM32F107VC 原理图
STM32F103 ADC多通道检测必须要DMA吗?
【官方例程】STM32F107以太网官方例程
RE:【MCU实战经验】基于STM32F107的嵌入式操作系统学习笔记