单片机采用中断或查询方式使用串口,这是根据实际应用的需要确定的,没有好/坏之分。有时之所以采用查询方式处理串口程序,是因为应用程序不苛刻单片机的时间资源,采用查询的方式就能满足应用的需要,所以没采用中断。
大量连续的向串口发送数据,就没有必要使用中断了,因为单片机根本没有时间去处理其它事务,这样采用查询的方式反而效率更高,实际应用中向串口发送数据很少使用中断,更多的是使用接收中断,除非单片机的时间资源特别的紧张,连等待一个数据的发送时间也得利用。
一般发送数据采用查询方式:
以stm32串口为例
void Send_String(uint8_t *str)
{
uint8_t index = 0;
do
{
USART_SendData(USART2, str[index]);
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
index++;
}while(str[index] != 0);
}
接受数据一般采用中断方式
这样对时间进行了充分利用, 有数据就产生中断接受,没数据时不用管。
以stm32为例:
void USART2_IRQHandler(void)
{
uint8_t temp;
if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET){
USART_ClearITPendingBit(USART2,USART_IT_RXNE);
temp = USART_ReceiveData(USART2);
if((temp == 'x') || (RXCUNT == 20)){ //字符串以x结尾发送或者超过20个字符时发送
RXCUNT = 0;
RXOVER = 1; //接收完成标志位置位
USART_ITConfig(USART2,USART_IT_RXNE,DISABLE);
}
else{
USART_RXBUF[RXCUNT] = temp;
++RXCUNT;
}
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』