摘要: 在上一篇文章中,介绍了如何将Modbus的通信参数存储在单片机STM32F103C8T6的flash中,这样可以简化硬件电路设计,功能扩展也更加灵活。但孔丙火(微信公众号:孔丙火)认为,这种方法也有副作用,因为是用通信的方法修改参数,如果用户把上次修改的参数忘记了,岂不是无法建立串口连接了?要么一个一个参数地试,费时费力,要么重新刷单片机的程序,但这需要开发工程师的参与。公众号之前有一篇文章,是讲PLC的上电停止功能的,这里可以做一个借鉴,来解决这个问题。大体的意思,就是为用户保留一个数据命令,当单片机上电的时候,收到这个命令,就采用默认的通信参数运行,这时用户是可以通过串口连接单片机的,然后再把通信参数改成自己需要的就可以了。 阅读全文
posted @ 2021-07-09 21:01 孔丙火 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 作为从站,Modbus-RTU通信的参数主要包括从站地址和串口参数,串口参数又包括波特率、校验位、停止位等,把这些参数存储在单片机的flash里,孔丙火(微信公众号:孔丙火)认为,可以简化电路设计,应用更加灵活。介绍了STM32F103C8T6的flash的组织结构,进一步分析了通信参数在flash中的存储位置,阐述了基于HAL库写flash的方法和通信参数修改的基本流程。代码经过实践,可以实现将通信参数存在flash中,并可以通过Modbus命令修改通信参数。 阅读全文
posted @ 2021-07-09 15:04 孔丙火 阅读(492) 评论(0) 推荐(0) 编辑
摘要: PLC(可编程控制器)在工业控制中使用非常广泛,型号很多,有一部分PLC有上电停止的功能,它们为什么需要这个功能呢?孔丙火(微信公众号:孔丙火)分析了上电停止的具体用途及实现路径,对于没有启停旋钮、没有专用编程口或编程电缆、通信口即作为编程口又作为通用口、通信口同时支持主站和从站设置的PLC,上电停止功能是需要的。同时,这种设计,对于单片机的串口通信设计,具有很好的借鉴意义。 阅读全文
posted @ 2021-05-19 16:05 孔丙火 阅读(458) 评论(0) 推荐(0) 编辑
摘要: 在这一篇文章中,孔丙火(微信公众号:孔丙火)主要介绍协议栈初始化,以及与串口相关的代码修改。串口的初始化函数是CubeMx自动生成的,其波特率等参数最好与freemodbus协议栈初始化参数保持一致,这样方便程序的维护和功能扩展,例如,当需要修改通信的波特率的时候,只需要修改一处就可以了,不用先修改串口的初始化参数,再修改协议栈的参数,这是一个实战例程与纯教程的区别。 本文的总体思路:创建一些全局变量,用于存储通信参数,串口、定时器、Freemodbus协议栈的初始化,都采用这些变量,需要更改的时候,只需改变这些变量的值即可。另外,这些通信参数后续计划存储在flash里面,定时器的参数会随波特率的不同而改变,这些在后续的文章中会阐述。 阅读全文
posted @ 2021-04-20 13:31 孔丙火 阅读(649) 评论(0) 推荐(0) 编辑
摘要: STM32F103、FreeModbus从站设计(5)-如何将FreeModbus代码加入keil。详细阐述如何获取freemodbus代码,代码的大体结构,如何将freemodbus加入keil工程。讲解了注意事项,全实战演示,实际可用。 阅读全文
posted @ 2020-12-26 13:55 孔丙火 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 关键词:Modbus FreeModbus STM32F103C8T6 CubeMX 1.串口参数设置 我们选择UART2来做RS485接口,UART1作为备用,用来做调试中的串口打印用。串口的参数配置比较简单,不再赘述。注意要启用串口中断,FreeModbus采用中断的方式接受和发送串口数据。 2 阅读全文
posted @ 2020-12-08 16:05 孔丙火 阅读(621) 评论(0) 推荐(0) 编辑
摘要: 用FreeModbus协议栈实现一个基于串口通信的Modbus从站,采用什么单片机呢,这个可以随便选,只要有一个UART接口就可以,那就选一个常用的,意法半导体的STM32F103C8T6,Cortex-M3的内核,片上资源对于Modbus协议来说也足够。孔丙火(微信公众号:孔丙火)在网上也查看了一些STM32F103移植FreeModbus的资料,总感觉不清晰,看起来有点费劲,可能是我的水平太差吧,所以在一次开发Modbus从站的过程中,想着整理一下开发心得,目的是对正在开发Modbus的朋友有一些帮助,少走一些弯路,另外,网上缺乏一些对Modbus协议测试的文章,我也把相关的心得写出来,包括各种功能码的测试、错误码的测试等。 阅读全文
posted @ 2020-10-17 17:50 孔丙火 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 网上看到有好心的网友提示,freemodbus协议中的mbfuncholding.c 文件中eMBFuncReadHoldingRegister()函数,有一处错误,即:第185行的“usRegCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF + 1] );”应为“usRegCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF + 1] );”,我认为这不能算是一个错误,且听我的分析。 阅读全文
posted @ 2020-10-09 22:42 孔丙火 阅读(690) 评论(0) 推荐(0) 编辑
摘要: 演示程序的功能:通过中断接收串口数据,在1750us时间内没有收到新的字节的话,将收到的数据原封不动地发送出去,以测试串口的完整收发流程。对使用到的函数进行了说明,阐述了各个函数的调用顺序和调用关系,在目标板上对代码进行了测试,结果表明,可以实现预期功能。 阅读全文
posted @ 2020-10-07 16:55 孔丙火 阅读(640) 评论(0) 推荐(0) 编辑
摘要: STM32F103C8T6-CubeMx串口收发程序详细设计与测试(1)——CubeMx生成初始代码 关键词:STM32F103C8T6 CubeMX UART 详细程序设计 阅读全文
posted @ 2020-08-19 22:20 孔丙火 阅读(717) 评论(0) 推荐(0) 编辑