OpenEdv-开源电子网

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

串口的DR寄存器是8bit的,为什么函数返回是16bit的?

[复制链接]

10

主题

32

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2011-10-26
在线时间
10 小时
发表于 2018-9-7 17:43:14 | 显示全部楼层 |阅读模式
1金钱
串口的DR寄存器是8bit的,为什么函数返回是16bit的?
uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));

  /* Receive Data */
  return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);
}


最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2018-4-6
在线时间
31 小时
发表于 2018-9-7 17:43:15 | 显示全部楼层
回复

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5141
金钱
5141
注册时间
2014-8-26
在线时间
1317 小时
发表于 2018-9-7 18:22:11 | 显示全部楼层
DR是9bit的
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-9-7 21:48:47 | 显示全部楼层
借用3楼的图,函数返回的时候实际上是将整个DR所占用的16bit作为一个变量返回的。如果只是返回9bit,自然u8类型无法表示全部的DR数据。
十六进制带我飞。
回复

使用道具 举报

2

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2017-8-20
在线时间
49 小时
发表于 2018-9-8 00:15:52 | 显示全部楼层
注意:STM32 读写基本都是16bit 和32bit的,这与8位单片机不同
回复

使用道具 举报

12

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2017-3-15
在线时间
33 小时
发表于 2018-9-8 00:28:27 | 显示全部楼层
中技电子实验室 发表于 2018-9-8 00:15
注意:STM32 读写基本都是16bit 和32bit的,这与8位单片机不同

那就是不能写返回8bit数的函数了?
回复

使用道具 举报

2

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2017-8-20
在线时间
49 小时
发表于 2018-9-8 01:58:45 | 显示全部楼层
江鱼 发表于 2018-9-8 00:28
那就是不能写返回8bit数的函数了?

不是,两个概念,读系统的寄存器都是16bit或32bit读会来的,当然你如果将其强制转化为8bit做返回值是完全可以的,这与C语言结构不矛盾
回复

使用道具 举报

2

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2017-8-20
在线时间
49 小时
发表于 2018-9-8 03:32:00 | 显示全部楼层
江鱼 发表于 2018-9-8 00:28
那就是不能写返回8bit数的函数了?

说详细一点就是,DR bit8是可能的奇偶校验位,如果没用到,就可将返回值强制8bit返回,另读写数据32bit,不等于返回值是32bit的,比如函数传入一个参数(32bit),与函数内部读32bit的寄存器比较,改寄存器内容为0返回0,大于返回1,小于返回2,相同返回0,这不就8bit做返回值吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 09:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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