シリアルポート設定の一般的な手順は、次の手順に要約できます。
1)シリアルポートクロックイネーブル、GPIOクロックイネーブル
2)シリアルポートリセット
3)GPIOポートモード設定
4)シリアルポートパラメータの初期化
5)割り込みを開始し、NVICを初期化します(このステップは、割り込みが必要な場合にのみ必要です)
6)シリアルポートを有効にします
7)割り込みハンドラ関数を書く
水色はシリアルポート1の例、濃い青は構造関数、構造をKeil5にコピーして右クリックできます
構造などに必要なパターンをよく見てください。
1.シリアルクロックイネーブル:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1);
2.シリアルポートのリセット:
void USART_DeInit(USART_TypeDef * USARTx); //シリアルポートのリセット
シリアルポート1をリセットするとします
。USART_DeInit(USART1); //シリアルポートをリセットします
3.シリアルポートパラメータの初期化:ボーレート、ワード長、ストップビット、パリティビット、ハードウェアデータフロー制御、モード(受信、送信)を設定します。
void USART_Init(USART_TypeDef * USARTx、USART_InitTypeDef * USART_InitStruct);
シリアルポート1のパラメーターを初期化するとします。
結合= USART_InitStructure.USART_BaudRate; // ボーレート; USART_InitStructure.USART_WordLength = USART_WordLength_8b; // ワード長は8ビットデータフォーマット USART_InitStructure.USART_StopBits = USART_StopBits_1; // ストップビット USART_InitStructure.USART_Parity = USART_Parity_Noは; // パリティなしビット USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // ハードウェアフロー制御なし USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // トランシーバモード USART_Init(USART1、&USART_InitStructure); //は、シリアルポートを初期化します
4.データの送受信:
USART_DRレジスタを操作してデータを送信するSTM32ライブラリ関数の機能は次の
とおりです:void USART_SendData(USART_TypeDef * USARTx、uint16_t Data);
この関数を介してシリアルレジスタUSART_DRにデータを書き込みます。
USART_DRレジスタを操作してシリアルポートで受信したデータを読み取るSTM32ライブラリ関数の機能は、
uint16_t USART_ReceiveData(USART_TypeDef * USARTx);
この関数により、シリアルポートで受信したデータを読み取ることができます。
5.シリアルポートのステータス:
FlagStatus USART_GetFlagStatus(USART_TypeDef * USARTx、uint16_t USART_FLAG);
RXNE:データを読み取って
、読み取りレジスターが空でない(RXNE)かどうかを判別します。ライブラリー関数の操作方法は、
USART_GetFlagStatus(USART1、USART_FLAG_RXNE);
TC:送信が完了
したかどうか、送信が完了したかどうか(TC)を判別する必要があります。ライブラリー関数の操作方法は、次のとおりです。
USART_GetFlagStatus(USART1、USART_FLAG_TC);
6.シリアルポートの有効化:
USART_Cmd(USART1、ENABLE);
7.シリアルポート応答割り込みを開きます。
void USART_ITConfig(USART_TypeDef * USARTx、uint16_t USART_IT、FunctionalState NewState)
割り込みを生成するためのデータの受信
USART_ITConfig(USART1、USART_IT_RXNE、ENABLE); //割り込みを開き、データ割り込みを受信し、割り込み
を開くためにデータを送信
USART_ITConfig(USART1、USART_IT_TC、ENABLE);
8.対応する割り込みステータスを取得します。
USART_GetITStatus(USART_TypeDef * USARTx、uint16_t USART_IT)
シリアル送信完了割り込みは、割り込みが発生したとき、我々はハンドラを中断することができ、これを呼び出し、
最後に方法割り込みシリアル送信完了であるかどうかを決定する関数である:
USART_GetITStatus(USART1、USART_IT_TC)
シリアルポートの例
// IOシリアルポート1を初期化 // バウンド:ボーレート void uart_init(u32バウンド) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitStructure; // ①シリアルクロックイネーブル、GPIOクロックイネーブル、多重化クロックイネーブル RCC_APB2 | RCC_APB2Periph_GPIOA、ENABLE); // USART1、GPIOAクロックを有効にする // ②シリアルポートリセット USART_DeInit(USART1); // シリアルポート1をリセットする // ③GPIOポートモード設定 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // ISART1_TX PA.uc GP_ucture_Init = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 多重化プッシュプル出力 GPIO_Init(GPIOAと、&GPIO_InitStructure); // 初期化GPIOA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // USART1_RX PA.10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // フローティング入力 GPIO_Init (GPIOA、&GPIO_InitStructureで); //はGPIOA.10を初期化 // ④初期シリアル USART_InitStructure.USART_BaudRate =結合; // ボーレートセット USART_InitStructure.USART_WordLength = USART_WordLength_8b; // ワード長が8ビットである USART_InitStructure.USART_StopBits = USART_StopBits_1; / /ワンストップは、ビット ; USART_InitStructure.USART_Parity = USART_Parity_No // パリティなし USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // ハードウェアフロー制御なし USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Txを; // トランシーバモード USART_Init(USART1、&USART_InitStructure); // シリアルポート初期化 の#ifを EN_USART1_RX // もし使用可能な受信器 // ⑤初期化NVIC NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3 ; // 先取り優先順位3 = NVIC_InitStructure.NVIC_IRQChannelSubPriority3 ; // サブプライオリティレベル3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // IRQチャネルを有効にする NVIC_Init(&NVIC_InitStructure); // 割り込み優先度の初期化 // 割り込みを 有効にするUSART_ITConfig(USART1、USART_IT_RXNE、ENABLE); // 割り込みを有効にする # endif // ⑥ シリアルポートを有効にするUSART_Cmd(USART1、ENABLE); // シリアルポートを有効にする }