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

不错,支持一下
页: 1 [2] 3 4 5 6 7 8
查看完整版本: 全自动蓝牙下载器!使用STC8H2K08U和JDY33模块制作, 可通讯可下载