STM32+UARTシリアルポート+DMAトランシーバー

目次

1. Cubemax の端末構成

1.1 初期設定

1.2 GPIO 構成

 1.3 UART 構成

1.3.1 シリアルポートの基本構成

1.3.2 DMA 構成

2. キールコードの設計

2.1 初期設定

2.2 DMA受信初期化設定

2.3 DMA 送信設定

 2.4 受信コールバック関数の設定

2.5 コールバック関数の内容コードの記述

2.5.1 受信コールバック関数

2.5.2 コールバック関数の送信

2.6 コールバック関数の内容コードの最適化


1. Cubemax の端末構成

1.1 初期設定

まず、STM32cubemax を通じて基本構成を実行します。

 cubemaxの基本構成

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 を構成する必要があります。

 

 

おすすめ

転載: blog.csdn.net/weixin_44597885/article/details/130897647