野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2258|回复: 0

【野火】瑞萨RA MCU创意氛围赛+基于RA6M5的低功耗时钟

[复制链接]
发表于 2023-8-21 20:57:44 | 显示全部楼层 |阅读模式
本帖最后由 13877159331 于 2023-8-22 14:49 编辑

一、主要原理

  首先,上电后,利用RTC提供日历时间,并设置闹钟,在2.4寸液晶屏上实时显示,每个一个小时进行报时,三个LED都开启,此为正常模式。
野火论坛202308211749102076..png
接着,由于开启了低功耗模式的深度软件待机模式,按下开发板上的SW2键进入低功耗模式,三个LED关闭,屏幕熄灭,报时也会关闭。
然后,在低功耗模式下,如果按下SW2键,红灯闪10下,进入正常模式,显示一下时间,随后又进去低功耗模式;如果按下SW3键,红灯闪10下,进入正常模式。
最后,由于开启串口4,我们可以从串口调试助手看到RA6M5的运行状况!
野火论坛202308211811117620..png

二、相关配置说明
1.Uart4
野火论坛202308211822325762..png

2.RTC
野火论坛202308211823314574..png

3.深度软件待机模式   
野火论坛202308211826345615..png
Cancel Sources 中开启IRQ9,IRQ10

4.按键外部中断

野火论坛202308211918554101..png 野火论坛202308211921122066..png 野火论坛202308211919564511..png
开启SW2和SW3的外部中断

5. 2.4寸液晶屏
野火论坛202308211927577985..png
八个引脚P001~P003、P006~P008引脚配值为输出模式,模拟SPI进行驱动

三、相关代码(keil开发)
整体代码框架如图
野火论坛202308211932399403..png

显示屏移植主要修改一下部分,延时更换一下差不多就可以了
  1. //-----------------LCD端口定义----------------
  2. #define LCD_MOSI_Set()  R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_02, BSP_IO_LEVEL_HIGH)//SDA=MOST
  3. #define LCD_MOSI_Clr()  R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_02, BSP_IO_LEVEL_LOW)
  4.   
  5. #define LCD_SCLK_Set()  R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_01, BSP_IO_LEVEL_HIGH)//SCL   
  6. #define LCD_SCLK_Clr()         R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_01, BSP_IO_LEVEL_LOW)

  7. #define LCD_RES_Set()         R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_03, BSP_IO_LEVEL_HIGH)//(GPIOB,OLED_RST)
  8. #define LCD_RES_Clr()         R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_03, BSP_IO_LEVEL_LOW)//(GPIOB,OLED_RST)

  9. #define LCD_DC_Set()          R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_06, BSP_IO_LEVEL_HIGH)//(GPIOB,OLED_DC)
  10. #define LCD_DC_Clr()           R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_06, BSP_IO_LEVEL_LOW)//(GPIOB,OLED_DC)

  11. #define LCD_CS_Set()           R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_07, BSP_IO_LEVEL_HIGH)//(GPIOB,OLED_CS)
  12. #define LCD_CS_Clr()           R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_07, BSP_IO_LEVEL_LOW)//(GPIOB,OLED_CS)

  13. #define LCD_BLK_Set()          R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_08, BSP_IO_LEVEL_HIGH)//(GPIOB,OLED_RST)
  14. #define LCD_BLK_Clr()         R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_08, BSP_IO_LEVEL_LOW)//(GPIOB,OLED_RST)


  15. //#define LCD_SCLK_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_5)//SCL=SCLK  PA5
  16. //#define LCD_SCLK_Set() GPIO_SetBits(GPIOA,GPIO_Pin_5)

  17. //#define LCD_MOSI_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_7)//SDA=MOSI  PA7
  18. //#define LCD_MOSI_Set() GPIO_SetBits(GPIOA,GPIO_Pin_7)

  19. //#define LCD_RES_Clr()  GPIO_ResetBits(GPIOD,GPIO_Pin_2)//RES  PD2
  20. //#define LCD_RES_Set()  GPIO_SetBits(GPIOD,GPIO_Pin_2)

  21. //#define LCD_DC_Clr()   GPIO_ResetBits(GPIOB,GPIO_Pin_5)//DC   PB5
  22. //#define LCD_DC_Set()   GPIO_SetBits(GPIOB,GPIO_Pin_5)
  23. //                     
  24. //#define LCD_CS_Clr()   GPIO_ResetBits(GPIOA,GPIO_Pin_4)//CS  PA4
  25. //#define LCD_CS_Set()   GPIO_SetBits(GPIOA,GPIO_Pin_4)

  26. //#define LCD_BLK_Clr()  GPIO_ResetBits(GPIOB,GPIO_Pin_6)//BLK  PB6
  27. //#define LCD_BLK_Set()  GPIO_SetBits(GPIOB,GPIO_Pin_6)
复制代码

rtc.c代码
  1. #include "rtc.h"
  2. #include "led.h"
  3. #include "debug_uart.h"
  4. #include <stdio.h>

  5. uint16_t rtc_year =2023;         //年
  6. uint8_t rtc_month =8;           //月
  7. uint8_t rtc_day =8;             //日
  8. uint8_t rtc_hour =23;           //时
  9. uint8_t rtc_minute =59;         //分
  10. uint8_t rtc_second= 53;         //秒


  11. /********** 日期宏定义 **********/
  12. #define RTC_YEAR_SET 2023 //年
  13. #define RTC_MON_SET 8 //月
  14. #define RTC_MDAY_SET 18 //日

  15. /* 通过蔡勒公式计算星期 */
  16. #define RTC_WDAY_SET (RTC_YEAR_SET-2000 + ((RTC_YEAR_SET-2000)/4) - 35 + (26*(RTC_MON_SET+1))/10 + RTC_MDAY_SET -1 )%7


  17. #define RTC_HOUR_SET 23 //时
  18. #define RTC_MIN_SET 59 //分
  19. #define RTC_SEC_SET 48 //秒

  20. /************** 闹钟宏定义 **************/
  21. #define RTC_ALARM_YEAR_SET 2008 //年
  22. #define RTC_ALARM_MON_SET 8 //月
  23. #define RTC_ALARM_MDAY_SET 8 //日

  24. /* 通过蔡勒公式计算星期 */
  25. #define RTC_ALARM_WDAY_SET (RTC_YEAR_SET-2000+ ((RTC_YEAR_SET-2000)/4)- 35 + (26*(RTC_MON_SET+1))/10 + RTC_MDAY_SET -1 )%7

  26. #define RTC_ALARM_SEC_SET 00 //秒
  27. #define RTC_ALARM_MIN_SET 0 //分
  28. #define RTC_ALARM_HOUR_SET 0 //时

  29. /*** 使能闹钟比较 ***/
  30. #define RTC_ALARM_YEAR_ENABLE 0 //年
  31. #define RTC_ALARM_MON_ENABLE 0 //月
  32. #define RTC_ALARM_MDAY_ENABLE 0 //日
  33. #define RTC_ALARM_WDAY_ENABLE 0 //星期

  34. #define RTC_ALARM_SEC_ENABLE 0 //秒
  35. #define RTC_ALARM_MIN_ENABLE 1 //分
  36. #define RTC_ALARM_HOUR_ENABLE 0 //时

  37. void RTC_Init(void)
  38. {
  39.         //初始化时设定的时间
  40.         rtc_time_t set_time =
  41.         { .tm_sec = RTC_SEC_SET, //秒
  42.                 .tm_min = RTC_MIN_SET, //分
  43.                 .tm_hour = RTC_HOUR_SET, //小时
  44.                 .tm_mday = RTC_MDAY_SET, //日(一个月中)
  45.                 .tm_wday = RTC_WDAY_SET, //星期
  46.                 .tm_mon = RTC_MON_SET, //月份
  47.                 .tm_year = RTC_YEAR_SET-1900, //年份(如今年是 2008,则这里输入 2008-1900=108)
  48.         };
  49.         
  50.         /* 打开 RTC 模块 */
  51.         R_RTC_Open (rtc.p_ctrl, rtc.p_cfg);
  52.         
  53.         /* 时钟源设置,如果在 FSP Configuration 设置"Set Source Clock in Open" 为"enabled",那这一步可以被跳过 */
  54.         R_RTC_ClockSourceSet (rtc.p_ctrl);
  55.         
  56.         /* 若 RTC 时钟已经使用纽扣电池工作了一段时间,则可以使用这个函数获取当前日历并设置当前时间 */
  57.         R_RTC_CalendarTimeGet(rtc.p_ctrl,&set_time);
  58.         
  59.         /* 这个函数至少调用一次以启动 RTC*/
  60.         R_RTC_CalendarTimeSet (rtc.p_ctrl, &set_time); //设置当前时间
  61.         
  62.         /* 设置周期中断的周期为 1 秒 */
  63.         //R_RTC_PeriodicIrqRateSet (rtc.p_ctrl, RTC_PERIODIC_IRQ_SELECT_1_SECOND);
  64. }


  65. void RTC_Alarm_Init(void)
  66. {
  67.         rtc_alarm_time_t alarm_time =
  68.         {
  69.                 .time = {
  70.                                                 .tm_sec = RTC_ALARM_SEC_SET, //秒
  71.                                                 .tm_min = RTC_ALARM_MIN_SET, //分
  72.                                                 .tm_hour = RTC_ALARM_HOUR_SET, //小时
  73.                                                 .tm_mday = RTC_ALARM_MDAY_SET, //日(一个月中)
  74.                                                 .tm_wday = RTC_ALARM_WDAY_SET, //星期
  75.                                                 .tm_mon = RTC_ALARM_MON_SET, //月份
  76.                                                 .tm_year = RTC_ALARM_YEAR_SET-1900, //年份
  77.         },
  78.         .dayofweek_match = RTC_ALARM_WDAY_ENABLE,
  79.         .hour_match = RTC_ALARM_HOUR_ENABLE,
  80.         .mday_match = RTC_ALARM_MDAY_ENABLE,
  81.         .min_match = RTC_ALARM_MIN_ENABLE,
  82.         .mon_match = RTC_ALARM_MON_ENABLE,
  83.         .sec_match = RTC_ALARM_SEC_ENABLE,
  84.         .year_match = RTC_ALARM_YEAR_ENABLE,
  85.         };
  86.         R_RTC_CalendarAlarmSet(rtc.p_ctrl, &alarm_time);
  87. }

  88. void Buzzer_sout()
  89. {
  90.         R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_05, BSP_IO_LEVEL_HIGH);  
  91.          R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS); //Delay 120ms
  92.         R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_05, BSP_IO_LEVEL_LOW);
  93. }

  94. void rtc_callback(rtc_callback_args_t *p_args)
  95. {
  96.         static rtc_time_t get_time;
  97.         switch (p_args->event)
  98.         {
  99.                 /* 若是周期中断,则发送日期给串口并切换 LED 电平 */
  100.                 case RTC_EVENT_PERIODIC_IRQ:
  101.                         
  102.                                 break;
  103.                
  104.                 case RTC_EVENT_ALARM_IRQ:
  105.                         /* 获取当前时间 */
  106.                         R_RTC_CalendarTimeGet (rtc.p_ctrl, &get_time);
  107.                         
  108.                         /* 打印当前时间 */
  109.                         printf("\r\n%d-%d-%d-%d:%d:%d\r\n", get_time.tm_year + 1900,get_time.tm_mon, get_time.tm_mday,get_time.tm_hour, get_time.tm_min, get_time.tm_sec);
  110.                         Buzzer_sout(); //蜂鸣器叫一声
  111.                         break;

  112.                 default:
  113.                         break;
  114.         }
  115. }
  116. void Gettime(void)
  117. {
  118.         R_RTC_CalendarTimeGet (rtc.p_ctrl, &get_time);
  119.         rtc_second=get_time.tm_sec;             //获取秒        
  120.         rtc_minute=get_time.tm_min;             //获取分
  121.         rtc_hour=get_time.tm_hour;              //获取时
  122.         rtc_day=get_time.tm_mday;               //获取日
  123.         rtc_month=get_time.tm_mon;              //获取月
  124.         rtc_year=get_time.tm_year+1900;              //获取年        
  125. }
复制代码
hal_data.c
  1. #include "hal_data.h"
  2. #include "led.h"
  3. #include "debug_uart.h"
  4. #include <stdio.h>
  5. #include "lcd_init.h"
  6. #include "lcd.h"
  7. #include "pic.h"
  8. #include "rtc.h"
  9. #include "icu.h"

  10. FSP_CPP_HEADER
  11. void R_BSP_WarmStart(bsp_warm_start_event_t event);
  12. FSP_CPP_FOOTER

  13. /*******************************************************************************************************************//**
  14. * main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used.  This function
  15. * is called by main() when no RTOS is used.
  16. **********************************************************************************************************************/


  17. void hal_entry(void)
  18. {
  19.         /* TODO: add your own code here */
  20.         R_BSP_PinAccessEnable(); //启用对 PFS 寄存器的访问, 因为后面写 IO 口都用 BSP 内联函数
  21.         LED_Init(); // LED 初始化
  22.         Debug_UART4_Init(); // SCI4 UART 调试串口初始化
  23.         IRQ_Init();
  24.         
  25.         RTC_Init(); //初始化 RTCLCD_Init();//LCD初始化
  26.         RTC_Alarm_Init(); //初始化闹钟
  27.         
  28.         /* 判断是否在深度软件待机模式下被唤醒 */
  29.         if (1U == R_SYSTEM->RSTSR0_b.DPSRSTF)
  30.         {
  31.                 /* 从深度软件待机模式唤醒后清除 IOkeep 位,以允许使用 IO 端口 */
  32.                 R_LPM_IoKeepClear (NULL);
  33.                
  34.                 /* 清除唤醒标志位 */
  35.                 R_SYSTEM->RSTSR0_b.DPSRSTF = 0;
  36.                
  37.                 /* 判断唤醒源是 IRQ-9 还是 IRQ-10,并将判断结果打印出来 */
  38.                 if (R_SYSTEM->DPSIFR1 >> 1 & 0x01U)
  39.                 {
  40.                         printf("MCU 唤醒源为 SW2\r\n");
  41.                 }
  42.                 else if (R_SYSTEM->DPSIFR1 >> 2 & 0x01U)
  43.                 {
  44.                         printf("MCU 唤醒源为 SW3\r\n");
  45.                         printf("MCU 进入正常模式\r\n");
  46.                 }
  47.         }
  48.         LED_Flicker (10); //LED 闪烁 10 次

  49.                

  50.         LCD_Init();
  51.         LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
  52.         LCD_ShowChinese(49 +40 , 97, "年",DARKBLUE,WHITE,24,0);
  53.         LCD_ShowChinese(97 +40 , 97, "月",DARKBLUE,WHITE,24,0);
  54.         LCD_ShowChinese(145+40 ,97, "日",DARKBLUE,WHITE,24,0);
  55.         
  56.         LCD_ShowChinese(25 +40, 73,"时",DARKBLUE,WHITE,24,0);
  57.         LCD_ShowChinese(73 +40, 73,"分",DARKBLUE,WHITE,24,0);
  58.         LCD_ShowChinese(121+40, 73,"秒",DARKBLUE,WHITE,24,0);
  59.         
  60.         while(1)
  61.         {               
  62.                         LED1_ON;
  63.                         LED2_ON;        
  64.                         LED3_ON;
  65.                         Gettime();        
  66.                         LCD_Backlight_On();
  67.                         LCD_ShowChinese(49, 0, "【野火】", DARKBLUE, WHITE, 24, 0);
  68.                         LCD_ShowString(150,0,"RA",DARKBLUE,WHITE, 24, 0);
  69.                         LCD_ShowString(36,25,"MCU",DARKBLUE,WHITE, 24, 0);
  70.                         LCD_ShowChinese(73, 25, "创意氛围赛", DARKBLUE, WHITE, 24, 0);

  71.                         LCD_ShowIntNum(0  +40, 97, rtc_year, 4,  DARKBLUE, WHITE, 24);
  72.                         LCD_ShowIntNum(73 +40, 97, rtc_month, 2, DARKBLUE, WHITE, 24);
  73.                         LCD_ShowIntNum(121+40, 97, rtc_day, 2,   DARKBLUE, WHITE, 24);
  74.                                 
  75.                         LCD_ShowIntNum(0 +40 ,  73, rtc_hour,  2,  DARKBLUE, WHITE, 24);
  76.                         LCD_ShowIntNum(49+40 , 73, rtc_minute, 2, DARKBLUE,WHITE, 24);
  77.                         LCD_ShowIntNum(97+40 , 73, rtc_second, 2, DARKBLUE,WHITE, 24);
  78.                         
  79.                         LCD_ShowChinese(49, 145, "当前模式", DARKBLUE, WHITE, 16, 0);
  80.                         LCD_ShowString(113, 145, ":",DARKBLUE,WHITE, 16, 0);
  81.                         LCD_ShowChinese(120, 145, "正常模式", DARKBLUE, WHITE, 16, 0);
  82.                         
  83.                         LCD_ShowChinese(0,  217-48, "正常模式按", DARKBLUE, WHITE, 16, 0);
  84.                         LCD_ShowString(82,  217-48,"SW2",DARKBLUE,WHITE, 16, 0);
  85.                         LCD_ShowChinese(108,217-48, "键进入低功耗模式", DARKBLUE, WHITE, 16, 0);
  86.                         
  87.                         LCD_ShowChinese(0,  240-48, "低功耗模式按", DARKBLUE, WHITE, 16, 0);
  88.                         LCD_ShowString(98,  240-48,"SW2",DARKBLUE,WHITE, 16, 0);
  89.                         LCD_ShowChinese(124,240-48, "键进入正常模式", DARKBLUE, WHITE, 16, 0);
  90.                         
  91.                         LCD_ShowChinese(82, 256-48, "按", DARKBLUE, WHITE, 16, 0);
  92.                         LCD_ShowString(98,  256-48,"SW3",DARKBLUE,WHITE, 16, 0);
  93.                         LCD_ShowChinese(124,256-48, "键进入正常模式", DARKBLUE, WHITE, 16, 0);
  94.                         LCD_ShowChinese(49, 272-48, "随后又进入低功耗模式", DARKBLUE, WHITE, 16, 0);
  95.                         
  96.                         LCD_ShowPicture(0,260,100,49,gImage_1);
  97.                         LCD_ShowPicture(138,262,100,44,gImage_2);
  98.                         
  99.                         R_BSP_SoftwareDelay(800, BSP_DELAY_UNITS_MILLISECONDS);
  100.                         if (key_flag == true)
  101.                         {
  102.                                 /* 标志位置 0,防止程序不断进入 if 的代码块里面 */
  103.                                 key_flag = false;
  104.                                 
  105.                                 /*LED 闪烁 2 次 */
  106.                                 LED_Flicker (2);
  107.                                 LED1_OFF;
  108.                                 LED2_OFF;        
  109.                                 LED3_OFF;
  110.                                 
  111.                                 LCD_Backlight_Off();
  112.                                 LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
  113.                                 LCD_ShowChinese(73, 110, "唤醒中", RED, WHITE, 24, 0);
  114.                                 
  115.                                 /* 进入低功耗模式前打印 */
  116.                                 printf("MCU 进入深度软件待机状态\r\n");
  117.                                 
  118.                                 /* 打开 LPM, 进入深度软件待机状态 */
  119.                                 R_LPM_Open (deep_sw_standby.p_ctrl, deep_sw_standby.p_cfg);
  120.                                 R_LPM_LowPowerModeEnter (deep_sw_standby.p_ctrl);
  121.                                 
  122.                                 /* 唤醒后打印,但是在进入深度软件待机模式后不能保存上下文,
  123.                                 故这里正常来说无法被执行, 如果执行了则说明进入的是睡眠模式,
  124.                                 也就是程序出现了问题,一般刚烧写程序会导致这个问题,重新上电即可恢复正常 */
  125.                                 printf("MCU 被唤醒(出现本消息说明程序出错)\r\n");
  126.                         }


  127.                         
  128.         }
  129.         #if BSP_TZ_SECURE_BUILD
  130.         /* Enter non-secure code */
  131.         R_BSP_NonSecureEnter();
  132.         #endif
  133. }



  134. /*******************************************************************************************************************//**
  135. * This function is called at various points during the startup process.  This implementation uses the event that is
  136. * called right before main() to set up the pins.
  137. *
  138. * @param[in]  event    Where at in the start up process the code is currently at
  139. **********************************************************************************************************************/
  140. void R_BSP_WarmStart (bsp_warm_start_event_t event)
  141. {
  142.     if (BSP_WARM_START_RESET == event)
  143.     {
  144. #if BSP_FEATURE_FLASH_LP_VERSION != 0

  145.         /* Enable reading from data flash. */
  146.         R_FACI_LP->DFLCTL = 1U;

  147.         /* Would normally have to wait tDSTOP(6us) for data flash recovery. Placing the enable here, before clock and
  148.          * C runtime initialization, should negate the need for a delay since the initialization will typically take more than 6us. */
  149. #endif
  150.     }

  151.     if (BSP_WARM_START_POST_C == event)
  152.     {
  153.         /* C runtime environment and system clocks are setup. */

  154.         /* Configure pins. */
  155.         R_IOPORT_Open(&g_ioport_ctrl, g_ioport.p_cfg);
  156.     }
  157. }

  158. #if BSP_TZ_SECURE_BUILD

  159. BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable ();

  160. /* Trustzone Secure Projects require at least one nonsecure callable function in order to build (Remove this if it is not required to build). */
  161. BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable ()
  162. {

  163. }
  164. #endif
