找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1635|回复: 8
收起左侧

请教STM32单片机串口发送数据显示乱码问题

[复制链接]
ID:1041056 发表于 2022-7-31 17:32 | 显示全部楼层 |阅读模式
50黑币
使用stm32c8t6最小系统板,连接外部时钟模块,读取外部时钟模块的时间数据(16进制数据),将得到的时间数据从串口发回到串口助手,但是在串口助手上16进制显示正常,非16进制显示就是框框,如图,代码如下,怎样显示正常的时间
         if(inquiries_mewtime_STA!=0)//发送时间问询指令
                {
                        second=Read1307(0x00);//问询秒时间指令
                        minute=Read1307(0x01);//问询分时间指令
                        hour=Read1307(0x02);
                        week=Read1307(0x03);
                        day=Read1307(0x04);
                        month=Read1307(0x05);
                        year=Read1307(0x06);        
                        UART1SendByte(year);UART1SendByte(month);UART1SendByte(day);//发送时间指令
                        UART1SendByte(hour);UART1SendByte(minute);UART1SendByte(second);//发送时间指令
                        delay_ms(1000);
                        inquiries_mewtime_STA = 0;//发送时间问询指令复位                                                
                }

其中的UART1SendByte如下
/*发送一个字节数据*/
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.png

最佳答案

查看完整内容

如果只是串口通讯 ASCII用sprintf函数简单char k[12];//数组长度自己根据要显示多少位调整 unsigned char a,i=0; sprintf(k,"%d",dat); for(a=0;k[a]!='\0';a++) { UART1SendByte(Page,Start_SEG,k[a]); //发送一个字节 }
回复

使用道具 举报

ID:401564 发表于 2022-7-31 17:32 | 显示全部楼层
如果只是串口通讯
ASCII用sprintf函数简单char   k[12];//数组长度自己根据要显示多少位调整                                                        
unsigned char a,i=0;
sprintf(k,"%d",dat);                                               
for(a=0;k[a]!='\0';a++)                 
        {       
                UART1SendByte(Page,Start_SEG,k[a]); //发送一个字节
        }

回复

使用道具 举报

ID:883242 发表于 2022-7-31 21:12 | 显示全部楼层
你又没有转换成ASCII码,当然是16进制显示正常,ASCII码是乱码了。
回复

使用道具 举报

ID:1039954 发表于 2022-8-1 08:37 | 显示全部楼层
有没有可能是波特率的问题啊
回复

使用道具 举报

ID:248705 发表于 2022-8-1 08:38 | 显示全部楼层
本帖最后由 祖国的花朵 于 2022-8-1 08:41 编辑

像楼上说的的,转一下
  1. <div class="blockcode"><blockquote>UART1SendByte(year / 10 + '0');
  2. UART1SendByte(year% 10 + '0');
复制代码

回复

使用道具 举报

ID:1041056 发表于 2022-8-1 08:42 | 显示全部楼层
Hephaestus 发表于 2022-7-31 21:12
你又没有转换成ASCII码,当然是16进制显示正常,ASCII码是乱码了。

怎么转换成asii码请问
回复

使用道具 举报

ID:962286 发表于 2022-8-1 10:16 | 显示全部楼层
本帖最后由 MCU_FANS 于 2022-8-1 10:18 编辑
danpianjii1 发表于 2022-8-1 08:42
怎么转换成asii码请问

见过的串口助手,都有得设置接收格式是HEX还是ASCII:
51hei截图20220801101536.jpg

另外:数值转成ASCII对照一下ASCII表,然后对应加一下偏移即可。或者用打印,就不用转了。
回复

使用道具 举报

ID:514901 发表于 2022-8-1 10:29 | 显示全部楼层
数值转ASCLL码,最简单的方式是用sprintf函数
回复

使用道具 举报

ID:1041123 发表于 2022-8-1 11:36 | 显示全部楼层
还有一种可能是TTL的参考电平不一致
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表