OpenEdv-开源电子网

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

STM32中的u8、u16、u32等等这些到底什么情况啊?

[复制链接]

33

主题

52

帖子

0

精华

高级会员

Rank: 4

积分
507
金钱
507
注册时间
2016-8-15
在线时间
79 小时
发表于 2016-8-18 16:55:50 | 显示全部楼层 |阅读模式
比如串口中断函数里面那个接收串口数据的函数,定义的 "i" 的类型几乎是五花八门都行!!函数里面是(uint16_t)型的,我知道这些都是宏定义出来的简写,但那个 "i" 也不能随便定义都行啊??但实际确实是怎么定义都行,为什么这样?串口的接收缓冲区到底是怎样的?还有,我看资料上说串口的接收缓冲区和发送缓冲区是同一个寄存器,但资料中却说可以将串口配置为全双工,接收和发送只有一个寄存器,两个不同方向的数据如何依靠这一个寄存器实现全双工?


为什么都行.PNG
库函数里是uint16_t.PNG
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
837
金钱
837
注册时间
2016-5-13
在线时间
182 小时
发表于 2016-8-18 17:13:09 | 显示全部楼层
u8    :       unsigned char
u16  :       unsigned short int
u32  :       unsigned int
相信自己,每一步都是在进步
回复 支持 2 反对 0

使用道具 举报

0

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2016-9-2
在线时间
28 小时
发表于 2016-9-2 09:05:51 | 显示全部楼层
楼主问的这几个都是事先已经定义过的简写,我也在学STM32,里面很多东西都已经定义和封装好,新手有时候就会摸不着头脑,不知道有没有更基础一点的教程
回复 支持 1 反对 0

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-8-18 17:09:02 | 显示全部楼层
可以随意定义,只要你定义的位数大于等于所需位数即可
回复 支持 反对

使用道具 举报

10

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
837
金钱
837
注册时间
2016-5-13
在线时间
182 小时
发表于 2016-8-18 17:15:56 | 显示全部楼层
要怎么定义,主要看被定义者所需最大字节
相信自己,每一步都是在进步
回复 支持 反对

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2016-8-18 17:19:13 | 显示全部楼层
如果是带地址的串口通讯就不能用uint8_t了
回复 支持 反对

使用道具 举报

33

主题

52

帖子

0

精华

高级会员

Rank: 4

积分
507
金钱
507
注册时间
2016-8-15
在线时间
79 小时
 楼主| 发表于 2016-8-18 17:34:43 | 显示全部楼层
龙之谷 发表于 2016-8-18 17:09
可以随意定义,只要你定义的位数大于等于所需位数即可

那这样又要怎么理解呢?
STM32中串口的发送和接收寄存器USART_DR这个寄存器只有低9位,它一次最多只能存储一个字节吧?那我要定义成16位、32位的数据类型,为什么还能正常发送接收呢?这样一来,数据的位数就不对啊
回复 支持 反对

使用道具 举报

33

主题

52

帖子

0

精华

高级会员

Rank: 4

积分
507
金钱
507
注册时间
2016-8-15
在线时间
79 小时
 楼主| 发表于 2016-8-18 17:50:09 | 显示全部楼层
自由一份子 发表于 2016-8-18 17:34
那这样又要怎么理解呢?
STM32中串口的发送和接收寄存器USART_DR这个寄存器只有低9位,它一次最多只能存 ...

哦,库里面看到了,串口发送的数据大于0x1ff就错了吧?
#define IS_USART_DATA(DATA) ((DATA) <= 0x1FF)
还有下面一句:
USARTx->DR = (Data & (uint16_t)0x01FF);
数据总是和0x1ff相与,资料上也说了,只取这几位,但是还有一个问题,我要发送汉字怎么办?汉子两个字节,串口是拆开发送的吗?
回复 支持 反对

使用道具 举报

2

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
410
金钱
410
注册时间
2016-5-6
在线时间
110 小时
发表于 2016-8-19 18:05:58 | 显示全部楼层
收發資料的寄存器就是為1個字節的,不論你定義1字節,2字節, 4字節,再發的時候每次還是發1字節出去阿
漢字兩個字節,簡單點就是要先發第一個字節,再發第二個字節。
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-12-26
在线时间
10 小时
发表于 2016-9-2 00:00:00 | 显示全部楼层
Jower 发表于 2016-8-18 17:13
u8    :       unsigned char
u16  :       unsigned short int
u32  :       unsigned int

看到这个答案,瞬间就懂了,谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-29 23:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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