找回密码
 注册
关于网站域名变更的通知
查看: 684|回复: 2
打印 上一主题 下一主题

stm32库函数串口接收和发送函数返回为啥是16位

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-7-14 10:12 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
$ b0 C, E$ {6 l: L{7 U. x1 Q, x7 v6 y
  /* Check the parameters */) i" B' |! ~4 i0 w9 o4 Q
  assert_param(IS_USART_ALL_PERIPH(USARTx));
$ m, y; h$ B" S% C6 ~( l7 v9 B3 g" s# `. g$ b
  /* Receive Data */
/ z( t1 ^  R) J8 g  return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);* ?5 L1 m. `; \5 T& H  ]2 |
}
6 I7 m8 i- x# x
* J+ y. u6 L( h7 B% f% \( J5 q" C9 }6 k% d6 b) q1 B+ i
2 g3 |* }) {* S, a
为什么要返回16位,串口一次接8位呀。用的时候也是用8位,谁帮忙解释一下
" b! W9 Q4 m/ z! q& U8 L9 euint8_t     uart_buff[UART_BUFF_SIZE];) T. I$ |/ i1 e1 _/ G4 [
uart_buff[uart_p] = USART_ReceiveData(BLT_USARTx);* i' @% O* @, U8 a5 s

) Q6 b2 g, E( w; j$ a! S

该用户从未签到

3#
发表于 2018-7-16 15:36 | 只看该作者
你可以到ST官网下载“STM32参考手册”,讲得很详细。

该用户从未签到

2#
发表于 2018-7-16 15:34 | 只看该作者
包含校验位时,有9位数据的情况,以下是从官方手册拷贝过来的:! f# u+ ?1 f3 \. G- U( j8 Z9 t" w3 N
2 U1 `( e. J6 U; z- f
DR[8:0]:数据值 (Data value)
" G* B% @5 i( ?/ m, }包含了发送或接收的数据。由于它是由两个寄存器组成的,一个给发送用(TDR),一个给接收% A; A& y6 K" d6 ^# q6 H& i/ K
用(RDR),该寄存器兼具读和写的功能。 TDR寄存器提供了内部总线和输出移位寄存器之间的4 @' Q$ R8 K4 n' ?1 h" o& A
并行接口(参见图248)。 RDR寄存器提供了输入移位寄存器和内部总线之间的并行接口。
0 I9 c& G! P$ E; U8 n5 I. z当使能校验位(USART_CR1中PCE位被置位)进行发送时,写到MSB的值(根据数据的长度不
/ {+ i- S* B- ]8 b1 [7 |5 V同, MSB是第7位或者第8位)会被后来的校验位该取代。. _* l8 @4 h/ A2 A1 R- G) X4 S
当使能校验位进行接收时,读到的MSB位是接收到的校验位
' Y) N2 s8 I, x9 \, ]  I% [2 A- ?" }- W% ?: k
你再看一下USART_CR1的M、PCE:0 C: T! D2 Q$ W7 i1 J# O/ b& b
M:字长 (Word length)! o( N9 K8 e' ]3 }
该位定义了数据字的长度,由软件对其设置和清零
  h4 h7 A% |& B, Q3 P0:一个起始位, 8个数据位, n个停止位;
% N& ^4 B1 ]. g! m( U1:一个起始位, 9个数据位, n个停止位。9 C3 D$ D) K; O" Q- r+ c4 z5 c) Q/ x
注意:在数据传输过程中(发送或者接收时),不能修改这个位7 @/ c  ]8 |' D1 e: k4 f; g0 ^: i+ \. [

% F) G# {/ {( ePCE:检验控制使能 (Parity control enable)
" R/ O5 |, R" t7 }用该位选择是否进行硬件校验控制(对于发送来说就是校验位的产生;对于接收来说就是校验位+ I: j( f+ g% w1 |) `: ^% _& f
的检测)。当使能了该位,在发送数据的最高位(如果M=1,最高位就是第9位;如果M=0,最高
( @1 c* X& y7 U& G& w位就是第8位)插入校验位;对接收到的数据检查其校验位。软件对它置’1’或清’0’。一旦设置了, d9 B" x& q- P$ m- S+ b1 v
该位,当前字节传输完成后,校验控制才生效。
# P# U4 L3 u  ]% X, A8 _) W# j0:禁止校验控制;! A5 e- v( A+ B
1:使能校验控制
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 15:06 , Processed in 0.218750 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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