久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5460|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

串口的基本知識(shí)你掌握了嗎

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:412156 發(fā)表于 2018-10-19 14:34 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
       在做項(xiàng)目的時(shí)候是不是發(fā)現(xiàn)串口是最常用的通信接口,所以我自己整理了一下關(guān)于串口的一些常識(shí)性知識(shí),方便自己學(xué)習(xí)。
    我們常說的串口按電平分類的話有兩種,一種是TTL電平的串口,一種是232電平的串口。
首先我們先看一下這兩種電平的區(qū)別。
TTL電平標(biāo)準(zhǔn):輸出L:  <0.8V;  H: >2.4V,輸入L:  <1.2V:   H: >2.0V
TTL器件輸出低電平要小于0.8V,高電平要大于2.4V,輸入,低于1.2V就認(rèn)為是0,高于2.0就認(rèn)為是1.于是TTL電平的輸入低電平的噪聲容限就只有(O.8-0)/2=0.4V,高電平的噪聲容限為(5-2.4)/2=1.3V.
RS232標(biāo)準(zhǔn):
邏輯1的電平為-3~-15V,輯0的電平為+3~+15V,注意電平的定義反相了一次。

   然而TTL電平的串口還可以分為兩種UART與USART。我們打開stm32cubeMX看到stm32F103有2個(gè)UART3個(gè)USART。在日常我們就可以說,它有5個(gè)串口,因?yàn)?/font>USART可以配置成UART
    UART與USART都是單片機(jī)上的串口通信,他們之間的區(qū)別如下:
首先從名字上看:
UART:universal asynchronous receiver and transmitter通用異步收/發(fā)器
USART:universal synchronous asynchronous receiver and transmitter通用同步/異步收/發(fā)器
  從名字上可以看出,USART在UART基礎(chǔ)上增加了同步功能,即USART是UART的增強(qiáng)型,事實(shí)也確實(shí)是這樣。但是具體增強(qiáng)到了什么地方呢?
  其實(shí)當(dāng)我們使用USART在異步通信的時(shí)候,它與UART沒有什么區(qū)別,但是用在同步通信的時(shí)候,區(qū)別就很明顯了:大家都知道同步通信需要時(shí)鐘來觸發(fā)數(shù)據(jù)傳輸,也就是說USART相對(duì)UART的區(qū)別之一就是能提供主動(dòng)時(shí)鐘。如STM32的USART可以提供時(shí)鐘支持ISO7816的智能卡接口。


     在實(shí)際的項(xiàng)目中用的最多的還是UART ,配置為:N, 8 ,1.波特率常用的有2400,9600,57600,115200.我們用串口來干什么呢?用過一些模塊的工程師會(huì)知道,很多模塊都是通過串口來控制或者通過串口透?jìng)鲾?shù)據(jù)的,比如gsm(2g,4g),gps,wifi,藍(lán)牙等等,這些模塊都是通過串口來控制。所以作為一個(gè)工程師,必須要搞懂串口。下面我們通過Loto虛擬示波器采集不同波特率的UART 波形:

對(duì)比理論的時(shí)序圖,我們找找起始位和停止位,這個(gè)數(shù)據(jù)是多少?
有時(shí)候我們面試會(huì)考一個(gè)題目,那就是UART波特率9600的時(shí)候,它的一個(gè)bit是多長(zhǎng)時(shí)間,這個(gè)怎么算?初學(xué)者肯定蒙了,我用串口直接就配置然后發(fā)數(shù)據(jù)就行了,從來沒算過,下面我總結(jié)一下:

波特率2400:1/2400416.67*10^(-6)s=416.67us
波特率4800:1/4800208.33*10^(-6)s=208.33us
波特率9600:1/9600104.17*10^(-6)s=104.17us
波特率19200:1/1920052.08*10^(-6)s=52.08us
波特率57600:1/5760017.36*10^(-6)s=17.36us
波特率115200:1/1152008.68*10^(-6)s=8.68us

對(duì)比我們用Loto虛擬示波器采集的數(shù)據(jù)看看是不是一致呢?


我們算這個(gè)數(shù)據(jù)有什么用呢?是的!沒錯(cuò)!就是模擬串口!當(dāng)單片機(jī)串口不夠用的時(shí)候項(xiàng)目中會(huì)用到。接下來我會(huì)分析幾個(gè)論友寫的代碼,逐步深入理解TTL串口。

