找回密码
 立即注册
查看: 147|回复: 2

printf_usb("Hello World !\r\n"), 第一个C语言程序, USB通信,使用AiCube智能配置开发工具@32G12K128

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:146
  • 最近打卡:2025-06-16 10:11:39

16

主题

469

回帖

2570

积分

超级版主

积分
2570
发表于 2025-5-17 10:54:29 | 显示全部楼层 |阅读模式
printf_usb("Hello World !\r\n"),
===第一个C语言程序, USB通信,
===使用 AiCube@STC-ISP 智能配置开发工具, STC32G12K128

1.在深圳国芯人工智能有限公司-工具软件下载最新ISP软件,重新安装KEIL驱动,添加头文件。

截图202505171058275202.jpg

截图202505171100134370.jpg
截图202505171100437937.jpg
打开AiCube,创建项目文件夹。
截图202505171102566407.jpg
项目设置里和可视图形化IO设置里用默认设置即可。
截图202505171103342484.jpg
截图202505171104438065.jpg
CLK时钟设置内部预置频率24MHz。
截图202505171105509746.jpg
勾选USB通用串行总线,USB协议选择CDC,点击创建项目。
截图202505171107058251.jpg
2.keil自动打开项目文件,在程序中用 printf_usb("Hello World !\r\n"); 取代 USBLIB_OUT_Done();编译成功。
截图202505190950015307.jpg
3.成功下载程序,串口助手接收区里一直打印Hello World !
截图202505171112114212.jpg
32G_printf_usb_test1.zip (137.37 KB, 下载次数: 1)
程序如下:
  1. //<<AICUBE_USER_HEADER_REMARK_BEGIN>>
  2. ////////////////////////////////////////
  3. // 在此添加用户文件头说明信息
  4. // 文件名称: main.c
  5. // 文件描述:
  6. // 文件版本: V1.0
  7. // 修改记录:
  8. //   1. (2025-05-17) 创建文件
  9. ////////////////////////////////////////
  10. //<<AICUBE_USER_HEADER_REMARK_END>>
  11. #include "config.h"                     //默认已包含stdio.h、intrins.h、ai_usb.h等头文件
  12. //<<AICUBE_USER_INCLUDE_BEGIN>>
  13. // 在此添加用户头文件包含
  14. //<<AICUBE_USER_INCLUDE_END>>
  15. //<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
  16. // 在此添加用户全局变量定义、用户宏定义以及函数声明
  17. //<<AICUBE_USER_GLOBAL_DEFINE_END>>
  18. ////////////////////////////////////////
  19. // 项目主函数
  20. // 入口参数: 无
  21. // 函数返回: 无
  22. ////////////////////////////////////////
  23. void main(void)
  24. {
  25.     //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
  26.     // 在此添加用户主函数初始化代码
  27.     //<<AICUBE_USER_MAIN_INITIAL_END>>
  28.     SYS_Init();
  29.     //<<AICUBE_USER_MAIN_CODE_BEGIN>>
  30.     // 在此添加主函数中运行一次的用户代码
  31.     //<<AICUBE_USER_MAIN_CODE_END>>
  32.     while (1)
  33.     {
  34.         //USBLIB_OUT_Done();              //查询方式处理USB接收的数据
  35.         //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
  36.         // 在此添加主函数中用户主循环代码
  37.         printf_usb("Hello World !\r\n");
  38.         //直接打印输出"Hello World !\r\n"到主机端的USB-CDC/HID-串口助手
  39.         //<<AICUBE_USER_MAIN_LOOP_END>>
  40.     }
  41. }
  42. ////////////////////////////////////////
  43. // 系统初始化函数
  44. // 入口参数: 无
  45. // 函数返回: 无
  46. ////////////////////////////////////////
  47. void SYS_Init(void)
  48. {
  49.     EnableAccessXFR();                  //使能访问扩展XFR
  50.     AccessCodeFastest();                //设置最快速度访问程序代码
  51.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  52.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  53.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  54.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  55.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  56.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  57.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  58.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  59.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  60.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  61.     CLK_Init();                         //时钟模块初始化
  62.     USBLIB_Init();                      //USB库初始化
  63.     //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
  64.     // 在此添加用户初始化代码
  65.     //<<AICUBE_USER_INITIAL_CODE_END>>
  66.     EnableGlobalInt();                  //使能全局中断
  67. }
  68. ////////////////////////////////////////
  69. // 微秒延时函数
  70. // 入口参数: us (设置延时的微秒值)
  71. // 函数返回: 无
  72. ////////////////////////////////////////
  73. void delay_us(uint16_t us)
  74. {
  75.     do
  76.     {
  77.         NOP(18);                        //(MAIN_Fosc + 500000) / 1000000 - 6
  78.     } while (--us);
  79. }
  80. ////////////////////////////////////////
  81. // 毫秒延时函数
  82. // 入口参数: ms (设置延时的毫秒值)
  83. // 函数返回: 无
  84. ////////////////////////////////////////
  85. void delay_ms(uint16_t ms)
  86. {
  87.     uint16_t i;
  88.     do
  89.     {
  90.         i = MAIN_Fosc / 6000;
  91.         while (--i);
  92.     } while (--ms);
  93. }
  94. ////////////////////////////////////////
  95. // 时钟初始化函数
  96. // 入口参数: 无
  97. // 函数返回: 无
  98. ////////////////////////////////////////
  99. void CLK_Init(void)
  100. {
  101.     CLK_SYSCLK_Divider(10);             //切换主时钟前先将系统时钟降频
  102.     HIRC_24M();                         //选择内部预置的频率
  103.     CLK_MCLK_HIRC();                    //选择内部高精度HIRC作为主时钟
  104.     CLK_MCLK2_BYPASS();                 //旁路MCLK2,直接使用MCLK选择
  105.     CLK_SYSCLK_Divider(1);              //设置系统时钟分频系数
  106.     CLK_HSIOCK_MCLK();                  //选择MCLK主时钟作为高速外设时钟源
  107.     CLK_HSIOCK_Divider(1);              //设置高速外设时钟预分频系数
  108.     //<<AICUBE_USER_CLOCK_INITIAL_BEGIN>>
  109.     // 在此添加用户初始化代码
  110.     //<<AICUBE_USER_CLOCK_INITIAL_END>>
  111. }
  112. ////////////////////////////////////////
  113. // USB库初始化函数
  114. // 入口参数: 无
  115. // 函数返回: 无
  116. ////////////////////////////////////////
  117. void USBLIB_Init(void)
  118. {
  119.     usb_init();                         //初始化USB模块
  120.     USB_SetIntPriority(0);              //设置中断为最低优先级
  121.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  122.     //<<AICUBE_USER_USBLIB_INITIAL_BEGIN>>
  123.     // 在此添加用户初始化代码
  124.     //<<AICUBE_USER_USBLIB_INITIAL_END>>
  125. }
  126. ////////////////////////////////////////
  127. // 等待USB配置完成函数
  128. // 入口参数: 无
  129. // 函数返回: 无
  130. ////////////////////////////////////////
  131. void USBLIB_WaitConfiged(void)
  132. {
  133.     while (DeviceState != DEVSTATE_CONFIGURED) //等待USB完成配置
  134.         WDT_Clear();                    //清看门狗定时器 (防止硬件自动使能看门狗)
  135. }
  136. ////////////////////////////////////////
  137. // USB设备接收数据处理程序
  138. // 入口参数: 无
  139. // 函数返回: 无
  140. // bUsbOutReady:USB设备接收数据标志位
  141. // OutNumber:USB设备接收到的数据长度
  142. // UsbOutBuffer:保存USB设备接收到的数据
  143. ////////////////////////////////////////
  144. void USBLIB_OUT_Done(void)
  145. {
  146.     if (bUsbOutReady)                   //查询是否有接收到USB主机发送数据
  147.     {
  148.         //<<AICUBE_USER_USBLIB_ISR_CODE1_BEGIN>>
  149.         // 在此添加中断函数用户代码
  150.         USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  151.         //在此处添加用户处理接收数据的代码
  152.         //<<AICUBE_USER_USBLIB_ISR_CODE1_END>>
  153.         usb_OUT_done();                 //当前包的数据处理完成,通知USB主机可以发送下一包数据
  154.     }
  155. }
  156. //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
  157. // 在此添加用户函数实现代码
  158. //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
复制代码




回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:146
  • 最近打卡:2025-06-16 10:11:39

16

主题

469

回帖

2570

积分

超级版主

积分
2570
发表于 2025-5-17 10:54:36 | 显示全部楼层
printf_usb("Hello World !\r\n")或其他,
===第二个C语言程序, USB通信,查询方式,
===使用 AiCube@STC-ISP 智能配置开发工具, STC32G12K128
1.在深圳国芯人工智能有限公司-工具软件下载最新ISP软件,重新安装KEIL驱动,添加头文件。





打开AiCube,创建项目文件夹。
截图202505171117482687.jpg
项目设置里和可视图形化IO设置里用默认设置即可。
截图202505171118253646.jpg
截图202505171118551780.jpg
CLK时钟设置内部预置频率24MHz。
截图202505171119543241.jpg
勾选USB通用串行总线,USB协议选择CDC,点击创建项目。
截图202505171121539813.jpg

2.keil自动打开项目文件,在程序中将 USB_SendData(UsbOutBuffer, OutNumber);
改成:
if(UsbOutBuffer[0]==6)
     printf_usb("HelloWorld!\r\n"); //如接收到的数据包的第0个字节是6,打印“HelloWorld!"
else if(UsbOutBuffer[0]==7)
     printf_usb("China!\r\n");  //如接收到的数据包的第0个字节是7,打印“China!"
