STM32外部中断使用注意事项

发布者:乐呵的挑最新更新时间:2017-10-25 来源: eefocus关键字:stm32  外部中断 手机看文章 扫描二维码
随时随地手机看文章

stm32尽管所有的gpio都可以设置为外部中断的功能,但是不能把所有的gpio同时设置为外部中断。例如不能把PA0和PB0同时设置为外部中断,因为PA0和PB0共用一个中断线,MCU只把最后完成初始化的管脚设置为外部中断。

如果代码编写者明确知道PA0和PB0不会同时触发,并且触发有相互依赖关系,可以通过分时设置PA0和PB0的外部中断功能。但是在大多数情况下,外部中断的触发都是随机的,那么在设计原理图的时候就要考虑到这种情况,把用到的外部中断管脚设置到后缀不同的管脚上,如PA0,PA1,PB3,PC8,....PD12,PF16,在一个工程中最多能使用16个外部中断,并且每个管脚的后缀不同。

如果设计电路板没有考虑到这种情况,则需要根据实际情况把触发频繁的设置为外部中断,不频繁的通过检测管脚电平变化来判断是否有触发。

检测管脚电平变化的一种方法:

设计一个周期1ms的定时器,在定时器中断服务函数中通过判断管脚电平,来捕获上升沿和下降沿。

//捕获下降沿

void timer_isr(void)//定时器1ms的中断服务子函数

{

if(READ_PIN)

{

  state = waitting_falling_edge;

}

else

{

if(state == waitting_falling_edge)

{

falling_trigger = 1;//捕获下降沿

state = falling_edge_detected;

}

}

}

//捕获上升沿

void timer_isr(void)//定时器1ms的中断服务子函数

{

if(!READ_PIN)

{

  state = waitting_rising_edge;

}

else

{

if(state == waitting_rising_edge)

{

rising_trigger = 1;//捕获上升沿

state = rising_edge_detected;

}

}

}

类比FPGA的捕获上升沿、下降沿代码(verilog语言)

//捕捉上升沿

module capture_rising(iclock, ireset, isignal, orising);

input iclock;

input ireset;

input isignal;

output orising;

reg isignal_temp0;

reg isignal_temp1;

always @(posedge iclock or negedge ireset)

begin

if(!ireset)

begin

isignal_temp0 <= 1'b0;

isignal_temp1 <= 1'b0;

end

else

begin

isignal_temp0 <= isignal;

isignal_temp1 <= isignal_temp0;

end

end

assign orising = ~isignal_temp1 & isignal_temp0;

endmodule

//捕捉下降沿

module capture_falling(iclock, ireset, isignal, ofalling);

input iclock;

input ireset;

input isignal;

output ofalling;

reg isignal_temp0;

reg isignal_temp1;

always @(posedge iclock or negedge ireset)

begin

if(!ireset)

begin

isignal_temp0 <= 1'b0;

isignal_temp1 <= 1'b0;

end

else

begin

isignal_temp0 <= isignal;

isignal_temp1 <= isignal_temp0;

end

end

assign ofalling = isignal_temp1 & ~isignal_temp0;

endmodule

虽然代码不同,但是思路是一样的:寄存上一周期的状态,并与当前状态相结合进行判断。

stm32的1ms定时器(即每1ms执行一次定时器中断服务子函数)相当于fpga的1个时钟100ns(iclock-10mhz),检测速度相差1万倍。


关键字:stm32  外部中断 引用地址:STM32外部中断使用注意事项

上一篇:STM32-IIC 配置解说
下一篇:STM32在线调试正常,上电运行不正常

推荐阅读最新更新时间:2024-03-16 15:41

