本帖最后由 KevinLi 于 2025-2-3 21:10 编辑
这个软件spi,【SPI_SwapByte】这个函数是按照bit 每clk依次写入/读取,
您的项目中,此方法满足ST7735的时序要求,
请问您是否知道这个间隔大概是多少?是否是按照GPIO的翻转间隔计算呢?
(我发现BL602没有参数可以计算这个参数,只知道cpu主频和XTAL频率。XTAL频率似乎只需在烧录时指定)
我在尝试驱动ws2812,需要每bit间隔/分度值 是0.2ms/200ns左右,
我使用您这个软件方法驱动 失败了(尝试加入延时但vtaskdelay最小值似乎是1ms,插入cpu的nop方法我还没试因为不清楚io翻转速度)。
------
0203更新:
我用逻辑分析仪 发现这个 波形/时间间隔是稳定的,周期是1063ns.
(8Mhz/125ns 和 1063ns差的还是挺多的)
/**
* 函数:SPI交换传输一个字节,使用 SPI 模式0
* 说明:发送一个字节并接收一个字节
* 参数:ByteSend 要发送的字节
* 返回值:接收到的字节
*/
uint8_t SPI_SwapByte(uint8_t ByteSend)
{
uint8_t i, ByteReceive = 0x00; // 接收到的数据,初始值为0
for (i = 0; i < 8; i++) {
// 发送当前位的数据
SPI_W_MOSI(ByteSend & (0x80 >> i)); // 获取 ByteSend 的第 i 位数据
SPI_W_CLK(1); // 拉高 SCK
// 读取接收到的数据
if (SPI_R_MISO()) {
ByteReceive |= (0x80 >> i); // 如果 MISO 为 1,设置接收字节的第 i 位
}
SPI_W_CLK(0); // 拉低 SCK
}
return ByteReceive; // 返回接收到的字节
}
|