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

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

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-05-19 14:11:50
已绑定手机

6

主题

24

回帖

178

积分

注册会员

积分
178
发表于 2025-5-17 10:58:51 | 显示全部楼层 |阅读模式
实验一:printf_usb("Hello World !\r\n"),  第一个完整的C语言程序


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


打开AiCube,创建项目文件夹。
截图202505171123198479.jpg
项目设置里和可视图形化IO设置里用默认设置即可。

截图202505171124039395.jpg
截图202505171125136779.jpg
勾选USB通用串行总线,USB协议选择CDC,点击创建项目。
截图202505171128213443.jpg

2.keil自动打开项目文件,在程序中用 printf_usb("Hello World !\r\n"); 取代 USBLIB_OUT_Done();编译成功
截图202505191023479178.jpg
3.成功下载程序,串口助手接收区里一直打印Hello World !
截图202505171137338361.jpg
程序文件
test1.zip (136.87 KB, 下载次数: 0)
  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.         
  35.         //直接打印输出“Hello World !\r\n”到主机端串口助手
  36.         //取代AiCube自动生成的 语句“USBLIB_OUT_Done();
  37.         //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
  38.         // 在此添加主函数中用户主循环代码
  39.                         
  40.          printf_usb("Hello World !\r\n");
  41.                         
  42.         //<<AICUBE_USER_MAIN_LOOP_END>>
  43.     }
  44. }
  45. ////////////////////////////////////////
  46. // 系统初始化函数
  47. // 入口参数: 无
  48. // 函数返回: 无
  49. ////////////////////////////////////////
  50. void SYS_Init(void)
  51. {
  52.     EnableAccessXFR();                  //使能访问扩展XFR
  53.     AccessCodeFastest();                //设置最快速度访问程序代码
  54.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  55.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  56.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  57.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  58.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  59.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  60.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  61.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  62.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  63.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  64.     CLK_Init();                         //时钟模块初始化
  65.     USBLIB_Init();                      //USB库初始化
  66.     //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
  67.     // 在此添加用户初始化代码
  68.     //<<AICUBE_USER_INITIAL_CODE_END>>
  69.     EnableGlobalInt();                  //使能全局中断
  70. }
  71. ////////////////////////////////////////
  72. // 微秒延时函数
  73. // 入口参数: us (设置延时的微秒值)
  74. // 函数返回: 无
  75. ////////////////////////////////////////
  76. void delay_us(uint16_t us)
  77. {
  78.     do
  79.     {
  80.         NOP(18);                        //(MAIN_Fosc + 500000) / 1000000 - 6
  81.     } while (--us);
  82. }
  83. ////////////////////////////////////////
  84. // 毫秒延时函数
  85. // 入口参数: ms (设置延时的毫秒值)
  86. // 函数返回: 无
  87. ////////////////////////////////////////
  88. void delay_ms(uint16_t ms)
  89. {
  90.     uint16_t i;
  91.     do
  92.     {
  93.         i = MAIN_Fosc / 6000;
  94.         while (--i);
  95.     } while (--ms);
  96. }
  97. ////////////////////////////////////////
  98. // 时钟初始化函数
  99. // 入口参数: 无
  100. // 函数返回: 无
  101. ////////////////////////////////////////
  102. void CLK_Init(void)
  103. {
  104.     CLK_SYSCLK_Divider(10);             //切换主时钟前先将系统时钟降频
  105.     HIRC_24M();                         //选择内部预置的频率
  106.     CLK_MCLK_HIRC();                    //选择内部高精度HIRC作为主时钟
  107.     CLK_MCLK2_BYPASS();                 //旁路MCLK2,直接使用MCLK选择
  108.     CLK_SYSCLK_Divider(1);              //设置系统时钟分频系数
  109.     CLK_HSIOCK_MCLK();                  //选择MCLK主时钟作为高速外设时钟源
  110.     CLK_HSIOCK_Divider(1);              //设置高速外设时钟预分频系数
  111.     //<<AICUBE_USER_CLOCK_INITIAL_BEGIN>>
  112.     // 在此添加用户初始化代码
  113.     //<<AICUBE_USER_CLOCK_INITIAL_END>>
  114. }
  115. ////////////////////////////////////////
  116. // USB库初始化函数
  117. // 入口参数: 无
  118. // 函数返回: 无
  119. ////////////////////////////////////////
  120. void USBLIB_Init(void)
  121. {
  122.     usb_init();                         //初始化USB模块
  123.     USB_SetIntPriority(0);              //设置中断为最低优先级
  124.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  125.     //<<AICUBE_USER_USBLIB_INITIAL_BEGIN>>
  126.     // 在此添加用户初始化代码
  127.     //<<AICUBE_USER_USBLIB_INITIAL_END>>
  128. }
  129. ////////////////////////////////////////
  130. // 等待USB配置完成函数
  131. // 入口参数: 无
  132. // 函数返回: 无
  133. ////////////////////////////////////////
  134. void USBLIB_WaitConfiged(void)
  135. {
  136.     while (DeviceState != DEVSTATE_CONFIGURED) //等待USB完成配置
  137.         WDT_Clear();                    //清看门狗定时器 (防止硬件自动使能看门狗)
  138. }
  139. ////////////////////////////////////////
  140. // USB设备接收数据处理程序
  141. // 入口参数: 无
  142. // 函数返回: 无
  143. // bUsbOutReady:USB设备接收数据标志位
  144. // OutNumber:USB设备接收到的数据长度
  145. // UsbOutBuffer:保存USB设备接收到的数据
  146. ////////////////////////////////////////
  147. void USBLIB_OUT_Done(void)
  148. {
  149.     if (bUsbOutReady)                   //查询是否有接收到USB主机发送数据
  150.     {
  151.         //<<AICUBE_USER_USBLIB_ISR_CODE1_BEGIN>>
  152.         // 在此添加中断函数用户代码
  153.         USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  154.                                         //在此处添加用户处理接收数据的代码
  155.         //<<AICUBE_USER_USBLIB_ISR_CODE1_END>>
  156.         usb_OUT_done();                 //当前包的数据处理完成,通知USB主机可以发送下一包数据
  157.     }
  158. }
  159. //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
  160. // 在此添加用户函数实现代码
  161. //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
