完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
中断(任务插队):
目的:提高系统实时性的一种手段 原理:高优先级打断低优先级任务,低优先级任务被 挂起 中断图示: 工程项目结构 其中画红色方框部分为重要函数实现功能 EXIT.c #include “EXTI/EXTI.h” u8 keyvalue = 0; //键值 /** * 功能:初始化外部中断0/1 * 参数:None * 返回值:None */ void initEXTI_0_1(void) { EXTI_InitTypeDef EXTI_InitStructure; //定义外部中断初始化结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //开启外设复用时钟 // 将外部中断线和对应的IO口进行绑定 GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource3); //使用PA0作为EXTI0信号输入源 EXTI_InitStructure.EXTI_Line = EXTI_Line0; //设置外部中断线0 // 这种模式:当中断发生的时候跳转到外部中断服务函数 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //外部中断模式 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发中断 EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能外部中断屏蔽寄存器 EXTI_Init(&EXTI_InitStructure); //设置生效 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1); //使用PA1作为EXTI1信号输入源 EXTI_InitStructure.EXTI_Line = EXTI_Line1; //设置外部中断线1 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //外部中断模式 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发中断 EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能外部中断屏蔽寄存器 EXTI_Init(&EXTI_InitStructure); //设置生效 } /** * 功能:外部中断0中断服务函数 * 参数:None * 返回值:None */ void EXTI0_IRQHandler(void) { // 外部中断线为1则表明产生了外部中断 EXTI_GetFlagStatus(EXTI_Line0); //获取外部中断挂起位 keyvalue = getKeyValue(KEY_PRESS); //获取键值 // 如果第一次进入中断服务函数没有清除中断标志位的话则会永远执行中断服务函数 EXTI_ClearFlag(EXTI_Line0); //清除外部中断挂起位 } /** * 功能:外部中断1中断服务函数 * 参数:None * 返回值:None */ void EXTI1_IRQHandler(void) { EXTI_GetFlagStatus(EXTI_Line1); //获取外部中断挂起位 keyvalue = getKeyValue(KEY_PRESS); //获取键值 EXTI_ClearFlag(EXTI_Line1); //清除外部中断挂起位 } NVIC.c #include “NVIC/NVIC.h” /** * 功能:初始化NVIC,初始化内容包括:分配优先级分组号,分配对应中断优先级 * 参数:NVIC_PriorityGroup : 设置优先级分组号 * 参数值:NVIC_PriorityGroup_x * 返回值:None */ void initNVIC(u32 NVIC_PriorityGroup) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup); //中断分组 //使能之后才能实现当中断发生的时候才能跳转到中断服务函数 setNVIC(EXTI0_IRQn,1,1,ENABLE); //配置外部中断0优先级 setNVIC(EXTI1_IRQn,1,2,ENABLE); //配置外部中断1优先级 } /** * 功能:设置对应外设中断 * 参数:InterruptNum: 对应中断的中断编号 * PreemptionPriority:指定抢占优先级 * SubPriority:指定子优先级 * NVIC_Sta:使能或者失能中断 * 返回值:None */ void setNVIC(u8 InterruptNum, u8 PreemptionPriority, u8 SubPriority, FunctionalState NVIC_Sta) { NVIC_InitTypeDef NVIC_InitStructure; //定义NVIC初始化结构体 NVIC_InitStructure.NVIC_IRQChannel = InterruptNum; //指定配置的中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = PreemptionPriority; //设置抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = SubPriority; //设置子优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = NVIC_Sta; //使/失能中断 NVIC_Init(&NVIC_InitStructure); //设置生效 } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1535 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1488 浏览 1 评论
906 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
651 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1531 浏览 2 评论
1842浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
592浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
494浏览 3评论
494浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
475浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-4 08:03 , Processed in 0.852235 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号