| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32程序设计规范浅析 -> 正文阅读 |
|
[嵌入式]STM32程序设计规范浅析 |
? ? ? ? 这篇博客写到“STM32基础知识篇”里,一方面是一个很好地对过往工作的总结,另一方面也是整个专栏撰写计划的开端,古人云:良好的开端是成功的一半,在文章的最后详细地规划了整个专栏后期的更新计划。 ? ? ? ?笔者前段时间休息的时候,把市面上很多开发板的教程也大致都看了一遍,也给自己一些创造思路或者写作方向吧,想要写好博客,就需要多阅读多思考并且不断地总结归纳,写作前多问自己几个为什么、相同问题多看不同教程的说法、相似技术多听不同人的说法,只有在写作前思路清晰,才可能在博客里把很多看似复杂的事说明白,尤其对于“STM32基础知识篇”这个专栏,目的就是夯实基础,提高进阶,那么怎样才算打好基础呢? ? ? ? ?如同那句名言:一百个读者就有一百个哈姆雷特!没有一个绝对性的答案,有人会说要学好C语言和数据结构;有人说要学好寄存器配置和多看数据手册;也有人说多实践动手才可能学好等还有很多种观点,当然上面这些观点都没有问题,但似乎又有什么都说了,但什么都没说的感觉,笔者个人的看法,学习任何一门技术都是先模仿再创造的过程,不断健全自己的知识体系,多动手多思考多总结,扩展知识面也逐步形成自己的知识网络去解决问题,因为研发总是一个不断遇到问题和不断解决问题的过程。 ? ? ? ?在这篇博客围绕两个问题其一、STM32程序怎么编写才显得规范整齐,方便后期维护也提高程序的健壮性和稳定性;其二、“STM32基础知识篇”后续写些什么才能夯基固本,正真地从STM32入门学习到走在提高的路上,实际上这两个问题有着紧密的联系。 ? ? ? ? 关注过一些微信公众号,里面曾经看到过几篇讲STM32软件架构的文章,逼格很高写得很有文采,平心而论很难写到那样的高度,?但笔者结合近5年的产品研发经验和大家探讨STM32程序上的规范。 ? ? ? ? 首先需要把需求整明白这点非常重要,切勿啥也不想直接硬上写代码,那你写出的代码一定后期改动很大,举个例子,做过一个项目STM32外挂了adc和dac,以及需要根据adc的回读值给出不同占空比的pwm波给风扇调速,adc输入的是一个正弦波,即对一个正弦波进行adc采样,需要对一个外接IO进行上下边缘判断从而标记整个正弦波的开端,dac需要给定特殊的波形值,单片机内部需要存储校准系数,用来校准adc和dac的采样和输出值,需要两个串口和上游下游STM32通信,这时候就需要理清楚整体思路,把需求归纳好再动手。 ? ? ? ?其次在动手编码的时候,很多初学以及工作过几年的人,都喜欢跑裸机先拿if else把逻辑堆起来,看起来功能好像实现了但没有考虑到整体架构等,会发现后续很难添加新功能,而且由于缺少分层的思想,整个程序会很凌乱可靠性稳定性差。这里我们是在做嵌入式MCU开发,不同于做PC端的WEB开发,需要更多地站在MCU角度思考整个程序的健壮性,这里有几点经验性的建议吧。? ? ? ?1. 尽量少开中断,有同学会在说整个需求里有多个串口,有多个需要定时计算的地方等,需要加几个定时器和串口中断才能满足需求,然后就真的开了很多中断,加上程序设计上没有分层,逻辑层和驱动层混乱,导致程序各种bug,这里大家需要学会用嘀嗒定时器、dma搬运等多种方法来合理减缓MCU的频繁进出中断的压力; ? ? ? 2. 中断不做等待,有很多人喜欢在中断做一些复杂运算甚至等待delay操作,这些都是非常不好的习惯,导致MCU被一个中断事件持续打断,无法及时响应外部其他中断,正确的做法是在中断里只做赋值和置位操作,如果是裸机在while(1)循环的flag里去做后续操作,如果是系统freertos在任务集里做相应操作; ? ? ? 3. 逻辑驱动分层,这是MCU编程的一个重要思想,同时关系到整个程序架构的稳定性和健壮性,在拿到一个需求后,大家需要想清楚哪些事情需要逻辑层处理,哪些事情驱动层就可以搞定,这样做下来,你会发现以后需求不管怎么变化,只是逻辑层随着变化,不伤筋不动骨,也不易出错; ? ? ? ?4. 通信握手等待,这点在MCU和MCU串口通信之间非常常见,比如外界干扰或者程序逻辑问题,导致报文收发不一致,做好报文握手和校验,以及超市等等,异常处理等后续逻辑也关乎整个产品的稳定性和可靠性; ? ? ? ?5. 合理存储数据,有很多项目需求有着掉电存储的需要,常见的有外挂eeprom和外挂flash,但这里大家也需要合理利用好MCU内部的flash空间,一方面可以进行IAP升级,一方面可以存储一些其他项目需求的数据等。 ? ? ? ?聊完了一些STM32程序设计上的一些常见规范问题,再来思考“STM32基础知识篇”后续写些什么对于夯基固本更有意义,笔者也看了很多市面免费和付费的教程和网课,开卷有益,去粗取精,笔者这里会带着大家从零学习STM32这款经典的芯片(当然每个人的精力和能力有限,因此想着想搞完一个专栏再写另一个专栏,摊子不易铺得太大,现在正潜心想把“FPGA 20个例程”专栏收尾,再推出“FPGA 高速接口”专栏),具体内容大致如下(未完待遇): 1. STM32时钟配置运行机制; 2. STM32 GPIO类型和对应用途; 3. STM32定时器:RTC,看门狗,普通定时器,嘀嗒定时器的异同; 4. STM32 串口普通中断和空闲中断的对比; 5. STM32中dma的应用举例; 6. STM32内部模数转换adc的应用; 7. STM32内部数模转换dac的应用; 8. STM32 IO模拟IIC通信eeprom; 9. STM32 SPI读写外挂flash; 10. STM32的EXTI外部中断类型举例说明 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 16:55:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |