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]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
w0rmis20
1楼-- · 2019-07-20 01:07
是不是从机初始化需要一个过程,过程中PD7会变化?可以通过示波器观察。在while里直接写会导致从机复位,所以一直进中断。
老虎不吃人
2楼-- · 2019-07-20 04:03
 精彩回答 2  元偷偷看……
w0rmis20
3楼-- · 2019-07-20 05:03
 精彩回答 2  元偷偷看……
老虎不吃人
4楼-- · 2019-07-20 05:21
回复【4楼】w0rmis20:
---------------------------------
但是我从机开机一段时间后,再打开主机也是一样
w0rmis20
5楼-- · 2019-07-20 08:26
你把PD7拔下来用示波器观察下。如果有不停输出,说明你操作从机的方式肯定是错误的

一周热门 更多>