STM32下位机程序的逻辑写法思路

经过一段时间的学习,现在需要对具体的项目进行程序开发,程序东一下西一下的修改来修改去肯定是乱七八糟的,总结了下面的思维逻辑进行项目的开发,如有不正确的地方,欢迎指导讨论。

第一步,规划程序通讯协议。
第二步,构建标志位结构体
第三步,构建对象结构体
第四步,构建功能函数

第一步,规划程序通讯协议

对于所需要开发的项目,都是有需要具体实现的功能,这些功能在STM32中基本都使用各种通讯总线的方式被控制或去控制。
所以按照功能实现,首先规划通讯协议的功能指令,无论是串口,CAN,SPI,i2c等,应有一套常用的通讯协议架构来实现控制与数据传递。

我现在常用的结构如下:
帧头->功能码->控制码->数据长度->数据流->帧尾

以上结构并没有使用crc校验或者累加和校验,因为我感觉普通的项目应用已经足够,目前在用的程序中反复测试并没有问题。
所以关于这里哪些大佬有经验分享一下不使用校验会存在那些问题?

通讯协议的结构套用之后,对项目或设备所需要实现的哪些功能进行规划,假定为一个字节的控制码,比如:

0x01:功能A
0x02: 功能B
0x03: 功能C
0x04: 功能D
0x05: 功能E

随后在不同的功能码中,可以传递不同的控制码和数据流。
相对于下位机的上位机,只需要根据通讯协议就可以控制并且传递数据到下位机,如使用CAN总线甚至可以将硬件模块化,每一个硬件模块通过通讯协议可以独立工作,避免二次开发或移植。

第二步,构建运行标志位

将通讯协议中的功能运行的状态,使用标志位进行结构体封装,这样会有利于程序的逻辑与线程管理。

假设
功能A: A电机运行1分钟
功能B: 如A电机不在运行时,点亮led。

这个时候应该将电机的运行状态在状态结构体中进行定义,运行的时候为1,停止的时候为0。
这样我们在程序中的任何位置可以对标志位进行判断,从而实现其它功能或者逻辑执行。

第三步,构建对象结构体

我学写代码是从Python开始的,STM32我使用c开发,对我来说一下子上升了N个难度系数,相较而言这简直就是机器码。各种思维都是流程化的,不是对象化的。

面向对象和面向过程我就不说了,我都理解也很浅,Python的各种库各种类的那种代码思维在这里不管用。
直到我接触到了结构体,把需要功能的数据抽象化放到一个结构体里,可以有效的使得功能变得对象化,我也不知道怎么专业的形容,反正就是好用。

比如一个步进电机,我们需要的参数如下:
速度:
状态:
加速数组[]:
方向:
脉冲:
实际会比这里需要更多一些的变量,但意思就是这是些关于电机的结构体数据,他是抽象的,可复制的。我理解,这不就是对象么?

第四部:构建功能函数

接下来最难的地方我认为就是一个个功能函数,协议有了,标志位有了,结构体有了,然后就是实现了。

每一个对象功能封装到一个.c和.h文件中,将大问题拆散为一个个小问题,比如通讯协议其中一条命令,让步进电机转一圈,那么这个函数归类到电机的c文件中,使用gpio或者定时器等资源,外部调用进来。

最后,通讯协议中的功能码控制码引入调用这些函数,实现相应的功能。至于函数内的一些实现逻辑与算法,那就看各个不同的人的造化了。

欢迎交流,菜的一地,不喜勿喷。