硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3907|回复: 5
收起左侧

[UART] v7-串口fifo收发使用问题,求帮助!!!!

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2019-4-19 01:23:12 | 显示全部楼层 |阅读模式
这个是代码 airsensor.zip (27.44 MB, 下载次数: 66)
首先是我需要通过串口接收传感器的数据的格式 数据帧格式.png

本来计划是串口6来接收的,但是串口6没配置好,就先用串口1做这个了,稍后再移植,然后我自己写了个sensor程序来作为这个传感器的驱动程序,经过测试,第一帧数据是可以正常接收的
发送第一帧数据后.png

我再清除窗口再向板子发数据
发送第二帧数据后.png
回复我3次,我再向单片机发送数据
发送第三帧数据后.png
这就是我疑惑的地方,不知道为什么会出现这个错误
下面是sensor程序
#include "airsensor.h"
#include "bsp.h"
#include "string.h"

uint8_t ucAS_Len=19;
uint8_t ucAS_Head = 0;
uint8_t ucAS_Buf[512];
uint16_t usAS_Pos = 0;
const char buf5[] = "传感器异常,未收到数据\r\n";
const char buf6[] = "传感器正常,开始接收数据\r\n";
const char buf7[] = "传感器正常,结束完一帧数据\r\n";
void AirSonsor_getdata(void)
{
        uint8_t ucData;

        while(1)
        {
                if (comGetChar(COM1, &ucData))
                {
                        bsp_LedToggle(2);        //LED2标记接收到了数据       
                        comSendBuf(COM1, (uint8_t *)buf6, strlen(buf6));       
                        if(ucAS_Head ==0)
                        {
                                if(ucData==1)
                                {
                                        ucAS_Buf[usAS_Pos]=ucData;
                                        usAS_Pos++;//1
                                        comGetChar(COM1, &ucData);
                                        if(ucData==3)
                                        {
                                        ucAS_Buf[usAS_Pos]=ucData;
                                        usAS_Pos++;//2
                                        comGetChar(COM1, &ucData);
                                                if(ucData==0x0c)
                                                {
                                                        ucAS_Buf[usAS_Pos]=ucData;
                                                        usAS_Pos++;//3
                                                        comGetChar(COM1, &ucData);       
                                                }
                                        }
                               
                                }
                        }

                                                        for(int i=usAS_Pos;i<ucAS_Len;i++)//3
                                                        {
                                                        ucAS_Buf[usAS_Pos] = ucData;
                                                        usAS_Pos++;
                                                        comGetChar(COM1, &ucData);       
                                                        }
                                                       
                                                bsp_LedToggle(3);       
                                                comSendBuf(COM1, (uint8_t *)buf7, strlen(buf7));
                                                break;       
       }
                else
                {
                        comSendBuf(COM1, (uint8_t *)buf5, strlen(buf5));
                        bsp_LedToggle(4);//led4表示接收失败       
                        break;
                }
}
}



然后是主函数:
#include "bsp.h"                        /* 底层硬件驱动 */
#include "airsensor.h"
#include "string.h"

/* 定义例程名和例程发布日期 */
#define EXAMPLE_NAME        "V7-串口和PC机通信(驱动支持8个串口FIFO)"
#define EXAMPLE_DATE        "2018-12-12"
#define DEMO_VER                "1.0"

