UART串口通信

来源:互联网 发布:淘宝我的空间怎么设置 编辑:程序博客网 时间:2024/05/21 12:42

1 平时TX,RX,为高电平,双方一旦检测到线路上是低电平,表示数据传输开始了。
发送结束时候,结束位为高电平,可以是1个,1.5个或者2个高电平。

2 串口通信相关的函数,除了初始化的函数,其他的就是对两个寄存器操作。

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data){  /* Transmit Data */  USARTx->DR = (Data & (uint16_t)0x01FF);}

我们写的其他函数,比如SendByte()函数,SendString()函数,或者SendArray()函数,都是基于这个函数的。
比如

void Usart_SendByteArray(USART_TypeDef *pUSARTx, char *p, uint8_t n){    uint8_t i;    for (i = 0; i < n; ++i)    {        Usart_SendByte(pUSARTx, *(p+i));        while(USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);}

而对于uint16_t USART_ReceiveData(USART_TypeDef* USARTx) 这个函数,我们好奇它是怎么写入数据的。这个函数只是往USARTx->DR写入数据。我们所需要考虑的就是往这个寄存器写入数据,之后的传输是硬件来实现的。

同样我们想接收来自串口的数据,只需要关注uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
这个函数就好

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

这个函数读取USARTx->DR寄存器的值,然后返回。我们在写我们的函数的时候,基于这个函数去写即可。

小结:无论我们是读取数据还是写入数据发送,我们只需要基于库函数操作,写我们的函数即可。库函数是对DR寄存器操作,写入或者读取。这个寄存器实际上是两个寄存器。不过其他的东西我们暂时不需要关注。

原创粉丝点击