下面這個(gè)模擬串口的代碼:
首先說它的發(fā)送吧,發(fā)送一個(gè)字節(jié),先發(fā)送起始位OI_TXD = 0;  然后delay_us(BuadRate_9600);然后依次從低位開始檢測(cè)Data的每一位,從而拉高拉低OI_TXD,然后延時(shí),移位,重復(fù)8次,最后發(fā)送停止位發(fā)送完一個(gè)Data
接收的話:它是stm32開了個(gè)定時(shí)器4和一個(gè)外部中斷.外部中斷采到下降沿,然后定時(shí)器設(shè)置為107us中斷一次,去采集一個(gè)bit,為什么是107us呢?因?yàn)榇藭r(shí)波特率是9600,一個(gè)bit是104.17us,然后可以依次采集每個(gè)bit,直到采完一個(gè)data。(個(gè)人感覺107us不穩(wěn)定)

  1. /**
  2. *軟件串口的實(shí)現(xiàn)(IO模擬串口)
  3. * 波特率:9600    1-8-N
  4. * TXD : PC13
  5. * RXD : PB14
  6. * 使用外部中斷對(duì)RXD的下降沿進(jìn)行觸發(fā),使用定時(shí)器4按照9600波特率進(jìn)行定時(shí)數(shù)據(jù)接收。
  7. * Demo功能: 接收11個(gè)數(shù)據(jù),然后把接收到的數(shù)據(jù)發(fā)送出去
  8. */


  9. #define OI_TXD        PCout(13)
  10. #define OI_RXD        PBin(14)

  11. #define BuadRate_9600        100

  12. u8 len = 0;        //接收計(jì)數(shù)
  13. u8 USART_buf[11];  //接收緩沖區(qū)

  14. enum{
  15.         COM_START_BIT,
  16.         COM_D0_BIT,
  17.         COM_D1_BIT,
  18.         COM_D2_BIT,
  19.         COM_D3_BIT,
  20.         COM_D4_BIT,
  21.         COM_D5_BIT,
  22.         COM_D6_BIT,
  23.         COM_D7_BIT,
  24.         COM_STOP_BIT,
  25. };

  26. u8 recvStat = COM_STOP_BIT;
  27. u8 recvData = 0;

  28. void IO_TXD(u8 Data)
  29. {
  30.         u8 i = 0;
  31.         OI_TXD = 0;  
  32.         delay_us(BuadRate_9600);
  33.         for(i = 0; i < 8; i++)
  34.         {
  35.                 if(Data&0x01)
  36.                         OI_TXD = 1;  
  37.                 else
  38.                         OI_TXD = 0;         
  39.                
  40.                 delay_us(BuadRate_9600);
  41.                 Data = Data>>1;
  42.         }
  43.         OI_TXD = 1;
  44.         delay_us(BuadRate_9600);
  45. }
  46.         
  47. void USART_Send(u8 *buf, u8 len)
  48. {
  49.         u8 t;
  50.         for(t = 0; t < len; t++)
  51.         {
  52.                 IO_TXD(buf[t]);
  53.         }
  54. }
  55.         
  56. void IOConfig(void)
  57. {
  58.         GPIO_InitTypeDef  GPIO_InitStructure;
  59.         NVIC_InitTypeDef NVIC_InitStructure;
  60.          EXTI_InitTypeDef EXTI_InitStruct;
  61.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);         //使能PB,PC端口時(shí)鐘
  62.          
  63.          //SoftWare Serial TXD
  64.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;            
  65.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  66.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz         
  67.         GPIO_Init(GPIOC, &GPIO_InitStructure);                                          
  68.         GPIO_SetBits(GPIOC,GPIO_Pin_13);                                                
  69.          
  70.          
  71.         //SoftWare Serial RXD
  72.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
  73.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  74.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;               
  75.         GPIO_Init(GPIOB, &GPIO_InitStructure);         

  76.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);
  77.         EXTI_InitStruct.EXTI_Line = EXTI_Line14;
  78.         EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
  79.         EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling; //下降沿觸發(fā)中斷
  80.         EXTI_InitStruct.EXTI_LineCmd=ENABLE;
  81.         EXTI_Init(&EXTI_InitStruct);


  82.         NVIC_InitStructure.NVIC_IRQChannel= EXTI15_10_IRQn ;
  83.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
  84.         NVIC_InitStructure.NVIC_IRQChannelSubPriority =2;  
  85.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;  
  86.         NVIC_Init(&NVIC_InitStructure);  
  87.         
  88. }

  89. void TIM4_Int_Init(u16 arr,u16 psc)
  90. {
  91.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  92.         NVIC_InitTypeDef NVIC_InitStructure;

  93.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //時(shí)鐘使能
  94.         
  95.         //定時(shí)器TIM4初始化
  96.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值        
  97.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值
  98.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  99.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  100.         TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根據(jù)指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位
  101.         TIM_ClearITPendingBit(TIM4, TIM_FLAG_Update);
  102.         TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //使能指定的TIM3中斷,允許更新中斷

  103.         //中斷優(yōu)先級(jí)NVIC設(shè)置
  104.         NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;  //TIM4中斷
  105.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //先占優(yōu)先級(jí)1級(jí)
  106.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  //從優(yōu)先級(jí)1級(jí)
  107.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  108.         NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器                        
  109. }


  110. int main(void)
  111. {               
  112.          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級(jí)分組為組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  113.          delay_init();
  114.          IOConfig();
  115.          TIM4_Int_Init(107, 71);         //1M計(jì)數(shù)頻率
  116.          
  117.         while(1)
  118.         {
  119.                 if(len > 10)
  120.                 {
  121.                         len = 0;
  122.                         USART_Send(USART_buf,11);
  123.                 }
  124.         }
  125. }

  126. void EXTI15_10_IRQHandler(void)
  127. {
  128.         if(EXTI_GetFlagStatus(EXTI_Line14) != RESET)
  129.         {
  130.                 if(OI_RXD == 0)
  131.                 {
  132.                         if(recvStat == COM_STOP_BIT)
  133.                         {
  134.                                 recvStat = COM_START_BIT;
  135.                                 TIM_Cmd(TIM4, ENABLE);
  136.                         }
  137.                 }
  138.                 EXTI_ClearITPendingBit(EXTI_Line14);
  139.         }
  140. }

  141. void TIM4_IRQHandler(void)
  142. {  
  143.         if(TIM_GetFlagStatus(TIM4, TIM_FLAG_Update) != RESET)
  144.         {
  145.                 TIM_ClearITPendingBit(TIM4, TIM_FLAG_Update);        
  146.                  recvStat++;
  147.                 if(recvStat == COM_STOP_BIT)
  148.                 {
  149.                         TIM_Cmd(TIM4, DISABLE);
  150.                         USART_buf[len++] = recvData;        
  151.                         return;
  152.                 }
  153.                 if(OI_RXD)
  154.                 {
  155.                         recvData |= (1 << (recvStat - 1));
  156.                 }else{
  157.                         recvData &= ~(1 << (recvStat - 1));
  158.                 }        
  159.   }               
  160. }
