STM32NVIC中断系统控制按键实现LED灯翻滚

核心部分:两个文件四个函数

两个文件:it.cmsp.c

it.c:放置中断函数的文件(当中断产生便会跳入这个文件实施操作)

msp.c 放置中断优先级组,中断优先级的函数

函数1:设置中断优先级组HAL_NVIC_SetPriorityGrouping()

函数2:HAL_NVIC_SetPriority函数用于设置一个中断的优先级,它有三个形参,第一个为IRQn_Type类型参数,指定中断源,中断源在stm32g431xx.h文件里。 第二个和第三个形参分别设定中断的抢占式优先级和响应优先级,这个的设置要与中断组配合使用。

函数3: HAL_NVIC_EnableIRQ函数用于在NVIC控制器中使能指定中断,它有一个形参,是IRQn_Type类型参数。

函数4:HAL_NVIC_DisableIRQ函数是在NVIC控制器中禁用指定中断,用法与HAL_NVIC_EnableIRQ函数相同。

stm32cubeMX配置

复制上一讲的LCD工程并改名为HAL_04_EXTI_TEST

配置PA0引脚为外部中断GPIO_EXTI0,下降沿触发

在NVIC界面使能外中断0

设置优先级组为组2,组2有可配置两个抢占优先级和两个响应优先级,我们设置抢占优先级为1,响应优先级为1

将系统时钟的中断优先级配置为0,1并生成代码

移植source中的代码

在新建工程文档HAL_04_EXTI_TEST的Src和inc文件里的bsp中分别创建bsp_exti的.c和.h文件

打开HAL_04_EXTI_TEST的keil工程,在bsp_key.c中屏蔽掉按键PA0之前配置的所有代码

把Source中配置好的代码移植到bsp_exti.c中并删除多余的代码

在main.c中调用EXTI_Init

当外中断产生时需要跳转到中断里

在Srouce里复制外部中断函数放到TEST的it.c里(外部中断EXTI0一旦触发就会调用这个函数)

在HAL_00_Srouce中的msp里的中断优先级分组粘贴到HAL_04_EXTI_TEST中的相同位置

Source里的中断优先级分组移植到msp文件里

  

修改滴答定时器外部中断的优先级为0,0放在msp文件夹里

(在main.c的HAL_Init()  ->  HAL_InitTick(TICK_INT_PRIORITY) 找滴答定时器中断)

在外部中断函数中找到回调函数(这是一个弱函数),在主函数里写回调函数,我们想在外部中断产生时实现一些灯的操作

中断产生后是如何执行的

当中断产生时首先会跳转到stm324xx_it.c中执行EXTI0_IRQHandler(void)接着执行这个函数里面的函数HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0)

接着调用 HAL_GPIO_EXTI_Callback(GPIO_Pin)

因为这个函数默认是一个弱函数,但我们在主函数中重新声明了这个函数,所以会接着执行主函数我们重新声明的内容

当外中断产生后我们让灯点亮

ucLed ^= 0x88(让灯翻滚操作)

ucled = ucLed 异或 0x88

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值