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

利用 AiCube@AIapp-ISP,智能配置开发工具,实现如下的实验 打卡

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:152
  • 最近打卡:2025-06-25 09:06:58

16

主题

477

回帖

2620

积分

超级版主

积分
2620
发表于 2025-4-9 15:34:21 | 显示全部楼层 |阅读模式
实验一:printf_usb("Hello World !\r\n"), 第一个完整的C语言程序

1.在深圳国芯人工智能有限公司-工具软件下载最新ISP软件,重新安装KEIL驱动,添加头文件。
截图202505061004197335.jpg
截图202505061010511894.jpg
截图202505061011118959.jpg
打开AiCube,创建项目文件夹。
截图202505061014577730.jpg
项目设置里和可视图形化IO设置里用默认设置即可。
截图202505061017105563.jpg
截图202505061018048664.jpg
CLK时钟设置内部预置频率40MHz。
截图202505061020122281.jpg
勾选USB通用串行总线,USB协议选择CDC,点击创建项目。
截图202505061021537935.jpg
2.keil自动打开项目文件,在程序中用 printf_usb("Hello World !\r\n"); 取代 USBLIB_OUT_Done();编译成功。
截图202505191052501480.jpg
3.成功下载程序,串口助手接收区里一直打印Hello World !
截图202505061030027652.jpg
printf_usb_test1.zip (144.26 KB, 下载次数: 3)
程序如下:
  1. //<<AICUBE_USER_HEADER_REMARK_BEGIN>>
  2. ////////////////////////////////////////
  3. // 在此添加用户文件头说明信息
  4. // 文件名称: main.c
  5. // 文件描述:
  6. // 文件版本: V1.0
  7. // 修改记录:
  8. //   1. (2025-05-06) 创建文件
  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.         // USBLIB_OUT_Done();              //查询方式处理USB接收的数据
  36.         //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
  37.         // 在此添加主函数中用户主循环代码
  38.         printf_usb("Hello World !\r\n");
  39.         //直接打印输出"Hello World !\r\n"到主机端的USB-CDC/HID-串口助手
  40.         //<<AICUBE_USER_MAIN_LOOP_END>>
  41.     }
  42. }
  43. ////////////////////////////////////////
  44. // 系统初始化函数
  45. // 入口参数: 无
  46. // 函数返回: 无
  47. ////////////////////////////////////////
  48. void SYS_Init(void)
  49. {
  50.     EnableAccessXFR();                  //使能访问扩展XFR
  51.     AccessCodeFastest();                //设置最快速度访问程序代码
  52.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  53.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  54.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  55.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  56.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  57.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  58.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  59.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  60.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  61.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  62.     CLK_Init();                         //时钟模块初始化
  63.     USBLIB_Init();                      //USB库初始化
  64.     //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
  65.     // 在此添加用户初始化代码
  66.     //<<AICUBE_USER_INITIAL_CODE_END>>
  67.     EnableGlobalInt();                  //使能全局中断
  68. }
  69. ////////////////////////////////////////
  70. // 微秒延时函数
  71. // 入口参数: us (设置延时的微秒值)
  72. // 函数返回: 无
  73. ////////////////////////////////////////
  74. void delay_us(uint16_t us)
  75. {
  76.     do
  77.     {
  78.         NOP(34);                        //(MAIN_Fosc + 500000) / 1000000 - 6
  79.     } while (--us);
  80. }
  81. ////////////////////////////////////////
  82. // 毫秒延时函数
  83. // 入口参数: ms (设置延时的毫秒值)
  84. // 函数返回: 无
  85. ////////////////////////////////////////
  86. void delay_ms(uint16_t ms)
  87. {
  88.     uint16_t i;
  89.     do
  90.     {
  91.         i = MAIN_Fosc / 6000;
  92.         while (--i);
  93.     } while (--ms);
  94. }
  95. ////////////////////////////////////////
  96. // 时钟初始化函数
  97. // 入口参数: 无
  98. // 函数返回: 无
  99. ////////////////////////////////////////
  100. void CLK_Init(void)
  101. {
  102.     CLK_SYSCLK_Divider(10);             //切换主时钟前先将系统时钟降频
  103.     HIRC_40M();                         //选择内部预置的频率
  104.     CLK_MCLK_HIRC();                    //选择内部高精度HIRC作为主时钟
  105.     CLK_MCLK2_BYPASS();                 //旁路MCLK2,直接使用MCLK选择
  106.     CLK_SYSCLK_Divider(1);              //设置系统时钟分频系数
  107.     CLK_HSIOCK_MCLK();                  //选择MCLK主时钟作为高速外设时钟源
  108.     CLK_HSIOCK_Divider(1);              //设置高速外设时钟预分频系数
  109.     CLK_SPICLK_Divider(1);              //设置SPI时钟预分频系数
  110.     CLK_I2SCLK_Divider(1);              //设置I2S时钟预分频系数
  111.     CLK_PWMACLK_Divider(1);             //设置PWMA时钟预分频系数
  112.     CLK_PWMBCLK_Divider(1);             //设置PWMB时钟预分频系数
  113.     CLK_TFPUCLK_Divider(1);             //设置TFPU时钟预分频系数
  114.     //<<AICUBE_USER_CLOCK_INITIAL_BEGIN>>
  115.     // 在此添加用户初始化代码
  116.     //<<AICUBE_USER_CLOCK_INITIAL_END>>
  117. }
  118. ////////////////////////////////////////
  119. // USB库初始化函数
  120. // 入口参数: 无
  121. // 函数返回: 无
  122. ////////////////////////////////////////
  123. void USBLIB_Init(void)
  124. {
  125.     usb_init();                         //初始化USB模块
  126.     USB_SetIntPriority(0);              //设置中断为最低优先级
  127.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  128.     //<<AICUBE_USER_USBLIB_INITIAL_BEGIN>>
  129.     // 在此添加用户初始化代码
  130.     //<<AICUBE_USER_USBLIB_INITIAL_END>>
  131. }
  132. ////////////////////////////////////////
  133. // 等待USB配置完成函数
  134. // 入口参数: 无
  135. // 函数返回: 无
  136. ////////////////////////////////////////
  137. void USBLIB_WaitConfiged(void)
  138. {
  139.     while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
  140. }
  141. ////////////////////////////////////////
  142. // USB设备接收数据处理程序
  143. // 入口参数: 无
  144. // 函数返回: 无
  145. // bUsbOutReady:USB设备接收数据标志位
  146. // OutNumber:USB设备接收到的数据长度
  147. // UsbOutBuffer:保存USB设备接收到的数据
  148. ////////////////////////////////////////
  149. void USBLIB_OUT_Done(void)
  150. {
  151.     if (bUsbOutReady)                   //查询是否有接收到USB主机发送数据
  152.     {
  153.         //<<AICUBE_USER_USBLIB_ISR_CODE1_BEGIN>>
  154.         // 在此添加中断函数用户代码
  155.         USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  156.                                         //在此处添加用户处理接收数据的代码
  157.         //<<AICUBE_USER_USBLIB_ISR_CODE1_END>>
  158.         usb_OUT_done();                 //当前包的数据处理完成,通知USB主机可以发送下一包数据
  159.     }
  160. }
  161. //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
  162. // 在此添加用户函数实现代码
  163. //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
