你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103CBT6 外部中断无法触发

[复制链接]
salfe 提问时间:2015-5-14 16:16 /
请各位指教,在配置完SPI1,再去配置外部中断无法被触发,有试过把SPI1配置拿掉,外部中断就可以被触发了,以下是几个相关的函数。系统时钟配置都是默认的。帮忙看下,感谢外部中断配置:
void EXTI_B4_CONFIG(void)
{
        EXTI_InitTypeDef EXTI_InitStructure;
        GPIO_InitTypeDef        GPIO_InitStructure;
        //NVIC_InitTypeDef NVIC_InitStruture;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
        
                //config the IRQ pin,B0
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
        //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//IP IPD IPU
        GPIO_Init(GPIOB, &GPIO_InitStructure);

        
        ///RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//
        
        EXTI_ClearITPendingBit(EXTI_Line4);

        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource4);

        EXTI_InitStructure.EXTI_Line=EXTI_Line4;//
        EXTI_InitStructure.EXTI_LineCmd=ENABLE;
        EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//falling edge trigger interrupt

        EXTI_Init(&EXTI_InitStructure);
}


SPI1配置:
void SPI1_CONFIG(void)
{
        SPI_InitTypeDef                 SPI_InitStructure;
        GPIO_InitTypeDef        GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);

        //config the sck ,MISO,MOSI pin
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        
        //config ce pin,A4
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        
        //config the CS pin,A3
        //GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
        //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        //GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        //GPIO_Init(GPIOA, &GPIO_InitStructure);

        SPI_CS_H();

        SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;
        SPI_InitStructure.SPI_Mode=SPI_Mode_Master;
        SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;
        SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;
        SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;
        SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;
        SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_8;
        SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;
        SPI_InitStructure.SPI_CRCPolynomial=7;
        SPI_Init(SPI1, &SPI_InitStructure);
        
        SPI_Cmd(SPI1, ENABLE);        
}



NVIC 配置:
void NVIC_Config(void)
{
        //config nrf24l01 interrupt
        NVIC_InitTypeDef NVIC_InitStruture;
        
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

        NVIC_InitStruture.NVIC_IRQChannel=EXTI4_IRQn;//EXTI9_5_IRQn;
        NVIC_InitStruture.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级
        NVIC_InitStruture.NVIC_IRQChannelSubPriority=2;//响应优先级
        NVIC_InitStruture.NVIC_IRQChannelCmd=ENABLE;

        NVIC_Init(&NVIC_InitStruture);

        NVIC_SetPriority(SysTick_IRQn,NVIC_EncodePriority(NVIC_PriorityGroup_2, 2,0));

        //NVIC_EnableIRQ(SysTick_IRQn);

        NVIC_InitStruture.NVIC_IRQChannel=TIM3_IRQn;
        NVIC_InitStruture.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级
        NVIC_InitStruture.NVIC_IRQChannelSubPriority=1;//响应优先级
        NVIC_InitStruture.NVIC_IRQChannelCmd=ENABLE;

        NVIC_Init(&NVIC_InitStruture);
}

收藏 评论39 发布时间:2015-5-14 16:16

举报

39个回答
salfe 回答时间:2015-5-15 13:24:11
sting 发表于 2015-5-15 12:29
先配置外部中断,再配置SPI。或是在SPI1_CONFIG里,增加RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABL ...