static void PrintfLogo(void);
static void PrintfHelp(void);
extern uint8_t RX_count;
/*
*********************************************************************************************************
*        函 数 名: main
*        功能说明: c程序入口
*        形    参: 无
*        返 回 值: 错误代码(无需处理)
*********************************************************************************************************
*/
int main(void)
{
        uint8_t ucKeyCode;       
        uint8_t read;
        uint8_t flag=0;
        const char buf1[] = "接收到串口命令1\r\n";
        const char buf2[] = "接收到串口命令2\r\n";
        const char buf3[] = "接收到串口命令3\r\n";
        const char buf4[] = "接收到串口命令4\r\n";
       
       
        bsp_Init();                /* 硬件初始化 */
       
        PrintfLogo();        /* 打印例程名称和版本等信息 */
        PrintfHelp();        /* 打印操作提示 */

        bsp_StartAutoTimer(0, 100);        /* 启动1个100ms的自动重装的定时器 */
        //bsp_StartAutoTimer(1, 100);
        /* 主程序大循环 */
        while (1)
        {
               
                /* CPU空闲时执行的函数,在 bsp.c */
                bsp_Idle();               
               
                /* 判断定时器超时时间 */
                if (bsp_CheckTimer(0))       
                {
                        /* 每隔100ms 进来一次 */
                        /* 翻转LED1的状态 */
                        bsp_LedToggle(1);       
                }
                if (RX_count==20)       
                {
                        /* 每隔100ms 进来一次 */
                        /* 翻转LED2的状态 */
                        flag=1;
                        RX_count=0;
                       
                }
                if(flag==1)
                {
                        flag=0;
                        AirSonsor_getdata();
                }
       
                /* 处理按键事件 */
                ucKeyCode = bsp_GetKey();
                if (ucKeyCode > 0)
                {
                        /* 有键按下 */
                        switch (ucKeyCode)
                        {
                                case KEY_DOWN_K1:                /* 按键K1键按下 */
                                        printf("按键K1按下\r\n");
                                        bsp_LedToggle(1);       
                                        break;               
                               
                                case KEY_DOWN_K2:                /* 按键K2键按下 */
                                        printf("按键K2按下\r\n");
                                        bsp_LedToggle(3);                                       
                                        break;

                                case KEY_DOWN_K3:                /* 按键K3键按下 */
                                        printf("按键K3按下\r\n");       
                                        bsp_LedToggle(4);       
                                        break;                               
                               
                                default:
                                        break;
                        }
                }
        }
}

/*
*********************************************************************************************************
*        函 数 名: PrintfHelp
*        功能说明: 打印操作提示
*        形    参:无
*        返 回 值: 无
*********************************************************************************************************
*/
static void PrintfHelp(void)
{
        printf("操作提示:\r\n");
        printf("1. 启动一个自动重装软件定时器,每100ms翻转一次LED2\r\n");
        printf("2. 串口接收到字符命令'1',返回串口消息接收到串口命令1\r\n");
        printf("3. 串口接收到字符命令'2',返回串口消息接收到串口命令2\r\n");
        printf("4. 串口接收到字符命令'3',返回串口消息接收到串口命令3\r\n");
        printf("5. 串口接收到字符命令'4',返回串口消息接收到串口命令4\r\n");
        printf("6. K1按键按下,串口打印按键K1按下\r\n");
        printf("7. K2按键按下,串口打印按键K2按下\r\n");
        printf("8. K3按键按下,串口打印按键K3按下\r\n");
}

我在bsp_uart_fifo.c中定义了一个全局变量uint8_t RX_count=0;,让这个RX_count=_pUart->usRxCount;
程序.png
然后我在主函数里引用他,做为我判断fifo里有1帧数据,我在airsensor函数里去处理。
请问这样做是不是不对,该怎么解决?请各位大佬们帮助,我会把程序放上去,求求帮助
然后我留下我的QQ,有时间的大佬可以随时联系我:1151144104




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2019-4-19 02:22:49 | 显示全部楼层
帮你做了个。

新解压一个串口FIFO例子处理,任何地方都不要做修改,用下面的代码覆盖你的main.c文件即可。

测试效果:
1.jpg


