STM32中断函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32中断函数相关的知识,希望对你有一定的参考价值。
#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跟这个有关系吗
#1:又一个不使用库函数的?
一般使用库函数,可读性好多了,别人也更容易阅读,
特殊地方可采用直接寄存器写值的方式!
#2: 需理解中断的意义, 你在中断函数里面加这么大的延时有何意义?
这是单片机程序设计的忌讳, 可设全局变量,然后中断发生改变全局变量的值
再在执行函数里面判断全局变量的值。
#3: 中断函数未清除中断标志位.追问
我知道不应该加延时,我只是想看理解一下中断我加上中断清楚了。还是不行但是仿真是可以进入中断的现在就是不明白下载到STM32是stm32f107就是进步去哎!!
追答void EXTI15_10_IRQHandler() 中断函数里需加 清除中断标志位的操作
参考技术A 没仔细看代码,不过单步没问题那肯定能进入while,灯不闪烁,很可能是持续进入中断的原因;会不会是输入脚持续有中断发生?或者,没有清除中断标志位? 参考技术B Stm32_Clock_Init(3); //系统时钟设置delay_init(50); //延时初始化
----------------->>
Stm32_Clock_Init(3); //系统时钟设置
delay_init(24); //延时初始化
STM32之中断函数
本文做中断函数的索引,帮助我们找到中断函数名、中断函数参数以及中断服务函数他们的来源,以便我们编程。
1)如果一个工程只有一个中断,则我们可以进行两个步骤就可以了:
使能中断通道
编写中断服务函数
2)实例:
void Tim6_Init(u16 psc,u16 arr) //............................ //使能中断通道 NVIC_EnableIRQ(TIM6_DAC_IRQn); //中断服务函数 void TIM6_DAC_IRQHandler(void) //。。。。。。。。。。
中断服务函数名可在 “startup_stm32f40_41xxx.s”文件中找到:
中断通道编号可在“stm32f4xx.h”文件中找到,也可在手册的NVIC中断向量表找到:
如果一个工程中有多个中断,则必须考虑优先级问题,可以参考我上一篇文章:
https://www.cnblogs.com/anSn/p/11619048.html
以上是关于STM32中断函数的主要内容,如果未能解决你的问题,请参考以下文章
stm32程序执行完main函数然后去干嘛了?之后的中断为何不能响应???