復(fù)制代碼

還有一個(gè)例子
  1. #include "stm32f10x.h"
  2. #include "sys.h"
  3. #include "exti.h"
  4. #include "stdio.h"

  5. //加入以下代碼,支持printf函數(shù),而不需要選擇use MicroLIB         
  6. #if 1
  7. #pragma import(__use_no_semihosting)            
  8. //標(biāo)準(zhǔn)庫需要的支持函數(shù)                 
  9. struct __FILE
  10. {
  11.         int handle;

  12. };

  13. FILE __stdout;      
  14. //定義_sys_exit()以避免使用半主機(jī)模式   
  15. _sys_exit(int x)
  16. {
  17.         x = x;
  18. }
  19. //重定義fputc函數(shù)
  20. int fputc(int ch, FILE *f)
  21. {  
  22.     void SendOneByte(u8 Byte);
  23.         SendOneByte((uint8_t) ch);   
  24.         return ch;
  25. }
  26. #endif



  27. void SendOneByte(u8 Byte)
  28. {
  29.         u8 i=8,tmp;
  30.         TXD_low(); //發(fā)送起始位
  31.         delay_us(104);
  32.         //發(fā)送8位數(shù)據(jù)
  33.         for(i=0;i<8;i++)
  34.         {
  35.                 tmp        = (Byte >> i) & 0x01;  //低位在前

  36.                 if(tmp == 0)
  37.                 {
  38.                         TXD_low();
  39.                         delay_us(104);        //0               
  40.                 }
  41.                 else
  42.                 {
  43.                         TXD_high();
  44.                         delay_us(104);        //1               
  45.                 }        
  46.         }
  47. //        while(i--)
  48. //        {  
  49. //          MNUSART_TXD = (Byte&0x01);     //先傳低位
  50. //          delay_us(104);         
  51. //          Byte = Byte>>1;
  52. //          //無校驗(yàn)位
  53. //          MNUSART_TXD=1;//發(fā)送結(jié)束位
  54. //          delay_us(104);
  55.         
  56. //        }
  57.          TXD_high();
  58.          delay_us(104);

  59. }

  60. void SendBytes(u8 *str,u8 len)        //發(fā)送數(shù)組最好用這個(gè),也可發(fā)送字符串
  61. {
  62.   u16 i;
  63.   for(i=0;i<len;i++)
  64.   {
  65.            SendOneByte(str[i]);
  66.   
  67.   }

  68. }

  69. void SendStr(u8 *str) //發(fā)送字符串,發(fā)送數(shù)組如果帶0x00就中斷發(fā)送了
  70. {
  71. while(*str)
  72. SendOneByte(*str++);

  73. }

  74. int main(void)
  75. {
  76.   u8 len;
  77.   u8 hello[]={0x5a,0xa5,0x00,0x00,0x01};
  78.   delay_init();
  79.   EXTIX_Init();
  80.   //測(cè)試 發(fā)送一個(gè)字節(jié)
  81.   SendOneByte(0x00);
  82.   SendOneByte(0x01);
  83.   SendOneByte(0x02);
  84. //測(cè)試發(fā)送數(shù)組
  85. SendBytes(hello,5);
  86. //測(cè)試發(fā)送字符串
  87. // SendBytes("hello word",11);
  88. // SendStr("德瑪西亞");        

  89.   while(1)
  90.         {

  91.       if(USART_RX_STA&0x8000)
  92.           {         
  93.              printf("您發(fā)送的消息為:");
  94.                    len=USART_RX_STA&0x3fff;//得到此次接收到的數(shù)據(jù)長(zhǎng)度
  95.                  SendBytes(USART_RX_BUF,len);
  96.                  //也可以用下面的發(fā)送
  97. //                 SendStr(USART_RX_BUF);
  98. //                 for(len=0;len<200;len++)
  99. //                 USART_RX_BUF[len]=0;
  100.                    printf("");//插入換行
  101.                 USART_RX_STA=0;
  102.           }
  103.         }
  104. }

