亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: stm32單片機串口通信協(xié)議程序調(diào)試問題 [打印本頁]

作者: zeroL    時間: 2019-3-24 02:17
標題: stm32單片機串口通信協(xié)議程序調(diào)試問題
我用的是stm32f103rc,我用我的代碼調(diào)試了倆三天都不行求各位大哥給我一個列子好不好
通信協(xié)議如下,我用的是串口四。

你們看一看我的單片機程序吧!
   u16 k=0;
   u8  gg[1];

  1. void Tongxin(void)//串口初始化
  2. {
  3. GPIO_InitTypeDef   GPIO_tongxin;
  4. USART_InitTypeDef  USART_tongxin;
  5. NVIC_InitTypeDef   NVIC_tongxin;

  6.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
  7. RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
  8. USART_DeInit(UART4);

  9. GPIO_tongxin.GPIO_Mode=GPIO_Mode_AF_PP ;
  10. GPIO_tongxin.GPIO_Pin=GPIO_Pin_10;
  11. GPIO_tongxin.GPIO_Speed=GPIO_Speed_50MHz;
  12. GPIO_Init(GPIOC,&GPIO_tongxin);

  13.     GPIO_tongxin.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  14. GPIO_tongxin.GPIO_Pin=GPIO_Pin_11;
  15. GPIO_tongxin.GPIO_Speed=GPIO_Speed_50MHz;
  16. GPIO_Init(GPIOC,&GPIO_tongxin);

  17. USART_tongxin.USART_BaudRate=115200;
  18. USART_tongxin.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  19. USART_tongxin.USART_Mode=USART_Mode_Rx |USART_Mode_Tx ;
  20. USART_tongxin.USART_Parity=USART_Parity_No;
  21. USART_tongxin.USART_StopBits=USART_StopBits_1;
  22. USART_tongxin.USART_WordLength=USART_WordLength_8b;
  23. USART_Init(UART4,&USART_tongxin);

  24. USART_Cmd(UART4,ENABLE);
  25. USART_ITConfig(UART4,USART_IT_RXNE,ENABLE);
  26. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

  27. NVIC_tongxin.NVIC_IRQChannel=UART4_IRQn;
  28. NVIC_tongxin.NVIC_IRQChannelCmd=ENABLE;
  29. NVIC_tongxin.NVIC_IRQChannelPreemptionPriority=3;
  30. NVIC_tongxin.NVIC_IRQChannelSubPriority=3;
  31. NVIC_Init(&NVIC_tongxin);
  32. }

  33. void  UART4_IRQHandler(void)//串口4中斷服務函數(shù)
  34. {
  35.     u8 a,b=0,c=0;
  36. if((USART_GetITStatus(UART4,USART_IT_RXNE))!=RESET)//判斷中斷
  37. {
  38.   
  39.   do{
  40.      if(a==0x0d)  b=1; //判斷數(shù)據(jù)是否以0x0d結(jié)束
  41.   a=USART_ReceiveData(UART4);//接收數(shù)據(jù)
  42.   gg[k]=a;
  43.   k++;
  44.   }while(b==0);
  45.   for(b=0;b<k;b++)
  46.   {
  47.   USART_SendData(UART4,gg[b]);//發(fā)送數(shù)據(jù)
  48.   }
  49.   k=0;
  50. }
  51. }
復制代碼

我對這個簡單協(xié)議深感無力,改了好幾天了,一直在調(diào),求各位大佬給我一個列子研究一下。


作者: xuyaqi    時間: 2019-3-24 08:41
你的串口中斷程序有問題,給你個參考程序。
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中斷(接收到的數(shù)據(jù)必須是0x0d 0x0a結(jié)尾)
{
        Res =USART_ReceiveData(USART1);        //讀取接收到的數(shù)據(jù)
       
        if((USART_RX_STA&0x8000)==0)//接收未完成
        {
                if(USART_RX_STA&0x4000)//接收到了0x0d
                {
                        if(Res!=0x0a)USART_RX_STA=0;//接收錯誤,重新開始
                        else USART_RX_STA|=0x8000;        //接收完成了
                }
                else //還沒收到0X0D
                {       
                        if(Res==0x0d)USART_RX_STA|=0x4000;
                        else
                        {
                                USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                                USART_RX_STA++;
                                if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收數(shù)據(jù)錯誤,重新開始接收          
                        }                 
                }
        }                    
}
作者: zeroL    時間: 2019-3-24 10:48
xuyaqi 發(fā)表于 2019-3-24 08:41
你的串口中斷程序有問題,給你個參考程序。
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  // ...

