背景
最近接手一个带rt_thread
程序的项目,里面的Modbus485
使用的是FreeModbus
,忏愧,由于之前还未接触过RTOS
,还好,前人栽树,后人乘凉,由于原来的程序逻辑已经写得比较完善,所以我也没有太投入太多去修改,现在项目接手一段时间后,也对让这个RTOS有了进一步的了解,闲暇之时,也专门研习了一下,虽说原来代码逻辑良好,但是大量的独立变量,看的人眼花缭绕,阅读是在不是很好,所以我以为为此做了大量的整理,习惯自己的敲码方式—全部采用结构体打包方式,全部整理完之后确实舒畅多啦。
正文
之所以说上面那段废话,是因为,我发现之前的代码确实写的比较凌乱,不够简洁,包括这篇所要说的FreeModbus
,里面既有STM32
配置风格,又参杂RTOS配置风格,云里雾里的,遂重新创建之,也加深对这个组件的理解和使用。
由于之前项目用的是rtt1.2+
不知道什么版本的fmbs
【FreeModbus简称之】。因为那个项目采用的是F103C8
芯片,而我现在公司其实大部分产品还是用的F030C8
,有点不一样,想以后如果再开发此类协议产品,就可以直接用操作系统方式,能省事不少。所以就在官网上重新下载了一份rtt的demo工程,里面版本诸多,最后还是采用最新的4.0版本
的RTT,然后使用ENV
工具,对其进行相关的裁剪配置,
主要有几点:
1.打开所要启用的串口,如果不影响,可以全部打开
2.添加fmbs
组件,选择从机模式
(slave),
3.文件系统的话,可以先禁用掉,因为初创时可能会有一堆警告。
4.最后重新scons
工程
工程创建后,打开工程,一般默认都是一个LED线程demo.
然后创建一个 modbus
轮询线程。
如上图第一个即为fmbs
的初始化即轮询函数,下面创建的是线程。
然后再说说串口引脚即485收发使能脚的配置。
如上图,第一个是485使能脚的初始化,现在刚开始还是习惯采用STM32
库函数配置方式来配置引脚。
这个是串口的初始化实际内部,demo有点杂。
在此我做了一些优化,使语义性和逻辑显得更好。
以上两个图是时钟和中断配置,这个好像也只能采用STM32
库函数配置方式,RTT好像没有看到自带配置风格的API接口函数。本来demo是RCC
和GPIO
,我习惯性的在前面加了USART
,一正视觉。因为还有其他也有同名函数,也是醉啦,故改之。
由于我参考之前项目里面的使能引脚配置采用是的RTT自带API(需要用到gpio.c+pin.c两个模块),有点复杂。
遂按照自己的编写方式添加使能引脚控制函数,上图那个配置模式就不需要啦。
如果需要使用RTT
接口方式,需要打开那个宏,在rtconfig.h
中,后面我会再加上RTT
方式的配置图例。
最后,我还要说一个问题,就是rtconfig
默认都是100 TICK
,但是这样创建后,不能正常运行。后来我对比之前项目,将100
改为10000
就可以啦,但是在ENV
里面竟然改不了,说非法。。。
至此再重新运行就可以正常跑啦。
良好,无掉帧现象。
最后再附几张采用之前项目风格方式一些截图。有兴趣可以参照对比一下异同
打开了宏,采用RTT自带 引脚配置API。
这里就是修改实际的485收发使能引脚
如果从F1
转到F0
,还要注意到库定义有些不一样,需要做实际修改,这个是gpio.c
里面的,我是从F1
拷贝过来的。
至此,所有都已完毕,由于初接触RTT
,所以有些还是皮毛。。。