OpenEdv-开源电子网

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

关于HAL库串口发送的问题,求教

[复制链接]

1

主题

9

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-8-19
在线时间
7 小时
发表于 2022-6-20 21:58:38 | 显示全部楼层 |阅读模式
9金钱
最近在学习HAL库,遇到一个问题,假如我想用 HAL_UART_Transmit( UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout )  发送一个半字数组,例如 uint16_t Buf[4] = {0x1234,0x1111,0x4567,0x5678};   有没有好的办法,因为HAL的库函数的形参pData是uint8_t

最佳答案

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

类型转换后传入数组首地址就行
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

2131

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4731
金钱
4731
注册时间
2015-1-10
在线时间
591 小时
发表于 2022-6-20 21:58:39 | 显示全部楼层
类型转换后传入数组首地址就行
回复

使用道具 举报

1

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1023
金钱
1023
注册时间
2019-9-21
在线时间
269 小时
发表于 2022-6-21 09:40:07 | 显示全部楼层
可以参考一下这个链接看一下:https://blog.csdn.net/qq_41544116/article/details/105082156
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-8-19
在线时间
7 小时
 楼主| 发表于 2022-6-21 11:39:19 | 显示全部楼层
阿侑kevin 发表于 2022-6-21 10:25
类型转换后传入数组首地址就行

你是说   ( uint8_t  *)&Buf,是这样吗?
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-8-19
在线时间
7 小时
 楼主| 发表于 2022-6-21 11:40:10 | 显示全部楼层
gjs13030247996 发表于 2022-6-21 09:40
可以参考一下这个链接看一下:https://blog.csdn.net/qq_41544116/article/details/105082156

这个帖子根本和我提的问题没联系吧?
回复

使用道具 举报

11

主题

2131

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4731
金钱
4731
注册时间
2015-1-10
在线时间
591 小时
发表于 2022-6-21 13:36:05 | 显示全部楼层
515494330 发表于 2022-6-21 11:39
你是说   ( uint8_t  *)&Buf,是这样吗?

是的,默认按小端模式发送
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-8-19
在线时间
7 小时
 楼主| 发表于 2022-6-21 14:28:37 | 显示全部楼层
阿侑kevin 发表于 2022-6-21 13:36
是的,默认按小端模式发送

我试了一下,发现如果按照半字发送的话,后面的sizeof需要*2才会全部发走,而且我用串口助手发现确实是按照小端模式发送的,能不能让他改成大端模式,大佬
回复

使用道具 举报

3

主题

805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3832
金钱
3832
注册时间
2017-3-7
在线时间
1671 小时
发表于 2022-6-21 16:12:32 | 显示全部楼层
简单方式:编译选项设置成大端;
复杂点:发送数据的时候处理下数组,先发高字节,再发低字节,其实也不难
回复

使用道具 举报

1

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2018-8-4
在线时间
15 小时
发表于 2022-6-21 16:23:21 | 显示全部楼层
515494330 发表于 2022-6-21 14:28
我试了一下,发现如果按照半字发送的话,后面的sizeof需要*2才会全部发走,而且我用串口助手发现确实是按 ...

不能改大小端模式,只有手动软件处理  要么接收端接收后处理,要么发送前处理
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-8-19
在线时间
7 小时
 楼主| 发表于 2022-6-21 21:35:51 | 显示全部楼层
Chosen1 发表于 2022-6-21 16:23
不能改大小端模式,只有手动软件处理  要么接收端接收后处理,要么发送前处理

确实,keil下stm32f1无法更改编译方式,默认小端模式无法更改。那我只能考虑发送前我这边软件自己处理下数据了,谢了大佬
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-8-19
在线时间
7 小时
 楼主| 发表于 2022-6-21 21:37:48 | 显示全部楼层
a5820736 发表于 2022-6-21 16:12
简单方式:编译选项设置成大端;
复杂点:发送数据的时候处理下数组,先发高字节,再发低字节,其实也不难

我看了下keil在stm32f1芯片下无法更改code generate下big endian,big endian默认灰色无法更改。我还是选择我这边自己处理下数据再发走吧。谢谢大佬
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 22:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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