意法半导体推出STM32数控电源微控制器
    让云端应用设计变得更节能环保,STM32F334集成高分辨率定时器等先进功能,为数字功率转换应用带来高能效。     中国,2014年8月6日 ——横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)推出最新的数控电源微控制器(STM32F334),为推动数字经济增长的云计算技术进一步提高能效。     今天的数字基础设施耗电量巨大。在全球大约286,000千兆瓦时(GWh) 的年用电量中,仅数字中心一种产业就占据约1.3%。根据Uptime Institute机构的能源利用率(PUE, Power Usage Effective
[电源管理]
STM32学习笔记:FSMC详述
FSMC(Flexible Static Memory Controller,可变静态存储控制器)是STM32系列采用一种新型的 存储器 扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量 静态存储器 的扩展。 使用FSMC控制器后,可以把FSMC提供的FSMC_A 作为地址线,而把FSMC提供的FSMC_D 作为数据总线。 (1)当存储数据设为8位时,(FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b) 地址各位对应FSMC_A ,数据位对应FSMC_D (2)当存储数据设为16位时,(FSM
[单片机]
<font color='red'>STM32</font>学习笔记:FSMC详述
STM32上实现使用DMA+USART3传输数据
串口的配置的文档如下所示 出口3的头文件 #ifndef __USART3_H#define __USART3_H #include sys.h #define USART3_MAX_RECV_LEN 200 //×î´ó½ÓÊÕ»º´æ×Ö½ÚÊý#define USART3_MAX_SEND_LEN 200 //×î´ó·¢ËÍ»º´æ×Ö½ÚÊý#define USART3_RX_EN 1 //0,²»½ÓÊÕ;1,½ÓÊÕ.extern u8 USART3_RX_BUF ; //½ÓÊÕ»º³å,×î´óUSART2_MAX_RECV_LEN×Ö½
[单片机]
STM32峰会看MCU如何引领智能生活
2019年4月26至27日,一年一度的意法半导体STM32峰会如期举行,本次峰会以 “聚智慧,创未来” 为主题,聚焦人工智能与计算、工业与安全、云技术与连接三大技术趋势。 STM32峰会至今已举办了四届,该展会现今已成为单片机和嵌入式领域最具影响力的年度技术展会。有数千名开发者和合作伙伴来到会议现场,感受到了ST及其合作伙伴所展示的前沿的技术和创新,同时也可参加数项由ST和合作伙伴组织的技术论坛,以及STM32粉丝节。 与其他技术研讨会单纯的讲解技术推荐产品不同,STM32峰会展示了大量公司自行开发,或者第三方合作伙伴开发的产品,从而激发工程师更多创意灵感,也让开发者可以和ST技术人员进行更深入的面对面交流。 在开
[单片机]
从<font color='red'>STM32</font>峰会看MCU如何引领智能生活
stm32 起步 gpio操作
在工程中增加gpio lib.h和stm32头文件,如下: #include “stm32f10x.h” // Device header #include “stm32f10x_gpio.h” 调用lib配置gpio工作方式,先开启时钟,选GPIO,设置GPIO mode,gpio speed,主要看GPIO_InitTypeDef 结构体,芯片不同结构体不同,开始不清楚具体使用可以参考系统自带的example code,my setting如下: void GPIO_Initmain(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Configure all
[单片机]
STM32 PWM实现精确输出脉冲数控制电机
精确输出脉冲数控制电机,使用stm32单片机的pwm功能实现,精确控制脉冲个数 单片机源程序如下: #include stm32f10x_lib.h #include sys.h #include usart.h #include delay.h #include led.h #include exti.h #include key.h #define MOTOR_DIR PBout(11)// PB11 #define MOTOR_EN PEout(15)// PE15 u16 i; u16 fre; u16 TIM5CH1_CAPTURE_VAL; //输入捕获值 u1
[单片机]
基于STM32的传感器接口模块的设计
摘要:基于STM32实现了电流型、电压型以及数字IO型传感器接口模块;进行了接口模块的软件设计,说明了详细的固件代码设计。除传统串口外,提供以太网接口,嵌入UDP协议,提供后期开发的便利接口。 关键词:信号接口;传感器接口模块;UDP协议 0 引言 物联网将会是未来很长一段时间内IT产业的发展趋势,一个完整的物联网系统的构成或产业链的划分,目前业界比较统一的观点基本都认为应该包括三个层面:末端设备或子系统、通信连接系统、以及管理和应用系统。即Device-设备、Connect-连接和Manage-管理。由于数字整合的需求日益增长,对作为感知层核心组成元素的传感器数据融合提出了更高要求。如何将传感器连入网络成为一个尤其重要的问题
[工业控制]
基于<font color='red'>STM32</font>的传感器接口模块的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved