stm32寄存器操作笔记(二)中断篇2

这一篇主要是来介绍一下中断的寄存器怎么操作。先介绍一下整体情况。在这里假设使用PA0作用外部中断口,在初始化中将PA0设为下拉(这里本人的PA0是按键,选择下拉原因在GPIO篇中介绍过,不在重复)将该中断分为2组,有两位抢断,两位响应。

void Exti_Init(void)
{
    //开启对应外设时钟,主要有两种GPIOA和AFIO
    RCC->APB2ENR |= (1<<0);
    RCC->APB2ENR |= (1<<2);

    //将PA0设置为下拉输入
	GPIOA->CRL &= 0xFFFFFFF0;
	GPIOA->CRL |= 0x00000008; 
    GPIOA->BSRR |= (1<<16);
    
    //在AFIO中选择EXTI0
    AFIO->EXTICR[0] &= 0xFFF0;
    AFIO->EXTICR[0] |= (0<<0);

    //在EXTI的IMR寄存器中选择开启中断
    EXTI->IMR |= (1<<0);
    
    //对PA0由于是下拉,所以选择上升沿触发
    EXTI->RTSR |= (1<<0);
    
    //在SCB的AIRCR寄存器中选择分组
    uint32_t temp;
    //读取寄存器中的值,并将之前的分组清除
    temp = SCB->AIRCR;
    temp &= 0x0000F8FF;
    //写入钥匙0x05FA
    temp |= 0x05FA0000;
    //写入分组2 
    //这里的0x05其实就是101,左移8位,控制分组
    temp |= (0x05)<<8
    SCB->AIRCR = temp;
   
    //在操作NVIC的ISER和IPR寄存器,这里的抢断为1级,响应为0级(0b0100)注意是高位有效
    NVIC->ISER[0] |= (1<<6);
    NVIC->IP[6] = 0x40;
}

void EXTI0_IRQHandler(void)
{
    if((GPIOA->IDR &= 0x0001) != 0)
    {
    //看具体情况,自行编写需要的中断逻辑
    }
    //清除中断标志位
    EXTI->PR=1<<0;
}

OK!主要的代码脉络已经讲完,可以按照上一节的说明加上官方的参考文档搭配使用。这一节确实比较难以理解,大家有啥疑问或者看不懂的可以在评论区留言,我看到就会处理,共同学习,共同进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值