173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

stm32f4不进中断

keros@mark 2023-03-18 资讯中心

STM32F042K6的CAN接收中断进不去,求教

如题,我的CAN1和CAN2用的相同方式配置,CAN1接收、发送没问题,CAN2只能发送,进不了接收中断,CAN2接收使用的是FIFO0,请教是什么问题?

void CAN_HardwareInit(u8 canChan,float bps,u8 mode,u8 rxIntType)

{

GPIO_InitTypeDef GPIO_InitStructure;

CAN_InitTypeDef CAN_InitStructure;

CAN_FilterInitTypeDef CAN_FilterInitStructure;

u8 i = 0;

switch (canChan)

{

case CAN1_CHANNEL:

#if CAN1_USE_GPIOA_EN

//使能相关时钟

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能PORTA时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1时钟

//初始化GPIO

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11| GPIO_Pin_12;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出

proteusstm32仿真无法进入定时器中断

如果ProteusSTM32仿真无法进入定时器中断,可能是因为定时器中断的配置问题造成的。请检查定时器中断的中断优先级是否已正确设置,并且中断函数是否已正确添加到中断向量表中,最后再检查中断是否已正确使能,这样就可以保证定时器中断的正常运行了。

STM32 进入不了中断

/*我不知道你之前的程序,没法判断你错在哪。试试我调试成功的吧,你对照着看看有什么错误。正常情况PB5678循环亮,中断EXTI0_IRQHandler()发生后PB56循环亮,EXTI1_IRQHandler()发生后PB78循环亮,EXTI0的优先级高于EXTI1*/

#include "stm32f10x.h"

extern void Delay(vu32 nCount);

extern void delay(uint);

void RCC_Config(void);

void GPIO_Config(void);

void EXTI_Config(void);

void NVIC_Config(void);

int main(void)

{

//SystemInit();

RCC_Config();

GPIO_Config();

EXTI_Config();

NVIC_Config();

while (1)

{

GPIO_SetBits(GPIOB, GPIO_Pin_5);//GPIOB.5=1

Delay(0xfffff);

GPIO_SetBits(GPIOB, GPIO_Pin_6);//GPIOB.6=1

Delay(0xfffff);

GPIO_SetBits(GPIOB, GPIO_Pin_7);//GPIOB.7=1

Delay(0xfffff);

GPIO_SetBits(GPIOB, GPIO_Pin_8);//GPIOB.8=1

Delay(0xfffff);

GPIO_ResetBits(GPIOB, GPIO_Pin_5);//GPIOB.5=0

Delay(0xfffff);

GPIO_ResetBits(GPIOB, GPIO_Pin_6);//GPIOB.6=0

Delay(0xfffff);

GPIO_ResetBits(GPIOB, GPIO_Pin_7);//GPIOB.7=0

Delay(0xfffff);

GPIO_ResetBits(GPIOB, GPIO_Pin_8);//GPIOB.8=0

Delay(0xfffff);

}

}

void RCC_Config(void)

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);

/*开时钟*/

}

void GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;/*LED为B 5678*/

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOB, GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1;//KEY为A 01

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, GPIO_InitStructure);

}

void EXTI_Config(void)

{

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //将A0接EXTI0

EXTI_InitTypeDef EXTI_InitStructure;

EXTI_InitStructure.EXTI_Line = EXTI_Line0;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿

EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断使能

EXTI_Init(EXTI_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1);//将A1接EXTI1

EXTI_InitStructure.EXTI_Line = EXTI_Line1;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿

EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断使能

EXTI_Init(EXTI_InitStructure);

}

void NVIC_Config(void)//中断嵌套优先级设置

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//1组

/* Enable the EXTI0_IRQn Interrupt */

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//0

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(NVIC_InitStructure);

/* Enable the EXTI1 Interrupt */

NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//1

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(NVIC_InitStructure);

}

extern void Delay(vu32 nCount) //简单的长时间延时函数

{

int i; //声明内部递减变量

for(; nCount!= 0; nCount--) //递减变量计数

{

for (i=0; i0xffff; i++);

}

}

/*以下为中断函数,加到stm32f10x_it.c文件中*/

#include "stm32f10x_it.h"

void EXTI0_IRQHandler(void)

{

int i;

if(EXTI_GetITStatus(EXTI_Line0) != RESET)

{

/* Clear the Key Button EXTI line pending bit */

EXTI_ClearITPendingBit(EXTI_Line0);//清中断标志位

for(i=0;i2;i++)

{

GPIO_SetBits(GPIOB, GPIO_Pin_5);//GPIOB.5=1

Delay(0xfffff);

GPIO_SetBits(GPIOB, GPIO_Pin_6);//GPIOB.6=1

Delay(0xfffff);

GPIO_ResetBits(GPIOB, GPIO_Pin_5);//GPIOB.5=0

Delay(0xfffff);

GPIO_ResetBits(GPIOB, GPIO_Pin_6);//GPIOB.6=0

Delay(0xfffff);

}

}

}

void EXTI1_IRQHandler(void)

{

int i;

if(EXTI_GetITStatus(EXTI_Line1) != RESET)

{

/* Clear the Key Button EXTI line pending bit */

EXTI_ClearITPendingBit(EXTI_Line1);//清中断标志位

for(i=0;i2;i++)

{

GPIO_SetBits(GPIOB, GPIO_Pin_7);//GPIOB.7=1

Delay(0xfffff);

GPIO_SetBits(GPIOB, GPIO_Pin_8);//GPIOC.8=1

Delay(0xfffff);

GPIO_ResetBits(GPIOB, GPIO_Pin_7);//GPIOB.7=0

Delay(0xfffff);

GPIO_ResetBits(GPIOB, GPIO_Pin_8);//GPIOB.8=0

Delay(0xfffff);

}

}

}

STM32F4外部中断怎么都解决不了,求助

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 }

stm32 简单程序不进中断,初始化应该没问题的,不知道哪错了

实现TIM2中断需要以下几个步骤:

1.配置系统时钟函数RCC_Configuration()中使能TIM2时钟:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

2.TIM2配置函数TIMER_Configeration()中使能中断:

void TIMER_Configeration(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

//TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_TimeBaseStructure.TIM_Period = 10000;

TIM_TimeBaseStructure.TIM_Prescaler = 71;

TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure);

TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);

3.中断向量配置函数NVIC_Configuration()中使能TIM2中断:

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(NVIC_InitStructure);

4.编写中断子程序:你已经完成

5.main函数中调用各个函数:

int main()

RCC_Configuration();

TIMER_Configeration();

NVIC_Configuration();

。。。。。。。

本文标签:stm32f4不进中断

产品列表
产品封装
友情链接