STM32F103VET6基于STM32CubeMX创建EXTI外部中断工程

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32F103VET6基于STM32CubeMX创建EXTI外部中断工程相关的知识,希望对你有一定的参考价值。

STM32F103VET6基于STM32CubeMX创建EXTI外部中断工程


  • ✨EXTI外部中断参数配置演示

  • 📗STM32F103VET6简介

📋STM32F103xC, STM32F103xD和STM32F103xE性能线系列集成了高性能的ARM®Cortex®-M3 32位RISC核心,在72 MHz频率下工作,高速嵌入式存储器(高达512千字节的闪存和高达64千字节的SRAM),以及广泛的增强I/ o和连接到两个APB总线的外设。所有设备都提供3个12位adc, 4个通用16位定时器和两个PWM定时器,以及标准和高级通信接口:最多2个i2c, 3个spi, 2个I2Ss, 1个SDIO, 5个usart,一个USB和一个CAN。

📚EXTI外部中断配置流程

🎉通过STM32CubeMX配置EXTI外部中断工程,只需要完成最后一步的重写回调函数中的内容即可。

  • HAL_NVIC_SetPriority:定义在stm32f1xx_hal_cortex.c文件中。

🌿该函数生成在MX_GPIO_Init()GPIO初始函数中。

  • HAL_NVIC_EnableIRQ:定义在stm32f1xx_hal_cortex.c文件中。

🌿该函数也是生成在MX_GPIO_Init()GPIO初始函数中。

  • HAL_GPIO_EXTI_IRQHandler:回调函数,定义在stm32f1xx_hal_gpio.c文件中,是一个弱函数,在使用时需要重写该函数内容。

🌿将该函数在main.c中重写内容。

#include "stdio.h"//在调用printf地方包含此头文件
//重写回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

		static uint32_t tick = 0;
	
		/* 非阻塞消抖 */
		if(HAL_GetTick() -  tick < 300)
				return;		
		tick = HAL_GetTick();
		
/*判断是中断引脚*/
		if(GPIO_Pin == GPIO_PIN_7)
		
				HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5);//状态翻转
			 printf("PE7 KEYPRESS \\n");
		
		if(GPIO_Pin == GPIO_PIN_8)
		
				HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);//状态翻转
		    printf("PE8 KEYPRESS \\n");
		

📝这里配置的是当中断引脚PE8、PE7有按键被按下的时候,将通过串口打印一条信息出来。

📓串口printf重映射

  • 🍂在usart.c中添加下面的内容,并在Keil菜单中target设置里面,勾选Use Micro LIB
#include "stdio.h"
/*可调用printf*/
int fputc(int ch,FILE *f)

    /*&huart1指的是串口1,如果用别的串口就修改数字*/
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch , 1 , 0xffff);
    return ch;

⛳程序示例源码

链接:https://pan.baidu.com/s/1Pq9X8zCguQM2dzNscgmUGw 
提取码:qfbq

以上是关于STM32F103VET6基于STM32CubeMX创建EXTI外部中断工程的主要内容,如果未能解决你的问题,请参考以下文章

STM32F103VET6基于STM32CubeMX创建EXTI外部中断工程

STM32F103VET6基于STM32CubeMX RTC时钟秒更新中断使用示例

STM32F103VET6基于STM32CubeMX 配置非DMA方式获取内部温度

STM32F103VET6基于STM32CubeMX 配置硬件I2C驱动ssd1306 OLED屏幕

STM32F103VET6基于STM32CubeMX RTC时钟使用示例

STM32F103VET6基于STM32CubeMX 配置DMA方式获取内部温度