STM32F103检测PB3引脚状态控制PB5输出状态固件库编程代码
时间: 2024-09-23 09:07:46 浏览: 47
STM32F103RCT6芯片引脚功能的一些主要方面
在STM32F103微控制器上,如果你想要检测PB3引脚的状态并基于此控制PB5引脚,你可以使用HAL库提供的GPIO功能。以下是使用固件库编写的基本代码示例:
```c
#include "stm32f1xx_hal.h"
// 定义GPIO初始化结构体
GPIO_InitTypeDef GPIO_InitStructure;
void EXTI_PB3_IRQHandler(void)
{
// 处理PB3引脚的外部中断请求
if (__HAL_GPIO_EXTI_GET_IT(GPIOB, GPIO_Pin_3) != RESET) {
// 如果PB3被拉低(通常代表按键按下)
if (__HAL_GPIO_ReadPin(GPIOB, GPIO_Pin_3) == GPIO_PIN_RESET) {
__HAL_GPIO_WritePin(GPIOB, GPIO_Pin_5, GPIO_PIN_SET); // 设置PB5为高电平
// 这里可以添加更多的处理逻辑,比如计数、触发其他事件等
}
else {
__HAL_GPIO_WritePin(GPIOB, GPIO_Pin_5, GPIO_PIN_RESET); // 清除PB5
}
// 提交中断处理完成标志
__HAL_GPIO_EXTI_CLEAR_FLAG(GPIOB, GPIO_Pin_3);
}
}
int main(void)
{
// 初始化GPIOB
GPIO_InitStructure.Pin = GPIO_Pin_3 | GPIO_Pin_5; // PB3 和 PB5
GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING; // 检测下降沿
GPIO_InitStructure.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
// 配置PB3的外部中断
HAL_NVIC_EnableIRQ(EXTI0_IRQn); // EXTI0对应PB3的中断
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); // 设置中断优先级
while (1) {
// 主循环,这里假设不做其他操作
}
}
阅读全文