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

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

[复制链接]

该用户从未签到

1

主题

28

回帖

71

积分

注册会员

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

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

使用道具 举报

该用户从未签到

1

主题

28

回帖

71

积分

注册会员

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

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

使用道具 举报

该用户从未签到

1

主题

28

回帖

71

积分

注册会员

积分
71
发表于 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)
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:26
  • 签到天数: 102 天

    [LV.6]常住居民II

    9

    主题

    558

    回帖

    841

    积分

    高级会员

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

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:26
  • 签到天数: 102 天

    [LV.6]常住居民II

    9

    主题

    558

    回帖

    841

    积分

    高级会员

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

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

    使用道具 举报

    该用户从未签到

    1

    主题

    28

    回帖

    71

    积分

    注册会员

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

    使用道具 举报

    该用户从未签到

    1

    主题

    28

    回帖

    71

    积分

    注册会员

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

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

    使用道具 举报

    该用户从未签到

    1

    主题

    28

    回帖

    71

    积分

    注册会员

    积分
    71
    发表于 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--);
        }
    }

    点评

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:52
  • 签到天数: 114 天

    [LV.6]常住居民II

    31

    主题

    390

    回帖

    1992

    积分

    荣誉版主

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

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

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


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


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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:10
  • 签到天数: 64 天

    [LV.6]常住居民II

    0

    主题

    186

    回帖

    390

    积分

    中级会员

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-10 01:11 , Processed in 0.069413 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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