OpenEdv-开源电子网

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

请教一下大家,我要用串口发送一段二进制码给一个通信模块,是用printf还是用USART_SendData比较好

[复制链接]

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
发表于 2018-7-26 09:29:05 | 显示全部楼层 |阅读模式
1金钱

最佳答案

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

当然是后者USART_SendData,使用USART_SendData: USART_SendData(0x20); 接收端接收的是: 00100000 printf发的: printf("00100000"); 你要是看的话其实是ASCII码的0和1,在接收端看来是这样子的数据 00110000 00110000 00110001 00110000 00110000 00110000 00110000 00110000 这个应该不是你想要的。当然也可以通过转义字符: printf("\x20"); 但是调用printf这个函数其实要占用不少的时间,之前自己做过一个对实时性 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-7-26 09:29:06 | 显示全部楼层
当然是后者USART_SendData,使用USART_SendData:
USART_SendData(0x20);
接收端接收的是:
00100000
printf发的:
printf("00100000");
你要是看的话其实是ASCII码的0和1,在接收端看来是这样子的数据
00110000 00110000 00110001 00110000 00110000 00110000 00110000 00110000
这个应该不是你想要的。当然也可以通过转义字符:
printf("\x20");
但是调用printf这个函数其实要占用不少的时间,之前自己做过一个对实时性非常敏感的课题,在STM32F1上测试的执行printf的最短时间也是500us,不划算。
十六进制带我飞。
回复

使用道具 举报

20

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2015-11-28
在线时间
89 小时
发表于 2018-7-26 09:33:22 | 显示全部楼层
send.   方便改程序. 以后万一增加 串口2 串口3呢..
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-7-26 09:42:19 | 显示全部楼层
森海有眼泉 发表于 2018-7-26 09:33
send.   方便改程序. 以后万一增加 串口2 串口3呢..

我也是想用这个,但是我的基础尚浅,我看例程都是只发一个字符但是我要一次性发超过20个字符,这个不太会弄
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7527
金钱
7527
注册时间
2016-11-30
在线时间
641 小时
发表于 2018-7-26 09:43:59 | 显示全部楼层
支持者2400 发表于 2018-7-26 09:42
我也是想用这个,但是我的基础尚浅,我看例程都是只发一个字符但是我要一次性发超过20个字符,这个不太会 ...

for循环发送就可以啦
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-7-26 09:45:24 | 显示全部楼层
lvkanger 发表于 2018-7-26 09:43
for循环发送就可以啦

您帮忙给个例子吧
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-7-26 09:49:17 | 显示全部楼层
DreamWaterPro 发表于 2018-7-26 09:45
当然是后者USART_SendData,使用USART_SendData:
USART_SendData(0x20);
接收端接收的是:

谢谢了
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7527
金钱
7527
注册时间
2016-11-30
在线时间
641 小时
发表于 2018-7-26 09:54:58 | 显示全部楼层
void Uart_Send_Data(u8 *buf,int len)
{
for(i = 0;i<len;i++)
{
    Uart_Send(buf[i]);
}
}

回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-7-26 09:55:19 | 显示全部楼层
lvkanger 发表于 2018-7-26 09:54
void Uart_Send_Data(u8 *buf,int len)
{
for(i = 0;i

谢谢了
回复

使用道具 举报

31

主题

1954

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4510
金钱
4510
注册时间
2018-5-11
在线时间
944 小时
发表于 2018-7-26 12:16:10 | 显示全部楼层
直接二进制传输是正途
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2019-11-3
在线时间
11 小时
发表于 2019-11-9 09:40:43 | 显示全部楼层
warship 发表于 2018-7-26 12:16
直接二进制传输是正途

怎么做呢?
求教
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 07:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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