代码:
  1. /*
  2. *********************************************************************************************************
  3. *
  4. *        模块名称 : 主程序模块
  5. *        文件名称 : main.c
  6. *        版    本 : V1.0
  7. *        说    明 : 学习串口与PC通信
  8. *              实验目的:
  9. *                1. 学习串口与PC通信。
  10. *              实验内容:
  11. *                1. 启动一个自动重装软件定时器,每100ms翻转一次LED2。
  12. *              实验操作:
  13. *                1. 串口接收到字符命令'1',返回串口消息"接收到串口命令1"。
  14. *                2. 串口接收到字符命令'2',返回串口消息"接收到串口命令2"。
  15. *                3. 串口接收到字符命令'3',返回串口消息"接收到串口命令3"。
  16. *                4. 串口接收到字符命令'4',返回串口消息"接收到串口命令4"。
  17. *                5. K1按键按下,串口打印"按键K1按下"。
  18. *                6. K2按键按下,串口打印"按键K2按下"。
  19. *                7. K3按键按下,串口打印"按键K3按下"。
  20. *              注意事项:
  21. *                1. 本实验推荐使用串口软件SecureCRT查看打印信息,波特率115200,数据位8,奇偶校验位无,停止位1。
  22. *                2. 务必将编辑器的缩进参数和TAB设置为4来阅读本文件,要不代码显示不整齐。
  23. *
  24. *        修改记录 :
  25. *                版本号   日期         作者        说明
  26. *                V1.0    2018-12-12   Eric2013     1. CMSIS软包版本 V5.4.0
  27. *                                         2. HAL库版本 V1.3.0
  28. *
  29. *        Copyright (C), 2018-2030, 安富莱电子 www.armfly.com
  30. *
  31. *********************************************************************************************************
  32. */       
  33. #include "bsp.h"                        /* 底层硬件驱动 */



  34. /* 定义例程名和例程发布日期 */
  35. #define EXAMPLE_NAME        "V7-串口和PC机通信(驱动支持8个串口FIFO)"
  36. #define EXAMPLE_DATE        "2018-12-12"
  37. #define DEMO_VER                "1.0"

  38. static void PrintfLogo(void);
  39. static void PrintfHelp(void);

  40. /*
  41. *********************************************************************************************************
  42. *        函 数 名: main
  43. *        功能说明: c程序入口
  44. *        形    参: 无
  45. *        返 回 值: 错误代码(无需处理)
  46. *********************************************************************************************************
  47. */
  48. int main(void)
  49. {
  50.         uint8_t ucKeyCode;       
  51.         uint8_t read;
  52.         uint8_t ucStatus = 0;  /* 状态机标志 */
  53.         uint8_t ucCount=0, i;
  54.         uint8_t buf[128];
  55.        
  56.        
  57.         bsp_Init();                /* 硬件初始化 */
  58.        
  59.         PrintfLogo();        /* 打印例程名称和版本等信息 */
  60.         PrintfHelp();        /* 打印操作提示 */

  61.         bsp_StartAutoTimer(0, 100);        /* 启动1个100ms的自动重装的定时器 */
  62.        
  63.         /* 主程序大循环 */
  64.         while (1)
  65.         {
  66.                 /* CPU空闲时执行的函数,在 bsp.c */
  67.                 bsp_Idle();               
  68.                
  69.                 /* 判断定时器超时时间 */
  70.                 if (bsp_CheckTimer(0))       
  71.                 {
  72.                         /* 每隔100ms 进来一次 */
  73.                         /* 翻转LED2的状态 */
  74.                         bsp_LedToggle(2);       
  75.                 }
  76.                
  77.                 /* 接收到的串口命令处理 */
  78.                 if (comGetChar(COM1, &read))
  79.                 {
  80.                         switch (ucStatus)
  81.                         {
  82.                                 /* 状态0保证接收到0x01 */
  83.                                 case 0:
  84.                                         if(read == 0x01)
  85.                                         {
  86.                                                 ucStatus = 1;       
  87.                                         }
  88.                                         break;
  89.                                        
  90.                                 /* 状态1保证接收到0x03 */
  91.                                 case 1:
  92.                                         if(read == 0x03)
  93.                                         {
  94.                                                 ucStatus = 2;
  95.                                         }
  96.                                         else
  97.                                         {
  98.                                                 ucStatus = 0;
  99.                                         }
  100.                                         break;
  101.                                        
  102.                                 /* 状态2保证接收到0x0E */
  103.                                 case 2:
  104.                                         if(read == 0x0E)
  105.                                         {
  106.                                                 ucStatus = 3;
  107.                                         }
  108.                                         else
  109.                                         {
  110.                                                 ucStatus = 0;
  111.                                         }
  112.                                         break;

  113.                                 case 3:
  114.                                         buf[ucCount] = read;
  115.                                        
  116.                                         /* 接收够15个数据 */
  117.                                         if(ucCount == 15)
  118.                                         {
  119.                                                 /* 打印接收到的数据值 */
  120.                                                 printf("接收到的数据:");
  121.                                                 for(i = 0; i < ucCount + 1; i++)
  122.                                                 {
  123.                                                         printf("%x ", buf[i]);
  124.                                                 }
  125.                                                 printf("\r\n");
  126.                                                 ucStatus = 0;
  127.                                                 ucCount=0;
  128.                                         }
  129.                                         else
  130.                                         {
  131.                                                 ucCount++;
  132.                                         }
  133.                                         break;
  134.                                
  135.                                 default:
  136.                                         break;
  137.                         }
  138.                 }
  139.                
  140.                 /* 处理按键事件 */
  141.                 ucKeyCode = bsp_GetKey();
  142.                 if (ucKeyCode > 0)
  143.                 {
  144.                         /* 有键按下 */
  145.                         switch (ucKeyCode)
  146.                         {
  147.                                 case KEY_DOWN_K1:                /* 按键K1键按下 */
  148.                                         printf("按键K1按下\r\n");
  149.                                         bsp_LedToggle(1);       
  150.                                         break;               
  151.                                
  152.                                 case KEY_DOWN_K2:                /* 按键K2键按下 */
  153.                                         printf("按键K2按下\r\n");
  154.                                         bsp_LedToggle(3);                                       
  155.                                         break;

  156.                                 case KEY_DOWN_K3:                /* 按键K3键按下 */
  157.                                         printf("按键K3按下\r\n");       
  158.                                         bsp_LedToggle(4);       
  159.                                         break;                               
  160.                                
  161.                                 default:
  162.                                         break;
  163.                         }
  164.                 }
  165.         }
  166. }

  167. /*
  168. *********************************************************************************************************
  169. *        函 数 名: PrintfHelp
  170. *        功能说明: 打印操作提示
  171. *        形    参:无
  172. *        返 回 值: 无
  173. *********************************************************************************************************
  174. */
  175. static void PrintfHelp(void)
  176. {
  177.         printf("操作提示:\r\n");
  178.         printf("1. 启动一个自动重装软件定时器,每100ms翻转一次LED2\r\n");
  179.         printf("2. 串口接收到字符命令'1',返回串口消息接收到串口命令1\r\n");
  180.         printf("3. 串口接收到字符命令'2',返回串口消息接收到串口命令2\r\n");
  181.         printf("4. 串口接收到字符命令'3',返回串口消息接收到串口命令3\r\n");
  182.         printf("5. 串口接收到字符命令'4',返回串口消息接收到串口命令4\r\n");
  183.         printf("6. K1按键按下,串口打印按键K1按下\r\n");
  184.         printf("7. K2按键按下,串口打印按键K2按下\r\n");
  185.         printf("8. K3按键按下,串口打印按键K3按下\r\n");
  186. }

  187. /*
  188. *********************************************************************************************************
  189. *        函 数 名: PrintfLogo
  190. *        功能说明: 打印例程名称和例程发布日期, 接上串口线后,打开PC机的超级终端软件可以观察结果
  191. *        形    参:无
  192. *        返 回 值: 无
  193. *********************************************************************************************************
  194. */
  195. static void PrintfLogo(void)
  196. {
  197.         printf("*************************************************************\n\r");
  198.        
  199.         /* 检测CPU ID */
  200.         {
  201.                 uint32_t CPU_Sn0, CPU_Sn1, CPU_Sn2;
  202.                
  203.                 CPU_Sn0 = *(__IO uint32_t*)(0x1FF1E800);
  204.                 CPU_Sn1 = *(__IO uint32_t*)(0x1FF1E800 + 4);
  205.                 CPU_Sn2 = *(__IO uint32_t*)(0x1FF1E800 + 8);

  206.                 printf("\r\nCPU : STM32H743XIH6, BGA240, 主频: %dMHz\r\n", SystemCoreClock / 1000000);
  207.                 printf("UID = %08X %08X %08X\n\r", CPU_Sn2, CPU_Sn1, CPU_Sn0);
  208.         }

  209.         printf("\n\r");
  210.         printf("*************************************************************\n\r");
  211.         printf("* 例程名称   : %s\r\n", EXAMPLE_NAME);        /* 打印例程名称 */
  212.         printf("* 例程版本   : %s\r\n", DEMO_VER);                /* 打印例程版本 */
  213.         printf("* 发布日期   : %s\r\n", EXAMPLE_DATE);        /* 打印例程日期 */

  214.         /* 打印ST的HAL库版本 */
  215.         printf("* HAL库版本  : V1.3.0 (STM32H7xx HAL Driver)\r\n");
  216.         printf("* \r\n");        /* 打印一行空格 */
  217.         printf("* QQ    : 1295744630 \r\n");
  218.         printf("* 旺旺  : armfly\r\n");
  219.         printf("* Email : armfly@qq.com \r\n");
  220.         printf("* 微信公众号: armfly_com \r\n");
  221.         printf("* 淘宝店: armfly.taobao.com\r\n");
  222.         printf("* Copyright www.armfly.com 安富莱电子\r\n");
  223.         printf("*************************************************************\n\r");
  224. }

  225. /***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/
复制代码



回复

使用道具 举报

0

主题

43

回帖

43

积分

新手上路

积分
43
发表于 2021-8-8 21:29:52 | 显示全部楼层
学习学习                     
回复

使用道具 举报

0

主题

43

回帖

43

积分

新手上路

积分
43
发表于 2021-8-9 12:04:25 | 显示全部楼层
优化的串口接收  增加了超时功能
//&#197;D&#182;&#207;óDD§êy&#190;Y
uint8_t Uart4_Frame(void)     //liuke  good
{
        uint8_t ucData;
       
        if(comGetChar(COM4, &ucData))
        {
                #ifdef DEBUG
                comSendChar(COM4, ucData);
                #endif
               
                switch (g_Status)
                {
                        /* ×′ì&#172;0±£&#214;¤&#189;óê&#213;μ&#189;í·*/
                        case 0:
                                if(ucData == 'H')
                                {
                                        g_Status = 1;  
                                        Frame_Header = 'H';
                                       
                                        StartSoftTimer(0, 3000);  //&#191;aê&#188;&#188;&#198;ê±£&#172;3&#172;ê±í&#203;3&#246;
                                }
                        break;
               
                        case 1:    //&#197;D&#182;&#207;3¤&#182;èê&#199;·&#241;·&#251;o&#207;òa&#199;ó
                                if(ucData == 4)
                                {
                                        g_Status = 4;
                                        g_Uart4_RX_Buf[0] = 'H';
                                        g_Uart4_RX_Buf[1] = 4;
                                }
                                else if(ucData == 8)
                                {
                                        g_Status = 8;
                                        g_Uart4_RX_Buf[0] = 'H';
                                        g_Uart4_RX_Buf[1] = 8;
                                }
                                else if(ucData == 10)
                                {
                                        g_Status = 10;
                                        g_Uart4_RX_Buf[0] = 'H';
                                        g_Uart4_RX_Buf[1] = 10;
                                }
                                else
                                {
                                        g_Status = 200;
                                }
                        break;               
       
                        case 4:
                               
                                g_Uart4_RX_Buf[g_Uart4_RX_Cnt + 2] = ucData;
                         
                                /* &#212;ù&#189;óê&#213;1&#187;2&#184;&#246;êy&#190;Y */
                                if(g_Uart4_RX_Cnt == 1)
                                {
                                        if(g_Uart4_RX_Buf[3] == g_Uart4_RX_Buf[0] + g_Uart4_RX_Buf[1] + g_Uart4_RX_Buf[2])
                                        {
                                                g_Status = 104;
                                        }
                                        else
                                        {
                                                g_Status = 204;
                                        }
                                }
                                else
                                {
                                        g_Uart4_RX_Cnt++;
                                }
                        break;                               
                       
                        case 8:                 //&#207;&#194;·¢1&#246;í2&#214;±&#190;&#182;±à&#194;&#235;&#198;÷

                                g_Uart4_RX_Buf[g_Uart4_RX_Cnt + 2] = ucData;
                         
                                /* &#212;ù&#189;óê&#213;1&#187;6&#184;&#246;êy&#190;Y */
                                if(g_Uart4_RX_Cnt == 5)
                                {
                                        if(g_Uart4_RX_Buf[7] ==        g_Uart4_RX_Buf[0] + g_Uart4_RX_Buf[1] + g_Uart4_RX_Buf[2] + g_Uart4_RX_Buf[3]+
                                                                                                                                        g_Uart4_RX_Buf[4] + g_Uart4_RX_Buf[5] + g_Uart4_RX_Buf[6])
                                        {
                                                g_Status = 108;
                                        }
                                        else
                                        {
                                                g_Status = 208;
                                        }
                                }
                                else
                                {
                                        g_Uart4_RX_Cnt++;
                                }
                               
                        break;


                        case 10:                                               //&#207;&#194;·¢&#197;¤á|&#207;μêy
                                g_Uart4_RX_Buf[g_Uart4_RX_Cnt + 2] = ucData;
                         
                                /* &#212;ù&#189;óê&#213;1&#187;8&#184;&#246;êy&#190;Y */
                                if(g_Uart4_RX_Cnt == 7)
                                {
                                        if(g_Uart4_RX_Buf[9] ==        g_Uart4_RX_Buf[0] + g_Uart4_RX_Buf[1] + g_Uart4_RX_Buf[2] + g_Uart4_RX_Buf[3]+
                                                                                                                                        g_Uart4_RX_Buf[4] + g_Uart4_RX_Buf[5] + g_Uart4_RX_Buf[6] + g_Uart4_RX_Buf[7] + g_Uart4_RX_Buf[8])
                                        {
                                                g_Status = 110;
                                        }
                                        else
                                        {
                                                g_Status = 210;
                                        }
                                }
                                else
                                {
                                        g_Uart4_RX_Cnt++;
                                }
                               
                        break;
                       
                        default:
                        break;
                }
                       
                if((g_Status >= 100) && (g_Status < 200))  //íê&#213;&#251;&#213;yè·ò&#187;&#214;&#161;
                {
                        g_Status = 0;
                        g_Uart4_RX_Cnt = 0;
                        //í£&#214;1&#188;&#198;êy&#198;÷
                        StopSoftTimer(0);       
                       
                        //&#184;3&#214;μ
                        Frame_Header = g_Uart4_RX_Buf[0];
                        Frame_CMD    = g_Uart4_RX_Buf[2];                       

                        return 1;
                                               
                }
                else if((g_Status >= 200) && (g_Status < 250))
                {

                        g_Status = 0;
                        g_Uart4_RX_Cnt = 0;
                        //í£&#214;1&#188;&#198;êy&#198;÷
                        StopSoftTimer(0);       
                        memset(g_Uart4_RX_Buf, 0, 25); //&#199;&#229;&#191;&#213;&#187;o′&#230;£&#172;&#214;&#216;D&#194;&#191;aê&#188;
                        comSendChar(COM4, 0x45);  //·μ&#187;&#216;′í&#206;ó
                       
                        return 0;
                }
                else
                {
                        return 0;
                }
               
        }
        else
        {
                if(1 == CheckSoftTimer(0))
                {
                        g_Status = 0;
                        g_Uart4_RX_Cnt = 0;
                        //í£&#214;1&#188;&#198;êy&#198;÷
                        StopSoftTimer(0);       
                       
                        memset(g_Uart4_RX_Buf, 0, 25); //&#199;&#229;&#191;&#213;&#187;o′&#230;£&#172;&#214;&#216;D&#194;&#191;aê&#188;
                        comSendChar(COM4, 0x45);  //·μ&#187;&#216;′í&#206;ó
                }

                return 0;               

        }
               
}       
回复

使用道具 举报

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2023-2-13 14:17:18 | 显示全部楼层
eric2013 发表于 2019-4-19 02:22
帮你做了个。

新解压一个串口FIFO例子处理,任何地方都不要做修改,用下面的代码覆盖你的main.c文件即可 ...

请问这个一次性接受数据的多少要怎么修改,我的目标是发送500个数据,但实际最多只能发送250个,我修改了Buffer也是不行,想请问一下您这边有没办法
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-2-13 14:29:18 | 显示全部楼层
appleddd 发表于 2023-2-13 14:17
请问这个一次性接受数据的多少要怎么修改,我的目标是发送500个数据,但实际最多只能发送250个,我修改了 ...

这个自己排除下就行了,看看是没有接受到还是没有处理过来
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 02:52 , Processed in 0.234290 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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