RT_Thread+FreeModbus使用笔记

废话一段先
最近接手一个带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 轮询线程。

RT_Thread+FreeModbus使用笔记_第1张图片
如上图第一个即为fmbs的初始化即轮询函数,下面创建的是线程。
RT_Thread+FreeModbus使用笔记_第2张图片
然后再说说串口引脚即485收发使能脚的配置。
RT_Thread+FreeModbus使用笔记_第3张图片
RT_Thread+FreeModbus使用笔记_第4张图片
如上图,第一个是485使能脚的初始化,现在刚开始还是习惯采用STM32库函数配置方式来配置引脚。

RT_Thread+FreeModbus使用笔记_第5张图片
这个是串口的初始化实际内部,demo有点杂。
在此我做了一些优化,使语义性和逻辑显得更好。
RT_Thread+FreeModbus使用笔记_第6张图片
RT_Thread+FreeModbus使用笔记_第7张图片
以上两个图是时钟和中断配置,这个好像也只能采用STM32库函数配置方式,RTT好像没有看到自带配置风格的API接口函数。本来demo是RCC和GPIO,我习惯性的在前面加了USART,一正视觉。因为还有其他也有同名函数,也是醉啦,故改之。
RT_Thread+FreeModbus使用笔记_第8张图片
由于我参考之前项目里面的使能引脚配置采用是的RTT自带API(需要用到gpio.c+pin.c两个模块),有点复杂。
遂按照自己的编写方式添加使能引脚控制函数,上图那个配置模式就不需要啦。
如果需要使用RTT接口方式,需要打开那个宏,在rtconfig.h中,后面我会再加上RTT方式的配置图例。
RT_Thread+FreeModbus使用笔记_第9张图片
最后,我还要说一个问题,就是rtconfig默认都是100 TICK,但是这样创建后,不能正常运行。后来我对比之前项目,将100改为10000就可以啦,但是在ENV里面竟然改不了,说非法。。。
RT_Thread+FreeModbus使用笔记_第10张图片

至此再重新运行就可以正常跑啦。
RT_Thread+FreeModbus使用笔记_第11张图片
良好,无掉帧现象。

最后再附几张采用之前项目风格方式一些截图。有兴趣可以参照对比一下异同

RT_Thread+FreeModbus使用笔记_第12张图片
RT_Thread+FreeModbus使用笔记_第13张图片
RT_Thread+FreeModbus使用笔记_第14张图片
RT_Thread+FreeModbus使用笔记_第15张图片
打开了宏,采用RTT自带 引脚配置API。

RT_Thread+FreeModbus使用笔记_第16张图片

RT_Thread+FreeModbus使用笔记_第17张图片
RT_Thread+FreeModbus使用笔记_第18张图片
这里就是修改实际的485收发使能引脚
RT_Thread+FreeModbus使用笔记_第19张图片
如果从F1转到F0,还要注意到库定义有些不一样,需要做实际修改,这个是gpio.c里面的,我是从F1拷贝过来的。

至此,所有都已完毕,由于初接触RTT,所以有些还是皮毛。。。

你可能感兴趣的:(编程学习进阶笔记)