STM32實現通斷檢測裝置(基於 STM32F103C6T6A + HAL 庫)

永恒月华發表於2024-11-27

一、硬體準備

1. STM32F103C6T6A + STLink 模擬器

2. LED 1 只

3. 杜邦線母對母 2 條,公對母 2 條

4. 麵包板 1 塊


二、線路連線

1. STM32核心板 PA1、PA2 接公對母杜邦線 2 條,末端公頭懸空,等待插入麵包板孔檢測通斷。

2. LED 接母對母杜邦線 2 條,正極接 PA3,負極接 GND。


三、埠配置

1. PA2、PA3 設定為 GPIO_Output

2. PA1 設定為 GPIO_Input


四、程式碼編寫

1. 改寫 GPIO 初始化函式:

 1 static void MX_GPIO_Init(void)
 2 {
 3   GPIO_InitTypeDef GPIO_InitStruct = {0};
 4 /* USER CODE BEGIN MX_GPIO_Init_1 */
 5 /* USER CODE END MX_GPIO_Init_1 */
 6 
 7   /* GPIO Ports Clock Enable */
 8   __HAL_RCC_GPIOA_CLK_ENABLE();
 9 
10   /*Configure GPIO pin Output Level */
11   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_RESET);
12 
13   /*Configure GPIO pins : PA2 PA3 */
14   GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
15   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
16   GPIO_InitStruct.Pull = GPIO_NOPULL;
17   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
18   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
19 
20   /*Configure GPIO pin : PA1 */
21   GPIO_InitStruct.Pin = GPIO_PIN_1;
22   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
23   GPIO_InitStruct.Pull = GPIO_PULLDOWN;
24   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
25 
26 /* USER CODE BEGIN MX_GPIO_Init_2 */
27 /* USER CODE END MX_GPIO_Init_2 */
28 }

改寫的程式碼只有第 23 行,電平設為低,也就是接受高電平輸入。

2. main 初始化部分加入 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET); 使 PA2 輸出高電平用以通斷檢測。

3. main 迴圈部分:

1 if(GPIO_PIN_SET == HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1))
2 {
3     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
4 }
5 else
6 {
7     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
8 }

意思是檢測 PA1 的輸入,如果為高電平則控制 PA3 接 LED 燈亮,否則燈滅(通亮斷滅)。


五、測試執行

燒寫程式碼後,將 PA1 PA2 連線的杜邦線末端公頭分別插入麵包板的兩個孔,若 LED 燈亮,則表示兩孔連通,否則為斷開。

如此便實現了通斷檢測的功能。

相關文章