PIC18F16Q41的SPI用MCC配置函数怎么卡死啊
void ST7735_SPI_SendByte(uint8_t byte){
while(SPI1_IsTxReady()==false);
SPI1_ByteWrite(byte);
}配置后,使用上述函数实现SPI发送字节,但是为何总是在这个while里卡死呢?
难道用错了吗?
你尝试交换这两句位置。
先发送再判断是否可以继续发送。
因为第一次发送肯定是可以的,而判断能否再次发送表示测试刚才是否发送完成。
如果按照当前的操作,那么会有这种可能,就是发送函数执行后,可能被别的操作打扰,导致发送并未完成。所以建议交换位置。 楼上总结 很好,建议试试楼主的说法。看看是不是因为这个。 我也投一票,交换一下顺序,很多都会因为这个出问题 能发送成功吗 可能是因为SPI1的发送缓冲区一直处于满状态,导致SPI1_IsTxReady()返回false。你可以检查SPI的配置 使用上述函数实现SPI发送字节 正常来说估计是初始化没配置对会导致卡死 一般就是SPI没配置对吧 是不是数据发的格式之类的错误了啊 根据PIC18F16Q41的数据手册,SCK(时钟)和SDI(数据输入)引脚是固定的,不能随意更改。如果在MCC中错误地配置了这些引脚,可能会导致SDO(数据输出)的时序错误,进而造成通信失败或函数卡死 SPI通信支持多种模式,包括模式0到模式3,这些模式在时钟极性(CPOL)和时钟相位(CPHA)上有所不同。如果选择的模式与外设不匹配,可能导致通信失败 在配置SPI时,需要确保CKE(时钟边缘选择)和CKP(时钟极性)的设置正确 在使用SPI进行通信时,如果同时启用了发送和接收FIFO(First In First Out),但只处理了发送FIFO而没有处理接收FIFO,可能会导致接收FIFO溢出,从而中断SPI通信 SPI通信通常涉及多个中断和标志位,如发送中断(TXIF)和接收中断(RXIF)。如果这些中断和标志位没有得到正确处理,可能会导致通信失败或函数卡死。 根据外设的要求选择正确的SPI模式。在MCC中正确设置CKE和CKP的值。 处理发送和接收FIFO:如果只使用发送功能,可以只启用发送FIFO。确保在发送数据后及时处理接收FIFO,避免溢出 后来是如何解决的,我好像看到过一个贴说这个。 是不是选的IO不对导致的。
页:
[1]
2