(旧版本)freemodbus内部理解以及一直到stm32标准hal库

本文探讨了在STM32 HAL库上整合FreeModbus时遇到的问题,如串口ORE错误。为了解决这个问题,作者决定使用HAL_UART_Receive_IT和HAL_UART_Transmit_IT进行收发数据,并对FreeModbus的源码进行相应修改。主要难点包括确定接收数据长度和处理接收完成。文章中提到了修改prot.h、port_s.c、hal_uart.c以及uart.c等文件的思路和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. stm32的hal库提供了收一帧、发一帧的函数,但是freemodbus的底层port是收一字节、发一字节。
  2. 按照freemodbus传统的方式移植以后,会出现多串口ORE(over run error)
  3. 考虑之后决定采用标准的stm32的hal库函数HAL_UART_Receive_IT、HAL_UART_Transmit_IT收发数据,因此需要对freemodbus 以及库函数进行修改
  4. 总体思维
    1. 认真阅读freemodbus  以及hal库文件uart.c,修改是建立在阅读理解之上
    2. 不采用freemodbus 的函数 xMBRTUReceiveFSM,将对应功能移植到合适地方
    3. 不采用freemodbus 的函数xMBRTUTransmitFSM,将对应功能移植到合适地方
  5. 技术难点
    1. 使用HAL_UART_Receive_IT接收数据需要指定长度,但是从站并不知道自己需要接收多少数据。因此还是保留T3.5中断,用于判定一帧。给定HAL_UART_Receive_IT一个足够大的长度
    2. 由于HAL_UART_Receive_IT给定的长度过大,并不会真正接受完成,不会做相应处理。因此在T2.5中断出要做相应接收完成处理
  6. 以下是草图
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值