復(fù)制代碼

  1. #include "exti.h"
  2. #include "stm32f10x_gpio.h"
  3. #include "stm32f10x_exti.h"
  4. #include "sys.h"


  5. u8 tmp;
  6. u8 USART_RX_BUF[USART_REC_LEN];
  7. u16 USART_RX_STA=0;
  8. //extern SendOneByte(u8 Byte);
  9. void EXTIX_Init(void)
  10. {
  11.                 GPIO_InitTypeDef GPIO_InitStructure;
  12.                 EXTI_InitTypeDef EXTI_InitStructure;
  13.                 NVIC_InitTypeDef NVIC_InitStructure;
  14.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);

  15.                 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                                 //PA.9 端口配置
  16.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  17.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  18.                 GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //根據(jù)設(shè)定參數(shù)初始化GPIOB.5
  19.                 GPIO_SetBits(GPIOA,GPIO_Pin_9);                                                

  20.                 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  21.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                          //浮空輸入
  22.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                             
  23.                 GPIO_Init(GPIOA, &GPIO_InitStructure);                                          
  24.                 GPIO_SetBits(GPIOA,GPIO_Pin_10);

  25.                 //GPIOA.10 中斷線以及中斷初始化配置   下降沿觸發(fā)
  26.                 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource10);

  27.                 EXTI_InitStructure.EXTI_Line=EXTI_Line10;        
  28.                 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        
  29.                 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  30.                 EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  31.                 EXTI_Init(&EXTI_InitStructure);                 //根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器


  32.                 NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
  33.                 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;
  34.                 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  35.                 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  36.                 NVIC_Init(&NVIC_InitStructure);
  37.                         

  38. }


  39. void EXTI15_10_IRQHandler(void)
  40. {
  41.    u8 i=9;
  42.    if(EXTI_GetITStatus(EXTI_Line10) != RESET)
  43.    {
  44.                 /* Disable the Selected IRQ Channels -------------------------------------*/
  45.                 NVIC->ICER[EXTI15_10_IRQn >> 0x05] =
  46.                 (uint32_t)0x01 << (EXTI15_10_IRQn & (uint8_t)0x1F);
  47.                 EXTI_ClearITPendingBit(EXTI_Line10);
  48.                 delay_us(30);
  49.                 while(i--)
  50.                 {
  51.                 tmp >>=1;
  52.                 if(GPIOA->IDR&0x0400) tmp |=0x80;
  53.                 delay_us(104);

  54.         }

  55.           if((USART_RX_STA&0x8000)==0)
  56.           {
  57.                         if(USART_RX_STA&0x4000)
  58.                         {
  59.                         if(tmp!=0x0a) USART_RX_STA=0;
  60.                         else USART_RX_STA |=0x8000;
  61.                         }
  62.                         else
  63.                         {
  64.                         if(tmp==0x0d) USART_RX_STA|=0x4000;
  65.                         else
  66.                         {
  67.                         USART_RX_BUF[USART_RX_STA&0X3FFF]=tmp ;
  68.                         USART_RX_STA++;
  69.                         if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收數(shù)據(jù)錯(cuò)誤,重新開始接收         
  70.                         }
  71.                         }
  72.          
  73.           }

  74.                 EXTI_ClearITPendingBit(EXTI_Line10);
  75.                 NVIC->ISER[EXTI15_10_IRQn >> 0x05] =
  76.                 (uint32_t)0x01 << (EXTI15_10_IRQn & (uint8_t)0x1F);

  77.    }

  78. }