编译成功。
截图202505171130583230.jpg
3.成功下载程序,串口助手发送区/多字符串发送区要勾选HEX模式,发送6时接收Hello World !;发送7时接收China !
截图202505171132453057.jpg
截图202505171133083961.jpg
32G_printf_usb_test2.zip (137.86 KB, 下载次数: 3)
程序如下:
  1. //<<AICUBE_USER_HEADER_REMARK_BEGIN>>
  2. ////////////////////////////////////////
  3. // 在此添加用户文件头说明信息
  4. // 文件名称: main.c
  5. // 文件描述:
  6. // 文件版本: V1.0
  7. // 修改记录:
  8. //   1. (2025-05-17) 创建文件
  9. ////////////////////////////////////////
  10. //<<AICUBE_USER_HEADER_REMARK_END>>
  11. #include "config.h"                     //默认已包含stdio.h、intrins.h、ai_usb.h等头文件
  12. //<<AICUBE_USER_INCLUDE_BEGIN>>
  13. // 在此添加用户头文件包含
  14. //<<AICUBE_USER_INCLUDE_END>>
  15. //<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
  16. // 在此添加用户全局变量定义、用户宏定义以及函数声明
  17. //<<AICUBE_USER_GLOBAL_DEFINE_END>>
  18. ////////////////////////////////////////
  19. // 项目主函数
  20. // 入口参数: 无
  21. // 函数返回: 无
  22. ////////////////////////////////////////
  23. void main(void)
  24. {
  25.     //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
  26.     // 在此添加用户主函数初始化代码
  27.     //<<AICUBE_USER_MAIN_INITIAL_END>>
  28.     SYS_Init();
  29.     //<<AICUBE_USER_MAIN_CODE_BEGIN>>
  30.     // 在此添加主函数中运行一次的用户代码
  31.     //<<AICUBE_USER_MAIN_CODE_END>>
  32.     while (1)
  33.     {
  34.         USBLIB_OUT_Done();              //查询方式处理USB接收的数据
  35.         //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
  36.         // 在此添加主函数中用户主循环代码
  37.         //<<AICUBE_USER_MAIN_LOOP_END>>
  38.     }
  39. }
  40. ////////////////////////////////////////
  41. // 系统初始化函数
  42. // 入口参数: 无
  43. // 函数返回: 无
  44. ////////////////////////////////////////
  45. void SYS_Init(void)
  46. {
  47.     EnableAccessXFR();                  //使能访问扩展XFR
  48.     AccessCodeFastest();                //设置最快速度访问程序代码
  49.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  50.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  51.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  52.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  53.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  54.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  55.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  56.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  57.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  58.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  59.     CLK_Init();                         //时钟模块初始化
  60.     USBLIB_Init();                      //USB库初始化
  61.     //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
  62.     // 在此添加用户初始化代码
  63.     //<<AICUBE_USER_INITIAL_CODE_END>>
  64.     EnableGlobalInt();                  //使能全局中断
  65. }
  66. ////////////////////////////////////////
  67. // 微秒延时函数
  68. // 入口参数: us (设置延时的微秒值)
  69. // 函数返回: 无
  70. ////////////////////////////////////////
  71. void delay_us(uint16_t us)
  72. {
  73.     do
  74.     {
  75.         NOP(18);                        //(MAIN_Fosc + 500000) / 1000000 - 6
  76.     } while (--us);
  77. }
  78. ////////////////////////////////////////
  79. // 毫秒延时函数
  80. // 入口参数: ms (设置延时的毫秒值)
  81. // 函数返回: 无
  82. ////////////////////////////////////////
  83. void delay_ms(uint16_t ms)
  84. {
  85.     uint16_t i;
  86.     do
  87.     {
  88.         i = MAIN_Fosc / 6000;
  89.         while (--i);
  90.     } while (--ms);
  91. }
  92. ////////////////////////////////////////
  93. // 时钟初始化函数
  94. // 入口参数: 无
  95. // 函数返回: 无
  96. ////////////////////////////////////////
  97. void CLK_Init(void)
  98. {
  99.     CLK_SYSCLK_Divider(10);             //切换主时钟前先将系统时钟降频
  100.     HIRC_24M();                         //选择内部预置的频率
  101.     CLK_MCLK_HIRC();                    //选择内部高精度HIRC作为主时钟
  102.     CLK_MCLK2_BYPASS();                 //旁路MCLK2,直接使用MCLK选择
  103.     CLK_SYSCLK_Divider(1);              //设置系统时钟分频系数
  104.     CLK_HSIOCK_MCLK();                  //选择MCLK主时钟作为高速外设时钟源
  105.     CLK_HSIOCK_Divider(1);              //设置高速外设时钟预分频系数
  106.     //<<AICUBE_USER_CLOCK_INITIAL_BEGIN>>
  107.     // 在此添加用户初始化代码
  108.     //<<AICUBE_USER_CLOCK_INITIAL_END>>
  109. }
  110. ////////////////////////////////////////
  111. // USB库初始化函数
  112. // 入口参数: 无
  113. // 函数返回: 无
  114. ////////////////////////////////////////
  115. void USBLIB_Init(void)
  116. {
  117.     usb_init();                         //初始化USB模块
  118.     USB_SetIntPriority(0);              //设置中断为最低优先级
  119.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  120.     //<<AICUBE_USER_USBLIB_INITIAL_BEGIN>>
  121.     // 在此添加用户初始化代码
  122.     //<<AICUBE_USER_USBLIB_INITIAL_END>>
  123. }
  124. ////////////////////////////////////////
  125. // 等待USB配置完成函数
  126. // 入口参数: 无
  127. // 函数返回: 无
  128. ////////////////////////////////////////
  129. void USBLIB_WaitConfiged(void)
  130. {
  131.     while (DeviceState != DEVSTATE_CONFIGURED) //等待USB完成配置
  132.         WDT_Clear();                    //清看门狗定时器 (防止硬件自动使能看门狗)
  133. }
  134. ////////////////////////////////////////
  135. // USB设备接收数据处理程序
  136. // 入口参数: 无
  137. // 函数返回: 无
  138. // bUsbOutReady:USB设备接收数据标志位
  139. // OutNumber:USB设备接收到的数据长度
  140. // UsbOutBuffer:保存USB设备接收到的数据
  141. ////////////////////////////////////////
  142. void USBLIB_OUT_Done(void)
  143. {
  144.     if (bUsbOutReady)                   //查询是否有接收到USB主机发送数据
  145.     {
  146.         //<<AICUBE_USER_USBLIB_ISR_CODE1_BEGIN>>
  147.         // 在此添加中断函数用户代码
  148.         //USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  149.         //在此处添加用户处理接收数据的代码
  150.         if(UsbOutBuffer[0]==6)
  151.            printf_usb("HelloWorld!\r\n"); //如接收到的数据包的第0个字节是6,打印“HelloWorld!"
  152.         else if(UsbOutBuffer[0]==7)
  153.            printf_usb("China!\r\n");  //如接收到的数据包的第0个字节是7,打印“China!"
  154.         //<<AICUBE_USER_USBLIB_ISR_CODE1_END>>
  155.         usb_OUT_done();                 //当前包的数据处理完成,通知USB主机可以发送下一包数据
  156.     }
  157. }
  158. //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
  159. // 在此添加用户函数实现代码
  160. //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
