github:https://github.com/oraSC
(1)通过串口不断发送数据
库函数中的
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
函数不具备缓存作用,当我们需要连续不断发送一段数据时,我们需要等待前一次数据发送完成,放置数据丢失错误
void usart2_send_char(u8 _char)
{
/* 等待上一次发送完成*/
while( !(USART2->SR & (1 << USART2_SR_TC) )) ;
USART2->DR = _char ;
}
(2)通过中断接受数据
通过中断中断接受数据时我们可以通过读取数据寄存器中的值使硬件自动清除挂起的接收中断标志位,为了防止其他外设功能的错误,我们应该对每一个中断都养成手动清除中断标志位的习惯。
void USART2_IRQHandler(void)
{
u8 rec ;
if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
rec = USART_ReceiveData(USART2) ;
usart2_send_char(rec) ;
USART_ClearITPendingBit(USART2 , USART_IT_RXNE);
}
}
同时,使用串口调试助手时应该注意发送区的\r\n(即换行),因为这个是不可见但是是有效的发送数据。