STM32H753ZIT6 + FMC Bank1 driving NT35510 LCD — screen completely dead, ID read returns 0x0000
Hi everyone,
I'm working on a project using **STM32H753ZIT6** (Cortex-M7 @ 480MHz) to drive an **Alientek ATK-MD0430** 4.3" TFTLCD with **NT35510** controller via **FMC 16-bit 8080 parallel bus**.
**Symptom: Screen is completely dead — no backlight, no image, NT35510 ID read returns 0x0000 or 0xFFFF.**
I've been debugging this for two weeks and would appreciate any guidance.
---
### Hardware Configuration
| LCD Signal | STM32 Pin | FMC Function |
|-----------|-----------|--------------|
| CS | PD7 | FMC_NE1 (Bank1) |
| RS | PD13 | FMC_A18 |
| WR | PD5 | FMC_NWE |
| RD | PD4 | FMC_NOE |
| RST | PG9 | GPIO Output |
| BL | PA8 | TIM1_CH1 PWM |
| D0-D15 | Standard FMC data bus pins | FMC_D0~D15 |
### System Clock
HSE=25MHz → PLL1 /5×192/2 = 480MHz SYSCLK
PLL2 /5×120/3 = 200MHz → FMC (HCLK=240MHz)
VOS Scale 0
### What I've Tried (all failed)
1. Copied NT35510 init sequence from Alientek's official MiniSTM32H750 example
2. Fixed CMD/DATA addresses: CMD=0x6007FFFE, DATA=0x60080000 (RS on A18)
3. MPU configured for FMC LCD region (0x60000000) as Non-Cacheable + Non-Bufferable
4. Full 7-zone MPU configuration (DTCM/AXI/SRAM1-3/SRAM4/FMC/SDRAM/NAND)
5. D-Cache forced Write-Through: SCB->CACR |= 1<<2
6. FMC timing aligned to official values: AddressSetup=0x15, DataSetup=0x78
7. ExtendedMode=ENABLE, WriteFifo=DISABLE
8. Moved MPU_Config() after SystemClock_Config()
9. Replaced LVGL with raw color fill (excluded UI framework)
10. Removed FreeRTOS task that was accidentally toggling PG9 (LCD_RST)
### My Suspicion
- **FMC Bank1 vs Bank4**: Alientek official uses Bank4 (NE4=PG12), I'm using Bank1 (NE1=PD7). Are there FMC initialization differences for Bank1 vs Bank4 beyond the NE pin assignment?
- **PA8 PWM for backlight**: Official example uses PB5 GPIO directly. I'm using TIM1_CH1 PWM on PA8. Is this causing a conflict?
- **GPIO conflict**: MX_GPIO_Init() configures some pins before HAL_SRAM_MspInit() runs. Could CubeMX-generated GPIO init overwrite the FMC AF configuration?
### Key Files
Full code: https://github.com/1945980193abc-sys/STM32H753-NT35510-LCD-Debug
- Core/Src/lcd.c — NT35510 register init sequence
- Core/Src/app_init.c — MX_FMC_Init()
- Core/Inc/lcd.h — FMC address macros
- Core/Inc/mpu_config.h — MPU configuration
- docs/hardware.md — Complete pin mapping
---
Any suggestions on what to check first with a scope, or common pitfalls with FMC Bank1 on H7, would be greatly appreciated.
Thank you!
