mintspring 发表于 2024-7-21 23:11

PIC18F16Q41的SPI用MCC配置函数怎么卡死啊

void ST7735_SPI_SendByte(uint8_t byte)
{       
    while(SPI1_IsTxReady()==false);
    SPI1_ByteWrite(byte);
}配置后,使用上述函数实现SPI发送字节,但是为何总是在这个while里卡死呢?
难道用错了吗?

gaoyang9992006 发表于 2024-7-22 14:30

你尝试交换这两句位置。
先发送再判断是否可以继续发送。
因为第一次发送肯定是可以的,而判断能否再次发送表示测试刚才是否发送完成。

gaoyang9992006 发表于 2024-7-22 14:31

如果按照当前的操作,那么会有这种可能,就是发送函数执行后,可能被别的操作打扰,导致发送并未完成。所以建议交换位置。

yiyigirl2014 发表于 2024-7-22 14:33

楼上总结 很好,建议试试楼主的说法。看看是不是因为这个。

呐咯密密 发表于 2024-7-22 16:54

我也投一票,交换一下顺序,很多都会因为这个出问题

huangcunxiake 发表于 2024-7-27 22:29

能发送成功吗

xiaoqi000 发表于 2024-9-25 16:20

可能是因为SPI1的发送缓冲区一直处于满状态,导致SPI1_IsTxReady()返回false。你可以检查SPI的配置

哈根达斯uz 发表于 2024-9-30 16:10

使用上述函数实现SPI发送字节

liu96jp 发表于 2024-10-23 16:45

正常来说估计是初始化没配置对会导致卡死

g0d5xs 发表于 2024-10-23 16:46

一般就是SPI没配置对吧

lix1yr 发表于 2024-10-23 17:50

是不是数据发的格式之类的错误了啊

ex7s4 发表于 2024-10-23 20:02

根据PIC18F16Q41的数据手册,SCK(时钟)和SDI(数据输入)引脚是固定的,不能随意更改。如果在MCC中错误地配置了这些引脚,可能会导致SDO(数据输出)的时序错误,进而造成通信失败或函数卡死

cen9ce 发表于 2024-10-23 21:13

SPI通信支持多种模式,包括模式0到模式3,这些模式在时钟极性(CPOL)和时钟相位(CPHA)上有所不同。如果选择的模式与外设不匹配,可能导致通信失败

tax2r6c 发表于 2024-10-23 22:24

在配置SPI时,需要确保CKE(时钟边缘选择)和CKP(时钟极性)的设置正确

lamanius 发表于 2024-10-24 07:25

在使用SPI进行通信时,如果同时启用了发送和接收FIFO(First In First Out),但只处理了发送FIFO而没有处理接收FIFO,可能会导致接收FIFO溢出,从而中断SPI通信

suw12q 发表于 2024-10-24 09:10

SPI通信通常涉及多个中断和标志位,如发送中断(TXIF)和接收中断(RXIF)。如果这些中断和标志位没有得到正确处理,可能会导致通信失败或函数卡死。

b5z1giu 发表于 2024-10-24 10:15

根据外设的要求选择正确的SPI模式。在MCC中正确设置CKE和CKP的值。

l1uyn9b 发表于 2024-10-24 11:27

处理发送和接收FIFO:如果只使用发送功能,可以只启用发送FIFO。确保在发送数据后及时处理接收FIFO,避免溢出

稳稳の幸福 发表于 2024-11-29 20:23

后来是如何解决的,我好像看到过一个贴说这个。

稳稳の幸福 发表于 2024-11-29 20:33

是不是选的IO不对导致的。
页: [1] 2
查看完整版本: PIC18F16Q41的SPI用MCC配置函数怎么卡死啊