精华内容
下载资源
问答
  • 在使用ZigBee进行数据透传的时候,我遇到了这样的情况:负责采集数据的两个单片机之间的波特率不相同,一个是38400,另一个是115200,但是负责传输数据的CC2530除了波特率之外,其它的代码都一样,所以使CC2530可以...

      在使用ZigBee进行数据透传的时候,我遇到了这样的情况:负责采集数据的两个单片机之间的波特率不相同,一个是38400,另一个是115200,但是负责传输数据的CC2530除了波特率之外,其它的代码都一样,所以使CC2530可以自适应波特率的话,那么只需要准备一份代码,一种ZCC2530模块,可以方便使用。
      处理的逻辑是这样的:38400波特率的单片机上电之后不停给CC2530发送数据“0x55”,CC2530上电默认波特率38400,如果收到“0x55”,则返回一个字符“#”,此单片机收到“#”后不再发送0x55,开始处理自己的业务。
      如果与CC2530加入网络后一定时间内(比如3s)没有收到“#”,则说明与之相连的不是38400波特率的单片机,则把自己的波特率改为115200。
    CC2530的串口初始化:

    static  halUARTCfg_t uartConfig;//将串口的配置结构体申请为全局的
      uartConfig.configured           = TRUE;              // 2x30 don't care - see uart driver.
      uartConfig.baudRate             = HAL_UART_BR_38400;
      uartConfig.flowControl          = FALSE;
      uartConfig.flowControlThreshold = SERIAL_APP_THRESH; // 2x30 don't care - see uart driver.
      uartConfig.rx.maxBufSize        = SERIAL_APP_RX_SZ;  // 2x30 don't care - see uart driver.
      uartConfig.tx.maxBufSize        = SERIAL_APP_TX_SZ;  // 2x30 don't care - see uart driver.
      uartConfig.idleTimeout          = SERIAL_APP_IDLE;   // 2x30 don't care - see uart driver.
      uartConfig.intEnable            = TRUE;              // 2x30 don't care - see uart driver.
      uartConfig.callBackFunc         = SerialApp_CallBack;
      HalUARTOpen (SERIAL_APP_PORT, &uartConfig);
    

    串口接收数据的处理函数。使用bdrOKflag来标记是否已经确定波特率。

    static void SerialApp_CallBack(uint8 port, uint8 event)
    {
      (void)port;
      if ((event & (HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT)) &&
    #if SERIAL_APP_LOOPBACK
          (SerialApp_TxLen < SERIAL_APP_TX_MAX))
    #else
          !SerialApp_TxLen)
    #endif
      {
        SerialApp_TxLen = HalUARTRead(SERIAL_APP_PORT, SerialApp_TxBuf, SERIAL_APP_TX_MAX); //将串口数据读入buf
        if(SerialApp_TxLen > 0)
        {
          if(bdrOKflag)//波特率的确定标志
          {
            HalLedBlink(HAL_LED_2,2,50,200);//转发消息  绿灯闪2下
             SerialApp_OTAData(&SerialApp_TxAddr,SERIALAPP_CLUSTERID1,SerialApp_TxBuf, SerialApp_TxLen);
          }
             if (0x55 == SerialApp_TxBuf[0])
          {
            HalLedBlink(HAL_LED_1,2,50,200);//红灯闪两下  说明是38400的波特率
              uint8 a = '#';
              HalUARTWrite(SERIAL_APP_PORT, &a, 1); //通过串口发送给网关         
              bdrOKflag = 1;
          }
        }
        SerialApp_TxLen = 0;
      }
    }
    

      设置一个事件用于改变波特率。在ZDO_STATE_CHANGE,也就是设备加入网络的时候设置一个事件定时器,3s后执行。
      在3s后触发事件CHANGEBAUDRATE_EVT ,如果bdrOKflag 没被标记为1,则更换波特率。

    UINT16 SerialApp_ProcessEvent( uint8 task_id, UINT16 events )
    {
      (void)task_id;  // Intentionally unreferenced parameter
    
      if ( events & SYS_EVENT_MSG )
      {
        afIncomingMSGPacket_t *MSGpkt;
    
        while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SerialApp_TaskID )) )
        {
          switch ( MSGpkt->hdr.event )
          {         
    。。。。。。。。
          case ZDO_STATE_CHANGE:
              SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
              if(SampleApp_NwkState == DEV_END_DEVICE) //判定当前设备类型
              {
                HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);//红灯亮。绿灯闪烁5下
                HalLedBlink(HAL_LED_2,5,50,200);
                osal_start_timerEx(SerialApp_TaskID, CHANGEBAUDRATE_EVT, 3000);
              }
            break;
          default:
            break;
          }
    
          osal_msg_deallocate( (uint8 *)MSGpkt );
        }
    。。。。。。。。。。
        return ( events ^ SYS_EVENT_MSG );
      }
    。。。。。。。。。。。。。
        if ( events & CHANGEBAUDRATE_EVT ) //切换波特率的事件
      {
        if (bdrOKflag == 0)
        {
          uartConfig.baudRate             = HAL_UART_BR_115200;
          HalUARTOpen (SERIAL_APP_PORT, &uartConfig);
          bdrOKflag = 1;
          }
          return ( events ^ CHANGEBAUDRATE_EVT );
      }
    。。。。。。。。。。。。。。。
    展开全文
  • 波特率计算与设置 CC2530的波特率由BAUD_E和BAUD_M共同决定。 计算公式为: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hR6Caeo8-1621817061280)(十三、CC2530串口及相关寄存器.assets...

    CC2530串口资源概述

    CC2530有两个串行通信接口USART0和USART1,它们能够分别运行于异步UART模式或者同步SPI模式

    通常说的串口是指异步UART模式。

    波特率计算与设置

    CC2530的波特率由BAUD_E和BAUD_M共同决定。

    计算公式为:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hR6Caeo8-1621817061280)(十三、CC2530串口及相关寄存器.assets/clip_image002.gif)]

    由于计算公式较为复杂,但是我们开发中常用的波特率就就那么几个,所以一般不用公式进行计算,常用的波特率直接查表直接使用。

    波特率32MHZ系统时钟
    UxBAUD.BAUD_MUxGCR.BAUD_E
    4800597
    9600598
    19200599
    5760021610
    11520021611
    U0BAUD=59 //32MHZ系统时钟9600波特率的UxBAUD_M
    U0GCR=8 //32MHZ系统时钟9600波特率的UxGCR.BAUD_E
    

    串口0的UART初始化设置

    void Init_Uart0()
    {
        PERCFG &=~0X01;//将串口0的引脚映射到位置1,即P0_2和P0_3(其实这个语句也可以不写,系统默认的	
        P0SEL=0X0C; //将P0_2和P0_3端口设置成外设功能
        //---------使用CC2530的内部32MHZ晶振产生9600波特率
        U0BAUD=59;
        U0GCR=8;
        U0UCR |=0X80; //禁止流控,8位数据,清除缓冲器。将第7位置1,其它保持默认就行。
        U0CSR |=0XC0; //选择工作模式为UART模式,使能接收器
        UTX0IF=0;	  //清除TX发送中断标志位
        URX0IF=0;	  //清除RX接收终端标志位
        URX0IE=1;	  //开启URAT0的接收中断
        EA=1;		  //开启总中断
    }
    
    展开全文
  • CC2530学习(四)CC2530串行接口

    千次阅读 多人点赞 2019-10-31 17:36:11
    在TI公司提供的数据手册中,给出了32MHz系统时钟下各常用波特率的参数值,由计算公式亦不难得出16MHz系统时钟下对应的参数值。 UART口与计算机的COM口连接 先认识两种电平:TTL电平和RS232电平。 TTL电平 :...

    并行通信与串行通信

    微控制器与外设之间的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。
    并行通信:指数据的各位同时发送或接收,每个数据位使用单独的一条导线。传输速度快、效率高,但需要的数据线较多,成本高。
    串行通信:指数据一位接一位地顺 序发送或接收。需要的数据线少,成本低,但传输速度慢,效率低。

    从中我们可以了解到两种通信方式各有各自的优缺点,在实际应用中根据不同情况而定。

    CC2530的串口通信模块

    CC2530有两个串行通信接口USART0USART1,并且它们都能够分别运行于异步UART模式或者同步SPI模式。具体用于那种模式通过设置U0CSR寄存器来选择。
    两个USART接口具有相同的功能,且它们有对应的外部I/O引脚映射关系。通过
    PERCFG寄存器设置。
    映射关系:
    位置1RX0 — P0_2 TX0 — P0_3 RX1 — P0_5 TX1 — P0_4
    位置2RX0 — P1_4 TX0 — P1_5 RX1 — P1_7 TX1 — P1_6

    对每个USART串口通信编程,本质是设置相关的5个寄存器:
    <1> UxCSR: USARTx的控制和状态寄存器。
    <2> UxUCR: USARTx的UART控制寄存器。
    <3> UxGCR: USARTx的通用控制寄存器。
    <4> UxDBUF:USARTx的接收/发送数据缓冲寄存器。
    <5> UxBAUD:USARTx的波特率控制寄存器。

    相关寄存器介绍

    接下来的代码部分会涉及到一些寄存器的各个位作用

    CLKCONCMD:时钟频率控制寄存器。
    在这里插入图片描述
    D7位为32KHZ时间振荡器选择,,0为32KRC震荡,1为32K晶振。默认为1。
    D6位为系统时钟选择。0为32M晶振,1为16M RC震荡。当D7位为0时D6必须为1。
    D5~D3为定时器输出标记。000为32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为 1MHZ,110为500KHZ,111为250KHZ。默认为001。需要注意的是:当D6为1时,定时器频率最高可采用频率为16MHZ。
    D2~D0:系统主时钟选择:000为32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为1MHZ,110为500KHZ,111为250KHZ。当D6为1时,系统主时钟最高可采用频率为16MHZ。

    CLKCONSTA:时间频率状态寄存器。
    在这里插入图片描述
    D7位为当前32KHZ时间振荡器频率。0为32KRC震荡,1为32K晶振。
    D6位为当前系统时钟选择。0为32M晶振,1为16M RC震荡。
    D5~D3为当前定时器输出标记。000为32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为 1MHZ,110为500KHZ,111为250KHZ。
    D2~D0为当前系统主时钟。000为32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为1MHZ,110为500KHZ,111为250KHZ。

    PERCFG:设置部分外设的I/O位置,0为默认I位置1,1为默认位置2
    在这里插入图片描述
    U0CSR:USART0控制与状态;
    在这里插入图片描述
    D7为工作模式选择,0为SPI模式,1为USART模式
    D6为UART接收器使能,0为禁用接收器,1为接收器使能。
    D5为SPI主/从模式选择,0为SPI主模式,1为SPI从模式。
    D4为帧错误检测状态,0为无错误,1为出现出错。
    D3为奇偶错误检测,0为无错误出现,1为出现奇偶校验错误。
    D2为字节接收状态,0为没有收到字节,1为准备好接收字节。
    D1为字节传送状态,0为字节没有被传送,1为写到数据缓冲区的字节已经被发送。
    D0为USART接收/传送主动状态,0为USART空闲,1为USART忙碌。

    U0GCR:USART0通用控制寄存器;
    在这里插入图片描述
    D7为SPI时钟极性:0为负时钟极性,1为正时钟极性;
    D6为SPI时钟相位:
    D5为传送为顺序:0为最低有效位先传送,1为最高有效位先传送。
    D4~D0为波特率设置:
    对于波特率设置我们这还有介绍:
    CC2530的波特率由BAUD_E和BAUD_M共同决定:
    在这里插入图片描述
    F为微控制器的系统时钟频率:16MHz或32MHz。
    在TI公司提供的数据手册中,给出了32MHz系统时钟下各常用波特率的参数值,由计算公式亦不难得出16MHz系统时钟下对应的参数值。
    在这里插入图片描述

    UART口与计算机的COM口连接

    先认识两种电平:TTL电平和RS232电平。
    TTL电平逻辑0----小于0.8V 逻辑1----大于2.4V。
    RS232电平逻辑0----5~15V 逻辑1---- -5~-15V。

    计算机的串行通信接口是RS-232的标准接口,而CC2530单片机的UART接口则是TTL电平,两者的电气规范不一致,所以要完成两者之间的数据通信,就需要借助接口芯片在两者之间进行电平转换,常用的有MAX232芯片。
    在这里插入图片描述
    注意:DB9接口中,公头和母头的排列顺序是不同的

    串口小实验

    这次小实验做的是CC2530串口0与串口助手连接,在32HMz的内部系统时钟下产生19200的波特率。从串口助手发送一个字符或者一个字符串到开发板,开发板又将收到的字符或者字符串回送到串口助手上。
    设计思路:
    <1> 初始化USART0口的各个寄存器
    <2> 设计字节发送函数
    <3> 设计接收完成中断服务函数
    <4> 解析接收到的数据并执行相对应的操作

    串口0初始化函数

    选择外设的引脚映射位置,并将对应的引脚设置为外设功能 ,然后对波特率、控制寄存器和中断的相关控制位进行设置。

    void initUART(void)
    {
      CLKCONCMD &= ~0x40;  //设置系统时钟源为32MHz晶振
      while(CLKCONSTA & 0x40);//等待晶振稳定
      CLKCONCMD &= ~0x47;//设置系统主时钟频率为32MHz
      
      PERCFG=0x00;  //选择位置1即P0_2,P0_3
      P0SEL=0x0c; //将P0_2,P0_3口设置为外设功能
      U0CSR |= 0xc0; //串口设置为UART异步通信模式并使能接收器
      U0GCR |=9;
      U0BAUD |=59;  //设置波特率为19200
      UTX0IF = 0; //UART0 TX中断标志初始置位1
      URX0IF = 0; //UART0 RX中断标志初始置位1
      //U0CSR |=0x40; //允许接收
      //IEN0 |=0x84;//开总中断,接收中断
      URX0IE = 1;//使能URAT0接收中断
      EA = 1; //使能总中断
    }
    

    数据接收中断服务函数

    #pragma vector =URX0_VECTOR
    __interrupt void UART0_ISR(void)
    {
      URX0IF = 0;  //清中断标志
      temp = U0DBUF;
      RxFlag=1;//接收标志置为1
    }
    

    发送字节函数

    void UartTX_Send_char(uchar Data)
    {
      U0DBUF = Data;
      while(UTX0IF==0);   //当发送成功标志位置为1后退出等待
      UTX0IF=0; //软件清除发送标志
    }
    

    实验源代码

    #include "iocc2530.h"
    #include<string.h>
    #define uchar unsigned char
    #define uint unsigned int
    //函数申明
    void initUART(void);//初始化串口
    void UartTX_Send_char(uchar Data);//发送字符
    
    uchar temp;
    uchar RxFlag=0;
    //串口初始化
    void initUART(void)
    {
      CLKCONCMD &= ~0x40;  //设置系统时钟源为32MHz晶振
      while(CLKCONSTA & 0x40);//等待晶振稳定
      CLKCONCMD &= ~0x47;//设置系统主时钟频率为32MHz
      
      PERCFG=0x00;  //选择位置1即P0_2,P0_3
      P0SEL=0x3c; //将P0_2,P0_3口设置为外设功能
      U0CSR |= 0xc0; //串口设置为UART异步通信模式并使能接收器
      U0GCR |=9;
      U0BAUD |=59;  //设置波特率为19200
      UTX0IF = 0; //UART0 TX中断标志初始置位1
      URX0IF = 0; //UART0 RX中断标志初始置位1
      //U0CSR |=0x40; //允许接收
      //IEN0 |=0x84;//开总中断,接收中断
      URX0IE = 1;//使能URAT0接收中断
      EA = 1; //使能总中断
    }
    void UartTX_Send_char(uchar Data)
    {
      U0DBUF = Data;
      while(UTX0IF==0);   //当发送成功标志位置为1后退出等待
      UTX0IF=0; //软件清除发送标志
    }
    //串口中断函数
    #pragma vector =URX0_VECTOR
    __interrupt void UART0_ISR(void)
    {
      URX0IF = 0;  //清中断标志
      temp = U0DBUF;
      RxFlag=1;//接收标志置为1
    }  
    void main(void)
    {
      initUART();
      while(1)
      {
        if(RxFlag==1)
        {
          UartTX_Send_char(temp);
          RxFlag=0;
        }
      }
    }
    

    本次介绍就到这了,谢谢大家的观看!

    展开全文
  • 2.学习CC2530单片机串口相关寄存器配置,实现串口通信功能; 4.6.2 实验讲解 CC2530芯片有两个串行接口UART0和UART1: UART0对应RXD(P02)、TXD(P03); UART1对应RXD(P04)、TXD(P05); 在开发板中只接出...

    4.6串口数据收发实验

    4.6.1 实验目的

    1.了解串口通信的相关知识;

    2.学习CC2530单片机串口相关寄存器配置,实现串口通信功能;

    4.6.2 实验讲解

    CC2530芯片有两个串行接口UART0和UART1:

    UART0对应RXD(P02)、TXD(P03);

    UART1对应RXD(P04)、TXD(P05);

    在开发板中只接出了串口0(UART0),从串口原理图就可以看出,CC2530的串口信号与P02、P03复用,由于USB接口的众多优势,越来越普遍的被应用到计算机以及工业现场,而RS232接口的市场地位也逐渐淡漠,如图4-6所示,我们的开发板将RS232 信号通过PL2303转换为USB信号与电脑或者工业设备进行串口通信。

    图4-6 开发板串口TTL与USB转换电路原理图

    要实现CC2530的串口通信除了掌握硬件电路原理,还有一个

    展开全文
  • CC2530入门教程-04】CC2530的定时/计数器原理与应用 【CC2530入门教程-03】CC2530的中断系统及外部中断应用 【CC2530入门教程-02】CC2530的通用I/O端口输入和输出控制 【CC2530入门教程-01】CC2530微控制器开发...
  • 基于CC2530-ADC采集特别坑

    千次阅读 2020-06-12 16:08:23
    基于CC2530-ADC采集特别坑写篇缘由暴躁脾气的小哥什么是ADC(简单讲 模拟量--> 数字量)CC2530的A/D转换位数(注意这里)初始化ADC相关寄存器功能部分处理AD部分 写篇缘由 博主是一个非常懒的人,能不关注就不用...
  • STM32串口通信相关知识 一、串行通信接口背景知识 处理器与外部设备通信... 而发送控制和接收器控制的时钟是由图中左下角产生的,图中右下角产生分数分频系数USARTDIV 波特率计算公式 控制寄存器1(USART_CR1)的位15
  • 目录1.CC2530的串口资源 1.CC2530的串口资源 CC2530有两个串行通信接口:异步UART模式: USART0和同步SPI模式: USART1 对于每个USART外设,有5个相关的寄存器(x时USART的编号,0或1) UxCSR: USARTx控制状态...
  • 1、波特率计算方法 在UART和SPI两种模式下,波特率都是由一个CC2430内在的波特率发生器产生,UxBAUD.BAUD_M[7:0]和UxGCR.BAUD_E[4:0]寄存器分别记录了转换的尾数和指数,公式如下: Buadrate=(256+Baud_M)*(2的...
  • iocc2530.h&gt;#include"stdio.h"#define uchar unsigned char#define uint unsigned intvoid init_UART0(void)/*初始化串口*/{ P0SEL|=0X3C;/*这里我们是选择P0_2,P0_3,P0_4,P0_5最...
  • 51单片机串口通讯为什么给T1附值以后芯片就默认该值为波特率,而不需要其他设置?是跟PCON或者SCON有关吗以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下...
  • 经过多方排查,发现是波特率设置错误 我选择的是工作方式1,所以波特率计算公式为:波特率 =(2^SMOD / 32) * 定时器T1的溢出率,SMOD为PCON寄存器的最高位值(0或1) 经过计算为2^0/32/(256-0xfd)*10000000=10416而我...
  • CC2530之UART串口通信

    万次阅读 2016-06-02 10:20:21
    CC2530之UART串口通信利用单片机的串口与计算机通信,可方便对各种实验数据进行观察。个人认为,学习一种新的单片机,除了永恒的LED外,第二个例程该是串口的通信实验。CC2530有两个串口,分别为USART0和USART1。...
  • S3C44B0的UART波特率计算公式 UBRDIVn = ( (int)(MCLK / (bps * 16) + 0.5) – 1 ) MCLK = Fout = Fpllo Bps = 1200,9600,19200,38400,57600,115200 CPU频率计算方法---PLL设置 根据 d...
  • CC2530芯片基础实验

    千次阅读 2018-11-21 11:18:36
    //baud_e 波特率设为115200 U0BAUD |= 216; //baud_m = BaudRate*2^(28-buad_e)/32M-256 //BaudRate=(256+baud_m)/2^(28-buad_e)x32MHz UTX0IF = 1; //接收中断标记 U0CSR |= 0X40; //允许接收 URX0...
  • 12M晶振下,STM32串口波特率设置问题

    千次阅读 2017-11-28 16:35:49
    使用外接12MHz的晶振,会造成很多的问题,如USART的波特率不正确,Systick走时不准等问题,在无论是在实际调试还是在软件模拟中都会发现这个情况,其实,这不能怪ST官方,我们必须肯定ST官方为方便用户开发所做的...
  • 02 TI CC2530的uart控制器

    千次阅读 2017-07-16 09:02:46
    发出数据时,就是根据波特率的位时间来改变tx脚的电平. 如二进制数据是’1’则用高电平表示, ‘0’则用低电平表示. 接收数据时,根据位时间来判断rx脚的电平, 如是高电平则表示’1’, 低电平表示’0’.作这样的...
  • 两个串口 UART0 对应的引脚为 P0_2--RX0 P0_3--TX0 UART1 对应的引脚为 P0_5--RX1 P0_4--TX0 ...可以运行于异步USART或者同步SPI模式 ...串口的波特率计算公式 常用波特率设置  
  • CC2541之串口(转)

    千次阅读 2018-04-16 14:02:26
    来源-作者@欣庸:https://www.cnblogs.com/chenzhao207/p/4531941.html建议读者阅读原文,确保获得完整的信息CC2541——串口CC2541有两个串行通信接口,分别是USART0和USART1,它们能够分别运行于异步UART模式或者...
  • cc2430/cc2530 ADC单次采样

    千次阅读 2012-06-24 20:20:12
     利用ADC转换CC2430片内温度传感器的温度值,通过串口将温度值发送到PC并显示出来。  (2)程序流程图  (3)实验源码及剖析 /*  实验说明:片内温度采集实验,通过串口0将数据发送到PC机 */ ...
  • ioCC2530.h> #include <string.h> #define D4 P1_0 #define D2 P1_1 #define D3 P1_2 #define uint unsigned int #define uchar unsigned char #define CLKSPD ( CLKCONCMD & 0x07 ) //getting the ...
  • Zigbee之旅(六):几个重要的CC2430基础实验——ADC单次采样 一、承上启下  在无线传感器网络中,很重要的一项就是将传感器的模拟值转换成数字量,以便于传输和处理。而ADC(Analog-to-Digital ...
  • CC3220学习笔记---UART(翻译)

    千次阅读 2017-05-30 09:12:16
    这一块相对较难吧,所以参考手册得细看,那就翻译吧。...最高速度达3Mbps的可编程波特率发生器。独立的16×8发送(TX)和接收(RX)FIFO以减少CPU中断服务载荷。FIFO长度可编程,包含1字节深度的操作以提供传统
  • 主要是因为:第一,通信双方必须事先设定相同的波特率这样才能成功通信,如果发送方和接收方按照不同的波特率通信则根本收不到,因此波特率最好是大家熟知的而不是随意指定的。 第二,常用的波特率经过长久发展,就...
  • //波特率设为115200 UTX0IF = 0; //UART0 TX中断标志初始置位0 U0CSR |= 0x40; //允许接收 IEN0 |= 0x84; //开总中断,接收中断 } /****************温度传感器初始化函数*******************/ void InitSensor...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 429
精华内容 171
关键字:

cc2530波特率计算公式