找回密码
 立即注册
楼主: 神农鼎

还是从 printf_usb("Hello World !\r\n") 开始,《单片机原理及应用》入门@Ai8051U

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:588
  • 最近打卡:2025-09-14 06:50:33
已绑定手机

15

主题

1341

回帖

3868

积分

论坛元老

积分
3868
发表于 2025-5-12 19:38:19 | 显示全部楼层
大家有没有遇到同样的问题?官方能否测试一下?

使用擎天柱做printf_usb的测试,烧录时取消选择“复位脚用作IO”,烧录后重新上电,ISP串口助手中打开CDC串口能正常输出,按RESET按键也能正常复位(通过P2的指示灯判断复位成功了),但CDC串口不再能正常输出,不断电下载也就不能正常使用。只能重新下电再上电才能恢复。

代码如下:
// 8bit模式
#include "ai8051u.h"
#include "ai_usb.h"


void Delay1ms(unsigned int ms)        //@40.000MHz
{
        unsigned char data i, j;

    do
    {
        i = 52;
        j = 240;
        do
        {
            while (--j);
        } while (--i);
    } while(--ms);
}


void USBLIB_OUT_Callback(void)  //中断方式回调执行的用户自己编写的任务函数,简称回调函数
{
    if(UsbOutBuffer[0] == '0'+6)
        printf_usb("Hello World!");      //接收到数据6后,打印输出“Hello World!”
    else if(UsbOutBuffer[0] == '0'+7)
        printf_usb("China!");            //接收到数据7后,打印输出“China!”      \r\n
}
void main(void)
{
    unsigned char count;
    P_SW2 |= 0x80;//使能可以访问扩展的特殊功能寄存器XFR,没有冲突不用关闭   
    WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
    CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间

    P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式   //如使用usb_init()建议放在这句之后,有“冲突”
    P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
    P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
    P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
   
    usb_init(); //初始化 USB 模块,特别注意会将P30/P31初始化为高阻输入,不影响USB【D-,D+】通信
    set_usb_OUT_callback(USBLIB_OUT_Callback); //设置 USB 中断服务程序可以调用的回调函数

    EA = 1; //使能全局中断

    count = 255;
    while (1)
    {
        printf_usb("printf_usb test!");
        Delay1ms(200);
        P2 = count;
        count -= 1;
    }
}

点评

用了USB不能直接复位的,要把P47改为IO,代码释放USB后再复位。 [attachimg]98338[/attachimg]  详情 回复 发表于 2025-5-12 20:19
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:298
  • 最近打卡:2025-09-14 11:31:57
已绑定手机

82

主题

3111

回帖

6883

积分

荣誉版主

无情的代码机器

积分
6883
发表于 2025-5-12 20:19:47 | 显示全部楼层
21cns*** 发表于 2025-5-12 19:38
大家有没有遇到同样的问题?官方能否测试一下?

使用擎天柱做printf_usb的测试,烧录时取消选择“复位脚用 ...
截图202505122024597965.jpg
用了USB不能直接复位的,
要把P47改为I/O,
代码释放USB后再复位。

截图202505122019046447.jpg

三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:182
  • 最近打卡:2025-09-14 09:47:40

778

主题

1万

回帖

1万

积分

管理员

积分
19095
发表于 2025-5-12 20:26:36 | 显示全部楼层

截图202505122026337158.jpg

截图202505122026113046.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:588
  • 最近打卡:2025-09-14 06:50:33
已绑定手机

15

主题

1341

回帖

3868

积分

论坛元老

积分
3868
发表于 2025-5-12 22:33:34 | 显示全部楼层
erci*** 发表于 2025-5-12 20:19
用了USB不能直接复位的,
要把P47改为I/O,
代码释放USB后再复位。

搞定了,谢谢!


// 8bit模式,40MHz
#include "ai8051u.h"
#include "ai_usb.h"

static bit Key_Flag = 0;
static u16 Key_cnt = 0;

void Delay1ms(u16 ms)        //@40.000MHz
{
        u8 i, j;
    do
    {
        i = 52;
        j = 240;
        do
        {
            while (--j);
        } while (--i);
    } while(--ms);
}


void KeyResetScan(void)     //检查P47口长按1秒触发软件复位
{
    if(!P47)
    {
        if(!Key_Flag)
        {
            Key_cnt++;
            if(Key_cnt >= 6)
            {
                Key_Flag = 1;
                USBCON = 0x00;      //复位前清除USB设置
                USBCLK = 0x00;
                IRC48MCR = 0x00;
                Delay1ms(10);
                IAP_CONTR = 0x20;    //复位到用户APP区;IAP_CONTR = 0x20是复位用ISP区
            }
        }
    else Key_cnt = 0, Key_Flag = 0;
    }
}


void USBLIB_OUT_Callback(void)          //中断方式回调执行的用户自己编写的任务函数,简称回调函数
{
    if(UsbOutBuffer[0] == '0'+6)
        printf_usb("Hello World!");     //接收到数据6后,打印输出“Hello World!”
    else if(UsbOutBuffer[0] == '0'+7)
        printf_usb("China!");           //接收到数据7后,打印输出“China!”      \r\n
    else if(UsbOutBuffer[0] == '0')
    {
        USBCON = 0x00;                  //复位前清除USB设置
        USBCLK = 0x00;
        IRC48MCR = 0x00;
        Delay1ms(10);
        IAP_CONTR = 0x20;               //复位到用户APP区;IAP_CONTR = 0x20是复位用ISP区
    }
}
void main(void)
{
    u8 count;
    P_SW2 |= 0x80;      //使能可以访问扩展的特殊功能寄存器XFR,没有冲突不用关闭   
    WTST = 0;           //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
    CKCON = 0;          //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间

    P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式   //如使用usb_init()建议放在这句之后,有“冲突”
    P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
    P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
    P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
   
    usb_init();         //初始化 USB 模块,特别注意会将P30/P31初始化为高阻输入,不影响USB【D-,D+】通信
    set_usb_OUT_callback(USBLIB_OUT_Callback);      //设置 USB 中断服务程序可以调用的回调函数

    EA = 1;             //使能全局中断

    count = 255;
    while(1)
    {
        printf_usb("printf_usb test!--%bu", 255-count);
        Delay1ms(200);
        P2 = count;
        count -= 1;
        KeyResetScan();
    }
}


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:120
  • 最近打卡:2025-09-13 14:14:59
已绑定手机

2

主题

65

回帖

710

积分

高级会员

积分
710
发表于 2025-6-29 20:31:03 | 显示全部楼层
自己搭建的STC8H8K64U,点亮一个LED正常后,想打出“hello world",但是一点反应也没有,都是照着视频做的。

能帮忙看看是那里出了问题吗?

IMG_20250627_223814.jpg


QQ图片20250628223527.png


QQ图片20250628223540.png


QQ图片20250628223542.png



回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:182
  • 最近打卡:2025-09-14 09:47:40

778

主题

1万

回帖

1万

积分

管理员

积分
19095
发表于 2025-6-29 21:10:06 | 显示全部楼层
STC8H8K64U 直接连接电脑,不要经过那个 USB转双串口


截图202506292119249391.jpg

截图202506292110029460.jpg


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:182
  • 最近打卡:2025-09-14 09:47:40

778

主题

1万

回帖

1万

积分

管理员

积分
19095
发表于 2025-6-29 21:14:04 | 显示全部楼层
这是 USB转串口下载器不是硬件USB直接下载


截图202506292113201985.jpg

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-09-09 19:50:09
已绑定手机

2

主题

12

回帖

56

积分

注册会员

积分
56
发表于 2025-7-28 10:46:57 | 显示全部楼层

测过USB发送时间么,我这边USB发送10个字节,要80ms
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:223
  • 最近打卡:2025-09-14 18:16:56
已绑定手机

6

主题

178

回帖

1041

积分

金牌会员

积分
1041
发表于 2025-7-28 17:05:55 | 显示全部楼层
BH4*** 发表于 2025-7-28 10:46
测过USB发送时间么,我这边USB发送10个字节,要80ms

没测过实际,配置了多大速率
学习
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-09-09 19:50:09
已绑定手机

2

主题

12

回帖

56

积分

注册会员

积分
56
发表于 2025-7-29 19:47:09 | 显示全部楼层
patch*** 发表于 2025-7-28 17:05
没测过实际,配置了多大速率

用的官网下载的最新USB库250716的库的DEMO ,使用8H8K64U
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-9-14 18:40 , Processed in 0.129515 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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