本帖最后由 地瓜patch 于 2019-3-14 11:34 编辑
很久很久以前。我们都沉浸在MCU51的世界里自娱自乐不能自拔。
忽然一道闪电划破长空,有项目需求是低功耗,大的存储容量,高速,接口较多。
经过比较选了A家的片子,那时还是ICC+Studio的方式。那时恰好A家M芯片价格暴涨的阶段,竟然买不到货。
再后来又一道闪电划破长空,新需求是极低功耗,单接口简单,内存不做要求。此时选了p家的nA级芯片,的确功耗极低且稳定性好。
项目中休眠电流真正能做到百納安级别。工作电流在百微安级别。整体功耗控制的相当理想。
缺点是编程编译环境弱**不忍吐槽。不过现在p也出新版IDE了。
项目的需求是千变万化不可琢磨的,作为电工就要竭尽全力去满足顾客的所有需求。
于是千挑万选,最终选定了STM32F407进行项目开发。STM32F407是采用Cortex-M4的核,该单片机采用了意法半导体的NVM工艺和ART加速器。Ram和Flash容量巨大,外设接口丰富。
另外一个不算主要的原因就是手头上有ST送的开发板。这块板子到手以后一直吃灰,都忘记那个活动送的了,从此开始发挥光和热。
从STM32F4-Discovery入门
万般开头难,进入未知领域总是让人害怕。因为没有底气而使得腰杆不直。
还好ST免费提供各个接口或功能完整的应用例程。因为项目中些代码是在标准库的基础上开发的。所以我们的项目就从从标准库入手。
而且ST的应用特多,可参考前辈的开发实例也多。
新手上路最怕急转弯。
在项目中,根据需要做了一张几百个字节的大表存于Flash中,为了保证每一个改写的数据都能及时保存,每次改写数据都要写一次Flash。
每次写Flash的时候,IIS音频输出的声音总会像拖拉机一样“突突突”卡一下。
分析了各种原因没能解决问题。因为代码是在Flash中运行的,那么会不会是一边跑程序一边写Flash会存在冲突?
为了验证这个想法,将写Flash的那段代码放到Ram中运行。换句话说,就是在Ram中运行写Flash的代码从而避免冲突问题。
可是怎么将代码搬移到Flash中,作为新手我不会。
于是想到了万能的21IC,发帖求助? NO,按照惯例是得先看看前辈有没有类似经验。登录bbs.21ic.com搜索一下帖子。
果然发现了ST板块 @香水城 版主的帖子“KEIL中如何程序在 RAM 中运行” https://bbs.21ic.com/icview-1249662-1-1.html
帖子内容很详细,手把手讲解如何更改Keil的设置,如何更改.sct文件,再用__attribute__((section("RAMCODE")))声明,将目标函数放在Ram中。
最后在project.map文件中查看,函数是不是真正放到Ram中了。
使用该方法可以将任意函数声明后放入Ram中运行。实验结果优秀。
虽然经过以上程序测试,学会了将代码放到Ram中运行但是没有解决我的音频卡顿的问题。
继续猜想,工程师的一个重要任务就是不能怕累,天马行空的猜想是谋生的一大技能。
会不会是写Flash太频繁呢?地球人都知道写Flash要先整块擦除,再将整个大表写入,这个过程是需要很长时间的。
经过技术大拿的会议评审,决定在所有参数更改完成以后发出一个确认命令,最终将所有数据一次写入Flash。从根本上解决了上述问题。
目前ST从高性能到简单应用的产品系列较全,生态圈完善,技术支持到位。开发板及例程很多,大大缩短了新手入门从陌生到熟悉的时间。
现在项目所有的程序在STM32F4-Discovery开发板上已经实现。
下一步就是要打样板做外壳,争取一次成功。
鸣谢!!!
感谢ST产品及其生态圈。
感谢ST板块及版主香水城。
感谢21ic的中帮助过我的所有电工。
小结:
1.站在前辈的肩膀上回看的更远,ST版主香水城汇总的ST MCU实战经验汇总贴】非常有参考价值。
2.通过A,P,I,S等等各家产品的使用情况进行一些经验总结 。对于所有硬件产品的设计开发有两点,一是配置寄存器,剩下的就是二程序逻辑。
|
@21ic小喇叭 :续完了
待续