复制代码


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-05-19 14:11:50
已绑定手机

6

主题

24

回帖

178

积分

注册会员

积分
178
发表于 2025-5-17 10:59:41 | 显示全部楼层
实验二: 查询方式,查询到电脑命令后,printf_usb("Hello World !\r\n")或其他
1.在深圳国芯人工智能有限公司-工具软件下载最新ISP软件,重新安装KEIL驱动,添加头文件。




打开AiCube,创建项目文件夹。

项目设置里和可视图形化IO设置里用默认设置即可。



勾选USB通用串行总线,USB协议选择CDC,点击创建项目。



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!"

编译成功。

截图202505171148287017.jpg


3.成功下载程序,串口助手发送区/多字符串发送区要勾选HEX模式,发送6时接收Hello World !;发送7时接收China !
截图202505171154124957.jpg
截图202505171154402552.jpg


程序文件
test1.zip (136.83 KB, 下载次数: 2)
  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.                         
  155.         //<<AICUBE_USER_USBLIB_ISR_CODE1_END>>
  156.         usb_OUT_done();                 //当前包的数据处理完成,通知USB主机可以发送下一包数据
  157.     }
  158. }
  159. //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
  160. // 在此添加用户函数实现代码
  161. //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
复制代码


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-05-19 14:11:50
已绑定手机

6

主题

24

回帖

178

积分

注册会员

积分
178
发表于 2025-5-17 10:59:53 | 显示全部楼层
实验三: 中断方式,单片机USB中断接收服务函数收到命令后,printf_usb("Hello World !\r\n")或其他
1.在深圳国芯人工智能有限公司-工具软件下载最新ISP软件,重新安装KEIL驱动,添加头文件。




打开AiCube,创建项目文件夹。

项目设置里和可视图形化IO设置里用默认设置即可。



勾选USB通用串行总线,USB协议选择CDC,数据处理方式选中断方式,中断优先级选最高优先级点击创建项目。
截图202505171159242169.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!"

编译成功。

截图202505171201137557.jpg


3.成功下载程序,串口助手发送区/多字符串发送区要勾选HEX模式,发送6时接收Hello World !;发送7时接收China !
截图202505191032155434.jpg


程序文件
test1.zip (136.55 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:11 , Processed in 0.413726 second(s), 59 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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