谢谢大家!问题已找到.与大家分享痛苦经历..
[这个问题绕了2个弯.
程序初始化AHB外设时钟时.使用了一个未赋值的临时变量作为外设掩码输入. 导致错误的把SDIO的时钟打开了.
STM32勘误表中提到了如果要使用SDIO就不能使用UART4_TX. 两者会有冲突. 因此即使正确的初始化了GPIO与UART寄存器Tx也不会为高电平.
而改动应用程序将导致内存map发生变化. 局部变量的初始值也有所差别. 某些情况下不会将SDIO外设时钟打开. 故可正常运行.]
其实一开始我知道肯定是哪个地方内存出现问题了, 但死也找不到. 因为通过插件看GPIO, UART, RCC几个寄存器值完全配置正确了. 还不能工作.
有一次点击寄存器列表的时候打开了AHB看了一下,发现SDIOEN = 1. 而程序并没有使用SDIO. 当时没在意.
后面在看勘误表的时候发现SDIO与UART4_TX有冲突...才想起问题的所在.. 很快就定位了..
最后..血的教训:画原理、写驱动前一定要看勘误表!!! 在AT91,STM32上已经出了4-5个相关的问题了. 至少导致重新做了2版.
|