移植FreeModbus+ModbusMaster(主机)+STM32至RT-Thread(1、2阶段)

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:[email protected]

简述

     由于之前做过STM32+FreeModbus+uC/OSII(示例代码,点击下载  的移植,所以这两天的努力整体移植工作还算比较顺利,已经成功提前完成之前制定的1、2阶段任务,源码位于FreeModbus+RT-Thead+STM32(示例代码,点击下载现将部分移植过程做以说明。

     移植采用的是FreeModbus1.5源码,RT-Thread使用的最新的1.1.1稳定版,STM32选用串口1作为从机串口,并增加了RS485发送/接收使能引脚,考虑的Timer2到时候留住Modbus主机使用,所以这里从机选用了Timer3。

     移植RT-Thread至STM32网上的例程很多,同时RTT提供相应BSP,这里就不在重复说明。

FreeModbus移植

     FreeModbus的移植过程中主要需修改以下几个文件

1、/FreeModbus/port/portserial.c   里面涉及多了很多串口配置,我这次把暂时只实现了串口1,串口模式支持奇偶校验,串口的发送及接收都采用中断模式,发送使用发送缓冲区空中断,而非采用串口发送完成中断,还需要在该文件增加串口中断服务程序。

2、/FreeModbus/port/porttimer.c   里面主要是设置了一个50us的定时器,采用定时器3溢出中断,并在文件中增加定时器中断服务程序

3、/FreeModbus/port/port.h     里面增加自己需要的相关头文件,定义RS485发送/接收使能引脚

4、/FreeModbus/port/port.c     里面增加开启、关闭全局中断,可是使用STM32库函数自带的,也可以使用RT-Thread中自带的,我这里使用的是STM32自带的开关全局中断

     移植好最基本的FreeModbus框架之后就得开始编写相应的Modbus功能实现方法,我在移植STM32+FreeModbus+uC/OSII时候这个工作已经做过了,所以这次就直接拷贝过来用,文件位于/APP/src/UserModbusSlaver.c

验证

    至此FreeModbus的移植工作就算告于段落了,为了验证移植的成功性,我这里想通过ModbusPoll上位机软件查看操作系统的CPU利用率来验证,CPU利用率的整数位及小数位分别保存在Modbus保持寄存器的地址1、2里,下面来描述下具体过程

1、增加两个线程一个起名:SysMonitor(系统监控),另一个起名:ModbusSlaverPoll(Modbus从机轮训)

2、在系统监控线程中增加获取RTT的CPU利用率、闪烁指示灯和喂狗功能

3、在Modbus轮训线程中增加FreeModbus初始化(波特率115200、偶校验、RTU、串口1、从机ID1),及FreeModbus轮训方法

4、接下来就是见证奇迹的时刻,打开ModbusPoll软件,设置好串口信息及轮训的功能即可

看看就源码就更好理解了,两个过程非常简单,有问题欢迎大家提问。

//***************************系统监控线程***************************
//函数定义: void thread_entry_SysMonitor(void* parameter)
//入口参数:无
//出口参数:无
//备    注:Editor:Armink   2013-08-02    Company: BXXJS
//******************************************************************
void thread_entry_SysMonitor(void* parameter)
{
	while (1)
	{
		cpu_usage_get(&CpuUsageMajor, &CpuUsageMinor);
		usRegHoldingBuf[HD_CPU_USAGE_MAJOR] = CpuUsageMajor;
		usRegHoldingBuf[HD_CPU_USAGE_MINOR] = CpuUsageMinor;
		LED_LED1_ON;
		LED_LED2_ON;
		rt_thread_delay(DELAY_SYS_RUN_LED);
		LED_LED1_OFF;
		LED_LED2_OFF;
		rt_thread_delay(DELAY_SYS_RUN_LED);
		IWDG_Feed(); //喂狗
	}
}

//*************************** Modbus从机线程***************************
//函数定义: void thread_entry_ModbusSlaverPoll(void* parameter)
//入口参数:无
//出口参数:无
//备    注:Editor:Armink   2013-08-02    Company: BXXJS
//******************************************************************
void thread_entry_ModbusSlaverPoll(void* parameter)
{
	eMBInit(MB_RTU, 0x01, 1, 115200,  MB_PAR_EVEN);
	eMBEnable();
	while (1)
	{
		eMBPoll();
		rt_thread_delay(DELAY_MB_SLAVER_POLL);
	}
}


 为了方便大家关于项目的进展,目前项目源码已在Github上开源,https://github.com/armink/FreeModbus_Slaver-Master-RTT-STM32

大家可以关注查看下载,也可以pull request。

 

你可能感兴趣的:(eclipse,主机,stm32,RT-Thread,FreeModbus)