复制代码




回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:152
  • 最近打卡:2025-06-25 09:06:58

16

主题

477

回帖

2620

积分

超级版主

积分
2620
发表于 2025-4-9 16:05:26 | 显示全部楼层
实验二: 查询方式,查询到电脑命令后,printf_usb("Hello World !\r\n")或其他

1.深圳国芯人工智能有限公司-工具软件下载最新ISP软件,重新安装KEIL驱动,添加头文件。
截图202505061129247600.jpg
截图202505061129472129.jpg
截图202505061130175741.jpg
打开AiCube,创建项目文件夹。
截图202505061132049043.jpg
项目设置里和可视图形化IO设置里用默认设置即可。
截图202505061132396854.jpg
截图202505061134366750.jpg
CLK时钟设置内部预置频率40MHz。
截图202505061137163465.jpg
勾选USB通用串行总线,USB协议选择CDC,点击创建项目。
截图202505061138577686.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!"

编译成功。
截图202505061142557739.jpg
3.成功下载程序,串口助手发送区/多字符串发送区要勾选HEX模式,发送6时接收Hello World !;发送7时接收China !
截图202505061145255090.jpg
截图202505061145488653.jpg
printf_usb_test2.zip (144.72 KB, 下载次数: 8)
程序如下:
  1. //<<AICUBE_USER_HEADER_REMARK_BEGIN>>
  2. ////////////////////////////////////////
  3. // 在此添加用户文件头说明信息
  4. // 文件名称: main.c
  5. // 文件描述:
  6. // 文件版本: V1.0
  7. // 修改记录:
  8. //   1. (2025-05-06) 创建文件
  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(34);                        //(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_40M();                         //选择内部预置的频率
  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.     CLK_SPICLK_Divider(1);              //设置SPI时钟预分频系数
  107.     CLK_I2SCLK_Divider(1);              //设置I2S时钟预分频系数
  108.     CLK_PWMACLK_Divider(1);             //设置PWMA时钟预分频系数
  109.     CLK_PWMBCLK_Divider(1);             //设置PWMB时钟预分频系数
  110.     CLK_TFPUCLK_Divider(1);             //设置TFPU时钟预分频系数
  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. }
  138. ////////////////////////////////////////
  139. // USB设备接收数据处理程序
  140. // 入口参数: 无
  141. // 函数返回: 无
  142. // bUsbOutReady:USB设备接收数据标志位
  143. // OutNumber:USB设备接收到的数据长度
  144. // UsbOutBuffer:保存USB设备接收到的数据
  145. ////////////////////////////////////////
  146. void USBLIB_OUT_Done(void)
  147. {
  148.     if (bUsbOutReady)                   //查询是否有接收到USB主机发送数据
  149.     {
  150.         //<<AICUBE_USER_USBLIB_ISR_CODE1_BEGIN>>
  151.         // 在此添加中断函数用户代码
  152.         //USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  153.         //在此处添加用户处理接收数据的代码
  154.         if(UsbOutBuffer[0]==6)
  155.            printf_usb("HelloWorld!\r\n"); //如接收到的数据包的第0个字节是6,打印“HelloWorld!"
  156.         else if(UsbOutBuffer[0]==7)
  157.            printf_usb("China!\r\n");  //如接收到的数据包的第0个字节是7,打印“China!"
  158.         //<<AICUBE_USER_USBLIB_ISR_CODE1_END>>
  159.         usb_OUT_done();                 //当前包的数据处理完成,通知USB主机可以发送下一包数据
  160.     }
  161. }
  162. //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
  163. // 在此添加用户函数实现代码
  164. //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
