dongyaozhang17
发表于 2024-4-13 20:03:09
王昱顺 发表于 2024-4-13 19:30
使用的模块是JDY33嘛?这个只能用JDY33蓝牙模块
因为针对JDY33做了自动配置的代码 ...
不知道是不是被烧录芯片的串口也需要设置为偶校验位?我被烧录的事stc32g,用的串口是默认的8位无校验
dongyaozhang17
发表于 2024-4-13 20:46:26
21cnsound 发表于 2024-2-22 19:19
既然要占用目标MCU的P3.0/P3.1串口,支持偶校验的JDY33模块直接接目标MCU,目标单片机中增加串口自定义命令 ...
您好!不知道您是否验证过烧录stc32g12k128?我按照您的思路,目标单片机增加串口自定义监控,但是卡在重新握手这一步,不知道是不是有什么没设置对?
正在检测目标单片机 ...
单片机型号: STC32G12K128
软件协议, V4.0: 7.4.6U
当前芯片的硬件选项为:
. 系统ISP工作频率: 0.494MHz
. 内部IRC振荡器的频率: 24.000MHz
. 掉电唤醒定时器的频率: 33.600KHz
. 振荡器放大增益使能
. 用户EEPROM大小被设置为 128 K
. P3.2和P3.3与下次下载无关
. 上电复位时增加额外的复位延时
. 复位引脚用作普通I/O口
. 检测到低压时复位
. 低压检测门槛电压 : 2.00 V
. 上电复位时,硬件不启动内部看门狗
. 上电自动启动内部看门狗时的预分频数为 : 256
. 空闲状态时看门狗定时器停止计数
. 下次下载用户程序时,将用户EEPROM区一并擦除
. 下次下载用户程序时,没有相关的端口控制485
. 下次下载时不需要校验下载口令
. 内部参考电压: 1187 mV (参考范围: 1100~1300mV)
单片机型号: STC32G12K128
软件协议, V4.0: 7.4.6U
正在重新握手 ...
通信超时 !(2024-04-13 20:26:22)
请问您对这个问题是否有什么思路,不胜感激
dongyaozhang17
发表于 2024-4-13 21:28:16
大佬,原来是我没有将stc32g串口设置为偶校验,我将串口改为偶检验,并且将jdy33也改为偶校验,现在能握手成功,但是下载到一半就显示下载失败?不知道您是否有头绪?
正在检测目标单片机 ...
单片机型号: STC32G12K128
软件协议, V4.0: 7.4.6U
当前芯片的硬件选项为:
. 系统ISP工作频率: 23.731MHz
. 内部IRC振荡器的频率: 24.000MHz
. 掉电唤醒定时器的频率: 33.600KHz
. 振荡器放大增益使能
. 用户EEPROM大小被设置为 128 K
. P3.2和P3.3与下次下载无关
. 上电复位时增加额外的复位延时
. 复位引脚用作普通I/O口
. 检测到低压时复位
. 低压检测门槛电压 : 2.00 V
. 上电复位时,硬件不启动内部看门狗
. 上电自动启动内部看门狗时的预分频数为 : 256
. 空闲状态时看门狗定时器停止计数
. 下次下载用户程序时,将用户EEPROM区一并擦除
. 下次下载用户程序时,没有相关的端口控制485
. 下次下载时不需要校验下载口令
. 内部参考电压: 1187 mV (参考范围: 1100~1300mV)
单片机型号: STC32G12K128
软件协议, V4.0: 7.4.6U
正在重新握手 ... 成功
当前的波特率: 115200
正在擦除目标区域 ... 完成 !
正在下载用户代码 ...
通信超时 !(2024-04-13 21:23:41)
21cnsound
发表于 2024-4-13 22:37:43
我没遇到过你说的问题。
下载时由于是系统ISP的串口设置,不太好计算波特率115200的误差有多大,估计这个原因可能性比较小。
蓝牙模块到STC-ISP的主机距离近一点再试试,或者换9600波特率再试试。
另外,蓝牙模块的电压和MCU的电压分别是多少?
21cnsound
发表于 2024-4-13 22:40:38
dongyaozhang17 发表于 2024-4-13 20:03
不知道是不是被烧录芯片的串口也需要设置为偶校验位?我被烧录的事stc32g,用的串口是默认的8位无校验 ...
由于STC-ISP下载过程中系统ISP程序的串口是偶校验,自动下载过程中蓝牙模块的偶校验不能“随时”更改,即被烧录MCU用户APP中串口也需要配置偶校验。
dongyaozhang17
发表于 2024-4-14 10:35:05
现在是下载到一半就出现通信超时,不知道大佬有没有遇到过这个情况?
dongyaozhang17
发表于 2024-4-14 10:50:29
21cnsound 发表于 2024-4-13 22:37
我没遇到过你说的问题。
下载时由于是系统ISP的串口设置,不太好计算波特率115200的误差有多大,估计这个原 ...
蓝牙模块的电压接的stc最小习题板的5v,mcu由typec供电,也是5v
dongyaozhang17
发表于 2024-4-14 10:52:27
21cnsound 发表于 2024-4-13 22:40
由于STC-ISP下载过程中系统ISP程序的串口是偶校验,自动下载过程中蓝牙模块的偶校验不能“随时”更改,即 ...
是的,我在代码中增加了偶校验的功能,但是还是卡在下载用户代码--通信超时
这是代码#include "stc32g.h"
#include "stdio.h"
#include "intrins.h"
#define FOSC 11059200UL //定义工作频率
#define BAUD (65536 - FOSC/4/115200) //定义串口波特率重装值
//#define BRT_T1 //使用定时器1当作串口波特率发生器
#define BRT_T2 //使用定时器2当作串口波特率发生器
typedef bit BOOL;
typedef unsigned char BYTE;
BOOL fBusy; //串口发送忙标志
BYTE bStage; //用户自定义命令检测阶段
void delay_ms(int n);
void CheckCustomCmd(BYTE dat);
void main()
{
P0M0 = 0; P0M1 = 0; //端口模式初始化
P1M0 = 0; P1M1 = 0;
P2M0 = 0; P2M1 = 0;
P3M0 = 0; P3M1 = 0;
P4M0 = 0; P4M1 = 0;
P5M0 = 0; P5M1 = 0;
//PS = 0;
USARTCR2 = 0x04; //使能硬件产生偶校验
#if defined BRT_T1
AUXR = 0x40; //使用定时器1作为串口波特率发生器
TMOD = 0x00;
TL1 = BAUD;
TH1 = BAUD >> 8;
TR1 = 1;
#elif defined BRT_T2
T2L = BAUD; //使用定时器2作为串口波特率发生器
T2H = BAUD >> 8;
AUXR = 0x15;
#else
#error "Baudrate generator select error !"
#endif
SCON = 0xD0; //工作模式3,9位可变波特率
ES = 1;
EA = 1;
fBusy = 0; //初始化用户变量
bStage = 0;
printf("STC8H系列串口自定义测试程序 !");
while (1);
}
void uart_isr() interrupt 4
{
if (TI)
{
TI = 0;
fBusy = 0;
}
if (RI)
{
RI = 0;
CheckCustomCmd(SBUF); //检测命令序列
}
}
char putchar(char dat) //重定义putchar系统函数
{
while (fBusy);
fBusy = 1;
SBUF = dat;
return dat;
}
void CheckCustomCmd(BYTE dat) //检测命令序列:"@STCISP#"
{
switch (bStage++)
{
default:
L_Check1st:
case 0: //检测命令头
bStage = (dat == '@');
break;
case 1:
if (dat != 'S') goto L_Check1st;
break;
case 2:
if (dat != 'T') goto L_Check1st;
break;
case 3:
if (dat != 'C') goto L_Check1st;
break;
case 4:
if (dat != 'I') goto L_Check1st;
break;
case 5:
if (dat != 'S') goto L_Check1st;
break;
case 6:
if (dat != 'P') goto L_Check1st;
break;
case 7:
if (dat != '#') goto L_Check1st;
delay_ms(10); //检测到正确的命令序列后复位到系统区,此处的延时可省去
IAP_CONTR = 0x60; //复位到系统区
break;
}
}
void delay_ms(int n) //毫秒延时子程序
{
int i;
while (n--)
{
i = 1000;
while (i--);
}
}
王昱顺
发表于 2024-4-14 12:05:37
dongyaozhang17 发表于 2024-4-14 10:52
是的,我在代码中增加了偶校验的功能,但是还是卡在下载用户代码--通信超时
这是代码#include "stc32g.h ...
首先,我的这个模块上有一键配置蓝牙模块的功能,只需要在单独给无线下载器供电时(仅连接蓝牙模块,没连接目标mcu),按下下载按键,即可自动配置蓝牙模块为偶校验和115200波特率。
其次,这个无线下载器只需和一楼示意图一样设置即可直接下载,程序内无需使用任何代码进行操作。无线下载器在监听到下载同步数据时会自动给单片机重新断电上电,与正常的串口下载流程并无二致
最后是你这个问题,大概率是蓝牙稳定性不够,可以尝试靠近电脑后再试。因为如果中途数据包传输被中断,也会导致下载失败
xxxevery
发表于 2024-4-14 13:16:10
不错,支持一下