RT-Thread 应用笔记 - 不正确使用LOG也会引发hard fault
RT-Thread 应用笔记 - RTC Alarm 组件的使用
RT-Thread 应用笔记 - freemodbus RTU RS485 从机
RT-Thread 应用笔记 - freemodbus RTU RS485 主机
RT-Thread 应用笔记 - libmodbus RTU RS485 从机
RT-Thread 应用笔记 - libmodbus RTU RS485 主机
RT-Thread 应用笔记 - STM32 CAN 通信双机
背景
- 部分用户使用基于rt-thread freemodbus组件,发现没那么顺利。
- 基于rt-thread,已经有freemodbus的主从机软件包。
- 本篇实现主机篇,从机篇请查看上一篇笔记。
- 最近发现部分用户,组件拉下来,编译通过,调试失败,就发帖求助,没有主动的去分析问题的原因,多半是连引脚都没有配置。
前言
- 嵌入式软件工程师,需要了解原理图,了解引脚定义,如串口、RS485控制引脚、等等。
- 我的板子,MCU 为STM32F103C8T6, Flash与SRAM都相对不大。
- UART1用于rt-thread MSH串口。
- UART3用于RS485,用于modbus rtu串口。
移植
- 与freemodbus从机一样。
- 编译与下载。
- MSH 串口运行:mb_master_samlpe,开启主机功能,例程里,是写多个保持寄存器。
while (1)
{
/* Test Modbus Master */
data[0] = (USHORT)(rt_tick_get() / 10);
data[1] = (USHORT)(rt_tick_get() % 10);
error_code = eMBMasterReqWriteMultipleHoldingRegister(SLAVE_ADDR, /* salve address */
MB_SEND_REG_START, /* register start address */
MB_SEND_REG_NUM, /* register total number */
data, /* data to be written */
RT_WAITING_FOREVER); /* timeout */
/* Record the number of errors */
if (error_code != MB_MRE_NO_ERR)
{
error_count++;
}
}
- 连接从机,注意RS485接线。
- 可以使用modbus slave工具,模拟从机(usb转rs485接入电脑)。
- 主机正常运行。
总结:
(1)引脚配置,如uart3的配置,是需要用户自己配置的,如果使用STM32 HAL库,一般在board目录下,有个
stm32f1xx_hal_msp.c。注意,不同系列的STM32,不一样,如F4 L4等。注意灵活参考。
(2)RS485通信,需要考虑方向控制引脚的配置。
(3)注意从机地址的设置,如果是主机,理论上可以与多个从机进行通信,多个从机,都菊花链式挂在同一条RS485总线上。
(4)多看Modbus协议,了解寄存器的读写。
demo 地址:
https://gitee.com/zhangsz0516/rtt_stm32_freemodbus