移植modbus通讯协议232转换485

232的modbus协议该位485时,需要注意:
1.portserial.c中的基本配置函数
2.中断中的配置函数
3.最重要的一点,mbrtu.c中(这个是重点)
eMBRTUSend( UCHAR ucSlaveAddress, const UCHAR * pucFrame, USHORT usLength )
{
eMBErrorCode eStatus = MB_ENOERR;
USHORT usCRC16;

ENTER_CRITICAL_SECTION(  );

/* Check if the receiver is still in idle state. If not we where to
 * slow with processing the received frame and the master sent another
 * frame on the network. We have to abort sending the frame.
 */
if( eRcvState == STATE_RX_IDLE )
{
    /* First byte before the Modbus-PDU is the slave address. */
    pucSndBufferCur = ( UCHAR * ) pucFrame - 1;
    usSndBufferCount = 1;

    /* Now copy the Modbus-PDU into the Modbus-Serial-Line-PDU. */
    pucSndBufferCur[MB_SER_PDU_ADDR_OFF] = ucSlaveAddress;
    usSndBufferCount += usLength;

    /* Calculate CRC16 checksum for Modbus-Serial-Line-PDU. */
    usCRC16 = usMBCRC16
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、用途 波仕电子的DIZ485地址串口转换器用于实现串口(同时支持RS-232和RS-485)之间的带地址的转换。通过跳线设置地址编码,DIZ485可以将串口接收到的数据附加上地址编码发送出去,也可以将带地址编码的串口数据送到对应地址的转换器的串口。DIZ485与其它同类产品相比的特点是可以识别下位机的地址、下位机可以主动发送带地址的数据。DIZ485是世界上最小的带地址的串口转换器。 2、硬件安装 波仕DIZ485地址串口转换器的外形为DB-9/DB-9转接盒大小,如图,产品左边为主串口,包括DB-9孔的RS-232口,和标明为A1、B1的RS-485口。右边为从串口,包括DB-9针的RS-232口,和标明为A2、B2的RS-485口。左上侧J2、J1、J0为波特率设置的跳线,右上侧K2、K1、K0为地址编码设置的跳线,下面中间为5V电源接线端子。主串口与从串口之间并不隔离,它们公用GND地线和+5V电源。DIZ485的左边DB-9孔可以直接外插计算机的RS-232口,右边的DB-9针引脚分配同计算机的RS-232口,但是都只有RXD、TXD、GND三根线。DIZ485需要外接直流5V电源。外接5V电源要求5V(±0.5V) 50mA,产品配套有5V微型开关稳压电源。 3、跳线设置 DIZ485通过跳线J2、J1、J0设置波特率,通过跳线K2、K1、K0设置地址。见下表。0-断开,1-短路。注意每次更改跳线新设置波特率后必须重新加电源才能生效。 串口通信波特率设置 地址设置 J2 J1 J0 波特率 K2 K1 K0 地址 0 0 0 1200 0 0 0 0 0 0 1 2400 0 0 1 1 0 1 0 4800 0 1 0 2 0 1 1 9600 0 1 1 3 1 0 0 19200 1 0 0 4 1 0 1 38400 1 0 1 5 1 1 0 57600 1 1 0 6 1 1 1 115200 1 1 1 7 4、软件使用 DIZ485 使用非常方便。首先根据用户通信程序的波特率进行波特率设置,比如9600bps,则将J2断开、J1短接、J0短接。然后设置本产品的地址,比如设置地址为1,则将K2断开、K1断开、K0短接。 左侧的A1、B1的RS-485以及DB-9孔RS-232称为“主串口”;右侧A2、B2的RS-485以及DB-9针RS-232称为“从串口”。 通信规则:主串口数据=地址码+从串口数据 或者:从串口数据=主串口数据—地址码 如果主串口收到 ###1:1234567,那么地址为1的产品的从串口发送出 1234567(地址不是1的产品的从串口不发送任何数据),就是去帧头。地址码就是在K2、K1、K0跳线设置值的前面加3个井号(###)和后面加一个冒号(:)的英文字符。 如果地址为1的产品的从串口收到abcdefg ,则主串口发送出###1:abcdefg 就是加帧头。 在同一个RS-232/RS-485总线中可以同时接入一般最多8个DIZ485产品,定制最多可以到32个。使用时将这8个产品的地址分别设置为0、1、2、……、7不同的值。将所有DIZ485产品的主串口共同接入到一个总线并接到上位机的RS-232或RS-485口。 DIZ485接受定制开发。超过8个地址要求的可以定制扩展地址编码,最多可以达到32个。默认地址为0、1、2、3、4、5、6、7、8、9、a、b、……、t、u、v。
STM32是一款广泛应用于嵌入式系统的微控制器系列,而Modbus是一种常用的通信协议,用于在不同设备之间进行数据交换。在STM32上移植Modbus协议可以实现与其他设备的通信。 要在STM32上移植Modbus协议,可以按照以下步骤进行: 1. 硬件连接:首先,需要将STM32与Modbus通信设备进行连接。通常情况下,Modbus使用串口进行通信,因此需要将STM32的串口引脚与Modbus设备的串口引脚连接起来。 2. 配置串口:在STM32上使用Modbus协议之前,需要配置串口的参数,例如波特率、数据位、停止位等。可以使用STM32提供的串口库函数进行配置。 3. 实现Modbus协议:根据Modbus协议的规范,需要在STM32上实现Modbus的相关功能,包括数据帧的解析、数据的读写等。可以根据Modbus协议的规范文档进行开发,或者使用已有的Modbus库进行移植。 4. 处理Modbus请求:在STM32上接收到Modbus请求后,需要对请求进行处理,并返回相应的数据。可以根据具体需求实现不同的功能,例如读取传感器数据、控制执行器等。 5. 错误处理:在移植Modbus协议时,需要考虑错误处理机制,例如超时、通信错误等情况的处理。可以使用STM32提供的中断机制或者定时器来实现错误处理。 以上是在STM32上移植Modbus协议的一般步骤,具体的实现方式和细节会根据具体的应用场景和需求而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值