復(fù)制代碼

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2018-10-20 00:55 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:64985 發(fā)表于 2018-12-20 14:54 | 只看該作者
這個(gè)帖子不錯(cuò)
回復(fù)

使用道具 舉報(bào)

地板
ID:280298 發(fā)表于 2019-2-1 10:59 | 只看該作者
呃,這個(gè)示波器,就是縱向分辨率有點(diǎn)低了……
回復(fù)

使用道具 舉報(bào)

5#
ID:1595 發(fā)表于 2019-7-30 12:35 | 只看該作者
回復(fù)

使用道具 舉報(bào)

6#
ID:1595 發(fā)表于 2019-7-30 12:36 | 只看該作者
您好!請(qǐng)問《串口的基本知識(shí)你演掌握了嗎》這個(gè)貼子中的串口波形上有過沖是怎么回事呢?

串口波形.png (90.67 KB, 下載次數(shù): 80)

串口波形.png
回復(fù)

使用道具 舉報(bào)

7#
ID:592509 發(fā)表于 2019-7-30 14:02 | 只看該作者
不錯(cuò),學(xué)習(xí)了!
回復(fù)

使用道具 舉報(bào)

8#
ID:241242 發(fā)表于 2019-7-31 10:02 | 只看該作者
專業(yè),學(xué)習(xí)!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚卅毛片 | 亚洲毛片一区二区 | 91玖玖| 日本成人一区二区 | 91精品国产综合久久小仙女图片 | 久久免费香蕉视频 | 操人网站| 欧美极品视频 | 日韩在线观看网站 | 久久久久国产精品一区 | 99久久国产免费 | 国产成人精品一区二区三区 | 综合久久99 | 欧美 日韩 国产 在线 | 日韩在线免费视频 | 久久精品国产免费高清 | 99爱免费| 国产精品视频免费观看 | 亚洲国产精品99久久久久久久久 | 欧美日韩1区2区3区 欧美久久一区 | 精品国产乱码久久久久久1区2区 | 久久精品亚洲 | 九九激情视频 | 99这里只有精品视频 | 欧美黄色片 | 在线成人福利 | 国产一区日韩在线 | 亚洲欧美精品国产一级在线 | 久久久综合精品 | 久热中文字幕 | 成人精品一区二区三区中文字幕 | 超碰日本 | 久久综合伊人一区二区三 | 一区二区不卡 | 天天爱天天操 | 精品国产乱码久久久久久丨区2区 | 久久精品视频在线免费观看 | 欧美一级大片 | 一级在线免费观看 | 中文字幕综合 | 久久乐国产精品 |