IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:27:08  更:2022-12-25 11:27:38 
 
开发: 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年4日历 -2024/4/26 21:57:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码