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

標題: stm32單片機串口通信協議程序調試問題 [打印本頁]

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

你們看一看我的單片機程序吧!
   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中斷服務函數
  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; //判斷數據是否以0x0d結束
  41.   a=USART_ReceiveData(UART4);//接收數據
  42.   gg[k]=a;
  43.   k++;
  44.   }while(b==0);
  45.   for(b=0;b<k;b++)
  46.   {
  47.   USART_SendData(UART4,gg[b]);//發送數據
  48.   }
  49.   k=0;
  50. }
  51. }
復制代碼

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


作者: xuyaqi    時間: 2019-3-24 08:41
你的串口中斷程序有問題,給你個參考程序。
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中斷(接收到的數據必須是0x0d 0x0a結尾)
{
        Res =USART_ReceiveData(USART1);        //讀取接收到的數據
       
        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;//接收數據錯誤,重新開始接收          
                        }                 
                }
        }                    
}
作者: zeroL    時間: 2019-3-24 10:48
xuyaqi 發表于 2019-3-24 08:41
你的串口中斷程序有問題,給你個參考程序。
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  // ...

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

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

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

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


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

發來了
作者: wtmkimmy    時間: 2019-3-25 11:24
下載了你此程序調試一下,把你的程序修改如下就可以了,希望對你有幫助
        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 發表于 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 發表于 2019-3-25 11:27
查看了你的工程,修改如下就可以了,希望對你有幫助。
void  UART4_IRQHandler(void)
{

我現在加了判斷0x0a;串口就輸出不了了,我改變數組的大小,但輸出不會改變;列如:我把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
哪位大佬,誰能根據通信協議寫一個串口4的出來?幫幫我啊!
作者: zeroL    時間: 2019-3-28 16:00
有沒有懂得啊!




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩毛片中文字幕 | 一区二区中文 | 欧美一区2区三区4区公司 | 久草福利 | 日韩高清一区二区 | 一级毛片免费完整视频 | 日韩精品一区二区三区视频播放 | 国产成人在线视频播放 | av入口| 日韩欧美视频免费在线观看 | av毛片| 日韩在线观看 | 久操亚洲 | 国产成人精品综合 | 久久综合一区 | 国产一区二区不卡 | 国产精品污www在线观看 | 精品国产成人 | 国产在线精品一区二区三区 | 网站黄色av | 国产一级视频免费播放 | 久久激情视频 | 青青草一区二区 | 欧美在线免费 | 91精品国产91久久综合桃花 | 欧美性生活一区二区三区 | 亚洲欧美在线视频 | 国产毛片视频 | 91精品国产日韩91久久久久久 | 久久av影院 | 国产一区二区在线看 | 毛片视频免费观看 | 免费观看一级特黄欧美大片 | 中文字幕视频在线 | 免费一级黄色 | 国产一区二区三区四区三区四 | 国产在线第一页 | 欧美日韩国产一区二区三区 | 精品国产一区三区 | 精品欧美乱码久久久久久1区2区 | 欧美一区在线看 |