OpenEdv-开源电子网

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

关于串口USART_SendData函数的问题

[复制链接]

4

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2018-2-18
在线时间
54 小时
发表于 2020-6-11 10:44:49 | 显示全部楼层 |阅读模式
10金钱
问题1
串口发送时,函数定义的输入的参数为uint16_t接收数据时返还的数据为uint16_t
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
但接收接收缓存USART_RX_BUF[USART_REC_LEN]的类型为u8
u8 USART_RX_BUF[USART_REC_LEN];
为什么输入函数或者输出函数的参数不直接定义成8位的?



问题2
void USART_SendData(USART_TypeDef* USARTx,uint16_t Data)
{
  /*Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_DATA(Data));

  /*Transmit Data */
USARTx->DR = (Data & (uint16_t)0x01FF);
}
Data & (uint16_t)0x01FF     
这是个uint16_t数据,但是DR寄存器只有8
16位赋值给8位会将大于等于第9位的丢弃,为什么此处是0x01FF

最佳答案

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

DR寄存器不是8位 是9位 所以是0x01ff 因为发送 可能发送的是9位的数据 所以就不能是U8 又因为没有U9的数据类型 所以就U16
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
922
金钱
922
注册时间
2018-7-18
在线时间
385 小时
发表于 2020-6-11 10:44:50 | 显示全部楼层
本帖最后由 wwhh 于 2020-6-11 13:02 编辑

DR寄存器不是8位  是9位   所以是0x01ff
因为发送 可能发送的是9位的数据  所以就不能是U8  又因为没有U9的数据类型 所以就U16
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2020-5-17
在线时间
3 小时
发表于 2020-6-11 12:40:17 | 显示全部楼层
uart发送可以8位,也可以9bit,如果有校验位就是9bit,没有就是8bit,所以不能定义位u8 型。
回复

使用道具 举报

4

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2018-2-18
在线时间
54 小时
 楼主| 发表于 2020-6-11 22:40:03 | 显示全部楼层
wwhh 发表于 2020-6-11 10:44
DR寄存器不是8位  是9位   所以是0x01ff
因为发送 可能发送的是9位的数据  所以就不能是U8  又因为没有U9 ...

明白了 ,谢谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 03:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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