找回密码
 立即注册
查看: 153|回复: 4

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

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

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

1.重新添加头文件。
截图202504161522474583.jpg
截图202504161523085688.jpg

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

截图202504161443058410.jpg
截图202504161444013795.jpg
CLK时钟设置内部预置频率40MHz。
截图202504161445011411.jpg
勾选USB通用串行总线,USB协议选择CDC,勾选项目创建完成后自动在Keil软件中打开项目,点击创建项目。
截图202504161446573455.jpg
2.keil自动打开项目文件,在程序中用 printf_usb("Hello World !\r\n"); 取代 USBLIB_OUT_Done();编译成功。
截图202504161459128524.jpg
截图202504161503071385.jpg
3.成功下载程序,串口助手接收区里一直打印Hello World !
截图202504161506357880.jpg
截图202504161507528675.jpg
printf_usb_test1.zip (138.35 KB, 下载次数: 0)
程序如下:
  1. ////////////////////////////////////////
  2. // 文件名称: main.c
  3. // 文件描述:
  4. // 文件版本: V1.0
  5. // 修改记录:
  6. //   1. (2025-04-16) 创建文件
  7. ////////////////////////////////////////
  8. #include "config.h"                     //默认已包含stdio.h、intrins.h、ai_usb.h等头文件
  9. ////////////////////////////////////////
  10. // 项目主函数
  11. // 入口参数: 无
  12. // 函数返回: 无
  13. ////////////////////////////////////////
  14. void main(void)
  15. {
  16.     SYS_Init();
  17.     while (1)
  18.     {
  19.                 printf_usb("Hello World !\r\n");
  20.         //直接打印输出  "Hello World !\r\n" 到 主机端的 USB-CDC/HID-串口助手
  21.         //取代下面这行 AiCube 自动生成的语句
  22. //        USBLIB_OUT_Done();              //查询方式处理USB接收的数据
  23.     }
  24. }
  25. ////////////////////////////////////////
  26. // 系统初始化函数
  27. // 入口参数: 无
  28. // 函数返回: 无
  29. ////////////////////////////////////////
  30. void SYS_Init(void)
  31. {
  32.     EnableAccessXFR();                  //使能访问扩展XFR
  33.     AccessCodeFastest();                //设置最快速度访问程序代码
  34.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  35.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  36.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  37.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  38.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  39.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  40.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  41.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  42.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  43.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  44.     CLK_Init();                         //时钟模块初始化
  45.     USBLIB_Init();                      //USB库初始化
  46.     EnableGlobalInt();                  //使能全局中断
  47. }
  48. ////////////////////////////////////////
  49. // 毫秒延时函数
  50. // 入口参数: ms (设置延时的毫秒值)
  51. // 函数返回: 无
  52. ////////////////////////////////////////
  53. void delay_ms(uint16_t ms)
  54. {
  55.     uint16_t i;
  56.     do
  57.     {
  58.         i = MAIN_Fosc / 6000;
  59.         while (--i);
  60.     } while (--ms);
  61. }
  62. ////////////////////////////////////////
  63. // 时钟初始化函数
  64. // 入口参数: 无
  65. // 函数返回: 无
  66. ////////////////////////////////////////
  67. void CLK_Init(void)
  68. {
  69.     CLK_SYSCLK_Divider(10);             //切换主时钟前先将系统时钟降频
  70.     HIRC_40M();                         //选择内部预置的频率
  71.     CLK_MCLK_HIRC();                    //选择内部高精度HIRC作为主时钟
  72.     CLK_MCLK2_BYPASS();                 //旁路MCLK2,直接使用MCLK选择
  73.     CLK_SYSCLK_Divider(1);              //设置系统时钟分频系数
  74.     CLK_HSIOCK_MCLK();                  //选择MCLK主时钟作为高速外设时钟源
  75.     CLK_HSIOCK_Divider(1);              //设置高速外设时钟预分频系数
  76.     CLK_SPICLK_Divider(1);              //设置SPI时钟预分频系数
  77.     CLK_I2SCLK_Divider(1);              //设置I2S时钟预分频系数
  78.     CLK_PWMACLK_Divider(1);             //设置PWMA时钟预分频系数
  79.     CLK_PWMBCLK_Divider(1);             //设置PWMB时钟预分频系数
  80.     CLK_TFPUCLK_Divider(1);             //设置TFPU时钟预分频系数
  81. }
  82. ////////////////////////////////////////
  83. // USB库初始化函数
  84. // 入口参数: 无
  85. // 函数返回: 无
  86. ////////////////////////////////////////
  87. void USBLIB_Init(void)
  88. {
  89.     usb_init();                         //初始化USB模块
  90.     USB_SetIntPriority(0);              //设置中断为最低优先级
  91.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  92. }
  93. ////////////////////////////////////////
  94. // 等待USB配置完成函数
  95. // 入口参数: 无
  96. // 函数返回: 无
  97. ////////////////////////////////////////
  98. void USBLIB_WaitConfiged(void)
  99. {
  100.     while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
  101. }
  102. ////////////////////////////////////////
  103. // USB设备接收数据处理程序
  104. // 入口参数: 无
  105. // 函数返回: 无
  106. // bUsbOutReady:USB设备接收数据标志位
  107. // OutNumber:USB设备接收到的数据长度
  108. // UsbOutBuffer:保存USB设备接收到的数据
  109. ////////////////////////////////////////
  110. void USBLIB_OUT_Done(void)
  111. {
  112.     if (bUsbOutReady)                   //查询是否有接收到USB主机发送数据
  113.     {
  114.         USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  115.         usb_OUT_done();                 //当前包的数据处理完成,通知USB主机可以发送下一包数据
  116.     }
  117. }
