打印
[STM32F1]

请指教。STM32F103CBT6外部中断无法触发

[复制链接]
3101|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Salfe|  楼主 | 2015-5-8 16:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请各位指教,在配置完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);
}


沙发
Salfe|  楼主 | 2015-5-8 19:51 | 只看该作者
没人呀

使用特权

评论回复
板凳
mmuuss586| | 2015-5-8 23:03 | 只看该作者
看了下没啥问题;
硬件也没啥冲突;

使用特权

评论回复
地板
mmuuss586| | 2015-5-8 23:04 | 只看该作者
只要1初始化话后,即使不操作SPI,外部中断有中断到来的时候也无法进入中断吗?

使用特权

评论回复
5
Salfe|  楼主 | 2015-5-9 07:09 | 只看该作者
mmuuss586 发表于 2015-5-8 23:04
只要1初始化话后,即使不操作SPI,外部中断有中断到来的时候也无法进入中断吗? ...

SPI1接的是NRF24L01,PB4接的是IRQ脚,SPI1初始化之后就无法触发中断,把这部分初始化拿掉就可以触发。
初始化之后应该没操作SPI,只是在等中断

使用特权

评论回复
6
wind~风| | 2015-5-9 20:13 | 只看该作者
把外部中断的优先级设置高于SPI的中断优先级试试

使用特权

评论回复
7
Salfe|  楼主 | 2015-5-9 21:43 | 只看该作者
wind~风 发表于 2015-5-9 20:13
把外部中断的优先级设置高于SPI的中断优先级试试

请教 “SPI的中断 ” 是指?
印象中SPI 只有CE CS SIMO SOMI,SPI通讯用不到中断吧。

使用特权

评论回复
8
mmuuss586| | 2015-5-9 21:47 | 只看该作者
Salfe 发表于 2015-5-9 07:09
SPI1接的是NRF24L01,PB4接的是IRQ脚,SPI1初始化之后就无法触发中断,把这部分初始化拿掉就可以触发。
...

可能SPI初始化,哪个引脚有冲突吧;

你上面的程序,目前还没看出什么问题;

使用特权

评论回复
9
Salfe|  楼主 | 2015-5-9 21:50 | 只看该作者
mmuuss586 发表于 2015-5-9 21:47
可能SPI初始化,哪个引脚有冲突吧;

你上面的程序,目前还没看出什么问题; ...

嗯 非常感谢您的回复。。我再继续Debug看看。有结果再分享下

使用特权

评论回复
10
mmuuss586| | 2015-5-9 21:55 | 只看该作者
Salfe 发表于 2015-5-9 21:50
嗯 非常感谢您的回复。。我再继续Debug看看。有结果再分享下

:loveliness:
期待你的结果;
我现在太忙了,实在没时间,写段程序试验;

按理应该不会有问题的,我用407,经常开6个串口,3路DA,1路CAN,2路DA,1路SPI,几路PWM输出都没问题;

使用特权

评论回复
11
wind~风| | 2015-5-9 22:12 | 只看该作者
Salfe 发表于 2015-5-9 21:43
请教 “SPI的中断 ” 是指?
印象中SPI 只有CE CS SIMO SOMI,SPI通讯用不到中断吧。 ...

错了,我本来想说的是最后TIM的那个中断,不过好像应该不是这个的问题

使用特权

评论回复
12
Salfe|  楼主 | 2015-5-9 22:19 | 只看该作者
wind~风 发表于 2015-5-9 22:12
错了,我本来想说的是最后TIM的那个中断,不过好像应该不是这个的问题

嗯嗯,谢谢

使用特权

评论回复
13
Salfe|  楼主 | 2015-10-29 14:36 | 只看该作者
结贴了,说实话,没找到具体原因,换了块板子,下降沿还是触发不了,改成上升沿触发,发现可以触发了。然后再改回下降沿触发,居然可以了。。。

使用特权

评论回复
14
冰河w| | 2015-10-29 21:32 | 只看该作者
中断使能打开了吗

使用特权

评论回复
15
huangcunxiake| | 2015-10-29 22:21 | 只看该作者
找个外部中断的历程看看

使用特权

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

本版积分规则

1

主题

65

帖子

1

粉丝