這個程序我看了,我老師說這個中斷發(fā)送倆個數(shù)據(jù)可以,因為他的用的是if語句判斷,只能接收一次,如果要接收多個數(shù)據(jù)需要什么循環(huán)什么東東,我不是很清楚!大佬能不能給我一個簡單一點的列子,就在中斷函數(shù)里面寫,不要用printf打印輸出
作者: xuyaqi    時間: 2019-3-24 11:29
zeroL 發(fā)表于 2019-3-24 10:48
這個程序我看了,我老師說這個中斷發(fā)送倆個數(shù)據(jù)可以,因為他的用的是if語句判斷,只能接收一次,如果要接 ...

你要把老師的要求說清楚,你把整個工程發(fā)出來別人才好判斷問題在哪。
作者: zeroL    時間: 2019-3-24 12:45
xuyaqi 發(fā)表于 2019-3-24 11:29
你要把老師的要求說清楚,你把整個工程發(fā)出來別人才好判斷問題在哪。

我串口初始化好了,中斷處理根據(jù)通信協(xié)議我寫不來,你寫一個簡單的程序,好不好!就根據(jù)那個協(xié)議寫一個串口中斷函數(shù)
作者: xuyaqi    時間: 2019-3-24 14:09
zeroL 發(fā)表于 2019-3-24 12:45
我串口初始化好了,中斷處理根據(jù)通信協(xié)議我寫不來,你寫一個簡單的程序,好不好!就根據(jù)那個協(xié)議寫一個串 ...

最好把工程發(fā)出來
作者: zeroL    時間: 2019-3-25 00:27
2.7z (178.29 KB, 下載次數(shù): 14)


作者: zeroL    時間: 2019-3-25 00:27
xuyaqi 發(fā)表于 2019-3-24 14:09
最好把工程發(fā)出來

發(fā)來了
作者: wtmkimmy    時間: 2019-3-25 11:24
下載了你此程序調(diào)試一下,把你的程序修改如下就可以了,希望對你有幫助
        void  UART4_IRQHandler(void)
{
    u8 a,b=0,c=0;
        if((USART_GetITStatus(UART4,USART_IT_RXNE))!=RESET)//ÅD¶ÏÖD¶Ï
        {
               
//                do{
                a=USART_ReceiveData(UART4);
                if(a==0x0d)  b=1;
                gg[k]=a;
                k++;       
//                }while(b==0);
               
                if(b==1)
                {
                        for(b=0;b<k;b++)
                        {
                                USART_SendData(UART4,gg[b]);//·¢Ëíêy¾Y
                                delay_us(1000);
                        }
                        k=0;                       
                }

  }
}
作者: wtmkimmy    時間: 2019-3-25 11:27
zeroL 發(fā)表于 2019-3-25 00:27


查看了你的工程,修改如下就可以了,希望對你有幫助。
void  UART4_IRQHandler(void)
{
    u8 a,b=0,c=0;
        if((USART_GetITStatus(UART4,USART_IT_RXNE))!=RESET)
        {
               
//                do{
                a=USART_ReceiveData(UART4);
                if(a==0x0d)  b=1;
                gg[k]=a;
                k++;       
//                }while(b==0);
               
                if(b==1)
                {
                        for(b=0;b<k;b++)
                        {
                                USART_SendData(UART4,gg);//·¢Ëíêy¾Y
                                delay_us(1000);
                        }
                        k=0;                       
                }

  }
}
作者: zeroL    時間: 2019-3-25 17:34
wtmkimmy 發(fā)表于 2019-3-25 11:27
查看了你的工程,修改如下就可以了,希望對你有幫助。
void  UART4_IRQHandler(void)
{

我現(xiàn)在加了判斷0x0a;串口就輸出不了了,我改變數(shù)組的大小,但輸出不會改變;列如:我把gg【k】自定義成倆位,輸入12345,該輸出12,但是程序輸出12345;大佬為什么?
void  UART4_IRQHandler(void)
{
    u8 a,b=0,c=0;
        if((USART_GetITStatus(UART4,USART_IT_RXNE))!=RESET)
        {
               
//                do{
                a=USART_ReceiveData(UART4);
    // if(a==0x0a)  c=1;
                if(a==0x0d)  b=1;
                gg[k]=a;
                k++;        
//                }while(b==0);
//                if(b==1&&a==1)
                if(b==1)
                {
                        for(b=0;b<k;b++)
                        {
                                USART_SendData(UART4,gg);
                                delay_us(1000);
                        }
                        k=0;      
                }
  }
}


作者: zeroL    時間: 2019-3-26 23:11
哪位大佬,誰能根據(jù)通信協(xié)議寫一個串口4的出來?幫幫我!
作者: zeroL    時間: 2019-3-28 16:00
有沒有懂得!




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1