我在通过Olimex将ENC28J60-H连接到我的STM32L-Discovery时遇到问题。所以我写了读ECON1寄存器的代码,然后把一些值写入其中,然后再读一次。这里有一个问题:当我使用调试器逐步(F10)调试这段代码中的每一行时,一切都很顺利。但是,当我在这几行之后设置断点时,register返回0x00。我决定,ENC没有足够的时间将值写入寄存器。但手册上说,它有自己的晶体振荡器,频率为20或25 MHz (不太记得了)。我的频率大约是150 kHz。无论如何,我在每次SPI发送或接收之后都设置了一个延迟(循环中的简单计数器)。这是有帮助的。然后我继续。我编写了一个Init-function (软重置,然后将需要的值写入寄存器),在main函数中使用它。在调用它之后,我再次读取ECON1寄存器。我得到的只是0x00,即使有延迟。有人知道在这种情况下该怎么做吗?
发布于 2013-09-26 14:05:13
通过SPDR发送一个字节后,测试SPSR寄存器中的SPIF位(0x80)。当SPIF为== 1时,则数据已发送。
延迟之所以有效,是因为您为传输(和ENC28J60中的内部逻辑)提供了完成的时间。
https://stackoverflow.com/questions/13668230
复制相似问题