STM32F4外部中断怎么都解决不了,求助
1个回答
2015-04-30 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517176
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
001 #include "exti.h"
002 #include "delay.h"
003 #include "led.h"
004 #include "key.h"
005 #include "beep.h"
006
007 //外部中断0服务程序
008 void EXTI0_IRQHandler(void)
009 {
010 delay_ms(10); //消抖
011 if(WK_UP==1)
012 {
013 BEEP=!BEEP;
014 }
015 EXTI_ClearITPendingBit(EXTI_Line0);
016 }
017 //外部中断2服务程序
018 void EXTI2_IRQHandler(void)
019 {
020 delay_ms(10); //消抖
021 if(KEY2==0)
022 {
023 LED0=!LED0;
024 LED1=!LED1;
025 }
026 EXTI_ClearITPendingBit(EXTI_Line2);
027 }
028 //外部中断3服务程序
029 void EXTI3_IRQHandler(void)
030 {
031 delay_ms(10); //消抖
032 if(KEY1==0)
033 {
034 LED1=!LED1;
035 }
036 EXTI_ClearITPendingBit(EXTI_Line3); //清除LINE3上的中断标志位
037 }
038 //外部中断4服务程序
039 void EXTI4_IRQHandler(void)
040 {
041 delay_ms(10); //消抖
042 if(KEY0==0)
043 {
044 LED0=!LED0;
045 }
046 EXTI_ClearITPendingBit(EXTI_Line4);//清除LINE4上的中断标志位
047 }
048
049 //外部中断初始化程序
050 //初始化PE2~4,PA0为中断输入.
051 void EXTIX_Init(void)
052 {
053 NVIC_InitTypeDef NVIC_InitStructure;
054 EXTI_InitTypeDef EXTI_InitStructure;
055
056 KEY_Init();
057
058 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟
059
060
061 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);//PE2 连接到中断线2
062 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource3);//PE3 连接到中断线3
063 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource4);//PE4 连接到中断线4
064 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);//PA0 连接到中断线0
065
066 /* 配置EXTI_Line0 */
067 EXTI_InitStructure.EXTI_Line = EXTI_Line0;//LINE0
068 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件
069 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发
070 EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能LINE0
071 EXTI_Init(&EXTI_InitStructure);//配置
072
073 /* 配置EXTI_Line2,3,4 */
074 EXTI_InitStructure.EXTI_Line = EXTI_Line2 | EXTI_Line3 | EXTI_Line4;
075 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件
076 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
077 EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断线使能
078 EXTI_Init(&EXTI_InitStructure);//配置
079
080
081 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//外部中断0
082 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//抢占优先级0
083 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2
084 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道
085 NVIC_Init(&NVIC_InitStructure);//配置
086
087 NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//外部中断2
088 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//抢占优先级3
089 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2
090 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道
091 NVIC_Init(&NVIC_InitStructure);//配置
092
093
094 NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;//外部中断3
095 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级2
096 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2
097 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道
098 NVIC_Init(&NVIC_InitStructure);//配置
099
100
101 NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;//外部中断4
102 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;//抢占优先级1
103 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2
104 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道
105 NVIC_Init(&NVIC_InitStructure);//配置
106
107 }
01 void KEY_Init(void) //IO初始化
02 {
03 GPIO_InitTypeDef GPIO_InitStructure;
04 //初始化KEY0-->GPIOA.13,KEY1-->GPIOA.15 上拉输入
05 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);//使能PORTA,PORTE时钟
06
07 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;//PE2~4
08 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
09 GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE2,3,4
10
11 //初始化 WK_UP-->GPIOA.0 下拉输入
12 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
13 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0设置成输入,默认下拉
14 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.0
15
16 }
002 #include "delay.h"
003 #include "led.h"
004 #include "key.h"
005 #include "beep.h"
006
007 //外部中断0服务程序
008 void EXTI0_IRQHandler(void)
009 {
010 delay_ms(10); //消抖
011 if(WK_UP==1)
012 {
013 BEEP=!BEEP;
014 }
015 EXTI_ClearITPendingBit(EXTI_Line0);
016 }
017 //外部中断2服务程序
018 void EXTI2_IRQHandler(void)
019 {
020 delay_ms(10); //消抖
021 if(KEY2==0)
022 {
023 LED0=!LED0;
024 LED1=!LED1;
025 }
026 EXTI_ClearITPendingBit(EXTI_Line2);
027 }
028 //外部中断3服务程序
029 void EXTI3_IRQHandler(void)
030 {
031 delay_ms(10); //消抖
032 if(KEY1==0)
033 {
034 LED1=!LED1;
035 }
036 EXTI_ClearITPendingBit(EXTI_Line3); //清除LINE3上的中断标志位
037 }
038 //外部中断4服务程序
039 void EXTI4_IRQHandler(void)
040 {
041 delay_ms(10); //消抖
042 if(KEY0==0)
043 {
044 LED0=!LED0;
045 }
046 EXTI_ClearITPendingBit(EXTI_Line4);//清除LINE4上的中断标志位
047 }
048
049 //外部中断初始化程序
050 //初始化PE2~4,PA0为中断输入.
051 void EXTIX_Init(void)
052 {
053 NVIC_InitTypeDef NVIC_InitStructure;
054 EXTI_InitTypeDef EXTI_InitStructure;
055
056 KEY_Init();
057
058 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟
059
060
061 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);//PE2 连接到中断线2
062 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource3);//PE3 连接到中断线3
063 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource4);//PE4 连接到中断线4
064 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);//PA0 连接到中断线0
065
066 /* 配置EXTI_Line0 */
067 EXTI_InitStructure.EXTI_Line = EXTI_Line0;//LINE0
068 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件
069 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发
070 EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能LINE0
071 EXTI_Init(&EXTI_InitStructure);//配置
072
073 /* 配置EXTI_Line2,3,4 */
074 EXTI_InitStructure.EXTI_Line = EXTI_Line2 | EXTI_Line3 | EXTI_Line4;
075 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件
076 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
077 EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断线使能
078 EXTI_Init(&EXTI_InitStructure);//配置
079
080
081 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//外部中断0
082 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//抢占优先级0
083 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2
084 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道
085 NVIC_Init(&NVIC_InitStructure);//配置
086
087 NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//外部中断2
088 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//抢占优先级3
089 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2
090 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道
091 NVIC_Init(&NVIC_InitStructure);//配置
092
093
094 NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;//外部中断3
095 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级2
096 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2
097 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道
098 NVIC_Init(&NVIC_InitStructure);//配置
099
100
101 NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;//外部中断4
102 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;//抢占优先级1
103 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2
104 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道
105 NVIC_Init(&NVIC_InitStructure);//配置
106
107 }
01 void KEY_Init(void) //IO初始化
02 {
03 GPIO_InitTypeDef GPIO_InitStructure;
04 //初始化KEY0-->GPIOA.13,KEY1-->GPIOA.15 上拉输入
05 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);//使能PORTA,PORTE时钟
06
07 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;//PE2~4
08 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
09 GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE2,3,4
10
11 //初始化 WK_UP-->GPIOA.0 下拉输入
12 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
13 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0设置成输入,默认下拉
14 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.0
15
16 }
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
迪凯特科技(北京)有限公司
2023-07-28 广告
2023-07-28 广告
单片机的UART口通信速度通常取决于以下几个因素:1. 硬件规格:不同的单片机UART接口具有不同的最大传输速率,通常在数百Kbps到数Mbps的范围内。例如,某些常见的单片机,如STM32F103C8T6,其UART接口的最大传输速率可达...
点击进入详情页
本回答由迪凯特科技(北京)有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询