OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10657|回复: 4

关于stm32f407外部中断设置疑惑,往大神们不吝赐教

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2015-4-8
在线时间
0 小时
发表于 2015-4-30 11:58:25 | 显示全部楼层 |阅读模式
5金钱
我想配置stm32f407的PB7作中断输入控制PC口流水灯,但按下PB7没反应,代码如下:
#include"stm32f4xx.h"
#include"gpio.h"
#define uint unsigned int
#define uchar unsigned char

/******SysTick倒数计数器设置*******/
void delay_ms(uint ms)

uint i;
for(i=0;i<ms;i++)
{
uint32_t temp;     
// if(nus==0)
// return; //nus=0,直接退出
SysTick->CTRL&=0xfffffffb;
SysTick->LOAD = 0x0834; //0x200b20; //1s //时间加载       
SysTick->VAL = 0x00;           //清空计数器
SysTick->CTRL = 0x01 ;         //开始倒数   
do
{
temp=SysTick->CTRL;
}
while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达
SysTick->CTRL = 0x00;            //关闭计数器 
    SysTick->VAL = 0X00;           //清空计数器 
    }
}
/******SysTick倒数计数器设置*******/

void EXTI_Init(void)
{
  SCB->AIRCR = 0x05AF0000 | 0x400; 
/*****************PB ********************/
  RCC->AHB1ENR |= (1<<1); 
  RCC->APB2ENR |= (1<<14);


  GPIOB->MODER &= 0x0000C000;              //PB7输入

  GPIOB->OTYPER &= 0xFFFF;                      //开漏输出
  GPIOB->OSPEEDR = 0x0000C000;             //P7输出速度100Mz
  SYSCFG->CMPCR |= (1<<0);                    //                              
  GPIOB->UPDR |= 0x00004000;              //P7带上拉
//  GPIOB->BSRRH = 0xffff;

  EXTI->IMR=0;                                           //屏蔽PB中断
  EXTI->IMR |= ( 1 << 7 );                          //开启PB4中断
  EXTI->FTSR |= ( 1 << 7 );                        //允许PB4下降沿触发中断
  SYSCFG->EXTICR[1] =0x00001fff;           //PB7输入   
  NVIC->IP[EXTI4_IRQn] = 0xe0;               //中断优先级   (这里不知道如何设置)
  NVIC->ISER[0] |= (1<<13);                     //中断使能寄存器   (这里不确定PB7的向量是否是13)

void EXTI3_IRQHandler(void)

    uint o;

  if ((EXTI->R & 0x00080) != 0)         
  {
 
  for(o=0;o<100;o++)
  {  
    GPIOC->ODR |= 0xffff; //tmp;
    delay_ms(100);  

  GPIOC->ODR &=~ 0xffff; //tmp;
  delay_ms(100);  
  }  

    EXTI->R|=0x00080;   
  }
}

int main(void)
{
 uchar i;
 uchar j;


  RCC->AHB1ENR |= 1<<2;       //使能 PORTC 时钟  
   RCC->APB2ENR |= (1<<14);        //使能syscfg时钟  
  GPIOC->MODER |= 0x55555555; //通用输出模式
  GPIOC->OTYPER |= 0x00;   //推挽输出
  GPIOC->OSPEEDR |= 0xffffffff; //输出频率100MHz
  GPIOC->UPDR |= 0x00; //不带带上下拉电阻
   SYSCFG->CMPCR = 0x0101;         //使用IO补偿单元,  
                                            //当GPIO速度超过50M的时候要考虑使用此设置 
   RCC->AHB1ENR |= 1<<1;           //使能 PORTB 时钟    
   GPIOC->MODER |= 0x00;    //输入模式
   EXTI_Init(); 
 while(1)
{
   for(i=0;i<16;i++)
 {
  PCout (i) = 1;
  delay(50);
 
  PCout (i) &=~ 1;
 
   if(i ==15)
   {
    for(j=14;j>0;j--)
    {
      PCout (j) = 1;
      delay(50);

     Cout (j) &=~1;
   }
}
  }
}
流水灯一直闪烁,但按PB7不能触发中断,麻烦各位大神帮忙看下是哪里出了问题,多谢!还有提前祝各位五一快乐!
 【特别是这两个不知道如何设置    NVIC->IP[EXTI4_IRQn] = 0xe0;      NVIC->ISER[0] |= (1<<13);                     //中断使能寄存器   】           


最佳答案

查看完整内容[请看2#楼]

参考下我们探索者F407开发板,寄存器版本的外部中断实验
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-4-30 11:58:26 | 显示全部楼层
参考下我们探索者F407开发板,寄存器版本的外部中断实验
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2015-4-8
在线时间
0 小时
 楼主| 发表于 2015-4-30 11:58:26 | 显示全部楼层
问题已解决,原来是下面这两个中断寄存器弄错了
NVIC->IP[EXTI9_5_IRQn] = 0xc0; 
NVIC->ISER[0] |= (1<<23);   
谢谢原子哥和楼上的热心人士!
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2015-4-8
在线时间
0 小时
 楼主| 发表于 2015-4-30 12:22:16 | 显示全部楼层
自己先帮顶一下^_^,难道大神们都放假了?
回复

使用道具 举报

7

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2014-12-23
在线时间
39 小时
发表于 2015-4-30 15:20:25 | 显示全部楼层
帮顶吧,我一般配置的时候还是使用固件库,然后程序执行的时候才用的寄存器,你这个配置的是些什么东西我着实是看不懂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 15:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表