USART2とPCで通信するプログラムを作成します。 PCから受信したデータをPCへ返送します。 |
|
1.1. USART2の設定 Connectivity内USART2を選択。ModeをAsynchronousに設定。 |
Parameter Settingsを以下の様に設定します。 |
1.2. 割込みの設定 NVIC Interrupt Tableを選択しEnabledにチェックを入れます。 その後、Code Generateを実行。 |
2.1. 受信割込み処理 |
USER CODE PV BEGINの下に外部変数を追加します。 ここでは uint8_t g_ubBufferとします。 この外部変数は受信割込みでデータを受け取るバッファとして使用されます。 /* Private variables ---------------------------------------------------------*/ UART_HandleTypeDef huart2; /* USER CODE BEGIN PV */ static uint8_t g_ubBuffer; /* USER CODE END PV */ |
USER CODE BEGIN 2の下に。HAL_UART_Receive_ITを記述します。 これで受信割込み許可となります。 /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART2_UART_Init(); /* USER CODE BEGIN 2 */ HAL_UART_Receive_IT(&huart2, &g_ubBuffer, 1); /* USER CODE END 2 */ |
USER CODE BEGIN 4の下に割込み処理関数を記述します。 関数名はHAL_UART_RxCpltCallback固定です。 HAL_UART_Transmit_IT関数でg_ubBufferを送信します。 HAL_UART_Receive_IT関数で受信割込みを再許可します。 /* USER CODE BEGIN 4 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { HAL_UART_Transmit_IT(&huart2, &g_ubBuffer, 1); HAL_UART_Receive_IT(&huart2, &g_ubBuffer, 1); } /* USER CODE END 4 */ |
2.2 受信バッファとHAL_UART_Receive_IT関数 |
受信バッファg_ubBufferを配列にした場合、受信バッファフルとなった時に HAL_UART_RxCpltCallbackが呼び出されます。 この例であれば、8バイト受信したときに呼び出されます。 /* Private variables ---------------------------------------------------------*/ UART_HandleTypeDef huart2; /* USER CODE BEGIN PV */ static uint8_t g_ubBuffer[8]; /* USER CODE END PV */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART2_UART_Init(); /* USER CODE BEGIN 2 */ HAL_UART_Receive_IT(&huart2, g_ubBuffer, 8); /* USER CODE END 2 */ /* USER CODE BEGIN 4 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { HAL_UART_Transmit_IT(&huart2, g_ubBuffer, 8); HAL_UART_Receive_IT(&huart2, g_ubBuffer, 8); } /* USER CODE END 4 */ |
赤枠の部分がUSART2で、USART2割込みが発生するとUSART2_IRQHandlerが呼び出されます。 以下は、startup_stm32l010f4px.sからの抜粋で、ベクタテーブルです。 |
1バイト受信すると、受信割込みが発生しUSART2_IRQHandlerが呼び出されます。 USART2_IRQHandlerからHAL_UART_IRQHandlerが呼び出されます。 |
ステップオーバーで進めるとhuart->RxISRが呼び出されます。 huart->RxISRはHAL_UART_Receive_ITでUART_RxISR_8BITが設定されます。 |
huart->RxISRでステップインすると、UART_RxISR_8BITが呼び出されます。 ステップオーバーで進めていくと、HAL_UART_RxCpltCallbackが呼び出されます。 |
回路図は以下の通りです。 |