modbus是一项工业上经常用到的通讯协议,而freemodbus是一款开源的从机协议栈。关于它的移植网上已经有了很多的文章,但是大多都只是针对其中部分问题的表述。本文将会把自己在移植freemodbus过程中遇到的问题以及freemodbus的源码分析尽量表述清楚。
(由于源码分析部分在工作用的电脑上,这部分后续补上)
关于移植:
本次移植使用的片子是stm32f103的片子,编译环境喂keil5.23
freemodbus源码GitHub链接:
cwalter-at/freemodbusgithub.com首先移植需要有大致两方面工作:1、相关硬件功能的编写;2、freemodbus底层操作寄存器(线圈)的函数。
关于硬件功能主要包括usart的初始化,发送/接收状态设置,串口中断函数等;timer定时器的初始化,使能,失能以及定时器中断等。其中需注意的是在串口中断及定时器中断中加入对应的处理函数,通知状态机进行相应处理。
定时器方面基本没有什么问题,确定还要使用的定时器以及编写好对应的函数没什么问题可以正常使用。但是在串口移植的时候需要注意,自己使用的串口发送中断是txe还是tc。使用txe中断需要预先发送一个字节触发串口发送中断,而是用tc中断需要在中断中添加延时否则会导致最后一个字节发送不出去的问题。关于这两个问题的分析及解决方法: