我有一个
STM32H743 连接到一个屏幕,该屏幕通过 FMC(即并行连接)使用 ST7789,使用 8 位带宽和 A18 在命令和数据之间进行选择。
如果我不向使用 FMC 的写入函数添加睡眠,当前代码会出现屏幕输出混乱的问题(见下图)。
该代码在 STM32CubeIDE 下工作(无需延迟),但我将其移植为作为 MicroPython 的一部分工作。
我已经考虑过的事情:
- Python 速度 - C 中的代码是一个嵌套的 for 循环并调用 writeData,因此它不是 python 速度的东西。
- 系统时钟/FMC - 我将 FMC 初始化(包括 Msp)、GPIO 和系统时钟的整个代码复制到 MicroPYthon,没有任何修复。
- HAL 版本 - MicroPython 使用不同的 stm32 HAL 版本,但我复制了 SRAM/FMC 文件,但它仍然不起作用
关于可能是什么问题的任何指示?它是 FMC 时钟配置吗?外部存储器位置的一些配置?
任何减慢 FMC 作为 RAM 访问的配置
附录:
- #define COMMAND_LOCAtiON 0xC0000000
- #define DATA_LOCATION 0xC0040000
- static uint8_t* fmc_command_pointer = (uint8_t*) COMMAND_LOCATION;
- static uint8_t* fmc_data_pointer = (uint8_t*) DATA_LOCATION;
- void writeCommand(uint8_t command)
- {
- *fmc_command_pointer = command;
- HAL_Delay(100);
- }
- //*****************************************************************************
- void writeData(uint8_t data)
- {
- *fmc_data_pointer = data;
- HAL_Delay(1);
- }
在不延迟 writeData 的情况下用蓝色填充屏幕会产生:
随着延迟(一段时间后,因为每个像素需要 1 毫秒)正确填充它: