HALライブラリシリアル割り込みの使用状況を紹介する今日
ここで我々はUSART1を使用し、最初のオープンCUBEMX、STM32は、新しいプロジェクト、ブロガーのF429プロジェクトの設立を作成し、グラフィカルなインターフェイスでUSARTを開きます。
次に、構成configgurationを入力してください
基本的なパラメータはNVICに変更されていない、おそらく割り込みイネーブル
その後、あなたは、プロジェクトを生成し、プロジェクトファイルを開くことができます。ここでは、シリアルポートの割り込みの受信を説明します:
シリアルポートについて割り込みを受け取ります
プロジェクトファイルによって生成されたCUBEMX、最初の有効受信割り込みを開きます
__HAL_UART_ENABLE_IT(uartHandle、UART_IT_RXNE);
并且利用HAL_UART_Receive_IT(uartHandle、&TempChar、1)。
この機能では、2番目と3番目のパラメータは、文字列と文字列サイズの前処理を示す、修飾されてもよいです。
私たちは、初期化関数をしばらく(1)を入力する前に実行されて定義することができ、例えば、私はITEnable(ボイド)カスタマイズし、私たちは、この関数の場所の定義および使用を見てみましょう:
空隙ITEnable(ボイド){ HAL_TIM_Base_Start_IT(&htim6)。 HAL_TIM_Base_Start_IT(&htim7)。 __HAL_UART_ENABLE_IT(&huart3、UART_IT_RXNE)。 HAL_UART_Receive_IT(&huart3、&TempChar、1)。 __HAL_UART_ENABLE_IT(&huart1、UART_IT_RXNE)。 HAL_UART_Receive_IT(&huart1、&TempChar、1)。 }
あなたが見ることができ、ここではTempCharは、我々は一時的な性格のために宣言されたグローバル変数で、保存場所とTempChar&受信した情報の説明を割り込み許可開きました。
/ *ユーザコードは、2 * / BEGIN delay_init(180)。 LED_Init(); SDRAM_Init(); LCD_Init(); ESP8266_Init(); ITEnable(); PeriphInit(); LCD_ShowString(30,0,200,24,24、 "ShowTimeWalker"); / *ユーザコードEND 2 * /
(上記のコードの中から選ばれた私自身の作品で、我々は、コードの一部のみに焦点を当てる必要があります)
公式にはサービス機能を述べて設定した後、あなたは文字を終えた各時間は、割り込みサービス・ルーチンに入り、
空USART1_IRQHandler(空)
この関数は、唯一の目的である、それはに、ある
HAL_UART_IRQHandler(&huart1);
この機能では、機能がクリアされます割り込みを有効にするフラグを無効を中断!!!
そして、機能UART_Receive_IT(huart)に入り、
ここで、受信した文字はHAL_UART_Receive_IT()セット&TempChar、カウント前の位置に格納され
たコールバック関数に、カウント値が設定値1に達する
空隙HAL_UART_RxCpltCallback(UART_HandleTypeDef * huart)
コールバックすることができ、最終的な操作関数が完了し、次のように、ブロガーの処理コードは次のとおりです。
空HAL_UART_RxCpltCallback(UART_HandleTypeDef * huart){ 場合(huart->インスタンス== USART1){ 場合{(END_STA!) の場合(TempChar = 0x0Dを!){ Usart_ReceiveBuffer [USART_COUNTER ++] = TempChar。 } 他{ Usart_ReceiveBuffer [USART_COUNTER ++] = TempChar。 IF(Usart_ReceiveBuffer [USART_COUNTER + 1] == 0) END_STA = 1。 } } 他{ Usart_ReceiveBuffer [USART_COUNTER ++] = TempChar。 END_STA = 0; USART_COUNTER = 0; LCD_Fill(0、120、479、149、白)。 memcpy(USART1MESSAGE、Usart_ReceiveBuffer、RX_Length)。 以下のために(; I <RX_Length I ++は、I = 0 INT) Usart_ReceiveBuffer [I] = 0; POINT_COLOR = BLACKと、 LCD_ShowString(30,120,800,24,24、(チャー*)USART1MESSAGE)。 } } }
さらにいくつかのグローバル変数を宣言する前に
U8 Usart_ReceiveBuffer [RX_Length] = {0}。 U8 USART1MESSAGE [RX_Length] = {0}。 U8 USART3MESSAGE [RX_Length] = {0}。 U16 USART_COUNTER = 0。 U8のEND_STA = 0。 uint8_t TempChar = 0。
原因すでに無効に中断した後、これも各割り込みが処理が完了すると、我々はまだ行でUSART1_IRQHandlerを補完する必要があり、割り込みを許可
HAL_UART_Receive_IT(uartHandle、&TempChar、1)。
次のようにこの関数stm32f4xx_it.cは改正され、内部が見つかりました:
空隙USART1_IRQHandler(ボイド) { HAL_UART_IRQHandler(&huart1)。 HAL_UART_Receive_IT(&huart1、&TempChar、1)。 }
ブロガー受信された情報は、文字配列USART1MESSAGEに格納され、RGBディスプレイに印刷します
スカーレットは彼のために気にしない、ブロガーは、このような画面クリア関数LCD_Clearを()送信するよう、実行コマンドなどの情報を送信することで、STM32は、正しい形式でない場合USMARTコンポーネントは、対応する関数を完了呼び出して、それが赤のプロンプトが表示されます。
上記は、HALライブラリの理解の私のシリアルポート割り込み受付は、我々が議論を歓迎しています。