复制代码

回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-9 15:38:00 | 显示全部楼层
在利用AiCube@AIapp-ISP进行智能配置开发时,实现一个简单的C语言程序并通过USB串口输出“Hello World !”是一个基础但重要的实验。以下是对该实验的详细步骤和代码解析:

实验步骤

1. 创建项目文件夹:
打开AiCube开发工具,选择“创建新项目”。
在项目配置界面,勾选“USB”选项,确保项目支持通用串行总线功能。
点击“创建项目”按钮,生成项目文件夹和相关配置文件。

2. 编写程序:
在项目文件夹中,找到并打开main.c文件。
在main函数中添加printfusb("Hello World !\r\n");语句,用于通过USB串口输出“Hello World !”字符串。

3. 编译与下载:
使用AiCube的编译功能,将代码编译为可执行文件。
通过ISP工具将编译后的程序下载到目标设备中。

4. 验证结果:
打开串口助手工具,配置正确的串口参数。
观察串口助手的接收区,确认是否持续接收到“Hello World !”字符串。

代码解析
  1. c
  2. ////////////////////////////////////////
  3. // 文件名称: main.c
  4. // 文件描述:
  5. // 文件版本: V1.0
  6. // 修改记录:
  7. //   1. (2025-04-09) 创建文件
  8. ////////////////////////////////////////
  9. include "config.h"                     //默认已包含stdio.h、intrins.h、aiusb.h等头文件
  10. ////////////////////////////////////////
  11. // 项目主函数
  12. // 入口参数: 无
  13. // 函数返回: 无
  14. ////////////////////////////////////////
  15. void main(void)
  16. {
  17.     SYSInit();                         //系统初始化
  18.     while (1)
  19.     {
  20.         printfusb("Hello World !\r\n");//通过USB串口输出字符串
  21.         USBLIBOUTDone();              //查询方式处理USB接收的数据
  22.     }
  23. }
复制代码
#include "config.h":该头文件包含了项目所需的库文件,如stdio.h、intrins.h和aiusb.h等,确保程序能够正常使用标准输入输出和USB功能。
SYSInit();:系统初始化函数,用于配置硬件资源和初始化系统状态。
printfusb("Hello World !\r\n");:通过USB串口输出“Hello World !”字符串,\r\n表示换行符,确保每次输出后换行。
USBLIBOUTDone();:查询方式处理USB接收的数据,确保USB通信的正常进行。

总结

通过AiCube@AIapp-ISP的智能配置开发工具,我们可以快速实现一个简单的C语言程序,并通过USB串口输出“Hello World !”字符串。该实验不仅验证了开发工具的基本功能,也为后续更复杂的项目开发奠定了基础。在实际开发中,建议进一步探索AiCube的其他功能和配置选项,以充分利用其强大的开发能力。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-9 15:38:00 | 显示全部楼层
在利用AiCube@AIapp-ISP进行智能配置开发时,实现一个基础的C语言程序“Hello World”是一个经典的入门实验。以下是对该实验的详细步骤解析与代码说明:

实验步骤解析

1. 创建项目文件夹  
   打开AiCube开发工具,选择创建新项目。在项目配置界面中,勾选“USB”选项,确保项目支持通用串行总线功能。点击“创建项目”按钮,系统会自动生成项目文件夹及相关配置文件。此步骤的关键在于正确配置项目的基础功能,确保后续开发中能够顺利使用USB通信功能。

