stm32f103c8t6红外避障
时间: 2025-02-04 10:17:20 浏览: 87
### STM32F103C8T6与红外避障传感器的应用
#### 红外避障传感器的工作原理
红外避障传感器通过发射红外线并接收反射回来的信号来检测障碍物的存在。当有物体靠近时,传感器会输出低电平;反之,则保持高电平。
对于STM32F103C8T6单片机而言,可以利用其GPIO端口读取来自红外避障传感器的状态变化[^1]。
#### GPIO配置
为了使能外部中断功能以便及时响应传感器状态的变化,在初始化阶段需设置相应的引脚模式以及NVIC优先级分组:
```c
void IR_Init(void){
// 初始化GPIOA, 设置PA0为输入浮空模式
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);
// 配置中断优先级
HAL_NVIC_SetPriority(EXTI0_IRQn, 1 , 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}
```
上述代码实现了对外部中断源`EXTI Line0`(对应于PA0)下降沿触发方式下的初始化工作,并启用了该线路对应的全局中断允许位[^2]。
#### 中断服务程序编写
当中断发生时,进入以下ISR处理逻辑,这里简单地切换LED灯作为反馈动作展示:
```c
void EXTI0_IRQHandler(void){
if(__HAL_GPIO_EXTI_GET_FLAG(GPIO_PIN_0)){
__HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_0);
static uint8_t led_state=0;
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==RESET){ // 当前无遮挡
led_state=!led_state;
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,(GPIO_PinState)led_state);
}
}
}
```
这段代码展示了如何在一个实际项目中应用红外避障模块配合STM32系列MCU完成基本的功能开发——即每当检测到前方无障碍物时就改变板载LED的状态以作提示[^3]。
阅读全文
相关推荐














