适用spi_lcd出错,不亮

硬件:ch32v307vct6,lcd某淘宝买的。

连线如图说明:使用spi2,然后rst连接到PB2,LED(背光)连接到PB1,RST连接到PB3,屏幕的cs连接到spi2的NSS引脚。image.png这里是spi2和这些引脚的初始化,然后

image.png这里是肯定例程给的宏定义,我都给修改为了设置相应的GPIO,其中RES大概率是RST(我是这么理解的),BLK我就理解为背光的引脚了,这里还是给出写函数定义(我应该不会看BLK和RES的,只能看写的),image.png,。

现在的问题是,背光能量,但是lcd没有反应。

我尝试调试,发现几个问题

  1. image.png重复进入SPI2——I2C——senddate这个函数,我没有设置断点。

  2. SPI2-DAte寄存器值没有变化,但是重复进入上个函数,变量窗口种的date以及spi->date会变化。

  3. 屏幕没有反应。NQKYZ_]$}2RK~KE0PO4AL{W.pngQ@Z}DNFZZ2K2`[LS1QK}9B2.png YM`[PB[F`BK$_CLS2KLS72N.png

    V@0[$M)VUKE0HZ4%W7DYEMT.png

    上图有我说的各种图以及spi2的状体寄存器的值,其中TXE是1应该代表spi启动了。

    _-898648449__5078ed61710b36b0cef80b5549bb2569_477283371_IMG20240512110326_0_xg_0.JPG_558883805__c41f37529e63c7109181125480a0bf0e_560400261_IMG20240512110353_0_xg_0.JPG还请大佬指点一点,教俺接下如何检测,我现在没有头绪,无法开始下一步,如需要其他信息,我可以提供,因我不是特别懂这个lcd。

非常希望大佬能指点一二,俺实在是不知道了。


给你一段我用的发送代码

void SPI_SendData(uint8_t byte)

{

    SPI_I2S_SendData(SPI1,  byte);

    while (SPI_I2S_GetFlagStatus( SPI1, SPI_I2S_FLAG_BSY ) != RESET);

}


特别注意SPI_I2S_FLAG_BSY状态和SPI_I2S_FLAG_TXE状态的区别,

如果SPI_I2S_FLAG_BSY为0了,才是SPI这个字节真正发送完毕,

仅仅是SPI_I2S_FLAG_TXE为1,只是代表发送缓冲区空了,而实际的发送动作还在进行中,

如果这时认为发送结束,把CS拉高了,实际上仅仅发送了字节的前几位,所以LCD不会亮。

我踩过这个坑,希望能帮到你


好的好的,我还忘记错改了一个。然后我找您所说的,但是现在会卡在第二个循环e1bdbe111379353fb32b78a7d026413.png。第一个循环是不会卡,第二个循环返回的值一直是REST。



送数据的时候因为是Write的命令,从机是不会返回正确数据的。如果你的LCD驱动芯片确定是ILI9488的话可以把需求发我邮箱,我给你一个参考例程,我的邮箱:ccs@wch.cn


一般SPI接口驱动LCD时,接口不支持read,所以没必要再等待读状态读数据,永远也等不来的。直接去掉吧。

把前面SPI的模式初始化为SPI_Direction_1Line_Tx,SPI分频数SPI_BaudRatePrescaler值大一些,LCD的SPI接口速度不怕慢,怕快,太快了容易不稳定


这个型号是ili9341的,我突然发现沁恒那个spi,有个spi_lcd的例程,里面兼容9341的,但是没用。image.png



这里的也是使用spi2,其他的如DC我也改成自己的了,我打算读取发送的寄存器和设备的id,看看能不能正不正确,返回设备id的代码是这样子写的,我让GPT帮我写的,不知道对不对image.png,但,我发出来显然是错了


image.png指令应该没错把,读取显示状态,但是我不知道如何写


搞错了,读取id是D3,这个是读取设备状态


我也是同样的问题,我原程序是用spi1,我现在改用SPI2来通信,然后我现在用示波器测量每一个端口信号都和spi1通信对应端口信号相同,CS和CLK也能够对应得上。但是现在就是白屏,不能够显示其他东西



只有登录才能回复,可以选择微信账号登录