选的芯片是STM32F100C8T6,编译平台为KEIL,仿真器为ULINK2,问题描述如下:
(1)硬件比较简单,外部只有一个串口收发器MAX202,两个电源芯片(一个转5V,一个转3.3V),串口通过DB9与电脑连接,另外就是一些上拉和下拉电阻,一个外部中断(PA0做触发引脚),JTAG单独引出来了,通过20脚的JTAG座与仿真器相连,外部用16MHz有源晶振做为系统时钟源,鉴于功耗方面的考虑,这个晶振的使能端用其中的一个GPIO控制它;
(2)板子为两层板,测试了光板,没有任何问题。自己焊接了三块,虽然比不上机焊的专业水平,但是也就差那么一点点,这点还是能保证的。三块焊接完成后,都上过电,看上去没什么问题,开始也能下载程序;
(3)首先用其中的一块板子开始调试串口(之前已经把相关配置程序和应用程序编写完成),因为之前一直用MAX202,调试前用示波器看过电脑发给MCU的字符,完全没问题。可是当程序调试一段时间之后(大概只有几分钟的时间),程序会突然从DEBUG状态自动退出来(没有任何征兆),然后再尝试下载仿真就下载不下去了,此时BOOT0用10K电阻接地,BOOT1我用100K电阻接地(因为在应用程序里我还有别的用途,所以用100K,而没用10K)。把BOOT0改为10K接3.3V,程序还能进入DEBUG状态,但是我发现获取的时钟频率完全不对,要比之前从内部FLASH启动时获取的时钟都大很多,总之与程序设定的值不一致。于是,我就退出了DEBUG模式,但是这一退,就再也不能进入DEBUG模式了,此时还是从内部SRAM启动。接着把BOOT0在用10K下拉,依旧不能下载调试,报错为:Can not Acess Memory.....DLL has been cancelled。然后我想既然下载不了程序,应该是JTAG的问题,测试了一下那几个相关的管脚,有几个电平有点不正常。特别是JTDI,JTCK(之前除了JTCK外用10K下拉,其他几个都用10K上拉,以抗外部干扰),JTDI上拉不上去,而JTCK又下拉不下去,把10K的电阻换成1K,这些引脚的电平基本算正常了,但是这不合理啊!!!!
(4)又尝试着下载一次,还是没成功(在此说明一下,因为之前一直用KEIL,其设置不会有任何问题,中间我还怀疑过那个ULINK2,但是用我之前项目的板子一试,依旧好使。。。仿真器和KEIL设置不会有问题,看了N遍)此时,最不合理的问题出现了,因为我在外部接了一个简单的RC复位,RESET用的10K的上拉电阻,但是此时用万用表量的电平完全被拉低了,而且下载程序的时候一直提示“Can not stop Cortex-M3 device”,这与复位引脚被拉低的现象是一致的,但是Why???为什么我的复位引脚会被拉低,即使我后来换用1K的电阻上拉都不行!!!令人费解。。。。
(5)后来在网上也查了一下,原因也一一分析了一下,觉得自己的程序问题的嫌疑比较大,因为STM32默认为8MHz的时钟频率,PLL默认为9倍频,于是我认为就是超频让MCU跑疯了,一切都不正常了。。。手边没有8MHz的晶振,就想着在程序设置时钟的时候第一步就把PLL给DISABLE了,又参考了一下经典例程的模块配置顺序,期待第二块板子能有奇迹出现。。。
(6)可是,第二块板子还是按着第一块的老路一路走下去,开始又怀疑是FLASH被保护了,于是想用串口烧写程序,可是当用ST官网的ISP软件和FLYMCU软件时,都出现不能找到设备的情况,ISP也刷不了程序
,这又是why,难道片子此时已经跑坏了?这么脆弱?前前后后又试了很久,很久,可是还是老样子。。。在用ISP软件刷程序连接设备时,软件竟然提示没发现BOOTLOADER,我在想,难不成引导程序丢了?。。。。。不置可否
(7)现在手上还有一块新板子,只是象征性的下载了一下程序,没有经过上面的洗礼(一洗估计又挂了),于是想到了这里,还烦请哪位高手帮忙分析一下,小弟在此感激不尽,拜谢!
(8)明天把配置程序放到后面吧,其实蛮简单的,都没什么东西,谁知道还有这一出,哎,惭愧。。。
[
本帖最后由 wq5551291 于 2013-6-17 21:36 编辑 ]