OpenEdv-开源电子网

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

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

[复制链接]

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2013-8-4
在线时间
3 小时
发表于 2014-8-1 10:06:22 | 显示全部楼层 |阅读模式
5金钱
[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.\n"); } 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.\n”一次。


但是,一旦我在while(1)循环中加入SPI的发送代码。。SPI_SendByte(data);随便一个数据


那运行起来以后就是串口不断打印“SPI has be enabled.\n”,也就是说中断重复进入,从机的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]


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2012-12-19
在线时间
0 小时
发表于 2014-8-1 10:27:52 | 显示全部楼层
是不是从机初始化需要一个过程,过程中PD7会变化?可以通过示波器观察。在while里直接写会导致从机复位,所以一直进中断。
目前在玩STM32,BBB,RPi
回复

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2013-8-4
在线时间
3 小时
 楼主| 发表于 2014-8-1 10:31:57 | 显示全部楼层
回复【2楼】w0rmis20:
---------------------------------
额...你是说主机SPI写会导致从机复位??
回复

使用道具 举报

4

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2012-12-19
在线时间
0 小时
发表于 2014-8-1 10:32:40 | 显示全部楼层
回复【3楼】老虎不吃人:
---------------------------------
在没有完成上电初始化的时候可能会
目前在玩STM32,BBB,RPi
回复

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2013-8-4
在线时间
3 小时
 楼主| 发表于 2014-8-1 10:36:43 | 显示全部楼层
回复【4楼】w0rmis20:
---------------------------------
但是我从机开机一段时间后,再打开主机也是一样
回复

使用道具 举报

4

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2012-12-19
在线时间
0 小时
发表于 2014-8-1 10:39:57 | 显示全部楼层
你把PD7拔下来用示波器观察下。如果有不停输出,说明你操作从机的方式肯定是错误的
目前在玩STM32,BBB,RPi
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 18:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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