目次
1. Cubemax の端末構成
1.1 初期設定
まず、STM32cubemax を通じて基本構成を実行します。
1.2 GPIO 構成
小さな LED ライト (アクティブ High) を使用して効果を観察し、次の図に示すように PB0 ピンの GPIO を構成します。
1.3 UART 構成
1.3.1 シリアルポートの基本構成
1.3.2 DMA 構成
以下の図に示すように、最初に RX を設定します。
次に、次の図に示すように、TX を構成します (デフォルトで問題ありません)。
2. キールコードの設計
2.1 初期設定
まず、次の図に示すように、main 関数の上に送受信配列を設定します。
uint8_t tx[] = "TX ok";
uint8_t Rx[2];
2.2 DMA受信初期化設定
HAL_UART_Receive_DMA(&huart1,Rx,sizeof(Rx));
2.3 DMA 送信設定
HAL_UART_Transmit_DMA(&huart1,tx,sizeof(tx));
HAL_Delay(1000);
2.4 受信コールバック関数の設定
以下の図に示すように、まず HAL_UART_RxCPltCallback(UART_HandleTypeDef *huart) 関数を見つけます。
次に、以下に示すように、main 関数の上に関数をコピーします。
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(huart);
/* NOTE: This function should not be modified, when the callback is needed,
the HAL_UART_RxCpltCallback could be implemented in the user file
*/
}
2.5 コールバック関数の内容コードの記述
2.5.1 受信コールバック関数
//受信データLED光量反転
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart1.Instance == USART1)
{
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
}
}
2.5.2 コールバック関数の送信
受信側コールバック関数の R を T に変更して、送信側コールバック関数を実現します。以下に示すように:
データが送信されると、次の図に示すようにコールバック関数が機能します。
uint8_t tx2[] = "TX_IT ok";
//发送回调函数
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart1.Instance == USART1)
{
HAL_UART_Transmit_DMA(&huart1,tx,sizeof(tx2));
}
}
2.6 コールバック関数の内容コードの最適化
コールバック関数に遅延が追加されるとプログラムが停止するため、次の図に示すように NVIC を構成する必要があります。