STM32|STM32 freemodbus TCP 通讯
这两天一直在调试STM32F4的 TCP,并且想应用到freemodbus TCP,这样我的设备就可以集成化联网控制。
因为现在大部分使用STM32的应该都使用ST专用的配置软件STM32 CubeMX进行程序的初期工程,这有一个好处,就是加快开发进度,我这里也是在此软件下进行开发,我只是为了记下自己的使用过程,方便以后查看,写的可能会比较乱。
1、STM32 CubeMX建立工程,内容包括 ETH,FreeRTOS,LWIP
文章图片
2、只需要配置LWIP为静态地址,这是因为我的设备不方便用动态地址,你也可以不改用DHCP
文章图片
3、生成KEIL5工程,然后加入freemodbus文件,进行修改。
文章图片
在这里主要是修改porttcp.c这个文件,并且在port.h 里面增加个宏定义
/* Critical section management. */
extern void vPortEnterCritical( void );
extern void vPortExitCritical( void );
#define ENTER_CRITICAL_SECTION()vPortEnterCritical( )
#define EXIT_CRITICAL_SECTION()vPortExitCritical( )
还有在mbconfig.h下面配置为TCP方式
/*! \brief If Modbus ASCII support is enabled. */
#define MB_ASCII_ENABLED(0 )
/*! \brief If Modbus RTU support is enabled. */
#define MB_RTU_ENABLED(0 )
/*! \brief If Modbus TCP support is enabled. */
#define MB_TCP_ENABLED(1 )
4、主程序增加一个应答freemodbus TCP即可。
osThreadDef(ModbusPollTask, eMBPollTask, osPriorityNormal, 0, 128);
osThreadCreate(osThread(ModbusPollTask), NULL);
当然在创建任务之前,先初始一下freemodbus tcp,我们直接在生成的 StartDefaultTask 任务里进行初始化也可以。MX_LWIP_Init();
会生成一个收包和应答ARP和PING的任务。这是软件自动生成的,这样我们要做的工作就很少了。
/* StartDefaultTask function */
void StartDefaultTask(void const * argument)
{
MX_LWIP_Init();
/* USER CODE BEGIN 5 */
eMBTCPInit(0);
eMBEnable();
/* Infinite loop */
for(;
;
)
{
osDelay(1);
}
/* USER CODE END 5 */
}
到此我们的freemodbus tcp就可以了,通过ping 和 modbus poll连接测试都没有问题。
文章图片
文章图片
当然中间会有点小的问题,不过我相信大家一定能自己解决的。细节自己看原代码体会,我也是初学者。
【STM32|STM32 freemodbus TCP 通讯】
推荐阅读
- CVE-2020-16898|CVE-2020-16898 TCP/IP远程代码执行漏洞
- 基于stm32智能风扇|基于stm32智能风扇_一款基于STM32的智能灭火机器人设计
- stm32|基于STM32和freeRTOS智能门锁设计方案
- 计算机网络基础TCP\HTTP\HTTPS
- STM32F4|STM32F4 TIM6 TIM7 基本定时器
- TCP长连接与段链接
- TCP组件设计篇(详细设计)
- 工具|Wireshark抓包对其字TCP段理解
- 网络|网络编程释疑(TCP连接拔掉网线后会发生什么)
- 服务器未能释放tcp连接,TCP连接的建立和释放