找回密码
 立即注册
楼主: jdgcxyprm

跟着冲哥学习STC32G单片机

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-02 07:17:50
已绑定手机

6

主题

34

回帖

234

积分

中级会员

积分
234
发表于 2025-5-27 06:37:29 | 显示全部楼层
前面跟着冲哥学习了七集视频,并自己亲自跟着敲了相关代码,基本上弄清楚了相应的入门知识,掌握了初步的技能,等一会学习一下蜂鸣器,再编写一下作业,看看知识的掌握情况
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-02 07:17:50
已绑定手机

6

主题

34

回帖

234

积分

中级会员

积分
234
发表于 2025-5-27 07:10:00 | 显示全部楼层
今天使用AICube软件生成了按键控制蜂鸣器
  1. //<<AICUBE_USER_HEADER_REMARK_BEGIN>>
  2. ////////////////////////////////////////
  3. // 在此添加用户文件头说明信息
  4. // 文件名称: main.c
  5. // 文件描述:
  6. // 文件版本: V1.0
  7. // 修改记录:
  8. //   1. (2025-05-27) 创建文件
  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. sbit K1 = P3^4;
  19. sbit K2 = P3^5;
  20. sbit fengmingqi = P5^4;
  21. ////////////////////////////////////////
  22. // 项目主函数
  23. // 入口参数: 无
  24. // 函数返回: 无
  25. ////////////////////////////////////////
  26. void main(void)
  27. {
  28.     //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
  29.     // 在此添加用户主函数初始化代码
  30.     //<<AICUBE_USER_MAIN_INITIAL_END>>
  31.     SYS_Init();
  32.     //<<AICUBE_USER_MAIN_CODE_BEGIN>>
  33.     // 在此添加主函数中运行一次的用户代码
  34.     //<<AICUBE_USER_MAIN_CODE_END>>
  35.     while (1)
  36.     {
  37.         USBLIB_OUT_Done();              //查询方式处理USB接收的数据
  38.         //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
  39.         // 在此添加主函数中用户主循环代码
  40.         //<<AICUBE_USER_MAIN_LOOP_END>>
  41.                 if( K1 == 0)
  42.                 {
  43.                         delay_ms(10);
  44.                         if( K1 == 0)
  45.                         {
  46.                                 while(K1 == 0);
  47.                                 fengmingqi = 0;
  48.                         }
  49.                 }
  50.     }
  51. }
  52. ////////////////////////////////////////
  53. // 系统初始化函数
  54. // 入口参数: 无
  55. // 函数返回: 无
  56. ////////////////////////////////////////
  57. void SYS_Init(void)
  58. {
  59.     EnableAccessXFR();                  //使能访问扩展XFR
  60.     AccessCodeFastest();                //设置最快速度访问程序代码
  61.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  62.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  63.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  64.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  65.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  66.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  67.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  68.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  69.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  70.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  71.     PORT3_Init();                       //P3口初始化
  72.     USBLIB_Init();                      //USB库初始化
  73.     //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
  74.     // 在此添加用户初始化代码
  75.     //<<AICUBE_USER_INITIAL_CODE_END>>
  76.     EnableGlobalInt();                  //使能全局中断
  77. }
  78. ////////////////////////////////////////
  79. // 微秒延时函数
  80. // 入口参数: us (设置延时的微秒值)
  81. // 函数返回: 无
  82. ////////////////////////////////////////
  83. void delay_us(uint16_t us)
  84. {
  85.     do
  86.     {
  87.         NOP(18);                        //(MAIN_Fosc + 500000) / 1000000 - 6
  88.     } while (--us);
  89. }
  90. ////////////////////////////////////////
  91. // 毫秒延时函数
  92. // 入口参数: ms (设置延时的毫秒值)
  93. // 函数返回: 无
  94. ////////////////////////////////////////
  95. void delay_ms(uint16_t ms)
  96. {
  97.     uint16_t i;
  98.     do
  99.     {
  100.         i = MAIN_Fosc / 6000;
  101.         while (--i);
  102.     } while (--ms);
  103. }
  104. ////////////////////////////////////////
  105. // P3口初始化函数
  106. // 入口参数: 无
  107. // 函数返回: 无
  108. ////////////////////////////////////////
  109. void PORT3_Init(void)
  110. {
  111.     SetP3nQuasiMode(0xcc);              //设置P3.7,P3.6,P3.3,P3.2为准双向口模式
  112.     SetP3nHighZInputMode(0x33);         //设置P3.5,P3.4,P3.1,P3.0为高阻输入模式
  113.     EnableP3nPullUp(0x30);              //使能P3.5,P3.4内部上拉电阻
  114.     DisableP3nPullUp(0xcf);             //关闭P3.7,P3.6,P3.3,P3.2,P3.1,P3.0内部上拉电阻
  115.     DisableP3nSchmitt(BIT_ALL);         //使能P3施密特触发
  116.     SetP3nSlewRateNormal(BIT_ALL);      //设置P3一般翻转速度
  117.     SetP3nDrivingNormal(BIT_ALL);       //设置P3一般驱动能力
  118.     SetP3nDigitalInput(BIT_ALL);        //使能P3数字信号输入功能
  119.     //<<AICUBE_USER_PORT3_INITIAL_BEGIN>>
  120.     // 在此添加用户初始化代码
  121.     //<<AICUBE_USER_PORT3_INITIAL_END>>
  122. }
  123. ////////////////////////////////////////
  124. // USB库初始化函数
  125. // 入口参数: 无
  126. // 函数返回: 无
  127. ////////////////////////////////////////
  128. void USBLIB_Init(void)
  129. {
  130.     usb_init();                         //初始化USB模块
  131.     USB_SetIntPriority(0);              //设置中断为最低优先级
  132.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  133.     //<<AICUBE_USER_USBLIB_INITIAL_BEGIN>>
  134.     // 在此添加用户初始化代码
  135.     //<<AICUBE_USER_USBLIB_INITIAL_END>>
  136. }
  137. ////////////////////////////////////////
  138. // 等待USB配置完成函数
  139. // 入口参数: 无
  140. // 函数返回: 无
  141. ////////////////////////////////////////
  142. void USBLIB_WaitConfiged(void)
  143. {
  144.     while (DeviceState != DEVSTATE_CONFIGURED) //等待USB完成配置
  145.         WDT_Clear();                    //清看门狗定时器 (防止硬件自动使能看门狗)
  146. }
  147. ////////////////////////////////////////
  148. // USB设备接收数据处理程序
  149. // 入口参数: 无
  150. // 函数返回: 无
  151. // bUsbOutReady:USB设备接收数据标志位
  152. // OutNumber:USB设备接收到的数据长度
  153. // UsbOutBuffer:保存USB设备接收到的数据
  154. ////////////////////////////////////////
  155. void USBLIB_OUT_Done(void)
  156. {
  157.     if (bUsbOutReady)                   //查询是否有接收到USB主机发送数据
  158.     {
  159.         //<<AICUBE_USER_USBLIB_ISR_CODE1_BEGIN>>
  160.         // 在此添加中断函数用户代码
  161.         USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  162.                                         //在此处添加用户处理接收数据的代码
  163.         //<<AICUBE_USER_USBLIB_ISR_CODE1_END>>
  164.         usb_OUT_done();                 //当前包的数据处理完成,通知USB主机可以发送下一包数据
  165.     }
  166. }
  167. //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
  168. // 在此添加用户函数实现代码
  169. //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-02 07:17:50
已绑定手机

6

主题

34

回帖

234

积分

中级会员

积分
234
发表于 2025-5-27 07:10:51 | 显示全部楼层
  1. //<<AICUBE_USER_HEADER_REMARK_BEGIN>>
  2. ////////////////////////////////////////
  3. // 在此添加用户文件头说明信息
  4. // 文件名称: main.c
  5. // 文件描述:
  6. // 文件版本: V1.0
  7. // 修改记录:
  8. //   1. (2025-05-27) 创建文件
  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. sbit K1 = P3^4;
  19. sbit K2 = P3^5;
  20. sbit fengmingqi = P5^4;
  21. ////////////////////////////////////////
  22. // 项目主函数
  23. // 入口参数: 无
  24. // 函数返回: 无
  25. ////////////////////////////////////////
  26. void main(void)
  27. {
  28.     //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
  29.     // 在此添加用户主函数初始化代码
  30.     //<<AICUBE_USER_MAIN_INITIAL_END>>
  31.     SYS_Init();
  32.     //<<AICUBE_USER_MAIN_CODE_BEGIN>>
  33.     // 在此添加主函数中运行一次的用户代码
  34.     //<<AICUBE_USER_MAIN_CODE_END>>
  35.     while (1)
  36.     {
  37.         USBLIB_OUT_Done();              //查询方式处理USB接收的数据
  38.         //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
  39.         // 在此添加主函数中用户主循环代码
  40.         //<<AICUBE_USER_MAIN_LOOP_END>>
  41.                 if( K1 == 0)
  42.                 {
  43.                         delay_ms(10);
  44.                         if( K1 == 0)
  45.                         {
  46.                                 while(K1 == 0);
  47.                                 fengmingqi = 0;
  48.                         }
  49.                 }
  50.     }
  51. }
  52. ////////////////////////////////////////
  53. // 系统初始化函数
  54. // 入口参数: 无
  55. // 函数返回: 无
  56. ////////////////////////////////////////
  57. void SYS_Init(void)
  58. {
  59.     EnableAccessXFR();                  //使能访问扩展XFR
  60.     AccessCodeFastest();                //设置最快速度访问程序代码
  61.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  62.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  63.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  64.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  65.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  66.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  67.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  68.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  69.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  70.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  71.     PORT3_Init();                       //P3口初始化
  72.     USBLIB_Init();                      //USB库初始化
  73.     //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
  74.     // 在此添加用户初始化代码
  75.     //<<AICUBE_USER_INITIAL_CODE_END>>
  76.     EnableGlobalInt();                  //使能全局中断
  77. }
  78. ////////////////////////////////////////
  79. // 微秒延时函数
  80. // 入口参数: us (设置延时的微秒值)
  81. // 函数返回: 无
  82. ////////////////////////////////////////
  83. void delay_us(uint16_t us)
  84. {
  85.     do
  86.     {
  87.         NOP(18);                        //(MAIN_Fosc + 500000) / 1000000 - 6
  88.     } while (--us);
  89. }
  90. ////////////////////////////////////////
  91. // 毫秒延时函数
  92. // 入口参数: ms (设置延时的毫秒值)
  93. // 函数返回: 无
  94. ////////////////////////////////////////
  95. void delay_ms(uint16_t ms)
  96. {
  97.     uint16_t i;
  98.     do
  99.     {
  100.         i = MAIN_Fosc / 6000;
  101.         while (--i);
  102.     } while (--ms);
  103. }
  104. ////////////////////////////////////////
  105. // P3口初始化函数
  106. // 入口参数: 无
  107. // 函数返回: 无
  108. ////////////////////////////////////////
  109. void PORT3_Init(void)
  110. {
  111.     SetP3nQuasiMode(0xcc);              //设置P3.7,P3.6,P3.3,P3.2为准双向口模式
  112.     SetP3nHighZInputMode(0x33);         //设置P3.5,P3.4,P3.1,P3.0为高阻输入模式
  113.     EnableP3nPullUp(0x30);              //使能P3.5,P3.4内部上拉电阻
  114.     DisableP3nPullUp(0xcf);             //关闭P3.7,P3.6,P3.3,P3.2,P3.1,P3.0内部上拉电阻
  115.     DisableP3nSchmitt(BIT_ALL);         //使能P3施密特触发
  116.     SetP3nSlewRateNormal(BIT_ALL);      //设置P3一般翻转速度
  117.     SetP3nDrivingNormal(BIT_ALL);       //设置P3一般驱动能力
  118.     SetP3nDigitalInput(BIT_ALL);        //使能P3数字信号输入功能
  119.     //<<AICUBE_USER_PORT3_INITIAL_BEGIN>>
  120.     // 在此添加用户初始化代码
  121.     //<<AICUBE_USER_PORT3_INITIAL_END>>
  122. }
  123. ////////////////////////////////////////
  124. // USB库初始化函数
  125. // 入口参数: 无
  126. // 函数返回: 无
  127. ////////////////////////////////////////
  128. void USBLIB_Init(void)
  129. {
  130.     usb_init();                         //初始化USB模块
  131.     USB_SetIntPriority(0);              //设置中断为最低优先级
  132.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  133.     //<<AICUBE_USER_USBLIB_INITIAL_BEGIN>>
  134.     // 在此添加用户初始化代码
  135.     //<<AICUBE_USER_USBLIB_INITIAL_END>>
  136. }
  137. ////////////////////////////////////////
  138. // 等待USB配置完成函数
  139. // 入口参数: 无
  140. // 函数返回: 无
  141. ////////////////////////////////////////
  142. void USBLIB_WaitConfiged(void)
  143. {
  144.     while (DeviceState != DEVSTATE_CONFIGURED) //等待USB完成配置
  145.         WDT_Clear();                    //清看门狗定时器 (防止硬件自动使能看门狗)
  146. }
  147. ////////////////////////////////////////
  148. // USB设备接收数据处理程序
  149. // 入口参数: 无
  150. // 函数返回: 无
  151. // bUsbOutReady:USB设备接收数据标志位
  152. // OutNumber:USB设备接收到的数据长度
  153. // UsbOutBuffer:保存USB设备接收到的数据
  154. ////////////////////////////////////////
  155. void USBLIB_OUT_Done(void)
  156. {
  157.     if (bUsbOutReady)                   //查询是否有接收到USB主机发送数据
  158.     {
  159.         //<<AICUBE_USER_USBLIB_ISR_CODE1_BEGIN>>
  160.         // 在此添加中断函数用户代码
  161.         USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  162.                                         //在此处添加用户处理接收数据的代码
  163.         //<<AICUBE_USER_USBLIB_ISR_CODE1_END>>
  164.         usb_OUT_done();                 //当前包的数据处理完成,通知USB主机可以发送下一包数据
  165.     }
  166. }
  167. //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
  168. // 在此添加用户函数实现代码
  169. //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-02 07:17:50
