SPI传输会影响其他IO口吗?心塞...

2019-07-19 21:51发布

[mw_shl_code=c,true]INTERRUPT_HANDLER(TLI_IRQHandler, 0) { GPIOD->CR2 &= ~0x80; //禁止PD7外部中断 /* 低电平,表示当前为下降沿触发的中断 */ if( !(GPIOD->IDR & 0x80) ) { SPI_ITConfig(SPI_IT_RXNE, ENABLE); /* 使能SPI(SPE位) */ SPI_Cmd(ENABLE); UART2_SendString("SPI has be enabled. "); } GPIOD->CR2 |= 0x80; }[/mw_shl_code]
如上,这是从机PD7口的中断,PD7配置为上拉输入(浮空输入也尝试过了)。
主机代码: [mw_shl_code=c,true]void main(void) { /* ------------定义变量 ------------ */ /* --------------------------------- */ /* 配置CPU时钟为16MHz */ SystemInit(); LED_GPIO_Config(); UART2_Configuration(); /* 多机通信使用的地址分配使能线,默认高电平 */ Slave1_ADEN_Config(); SPI_Master_Config(); GPIO_WriteLow(ADEN_GPIO_PORT, ADEN_GPIO_PIN); while(1) {    [/mw_shl_code] [mw_shl_code=c,true]        }[/mw_shl_code]
main()先拉低ADEN_GPIO_PIN,也就是PD7, 然后进入while循环,这样的话每次主机上电从机中断被触发一次,串口打印“SPI has be enabled. ”一次。
但是,一旦我在while(1)循环中加入SPI的发送代码。。SPI_SendByte(data);随便一个数据
那运行起来以后就是串口不断打印“SPI has be enabled. ”,也就是说中断重复进入,从机的PD7口状态被SPI传输影响。
我换了其他口中断也是这样,现在暂时的解决方法是,主机上电拉低从机的PD7,延时一会,再拉高,才可以无视SPI的影响。 代码如下: [mw_shl_code=c,true]GPIO_WriteLow(ADEN_GPIO_PORT, ADEN_GPIO_PIN); /* 必须拉高,因为SPI传输会影响PD7状态,原因不明 */ Delay(255); GPIO_WriteHigh(ADEN_GPIO_PORT, ADEN_GPIO_PIN);[/mw_shl_code] [mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true]求解释啊....这到底是为啥?简直心塞[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。