1. 程式人生 > >串列埠傳送資料查詢方式與中斷方式

串列埠傳送資料查詢方式與中斷方式

微控制器採用中斷或查詢方式使用串列埠,這是根據實際應用的需要確定的,沒有好/壞之分。有時之所以採用查詢方式處理串列埠程式,是因為應用程式不苛刻微控制器的時間資源,採用查詢的方式就能滿足應用的需要,所以沒采用中斷。

大量連續的向串列埠傳送資料,就沒有必要使用中斷了,因為微控制器根本沒有時間去處理其它事務,這樣採用查詢的方式反而效率更高,實際應用中向串列埠傳送資料很少使用中斷,更多的是使用接收中斷,除非微控制器的時間資源特別的緊張,連等待一個數據的傳送時間也得利用。

一般傳送資料採用查詢方式

以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;
}
}
}