找回密码
 立即注册
楼主: 王昱顺

全自动蓝牙下载器!使用STC8H2K08U和JDY33模块制作, 可通讯可下载

[复制链接]

1

主题

29

回帖

87

积分

注册会员

积分
87
发表于 2024-4-13 20:03:09 | 显示全部楼层
王*** 发表于 2024-4-13 19:30
使用的模块是JDY33嘛?这个只能用JDY33蓝牙模块
因为针对JDY33做了自动配置的代码 ...

不知道是不是被烧录芯片的串口也需要设置为偶校验位?我被烧录的事stc32g,用的串口是默认的8位无校验
回复 支持 反对

使用道具 举报 送花

1

主题

29

回帖

87

积分

注册会员

积分
87
发表于 2024-4-13 20:46:26 | 显示全部楼层
21cns*** 发表于 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)

请问您对这个问题是否有什么思路,不胜感激
回复 支持 反对

使用道具 举报 送花

1

主题

29

回帖

87

积分

注册会员

积分
87
发表于 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


正在重新握手 ... 成功                        [0.032"]
当前的波特率: 115200
正在擦除目标区域 ... 完成 !                [1.281"]
正在下载用户代码 ...
通信超时 !(2024-04-13 21:23:41)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 06:20:50
已绑定手机

13

主题

1257

回帖

2971

积分

金牌会员

积分
2971
发表于 2024-4-13 22:37:43 | 显示全部楼层
我没遇到过你说的问题。
下载时由于是系统ISP的串口设置,不太好计算波特率115200的误差有多大,估计这个原因可能性比较小。
蓝牙模块到STC-ISP的主机距离近一点再试试,或者换9600波特率再试试。
另外,蓝牙模块的电压和MCU的电压分别是多少?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 06:20:50
已绑定手机

13

主题

1257

回帖

2971

积分

金牌会员

积分
2971
发表于 2024-4-13 22:40:38 | 显示全部楼层
dongyao*** 发表于 2024-4-13 20:03
不知道是不是被烧录芯片的串口也需要设置为偶校验位?我被烧录的事stc32g,用的串口是默认的8位无校验 ...

由于STC-ISP下载过程中系统ISP程序的串口是偶校验,自动下载过程中蓝牙模块的偶校验不能“随时”更改,即被烧录MCU用户APP中串口也需要配置偶校验。
回复 支持 1 反对 0

使用道具 举报 送花

1

主题

29

回帖

87

积分

注册会员

积分
87
发表于 2024-4-14 10:35:05 | 显示全部楼层
现在是下载到一半就出现通信超时,不知道大佬有没有遇到过这个情况?
截图202404141034466686.jpg
回复 支持 反对

使用道具 举报 送花

1

主题

29

回帖

87

积分

注册会员

积分
87
发表于 2024-4-14 10:50:29 | 显示全部楼层
21cns*** 发表于 2024-4-13 22:37
我没遇到过你说的问题。
下载时由于是系统ISP的串口设置,不太好计算波特率115200的误差有多大,估计这个原 ...

蓝牙模块的电压接的stc最小习题板的5v,mcu由typec供电,也是5v
回复 支持 反对

使用道具 举报 送花

1

主题

29

回帖

87

积分

注册会员

积分
87
发表于 2024-4-14 10:52:27 | 显示全部楼层
21cns*** 发表于 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--);
    }
}

点评

首先,我的这个模块上有一键配置蓝牙模块的功能,只需要在单独给无线下载器供电时(仅连接蓝牙模块,没连接目标mcu),按下下载按键,即可自动配置蓝牙模块为偶校验和115200波特率。 其次,这个无线下载器只需和一楼  详情 回复 发表于 2024-4-14 12:05
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2218

回帖

5450

积分

版主

积分
5450
发表于 2024-4-14 12:05:37 | 显示全部楼层
dongyao*** 发表于 2024-4-14 10:52
是的,我在代码中增加了偶校验的功能,但是还是卡在下载用户代码--通信超时

这是代码#include "stc32g.h ...

首先,我的这个模块上有一键配置蓝牙模块的功能,只需要在单独给无线下载器供电时(仅连接蓝牙模块,没连接目标mcu),按下下载按键,即可自动配置蓝牙模块为偶校验和115200波特率。


其次,这个无线下载器只需和一楼示意图一样设置即可直接下载,程序内无需使用任何代码进行操作。无线下载器在监听到下载同步数据时会自动给单片机重新断电上电,与正常的串口下载流程并无二致


最后是你这个问题,大概率是蓝牙稳定性不够,可以尝试靠近电脑后再试。因为如果中途数据包传输被中断,也会导致下载失败
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:391
  • 最近打卡:2025-04-30 00:26:42

0

主题

336

回帖

1490

积分

金牌会员

积分
1490
发表于 2024-4-14 13:16:10 | 显示全部楼层
不错,支持一下
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 20:25 , Processed in 0.143547 second(s), 117 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表