2. 编写程序代码  
   在项目中找到main.c文件,这是程序的主入口文件。在main函数中添加以下代码:  
  
  1. c
  2.    printfusb("Hello World !\r\n");
复制代码

   这行代码的作用是通过USB串口输出“Hello World !”字符串,并附加回车换行符\r\n,以确保输出格式的规范性。

3. 编译与下载程序  
   完成代码编写后,使用AiCube的编译功能对项目进行编译。编译成功后,将生成的可执行文件下载到目标设备中。此步骤需要确保开发环境与目标设备的连接正常,且设备支持USB通信功能。

4. 验证程序运行  
   打开串口助手工具,观察接收区的输出内容。如果程序运行正常,接收区会持续打印“Hello World !”字符串。这表明程序已成功通过USB串口输出信息,验证了代码的正确性。

代码说明

以下是实验代码的详细解析:
  1. c
  2. include "config.h"  // 包含项目配置文件,默认已包含stdio.h、intrins.h、aiusb.h等头文件
复制代码
config.h是项目的配置文件,通常包含项目所需的头文件及宏定义。在本实验中,它默认包含了stdio.h(标准输入输出库)、intrins.h(内联函数库)以及aiusb.h(USB通信库)等头文件。
  1. c
  2. void main(void)
  3. {
  4.     SYSInit();  // 系统初始化函数,确保硬件及外设处于正常工作状态
  5.     while (1)
  6.     {
  7.         printfusb("Hello World !\r\n");  // 通过USB串口输出字符串
  8.         USBLIBOUTDone();  // 查询方式处理USB接收的数据
  9.     }
  10. }
复制代码
SYSInit()是系统初始化函数,通常在程序启动时调用,用于初始化硬件及外设。  
while (1)是一个无限循环,确保程序持续运行。  
printfusb("Hello World !\r\n");是核心代码,通过USB串口输出“Hello World !”字符串。  
USBLIBOUTDone();用于以查询方式处理USB接收的数据,确保USB通信的稳定性。

实验总结

本实验通过AiCube@AIapp-ISP开发工具,实现了一个基础的C语言程序,并通过USB串口输出“Hello World !”字符串。实验的关键在于正确配置项目功能、编写核心代码以及验证程序运行结果。通过本实验,开发者可以熟悉AiCube的基本操作,掌握USB通信的基本原理,为后续更复杂的开发任务奠定基础。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

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

1.重新添加头文件。
截图202504161533095878.jpg
截图202504161533257968.jpg
打开AiCube,创建项目文件夹。
截图202504161537315801.jpg
项目设置里和可视图形化IO设置里用默认设置即可。



CLK时钟设置内部预置频率40MHz。

勾选USB通用串行总线,USB协议选择CDC,勾选项目创建完成后自动在Keil软件中打开项目,点击创建项目。

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

