ST意法半导体
直播中

王涛

7年用户 1221经验值
私信 关注
[问答]

为什么带有ST7789的STM32H743 FMC不能立即工作?怎么解决?

我有一个 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 毫秒)正确填充它:









回帖(1)

喻唯

2023-1-6 11:55:31
发现了问题,它是指向 FMC 内存的指针或 STM32HAL 语法中缺少 volatile __IO - 代码应该是:


  • static __IO uint8_t* fmc_command_pointer = (__IO uint8_t*) COMMAND_LOCATION;
  • static __IO uint8_t* fmc_data_pointer = (__IO uint8_t*) DATA_LOCATION;

现在为什么这在我的 STM32CubeIDE 中有效是一个谜,可能是 gcc 编译标志
举报

更多回帖

发帖
×
20
完善资料,
赚取积分