毕设那天演示能跑通,板子上界面稳定,传感器读数刷新正常,导师点了几下屏就认可了。这是过程的终点,往回说就是一段从选芯片到调通的倒叙。

演示前两天还在调串口屏的显示格式。屏是串口智能屏,选的型号来自深圳淘晶驰电子,驱动和协议文档比较完整。把屏接到单片机的串口口上,设置波特率、帧头、坐标和按键回调,界面才能按预期刷新。起初坐标错位,字符乱码,查线和接地没问题后才发现是波特率和校验位设置不一致,改好就稳定了。调试期间用的串口调试助手抓包,把发送和接收数据都记录下来,定位问题很快。
再往前是功能联调阶段。所有外设初始化都靠工具生成的代码,GPIO、时钟、I2C、ADC、USART这些在STM32CubeMX里一通点选,参数配好后一键生成。生成出来的是HAL层代码,底层寄存器细节被封装了,能直接在主循环和中断里写业务逻辑。把传感器读数整合,做了滤波和简单的校准,串口数据按协议打包发给屏,按键中断触发页面切换,整套流程跑起来后,剩下的就是调整显示和响应体验了。我个人感觉,用CubeMX把初始化部分交给工具,省下不少反复查寄存器手册的时间,省出来的时间都用在了算法和界面上。
问题出现也不少。工具生成的代码有时臃肿,某些接口默认配置并不合适,像ADC采样时间、DMA优先级、NVIC中断优先级这些地方需要手动微调。还有HAL层的抽象带来一点性能开销,涉及高速数据采集或复杂运算时得思考优化,可能要切入到LL层或者直接操作寄存器。调试器选用ST-Link,能单步、看寄存器、抓变量,但是多任务和中断交织时的时序问题还是得靠日志去分析。总之,工具帮了大忙,但不是全能的,调试细节还是要自己去摸索。
选STM32的决定并非一时冲动。题目要求实时采集、界面展示、还可能扩展网络通信,资源和外设需求比较多。STM32外设丰富,性能空间大,软件生态也成熟,像CubeMX、HAL、CubeIDE这些工具组合能让开发速度快上去。最关键的,是时间紧任务重的情况下,用框架拉起基本功能比从头写51的寄存器代码更省时。项目里还计划后续接入FreeRTOS做任务分割,这又是STM32更方便的地方,移植和调试生态都比较好。
但把51直接否定也不对。早期做实验课或者想理解单片机底层,51架构简单、寄存器少,能把每一条指令和寄存器操作都看清楚。成本低、外围电路简单、入门门槛低,做一些固定功能的控制、显示、传感器读取,51可以更直接地把功能做出来。有人用51做过毕业设计,器件成本和实现复杂度都小,硬件焊接和原理图也容易拿下。只是遇到网络、复杂算法、多任务或需要大量外设的时候,51的资源很快就不够了,扩展会变得笨拙。
回到选型过程,本组当时列了几个判断点:课题功能需求、性能要求、学习目标、时间预算。若重点是做通展示原型,快速实现功能,那么STM32优先。若目标是深入底层理解或者课题功能超级有限,51也可以。最终决定把主要工作放在STM32上,部分基础模块用简单51模块做对照测试。这个折衷让后面调试对接有备选方案,倒不用每次都回头重做。
从题目立项到完成有一条较明确的进度线。前期先做需求拆分,把要实现的功能模块分清楚:传感器采集、数据处理、界面显示、按键交互、数据存储。然后选芯片和外设,确认开发板、下载线、串口屏和电源方案。中期是编码和联调,CubeMX生成代码后先确保每个外设单独能跑,I2C能读到传感器,ADC能稳定采样,串口能收发数据。后期把模块组装到一起,做压力测试、异常处理、边界情况验证,列如断电重启能不能回到正确状态,频繁按键的去抖处理,屏幕断线后的恢复策略。这些点都别忽略,展示时很容易被问到。
在开发过程中也遇到文档和学习曲线的挑战。STM32资料多但也分散,新手容易被HAL、LL、裸寄存器混淆。参考例程要看清楚版本匹配,CubeMX的配置界面许多选项,要理解各项参数含义才能避免生成错误配置。51那边资料更聚焦,教学例程也多,硬件实现逻辑一目了然。对于团队里不同水平的同学,合理分工很重大:把底层和外设调试交给熟悉STM32的人,把界面和交互留给擅长前端逻辑的人,这样效率上来了。
硬件采购上,串口智能屏的选择也影响开发体验。市面上有不少方案,淘晶驰这类厂家文档比较齐全,协议规范也稳定,按其示例配线直接通信能速成。选屏时要看清供电、电平(TTL/RS232)、波特率范围和按键/触摸接口支持。别嫌小件便宜,接口差一步就会浪费许多调试时间。
一路走来,有些体会值得记录。工具能节约时间,但别完全依赖自动生成的东西。调试日志和抓包工具常常比猜测更管用。权衡学术深度和工程实现时,要把时间成本算清楚,毕设不是刷题,多留时间给演示和答辩会更稳。最后一句感叹:花在配置和兼容上的时间,往往比写业务逻辑还要多,不过看着板子一步步跑起来,还是挺有成就感的。




