STM32实现通断检测装置(基于 STM32F103C6T6A + HAL 库)
一、硬件准备
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 灯亮,则表示两孔连通,否则为断开。
如此便实现了通断检测的功能。

浙公网安备 33010602011771号