历史上的今天
今天是:2025年08月15日(星期五)
2018年08月15日 | stm32 中断一般配置
2018-08-15 来源:eefocus
配置是stm32外部中断步骤:
1.使能IO时钟和AFIO时钟
2.配置EXIT中断线
3.配置中断控制器NVIC (EXTI15_10_IRQn,EXTI4_IRQn)
4.写中断服务子程序 (EXTI15_10_IRQHandler)
首先要明白中断IO对应的中断线EXTIx
其中
PA0-PE0 对应的是EXTI0
....... . . ........
PA4-PE4 对应的是EXTI4
共用中断线
PA5-PE5
...... 对应的是EXTI9_5
......
PA9-PE9
共用中短线
PA10-PE10
......... 对应的是EXTI15_10
.........
PA15-PE15
例子:
GPIO_InitTypeDef GPIO_InitStructur;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO,ENABLE); //使能中断所需AFIO时钟
GPIO_InitStructur.GPIO_Pin=GPIO_Pin_11;
GPIO_InitStructur.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructur.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStructur);
GPIO_SetBits(GPIOD,GPIO_Pin_11);
GPIO_InitStructur.GPIO_Pin=GPIO_Pin_10; //中断引脚
GPIO_InitStructur.GPIO_Mode=GPIO_Mode_IPD;
GPIO_InitStructur.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStructur);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_ClearITPendingBit(EXTI_Line10); //清除对应的外部中断线对应标志位
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource10);//中断io配置
EXTI_InitStructure.EXTI_Line= EXTI_Line10; //根据引脚设定外部中断线
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; //中断模式
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;//上升沿
EXTI_InitStructure.EXTI_LineCmd=ENABLE; //中断线使能
EXTI_Init(&EXTI_InitStructure);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //中断优先级组
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //中断io对应的通道
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //中断通道使能
NVIC_Init(&NVIC_InitStructure);
}
void EXTI15_10_IRQHandler() //中断服务程序
{
if (EXTI_GetITStatus(EXTI_Line11) != RESET)
EXTI_ClearITPendingBit(EXTI_Line10); //清除中断标志位
}
注意在usos中不需要配置NVIC
一般只需要用ucos中的两个函数代替
BSP_IntVectSet(BSP_INT_ID_EXTI15_10(中断IO对应通道),中断处理函数);
BSP_IntEn(BSP_INT_ID_EXTI15_10); //使能对应的中断通道
史海拾趣
|
判断是否抖动方法:驱动直接打印信息,看看长按状态下坐标点漂移的是否厉害;或者按住拖动,产生虚线框,看看会不会跳动 请问各位大哥,此方法是否可行,应该如何解决抖动… 查看全部问答> |
|
工控机或IBM服务器在server系统下做备份,用一键GOHST软件无法备份,有没有其他方便又快捷的备份的工具或好的建议呢?请大家帮忙解决!!!… 查看全部问答> |
|
在做stm32SPI 通信时 读取SST25VF016B 的状态寄存器 do { 读SST25VF016B状态寄存器 }while(state&0x01); 读SST25VF016B内擦除后的数据 与 do { 读SST25VF016B状态寄存器 }while(state==0x01); 读SST25VF016B内擦除后 ...… 查看全部问答> |
|
重温纸质记忆,The Little Printer通过云端将社交网络内容打印成属于你的小报纸 在这个浮于云端、电子书和智能手机盛行的年代,始终有人保存着对纸制品的爱。这或许是因为纸的质感和物理存在感,也可能是因为数码给人带来的不安全感。我们不再写信,不那么需要已经存好了档的胶卷相片,不那么地需要一张CD。当Email,聊天记录, ...… 查看全部问答> |
|
程序本是想用于24c16,但是24c02OK,24c16就不行 main的程序: 串口打印输出的结果一直是0xff. 为什么呢? 谢谢! 用于24c02正常。 int main(void){ u8 i,datatemp[8]; union data //存 ...… 查看全部问答> |
|
本帖最后由 tiankai001 于 2014-10-17 15:15 编辑 一、c程序存储空间布局 C程序一直由下列部分组成:正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令;初始化数据段(数据段)——在程序中所 ...… 查看全部问答> |




