標(biāo)題: 請(qǐng)教STM32單片機(jī)串口發(fā)送數(shù)據(jù)顯示亂碼問(wèn)題 [打印本頁(yè)]

作者: danpianjii1    時(shí)間: 2022-7-31 17:32
標(biāo)題: 請(qǐng)教STM32單片機(jī)串口發(fā)送數(shù)據(jù)顯示亂碼問(wèn)題
使用stm32c8t6最小系統(tǒng)板,連接外部時(shí)鐘模塊,讀取外部時(shí)鐘模塊的時(shí)間數(shù)據(jù)(16進(jìn)制數(shù)據(jù)),將得到的時(shí)間數(shù)據(jù)從串口發(fā)回到串口助手,但是在串口助手上16進(jìn)制顯示正常,非16進(jìn)制顯示就是框框,如圖,代碼如下,怎樣顯示正常的時(shí)間
         if(inquiries_mewtime_STA!=0)//發(fā)送時(shí)間問(wèn)詢指令
                {
                        second=Read1307(0x00);//問(wèn)詢秒時(shí)間指令
                        minute=Read1307(0x01);//問(wèn)詢分時(shí)間指令
                        hour=Read1307(0x02);
                        week=Read1307(0x03);
                        day=Read1307(0x04);
                        month=Read1307(0x05);
                        year=Read1307(0x06);        
                        UART1SendByte(year);UART1SendByte(month);UART1SendByte(day);//發(fā)送時(shí)間指令
                        UART1SendByte(hour);UART1SendByte(minute);UART1SendByte(second);//發(fā)送時(shí)間指令
                        delay_ms(1000);
                        inquiries_mewtime_STA = 0;//發(fā)送時(shí)間問(wèn)詢指令復(fù)位                                                
                }

其中的UART1SendByte如下
/*發(fā)送一個(gè)字節(jié)數(shù)據(jù)*/
void UART1SendByte(unsigned char SendData)
{      
    USART_SendData(USART1,SendData);
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    USART_ClearFlag(USART1,USART_FLAG_TC);        
}  


1.png (2.62 KB, 下載次數(shù): 31)

1.png

2.png (1.58 KB, 下載次數(shù): 40)

2.png

作者: Y_G_G    時(shí)間: 2022-7-31 17:32
如果只是串口通訊
ASCII用sprintf函數(shù)簡(jiǎn)單char   k[12];//數(shù)組長(zhǎng)度自己根據(jù)要顯示多少位調(diào)整                                                        
unsigned char a,i=0;
sprintf(k,"%d",dat);                                               
for(a=0;k[a]!='\0';a++)                 
        {       
                UART1SendByte(Page,Start_SEG,k[a]); //發(fā)送一個(gè)字節(jié)
        }


作者: Hephaestus    時(shí)間: 2022-7-31 21:12
你又沒(méi)有轉(zhuǎn)換成ASCII碼,當(dāng)然是16進(jìn)制顯示正常,ASCII碼是亂碼了。
作者: matlab?    時(shí)間: 2022-8-1 08:37
有沒(méi)有可能是波特率的問(wèn)題啊

作者: 的花朵    時(shí)間: 2022-8-1 08:38
本帖最后由 祖國(guó)的花朵 于 2022-8-1 08:41 編輯

像樓上說(shuō)的的,轉(zhuǎn)一下
  1. <div class="blockcode"><blockquote>UART1SendByte(year / 10 + '0');
  2. UART1SendByte(year% 10 + '0');
復(fù)制代碼


作者: danpianjii1    時(shí)間: 2022-8-1 08:42
Hephaestus 發(fā)表于 2022-7-31 21:12
你又沒(méi)有轉(zhuǎn)換成ASCII碼,當(dāng)然是16進(jìn)制顯示正常,ASCII碼是亂碼了。

怎么轉(zhuǎn)換成asii碼請(qǐng)問(wèn)
作者: MCU_FANS    時(shí)間: 2022-8-1 10:16
本帖最后由 MCU_FANS 于 2022-8-1 10:18 編輯
danpianjii1 發(fā)表于 2022-8-1 08:42
怎么轉(zhuǎn)換成asii碼請(qǐng)問(wèn)

見過(guò)的串口助手,都有得設(shè)置接收格式是HEX還是ASCII:


另外:數(shù)值轉(zhuǎn)成ASCII對(duì)照一下ASCII表,然后對(duì)應(yīng)加一下偏移即可。或者用打印,就不用轉(zhuǎn)了。

作者: 鄭漢松    時(shí)間: 2022-8-1 10:29
數(shù)值轉(zhuǎn)ASCLL碼,最簡(jiǎn)單的方式是用sprintf函數(shù)
作者: hzy666    時(shí)間: 2022-8-1 11:36
還有一種可能是TTL的參考電平不一致




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