首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Modbus RTU驱动程序开发指引

Modbus RTU驱动程序开发指引

作者头像
用户1605515
发布2018-04-10 15:59:28
1.5K0
发布2018-04-10 15:59:28
举报
文章被收录于专栏:嵌入式程序猿嵌入式程序猿
Modbus RTU

驱动开发

摘要

这篇笔记主要介绍基于飞思卡尔kv4x系列MCU的modbus RTU(Remote Terminal Unit)驱动程序开发,以搭载飞思卡尔kv46MCU的飞思卡尔官方塔式系统开发板为例,阅读这篇文章前,基于你已经了解modbus协议要求,以及数据帧格式。

UART

UART(Universal Asynchronous Receiver Transmitter)通用收发器,现在基本上所有的MCU都会含有UART模块,有的甚至不止一路UART,今天我们要讲的飞思卡尔Kv46MCU就含有两路UART模块。

飞思卡尔kv4xMCU除含有UART的基本功能外,还包含支持RS-485操作,硬件流控制,数据端可配置,支持FIFO(Fisrt In First Out),等功能,更多功能介绍可以参阅官方参考手册描述,这里不再赘述。

Kv46MCU的UART模块比51单片机的UART要复杂的多,操作的时候要按照手册上的要求,仔细配置寄存器。

从框图中可以看出,发送器主要包含数据寄存器,波特率产生,发送移位寄存器,发送控制,校验,中断等子模块构成。

从框图可以看出,接收器主要包含数据缓冲区,波特率生成,移位寄存器,接收控制,中断,接收检测等子功能块。

在了解了kv46MCU的UART构成后,开发标准Midbus RTU的驱动程序主要的工作就是如何根据Mosbud标准要求来驱动UART模块,准确的检测通信帧。最主要的就是帧间大于3.5个字符的时间间隔,字节之间的时间间隔不能超过1.5个字节间隔,否则为错误帧。

ge:ZH-CN'>操作,硬件流控制,数据端可配置,支持FIFO(Fisrt In First Out),等功能,更多功能介绍可以参阅官方参考手册描述,这里不再赘述。

Kv46MCU的UART模块比51单片机的UART要复杂的多,操作的时候要按照手册上的要求,仔细配置寄存器。

硬件平台

任何含有kv46MCU的支持UART通信的硬件板件都可以,本文以飞思卡尔官方塔式系统为例,塔式系统应用的时候要注意,它是将MCU的UART1通过USB输出的,所以要按照硬件原理图跳线到正确的硬件上,如果你的硬件平台本身就含有这部分硬件电路,则可以完全用自己的平台实现

软件实现

软件方面主要是初始化和中断的程序开发,以及用于检测t3.5和t1.5时间间隔的定时器中断开发。

初始化主要包含

使能串口时钟

管脚映射

定时器配置

校验位配置

波特率配置

使能发送接收

难点是要懂得根据不同的波特率计算t3.5和t1.5的时间间隔

以9600bps为例, modbus每一个字节的发送接收有11位,所以每一位的时间

t = 1/9600

T3.5 = 3.5*t*11= 4.0104ms,根据这个值和定时器的时钟来配置定时器的装载值。

中断实现

Modbus驱动的中断也就是UART的中断实现主要是根据UARTx_S1寄存器的检测来区分是发送中断和接收中断,以及帧错去中断,校验错误中断等。需要注意的是错误中断和正常的接收发送中断不是一个中断向量,所以要分别在不同的中断函数检测状态寄存器的位来实现中断程序

如发送接收中断

void Uart_vISR1(void)
{
    if(UART1_S1 & UART_S1_RDRF_MASK)    //receive data register full flag
{
        if(…..)/*9位模式*/
        {
}
else/*8位模式*/
{
}
}
else if(UART1_S1 & UART_S1_TDRE_MASK)  // transmit data register empty flag
{
if(….)/*发送完成*/
{
}
else
{
}
}
else
{
}
}

嵌入式

程序猿

微信号:InterruptISR

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档