
CH570无线串口工具,支持F103无线下载
简介
无线串口工具,支持最高1.5Mbps波特率,轻松拿捏调试log打印、MCU无线下载。
简介:无线串口工具,支持最高1.5Mbps波特率,轻松拿捏调试log打印、MCU无线下载。开源协议
:Public Domain
描述
V1.2版本发布,性能提升,最高连续波特率现支持1.5Mbps!
翻了整个立创开源平台,我宣布,这是最小的无线串口工具!
功能二合一:无线串口通信+STM32F103程序下载。支持4800~921600bps各标准波特率和100k/200k/500k/1.5Mbps等MCU常用波特率连续传输。
PCB二合一:一次打板,Dongle和对端模块兼得,超小PCB,跟其他PCB拼一拼,甚至不需要单独打板。

调试log打印、无线程序下载都方便
方案特点速览
|
体积小 |
主控2.4G无线SoC芯片CH570Q仅3*3mm 模块PCB仅1.5*2cm,套用淘宝迷你鼠标Dongle外壳 |
|
性能强 |
波特率可灵活设置,连续传输不丢数据 支持4800~921600bps各档标准波特率 支持100k/200k/500k/1.5Mbps等MCU常用波特率 波特率支持详见第8节注意事项 |
|
MCU无线下载 |
目前适配了STM32F103,支持官方STM32CubeProgrammer软件 |
|
代码开源 |
支持二次开发,I/O功能可改,兼容引脚更多的CH570D,可玩性高 |
|
性价比高 |
收发一套,BOM不到6块钱,一次打板(5片)可做两套 Dongle外壳淘宝10元,PCB选厚点,直接插USB-A口省外壳 |
|
支持各类串口软件 |
已测试SSCOM V5.13.1、COMTransmit等常用PC端串口软件 |
缘起
前段时间看到沁恒CH9111串口模块,波特率竟然有15Mbps,一方面惊叹性能完爆CH340,同时又遗憾不能无线通信。说在开源平台白嫖个无线方案吧,结果没找到特别满意的,索性就做了这套工具,分享给大家。
1.项目简介
一款在电脑和MCU之间实现无线串口通信的小工具,全双工,兼具MCU下载功能。成对使用,一个Dongle插电脑,另一个模块连MCU。两边主控都采用RISC-V无线SoC芯片CH570Q。选CH570的原因是它自带USB无线串口例程,而且兼容CH340驱动程序,代码改起来比较容易。本方案在官方例程的基础上又堆了些代码,主要是提升了串口性能、增加了MCU串口无线下载、连接状态指示功能。
为了方便制作,Dongle和模块共用一个PCB:做Dongle时从中间掰断,塞接收器外壳里,做模块连MCU时不用掰,直接焊排针即可。

2.工作原理和使用方法
2.1 工作原理
Dongle端做USB虚拟串口和2.4G无线的双向透传:CH570通过USB枚举成串口设备,接收电脑发来的串口设置和串口数据,经2.4G发送给对端模块,同时将2.4G收到的数据经USB传给电脑。
模块端做无线2.4G和有线串口的双向透传:CH570接收Dongle端发来的串口参数,根据参数配置自身串口,将收到的数据用串口发给MCU,同时将MCU发来的数据用2.4G传给Dongle。
2.2 使用方法
Dongle和模块之间如何建立连接?Dongle和模块支持“一碰连”。Dongle和模块互相靠近时,彼此接收到的无线信号都会增强。当信号强度超过设定阈值,Dongle和模块就会自动连接,所以只需在Dongle和模块上电后,彼此靠近一下就能连上。第一次配对后信息保存,下次上电自动重连,掉电后上电自动重连。模块上有一个红色LED灯,连接成功后LED常亮,通信时LED闪烁。
模块端如何设置串口参数?电脑串口软件设置的串口参数在点击“打开串口”时会经USB发给Dongle内的CH570,CH570再通过无线2.4G将串口参数发送给对端模块。模块中的CH570根据接收到的参数设定串口,实现两侧串口参数同步。因此,只要电脑端设置MCU支持的串口参数,模块就能正常通信。
无线串口工作流程图:

