USB转TTL串口(收发)
在上一个例程USB转TTL串口(printf)的基础上进行修改。主要修改了以下几点内容:
1.由于不要使用printf了,所以把PUTCHAR_PROTOTYPE的定义部分去掉。
2.从官网例程中找到串口收发数据的代码,并融合到新定义的串口收、发数据的函数中。
例程中串口发数据的代码(已进行细微改动):
/* Send one byte from USARTy to USARTz */
USART_SendData(USART1, data);
/* Loop until USARTy DR register is empty */
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{
}
例程中串口收数据的代码(已进行细微改动):
/* Loop until the USARTz Receive Data Register is not empty */
while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)
{
}
/* Store the received byte in RxBuffer */
ReceiveData = (USART_ReceiveData(USART1) & 0x7F);
新定义的串口发数据的函数:
void USART1_Send(uint16_t data)
{
/* Send one byte from USARTy to USARTz */
USART_SendData(USART1, data);
/* Loop until USARTy DR register is empty */
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{
}
}
新定义的串口收数据的函数:
uint8_t USART1_Receive(void)
{
uint8_t ReceiveData;
/* Loop until the USARTz Receive Data Register is not empty */
while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)
{
}
/* Store the received byte in RxBuffer */
ReceiveData = (USART_ReceiveData(USART1) & 0x7F);
return ReceiveData;
}
3.在主函数中先写一条接收数据的函数,接着将收到数据通过串口发回电脑。
SerialBuf = USART1_Receive();
USART1_Send(SerialBuf);
Delay(90000);
可以看出:1.本程序使用的是查询的方式,MCU的利用率低,今后还将学习中断的方式进行数据的接收。2.本程序收发的是一个字节的数据,今后还将学习收发一连串的数据。
By:霜月孤鸟
2017.3.1
博客地址:http://blog.csdn.net/ourrtems
欢迎访问、关注单片机百宝箱!