STM32 上移植 FreeModbus RTU

2020-02-29 10:44发布

解压 freemodbus v1.6 源码 看到如下文件目录结构  
708085e57a1496ee2b.png



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
stm32jy
1楼-- · 2020-03-01 06:21
工程项目所在文件夹 FREEMODBUS 下创建 modbus 文件夹和 port 文件夹
396315e57a2570642b.png
stm32jy
2楼-- · 2020-03-01 07:14
 精彩回答 2  元偷偷看……
stm32jy
3楼-- · 2020-03-01 08:25
进入 FreeModbusV1.6 下的 demo 文件夹,看到有各个平台的测试代码文件夹,没
看到 STM32 的,但是看到 BARE 这个不带任何平台的代码文件,将 FreeModbusV1.6 下
demoBAREport 下的所有文件拷贝到新建工程项目 FreeModbus 文件夹下port 文件夹中
723495e57aa42185ed.png
stm32jy
4楼-- · 2020-03-01 08:54
其中:
(1)、 port.h 需要修改。
(2)、 porteven.c 不需要任何修改
(3)、 portserial.c 需要修改
(4)、 porttimer.c 需要修改。
(5)、另外还需要在 main 函数增加 4 个回调函数。
(5.1)、操作输入寄存器的回调函数 eMBErrorCode eMBRegInputCB( UCHAR *
pucRegBuffer, USHORT usAddress, USHORT usNRegs )
(5.2)、操作保持寄存器的回调函数 eMBErrorCode eMBRegHoldingCB( UCHAR *
pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode )
(5.3 )、 操 作 线 圈 的 的 回 调 函 数 eMBErrorCode eMBRegCoilsCB( UCHAR *
pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode )
(5.4)、操作离散寄存器的的回调函数 eMBErrorCode eMBRegDiscreteCB( UCHAR *
pucRegBuffer, USHORT usAddress, USHORT usNDiscrete )
stm32jy
5楼-- · 2020-03-01 08:56
打开 MDK,建立工程
855675e57aa8e3d821.png
stm32jy
6楼-- · 2020-03-01 11:12
打开 portserial.c 文件,这个是移植串口的,不管是 ASCII 模式还是 RTU 模式都需
要串口支持的, void vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )函数,使能
或失能串口的,移植代码如下
  1. void
  2. vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
  3. {
  4. /* If xRXEnable enable serial receive interrupts. If xTxENable enable* transmitter empty interrupts.
  5. */
  6. if (xRxEnable) //接收使能
  7. {
  8. USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //使能接收中断
  9. GPIO_ResetBits(GPIOG, GPIO_Pin_8); //设置 RS485 接收
  10. }
  11. else //失能
  12. {
  13. USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); //失能接收中断
  14. GPIO_SetBits(GPIOG, GPIO_Pin_8); //设置 RS485 发送
  15. }
  16. if (xTxEnable) //发送使能
  17. {
  18. USART_ITConfig(USART2, USART_IT_TC, ENABLE); //使能
  19. GPIO_SetBits(GPIOG, GPIO_Pin_8); //设置 RS485 发送
  20. }
  21. else //失能
  22. {
  23. USART_ITConfig(USART2, USART_IT_TC, DISABLE); //失能
  24. GPIO_ResetBits(GPIOG, GPIO_Pin_8); //设置 RS485 接收
  25. }
  26. }
复制代码

一周热门 更多>