复制代码

四、遇到的问题及总结
1.我们使用keil开发RA6M5时可以用stlink下载,也可以使用Debug调试,有时候下载程序进去后,点Dubug出错,可以先编译,然后直接进去Debug,它下载好然后进去!
2.RTC时钟源可以选择子时钟或LOCO,按照FSP库实战指南时钟源选择Sub-Clock,小时进位到时,进位不了,改为LOCO,就可以了,其他配置都一样,不懂为什么,有大佬知道的话,欢迎评论区留言!
3.低功耗模式配置为深度软件待机模式,用stlink下载进去后,程序有点错乱,就是什么中断都可以唤醒MCU,复位之后也不行,但在深度软件待机模式下,下载程序,下载不了,然后程序就神奇的变好了,同上,欢迎大佬留言!
4.由于参加电赛不怎么够时间完成作品,打算用esp8266联网获取准确时间,做不出来(基础不好),最后感谢野火举办的瑞萨RA MCU创意氛围赛,让我有机会学习到相关的内容!!!


五、相关链接
1.视频:https://www.bilibili.com/video/BV1Tw41197j7/?spm_id_from=333.999.0.0&vd_source=e567d33338fa6c85ccc0dc7586dca675
2.代码见附件!

shizhong2.0.rar

3.08 MB, 下载次数: 11

代码

回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-21 18:11 , Processed in 0.049846 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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