前言

我也是第一次发现这种情况。当我把我的程序烧进stm32发现stm32似乎死机了,
当我把一条条程序分别注释后才发现,忽然是指纹模块和FSMC的初始化发生了冲突,
而且冲突的很诡异,根本看不出哪里冲突了。

问题重新定位

经过昨天晚上的测试,我以为是指纹模块和FSMC的初始化出现了冲突,今天再次测试时发现我之前错了。
发现只要调用了TFT屏的初始化程序,stm32就死机了。

我觉得问题可能不是出在初始化程序上,因为我看了很多遍初始化的程序,没有发现有冲突的地方。

重点来了

那么问题到底出在什么地方呢?
我无意间发现当我把串口初始化程序注释掉了以后stm32就工作正常了!!

1
2
uart_init(9600);
usart2_init(usart2_baund);

就是这两句程序导致的问题。

但是我这个项目必须要使用到串口,于是我去搜索了一下串口和FSMC的冲突问题,没想到这么容易就找到了
解决方法:需要把LCD初始化放在uart初始化的前面。
(解决方法来源在第6楼)

我再用我的程序解释一下吧。

1
2
3
4
5
6
7
8
9
10
int main(void)
{
...
LCD_Init(); //LCD初始化在uart初始化的前面

uart_init(9600);
usart2_init(usart2_baund);
LCD_ClearScreen(BLACK);
...
}

问题解决。