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