STM32 PB3 PB4 配置为普通IO口 HAL库 LL

PB3、PB4默认的为JTAG口,所以使用前一定要配置。

1、打开重映射时钟和重映射后的I/O口引脚时钟

2、重映射,关闭JTAG功能

HAL代码如下:

  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB);
  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_AFIO);    // 缺少这个时钟就不能配置成功
	__HAL_AFIO_REMAP_SWJ_NOJTAG();        

标准库代码如下:

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);

以下是HAL库的代码示例,实现PC13和PB5引脚的外部中断函数: ```c // 定义PC13和PB5引脚的中断标志变量 volatile uint8_t PC13_Interrupt_Flag = 0; volatile uint8_t PB5_Interrupt_Flag = 0; // PC13引脚的中断处理函数 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == GPIO_PIN_13) { PC13_Interrupt_Flag = 1; } else if (GPIO_Pin == GPIO_PIN_5) { PB5_Interrupt_Flag = 1; } } int main(void) { // 初始化代码省略 // 配置PC13引脚为外部中断线路 HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); // 配置PB5引脚为外部中断线路 HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI9_5_IRQn); while (1) { if (PC13_Interrupt_Flag) { // PC13引脚中断处理代码 PC13_Interrupt_Flag = 0; } if (PB5_Interrupt_Flag) { // PB5引脚中断处理代码 PB5_Interrupt_Flag = 0; } } } // EXTI15_10中断处理函数,对应PC13引脚 void EXTI15_10_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13); } // EXTI9_5中断处理函数,对应PB5引脚 void EXTI9_5_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5); } ``` 在上面的代码中,我们定义了两个中断标志变量`PC13_Interrupt_Flag`和`PB5_Interrupt_Flag`,用于标识相应引脚是否发生中断。在`HAL_GPIO_EXTI_Callback()`函数中,判断引脚是否为PC13或PB5,如果是则将相应标志变量赋值为1。 在主函数中,不断检测中断标志变量是否被置位,如果是则执行相应的中断处理代码,并将标志变量重置为0。 在中断处理函数中,使用`HAL_GPIO_EXTI_IRQHandler()`函数调用HAL库的默认中断处理函数`HAL_GPIO_EXTI_Callback()`,实现引脚的中断处理。 请根据您的具体需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值