STM 32シリアルポートのアイドル割込み
1862 ワード
背景
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{
;
}
}
}
通常の割り込みではデータのみを保存し,フレーム割り込みでは対応する処理関数を実行する必要がある.フレーム割り込みがない場合、受信割り込みで各受信データがフレームヘッダフレームテールと一致するか否かを判断しなければならず、効率が極めて低い.以前はずっと天下の串口がすべて同じだと思って、やはり多くの細部があって、多くの効率を高めることができます!