编译成功。
截图202504161545557910.jpg
截图202504161548155944.jpg
3.成功下载程序,串口助手发送区/多字符串发送区要勾选HEX模式,发送6时接收Hello World !;发送7时接收China !
截图202504161549577876.jpg
截图202504161551052727.jpg
截图202504161551327670.jpg
printf_usb_test2.zip (139.05 KB, 下载次数: 0)
程序如下:
  1. ////////////////////////////////////////
  2. // 文件名称: main.c
  3. // 文件描述:
  4. // 文件版本: V1.0
  5. // 修改记录:
  6. //   1. (2025-04-16) 创建文件
  7. ////////////////////////////////////////
  8. #include "config.h"                     //默认已包含stdio.h、intrins.h、ai_usb.h等头文件
  9. ////////////////////////////////////////
  10. // 项目主函数
  11. // 入口参数: 无
  12. // 函数返回: 无
  13. ////////////////////////////////////////
  14. void main(void)
  15. {
  16.     SYS_Init();
  17.     while (1)
  18.     {
  19.         USBLIB_OUT_Done();              //查询方式处理USB接收的数据
  20.     }
  21. }
  22. ////////////////////////////////////////
  23. // 系统初始化函数
  24. // 入口参数: 无
  25. // 函数返回: 无
  26. ////////////////////////////////////////
  27. void SYS_Init(void)
  28. {
  29.     EnableAccessXFR();                  //使能访问扩展XFR
  30.     AccessCodeFastest();                //设置最快速度访问程序代码
  31.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  32.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  33.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  34.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  35.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  36.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  37.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  38.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  39.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  40.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  41.     CLK_Init();                         //时钟模块初始化
  42.     USBLIB_Init();                      //USB库初始化
  43.     EnableGlobalInt();                  //使能全局中断
  44. }
  45. ////////////////////////////////////////
  46. // 毫秒延时函数
  47. // 入口参数: ms (设置延时的毫秒值)
  48. // 函数返回: 无
  49. ////////////////////////////////////////
  50. void delay_ms(uint16_t ms)
  51. {
  52.     uint16_t i;
  53.     do
  54.     {
  55.         i = MAIN_Fosc / 6000;
  56.         while (--i);
  57.     } while (--ms);
  58. }
  59. ////////////////////////////////////////
  60. // 时钟初始化函数
  61. // 入口参数: 无
  62. // 函数返回: 无
  63. ////////////////////////////////////////
  64. void CLK_Init(void)
  65. {
  66.     CLK_SYSCLK_Divider(10);             //切换主时钟前先将系统时钟降频
  67.     HIRC_40M();                         //选择内部预置的频率
  68.     CLK_MCLK_HIRC();                    //选择内部高精度HIRC作为主时钟
  69.     CLK_MCLK2_BYPASS();                 //旁路MCLK2,直接使用MCLK选择
  70.     CLK_SYSCLK_Divider(1);              //设置系统时钟分频系数
  71.     CLK_HSIOCK_MCLK();                  //选择MCLK主时钟作为高速外设时钟源
  72.     CLK_HSIOCK_Divider(1);              //设置高速外设时钟预分频系数
  73.     CLK_SPICLK_Divider(1);              //设置SPI时钟预分频系数
  74.     CLK_I2SCLK_Divider(1);              //设置I2S时钟预分频系数
  75.     CLK_PWMACLK_Divider(1);             //设置PWMA时钟预分频系数
  76.     CLK_PWMBCLK_Divider(1);             //设置PWMB时钟预分频系数
  77.     CLK_TFPUCLK_Divider(1);             //设置TFPU时钟预分频系数
  78. }
  79. ////////////////////////////////////////
  80. // USB库初始化函数
  81. // 入口参数: 无
  82. // 函数返回: 无
  83. ////////////////////////////////////////
  84. void USBLIB_Init(void)
  85. {
  86.     usb_init();                         //初始化USB模块
  87.     USB_SetIntPriority(0);              //设置中断为最低优先级
  88.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  89. }
  90. ////////////////////////////////////////
  91. // 等待USB配置完成函数
  92. // 入口参数: 无
  93. // 函数返回: 无
  94. ////////////////////////////////////////
  95. void USBLIB_WaitConfiged(void)
  96. {
  97.     while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
  98. }
  99. ////////////////////////////////////////
  100. // USB设备接收数据处理程序
  101. // 入口参数: 无
  102. // 函数返回: 无
  103. // bUsbOutReady:USB设备接收数据标志位
  104. // OutNumber:USB设备接收到的数据长度
  105. // UsbOutBuffer:保存USB设备接收到的数据
  106. ////////////////////////////////////////
  107. void USBLIB_OUT_Done(void)
  108. {
  109.     if (bUsbOutReady)                   //查询是否有接收到USB主机发送数据
  110.     {
  111. //        USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  112.                 if(UsbOutBuffer[0]==6)
  113.             printf_usb("HelloWorld!\r\n"); //如接收到的数据包的第0个字节是6,打印“HelloWorld!"
  114.         else if(UsbOutBuffer[0]==7)
  115.             printf_usb("China!\r\n");   //如接收到的数据包的第0个字节是7,打印“China!"
  116.         usb_OUT_done();                 //当前包的数据处理完成,通知USB主机可以发送下一包数据
  117.     }
  118. }
复制代码


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

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

1.重新添加头文件。


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


CLK时钟设置内部预置频率40MHz。

勾选USB通用串行总线,USB协议选择CDC,数据处理方式选中断方式,中断优先级选最高优先级勾选项目创建完成后自动在Keil软件中打开项目,点击创建项目。
截图202504161606292999.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!"

