最近几天折腾stm32,遇见了很郁闷的问题,外部中断进入不了,最后找到解决方法的时候觉得……唉,下面总结几条原因以便于大家少走弯路。
1.切记打开复用时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
2.最好加上一个EXTI_GenerateSWInterrupt(EXTI_LineX);产生软件中断便于判断是不是本来就配置错误;
3.开启硬件仿真:
4.正确设置中断向量地址:
#if defined (VECT_TAB_RAM)
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //设置中断向量在RAM
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); //设置中断向量在FLASH中
#endif
以上的几种解决方案都是网络上整理所得,再次感谢各位网友的贡献!
关键字:stm32 外部中断 原因分析
引用地址:
stm32外部中断进入不了的原因分析
推荐阅读最新更新时间:2024-03-16 14:53
stm32 Flash读写[库函数]
通过对stm32内部的flash的读写可以实现对stm32的编程操作。 stm32 的内置可编程Flash在许多场合具有十分重要的意义。如其支持ICP特性使得开发人员对stm32可以警醒调试开发,可以通过JTAG和SWD接口对stm32进行程序烧写;支持IAP特性使得开发人员可以在stm32运行程序的时候对其内部程序进行更新操作。对一些对数据安全有要求的场合,可编程FLASH可以结合stm32内部唯一的身份标识实现各种各样的防破解方案。并且stm32的FLASH在一些轻量级的防掉电存储方案中也有立足之地。 stm32的FLASH分为主存储块和信息块。主存储块用于保存具体的程序代码和用户数据,信息块用于负责由stm32出厂是放
[单片机]
关于stm32的USB学习笔记之USB_HW.c
#include stm32f10x_lib.h #include stm32f10x_map.h #include usbreg.h #include usbuser.h #include usbcore.h #include usb_hw.h #define _DEBUG_ #include debug.h #define USB_EP_NUM 4 /*端点缓冲区的开始地址 *因为每个缓冲块都需要一个端点描术表 *而所有的端点描述表放在,USB缓冲区的首部 *此地址是相对于USB缓冲区的地址,我认为加上Offset更好些 *这里使用2个端点 *端点0与端点1 *此时EP_BU
[单片机]
STM32入门——第一天学习GPIO
第一步 学习GPIO,以按键控制跑马灯为例 GPIO是相对于stm32来说的,也就是芯片上的IO引脚,如C51上的P0口。但是stm32上的io口拥有更强大的功能,有GPIOA~G。每个GPIOx共15个引脚,刚开始学习时对于每个IO口的N多个功能没必要深究,但要记住几个重要的功能:输入上拉,输入下拉,推挽输出。这是本次试验用到的。 输入上拉:当IO口作为输入时,比如按键输入,而按键是与地连接,按下时为低电平,则没按下时该IO口应为高电平,上拉即是该IO口通过一个电阻与电源相连,则没按下时为高电平,按下即为低电平。 输入下拉:同理此时按键与电源相连,按下即为高电平,下拉就是该IO口通过一个电阻与地相连,没按下
[单片机]
stm32 hal 模拟i2c
管脚配置(我是用的是PA9和PA10): //i2c.h #include stm32f0xx_hal.h #define GPIO_PORT_I2C GPIOA // GPIO端口 #define I2C_SCL_PIN SCL_Pin // 连接到SCL时钟线的GPIO #define I2C_SDA_PIN SDA_Pin // 连接到SDA数据线的GPIO /* 定义读写SCL和SDA的宏 */ #define I2C_SCL_1() GPIO_PORT_I2C- BSRR = I2C_SCL_PIN // SCL = 1 #define I2C_SCL_0() GPIO_
[单片机]
stm32时钟树以及修改系统时钟频率
前言:在学51的时候我们知道单片机想要工作必须要有时钟,在stm32中,外部时钟源不是必须的,因为内部就有时钟源,因此我们需要了解stm32的时钟树以方便以后我们设置自己所需要的时钟频率 时钟树 解读 1.首先我们找到最重要的系统时钟: 他的最高频率为168MHZ,他可以由三个提供,一个是HSI(内部高速时钟源,h=high,i=internal),可以在主图中找到这个HSI RC,还有一个是HSE(外部高速时钟源,e=external),最后一个是PLLCLK(pll为锁相环提供,也可以在主图中找到)。。但系统时钟主要还是由PLLCLK提供 注意: 是指这个东西可以由三个其中之一提供,而不是由三个组成。
[单片机]
STM32单片机GPIO口配置问题
在学习STM32F单片机时,我们常常困惑什么时候才能叫入门,采用什么样的教材入门,或者采用什么的编程软件。在学习类的教材中,以神州,原点教材布局很多,但是相信很多人看到这类教材也是一头雾水,需要你花费巨大的精力从寄存器的最底层去学习和了解,学习时间还是相对漫长。在采用的编程软件中,KEIL和IAR各有优势吧,在这里我选用的是KEIL。 在开始学习编程时,我采用的是库函数开发指南。在安装完成KEIL软件和添加项目工程时,就开始学习库函数编程。 在编写一个GPIO口控制时,首先我们要知道我们要实现的功能,连接的IO口和怎么配置GPIO口。最常见的以LED举例来说。比如我采用PB13引脚连接LED灯的负极,按照硬件的
[单片机]
【STM32电机矢量控制】记录5——FOC原理大概
FOC控制算法: FOC控制的其实是电机的电磁场方向。转子的转子力矩正比于定子的磁场向量与转子磁场矢量的矢量积。由矢量的关系可知,若使电机的转矩时刻保持最大,则定子磁场向量应与转子磁场向量相互垂直。又因为磁场的大小与方向与电流的大小与方向有着直接的关系,所以在用FOC控制算法控制BLDC时的关键就是控制三相输入的电流大小与方向。而控制电流产生定子磁场与转子磁场垂直的关键在:控制稳定的三相输入电压及其电流向量,并且我们得知道转子的实时位置。 输入电流的方向控制,FOC给出了空间电流矢量的概念。其实质是将三相的电流矢量结合,再分解为垂直和平行于转子磁体轴方向的两个分量即d-q结构。垂直方向的电流分量所产生磁场正交于转子的磁场,这就产生
[单片机]
基于STM32的开源简易示波器项目
一、前言 该项目是基于正点原子精英板制作的一个简易示波器,可以读取信号的频率和幅值,并可以通过按键改变采样频率和控制屏幕的更新暂停。 二、硬件接线 将PA6与PA4相连,可观察到正弦波。 将PA6与PA5相连,可观察到三角波/噪声(默认三角波)。 KEY_UP控制波形的更新和暂停。 KEY_1降低采样率。 KEY_0提高采样率。 三、信号的采集 信号的采集主要是依靠ADC(通过定时器触发采样,与在定时器中断中开启一次采样的效果类似,以此来控制采样的间隔时间相同),然后通过DMA将所采集的数据从ADC的DR寄存器转移到一个变量中,此时完成一次采样。 由于设定采集一次完整的波形需要1024个点,即需要连续采集1024次才算一次
[单片机]