STM 32シリアルポートのアイドル割込み


背景


Nbiotの街灯プロジェクトでは、Nbiotモジュールは一般的にシリアルインタフェースであり、ATコマンドセットを使用して、中国移動onenetプラットフォームに接続されています.まずシリアルアシスタントでテストし、フローテストOK後にMCUに書き直す必要があります.最初はSTC 15シリーズのMCUを使用していたが、その後プラットフォームとのドッキングプロトコルが多く、コード量が大きいため、STM 32 F 1シリーズのMCUに移行した.STC 15 MCU上でシリアルポートを介してデータを受信するのは、おとなしく実用的な受信中断のみであり、受信1バイトごとにフレームヘッダフレームの末尾を判断し、1フレームが終了してから処理する必要がある.STM 32シリアルポートの上にフレームが途切れていて、ずっと使ったことがないと聞いていたので、このブログができました.

STM 32シリアルポートIDLE割り込み


IDLEは実は暇という意味です.IDLE割り込みはアイドル割り込みと呼ばれ、フレーム割り込みとは呼ばれません.では、空きとは何ですか.空きをどのように定義しますか.実際にデータを送信する場合、例えば文字列のように、次のように送信します.
void uart1_putc(char dat){
	SBUF = dat;
	while (!TI);
	TI = 0;
}
void uart1_puts_n(char *str){
	while (*str)
		uart1_putc(*str++);
}
void uart1_puts_n("i am handsome");

実際には、送信される2文字の間隔が非常に短いため、2文字の間に空きはありません.アイドルの定義は、バス上で1バイトの時間内にデータが受信されず、アイドル割り込みは、データが受信されたことを検出した後、バス上で1バイトの時間内にデータが受信されなかった場合に発生する.バスはどのような場合、1バイトの時間でデータを受信しませんか?一般に1つのデータフレームの送信が完了する場合のみであるため、シリアルポートの空き割り込みはフレーム割り込みとも呼ばれる.フレーム割り込みをどのようにオンにしますか?実は他のシリアルポートの配置は変更する必要はなく、シリアルポートの受信が中断したときに一言を加えるだけでOkになります.
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);// 
USART_ITConfig(USART2, USART_IT_IDLE, ENABLE);// 

そして割り込み関数は次のようになります.
void USART2_IRQHandler(void){                	// 1 
	int clear;
	if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET){  // ( 0x0d 0x0a )
		USART2_RX_BUF[length++] = USART2->DR & 0x0FF;
	}else if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET){// 
		if(USART2_RX_BUF[length - 1] == 0xff){
			clear = USART2->DR;
			clear = USART2->SR;
			length = clear;
			length = 0;
			USART2_RX_STA = 1;
		}else{
			;
		}
	}
}

通常の割り込みではデータのみを保存し,フレーム割り込みでは対応する処理関数を実行する必要がある.フレーム割り込みがない場合、受信割り込みで各受信データがフレームヘッダフレームテールと一致するか否かを判断しなければならず、効率が極めて低い.以前はずっと天下の串口がすべて同じだと思って、やはり多くの細部があって、多くの効率を高めることができます!