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

stm32外部中断进入不

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

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

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

STM32外部中断无法进入中断程序,请问下面的程序哪里不对呀???

我希望你学会一步一步地调试程序,而不是一上来就一股脑的把代码都加进去,结果出问题了,就很主观地认为是哪里哪里出问题。

你的思路是没问题的,但是你看不到实际的结果就以为是中断出了问题。

我建议你这样,

1、先查找一下你所使用的芯片数据手册,看一下外中断接口是哪一个IO。

2、只做外中断功能,检测到下降沿之后让一个连接LED的IO电平翻转,观察中断是否成功。

3、只做定时器功能,定时时间到让连接LED的IO电平翻转,观察定时器是否成功。

4、在定时器中的服务函数里,做AD采样功能,观察AD是否成功采样。

5、把上述的功能联合起来。

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);

}

}

}

stm32外部中断函数进不去

如果你的硬件上是上拉,下面这条语句就不对。

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;

下面是关于STM32的技术博客,希望找到你的答案:

stm32外部中断服务函数进不去,求教

stm32f10x_it.c中点中断服务函数调用其他文件的函数能通过编译但会出现警告,最好把相关的头文件添加进去就可以。使用其他文件的全局变量一定要添加外部变量声明extern,如:在AAA.c中声明unsignedchara=0;在BBB.c中要调用该变量的话要也要声明externunsignedchara;

stm32进不了外部中断 希望提供帮助 谢谢

外部中断的配置不是很难,但是要细心。

我给一个例程给你,这个我测试过,是可以的。

中断配置程序:

void EXT5_Init( )

{

GPIO_InitTypeDef GPIO_InitStructure;

EXTI_InitTypeDef EXTI_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

/* Enable Button GPIO clock */

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);

/* Configure Button pin as input floating */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init( GPIOB, GPIO_InitStructure);

/* Connect Button EXTI Line to Button GPIO Pin */

GPIO_EXTILineConfig( GPIO_PortSourceGPIOB, GPIO_PinSource5 );

/* Configure Button EXTI line */

EXTI_InitStructure.EXTI_Line = EXTI_Line5;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

// EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(EXTI_InitStructure);

/* Enable and set Button EXTI Interrupt to the lowest priority */

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(NVIC_InitStructure);

}

中断程序:

u32 System_Second = 0;

void EXTI9_5_IRQHandler(void)

{

RTC_Update++;

System_Second++;

//light the LED

if( GPIOC-ODR GPIO_Pin_13 )

{

GPIOC-BRR = GPIO_Pin_13;

}

else

{

GPIOC-BSRR = GPIO_Pin_13;

}

EXTI_ClearITPendingBit( EXTI_Line5 );

}

我用的是老的STM32库,你使用的时候注意一下。

本文标签:stm32外部中断进入不

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