如何实现MCU无线串口下载?模块提供BOOT引脚和复位引脚。对于STM32F103,将模块的BOOT引脚和复位引脚分别连接到MCU的BOOT0和NRST引脚。在STM32CubeProgrammer中选择Dongle对应的串口,点击连接后,模块会改变BOOT引脚和复位引脚的电平,让MCU进入Bootloader。本工具使用STM32CubeProgrammer下载程序与使用常规下载工具无异。详见下文第4节。
3.模块引脚功能定义
除去必要的电源和晶振引脚,CH570Q还剩余多个I/O。本方案中各I/O的功能如下:
|
CH570引脚 |
对应Dongle引脚 |
对应模块引脚 |
|
PA0 |
D- USB差分信号 |
TX 串口发送 |
|
PA1 |
D+ USB差分信号 |
RX 串口接收 |
|
PA2 |
/ |
RST# MCU复位控制 |
|
PA3 |
/ |
BOOT0 MCU BOOT引脚控制 |
|
PA7 |
/ |
连接/收发状态LED指示 |
PA2、PA3、PA7如需另作他用,代码开源的可以直接改。
功能升级:如果想增添功能,但是I/O不够,也可以考虑用CH570D做二次开发。CH570D也是3*3mm小尺寸,但采用QFN20封装,比CH570Q的DFN10封装多出整整10个I/O,可玩性更强,方案代码工程也兼容。
4.MCU串口无线下载
为了实现对STM32F103的无线串口下载,用引脚PA2和PA3做了MCU进boot的机制。
4.1 一般MCU串口下载时进入Bootloader的方式
MCU的串口下载需要芯片内部Bootloader和上位机软件的密切配合。通过串口给MCU下载程序,首先要让MCU运行Bootloader,习惯上叫进boot。对于STM32F103,方法是在MCU退出复位的时候,保持BOOT0引脚为高电平。串口自带的RTS、DTR等Modem信号的电平可以通过电脑控制,下载软件便利用RTS和DTR,让MCU进入Bootloader。
4.2 MCU串口下载的关键挑战,RTS和DTR反复跳变
STM32官方的STM32CubeProgrammer在通过串口给MCU下载程序时,会多次设置串口,如果使用普通的串口模块,RTS和DTR的电平会跳变多次,使MCU中途复位,导致下载失败。常见的串口下载工具会通过硬件电路或软硬件配合的方式(比如CH340X,这里不展开),防止MCU在下载的过程中复位。
4.3 本方案使F103进boot的简单方法
本方案为了追求模块的最小化,未增加外部电路,也没有使用串口的RTS和DTR功能,而是通过监测STM32CubeProgrammer打开串口时在USB总线上发送的7F控制指令,识别串口下载场景,操作PA2和PA3引脚匹配MCU进Bootloader的条件,使MCU进boot。这样既不需要额外的外部器件,也无需复杂的软件代码。缺点是只适配一部分MCU,如果要给其他MCU下程序,场景的识别和PA2、PA3的电平切换可能要稍作调整。
STM32F103无线下载的电路连接:

4.4 STM32CubeProgrammer的下载操作流程
使用本工具给STM32F103下载程序的流程与使用常规串口下载工具无异。基本步骤如下图:

5.无线串口性能测试
为方便测试无线通信性能,使用U转串模块模拟MCU串口,通过COMTransmit软件向Dongle端发送大于10MB的文本文件,经HASH校验,收发文件内容一致。
实测无线串口可在1.5Mbps波特率下稳定连续收发数据。

如果是非连续收发,每次只传输简短信息的话,3Mbps波特率也能支持。关于波特率的补充信息参看第8节注意事项。
6.串口软件兼容性测试
已测试SSCOM V5.13.1、COMTransmit等常用串口软件,理论上支持所有串口软件。
7.向新做的Dongle和模块下载程序
新焊好的Dongle和模块都需要下载对应的程序。
使用WCH ISP Studio软件,WCH ISP Studio在MRS2中已经内置,在MRS左上角菜单栏-->Tools-->WCH In-System Programmer
选择低功耗蓝牙系列。
7.1 给Dongle下载程序
将Dongle插入电脑,在WCH ISP Studio中设置下载接口为“USB”,下载Dongle程序。
7.2 给模块下载程序
将模块与USB串口模块连接,在WCH ISP Studio中设置下载接口为“串口”,下载模块程序。
因为模块工作时用串口3,而程序下载用串口2,虽然TX/RX是同一对引脚,但刚好是反的,所以下载时T接T,R接R,检查你的连接
| CH570模块 | 串口转USB模块(如CH340) |
| PA0(PCB的TX) | TX |
| PA1(PCB的RX) | RX |
| 5V | 5V |
| GND | GND |
7.2 更新Dongle和模块的程序
最简单的方法是都用串口下载。Dongle的PA0、PA1、5V、GND从USB的金手指上引出来。照7.2节连接好之后,在下载软件里点“下载”,会显示“等待设备接入”,再重新拔插一下5V,就能顺利下载了。

如果不想编译工程,文末附件提供编译好的hex文件,可以直接下载使用。
8.注意事项
8.1 PCB板厚
为了适配淘宝鼠标接收器Dongle,PCB板厚建议0.8mm。
如果不打算用Dongle外壳,想要USB-A口直插,PCB要适当改宽防止松动,选1.6或2.0mm板厚,USB的4个金手指触点过锡加厚。
8.2 晶振的参数选取
晶振频率32MHz,封装SMD2016。
推荐选用负载电容12pf,精度±10ppm,等效电阻30欧的晶振。
8.3 关于串口波特率的设置
本方案的代码开源,工程按支持的波特率不同,分A、B两个版本,均在CH570无线串口-1v2压缩包中,见附件。
A版支持最高1.5Mbps波特率连续发送,但不支持921600和460800bps波特率,需要高性能优选A版。
B版支持最高921600bps波特率连续发送,需要921600或460800bps波特率优选B版。
| 支持的波特率 | 4800~230400bps | 100/200/500kbps | 460800bps | 921600bps | 1.5Mbps |
| A版-Dongle端 | √ | √ | × | × | √ |
| A版-模块端 | √ | √ | × | × | √ |
| B版-Dongle端 | √ | √ | √ | √ | × |
| B版-模块端 | √ | √ | √ | √ | × |
本方案支持串口软件灵活设置波特率,但实际使用时,以B版工程为例,模块的波特率由12.5MHz等效时钟分频后得到,因分频系数为整数,部分波特率下,实际得到的波特率和目标波特率可能存在细微差异。例如,设置波特率为500kbps时,分频系数正好为25,此时实际波特率与目标波特率一致。若设置波特率为115200bps,分频系数为小数,取整后为108,此时波特率为115740bps,偏差为0.4%。某些波特率会导致过大的偏差,从而影响通信质量,这些波特率要慎用。求偏差只需要两步:
求分频系数:
分频系数=向下取整[12,500,000Hz/目标波特率]
求波特率偏差:
偏差=12,500,000Hz/分频系数/目标波特率*100%
使用自定义的波特率时,偏差不能超过5%,且越小越好。
8.4 如需使用RTS、DTR信号
模块中PA2、PA3做NRST和BOOT0引脚的代码逻辑和RTS、DTR状态无关。PA2、PA3不响应串口软件对RTS、DTR的设置。
如果需要RTS、DTR功能,到APP目录下,将uart.c、uart.h、rf_uart_tx.c中与RTS、DTR相关的代码激活,并注释掉RESET_PIN、BOOT_PIN部分即可。下图展示其中一处:

另外,由于在计算机虚拟串口和MCU串口间增加了2.4G通信环节,RTS、DTR的动作有细微延迟,不建议将Modem信号用在实时性要求很高的场合中。
9.软件工程和hex文件见附件
本方案的代码开源,工程按支持的波特率不同,分A、B两个版本,均在CH570无线串口-1v2压缩包中,见附件。
每个版本都提供Dongle端和模块端两个工程,以A版为例:
解压后,Dongle端MRS工程文件路径: CH570无线串口-1v2\A版-1.5Mbps\RF\RF_UartDongle\RF_UartDongle.wvproj
解压后,模块端MRS工程文件路径: CH570无线串口-1v2\A版-1.5Mbps\RF\RF_Uart\RF_Uart.wvproj
如果只是想复刻玩玩,也可以使用附件中提供的两个编译好的A版工程的hex文件,直接下载即可。
Dongle端hex文件:RF_UartDongle.hex
模块端hex文件:RF_Uart.hex
串口工具COMTransmit: https://www.wch.cn/downloads/COMTransmit_ZIP.html
STM32CubeProgrammer: https://www.st.com/en/development-tools/stm32cubeprog.html
WCHISPStudio: MRS2已经内置,在MRS左上角菜单栏-->Tools-->WCH In-System Programmer
Have fun!
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论