[求助] 哪位仁兄能帮忙解决这个奇怪的问题,初入STM32不久,谢谢

wq5551291   2013-6-15 21:22 楼主
选的芯片是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 编辑 ]
  • 仿真配置.JPG

回复评论 (10)

和调试器的连接先于程序,所以觉得应该和软件没关系,reset是低电平确叫人费解,先解决这个问题不然肯定不行,电容有问题吗?奇怪啊
点赞  2013-6-16 00:34
你程序有关闭调试swj配置之类的操作吗?
点赞  2013-6-16 00:38

回复 沙发 huo_hu 的帖子

也怕电容被击穿短路了,所以一一都测了,没问题,甚至把那个RESET引脚的0.1uf的电容给拿掉,还是照样被拉低。。。关键是开始调试的时候都没有问题啊,那些调试端的电平都还正常。。。按上面折腾几次,就挂了
点赞  2013-6-16 10:10

回复 板凳 huo_hu 的帖子

我用的JTAG模式,没用SWJ,程序里也没复用JTAG,也没有关闭它的程序,这些引脚都是专用于调试的。。。。。今天没去公司,所以配置文件还得明天了,还是要谢谢你的回复啊。。。实在是不明了,关键是我也不是一天两天玩MCU了,只是感觉STM32容错做得不是太好,时钟搞得有点小复杂,没必要。。。。。调试的时候突然从调试状态跳出来是个表面现象,难道是因为时钟不稳?
点赞  2013-6-16 10:15

回复 楼主 wq5551291 的帖子

串口我用的是USART1,没有重映射,就用的PA9和PA10,但是也不能ISP。。。哎,一堆奇怪问题
点赞  2013-6-16 10:33

PLC开发板

PLC开发板怎么设计?
点赞  2013-6-16 11:15

回复 5楼 wq5551291 的帖子

我现在遇到的问题是可以下载,但是不能仿真,而且只能用 SWJ 模式。
说实话,如果不是 ST 的芯片推广得比较好,相比 TI 的芯片的整体应用感觉,还是显得杂乱和麻烦。
点赞  2013-6-17 10:13
问题基本解决了,有两方面的原因,一是电源质量不是很好,二是中断使能后进入了STOP模式,CPU时钟被关闭了。。。至于后来出现的RESET被拉低的情况,可能是后面不断下载尝试,造成JTAG相关口逻辑异常。。。加了一些滤波电容,并修改了下应用程序,调试了一天没再出现相同的问题,细节决定成败啊
点赞  2013-6-17 18:18

回复 9楼 wq5551291 的帖子

很多问题不好帮啊
点赞  2013-6-19 11:28

回复 10楼 huo_hu 的帖子

问题基本解决了,谢谢
点赞  2013-6-19 19:02
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复