打印

STM32F4的PB5口进不去中断

[复制链接]
3089|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
墨如风0205|  楼主 | 2013-9-16 11:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 墨如风0205 于 2013-9-16 20:32 编辑

#include "..\include\hardware.h"
#include "..\include\sw.h"
#include "stm32f4xx.h"
#include "core_cm4.h"
//---------------- Function Prototype -------------------//
static int initialize(void);

//---------------- Variable -----------------------------//
SW_T sw={
        .initialize = initialize

};

//-----------------Function------------------------------//
/*
* Name                                        : initialize
* Description        : ---
* Author                                : .
*
* History
* ----------------------
* Rev                                        : 0.00
* Date                                        : 07/17/2013
*
* create.
* ----------------------
*/
static int
initialize(void)
{
        
        RCC->APB2ENR |= (1<<14);                        //使能syscfg
        
        GPIOB->MODER &= ~((1<<11)|(1<<10));                //PB5为输入模式
        GPIOB->PUPDR |= (1<<10);                        //PB5为上拉
        
        EXTI->IMR |= (1<<5);                                //开放来自线5的中断请求
//        EXTI->EMR |= (1<<5);                                //开放来自线5的事件请求
//         EXTI->RTSR &= ~(1<<5);                                //禁止输入线5上的上升沿触发
         EXTI->FTSR |= (1<<5);                                //允许输入线5上的下降沿触发
        
        SYSCFG->EXTICR[2] |= SYSCFG_EXTICR2_EXTI5_PB;
        
        NVIC->IP[23] = 0Xa;                                //中断优先级为a
        NVIC->ISER[0] |= (1 << 23);                        //允许EXTI线[9:5]中断
        
        SYSCFG->CMPCR = (1<<0);                                //使用IO补偿单元
               
        return 0;
}
/*
* Name                                        : delay_ms
* Description        : ---
* Author                                : .
*
* History
* ----------------------
* Rev                                        : 0.00
* Date                                        : 07/17/2013
*
* create.
* ----------------------
*/
void
EXTI9_5_IRQHandler(void)
{
        
        if(EXTI->PR&(1<<5)!=0){
                LED_ON;
                        }
               
                EXTI->PR = (1<<5);                //该位置1,清除中断标志位(清除 中断挂起)
               
        }
沙发
墨如风0205|  楼主 | 2013-9-16 11:04 | 只看该作者
然后在nvic里,设置的
SCB->VTOR= ((unsigned long)0x08000000); //设置中断的基地址
SCB->AIRCR = 0x05AF0000 | 0x400;          //中断优先级分组

使用特权

评论回复
板凳
airwill| | 2013-9-17 09:07 | 只看该作者
本帖最后由 airwill 于 2013-9-17 09:09 编辑

EXTICR 也应该设置一下
用寄存器操作, 这里要注意一下.
SYSCFG->EXTICR[1] 是 EXTICR2

使用特权

评论回复
地板
墨如风0205|  楼主 | 2013-9-22 12:02 | 只看该作者
airwill 发表于 2013-9-17 09:07
EXTICR 也应该设置一下
用寄存器操作, 这里要注意一下.
SYSCFG->EXTICR[1] 是 EXTICR2  ...

恩,是的,我已经找到问题了,不仅这个地方,问题是我调试过程中,断点设置不对,谢谢您

使用特权

评论回复
5
outstanding| | 2013-9-22 13:04 | 只看该作者

使用特权

评论回复
6
墨如风0205|  楼主 | 2013-9-25 16:40 | 只看该作者
outstanding 发表于 2013-9-22 13:04

使用特权

评论回复
7
chuangpu| | 2013-9-25 19:51 | 只看该作者
问题解决了就好   楼主   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:不畏将来,不念过往。如此,安好!

4

主题

111

帖子

0

粉丝