欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: stm32串口數據顯示問題 [打印本頁]

作者: xda    時間: 2020-2-24 17:46
標題: stm32串口數據顯示問題
大佬們,我又來問問題我再學習stm32串口的時候,看的是浦中的視屏資料,覺得操作起來還是很簡單的,但是當我想拓展一下的時候出現了問題,哎

我打算把串口的數據顯示在屏幕上
使用浦中教的串口寫法,寫出接受部分,
void USART2_IRQHandler(void)                        //串口2 中斷服務程序
{
                        static u16 count = 0;
                        u16 rdata;
                        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
                                {
                                         rdata = USART_ReceiveData(USART2);        //讀取接收到的數據
                                         Res[count++] = rdata;                                               
                                         USART2->DR;
                                                //USART_SendData(USART2,rdata);
                                                //while(USART_GetFlagStatus(USART2,USART_FLAG_TC) != SET);
                                }       
                                        USART_ClearFlag(USART2,USART_IT_RXNE);
                                        USART2->DR;
                                        USART2->SR;
                       
}

然后把接受到res里的數據在主函數中調用lcd函數顯示出來
LCD_ShowString (0,0,&Res);
這個時候數據會一直接受一直存,不會清控,接受什么數據都會排在后面顯示出來
然后我的想法就是直接清空res,屏幕上就會一直顯示不同的數據了,但是又沒想明白放在那里

還有就是想問一下sprintf函數到底應該如何用,早先我顯示的時候是這樣寫的(A是char類型的)
sprintf(A,"%S", Res[0]);
LCD_ShowString (0,0,A);

然后屏幕上什么都不顯示。。。


顯示代碼:
void LCD_ShowString(u16 x,u16 y,const u8 *p)
{         
    while(*p!='\0')
    {      
        if(x>LCD_W-16){x=0;y+=16;}
        if(y>LCD_H-16){y=x=0;LCD_Clear(RED);}
        LCD_ShowChar(x,y,*p,0);
        x+=8;
        p++;
    }  
}


已經整麻了。。。自學得有點暈頭轉向。。。。瘋狂碰壁。。。望大佬指點

作者: xda    時間: 2020-2-24 20:22
如果我在這后面添加了清零Res[count++] = rdata;
那么在屏幕顯示上只能接受到最后一位,比如發了1234,就只有4,如果發送速度快一點,還會出現24,34這樣的,我想這應該是指針問題,但是還沒想明白怎么解決

作者: adject    時間: 2020-2-25 00:20
LCD_ShowString (0,0,&Res);改成LCD_ShowString (0,0,Res);看看
作者: xda    時間: 2020-2-25 11:49
adject 發表于 2020-2-25 00:20
LCD_ShowString (0,0,&Res);改成LCD_ShowString (0,0,Res);看看

不能去哦,去了就直接接受回來的數據不顯示了
作者: haierzaifei11    時間: 2020-2-25 13:11
LCD_ShowChar(x,y,*p,0);,怎么多出個0來呢?
作者: xda    時間: 2020-2-25 16:08
haierzaifei11 發表于 2020-2-25 13:11
LCD_ShowChar(x,y,*p,0);,怎么多出個0來呢?

嗷嗷,這個是showchar里面有個模式的原因,代碼如下
/在指定位置顯示一個字符,包括部分字符
//x:0~127
//y:0~63
//mode:0,反白顯示;1,正常顯示                                 
//size:選擇字體 16/12
  1. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
  2. {              
  3.         unsigned char c=0,i=0;        
  4.                 c=chr-' ';//得到偏移后的值                        
  5.                 if(x>Max_Column-1){x=0;y=y+2;}
  6.                 if(Char_Size ==16)
  7.                         {
  8.                         OLED_Set_Pos(x,y);        
  9.                         for(i=0;i<8;i++)
  10.                         OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
  11.                         OLED_Set_Pos(x,y+1);
  12.                         for(i=0;i<8;i++)
  13.                         OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
  14.                         }
  15.                         else {        
  16.                                 OLED_Set_Pos(x,y);
  17.                                 for(i=0;i<6;i++)
  18.                                 OLED_WR_Byte(F6x8[c][i],OLED_DATA);
  19.                                 
  20.                         }
  21. }
復制代碼

作者: xda    時間: 2020-2-25 21:28
別沉哇,嚶嚶嚶
作者: 司海心    時間: 2020-2-26 10:14
添加頭文件   #include <string.h>,并在  USART2->DR;USART2->SR;后面添加  memset(Res,0,sizeof(Res));試試
作者: zjgchenzhen    時間: 2020-2-26 15:23
建議你網上看下人家調通的程序,網上很多的
作者: zjgchenzhen    時間: 2020-2-26 15:26
#include "stdio.h",void LCD_ShowString(u16 x,u16 y,const u8 *p)該函數的參數統一
作者: xda    時間: 2020-2-27 00:17
司海心 發表于 2020-2-26 10:14
添加頭文件   #include ,并在  USART2->DR;USART2->SR;后面添加  memset(Res,0,sizeof(Res));試試

主函數里面還是直接用showstring這個函數嗎,還是調用sprintf這個函數以后再調用showstring呢,如果還是直接使用showstring函數,接受回來的字符串還是會一直累加直到占滿屏幕,如果調用sprint函數再調用showstring直接是不顯示

我的sprintf函數是這樣寫的
char A
sprintf(A,"USART: %S", Res[0]);
LCD_ShowString (0,0,A);
是否是因為我的寫法有問題,或者根本函數使用方法不對呢,望回復

作者: xda    時間: 2020-2-27 00:18
zjgchenzhen 發表于 2020-2-26 15:26
#include "stdio.h",void LCD_ShowString(u16 x,u16 y,const u8 *p)該函數的參數統一

說實話,沒看明白
作者: xda    時間: 2020-2-27 00:21
zjgchenzhen 發表于 2020-2-26 15:23
建議你網上看下人家調通的程序,網上很多的

看了呢,但是移植過來就不對了呢,usart還是tft程序我都有參考,但是只能實現單一功能,初學stm32,還是菜鳥代碼看不懂的我就抄,這是實在看不明白了,所以來論壇請教
作者: hsdy01    時間: 2020-2-27 15:04
不管是串口還是TFT,測試時先將單個功能代碼測試,其他功能代碼屏蔽,單個測試




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