單片機串口處理獲得的經(jīng)驗(stm32)
大致情況羅列如下:
本文引用地址:http://dyxdggzs.com/article/201611/315410.htm1、串口接收中斷處理
在學(xué)校的時(shí)候根本沒(méi)有接觸過(guò)什么循環(huán)處理的方法,到現在我也講不上來(lái)這個(gè)方法的名字是什么,反正自己會(huì )運用了。大致的情況是環(huán)形數組處理,代碼如下:
//======================>> 接收數據中斷
if( USART_GetITStatus( COM_USARTx, USART_IT_RXNE ) != RESET )
{
if( COM_Rx_Sign == 1 )
{
COM_Cout_mS = DEF_COM_FRM_END_MS;
}
COM_Uart_RxBuf.Buf[ COM_Uart_RxBuf.WriteSize++ ] = USART_ReceiveData( COM_USARTx );
if( COM_Uart_RxBuf.WriteSize >= COM_TxRx_BUF_SIZE ) /* 循環(huán)接收數據存儲 */
{
COM_Uart_RxBuf.WriteSize = 0;
}
USART_ClearITPendingBit( COM_USARTx, USART_IT_RXNE );/* Clear the USART Receive interrupt */
}
2、發(fā)送數據處理
采用的是usart轉485接口,所以在常態(tài)要將485置為接受狀態(tài),只有發(fā)送數據的時(shí)候才置為發(fā)送狀態(tài)。這樣說(shuō)表面上看著(zhù)沒(méi)啥問(wèn)題,但是剛開(kāi)始的時(shí)候一直出現發(fā)送數據最后一個(gè)字節丟失,我一直不知道問(wèn)題,最后仿真器在中斷里面485置為接受之前設置了一個(gè)斷點(diǎn)
評論