查看: 375|回复: 3
打印 上一主题 下一主题

【原创】STM32F的232口简易MODBUS-RTU通讯程序

[复制链接] qrcode

136

主题

868

帖子

1880

积分

金牌会员

Rank: 6Rank: 6

积分
1880
楼主
跳转到指定楼层
发表于 2015-11-7 03:24 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*****************************************************
modbus-rtu 通讯规约通讯方式:rs-485 半双功
校验方式:crc16
停止位:2位
编写:孙可
编程思路:
1.串口中断允许自动接收总线上的信息,当接收的
字节后超过3.5个字节时间没有新的字节认为本次
接收完成,接收完成标志置1;如果接收完成标志已
经置1又有数据进来则丢弃新来的数据。
2.串口接收数据的处理, 当接收完成标志置1进入
接收数据处理, (1)首先判断接收的第一位数据与
本机地址是否相同,如果不相同清空接收缓存不发
送任何信息; (2)接收的第一位数据与本机地址相
同,则对接收缓存中的数据进行crc16校验,如果接
收的校验位与本校验结果不相同清空接收缓存不发
送任何信息;
(3)如果crc16校验正确则根据数据串中的命令码进
行相应的处理。
******************************************************/


附件内是IAR4.42的完整工程

附件内是通讯规约

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

136

主题

868

帖子

1880

积分

金牌会员

Rank: 6Rank: 6

积分
1880
沙发
 楼主| 发表于 2015-12-11 02:26 AM | 只看该作者
如果接收到的数据刚好是你设置FIFO的整倍数,就不会进3.5个字符的中断,你怎么判断接收完成呢?                                                                                                                                                                       
回复 支持 反对

使用道具 举报

4

主题

36

帖子

78

积分

注册会员

Rank: 2

积分
78
板凳
发表于 2015-12-11 11:04 AM | 只看该作者
接收中断里面启动定时器,定时器的延时时间是3.5个字节,发生定时器中断就认为接收停止超过3.5个字节。                                                                                                                                                                       
回复 支持 反对

使用道具 举报

136

主题

868

帖子

1880

积分

金牌会员

Rank: 6Rank: 6

积分
1880
地板
 楼主| 发表于 2015-12-11 01:26 PM | 只看该作者
还要布置中断优先级,定时器采用FIQ  ?                                                                                                                                                                       
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表