四年STM32研发的工作感悟

博主分享了自己四年STM32开发的经历,从简单的功能实现到复杂的协议栈和系统稳定性设计。文章强调了STM32在实际项目中的应用挑战,指出虽然学习资源丰富,但具备实战稳定性的资料较少。文中列举了实际工作中的例子,如数据通信、远程升级等,探讨了如何提升STM32程序的稳定性和健壮性。STM32的学习路径建议从基础实验到RTOS和协议栈,再到项目实践和深入研究。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        这篇博客不涉及具体技术,只是简单的STM32四年开发经历的回顾和总结,晚上忙完工作以后坐到电脑边写的,没有长篇大论和华丽词藻,但直奔主题。

       硕士刚毕业步入社会,第一个接触到的就是STM32,那时候因为STM32的价格优势和开发速度,使得它仿佛可以胜任各个领域的嵌入式开发,如同提到FPGA就让人想到XILINX,提到MCU就让人想到STM32,而且市面上STM32的生态环境很好,各种各样的学习资源、琳琅满目的开发板好像真的降低了很多开发难度,但事实真的如此吗?(因为疫情快递也变得很慢,野火F103开发板昨天终于收到了,也真的很不错,拿到手顺便用ST-LINK下载一个点灯实验,板子虽然比较贵但不是翻新芯片,看起来很皮实,可以有硬件用拿来撰写STM32专栏了,会花很多的精力写好STM32 10个实战项目篇和FPGA 20个功能例程篇两个专栏)

        一晃眼已经用STM32做了四年的产品开发,从一开始开发简单的功能如用一颗低端F103芯片把编码器、按键、点灯等外部中断事件通过串口发送报文给显示面板F429芯片解析;到移植和二次开发一些库函数、协议栈,如Lwip协议、Scpi库、Fats32、Usbtmc、Modbus_rtu、Freertos等等;最后再到整台精密仪器和设备的STM32嵌入式软件开发,随着功能需求的增加,稳定性能的提高,在动手当编码之前,脑子里真的会认真考虑到很多方面的问题,同时也关系到整个嵌入式系统软件的稳定性和健壮性。

        举几个现实工作的例子:1.一台产品前端有触摸屏显示板,用户操作显示板通过485总线发送数据报文到后端各个控制板上,需求中存在很多数据类型,例如有设置输出值的,设置保护值的,设置各功能限制值的,下发机器校准数据的等等,可以说不同功能模块又有不同的报文需求,怎么把报文做得更加实用,并带有握手和重发机制,确保整个产品的稳定性;2.开机显示板会绘制一些logo,怎么把这些logo从外挂的Flash里读出来,一开机就显示在屏幕上,前端显示板怎么开机检测后端控制板、通信板等其他模块的工作状况,怎么采用报文应答以确认状况,通过刷新进度条显示在用户眼前;3.理论上前面板移植了Usbtmc、Fats32就已经具有读写U盘的功能,但怎么才能把U盘的各个板子上的.bin数据都读出来,再通过报文逐一发送到后端STM32和FPGA芯片上,实现IAP远程U盘升级,后端STM32需要怎么把Bootloader做准确实用而不是开发板上的demo,FPGA又需要怎么通过时序逻辑去写入外挂Qspi-Flash中;4.在一个实际转产的产品中,STM32应该做好哪些事情、FPGA应该做好哪些事情,比如FPGA挂着几个adc和dac,adc应该怎么采,怎么算,怎么还原波形,再怎么带入校准表返回给前端显示面板,dac应该怎么给数给基准,通过运放层层给定到下面功率层等,比如STM32怎么设置刷屏,常规的有轮询查问,即显示面板在Freertos下开一个系统任务,上面一个个问,下面一个个答,显示面板再一个个刷屏数据,但这样效率低下功能复杂的时候,很多问题会暴露出来等等,可以说市面上确实有很多STM32学习资料和教程,但具有项目实战稳定性很少,而且面对现实的一个个实际需求,也会逼着你刨根问底,把很多细枝末节琢磨清楚。

       关于STM32的学习,很多开发板都是用标准库写的,但随着ST整体HAL库的完善,很多二次库和协议栈也都基于HAL库上了,随着工作的不断积累很多东西才能慢慢理解,逐渐形成一个比较完整的知识体系,上学的时候,学校可能告诉我们有STM32这样东西,于是乎通过大家买了各种各样的开发板,但大部分情况下都很少去动手编程,只是通过开发板观察现象get到一些东西,再步入工作以后,发现千篇一律的demo例程很难应用到实际项目中,又是各种摸索和探究,不知不觉踩过很多坑,才对一些东西有了更深的认识,因为当你的程序烧进千千万万产品当中时,稳定性和可靠性压倒一切,谈不上“老学究”一样做各种科研论文,简单些我们只是在做应用开发,但需要把相关东西琢磨清楚,理解到位。

      今年元旦开始撰写博客到现在,也有一些朋友私信问STM32有没有前途,应该怎么学可以高薪就业吗,其实任何技术存在即合理,STM32是没有ARM LIUNX或者FPGA那样看着门槛很高,空间很大,但以STM32为代表的MCU开发真的很好找工作,也有蛮多高薪机会,正应了那句老话,行行出状元!

       关于STM32应该如何学习才能成长起来,这个话题真的仁者见仁智者见智,笔者就自己的工作学习经历简单说说,相信大部分同学也都是这样一路走过来的,首先可以买一块F103低端的板子学习,建立一些基本概念,包括定时器、各种中断、硬件IO初始化配置等等,会初始化IO,会使用HAL库,做一些简单的实验会编写裸机代码,懂得如何仿真查找定位问题;然后再系统学习轻型操作系统,典型的代表就是Freertos,有了操作系统的概念,再在操作系统上做些简单二次开发,找找任务划分的感觉,如果学有余力可以学习下Emwin人机界面库,也是当前STM32做界面开发的主流代表;接着接触一些书写规范的STM32代码,“STM32 10个实战项目篇”专栏里的代码工程都是经过项目转产考验的,也是笔者四年以来的项目总结,在这里抛砖引玉;最后根据项目需求,结合实际应用背景做更深一步地摸索,比如蓝牙协议,WIFI等等。

    

      

      

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值