STM32中断函数
#ifndef_EXIT_H_#define_EXIT_H_voidexit_init(void);#endif#include<stm32f10x_lib.h>#inc...
#ifndef _EXIT_H_
#define _EXIT_H_
void exit_init(void);
#endif
#include <stm32f10x_lib.h>
#include"led.h"
#include"sys.h"
#include"delay.h"
#include"key.h"
#include"exit.h"
void EXTI15_10_IRQHandler()
{
LED0=0;
delay_ms(1000);
}
int main()
{
Stm32_Clock_Init(3); //系统时钟设置
delay_init(50); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
// KEY_Init();
exit_init();
while(1)
{
LED0=1;
delay_ms(500);
LED0=0;
delay_ms(500);
LED0=1;
while(1);
}
}
#include <stm32f10x_lib.h>
#include"sys.h"
#include"exit.h"
void exit_init(void)
{
RCC->APB2ENR=1<<4;
GPIOC->CRH&=0X0F0FFFFF;//PA13,15设置成输入
GPIOC->CRH|=0X80800000;
Ex_NVIC_Config(GPIO_C,13,FTIR); //上升沿触发
MY_NVIC_Init(2,2,EXTI15_10_IRQChannel,2); //抢占2,子优先级2,组2
}
这个程序在不加中断处理的时候可以看到灯的闪烁也就是能进入while循环但是编译exit_init()的时候灯就不闪烁也就是进步了WHILE()循环。为什么啊郁闷啊?
如果再KEILL上单步执行就可以进入请问下什么原因导致的啊???谢谢
我用的STM32是stm32f107不是stm32f103跟这个有关系吗 展开
#define _EXIT_H_
void exit_init(void);
#endif
#include <stm32f10x_lib.h>
#include"led.h"
#include"sys.h"
#include"delay.h"
#include"key.h"
#include"exit.h"
void EXTI15_10_IRQHandler()
{
LED0=0;
delay_ms(1000);
}
int main()
{
Stm32_Clock_Init(3); //系统时钟设置
delay_init(50); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
// KEY_Init();
exit_init();
while(1)
{
LED0=1;
delay_ms(500);
LED0=0;
delay_ms(500);
LED0=1;
while(1);
}
}
#include <stm32f10x_lib.h>
#include"sys.h"
#include"exit.h"
void exit_init(void)
{
RCC->APB2ENR=1<<4;
GPIOC->CRH&=0X0F0FFFFF;//PA13,15设置成输入
GPIOC->CRH|=0X80800000;
Ex_NVIC_Config(GPIO_C,13,FTIR); //上升沿触发
MY_NVIC_Init(2,2,EXTI15_10_IRQChannel,2); //抢占2,子优先级2,组2
}
这个程序在不加中断处理的时候可以看到灯的闪烁也就是能进入while循环但是编译exit_init()的时候灯就不闪烁也就是进步了WHILE()循环。为什么啊郁闷啊?
如果再KEILL上单步执行就可以进入请问下什么原因导致的啊???谢谢
我用的STM32是stm32f107不是stm32f103跟这个有关系吗 展开
展开全部
恶心的程序设计,
#1:又一个不使用库函数的?
一般使用库函数,可读性好多了,别人也更容易阅读,
特殊地方可采用直接寄存器写值的方式!
#2: 需理解中断的意义, 你在中断函数里面加这么大的延时有何意义?
这是单片机程序设计的忌讳, 可设全局变量,然后中断发生改变全局变量的值
再在执行函数里面判断全局变量的值。
#3: 中断函数未清除中断标志位.
#1:又一个不使用库函数的?
一般使用库函数,可读性好多了,别人也更容易阅读,
特殊地方可采用直接寄存器写值的方式!
#2: 需理解中断的意义, 你在中断函数里面加这么大的延时有何意义?
这是单片机程序设计的忌讳, 可设全局变量,然后中断发生改变全局变量的值
再在执行函数里面判断全局变量的值。
#3: 中断函数未清除中断标志位.
追问
我知道不应该加延时,我只是想看理解一下中断我加上中断清楚了。还是不行但是仿真是可以进入中断的现在就是不明白下载到STM32是stm32f107就是进步去哎!!
追答
void EXTI15_10_IRQHandler() 中断函数里需加 清除中断标志位的操作
展开全部
没仔细看代码,不过单步没问题那肯定能进入while,灯不闪烁,很可能是持续进入中断的原因;会不会是输入脚持续有中断发生?或者,没有清除中断标志位?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Stm32_Clock_Init(3); //系统时钟设置
delay_init(50); //延时初始化
----------------->>
Stm32_Clock_Init(3); //系统时钟设置
delay_init(24); //延时初始化
delay_init(50); //延时初始化
----------------->>
Stm32_Clock_Init(3); //系统时钟设置
delay_init(24); //延时初始化
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询