目前我把SPI 跟中断合在一起配置,结果还是触发不了
void SPI1_CONFIG(void)
{
        SPI_InitTypeDef                 SPI_InitStructure;
        GPIO_InitTypeDef        GPIO_InitStructure;
       
        EXTI_InitTypeDef EXTI_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
        //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
        //RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);

        //config the sck ,MOSI pin
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        //config the ,MISO
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
        //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        //config ce cspin,A4
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_3;
        //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//GPIO_Mode_IN_FLOATING;//GPIO_Mode_IPU;//IP IPD IPU
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
               
                ///RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//
               
        EXTI_ClearITPendingBit(EXTI_Line12);
       
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource12);
       
        EXTI_InitStructure.EXTI_Line=EXTI_Line12;//
        EXTI_InitStructure.EXTI_LineCmd=ENABLE;
        EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//falling edge trigger interrupt
       
        EXTI_Init(&EXTI_InitStructure);

       
        //RCC_MCOConfig(RCC_MCO_HSE);

        SPI_CS_H();

        SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;
        SPI_InitStructure.SPI_Mode=SPI_Mode_Master;
        SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;
        SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;
        SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;
        SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;
        SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_8;//PCLK/8
        SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;
        SPI_InitStructure.SPI_CRCPolynomial=7;
        SPI_Init(SPI1, &SPI_InitStructure);
       
        SPI_Cmd(SPI1, ENABLE);       
}
废鱼 回答时间:2015-5-19 10:13:34
下面代码测试没问题。另外楼主,我看你SPI里面写的是PB12的中断,你不是说的是PB2吗?

void Exit_Ini(void)
{         
  EXTI_InitTypeDef EXTI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;     
   
  /* Configure PB9 as input floating (EXTI Line9) */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  /* Connect EXTI Line9 to PB.09 */
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource2);
  /* Configure EXTI Line9 to generate an interrupt on falling edge */  
  EXTI_InitStructure.EXTI_Line = EXTI_Line2;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
}

/*******************************************************************************
* Function Name  : NVIC_Configuration
* Description    : Configure the nested vectored interrupt controller.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void NVIC_Con(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;               
  /* Configure one bit for preemption priority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  /* Enable the EXTI15_10 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
salfe 回答时间:2015-5-19 11:35:04
安 发表于 2015-5-19 10:33
我仔细看了一楼,楼主到底是用PB4还是PB2还是PB12?
如果是PB4需要将GPIO_Remap_SWJ_NoJTRST这个功能关闭了 ...

哈哈  
这个无所谓呀 其实是我的板子定义的是PB0,因为没办法触发 才一直在换其他的IO去试的。。
为什么是EEFOCUS小白 回答时间:2015-5-14 16:49:36
不懂帮顶
ynwscfsfi 回答时间:2015-5-15 00:47:36
不懂用库……
sting 回答时间:2015-5-15 12:29:29
先配置外部中断,再配置SPI。或是在SPI1_CONFIG里,增加RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
。这样试试看
废鱼 回答时间:2015-5-15 14:43:30
SPI_CS_H();这个代码写的是什么。
salfe 回答时间:2015-5-15 14:52:01
安 发表于 2015-5-15 14:43
SPI_CS_H();这个代码写的是什么。

这句写的是把CS pin 拉high,CS pin 定义的是PA3,CE pin 定义的PA4
废鱼 回答时间:2015-5-15 16:12:41
你把这个代码发一下,别写成了PB4。
salfe 回答时间:2015-5-15 16:39:18
安 发表于 2015-5-15 16:12
你把这个代码发一下,别写成了PB4。

谢谢版主 如此帮忙

Quadrotor FOR EXTI BUG.rar

下载

5.51 MB, 下载次数: 6, 下载积分: ST金币 -1

这是我的工程

废鱼 回答时间:2015-5-15 17:19:16
我现在没有板子,等我回家了给你试一下。你把IO模式改为GPIO_Mode_IN_FLOATING试试。
salfe 回答时间:2015-5-15 19:09:10
安 发表于 2015-5-15 17:19
我现在没有板子,等我回家了给你试一下。你把IO模式改为GPIO_Mode_IN_FLOATING试试。 ...

嗯嗯  这个也试过了。。
因为我手里只有一块板子,所以没办法对比。。。麻烦你了
废鱼 回答时间:2015-5-16 14:13:54
我还得找一下我的M3开发板。不好意思啊。
salfe 回答时间:2015-5-16 20:42:46
安 发表于 2015-5-16 14:13
我还得找一下我的M3开发板。不好意思啊。

没有没有 是我不好意思。。。呵呵
快点帮我试试吧,
mark0668 回答时间:2015-5-17 00:56:01
不懂用库来学习下
123下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版