大テント
1. GPIOポートの概要
各GPIOポートには、2つの32ビット構成レジスタ(GPIOx_CRLおよびGPIOx_CRH)、2つの32ビットデータレジスタ(GPIOx_IDRおよびGPIOx_ODR)、32ビットの位置/リセットレジスタ(GPIOx_BSRR)、16ビットのリセットレジスタ(GPIOx_BRR)および1つ32ビットロックレジスタ(GPIOx_LCKR)
GPIOポートの各ビットは、ソフトウェアで複数のモードに構成できます:入力フローティング、入力プルアップ、入力プルダウン、アナログ入力、オープンドレイン出力、プッシュプル出力、プッシュプルマルチプレックス機能およびオープンドレイン多重化機能を備え
たI / Oポートビットの基本構造は次のとおりです
2.ハードウェア設計
LED(D0〜D7)の一端はプルアップ3.3Vに接続され、もう一端はSTM32F103のPC0-PC7ピンに接続されます。この実験では、D1とD2のみが使用されています。接続の回路図は次のとおりです。
3.ソフトウェア設計
3.1 STM32CubeMX設定
- RCCは外部HSEを設定、クロックは72Mに設定
- PC0とPC2はGPIOプッシュプル出力モード、プルアップ、高速に設定され、デフォルトの出力レベルは高
- プロジェクト名を入力し、プロジェクトパス(中国語以外)を選択し、MDK-ARM V5を選択します。IPごとに「.c / .h」ファイルのペアとして生成されたペリフェラルの初期化を確認します。「コードを生成」をクリックしてプロジェクトコードを生成します
3.2 MDK-ARMソフトウェアプログラミング
- PC0 / PC1ピンの初期化関数は、gpio.cファイルで確認できます。
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {
0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE(); //开启GPIOC时钟
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOC, LED1_Pin|LED2_Pin, GPIO_PIN_SET); //PC0和PC1置1,默认初始化后灯灭
/*Configure GPIO pins : PCPin PCPin */
GPIO_InitStruct.Pin = LED1_Pin|LED2_Pin; //PC0和PC1
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_InitStruct.Pull = GPIO_PULLUP; //上拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; //高速
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
- マーキープログラムをmain.c関数で記述します(記述したプログラムは対応するUSER CODEの範囲にある必要があります。それ以外の場合、CubeMXを使用して構成を再度変更すると、USER CODEの範囲外のプログラムはクリアされます)。
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET); //LED1亮
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET); //LED1灭
HAL_Delay(500); //延时500ms
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_RESET); //LED2亮
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_SET); //LED2灭
HAL_Delay(500); //延时500ms
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
4.ダウンロードの確認
- プロジェクトをコンパイルして、次の結果を取得します。
上記のコンパイル情報からわかるように、コードはFLASHサイズ:2956バイト(2604 + 352)を使用し、使用されるSRAMサイズは1040バイト(16 + 1024)です。
コンパイル結果のデータの意味は次のとおりです。:-
コード:プログラムが使用するFLASHのサイズを示します(FLASH)
-RO-data:読み取り専用データ、プログラムが定義した定数を示します(FLASH)
-RW-data:読み取り書き込みデータ、初期化された変数を示します(SRAM)
-ZI-data:初期化されていない変数(SRAM)を意味するゼロInit-data
これにより、現在使用しているフラッシュとsramのサイズを知ることができるため、プログラムのサイズはそうではないことに注意する必要があります。 hexファイルのサイズ、ただしコンパイルされたコードとROデータの合計
- 対応するエミュレータを選択してプログラムをダウンロードします