MCU STM32F103一些需要注意的细节

注意JTAG引脚,这些脚默认都是不受控制的,要使用必须关闭JTAG,

比如我要用SPI3,一直不成功,发现SCK没有正确输出信号,原来是JTAG脚,
后来查手册才知道要用JTAG脚做别的功能必须先关闭JTAG。103固件库函数如下:
先使能AFIO时钟,然后调用GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
关了JTAG,SPI3就可以正常使用了。

固件导致 芯片锁死 无法再编程或者调试:

我用timer中断和ADC+DMA的时候,程序运行时OK的,但是只要烧录了这个固件,就没办法再烧程序了,必须将BOOT0设置为高电平,从系统存储器启动,才能再烧程序。
查了很多资料,其中有用的是;
STM32单片机一般的连接方式是主闪存存储器启动模式,即BOOT0为0,这样在用JTAG或SW写进程序的时候,
如果该程序工程中芯片选型不正确或着程序中复用了JTAG或SW复用引脚导致程序执行后出现启动配置错误或者调试引脚被占用而引起的芯片锁死或Jlnk连接不上的问题,
则把BOOT0和BOOT1跳成1和0,让内部程序不运行,然后再重新下载另外的程序,再改回BOOT设置,便可以恢复正常。
如果板子上JTAG和SW调试电路都有的话,在其中一种方式导致锁死的情况下可以用另一种方式擦除恢复,而不必调整BOOT设置。

也就是说,可能烧进取的固件只要上电运行就会到这无法使用JTAG/SW。
可能是禁止了,可是我没禁止SW阿。也没用SW的官脚做别的事阿。

阿莫论坛由一篇帖子跟我情况一样:
http://www.amobbs.com/thread-3459162-1-1.html

此程序点击DEBUG后,再点击运行, 然后KEIL会死机, 此后芯片已经不能再使用JTAG 改用SW也不行。把芯片断电或者复位也不行。
难道芯片就这么报废了? 遂另外拿来一新系统板,下载程序后情况雷同。
吓了我一身冷汗。已经连续弄坏两块板,心里发毛啊。难道程序还可以把芯片弄坏?
后面突然想到,把BOOT0和BOOT1跳成1和0,让内部程序不运行,然后再重新下另外的程序,再改回BOOT设置,结果便以恢复。
心是放下来了。 但真不理解芯片为什么会出这种状况。 按道理不管程序怎么跑飞,JTAG的优先级是很高的啊,但 J_LINK提示却“JTAG无法停止,请检查线缆。”
换用ST_LINK2,KEIL会直接死机,连ST_LINK也会死掉。
希望香主及各位大侠能否一试,帮帮我一起找出原因。 在此感谢!

有人说是DMA一直运行,导致无法进入JTAG/SW模式。看程序,猜测,前几天遇到过类似的问题,需要改boot模式,到RAM启动,然后改回来就好了。
香版说是因为启动了DMA操作。如果不用DMA就好了,如果程序用了DMA,调试岂不是很麻烦。。我也一直以为是这样,但是没有解决办法。

楼主说了没有用DMA,也没有使用JTAG引脚,后来楼主的回复给了我参考:

发现一个奇怪现象,假如把keil的优化开启-01 或者-02 -03 不会出问题,惟独优化不开时(配置为-00)出现上述情况。
我也试着把keil C/C++ 选项中的优化设置为 excute code + levle one 优化之后编译,把BOOT0设置为1,下载。
就不会出现再次烧不了程序的问题了。以后都可以直接下载,不用设置BOOT了。可能真的是固件库或者KEIL的bug.