EDA365电子工程师网

标题: stm32库函数串口接收和发送函数返回为啥是16位 [打印本页]

作者: ly04t    时间: 2018-7-14 10:12
标题: stm32库函数串口接收和发送函数返回为啥是16位
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);
}



为什么要返回16位,串口一次接8位呀。用的时候也是用8位,谁帮忙解释一下
uint8_t     uart_buff[UART_BUFF_SIZE];
uart_buff[uart_p] = USART_ReceiveData(BLT_USARTx);


作者: ArthurGXH    时间: 2018-7-16 15:34
包含校验位时,有9位数据的情况,以下是从官方手册拷贝过来的:

DR[8:0]:数据值 (Data value)
包含了发送或接收的数据。由于它是由两个寄存器组成的,一个给发送用(TDR),一个给接收
用(RDR),该寄存器兼具读和写的功能。 TDR寄存器提供了内部总线和输出移位寄存器之间的
并行接口(参见图248)。 RDR寄存器提供了输入移位寄存器和内部总线之间的并行接口。
当使能校验位(USART_CR1中PCE位被置位)进行发送时,写到MSB的值(根据数据的长度不
同, MSB是第7位或者第8位)会被后来的校验位该取代。
当使能校验位进行接收时,读到的MSB位是接收到的校验位

你再看一下USART_CR1的M、PCE:
M:字长 (Word length)
该位定义了数据字的长度,由软件对其设置和清零
0:一个起始位, 8个数据位, n个停止位;
1:一个起始位, 9个数据位, n个停止位。
注意:在数据传输过程中(发送或者接收时),不能修改这个位

PCE:检验控制使能 (Parity control enable)
用该位选择是否进行硬件校验控制(对于发送来说就是校验位的产生;对于接收来说就是校验位
的检测)。当使能了该位,在发送数据的最高位(如果M=1,最高位就是第9位;如果M=0,最高
位就是第8位)插入校验位;对接收到的数据检查其校验位。软件对它置’1’或清’0’。一旦设置了
该位,当前字节传输完成后,校验控制才生效。
0:禁止校验控制;
1:使能校验控制
作者: ArthurGXH    时间: 2018-7-16 15:36
你可以到ST官网下载“STM32参考手册”,讲得很详细。




欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/) Powered by Discuz! X3.2