STM32に基づくウォーターランプのシリアル通信実験

目次

1. 実験ツール

2. STM32 は LED ライトの点滅を実現 - HAL ライブラリに基づく

1. CubeMXGPIO の構成は次のとおりです。

2.流水ランププログラム

3. コンパイルして実装する

3. STM32 シリアル通信 - レジスタに基づく

1.ハードウェア接続

 2. シリアル通信プログラム

 3. シリアル ポート アシスタントの設定 

4. コンパイルと実装 

4.まとめ


1. 実験ツール

   1. STM32F103C8T6 最小システム ボード

   2. USB to TTL モジュール 

   3. 複数の LED

   4. 複数のデュポン ライン

   5. KEIL5 および STM32CubeMX ソフトウェア

2. STM32 は LED ライトの点滅を実現 - HAL ライブラリに基づく

1. CubeMXGPIO の構成は次のとおりです。

 ・対応するチップモデルはStm32f103c8t6を選択

 対応するクロックとI / Oポートの構成は以下の通りで、GPIOA1、GPIOA5、GPOB9に対応

CubeMX ペリフェラル クロックの構成プロセスの詳細については、次のリンクを参照してください。 

STM32CubeMX の初期化では、HAL ライブラリを使用してウォーター ランプを実現します。

2.流水ランププログラム

主な手順は以下の通り

	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);			//PA1亮
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);		//PA5灭
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);		//PB9灭
	HAL_Delay(1000);											//延时1000
	  
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);		//PA1灭
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);			//PB9亮
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);		//PB9灭
	HAL_Delay(1000);											//延时1000
	  
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);		//PA1灭
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);		//PB9灭
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);			//PB9亮
	HAL_Delay(1000);											//延时1000	

プログラム主要機能解析 

① HAL_GPIO_WritePin()

対応するピンの高レベルと低レベルを設定するために使用されます.最初のパラメータはIOポートのグループを選択し、2番目のパラメータはピンポートを選択し、3番目のパラメータはピンの高レベルと低レベルを設定します—GPIO_PIN_SET (高レベル)、GPIO_PIN_RESET (低レベル)

②HAL_Delay() 

遅延機能 - 次の変数は遅延時間で、単位はミリ秒です

3. Keil シミュレーション ロジック アナライザー波形観測

GPIOA_1、GPIOA_5、GPIOB_9 の波形は次のように観測されます

シミュレーション波形は、実際の G​​PIO 出力のレベル変換と一致して います

4. コンパイルと実装

効果は以下の通り

Flash_LED

3. STM32 シリアル通信 - レジスタに基づく

1.ハードウェア接続

USB の RX および TX ピンを TTL にそれぞれ STM32F103 最小システム ボードの TX (PA9) および RX (PA10) ピンに接続します。

 2. シリアル通信プログラム

プログラムコードは以下の通り

#include "delay.h"
#include "usart.h"
#include "sys.h"
#include "led.h"

//----------------APB2时钟使能寄存器-----------------//
#define RCC_APB2ENR		*((unsigned volatile int*)0x40021018)
#define RCC_APB2RSTR	*((unsigned volatile int*)0x4002100C)		//外设复位寄存器
	
#define GPIOA_CRH		*((unsigned volatile int*)0x40010804)		//GPIOA配置寄存器
#define GPIOA_ODR		*((unsigned volatile int*)0x4001080C)		//GPIOA输出端口配置寄存器	

#define USART_SR	    *((unsigned volatile int*)0x40013800)		//串口状态寄存器
#define USART_DR		*((unsigned volatile int*)0x40013804)		//数据寄存器
#define USART_BRR		*((unsigned volatile int*)0x40013808)		//波特比率寄存器
#define USART_CR1		*((unsigned volatile int*)0x4001380C)		//usart1控制寄存器


uint8_t Tx_Buf[]="hello world!";				//定义串口发送数据缓冲区

int main()
{
	//系统时钟配置
	Stm32_Clock_Init(9);			//PLL倍频器为9设置系统时钟为72M	
	//延时函数初始化
	delay_init(72);					//延时函数初始化为频率72M的时钟
	//串口初始化
	uart_init(72,115200);			//串口初始化位时钟为72M,baud率为115200
	
	while(1)
	{
		/************串口发送实验**************************/
		int i=0;
		for(;i<sizeof(Tx_Buf);i++)				//发送数据
			{
				USART_DR=Tx_Buf[i];
				while((USART_SR&0x40)==0);		//等待一个字母发送完毕
			}
		delay_ms(1000);			//延时100ms				
	}

}

プログラム主要機能解析 

①上記マクロはUART対応コンフィグレジスタとGPIOコンフィグレジスタを定義

② Stm32_Clock_Init(9); システムクロックの初期化設定、対応する PLL 周波数逓倍率を設定

③ delay_init(72); 遅延関数の初期化、遅延関数のクロック周波数の設定

④ uart_init(72,115200); 通信シリアルポート初期化関数、クロック周波数とボーレートを設定

⑤ USART_DR UARTデータレジスタ、送信するデータをこのレジスタに入れて送信待ち

⑥ USART_SR UARTステータスレジスタ、レジスタの対応するフラグビットをチェックして、データが送信されたかどうかを判断できます

 3. シリアル ポート アシスタントの設定 

シリアル ポート アシスタントを開き (ブロガーは punctual atom の XCOM を使用します)、まず対応する COM ポートを選択し (CH430 の対応する COM をチェックして、デバイス マネージャーに従って設定できます)、データ受信ボーレートを構成します (プログラムと同じでなければならないことに注意してください)シリアルポート構成のボーレートは一貫しています。そうしないと、受信するデータが文字化けするか、受信できない場合があります)、設定が完了したら、シリアルポートを開くことができますUART実験を開始します

4. コンパイルと実装 

実験結果は以下の通り

USART通信

4.まとめ

Stm32 の学習は、本や先生の説明だけにとどまることはできません。開発プロセス全体を体験できるように、自分でさらに実験を行う必要があり、先生の説明や本にとどまることはできません。 .

この実験を通して、レジスタと HAL ライブラリの 2 つの異なる開発方法を経験しました. HAL ライブラリは本当に便利だとしか言いようがありません.レジスターの動作原理に精通し

おすすめ

転載: blog.csdn.net/qq_52791446/article/details/127314157