本帖最后由 shipeng1989 于 2020-3-24 18:17 编辑
移植了网上的一个FSMC驱动LCD程序,由于硬件也完全照抄,代码拷下来后几乎不用改动在STM32CubeIDE环境下直接debug编译就直接出了显示。调整了一下显示界面后准备换为Release编译看。谁能想到居然白屏了!立即mother fucker,Holly shit,卧槽全招呼上,然而它却不为所动。不过换回debug编译它还是能正常显示的这就让我大概猜到了问题出现的原因了,应该是编译器优化导致的。起初我一直以为是优化后导致的执行速度太快导致LCD时序出错才白屏。百度了一下不知道是不是因为我这个问题不好描述还是真没什么人遇到过,网上搜索结果寥寥无几。只看到一篇说白屏可能是FSMC时序配置太快了导致的,但是我这个debug状态是可以正常显示和他的情况应该不太一样,在尝试修改了几次FSMC的时序配置后都无功而返。差点就准备在每句LCD读写操作后都加一条延时语句了。可这不是我的性格,我严重鄙视这种做法,因为它太笨缺乏创造性,还会严重牺牲显示刷新速度不到万不得已我绝不妥协。最后还是想到了volatile这个阻止编译器优化的“特效药”。只需两句volatile便药到病除,久违的显示就出来了。
//LCD地址结构体
typedef struct
{
volatile u16 LCD_REG;
volatile u16 LCD_RAM;
} LCD_TypeDef;
|