stm32两个外部中断控制led灯,写出程序
时间: 2024-11-15 14:05:01 浏览: 29
在STM32微控制器上,使用外部中断控制LED灯,我们需要配置GPIO作为输出,以及设置适当的中断服务程序来响应外部信号。以下是一个基于Keil MDK编写的STM32F103C8T6的一个简单例子,假设我们有两个外部中断线INT0和INT1连接到LED1和LED2:
```c
#include "stm32f10x.h"
// LED GPIO初始化
void LED_Init(void) {
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; // LED1和LED2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 输出推挽模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
// 中断处理函数模板
void EXTI0_IRQHandler(void) {
if (EXTI_GetITStatus(EXTI_Line0)) { // 如果INT0有中断
GPIO_SetBits(GPIOA, GPIO_Pin_0); // 点亮LED1
EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断标志
}
}
void EXTI1_IRQHandler(void) {
if (EXTI_GetITStatus(EXTI_Line1)) { // 如果INT1有中断
GPIO_SetBits(GPIOA, GPIO_Pin_1); // 点亮LED2
EXTI_ClearITPendingBit(EXTI_Line1); // 清除中断标志
}
}
int main(void) {
LED_Init(); // 初始化LEDs
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // 设置中断优先级组为4
// EXTI中断使能,这里只是一个例子,需根据实际外设连接调整
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
// 开启对应中断和优先级
NVIC_EnableIRQ(EXTI0_IRQn);
NVIC_EnableIRQ(EXTI1_IRQn);
NVIC_SetPriority(EXTI0_IRQn, 0); // INT0优先级,0是最高的
NVIC_SetPriority(EXTI1_IRQn, 0);
while (1) {}
return 0;
}
```
注意,这只是一个基础示例,实际应用中还需要考虑中断嵌套和中断禁止等问题。同时,确保你的硬件接线正确并且中断触发信号连接到了对应的中断输入引脚。
阅读全文