2569|0

12

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32 SWD 只能下载一次的问题 [复制链接]

STM32 SWD 只能下载一次的问题

市面常见的STM32核心板有很多,以STM32F103c8t6核心板为例,实物如下图:

在核心板的使用过程中,常见的问题是只能通过swd方式下载1次程序,第2次便会报错,提示找不到处理器。

我们举个实际工程的例子:

使用STM32CubeMX软件,生成Blink闪灯工程,即在Cube中设置PC13为GPIO-output,

使用keil5打开工程,在main函数的while(1)中添加如下代码

濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌涘☉姗堟敾闁告瑥绻橀弻锝夊箣閿濆棭妫勯梺鍝勵儎缁舵岸寮诲☉妯锋婵鐗婇弫楣冩⒑閸涘﹦鎳冪紒缁橈耿瀵鏁愭径濠勵吅闂佹寧绻傚Λ顓炍涢崟顖涒拺闁告繂瀚烽崕搴g磼閼搁潧鍝虹€殿喛顕ч埥澶娢熼柨瀣垫綌婵犳鍠楅〃鍛存偋婵犲洤鏋佸Δ锝呭暞閳锋垿鏌涘☉姗堝姛闁瑰啿鍟扮槐鎺旂磼濡搫顫掑┑鐘亾濞撴埃鍋撴慨濠呮缁瑧鎹勯妸褜鍞堕梻浣告啞閼归箖顢栭崶鈺傤潟闁绘劕鎼粻锝夋煥閺冨倹娅曢柛姗€浜跺娲濞淬劌缍婂畷鏇㈡焼瀹ュ懐鍔﹀銈嗗坊閸嬫挻绻涚亸鏍ゅ亾閹颁礁娈ㄦ繝鐢靛У绾板秹寮查幓鎺濈唵閻犺櫣灏ㄩ崝鐔搞亜閺冣偓鐢繝骞冨Δ鍐╁枂闁告洦鍓涢ˇ銉モ攽閻愯尙婀撮柛濠冪箓閻g兘顢曢埛姘そ椤㈡棃宕ㄩ鍛伖闂傚倷绀侀幉锛勬崲閸屾壕鍋撳鍗炲幋鐎规洘娲熼獮鍥偋閸垹骞楁繝寰锋澘鈧挾娆㈤垾鏂ユ灁婵せ鍋撻柡宀€鍠栭悰顕€宕归鍙ユ偅闂備礁鐤囧Λ鍕囬崹顐e弿闁逞屽墴閺岋絽螣濞茶鏅遍梺鍛婅壘閹虫ê顫忕紒妯诲闁惧繒鎳撶粭锟犳⒑閸涘﹥鈷愭繛鑼枛閵嗕礁顫濇0婵囨櫍闂佺粯鍔忛弲婊堟倶娓氣偓濮婃椽妫冨☉姘暫濡炪倧缂氶崡鎶藉春濞戙垹绠i柣鎰暩椤旀洟姊洪悡搴涘仮妞ゃ倕鍊垮畷闈涒枎閹板灚顔旈梺缁樺姈閹苯鈻撳⿰鍫熺厸鐎光偓閳ь剟宕伴弽顓炵畺闁绘垼濮ら崑瀣煕椤愶絿绠栭柣蹇撻叄閺岋絾鎯旈姀鈺佹櫛闂佸摜濮甸悧鐘诲灳閿曞倹鍊婚柦妯侯槺閻f椽姊洪棃娑氱疄闁稿﹥鐗犻獮鍡涙倷閻戞ḿ鍘遍梺鎸庢椤曆冾嚕鐠恒劎纾奸弶鍫涘妿閸欌偓濠殿喖锕︾划顖滅箔閻旂厧鐒垫い鎺嗗亾瀹€锝堝劵椤︽挳鏌熼獮鍨伈妤犵偞甯¢獮姗€寮堕幋婵呯礋闂傚倷鐒﹂惇褰掑垂瑜版帒绠熼柨鐔哄Т绾惧綊鏌涢锝嗙闁绘挻娲橀妵鍕箛椤斿す銏ゆ煕閺冣偓缁捇寮诲澶嬬叆閻庯綆浜炴导宀勬⒑閸濆嫭婀扮紒瀣灴閸╃偤骞嬮敃鈧獮銏′繆閵堝拑姊楅柟顕嗙稻娣囧﹪鎮欓鍕ㄥ亾閺囩姵宕查柛顐犲劚绾惧潡鏌i姀鈶跺綊鎷戦悢鍝ョ闁瑰鍋熼幊鍕煕鎼达絽鏋涢柡灞诲妼閳规垿宕卞鍡橈紒婵犳鍣徊浠嬫偋閹捐绠栨俊銈傚亾闁崇粯鎹囧畷褰掝敊閻e奔閭┑锛勫亼閸娿倝宕i崘顔肩哗閺夊牄鍔庨埞宥呪攽閻樺弶鎼愮紒鐘垫嚀闇夐柨婵嗘噺閹叉悂鏌涘Ο缁樺€愭慨濠呮缁瑩骞愭惔銏″闂備焦妞块崣搴ㄥ窗濮樿埖鍤嶉弶鍫涘妿椤╃兘鎮楅敐搴′簮闁归绮换娑欐綇閸撗冨煂闂佺娅曢悷銊╁Φ閹版澘绠抽柟瀛樼箘瑜板淇婇悙顏勨偓鏍暜閹烘纾瑰┑鐘崇閸庢绻涢崱妯诲鞍闁绘挻鐟╁鍫曞醇閻斿嘲濮㈤梺浼欓檮缁捇寮婚埄鍐╁缂佸绨遍崑鎾诲锤濡も偓閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷
)">

编译,修改Debug选项为“Jlink”,设置中修改为SWD下载模式。

下载程序,可以成功,可再次下载时,却发现提示无法连接芯片,下载失败。

简单的解决办法是:

  1. 调整BOOT0/1,使用串口ISP全片擦出,再恢复BOOT,重新上电即可下载;
  2. 调整BOOT0/1,按Reset,使用SWD下载,还原BOOT0/1;
  3. 有些板子也可以通过持续按住reset键实现下载。

但上述并不是我们想要的。

具体是哪里出了问题呢?

真正的解决办法是:

在使用STM32CubeMX生成项目工程时,需要关注一项系统配置,设置好Debug模式,具体如下:

此时可以看到,右侧的芯片GPIO预览图,增加了SWDIO和SWCLK的指示。

此时再用keil打开新生成的工程,即可无限次下载和Debug了。

有兴趣继续往后看

设置了SYS的Debug模式为Serial Wire模式,到底产生了哪些不同呢?

实际对比,我们发现共有两处:

  1. main.c文件的
    • static void MX_GPIO_Init(void)
    函数中,增加了
    • __HAL_RCC_GPIOA_CLK_ENABLE();
    这里很好理解,因为SWD下载方式用的引脚是PA13和PA14。
  2. stm32f1xx_hal_msp.c文件的大概第77行左右,没有打开“Serial Wire”时,该行是
    • __HAL_AFIO_REMAP_SWJ_DISABLE();
    ,打开了“Serial Wire”是,该行是
    • __HAL_AFIO_REMAP_SWJ_NOJTAG();

综上所述,完全可以再不用重新配置CubeMX的情况下,通过修改上述两处代码,解决只能下载一次的问题。

 

 

此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

猜你喜欢
随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
电源解决方案和技术 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表