复制代码



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:152
  • 最近打卡:2025-06-25 09:06:58

16

主题

477

回帖

2620

积分

超级版主

积分
2620
发表于 2025-4-9 16:46:45 | 显示全部楼层
实验三:中断方式,单片机USB中断接收服务函数收到命令后,printf_usb("Hello World !\r\n")或其他

1.深圳国芯人工智能有限公司-工具软件下载最新ISP软件,重新安装KEIL驱动,添加头文件。
截图202505061344007887.jpg
截图202505061344154767.jpg
截图202505061344303113.jpg
打开AiCube,创建项目文件夹。
截图202505061345305641.jpg
项目设置里和可视图形化IO设置里用默认设置即可。
截图202505061345579630.jpg
截图202505061346202087.jpg
CLK时钟设置内部预置频率40MHz。
截图202505061347197594.jpg
勾选USB通用串行总线,USB协议选择CDC,数据处理方式选中断方式,中断优先级选最高优先级点击创建项目。
截图202505061349121713.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!"

编译成功。
截图202505061351574973.jpg
3.成功下载程序,串口助手发送区/多字符串发送区要勾选HEX模式,发送6时接收Hello World !;发送7时接收China !
截图202505061352501464.jpg
截图202505061353106250.jpg
printf_usb_test3.zip (144.48 KB, 下载次数: 6)
程序如下:
  1. //<<AICUBE_USER_HEADER_REMARK_BEGIN>>
  2. ////////////////////////////////////////
  3. // 在此添加用户文件头说明信息
  4. // 文件名称: main.c
  5. // 文件描述:
  6. // 文件版本: V1.0
  7. // 修改记录:
  8. //   1. (2025-05-06) 创建文件
  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(34);                        //(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_40M();                         //选择内部预置的频率
  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.     CLK_SPICLK_Divider(1);              //设置SPI时钟预分频系数
  106.     CLK_I2SCLK_Divider(1);              //设置I2S时钟预分频系数
  107.     CLK_PWMACLK_Divider(1);             //设置PWMA时钟预分频系数
  108.     CLK_PWMBCLK_Divider(1);             //设置PWMB时钟预分频系数
  109.     CLK_TFPUCLK_Divider(1);             //设置TFPU时钟预分频系数
  110.     //<<AICUBE_USER_CLOCK_INITIAL_BEGIN>>
  111.     // 在此添加用户初始化代码
  112.     //<<AICUBE_USER_CLOCK_INITIAL_END>>
  113. }
  114. ////////////////////////////////////////
  115. // USB库初始化函数
  116. // 入口参数: 无
  117. // 函数返回: 无
  118. ////////////////////////////////////////
  119. void USBLIB_Init(void)
  120. {
  121.     usb_init();                         //初始化USB模块
  122.     USB_SetIntPriority(3);              //设置中断为最高优先级
  123.     set_usb_OUT_callback(USBLIB_OUT_Callback); //设置USB中断回调函数
  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. }
  138. ////////////////////////////////////////
  139. // USB设备接收数据中断回调程序
  140. // 入口参数: 无
  141. // 函数返回: 无
  142. // OutNumber:USB设备接收到的数据长度
  143. // UsbOutBuffer:保存USB设备接收到的数据
  144. ////////////////////////////////////////
  145. void USBLIB_OUT_Callback(void)
  146. {
  147.     //<<AICUBE_USER_USBLIB_ISR_CODE1_BEGIN>>
  148.     // 在此添加中断函数用户代码
  149.     //USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  150.     //在此处添加用户处理接收数据的代码
  151.     if(UsbOutBuffer[0]==6)
  152.        printf_usb("HelloWorld!\r\n"); //如接收到的数据包的第0个字节是6,打印“HelloWorld!"
  153.     else if(UsbOutBuffer[0]==7)
  154.        printf_usb("China!\r\n");  //如接收到的数据包的第0个字节是7,打印“China!"
  155.     //<<AICUBE_USER_USBLIB_ISR_CODE1_END>>
  156. }
  157. //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
  158. // 在此添加用户函数实现代码
  159. //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
复制代码



回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-30 06:24 , Processed in 0.125894 second(s), 58 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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