STM32シリアル通信(2つおよび3つのUSART UARTを含むF1シリーズ)
まず、SCMとPCのシリアル通信の目的と意義:
その安定した性能、低コスト、強力なマイクロコントローラからの誕生以来、それが広く、スマート計測機器、産業機器、および家庭用電子消費者製品に使用されてきました。マイクロコントローラの入出力制御、直接キーパッド及びLCDディスプレイ等に接続されたほかに、一般的に、シリアルポート、およびホストコンピュータPCを介して連通しています。これは、リモートコントロールできるようになりますだけでなく、およびPC強力なデータ処理機能の利点だけでなく、フレンドリーな制御インターフェイスを取ることができます。一般的なPCを使用した場合には、マイクロコントローラを制御し、プラットフォームとしてのホストコンピュータのオペレーティングシステムに基づいており、利点フレンドリーなインターフェイス、および操作をプログラミングすることは比較的容易です。そのため、PC業界では重要な実用的な意義とシリアル通信を持っています。
UART:ユニバーサル非同期レシーバ/トランスミッタUART
USART:汎用同期非同期レシーバ/トランスミッタユニバーサル同期/非同期レシーバトランスミッタ
シリアル通信
データ転送の方向を押します:
、シンプレックス:データ伝送一方向にのみデータ伝送をサポート
B、半二重:両方向で可能にするデータ伝送は、しかし、一度に、一方向のみにデータ伝送を可能にする、それは実際シンプレックスAハンドオフ方向であります
Cは、全二重は:同時に両方向のデータ伝送を可能にし、したがって2つの全二重通信シンプレックス通信モードの組み合わせである、彼は別の受信および送信機能により送信及び受信装置を要求します。
シリアル通信による通信:
、同期通信クロック信号の送信SPIとの同期、IIC通信インタフェース
B、非同期通信:UART(同期非同期送受信機)することなく、クロック同期信号の送信、単一のバス
USART:1,2,3 UART:4,5
第二に、シリアル通信手順
三、STM32F10xプログラミング
この手順は、照明LED2を「2」を送信する、STM32「1」、点灯LED1へシリアルポートを介して機能することです。同時に、コンピュータに戻って、マイクロコントローラ、受信したデータにデータを受け取ります
関数
1つの#include " my_usart.h " 2の#include " stm32f10x.h " 3 4 ボイド My_USART1_Init(ボイド) 5 { 6 GPIO_InitTypeDef KST_GPIO_Structure。 7 USART_InitTypeDef KST_USART_Structure。 8 NVIC_InitTypeDef KST_NVIC_Structure。 9 10 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA、ENABLE)。 // 使能GPIOA时钟 11 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1、ENABLE)。 // 使能USART1时钟 12 13 = GPIO_Mode_AF_PP KST_GPIO_Structure.GPIO_Mode; // 多重化プッシュプル出力 14 KST_GPIO_Structure.GPIO_Pin = GPIO_Pin_9; 15 KST_GPIO_Structure.GPIO_Speed = GPIO_Speed_10MHz; 16 (GPIOAと、&KST_GPIO_Structure)GPIO_Init; // 初期化GPIOA.9 。17 18である KST_GPIO_Structure.GPIO_Mode = GPIO_Mode_IN_FLOATING; / / フローティング入力 19 KST_GPIO_Structure.GPIO_Pin = GPIO_Pin_10; 20 KST_GPIO_Structure.GPIO_Speed = GPIO_Speed_10MHz; 21である (GPIOAと、&KST_GPIO_Structure)GPIO_Init; //初期GPIOA.10 22は、 23である KST_USART_Structure.USART_BaudRate = 115200 ; // ボーレートを設定115200 24 KST_USART_Structure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // ハードウェアフロー制御なし 25 KST_USART_Structure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 送受信モード 26である KST_USART_Structure。 = USART_Parity_No USART_Parity; // パリティビットなし 27 KST_USART_Structure.USART_StopBits = USART_StopBits_1; // ストップビット 28 KST_USART_Structure.USART_WordLength = USART_WordLength_8b; //8ビットワード長モードデータ 29 30 USART_Init(USART1、&KST_USART_Structure); //は、シリアルポートを初期化する1 31である USART_Cmd(USART1、ENABLE); // シリアルポートイネーブル 32 USART_ITConfig(USART1、USART_IT_RXNE、イネーブル); // 有効割り込み 33は 34であります = KST_NVIC_Structure.NVIC_IRQChannel USART1_IRQn; 35 KST_NVIC_Structure.NVIC_IRQChannelCmd = ENABLE; // IRQが通路イネーブル 36 KST_NVIC_Structure.NVIC_IRQChannelPreemptionPriority =を1。 ; // 先取り優先順位1 37 [ = KST_NVIC_Structure.NVIC_IRQChannelSubPriority 1 ; // 子の優先順位1 38である NVIC_Init(&KST_NVIC_Structure); // 指定されたパラメータが初期化されているNVICレジスタ 39 } 40 41れる 空隙 USART1_IRQHandler(ボイド) // COM1ターミナルサービス機能 42は 、{ 43は、 U8のRES。 44れます IF(USART_GetITStatus(USART1、USART_IT_RXNE)) // 受信割り込み 45 { 46は RES = USART_ReceiveData(USART1); // 受信データ読み取り 47を IF(RES ==' 1 ' ) 48 { 49 GPIO_ResetBits(GPIOB、GPIO_Pin_5); // LEDL照明 50 USART_SendData(USART1、RES); //は、データ送信 51である } 52が IFを RES ==(' 2 ' ) 53は 、{ 54である 。GPIO_ResetBits(GPIOE、 GPIO_Pin_5); // LED2点灯 55 USART_SendData(USART1、RES); // 送信データ 56 } 57は、 58 } 59 }
主な機能
1つの#include " stm32f10x.h " 2の#include " my_usart.h " 3。の#include " led.h " 4。 5。 INTメイン(ボイド) 6。 { 7。 LED_Init(); // 初期化LED 。8 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 提供NVIC割り込みパケット2:2先取り優先順位、優先順位2応答 。9 My_USART1_Init(); // シリアルポートの初期化 10 ながら(1 ); 11。 }