OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 31154|回复: 20

关于USART_SendData函数发送的数据类型

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2014-7-29
在线时间
0 小时
发表于 2014-7-29 11:34:08 | 显示全部楼层 |阅读模式
5金钱

USART_SendData(USART1,1);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); 
USART_SendData(USART1,2);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); 

这样显示拐角符号  ?     ?       ?
发送其他数也会显示不同的符号,或数字
如果发送字符‘a’  ’b’会正确显示

这个函数只能发送单个字符或数字?  发送数字以什么规则与显示对应??

最佳答案

查看完整内容[请看2#楼]

1、你这样USART_SendData(USART1,1);发送,转换后就是0x01了,发过去你看下串口助手显示什么? 2、要想显示字符或者数字什么的,对应ASCII码表
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-7-29 11:34:09 | 显示全部楼层
1、你这样USART_SendData(USART1,1);发送,转换后就是0x01了,发过去你看下串口助手显示什么?
2、要想显示字符或者数字什么的,对应ASCII码表
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2013-10-23
在线时间
0 小时
发表于 2015-6-12 22:21:25 | 显示全部楼层
回复【2楼】八度空间:
---------------------------------
我用USART_SendData函数给串口发送数据,XCOM串口助手总是出现首字符丢失啊!!怎么回事???是哪里的问题??????
人之所以能是相信能!
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-6-12 23:16:51 | 显示全部楼层
回复【3楼】一介布衣在江湖:
---------------------------------
这。。。
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2013-10-23
在线时间
0 小时
发表于 2015-6-13 21:05:16 | 显示全部楼层
回复【4楼】八度空间:
---------------------------------
for(j=0;j<reclen;j++)

{
USART_SendData(USART1, USART3_RX_BUF[j]);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}

就是这样。。。。首字符在串口助手上显示总丢失>
人之所以能是相信能!
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-6-13 21:15:39 | 显示全部楼层
回复【5楼】一介布衣在江湖:
---------------------------------
将USART_FLAG_TC这个标志改成USART_IT_TXE这个试下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2015-7-29
在线时间
0 小时
发表于 2015-7-30 09:31:46 | 显示全部楼层
回复【2楼】八度空间:
---------------------------------
您好,我想请问用USART_SendData函数发送一个数字怎么实现了?  如果这个数字是多位的 例如129  这样的三位数
回复

使用道具 举报

6

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2015-7-26
在线时间
36 小时
发表于 2015-7-30 09:45:41 | 显示全部楼层
回复【7楼】zrs123:
---------------------------------
应该是做成数组一个个发  或者是用printf函数直接发送
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-8-1 22:37:06 | 显示全部楼层
回复【7楼】zrs123:
---------------------------------
同意7楼做法
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

5

主题

13

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2016-3-24
在线时间
4 小时
发表于 2016-3-29 09:56:36 | 显示全部楼层
八度空间 发表于 2015-6-13 21:15
回复【5楼】一介布衣在江湖:
---------------------------------
将USART_FLAG_TC这个标志改成USART_IT_TXE ...

但是会卡在那里
回复

使用道具 举报

5

主题

266

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1526
金钱
1526
注册时间
2016-7-20
在线时间
155 小时
发表于 2016-7-21 14:30:22 | 显示全部楼层
for(j=0;j<reclen;j++)

{
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
USART_SendData(USART1, USART3_RX_BUF[j]);
}

这样就解决了首字母丢失的问题了
我是可以什么都不说 ,但不可以什么都不做。
回复

使用道具 举报

5

主题

266

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1526
金钱
1526
注册时间
2016-7-20
在线时间
155 小时
发表于 2016-7-21 16:55:46 | 显示全部楼层
for(j=0;j<reclen;j++)

{
while((USART1->SR & 0x40)==0x00);  
USART_SendData(USART1, USART3_RX_BUF[j]);
}
这个也可以的
我是可以什么都不说 ,但不可以什么都不做。
回复

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2017-7-8
在线时间
13 小时
发表于 2017-7-9 12:05:27 | 显示全部楼层
老铁,你这个程序在串口助手里面能显示出来吗,我的程序和你差不多,怎么在串口上没有现显示??
回复

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2017-7-8
在线时间
13 小时
发表于 2017-7-9 12:06:28 | 显示全部楼层
Passenger123 发表于 2017-7-9 12:05
老铁,你这个程序在串口助手里面能显示出来吗,我的程序和你差不多,怎么在串口上没有现显示??

程序是这样的

         while(1)
                 {
                                for(i=0;i<5;i++)
                                {        USART_SendData(USART1,j);
                                        while(USART_GetFlagStatus(USART1, USART_FLAG_TC));
                                        delay(2);
                                }
                 }
         
回复

使用道具 举报

30

主题

97

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2016-4-13
在线时间
68 小时
发表于 2017-7-12 10:33:46 | 显示全部楼层

请问,怎么用这个发送函数发送一个结构体数据?
回复

使用道具 举报

5

主题

266

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1526
金钱
1526
注册时间
2016-7-20
在线时间
155 小时
发表于 2017-7-12 10:54:53 | 显示全部楼层
刺客_奋斗的菜鸟 发表于 2017-7-12 10:33
请问,怎么用这个发送函数发送一个结构体数据?

memcpy(&Rec_Ctl.Parameter[0],&RxTmpBuf[6],9);
USART3_SendCommand((uint8_t *)&Rec_Ctl,22);
Rec_Ctl,这是一个发送应答结构体,其实结构体跟数组的逻辑是一样的,只要把结构体的赋值做好,直接调发送函数去发就好了,强转化成uint8_t类型的就行了。
我是可以什么都不说 ,但不可以什么都不做。
回复

使用道具 举报

30

主题

97

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2016-4-13
在线时间
68 小时
发表于 2017-7-12 15:08:07 | 显示全部楼层
本帖最后由 刺客_奋斗的菜鸟 于 2017-7-12 15:14 编辑
super910906 发表于 2017-7-12 10:54
memcpy(&Rec_Ctl.Parameter[0],&RxTmpBuf[6],9);
USART3_SendCommand((uint8_t *)&Rec_Ctl,22);
Rec_Ct ...
我是这样写的:
typedef struct{
    u8  num;
    u8 data[2];
}Temp;
Temp tem;
int main(void)
{
     u8  i,len;
     tem.num = 10;
     tem.data[0] = 50;
     tem.data[1] = 30;         
     ...................// 此处串口初始化省略
     len = sizeof(tem);
     while(len--){
         USART_SendData(USART1,(u8)&tem+i);
         while(USART_GetFlagStatus(USART1, USART_FLAG_TC));
    }
    while(1){
    }
}
但是打印出来的内容不是我对结构体成员赋的值。

回复

使用道具 举报

8

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2017-10-26
在线时间
13 小时
发表于 2017-11-8 09:31:59 | 显示全部楼层
必须发送数组吗
回复

使用道具 举报

8

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2017-10-26
在线时间
13 小时
发表于 2017-11-8 09:44:26 | 显示全部楼层
USART_SendData()第二个 入口参数必须是数组的形式吗  例如USART_SendData(USART1, USART_RX_BUF[t])                   ,,,,,,可以直接这样么USART_SendData(USART1, 1)        


回复

使用道具 举报

9

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2020-11-24
在线时间
38 小时
发表于 2021-1-22 22:41:22 | 显示全部楼层
super910906 发表于 2017-7-12 10:54
memcpy(&Rec_Ctl.Parameter[0],&RxTmpBuf[6],9);
USART3_SendCommand((uint8_t *)&Rec_Ctl,22);
Rec_Ct ...

你好,请问如何通过串口发送double类型的数据?用printf发送数据是转换为字符串形式重定向发送出去的,上位机无法接收;USART_SendData()貌似每次只能发送8位的无符号数,求解。谢谢!
回复

使用道具 举报

9

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2020-11-24
在线时间
38 小时
发表于 2021-1-28 19:13:00 | 显示全部楼层
shelden 发表于 2021-1-22 22:41
你好,请问如何通过串口发送double类型的数据?用printf发送数据是转换为字符串形式重定向发送出去的,上 ...

已解决。我使用的代码如下(上位机中用数组接收)。
  1. void USART1_SendDoubleData(double * x)
  2. {
  3.         short k;
  4.         char * pSendData = NULL;
  5.         pSendData = (char *)(x);
  6.         for(k=0;k<8;k++)
  7.         {
  8.                 USART_SendData(USART1,*(pSendData+k));
  9.                 while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET);
  10.         }
  11.         return;
  12. }
复制代码
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 05:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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