编译成功。
截图202504161614366969.jpg
截图202504161617093253.jpg
3.成功下载程序,串口助手发送区/多字符串发送区要勾选HEX模式,发送6时接收Hello World !;发送7时接收China !
截图202504161619411464.jpg
截图202504161620168698.jpg
截图202504161620371136.jpg
printf_usb_test3.zip (138.87 KB, 下载次数: 0)
程序如下:
  1. ////////////////////////////////////////
  2. // 文件名称: main.c
  3. // 文件描述:
  4. // 文件版本: V1.0
  5. // 修改记录:
  6. //   1. (2025-04-16) 创建文件
  7. ////////////////////////////////////////
  8. #include "config.h"                     //默认已包含stdio.h、intrins.h、ai_usb.h等头文件
  9. ////////////////////////////////////////
  10. // 项目主函数
  11. // 入口参数: 无
  12. // 函数返回: 无
  13. ////////////////////////////////////////
  14. void main(void)
  15. {
  16.     SYS_Init();
  17.     while (1)
  18.     {
  19.     }
  20. }
  21. ////////////////////////////////////////
  22. // 系统初始化函数
  23. // 入口参数: 无
  24. // 函数返回: 无
  25. ////////////////////////////////////////
  26. void SYS_Init(void)
  27. {
  28.     EnableAccessXFR();                  //使能访问扩展XFR
  29.     AccessCodeFastest();                //设置最快速度访问程序代码
  30.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  31.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  32.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  33.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  34.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  35.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  36.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  37.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  38.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  39.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  40.     CLK_Init();                         //时钟模块初始化
  41.     USBLIB_Init();                      //USB库初始化
  42.     EnableGlobalInt();                  //使能全局中断
  43. }
  44. ////////////////////////////////////////
  45. // 毫秒延时函数
  46. // 入口参数: ms (设置延时的毫秒值)
  47. // 函数返回: 无
  48. ////////////////////////////////////////
  49. void delay_ms(uint16_t ms)
  50. {
  51.     uint16_t i;
  52.     do
  53.     {
  54.         i = MAIN_Fosc / 6000;
  55.         while (--i);
  56.     } while (--ms);
  57. }
  58. ////////////////////////////////////////
  59. // 时钟初始化函数
  60. // 入口参数: 无
  61. // 函数返回: 无
  62. ////////////////////////////////////////
  63. void CLK_Init(void)
  64. {
  65.     CLK_SYSCLK_Divider(10);             //切换主时钟前先将系统时钟降频
  66.     HIRC_40M();                         //选择内部预置的频率
  67.     CLK_MCLK_HIRC();                    //选择内部高精度HIRC作为主时钟
  68.     CLK_MCLK2_BYPASS();                 //旁路MCLK2,直接使用MCLK选择
  69.     CLK_SYSCLK_Divider(1);              //设置系统时钟分频系数
  70.     CLK_HSIOCK_MCLK();                  //选择MCLK主时钟作为高速外设时钟源
  71.     CLK_HSIOCK_Divider(1);              //设置高速外设时钟预分频系数
  72.     CLK_SPICLK_Divider(1);              //设置SPI时钟预分频系数
  73.     CLK_I2SCLK_Divider(1);              //设置I2S时钟预分频系数
  74.     CLK_PWMACLK_Divider(1);             //设置PWMA时钟预分频系数
  75.     CLK_PWMBCLK_Divider(1);             //设置PWMB时钟预分频系数
  76.     CLK_TFPUCLK_Divider(1);             //设置TFPU时钟预分频系数
  77. }
  78. ////////////////////////////////////////
  79. // USB库初始化函数
  80. // 入口参数: 无
  81. // 函数返回: 无
  82. ////////////////////////////////////////
  83. void USBLIB_Init(void)
  84. {
  85.     usb_init();                         //初始化USB模块
  86.     USB_SetIntPriority(3);              //设置中断为最高优先级
  87.     set_usb_OUT_callback(USBLIB_OUT_Callback); //设置USB中断回调函数
  88.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  89. }
  90. ////////////////////////////////////////
  91. // 等待USB配置完成函数
  92. // 入口参数: 无
  93. // 函数返回: 无
  94. ////////////////////////////////////////
  95. void USBLIB_WaitConfiged(void)
  96. {
  97.     while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
  98. }
  99. ////////////////////////////////////////
  100. // USB设备接收数据中断回调程序
  101. // 入口参数: 无
  102. // 函数返回: 无
  103. // OutNumber:USB设备接收到的数据长度
  104. // UsbOutBuffer:保存USB设备接收到的数据
  105. ////////////////////////////////////////
  106. void USBLIB_OUT_Callback(void)
  107. {
  108. //    USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  109.                                         //在此处添加用户处理接收数据的代码
  110.         if(UsbOutBuffer[0]==6)
  111.         printf_usb("HelloWorld!\r\n"); //如接收到的数据包的第0个字节是6,打印“HelloWorld!"
  112.     else if(UsbOutBuffer[0]==7)
  113.         printf_usb("China!\r\n");  //如接收到的数据包的第0个字节是7,打印“China!"
  114. }
复制代码


回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 06:25 , Processed in 0.125163 second(s), 72 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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