找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1278|回复: 4
收起左侧

stm32单片机串口程序,用Printf打印出来的数据和接收的不一样?

[复制链接]
ID:893997 发表于 2022-9-14 12:45 | 显示全部楼层 |阅读模式
正点原子的程序
  1.                 if(USART_RX_STA&0x8000)
  2.                 {               
  3.                         
  4.                         len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
  5.                         printf("\r\n您发送的消息为:\r\n\r\n");
  6.                         for(t=0;t<len;t++)
  7.                         {
  8.                                 USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
  9.                                 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
  10.                         }
  11.                         USART_RX_STA=0;
  12.                         for( i=0;i<len;i++ )//************************************************
  13.                         {
  14.                          printf("%d",USART_RX_BUF[i] );
  15.                         }                         //************************************************
  16.                         
  17.                         printf("\r\n\r\n");//插入换行
  18.                 }

  19. //************************************************
复制代码
这个是我加的程序,发现用Printf打印出来的数据和接收的数据不一样了,比如发个123,USART_SendData(USART1, USART_RX_BUF[t])发给上位机的确实是123,但是Printf给上位机的确是123495051,请问是什么原因?
回复

使用道具 举报

ID:879809 发表于 2022-9-14 13:57 | 显示全部楼层
USART_SendData(USART1, USART_RX_BUF[t])每次发送一个字节(8位),也就是发送USART_RX_BUF[t]的内容。

printf("%d",USART_RX_BUF[i] );每次发送4个字节构成的整数。
举个栗子:
USART_RX_BUF[]={'1','2','3','4','5','6'}
等效于
USART_RX_BUF[]={0x31,0x32,0x33,0x34,0x35,0x36}

USART_SendData(USART1, USART_RX_BUF[t])发送3次,发送的分别是'1'、'2'、'3'三个字符。
printf("%d",USART_RX_BUF[i] )发送三次,每次发送0x34333231(也就是十进制875770417)、0x35343332、0x36353433三个字符。
回复

使用道具 举报

ID:123289 发表于 2022-9-14 17:31 | 显示全部楼层
猜:多半是ASCII码与数字之间混淆的原因。
回复

使用道具 举报

ID:753618 发表于 2023-6-19 15:54 | 显示全部楼层
你这个程序,纯属你自己的想象。人家发送信息是一个字节一个字节的发送,发送完了,你拿来引用,这会是一个数据?,
回复

使用道具 举报

ID:883242 发表于 2023-6-20 11:03 | 显示全部楼层
  1. printf("%d",USART_RX_BUF[i] );
复制代码


改为

  1. printf("%d",(unsigned int)USART_RX_BUF[i] );
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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