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函数然后去干嘛了?之后的中断为何不能响应???

STM32的外部中断问题

编写一个stm32 svc关中断函数

stm32开发,C语言, 跳转执行中断函数,会保存原来函数的局部变量吗

STM32Cubemx——外部中断

STM32中断功能的实现