已绑定手机

6

主题

34

回帖

234

积分

中级会员

积分
234
发表于 2025-5-27 17:07:53 | 显示全部楼层
使用AICube实现降龙棍流水灯
  1. //<<AICUBE_USER_HEADER_REMARK_BEGIN>>
  2. ////////////////////////////////////////
  3. // 在此添加用户文件头说明信息
  4. // 文件名称: main.c
  5. // 文件描述:
  6. // 文件版本: V1.0
  7. // 修改记录:
  8. //   1. (2025-05-27) 创建文件
  9. ////////////////////////////////////////
  10. //<<AICUBE_USER_HEADER_REMARK_END>>
  11. #include "config.h"                     //默认已包含stdio.h、intrins.h、ai_usb.h等头文件
  12. u16 Count = 0;
  13. u8 ucLed = 0x7f;
  14. //<<AICUBE_USER_INCLUDE_BEGIN>>
  15. // 在此添加用户头文件包含
  16. //<<AICUBE_USER_INCLUDE_END>>
  17. //<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
  18. // 在此添加用户全局变量定义、用户宏定义以及函数声明
  19. //<<AICUBE_USER_GLOBAL_DEFINE_END>>
  20. ////////////////////////////////////////
  21. // 项目主函数
  22. // 入口参数: 无
  23. // 函数返回: 无
  24. ////////////////////////////////////////
  25. void main(void)
  26. {
  27.     //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
  28.     // 在此添加用户主函数初始化代码
  29.     //<<AICUBE_USER_MAIN_INITIAL_END>>
  30.     SYS_Init();
  31.     //<<AICUBE_USER_MAIN_CODE_BEGIN>>
  32.     // 在此添加主函数中运行一次的用户代码
  33.     //<<AICUBE_USER_MAIN_CODE_END>>
  34.     while (1)
  35.     {
  36.         USBLIB_OUT_Done();              //查询方式处理USB接收的数据
  37.                
  38.                 if(Count == 1000)
  39.                 {
  40.                         Count = 0;
  41.                         P0 = ucLed;
  42.                         ucLed = _cror_(ucLed,1);
  43.                 }
  44.                
  45.         //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
  46.         // 在此添加主函数中用户主循环代码
  47.         //<<AICUBE_USER_MAIN_LOOP_END>>
  48.     }
  49. }
  50. ////////////////////////////////////////
  51. // 系统初始化函数
  52. // 入口参数: 无
  53. // 函数返回: 无
  54. ////////////////////////////////////////
  55. void SYS_Init(void)
  56. {
  57.     EnableAccessXFR();                  //使能访问扩展XFR
  58.     AccessCodeFastest();                //设置最快速度访问程序代码
  59.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  60.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  61.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  62.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  63.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  64.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  65.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  66.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  67.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  68.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  69.     TIMER0_Init();                      //定时器0初始化
  70.     USBLIB_Init();                      //USB库初始化
  71.     //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
  72.     // 在此添加用户初始化代码
  73.     //<<AICUBE_USER_INITIAL_CODE_END>>
  74.     EnableGlobalInt();                  //使能全局中断
  75. }
  76. ////////////////////////////////////////
  77. // 微秒延时函数
  78. // 入口参数: us (设置延时的微秒值)
  79. // 函数返回: 无
  80. ////////////////////////////////////////
  81. void delay_us(uint16_t us)
  82. {
  83.     do
  84.     {
  85.         NOP(18);                        //(MAIN_Fosc + 500000) / 1000000 - 6
  86.     } while (--us);
  87. }
  88. ////////////////////////////////////////
  89. // 毫秒延时函数
  90. // 入口参数: ms (设置延时的毫秒值)
  91. // 函数返回: 无
  92. ////////////////////////////////////////
  93. void delay_ms(uint16_t ms)
  94. {
  95.     uint16_t i;
  96.     do
  97.     {
  98.         i = MAIN_Fosc / 6000;
  99.         while (--i);
  100.     } while (--ms);
  101. }
  102. ////////////////////////////////////////
  103. // 定时器0中断服务程序
  104. // 入口参数: 无
  105. // 函数返回: 无
  106. ////////////////////////////////////////
  107. void TIMER0_ISR(void) interrupt TMR0_VECTOR
  108. {
  109.     //<<AICUBE_USER_TIMER0_ISR_CODE1_BEGIN>>
  110.     // 在此添加中断函数用户代码
  111.     //<<AICUBE_USER_TIMER0_ISR_CODE1_END>>
  112.         Count++;
  113. }
  114. ////////////////////////////////////////
  115. // 定时器0初始化函数
  116. // 入口参数: 无
  117. // 函数返回: 无
  118. ////////////////////////////////////////
  119. void TIMER0_Init(void)
  120. {
  121. #define T0_PSCR     (0)
  122. #define T0_RELOAD       (65536 - (float)SYSCLK / 12 / (T0_PSCR + 1) * 1 / 1000)
  123.     TIMER0_TimerMode();                 //设置定时器0为定时模式
  124.     TIMER0_12TMode();                   //设置定时器0为12T模式
  125.     TIMER0_Mode0();                     //设置定时器0为模式0 (16位自动重载模式)
  126.     TIMER0_DisableGateINT0();           //禁止定时器0门控
  127.     TIMER0_SetIntPriority(0);           //设置中断为最低优先级
  128.     TIMER0_EnableInt();                 //使能定时器0中断
  129.     TIMER0_SetPrescale(T0_PSCR);        //设置定时器0的8位预分频
  130.     TIMER0_SetReload16(T0_RELOAD);      //设置定时器0的16位重载值
  131.     TIMER0_Run();                       //定时器0开始运行
  132.     //<<AICUBE_USER_TIMER0_INITIAL_BEGIN>>
  133.     // 在此添加用户初始化代码
  134.     //<<AICUBE_USER_TIMER0_INITIAL_END>>
  135. }
  136. ////////////////////////////////////////
  137. // USB库初始化函数
  138. // 入口参数: 无
  139. // 函数返回: 无
  140. ////////////////////////////////////////
  141. void USBLIB_Init(void)
  142. {
  143.     usb_init();                         //初始化USB模块
  144.     USB_SetIntPriority(0);              //设置中断为最低优先级
  145.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  146.     //<<AICUBE_USER_USBLIB_INITIAL_BEGIN>>
  147.     // 在此添加用户初始化代码
  148.     //<<AICUBE_USER_USBLIB_INITIAL_END>>
  149. }
  150. ////////////////////////////////////////
  151. // 等待USB配置完成函数
  152. // 入口参数: 无
  153. // 函数返回: 无
  154. ////////////////////////////////////////
  155. void USBLIB_WaitConfiged(void)
  156. {
  157.     while (DeviceState != DEVSTATE_CONFIGURED) //等待USB完成配置
  158.         WDT_Clear();                    //清看门狗定时器 (防止硬件自动使能看门狗)
  159. }
  160. ////////////////////////////////////////
  161. // USB设备接收数据处理程序
  162. // 入口参数: 无
  163. // 函数返回: 无
  164. // bUsbOutReady:USB设备接收数据标志位
  165. // OutNumber:USB设备接收到的数据长度
  166. // UsbOutBuffer:保存USB设备接收到的数据
  167. ////////////////////////////////////////
  168. void USBLIB_OUT_Done(void)
  169. {
  170.     if (bUsbOutReady)                   //查询是否有接收到USB主机发送数据
  171.     {
  172.         //<<AICUBE_USER_USBLIB_ISR_CODE1_BEGIN>>
  173.         // 在此添加中断函数用户代码
  174.         USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  175.                                         //在此处添加用户处理接收数据的代码
  176.         //<<AICUBE_USER_USBLIB_ISR_CODE1_END>>
  177.         usb_OUT_done();                 //当前包的数据处理完成,通知USB主机可以发送下一包数据
  178.     }
  179. }
  180. //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
  181. // 在此添加用户函数实现代码
  182. //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-02 07:17:50