复制代码

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:146
  • 最近打卡:2025-06-16 10:11:39

16

主题

469

回帖

2570

积分

超级版主

积分
2570
发表于 2025-5-17 10:55:09 | 显示全部楼层
printf_usb("Hello World !\r\n")或其他,
===第三个C语言程序, USB通信,中断方式,
===使用 AiCube@STC-ISP 智能配置开发工具, STC32G12K128
1.在深圳国芯人工智能有限公司-工具软件下载最新ISP软件,重新安装KEIL驱动,添加头文件。





打开AiCube,创建项目文件夹。
截图202505171137131670.jpg
项目设置里和可视图形化IO设置里用默认设置即可。
截图202505171137557072.jpg
截图202505171138128418.jpg
CLK时钟设置内部预置频率24MHz。
截图202505171138484143.jpg
勾选USB通用串行总线,USB协议选择CDC,数据处理方式选中断方式,中断优先级选最高优先级,点击创建项目。
截图202505171140083914.jpg

2.keil自动打开项目文件,在程序中将 USB_SendData(UsbOutBuffer, OutNumber);
改成:
if(UsbOutBuffer[0]==6)
     printf_usb("HelloWorld!\r\n"); //如接收到的数据包的第0个字节是6,打印“HelloWorld!"
else if(UsbOutBuffer[0]==7)
     printf_usb("China!\r\n");  //如接收到的数据包的第0个字节是7,打印“China!"
编译成功。
截图202505171141504381.jpg
3.成功下载程序,串口助手发送区/多字符串发送区要勾选HEX模式,发送6时接收Hello World !;发送7时接收China !
截图202505171143178113.jpg
截图202505171145418628.jpg
32G_printf_usb_test3.zip (137.54 KB, 下载次数: 1)
程序如下:
  1. //<<AICUBE_USER_HEADER_REMARK_BEGIN>>
  2. ////////////////////////////////////////
  3. // 在此添加用户文件头说明信息
  4. // 文件名称: main.c
  5. // 文件描述:
  6. // 文件版本: V1.0
  7. // 修改记录:
  8. //   1. (2025-05-17) 创建文件
  9. ////////////////////////////////////////
  10. //<<AICUBE_USER_HEADER_REMARK_END>>
  11. #include "config.h"                     //默认已包含stdio.h、intrins.h、ai_usb.h等头文件
  12. //<<AICUBE_USER_INCLUDE_BEGIN>>
  13. // 在此添加用户头文件包含
  14. //<<AICUBE_USER_INCLUDE_END>>
  15. //<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
  16. // 在此添加用户全局变量定义、用户宏定义以及函数声明
  17. //<<AICUBE_USER_GLOBAL_DEFINE_END>>
  18. ////////////////////////////////////////
  19. // 项目主函数
  20. // 入口参数: 无
  21. // 函数返回: 无
  22. ////////////////////////////////////////
  23. void main(void)
  24. {
  25.     //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
  26.     // 在此添加用户主函数初始化代码
  27.     //<<AICUBE_USER_MAIN_INITIAL_END>>
  28.     SYS_Init();
  29.     //<<AICUBE_USER_MAIN_CODE_BEGIN>>
  30.     // 在此添加主函数中运行一次的用户代码
  31.     //<<AICUBE_USER_MAIN_CODE_END>>
  32.     while (1)
  33.     {
  34.         //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
  35.         // 在此添加主函数中用户主循环代码
  36.         //<<AICUBE_USER_MAIN_LOOP_END>>
  37.     }
  38. }
  39. ////////////////////////////////////////
  40. // 系统初始化函数
  41. // 入口参数: 无
  42. // 函数返回: 无
  43. ////////////////////////////////////////
  44. void SYS_Init(void)
  45. {
  46.     EnableAccessXFR();                  //使能访问扩展XFR
  47.     AccessCodeFastest();                //设置最快速度访问程序代码
  48.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  49.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  50.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  51.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  52.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  53.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  54.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  55.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  56.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  57.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  58.     CLK_Init();                         //时钟模块初始化
  59.     USBLIB_Init();                      //USB库初始化
  60.     //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
  61.     // 在此添加用户初始化代码
  62.     //<<AICUBE_USER_INITIAL_CODE_END>>
  63.     EnableGlobalInt();                  //使能全局中断
  64. }
  65. ////////////////////////////////////////
  66. // 微秒延时函数
  67. // 入口参数: us (设置延时的微秒值)
  68. // 函数返回: 无
  69. ////////////////////////////////////////
  70. void delay_us(uint16_t us)
  71. {
  72.     do
  73.     {
  74.         NOP(18);                        //(MAIN_Fosc + 500000) / 1000000 - 6
  75.     } while (--us);
  76. }
  77. ////////////////////////////////////////
  78. // 毫秒延时函数
  79. // 入口参数: ms (设置延时的毫秒值)
  80. // 函数返回: 无
  81. ////////////////////////////////////////
  82. void delay_ms(uint16_t ms)
  83. {
  84.     uint16_t i;
  85.     do
  86.     {
  87.         i = MAIN_Fosc / 6000;
  88.         while (--i);
  89.     } while (--ms);
  90. }
  91. ////////////////////////////////////////
  92. // 时钟初始化函数
  93. // 入口参数: 无
  94. // 函数返回: 无
  95. ////////////////////////////////////////
  96. void CLK_Init(void)
  97. {
  98.     CLK_SYSCLK_Divider(10);             //切换主时钟前先将系统时钟降频
  99.     HIRC_24M();                         //选择内部预置的频率
  100.     CLK_MCLK_HIRC();                    //选择内部高精度HIRC作为主时钟
  101.     CLK_MCLK2_BYPASS();                 //旁路MCLK2,直接使用MCLK选择
  102.     CLK_SYSCLK_Divider(1);              //设置系统时钟分频系数
  103.     CLK_HSIOCK_MCLK();                  //选择MCLK主时钟作为高速外设时钟源
  104.     CLK_HSIOCK_Divider(1);              //设置高速外设时钟预分频系数
  105.     //<<AICUBE_USER_CLOCK_INITIAL_BEGIN>>
  106.     // 在此添加用户初始化代码
  107.     //<<AICUBE_USER_CLOCK_INITIAL_END>>
  108. }
  109. ////////////////////////////////////////
  110. // USB库初始化函数
  111. // 入口参数: 无
  112. // 函数返回: 无
  113. ////////////////////////////////////////
  114. void USBLIB_Init(void)
  115. {
  116.     usb_init();                         //初始化USB模块
  117.     USB_SetIntPriority(3);              //设置中断为最高优先级
  118.     set_usb_OUT_callback(USBLIB_OUT_Callback); //设置USB中断回调函数
  119.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  120.     //<<AICUBE_USER_USBLIB_INITIAL_BEGIN>>
  121.     // 在此添加用户初始化代码
  122.     //<<AICUBE_USER_USBLIB_INITIAL_END>>
  123. }
  124. ////////////////////////////////////////
  125. // 等待USB配置完成函数
  126. // 入口参数: 无
  127. // 函数返回: 无
  128. ////////////////////////////////////////
  129. void USBLIB_WaitConfiged(void)
  130. {
  131.     while (DeviceState != DEVSTATE_CONFIGURED) //等待USB完成配置
  132.         WDT_Clear();                    //清看门狗定时器 (防止硬件自动使能看门狗)
  133. }
  134. ////////////////////////////////////////
  135. // USB设备接收数据中断回调程序
  136. // 入口参数: 无
  137. // 函数返回: 无
  138. // OutNumber:USB设备接收到的数据长度
  139. // UsbOutBuffer:保存USB设备接收到的数据
  140. ////////////////////////////////////////
  141. void USBLIB_OUT_Callback(void)
  142. {
  143.     //<<AICUBE_USER_USBLIB_ISR_CODE1_BEGIN>>
  144.     // 在此添加中断函数用户代码
  145.     //USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  146.     //在此处添加用户处理接收数据的代码
  147.     if(UsbOutBuffer[0]==6)
  148.       printf_usb("HelloWorld!\r\n"); //如接收到的数据包的第0个字节是6,打印“HelloWorld!"
  149.     else if(UsbOutBuffer[0]==7)
  150.       printf_usb("China!\r\n");  //如接收到的数据包的第0个字节是7,打印“China!"
  151.     //<<AICUBE_USER_USBLIB_ISR_CODE1_END>>
  152. }
  153. //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
  154. // 在此添加用户函数实现代码
  155. //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
复制代码



回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 13:07 , Processed in 0.145052 second(s), 59 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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