STM32F429ベースCUBEMXシリアルポート割り込み受付

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ライブラリの理解の私のシリアルポート割り込み受付は、我々が議論を歓迎しています。

おすすめ

転載: www.cnblogs.com/showtime20190824/p/11407923.html