Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4352
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2018-03-12 16:49
个人简介

不善言谈的我们,只能通过书本汲取营养,用笔表达思想。从单片机到PLC,以及嵌入式,愿我们相互交流,共同进步。不忘初心,方得始终。

文章分类
文章存档

2020年(1)

2018年(4)

我的朋友

分类: 信息化

2020-10-17 18:10:00

STM32F103C8T6、FreeModbus从站的设计与测试(1)——引言

关键词:Modbus FreeModbus STM32F103C8T6 CubeMX

在国内的工业控制系统和传感器中,Modbus总线是很常见的,主要原因是其硬件设计简单、通信流程简洁、易于软件实现,Modbus总线最初是由德国的Modicon(莫迪康)公司的提出的,已有几十年的历史,现已成为国际标准。

孔丙火(微信公众号:孔丙火)认为,如果我们仅仅是使用Modbus总线,比如使用带有Modbus通信接口的PLC,则只需要关注Modbus的通信格式即可,如从站地址、功能码、通信超时参数等,而如果我们开发一块带有Modbus接口的控制板或者传感器,则需要关注Modbus通信协议的内部实现方法。

Modbus总线的物理层实现有两种:工业以太网和串口,工业以太网使用的Modbus-TCP协议,串口使用Modbus-RTU和Modbus-ASCII协议。串口是最常用的一种通信方式,那孔丙火(微信公众号:孔丙火)就来说它。

单片机上都有通用异步收发串口(UART),一个或多个,在硬件上,只需要加一个RS485或RS232的电平转换,即可实现工业串口通信。因此,只要我们在UART收发准确的基础上,按照Modbus标准编写通信协议,即可实现单片机的Modbus通信,想想是不难的,但工业通信不仅要实现功能,还要确保稳定,自己编写源码去实现一个通信协议,并不是一个最优方案,性价比不高,还有一种方法,是采用成熟的协议栈实现,成熟的协议栈有专门的组织维护,大量的使用,也更容易发现bug。当然,孔丙火(微信公众号:孔丙火)认为,对于程序猿或攻城狮来说,有免费的成熟的协议栈就更完美了,而FreeModbus协议栈就满足这个要求,然而美中不足,它只支持从站协议,主站协议是要收费的,不过已经很好了,知足常乐。

那么,孔丙火(微信公众号:孔丙火)的主题来了,用FreeModbus协议栈实现一个基于串口通信的Modbus从站,采用什么单片机呢,这个可以随便选,只要有一个UART接口就可以,那就选一个常用的,意法半导体的STM32F103C8T6,Cortex-M3的内核,片上资源对于Modbus协议来说也足够。孔丙火(微信公众号:孔丙火)在网上也查看了一些STM32F103移植FreeModbus的资料,总感觉不清晰,看起来有点费劲,可能是我的水平太差吧,所以在一次开发Modbus从站的过程中,想着整理一下开发心得,目的是对正在开发Modbus的朋友有一些帮助,少走一些弯路,另外,网上缺乏一些对Modbus协议测试的文章,我也把相关的心得写出来,包括各种功能码的测试、错误码的测试等。

意法半导体的单片机,在开发时可以使用CubeMX,生成初始化代码,可以为新手朋友节省不少开发时间,孔丙火(微信公众号:孔丙火)认为,这是意法半导体的一个优势,当然,ST的单片机使用量很大,且网上的资料多,易于学习。

单片机、ARM、现场总线、PLC、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,一起分享,共同交流。
更多精彩文章,请关注公众号


阅读(265) | 评论(0) | 转发(0) |
0

上一篇:CAN总线波形中ACK位电平为什么会偏高?

下一篇:没有了

给主人留下些什么吧!~~