就是最近忙着做项目,忽然发现有3个项目都需要用到串口调试,这让我感觉到有一个方便快捷的调试工具是非常重要的。虽然类似的功能有很多现成的、功能强大的开源协议,比如MODBUS。但是我看过之后,总觉得不够简单。能理解那些功能概念的应该都不算是小白了,而我的目标是做出一个小白都会用的简单串口调试协议。于是在多个项目的压力下,我推出了FUR调试系统!

FUR全名Fast UART write/read Register,意思是快速串口读写寄存器。定位就是使用电脑和串口助手去调试单片机参数。因此FUR在参考MODBUS的“寄存器”概念后,又对其进行了极大的精简:

  1. 根据FUR的定位,规定了其通信协议是一对一通信,因此精简掉器件地址。
  2. 因为读寄存器和写寄存器有更直观的表达,所以精简掉了功能码。
  3. 因为主要用于电脑调试单片机参数,有人来参与调试过程,所以删掉CRC部分(后期应用于批量生产或其他无人看管的场景时,会加上校验部分)。

最后通信协议只保留了“寄存器地址”和“寄存器内容”两个关键参数。然后为了让我们能一眼看懂协议内容,设定了协议的格式为“[寄存器地址]=数值.”,你没有看错,就是这么简单。只要你看过一遍实例,就会立马明白。在举例之前,我们要了解到FUR调试系统的“寄存器”概念。从定义来说,FUR的寄存器就是一个u16型的数组而已。其元素的个数由宏定义ECBM_FUR_MAX决定,设定的范围是2~256个。也就是最大支持256*16位(512字节)数据。因为寄存器0存放了波特率,寄存器1是触发寄存器,所以最少得安排2个寄存器。

由于它就是个普通的数组,所以我们还需要把寄存器和要调试的功能联系上才行。比如我上周收到反馈,说delay_ms函数不准。那么我就需要对delay_ms函数进行调试。有了FUR系统,就很简单了,核心只有一句delay_ms(fur_reg[2]);这样就把FUR的寄存器2和delay_ms联系上了。联系上了之后,我只要用串口修改寄存器2的值,就可以调整延时的时间了。下面我们来看实例:

#include 

编译,下载,上逻辑分析仪。

效果不错,非常非常接近50ms。看看STC-ISP的频率调节看看,果然这次下载调得很准。

接下来就是调试动作了,在往常我需要修改代码重新编译下载才能换参数。但是现在我只需要打开串口,发送字符就好了。先确认一下 ,发送个“[2]=?.”。按刚才的定义,这个就是查看寄存器2的意思。

串口助手返回50,确实是我们设置的值。接下来换成一个值试试。发送“[2]=233.”意思就是将数值233赋值给寄存器2。发送成功的话,单片机也会返回该寄存器的当前值。用于人眼验证本次传输是否成功。所以我发送233,单片机返回233,说明这次是传输成功了的。

结果是这样的。

如果是改成150的话:

多来几个试试:

可以看到如果延时比较短的话,就比较准。延时比较长的话就不准。这也确实说得通,因为延时是靠循环+空指令。每一次循环差一点时间,循环多了累计的误差就多了。这个误差就是没法消掉的。另外一个误差是STC单片机下载时调整RC的误差,同样的板子在下载之后即有可能是24.000MHz,也有可能是23.962MHz。如果是23.962MHz的话,即使延时时间短也有较大的误差。所以延时函数的误差来自方方面面。真要准确无误还是靠晶振+定时器。


那么,FUR系统如何搭建呢?首先确保ECBM库的版本在V2.1.5-2及以上。因为V2.1.5-2更新第一版的FUR系统。因为最近在不断的使用和改良中,写本文的时候已经更新到第二版(但还未发布,因为要跟着ECBM库的更新节奏)了。所以如果你拿到的库里面的FUR函数和本文演示的函数有不同之处,属于正常现象。更新到最新版即可。

首先,在KEIL工程的DEVICE文件夹里添加fast_uart_reg.c,该文件存放在device文件夹中。

接下来打开fast_uart_reg.h,进入图形化界面。这里可以设置寄存器的总数,搭载的串口号和保存功能使能。

  • 寄存器总数根据实际需要来设定,设置为需求数量+2。比如上面的例子只调试了延时函数,那么设置成3就行。
  • 搭载串口号,因为我的板子是串口1通过USB转串口连到电脑,所以我设置成串口1。可根据实际情况设置到其他串口。
  • 保存功能是一个特色,由于大部分STC单片机都有内部eeprom,所以使能该功能就能让你设置的参数能够掉电保存。

如果要使用保存功能,请打开eeprom库的使能,同时确保单片机型号设置无误。如果是eeprom空间可调的型号,还需要注意“EEPROM选择”那里数值是实际的eeprom大小。

FUR库一共也就3个函数,将这3个函数放置在指定位置即可。

初始化函数fur_init肯定是放在while死循环前,确认和反馈的fur_check函数是要时时执行的,放在while死循环里。

而接收串口数据的fur_in函数自然就是放在串口的接收回调函数中。当然不要忘了在uart.h中使能串口接收回调函数。这样一来,FUR系统就搭建好了。