已绑定手机

6

主题

34

回帖

234

积分

中级会员

积分
234
发表于 2025-5-27 17:19:55 | 显示全部楼层
使用AICube实现定时器0,1,2,3,4定时功能
  1. //<<AICUBE_USER_HEADER_REMARK_BEGIN>>
  2. ////////////////////////////////////////
  3. // 在此添加用户文件头说明信息
  4. // 文件名称: main.c
  5. // 文件描述:
  6. // 文件版本: V1.0
  7. // 修改记录:
  8. //   1. (2025-05-27) 创建文件
  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.     TIMER0_Init();                      //定时器0初始化
  60.     TIMER1_Init();                      //定时器1初始化
  61.     TIMER2_Init();                      //定时器2初始化
  62.     TIMER3_Init();                      //定时器3初始化
  63.     TIMER4_Init();                      //定时器4初始化
  64.     USBLIB_Init();                      //USB库初始化
  65.     //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
  66.     // 在此添加用户初始化代码
  67.     //<<AICUBE_USER_INITIAL_CODE_END>>
  68.     EnableGlobalInt();                  //使能全局中断
  69. }
  70. ////////////////////////////////////////
  71. // 微秒延时函数
  72. // 入口参数: us (设置延时的微秒值)
  73. // 函数返回: 无
  74. ////////////////////////////////////////
  75. void delay_us(uint16_t us)
  76. {
  77.     do
  78.     {
  79.         NOP(18);                        //(MAIN_Fosc + 500000) / 1000000 - 6
  80.     } while (--us);
  81. }
  82. ////////////////////////////////////////
  83. // 毫秒延时函数
  84. // 入口参数: ms (设置延时的毫秒值)
  85. // 函数返回: 无
  86. ////////////////////////////////////////
  87. void delay_ms(uint16_t ms)
  88. {
  89.     uint16_t i;
  90.     do
  91.     {
  92.         i = MAIN_Fosc / 6000;
  93.         while (--i);
  94.     } while (--ms);
  95. }
  96. ////////////////////////////////////////
  97. // 定时器0中断服务程序
  98. // 入口参数: 无
  99. // 函数返回: 无
  100. ////////////////////////////////////////
  101. void TIMER0_ISR(void) interrupt TMR0_VECTOR
  102. {
  103.     //<<AICUBE_USER_TIMER0_ISR_CODE1_BEGIN>>
  104.     // 在此添加中断函数用户代码
  105.     //<<AICUBE_USER_TIMER0_ISR_CODE1_END>>
  106.         P00 = !P00;
  107. }
  108. ////////////////////////////////////////
  109. // 定时器1中断服务程序
  110. // 入口参数: 无
  111. // 函数返回: 无
  112. ////////////////////////////////////////
  113. void TIMER1_ISR(void) interrupt TMR1_VECTOR
  114. {
  115.     //<<AICUBE_USER_TIMER1_ISR_CODE1_BEGIN>>
  116.     // 在此添加中断函数用户代码
  117.     //<<AICUBE_USER_TIMER1_ISR_CODE1_END>>
  118.         P01 = !P01;
  119. }
  120. ////////////////////////////////////////
  121. // 定时器2中断服务程序
  122. // 入口参数: 无
  123. // 函数返回: 无
  124. ////////////////////////////////////////
  125. void TIMER2_ISR(void) interrupt TMR2_VECTOR
  126. {
  127.     //<<AICUBE_USER_TIMER2_ISR_CODE1_BEGIN>>
  128.     // 在此添加中断函数用户代码
  129.     //<<AICUBE_USER_TIMER2_ISR_CODE1_END>>
  130.         P02 = !P02;
  131. }
  132. ////////////////////////////////////////
  133. // 定时器3中断服务程序
  134. // 入口参数: 无
  135. // 函数返回: 无
  136. ////////////////////////////////////////
  137. void TIMER3_ISR(void) interrupt TMR3_VECTOR
  138. {
  139.     //<<AICUBE_USER_TIMER3_ISR_CODE1_BEGIN>>
  140.     // 在此添加中断函数用户代码
  141.     //<<AICUBE_USER_TIMER3_ISR_CODE1_END>>
  142.         P03 = !P03;
  143. }
  144. ////////////////////////////////////////
  145. // 定时器4中断服务程序
  146. // 入口参数: 无
  147. // 函数返回: 无
  148. ////////////////////////////////////////
  149. void TIMER4_ISR(void) interrupt TMR4_VECTOR
  150. {
  151.     //<<AICUBE_USER_TIMER4_ISR_CODE1_BEGIN>>
  152.     // 在此添加中断函数用户代码
  153.     //<<AICUBE_USER_TIMER4_ISR_CODE1_END>>
  154.         P04 = !P04;
  155. }
  156. ////////////////////////////////////////
  157. // 定时器0初始化函数
  158. // 入口参数: 无
  159. // 函数返回: 无
  160. ////////////////////////////////////////
  161. void TIMER0_Init(void)
  162. {
  163. #define T0_PSCR     (31)
  164. #define T0_RELOAD       (65536 - (float)SYSCLK / 12 / (T0_PSCR + 1) * 1 / 1)
  165.     TIMER0_TimerMode();                 //设置定时器0为定时模式
  166.     TIMER0_12TMode();                   //设置定时器0为12T模式
  167.     TIMER0_Mode0();                     //设置定时器0为模式0 (16位自动重载模式)
  168.     TIMER0_DisableGateINT0();           //禁止定时器0门控
  169.     TIMER0_SetIntPriority(0);           //设置中断为最低优先级
  170.     TIMER0_EnableInt();                 //使能定时器0中断
  171.     TIMER0_SetPrescale(T0_PSCR);        //设置定时器0的8位预分频
  172.     TIMER0_SetReload16(T0_RELOAD);      //设置定时器0的16位重载值
  173.     TIMER0_Run();                       //定时器0开始运行
  174.     //<<AICUBE_USER_TIMER0_INITIAL_BEGIN>>
  175.     // 在此添加用户初始化代码
  176.     //<<AICUBE_USER_TIMER0_INITIAL_END>>
  177. }
  178. ////////////////////////////////////////
  179. // 定时器1初始化函数
  180. // 入口参数: 无
  181. // 函数返回: 无
  182. ////////////////////////////////////////
  183. void TIMER1_Init(void)
  184. {
  185. #define T1_PSCR     (61)
  186. #define T1_RELOAD       (65536 - (float)SYSCLK / 12 / (T1_PSCR + 1) * 2 / 1)
  187.     TIMER1_TimerMode();                 //设置定时器1为定时模式
  188.     TIMER1_12TMode();                   //设置定时器1为12T模式
  189.     TIMER1_Mode0();                     //设置定时器1为模式0 (16位自动重载模式)
  190.     TIMER1_DisableGateINT1();           //禁止定时器1门控
  191.     TIMER1_SetIntPriority(0);           //设置中断为最低优先级
  192.     TIMER1_EnableInt();                 //使能定时器1中断
  193.     TIMER1_SetPrescale(T1_PSCR);        //设置定时器1的8位预分频
  194.     TIMER1_SetReload16(T1_RELOAD);      //设置定时器1的16位重载值
  195.     TIMER1_Run();                       //定时器1开始运行
  196.     //<<AICUBE_USER_TIMER1_INITIAL_BEGIN>>
  197.     // 在此添加用户初始化代码
  198.     //<<AICUBE_USER_TIMER1_INITIAL_END>>
  199. }
  200. ////////////////////////////////////////
  201. // 定时器2初始化函数
  202. // 入口参数: 无
  203. // 函数返回: 无
  204. ////////////////////////////////////////
  205. void TIMER2_Init(void)
  206. {
  207. #define T2_PSCR     (92)
  208. #define T2_RELOAD       (65536 - (float)SYSCLK / 12 / (T2_PSCR + 1) * 3 / 1)
  209.     TIMER2_TimerMode();                 //设置定时器2为定时模式
  210.     TIMER2_12TMode();                   //设置定时器2为12T模式
  211.     TIMER2_EnableInt();                 //使能定时器2中断
  212.     TIMER2_SetPrescale(T2_PSCR);        //设置定时器2的8位预分频
  213.     TIMER2_SetReload16(T2_RELOAD);      //设置定时器2的16位重载值
  214.     TIMER2_Run();                       //定时器2开始运行
  215.     //<<AICUBE_USER_TIMER2_INITIAL_BEGIN>>
  216.     // 在此添加用户初始化代码
  217.     //<<AICUBE_USER_TIMER2_INITIAL_END>>
  218. }
  219. ////////////////////////////////////////
  220. // 定时器3初始化函数
  221. // 入口参数: 无
  222. // 函数返回: 无
  223. ////////////////////////////////////////
  224. void TIMER3_Init(void)
  225. {
  226. #define T3_PSCR     (122)
  227. #define T3_RELOAD       (65536 - (float)SYSCLK / 12 / (T3_PSCR + 1) * 4 / 1)
  228.     TIMER3_TimerMode();                 //设置定时器3为定时模式
  229.     TIMER3_12TMode();                   //设置定时器3为12T模式
  230.     TIMER3_EnableInt();                 //使能定时器3中断
  231.     TIMER3_SetPrescale(T3_PSCR);        //设置定时器3的8位预分频
  232.     TIMER3_SetReload16(T3_RELOAD);      //设置定时器3的16位重载值
  233.     TIMER3_Run();                       //定时器3开始运行
  234.     //<<AICUBE_USER_TIMER3_INITIAL_BEGIN>>
  235.     // 在此添加用户初始化代码
  236.     //<<AICUBE_USER_TIMER3_INITIAL_END>>
  237. }
  238. ////////////////////////////////////////
  239. // 定时器4初始化函数
  240. // 入口参数: 无
  241. // 函数返回: 无
  242. ////////////////////////////////////////
  243. void TIMER4_Init(void)
  244. {
  245. #define T4_PSCR     (153)
  246. #define T4_RELOAD       (65536 - (float)SYSCLK / 12 / (T4_PSCR + 1) * 5 / 1)
  247.     TIMER4_TimerMode();                 //设置定时器4为定时模式
  248.     TIMER4_12TMode();                   //设置定时器4为12T模式
  249.     TIMER4_EnableInt();                 //使能定时器4中断
  250.     TIMER4_SetPrescale(T4_PSCR);        //设置定时器4的8位预分频
  251.     TIMER4_SetReload16(T4_RELOAD);      //设置定时器4的16位重载值
  252.     TIMER4_Run();                       //定时器4开始运行
  253.     //<<AICUBE_USER_TIMER4_INITIAL_BEGIN>>
  254.     // 在此添加用户初始化代码
  255.     //<<AICUBE_USER_TIMER4_INITIAL_END>>
  256. }
  257. ////////////////////////////////////////
  258. // USB库初始化函数
  259. // 入口参数: 无
  260. // 函数返回: 无
  261. ////////////////////////////////////////
  262. void USBLIB_Init(void)
  263. {
  264.     usb_init();                         //初始化USB模块
  265.     USB_SetIntPriority(0);              //设置中断为最低优先级
  266.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  267.     //<<AICUBE_USER_USBLIB_INITIAL_BEGIN>>
  268.     // 在此添加用户初始化代码
  269.     //<<AICUBE_USER_USBLIB_INITIAL_END>>
  270. }
  271. ////////////////////////////////////////
  272. // 等待USB配置完成函数
  273. // 入口参数: 无
  274. // 函数返回: 无
  275. ////////////////////////////////////////
  276. void USBLIB_WaitConfiged(void)
  277. {
  278.     while (DeviceState != DEVSTATE_CONFIGURED) //等待USB完成配置
  279.         WDT_Clear();                    //清看门狗定时器 (防止硬件自动使能看门狗)
  280. }
  281. ////////////////////////////////////////
  282. // USB设备接收数据处理程序
  283. // 入口参数: 无
  284. // 函数返回: 无
  285. // bUsbOutReady:USB设备接收数据标志位
  286. // OutNumber:USB设备接收到的数据长度
  287. // UsbOutBuffer:保存USB设备接收到的数据
  288. ////////////////////////////////////////
  289. void USBLIB_OUT_Done(void)
  290. {
  291.     if (bUsbOutReady)                   //查询是否有接收到USB主机发送数据
  292.     {
  293.         //<<AICUBE_USER_USBLIB_ISR_CODE1_BEGIN>>
  294.         // 在此添加中断函数用户代码
  295.         USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  296.                                         //在此处添加用户处理接收数据的代码
  297.         //<<AICUBE_USER_USBLIB_ISR_CODE1_END>>
  298.         usb_OUT_done();                 //当前包的数据处理完成,通知USB主机可以发送下一包数据
  299.     }
  300. }
  301. //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
  302. // 在此添加用户函数实现代码
  303. //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
复制代码

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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