STM32串口通信UART使用(2)

DR寄存器: 数据寄存器,只用其低9位(DR[8:0])。当发送数据时,将数据写入该寄存器,该寄存器将数据发送到TDR或者移位寄存器发送,当数据写到移位寄存器时,TXE标志置1(数据写入时置0)。TXE为1时可以继续写入数据,否则新写入的数据会把原有数据覆盖。读取数据时,也是从该寄存器读取数据。

BRR波特率寄存器:波特率寄存器,用来设置波特率的值。

CR1寄存器:包含使能位UE、字长M、过采样倍率、奇偶校验、接收使能、发送使能等控制信息。

数据收发 单字符发送 //发送一个字符,USART_SendData函数实际就是将字符写入USART_DR寄存器 USART_SendData(pUSARTx,ch); // //等待发送寄存器为空,只有当USART_FLAG_TXE == 1 时才可以继续想DR寄存器写入数据,否则会将上一个数据覆盖掉。 while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET) 字符串发送 /***************** 发送字符串 **********************/ // 发送字符串是每个字符依次发送,相当于循环执行单字符发送函数。 // void uart_send_str( USART_TypeDef * pUSARTx, char *str) { unsigned int k=0; // do { uart_send_byte( pUSARTx, *(str + k) ); k++; } while (*(str + k)!='\0'); // /* 等待发送完成 */ while (USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET) ; } // // USART_FLAG_TC为1的条件是,DR寄存器为空并且以为寄存器也为空。相当于所有数据都发送完毕 字符接收 uint8_t ucTemp; if (USART_GetITStatus(UART5, USART_IT_RXNE)!=RESET){ ucTemp = USART_ReceiveData( UART5 ); // USART_SendData(UART5,ucTemp); } // USART_ReceiveData()函数是将DR寄存器读取并返回 // USART_IT_RXNE不为0表示数据寄存器中有数据,需要将其读出。 // 每次收一个字符,USART_IT_RXNE会被设置为1,直至数据被读出,USART_IT_RXNE再次被设置为0. // 同时,USART_IT_RXNE也被设置为中断的标志,即接收到数据时,进入中断。

本文永久更新链接地址

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/595231b723d19873e7a1bd240c2c0fd2.html