FUR的常规功能说完了,细心的朋友因为还记得上文说道寄存器0寄存器1都已经被占用了。那么是用于什么功能呢?

  • 寄存器0用于存放串口通信的波特率的百分之一值。也就是说波特率是9600的话,寄存器0里就是96。同理115200波特率下,里面的值就是1152。可以使用“[0]=96.”或“[0]=48.”来快速修改波特率。注意波特率修改是即时生效的。
  • 寄存器1是触发寄存器,也就是说无论你写什么值,都不会写进寄存器1里面去。但是会根据你发送的值来触发各种效果:
  1. 发送“[1]=0xA55A.”是将当前fur_reg数组保存到EEPROM中,也就是保存当前的寄存器值。比如在设置波特率后保存,可以让单片机以后都用新的波特率工作。否则每次上电都会以设置成默认波特率。但要注意保存是保存所有寄存器的。
  2. 发送“[1]=0xF00F.”是从EEPROM读取值替换将当前的fur_reg数组,也就是读取之前保存的寄存器值。比如你在设置某个寄存器的值之后,觉得效果还不如原来的好,就可以用这个恢复原来的设置。但要注意恢复的话也是恢复所有寄存器的。
  3. 触发寄存器还有更多的玩法等待更新,尽情期待~~~

ubuntu 串口调试工具推荐_串口调试能有多便捷?——FUR组件的应用相关推荐

  1. ubuntu 串口调试工具推荐_谈一谈单片机开发的几种调试方案

    单片机开发过程中,有一个好的调试系统可以极大地提高开发效率. 举个例子,做平衡系统时调节PID参数,你会选择 修改参数–>编译–>烧录–>运行–>修改-,还是做一个功能可以一边 ...

  2. ubuntu 串口调试工具推荐_升级版全系列视频第一个项目电子产品量产测试与烧录工具...

    第一章 前言 温馨提示:本文共10111字,预计阅读时间26分钟. 之前说过要开源100ASK_IMX6ULL批量测试GUI: 100ask_imx6ull批量测试神器即将开源 ,今天说到做到免费开源 ...

  3. ubuntu 串口调试工具推荐_玩客云刷ubuntu系统(不写入emmc)

    写在最前:友情提示刷机有风险,请自己承担.本教程只做分享,不提供技术支持! 部分固件下载地址 刷机有风险,且刷且珍惜 1. 刷机前的准备工作 刷机需要哪些条件 只要玩客云主板没坏都可以刷 需要的硬件 ...

  4. codesys 串口通讯实例_串口通信RS232的基本接法,原来这么简单,今天终于弄明白了...

    目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(M ...

  5. 如何使用串口调试工具测试HX530串口RFID读卡器读取IC卡卡号

    串口调试工具测试读卡操作说明 HX530串口RFID读写器 1.打开SDK 中的Demo,使用串口工具,如下图 2.在串口调试工具设置相关参数 2.1.波特率:9600:数据位:8:停止位:1:校验位 ...

  6. android 串口一直打开_串口通讯你真的会了吗?不妨来看看这些经验

    平时使用串口打印出现乱码的绝大部分原因是串口波特率没对.那么我们怎么测量实际的波特率呢?在这之前,顺便一起回顾一下波特率的概念. 什么是波特率.比特率? 比特率(Bitrate)表示每秒钟传输的二进制 ...

  7. 串口console乱码_串口打印机不能打印或打印乱码

    为何通过串口不能打印或打印乱码? 一.硬件准备 首先确保你的硬件满足以下条件,并且使用的串口线是 XPrinter 指定代理 或经销商提供的标准线缆. 打印机 : 请先确认你的打印机端确实是串口, X ...

  8. codesys 串口通讯实例_串口通讯例子,(已调试成功可以接收数据)

    io.open();//打开控制台importcom.activeX io.print("qq:761153454,本程序为串口通讯") com1 =com.CreateObjec ...

  9. 方便实用的串口调试工具/串口调试助手/串口精灵 (工具一)

    网络上有各式各样的串口调试助手,经过了这么多年的使用,发现还是下面这款比较好用,但是网络上流传的却不是很多,我感到很奇怪,在此分享一下.下面逐一介绍下一般调试助手不具备的功能. 1.主界面如下 在发送 ...

最新文章

  1. Docker入门与实践
  2. python修改字典某一项的函数_python – 更改字典作为函数的全局范围
  3. windows环境安装haproxy及初步配置负载均衡使用示例
  4. java换脸_随意换脸 · ink-image/api Wiki · GitHub
  5. 【Java类加载机制】深入类加载器(二)自定义加密、解密类加载器
  6. 话里话外:猎人讲小事——兔子、凤凰与猎狗
  7. 【Gym - 101061F】Fairness(dp,思维)
  8. linux usb无法识别,求助:USB无法识别
  9. 考研数学自整理,弥补知识漏洞(强化、冲刺)
  10. ftk学习记(waitbox篇)
  11. 【Java基本功】很多人经常忽视的Java基础知识点
  12. java 运行 依赖_java – 运行时中的依赖项确定
  13. java jre 7_jre1.7官方下载|
  14. 最美证件照工作室需要买什么东西
  15. 安卓手机运行ios教程_英雄联盟手游公测,安卓/苹果iOS注册下载教程!
  16. Golang 定时器timer和ticker
  17. 如何查询电脑系统和服务器地址,如何查询电脑系统和服务器地址
  18. 商业虚拟专用网络技术十四 BGP/MPLS技术扩展
  19. Python 操作配置文件
  20. vscode debug Attach mode

热门文章

  1. c语言leg 10,Leg massaging device
  2. 局域网制作ftp服务器,如何架设内网ftp服务器 搭建ftp yum源
  3. linux防火墙规则命令意思,linux防火墙iptables配置规则分享
  4. python鞋子_python
  5. win7查看隐藏文件_Win8系统查看隐藏文件的操作方法是什么?
  6. oracle hwm的位置,Oracle 高水位(HWM)教程(2)
  7. java script数据类型_typescript 基本数据类型
  8. python中capital是什么意思_capital是什么意思_capital的翻译_音标_读音_用法_例句_爱词霸在线词典...
  9. linux nginx django,如何在Linux下使用Nginx部署Django项目
  10. Spring Boot 2 快速教程:WebFlux Restful CRUD 实践(三)