前语:这些问题都是我之前在作业中遇到的,后来觉得需求总结,自己伤心欠好,所以在这个给自己打个mark。
一:触发方法
STM32的外部中止是经过边缘来触发的,不支持电平触发;
二:外部中止分组
STM32的每一个GPIO都能装备成一个外部中止触发源,STM32经过依据引脚的序号不同将很多中止触发源分红不同的组,比方:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,咱们能得出一共有16组,STM32规则,每一组中一起只能有一个中止触发源作业,那么,最多作业的也便是16个外部中止。
STM32分组和对应中止处理函数分配:
管脚 |
中止标志 |
中止处理函数分配 |
PA0~PG0 |
EXTI0 |
EXTI0_IRQHandler |
PA1~PG1 |
EXTI1 |
EXTI1_IRQHandler |
PA2~PG2 |
EXTI2 |
EXTI2_IRQHandler |
PA3~PG3 |
EXTI3 |
EXTI3_IRQHandler |
PA4~PG4 |
EXTI4 |
EXTI4_IRQHandler |
PA5~PG5 |
EXTI5 |
EXTI9_5_IRQHandler |
PA6~PG6 |
EXTI6 |
|
PA7~PG7 |
EXTI7 |
|
PA8~PG8 |
EXTI8 |
|
PA9~PG9 |
EXTI9 |
|
PA10~PG10 |
EXTI10 |
EXTI15_10_IRQHandler |
PA11~PG11 |
EXTI11 |
|
PA12~PG12 |
EXTI12 |
|
PA13~PG13 |
EXTI13 |
|
PA14~PG14 |
EXTI14 |
|
PA15~PG15 |
EXTI15 |
三:外部中止的装备进程
l装备触发源-GPIO
触发源为经过GPIO端口输入,所以,要装备GPIO的形式,输入方法,输入方法有以下几种:
1.GPIO_Mode_AIN,模仿输入(ADC模仿输入,或许低功耗下省电)
2.GPIO_Mode_IN_FLOATING,浮空输入
3.GPIO_Mode_IPD=0x28,带下拉输入
4.GPIO_Mode_IPU=0x48,带上拉输入
l引脚与外部中止相关
l外部中止AFIO时钟舱位
l外部中止装备
这个主要是中止线路挑选,中止触发方法,中止使能。
l中止优先级装备NVIC
l中止处理函数的编写。
四:外部中止函数不能进入的原因剖析
结合我作业中的遇到的问题能够分为:
1)GPIO或许AFIO的时钟没有舱位;
2)GPIO和装备的中止线路不匹配;
3)中止触发方法和实践不相契合;
4)中止处理函数用库函数时,写错,常常或许呈现数字和字母之间没有下划线;
5)外部中止是沿触发,有或许不能检测到沿,比方中止线是低电平(浮空输入),触发是下降沿触发,或许会呈现一直是低电平,高电平的时分是相同的状况,电平继续为高电平;
6)没有用软件中止来触发外部中止,调用函数EXTI_GenerateSWInterrupt;,由于软件中止先于边缘中止处理。