使用ToStc通过蓝牙串口模块,让stc单片机无线下载程序 当我知道有个叫蓝牙透明串口的东西后,我就想使用它给stc单片机无线下载程序。一年以前,自己从网上买了一个蓝牙透明串口模块,当时卖家就告诉我,要想通过蓝牙串口给stc单片机下载程序,必须把把stc官方的下载软件stcisp使用有线成功下载一次程序后,才可以使用蓝牙串口模块进行无线下载。当时按卖家所说的,试了下,真的可以,不过每次都要使用有线下载后才可以使用蓝牙下载,使得蓝牙下载显得十分麻烦,失去了意义。当时又试了另一个stc的非官方下载软件mcuisp,但是也不支持使用蓝牙。无奈最终放弃使用蓝牙下载的想法。 两个星期以前,ToStc问世,基本上实现了给stc单片机下载程序。这个时候,我又想起了那个蓝牙模块,经过自己分析,终于找到了用蓝牙模块给stc下载程序程序失败原因: ①:stc下载时,串口协议是8数据位,1停止位,偶校验。而蓝牙串口通常默认是:8数据位1停止位,无校验。(我之前成功用蓝牙模块给stc下载程序,没有修改过串口协议,竟然能成功,不可思议。我也咨询过其他使用蓝牙模块给stc下载的朋友,他也说没有修改串口协议。这个问题,有谁知道原因的,麻烦告知下) ②:蓝牙串口模块通常都是固定波特率的,波特率不能通过电脑程序直接修改。而stc的下载软件在下载过程中,通常是先用较低波特率和单片机握手,之后使用较高波特率下载程序。stc官方下载软件stcisp可以设置最低和最高波特率,但即使设置最低和最高相同,stcisp在下载过程中仍然会关闭打开串口多次,但蓝牙串口及一些usb接口虚拟出来的串口在打开和关闭时反应较慢,造成数据丢失,这是造成很多下载线不兼容的主要原因。 找到了原因,就可以有针对性的解决问题了: ①的解决方法,只能从蓝牙串口模块下手,stc单片机端不一定会对每一字节做偶校验,但是单片机返回的数据格式都是带有偶校验位的,如果串口模块设置的是没有校验位,那接收地数据位数就不一致,数据肯定是错误的。幸运的是,查找蓝牙串口的datasheet,发现它可以通过at命令设置波特率和协议,按照文档上的命令,我将蓝牙模块设置为9600波特率,8数据位1停止位偶校验。 ②需要修改下载程序.好在ToStc是我自己做的,可以随便修改。添加一个“最低最高波特率相同”的复选框,当勾选时,程序在下载过程中不再关闭和打开串口。然后试了试,发现成功了,随时打开软件,随时都可以用蓝牙串口给stc单片机下载程序了。 测试过程,左上为电源5V+3.3V 左下为简易逻辑分析仪,从单片机端检测串口数据,另电脑端也有软件检测电脑端发送和接收的数据。右上为主角,蓝牙串口模块。 [attachment=1694266] 蓝牙模块特写,自己加的洞洞板,两个状态指示灯,以及几个引脚,短接右上两个引脚,进入AT模式,接受AT命令 [attachment=1694267] [attachment=1694268] 正面 [attachment=1694270] 背面 [attachment=1694271] 限流电阻,单片机为5V,蓝牙是3.3V,串联限流电阻连接 [attachment=1694272] ToStc软件也来个图,最新版进入我的博客查看 之前的帖子不能编辑了,里边不是最新版 [attachment=1694299]
|