EXTI外部中断实例:对射式红外传感器、旋转编码器

外部中断初始化:

①:打开RCC时钟。分别打开外设GPIO、AFIO。EXTI与NVIC的时钟是一直开启的,无需我们设置。

②:配置GPIO。

③:配置AFIO。(其库函数文件在GPIO.h里面)使用EXTILineConfig()。

(与AFIO有关的库函数的介绍)

GPIO_EventOutputConfig(), GPIO-EventOutputCmd(),用于配置AFIO的事件输出功能

GPIO_PinRemapConfig(重映射方式,新的状态),可用来进行引脚的重映射。

GPIO_EXTILineConfig(),用于配置AFIO的数据选择器,来选择我们想要中断的引脚。

④:配置EXTI。

⑤:配置NVIC.(其库函数文件在misc.h里面)。先指定中断的分组,再初始化。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在CubeIDE中编写C语言代码来控制对射红外传感器中断流水灯可以分为以下几个步骤: 1. 创建一个新的工程:在CubeIDE中创建一个新的工程,并选择适合你的开发板。 2. 配置相应的引脚:使用CubeIDE的Pinout & Configuration工具配置红外传感器的发射器和接收器引脚,以及LED灯的引脚。 3. 编写代码:打开main.c文件,编写以下代码: ```c #include "main.h" #include "stm32f1xx_hal.h" // 定义红外发射器引脚 #define IR_EMITTER_PIN GPIO_PIN_0 #define IR_EMITTER_PORT GPIOA // 定义红外接收器引脚 #define IR_RECEIVER_PIN GPIO_PIN_1 #define IR_RECEIVER_PORT GPIOA // 定义LED灯引脚 #define LED_PIN GPIO_PIN_13 #define LED_PORT GPIOC // 定义中断状态变量 volatile uint8_t irInterruptFlag = 0; // 中断回调函数 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == IR_RECEIVER_PIN) { // 红外接收器中断触发 irInterruptFlag = 1; } } int main(void) { HAL_Init(); SystemClock_Config(); // 初始化GPIO GPIO_InitTypeDef GPIO_InitStruct = {0}; // 初始化红外发射器引脚 GPIO_InitStruct.Pin = IR_EMITTER_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(IR_EMITTER_PORT, &GPIO_InitStruct); // 初始化红外接收器引脚 GPIO_InitStruct.Pin = IR_RECEIVER_PIN; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(IR_RECEIVER_PORT, &GPIO_InitStruct); // 初始化LED灯引脚 GPIO_InitStruct.Pin = LED_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct); while (1) { if (irInterruptFlag) { // 红外接收器中断触发,LED灯亮起 HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET); HAL_Delay(500); // 可根据需要调整延时时间 HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET); irInterruptFlag = 0; } } } ``` 以上代码假设红外发射器引脚连接到PA0,红外接收器引脚连接到PA1,LED灯引脚连接到PC13。代码中使用了STM32的HAL库来进行GPIO的初始化和中断处理。 4. 编译和下载:编译代码并下载到你的开发板中。 请注意,在实际使用中,你可能需要根据你的硬件连接和需求进行适当的修改。此外,还需要根据你所使用的具体开发板和外设接口,进行相应的引脚配置和库函数调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值