[{"data":1,"prerenderedAt":5656},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2026-04-17-stm32cubeide-vscode-huan-jing-da-jian\u002F0500-cubeide-vscode-jiao-cheng":3,"wiki-doc-items-2026-04-17-stm32cubeide-vscode-huan-jing-da-jian":5606,"wiki:author-members":5644},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":5593,"chapterOrder":5594,"date":5595,"description":25,"docKey":5596,"docRoot":5597,"docTitle":5598,"extension":5599,"isWikiDoc":1254,"isWikiIndex":5600,"meta":5601,"navigation":1254,"path":5602,"seo":5603,"stem":5604,"wikiDepth":94,"__hash__":5605},"wiki\u002Fwiki\u002F2026-04-17-STM32CubeIDE-VScode环境搭建\u002F0500-CubeIDE-VScode教程.md","插件使用教程",[7],"董佳辉",{"type":9,"value":10,"toc":5579},"minimark",[11,16,20,27,35,40,43,48,54,59,62,67,70,75,79,82,98,103,106,112,115,120,123,128,131,136,143,148,156,161,164,169,172,177,181,187,191,194,217,220,316,319,710,713,723,726,737,740,759,762,767,772,775,778,786,790,794,797,802,805,810,813,818,823,826,831,836,839,844,849,883,888,891,896,901,904,907,912,924,927,932,935,940,943,948,955,960,966,971,974,977,980,983,988,991,996,1000,1007,1023,1030,1035,1040,1058,1064,1078,1110,1113,1127,1140,1157,1171,1182,1214,1229,1270,1275,1289,1387,1403,1409,1414,1551,1556,1595,1605,1636,1655,1671,1674,1679,1682,1685,1689,1695,1698,1703,1710,1715,1718,1723,1727,1730,1735,1738,1747,1753,1761,1766,1771,1776,1782,1787,1792,1797,2345,2348,2351,2406,2414,2417,2422,2429,2439,2451,2454,2533,2536,2543,2577,2586,2597,2600,2606,2616,2622,2628,2631,2665,2670,2683,2688,2717,2724,2734,2774,2777,2782,3337,3342,3881,3884,3887,3890,3893,3898,3905,3928,3932,3936,3939,3941,3946,3952,3956,3959,3965,3968,3973,3976,3981,3984,3989,3997,4004,4010,4015,4022,4028,4556,4572,4578,4583,4593,4599,4602,4625,4641,4652,4657,4663,4672,4678,4681,4700,4705,4711,4714,4746,4765,4773,4778,4781,4787,4798,4804,4811,4817,4819,4834,4838,4841,4846,5174,5178,5181,5186,5189,5194,5197,5202,5208,5218,5223,5228,5233,5236,5241,5246,5249,5254,5258,5265,5270,5277,5283,5297,5318,5325,5361,5386,5441,5450,5486,5489,5507,5521,5555,5565,5575],[12,13,15],"h3",{"id":14},"cubemx安装fw","CubeMX安装FW",[17,18,19],"p",{},"点击Help",[17,21,22],{},[23,24],"img",{"alt":25,"src":26},"","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage16.webp",[17,28,29,30,34],{},"选",[31,32,33],"code",{},"Manage embedded software packages","，把STM32F1，F4，H7的第一个最新的固件勾上。",[17,36,37],{},[23,38],{"alt":25,"src":39},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage17.webp",[17,41,42],{},"点install",[17,44,45],{},[23,46],{"alt":25,"src":47},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage18.webp",[17,49,50,51],{},"可以不用登录账号选",[31,52,53],{},"do not ask me again",[17,55,56],{},[23,57],{"alt":25,"src":58},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1791521942252-f05003e7.webp",[17,60,61],{},"然后等下载和安装完",[17,63,64],{},[23,65],{"alt":25,"src":66},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage20.webp",[17,68,69],{},"下载好就行了。",[17,71,72],{},[23,73],{"alt":25,"src":74},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1791522194817-41247684.webp",[12,76,78],{"id":77},"vscode安装插件","VScode安装插件",[17,80,81],{},"然后打开VScode，在终端输入下面的命令",[83,84,88],"pre",{"className":85,"code":86,"language":87,"meta":25,"style":25},"language-bash shiki shiki-themes github-light github-dark","code\n","bash",[31,89,90],{"__ignoreMap":25},[91,92,95],"span",{"class":93,"line":94},"line",1,[91,96,86],{"class":97},"sScJk",[17,99,100],{},[23,101],{"alt":25,"src":102},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage26.webp",[17,104,105],{},"然后可以配置一个环境单独给CubeIDE插件使用，避免和默认环境冲突。",[17,107,108],{},[23,109],{"alt":110,"src":111},"alt text","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776420070033.webp",[17,113,114],{},"进行一些设置，自己按习惯来，不懂的暂时按我的来也行",[17,116,117],{},[23,118],{"alt":110,"src":119},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776420416232.webp",[17,121,122],{},"选中STM32",[17,124,125],{},[23,126],{"alt":110,"src":127},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776420490177.webp",[17,129,130],{},"然后安装一些插件",[17,132,133],{},[23,134],{"alt":25,"src":135},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage27.webp",[17,137,138,139,142],{},"找到下面这个",[31,140,141],{},"STM32CubeIDE for Visual Studio Code","插件安装",[17,144,145],{},[23,146],{"alt":110,"src":147},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776420601935.webp",[17,149,150,151,155],{},"右边弹这个提示要选择安装（要有良好的",[152,153,154],"em",{},"科学网络","）",[17,157,158],{},[23,159],{"alt":110,"src":160},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776420688705.webp",[17,162,163],{},"紧接着会进行一些环境的安装",[17,165,166],{},[23,167],{"alt":110,"src":168},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776420710467.webp",[17,170,171],{},"也可以再安装一些其他的插件，比如Codex等插件\n这些看你自己啦",[17,173,174],{},[23,175],{"alt":110,"src":176},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776420944068.webp",[12,178,180],{"id":179},"openocd使用事项","OpenOCD使用事项",[17,182,183],{},[184,185],"a",{"id":186},"openocd-parameters",[188,189,190],"h4",{"id":190},"选择debugger和mcu型号",[17,192,193],{},"OpenOCD 一般通过 .cfg 配置文件确定：使用什么调试器 + 连接什么 MCU",[83,195,197],{"className":85,"code":196,"language":87,"meta":25,"style":25},"openocd -f interface\u002F调试器.cfg -f target\u002F芯片系列.cfg\n",[31,198,199],{"__ignoreMap":25},[91,200,201,204,208,212,214],{"class":93,"line":94},[91,202,203],{"class":97},"openocd",[91,205,207],{"class":206},"sj4cs"," -f",[91,209,211],{"class":210},"sZZnC"," interface\u002F调试器.cfg",[91,213,207],{"class":206},[91,215,216],{"class":210}," target\u002F芯片系列.cfg\n",[17,218,219],{},"第一个参数：看你用什么调试器",[221,222,223,239],"table",{},[224,225,226],"thead",{},[227,228,229,233,236],"tr",{},[230,231,232],"th",{},"调试器",[230,234,235],{},"OpenOCD 配置",[230,237,238],{},"说明",[240,241,242,259,274,288,303],"tbody",{},[227,243,244,251,256],{},[245,246,247],"td",{},[248,249,250],"strong",{},"ST-Link V2 \u002F V2-1 \u002F V3",[245,252,253],{},[31,254,255],{},"\"interface\u002Fstlink.cfg\"",[245,257,258],{},"STM32 最常见",[227,260,261,266,271],{},[245,262,263],{},[248,264,265],{},"DAPLink",[245,267,268],{},[31,269,270],{},"\"interface\u002Fcmsis-dap.cfg\"",[245,272,273],{},"DAPLink 实现 CMSIS-DAP",[227,275,276,281,285],{},[245,277,278],{},[248,279,280],{},"CMSIS-DAP",[245,282,283],{},[31,284,270],{},[245,286,287],{},"很多第三方调试器使用",[227,289,290,295,300],{},[245,291,292],{},[248,293,294],{},"J-Link",[245,296,297],{},[31,298,299],{},"\"interface\u002Fjlink.cfg\"",[245,301,302],{},"SEGGER J-Link",[227,304,305,308,313],{},[245,306,307],{},"FTDI 类 JTAG\u002FSWD",[245,309,310],{},[31,311,312],{},"\"interface\u002Fftdi\u002Fxxx.cfg\"",[245,314,315],{},"根据具体硬件选择",[17,317,318],{},"第二个参数：看 STM32 哪个系列",[221,320,321,334],{},[224,322,323],{},[227,324,325,328,331],{},[230,326,327],{},"STM32 系列",[230,329,330],{},"常见型号示例",[230,332,333],{},"OpenOCD Target",[240,335,336,351,366,385,400,415,434,449,464,479,494,513,526,539,552,565,578,591,604,617,630,643,656,669,682,695],{},[227,337,338,343,346],{},[245,339,340],{},[248,341,342],{},"STM32C0",[245,344,345],{},"C011、C031、C071",[245,347,348],{},[31,349,350],{},"\"target\u002Fstm32c0x.cfg\"",[227,352,353,358,361],{},[245,354,355],{},[248,356,357],{},"STM32F0",[245,359,360],{},"F030、F072",[245,362,363],{},[31,364,365],{},"\"target\u002Fstm32f0x.cfg\"",[227,367,368,373,378],{},[245,369,370],{},[248,371,372],{},"STM32F1",[245,374,375],{},[248,376,377],{},"F103C8、F103RC",[245,379,380],{},[248,381,382],{},[31,383,384],{},"\"target\u002Fstm32f1x.cfg\"",[227,386,387,392,395],{},[245,388,389],{},[248,390,391],{},"STM32F2",[245,393,394],{},"F205、F207",[245,396,397],{},[31,398,399],{},"\"target\u002Fstm32f2x.cfg\"",[227,401,402,407,410],{},[245,403,404],{},[248,405,406],{},"STM32F3",[245,408,409],{},"F303、F334",[245,411,412],{},[31,413,414],{},"\"target\u002Fstm32f3x.cfg\"",[227,416,417,422,427],{},[245,418,419],{},[248,420,421],{},"STM32F4",[245,423,424],{},[248,425,426],{},"F405、F407、F429、F446",[245,428,429],{},[248,430,431],{},[31,432,433],{},"\"target\u002Fstm32f4x.cfg\"",[227,435,436,441,444],{},[245,437,438],{},[248,439,440],{},"STM32F7",[245,442,443],{},"F746、F767",[245,445,446],{},[31,447,448],{},"\"target\u002Fstm32f7x.cfg\"",[227,450,451,456,459],{},[245,452,453],{},[248,454,455],{},"STM32G0",[245,457,458],{},"G030、G070、G0B1",[245,460,461],{},[31,462,463],{},"\"target\u002Fstm32g0x.cfg\"",[227,465,466,471,474],{},[245,467,468],{},[248,469,470],{},"STM32G4",[245,472,473],{},"G431、G474",[245,475,476],{},[31,477,478],{},"\"target\u002Fstm32g4x.cfg\"",[227,480,481,486,489],{},[245,482,483],{},[248,484,485],{},"STM32H5",[245,487,488],{},"H503、H563、H573",[245,490,491],{},[31,492,493],{},"\"target\u002Fstm32h5x.cfg\"",[227,495,496,501,506],{},[245,497,498],{},[248,499,500],{},"STM32H7",[245,502,503],{},[248,504,505],{},"H743、H750、H745、H747",[245,507,508],{},[248,509,510],{},[31,511,512],{},"\"target\u002Fstm32h7x.cfg\"",[227,514,515,518,521],{},[245,516,517],{},"STM32H7RS",[245,519,520],{},"H7R3、H7S3",[245,522,523],{},[31,524,525],{},"\"target\u002Fstm32h7rsx.cfg\"",[227,527,528,531,534],{},[245,529,530],{},"STM32L0",[245,532,533],{},"L031、L073",[245,535,536],{},[31,537,538],{},"\"target\u002Fstm32l0.cfg\"",[227,540,541,544,547],{},[245,542,543],{},"STM32L1",[245,545,546],{},"L151、L152",[245,548,549],{},[31,550,551],{},"\"target\u002Fstm32l1.cfg\"",[227,553,554,557,560],{},[245,555,556],{},"STM32L4 \u002F L4+",[245,558,559],{},"L432、L476、L496、L4R5",[245,561,562],{},[31,563,564],{},"\"target\u002Fstm32l4x.cfg\"",[227,566,567,570,573],{},[245,568,569],{},"STM32L5",[245,571,572],{},"L552、L562",[245,574,575],{},[31,576,577],{},"\"target\u002Fstm32l5x.cfg\"",[227,579,580,583,586],{},[245,581,582],{},"STM32N6",[245,584,585],{},"N657 等",[245,587,588],{},[31,589,590],{},"\"target\u002Fstm32n6x.cfg\"",[227,592,593,596,599],{},[245,594,595],{},"STM32U0",[245,597,598],{},"U031、U073",[245,600,601],{},[31,602,603],{},"\"target\u002Fstm32u0x.cfg\"",[227,605,606,609,612],{},[245,607,608],{},"STM32U3",[245,610,611],{},"U385 等",[245,613,614],{},[31,615,616],{},"\"target\u002Fstm32u3x.cfg\"",[227,618,619,622,625],{},[245,620,621],{},"STM32U5",[245,623,624],{},"U575、U585、U5A5",[245,626,627],{},[31,628,629],{},"\"target\u002Fstm32u5x.cfg\"",[227,631,632,635,638],{},[245,633,634],{},"STM32WB",[245,636,637],{},"WB55 等",[245,639,640],{},[31,641,642],{},"\"target\u002Fstm32wbx.cfg\"",[227,644,645,648,651],{},[245,646,647],{},"STM32WBA2",[245,649,650],{},"WBA2xx",[245,652,653],{},[31,654,655],{},"\"target\u002Fstm32wba2x.cfg\"",[227,657,658,661,664],{},[245,659,660],{},"STM32WBA5",[245,662,663],{},"WBA5xx",[245,665,666],{},[31,667,668],{},"\"target\u002Fstm32wba5x.cfg\"",[227,670,671,674,677],{},[245,672,673],{},"STM32WBA6",[245,675,676],{},"WBA6xx",[245,678,679],{},[31,680,681],{},"\"target\u002Fstm32wba6x.cfg\"",[227,683,684,687,690],{},[245,685,686],{},"STM32WL",[245,688,689],{},"WL55、WLE5",[245,691,692],{},[31,693,694],{},"\"target\u002Fstm32wlx.cfg\"",[227,696,697,702,705],{},[245,698,699],{},[248,700,701],{},"STM32C5",[245,703,704],{},"C53、C54、C55、C56、C59、C5A",[245,706,707],{},[248,708,709],{},"见下方说明",[17,711,712],{},"STM32C5 要特别注意：",[17,714,715,716,719,720,722],{},"现在不要把 C5 写死成",[31,717,718],{},"target\u002Fstm32c5x.cfg","，\n原因是 STM32C5 的 OpenOCD 支持非常新。2026 年 7 月才有 stm32c5x.cfg 支持补丁提交到 OpenOCD Gerrit；补丁里的文件名确实就是",[31,721,718],{},"。\n但是现在还没完全发行到OpenOCD，需要等一段时间。",[188,724,725],{"id":725},"测试设备连接",[17,727,728,729,732,733,736],{},"我们用的",[31,730,731],{},"stm32f103c8","和",[31,734,735],{},"st-link","：",[17,738,739],{},"所以用",[83,741,743],{"className":85,"code":742,"language":87,"meta":25,"style":25},"openocd -f interface\u002Fstlink.cfg -f target\u002Fstm32f1x.cfg\n",[31,744,745],{"__ignoreMap":25},[91,746,747,749,751,754,756],{"class":93,"line":94},[91,748,203],{"class":97},[91,750,207],{"class":206},[91,752,753],{"class":210}," interface\u002Fstlink.cfg",[91,755,207],{"class":206},[91,757,758],{"class":210}," target\u002Fstm32f1x.cfg\n",[17,760,761],{},"可以插上之后测试一波：",[17,763,764],{},[23,765],{"alt":25,"src":766},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790822431371-9446f7ae.webp",[17,768,769],{},[23,770],{"alt":25,"src":771},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1791514972175-9fe9ca6a.webp",[17,773,774],{},"照上图所示，已经连接成功了。",[17,776,777],{},"几个关键日志分别说明：",[83,779,784],{"className":780,"code":782,"language":783,"meta":25},[781],"language-text","Info : STLINK V2J48S7 ...\n→ OpenOCD 正常识别 ST-Link。\n\nInfo : Target voltage: 3.150483\n→ 目标板供电正常，约 3.15 V。\n\nInfo : SWD DPIDR 0x1ba01477\n→ SWD 通信已经建立。\n\nInfo : [stm32f1x.cpu] Cortex-M3 r1p1 processor detected\n→ 已经真正识别并连接 MCU 核心。\n\nInfo : target has 6 breakpoints, 4 watchpoints\n→ Cortex-M3 的硬件断点\u002F数据观察点正常。\n\nInfo : Examination succeed\n→ Target 初始化成功。\n\n最后：\nInfo : [stm32f1x.cpu] starting gdb server on 3333\nInfo : Listening on port 3333 for gdb connections\n→ OpenOCD 的 GDB Server 已经正式启动，可以给 VS Code \u002F STM32Cube 调试器连接了。\n","text",[31,785,782],{"__ignoreMap":25},[787,788,789],"h2",{"id":789},"工程创建与测试",[12,791,793],{"id":792},"使用cubemx创建工程","使用CubeMX创建工程",[17,795,796],{},"点击进入单片机挑选的按钮",[17,798,799],{},[23,800],{"alt":25,"src":801},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage60.webp",[17,803,804],{},"搜索对应芯片，并双击对应芯片选项。",[17,806,807],{},[23,808],{"alt":25,"src":809},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage61.webp",[17,811,812],{},"进行一些配置，以下都是很基础的东西，你在看这个视频前肯定都会了",[17,814,815],{},[23,816],{"alt":25,"src":817},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage62.webp",[17,819,820],{},[23,821],{"alt":25,"src":822},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage63.webp",[17,824,825],{},"随便开一个IO用来测试，比如LED的GPIO",[17,827,828],{},[23,829],{"alt":25,"src":830},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage64.webp",[17,832,833],{},[23,834],{"alt":25,"src":835},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage65.webp",[17,837,838],{},"FreeRTOS也要配置一下。",[17,840,841],{},[23,842],{"alt":25,"src":843},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage66.webp",[17,845,846],{},[23,847],{"alt":25,"src":848},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage67.webp",[17,850,851,852,855,856,859,860,863,864,867,868,871,872,875,876,882],{},"本例在用户目录中实现 ",[31,853,854],{},"StartDefaultTask()"," 来替换默认任务函数，需要CubeMX生成的同名函数为弱定义。\n可以在FreeRTOS的 ",[31,857,858],{},"Tasks and Queues"," 中，将 ",[31,861,862],{},"defaultTask"," 的 ",[31,865,866],{},"Code Generation Option"," 设为 ",[31,869,870],{},"As weak","，重新生成后确认该函数带有 ",[31,873,874],{},"__weak","，避免两个普通定义产生冲突。",[184,877,881],{"href":878,"rel":879},"https:\u002F\u002Fcommunity.st.com\u002Fstm32cubemx-mcus-29\u002Fstm32cubeide-mx-with-freertos-4966",[880],"nofollow","参考ST社区说明","。",[17,884,885],{},[23,886],{"alt":25,"src":887},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1791523019424-a5e98758.webp",[17,889,890],{},"这些文件夹也要配置好，最后Toolchain选择CMake,编译器选择GCC(6.14.1及之前没有选择编译器这个选项很正常)",[17,892,893],{},[23,894],{"alt":25,"src":895},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage68.webp",[17,897,898],{},[23,899],{"alt":25,"src":900},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage69.webp",[12,902,903],{"id":903},"对工程进行配置与编译",[17,905,906],{},"在工程文件夹打开终端（或者直接在此处打开VScode也行）",[17,908,909],{},[23,910],{"alt":110,"src":911},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776421629435.webp",[83,913,915],{"className":85,"code":914,"language":87,"meta":25,"style":25},"code .\n",[31,916,917],{"__ignoreMap":25},[91,918,919,921],{"class":93,"line":94},[91,920,31],{"class":97},[91,922,923],{"class":210}," .\n",[17,925,926],{},"打开VScode后记得切到`STM32·的配置",[17,928,929],{},[23,930],{"alt":110,"src":931},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776421689049.webp",[17,933,934],{},"选择这里的Yes进行配置CMake预设",[17,936,937],{},[23,938],{"alt":110,"src":939},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776421794873.webp",[17,941,942],{},"一般选Debug即可",[17,944,945],{},[23,946],{"alt":110,"src":947},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776421850499.webp",[17,949,950,951,954],{},"可能谈一个很长的对话框，是这个",[31,952,953],{},"STM32Cube Core","提示的，你直接点yes开始下载（这是自动部署各种环境的）",[17,956,957],{},[23,958],{"alt":25,"src":959},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1791523340028-dcacecb6.webp",[17,961,962,963,965],{},"反正右下角是",[31,964,953],{},"提示让你安装的，你安就完了，每个版本提示可能不一样，总之安装就完了。",[17,967,968],{},[23,969],{"alt":25,"src":970},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1791523505964-52b2aa1f.webp",[17,972,973],{},"等上面的环境部署完毕后，",[17,975,976],{},"找个C语言的代码文件打开，然后右下角会提示安装一个C\u002FC++插件，这个可以安装也可以不安装，他也带代码提示，但是他的代码提示对比自带的clangd简直是弱爆了，如果你是新手，你不会设置代码提示，建议按我下面的操作来，直接别装这个C\u002FC++插件。",[17,978,979],{},"默认用的是clangd代码提示",[17,981,982],{},"你可以测试一下代码提示，是不是很强。",[17,984,985],{},[23,986],{"alt":110,"src":987},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776422393367.webp",[17,989,990],{},"编译的话，图中的这俩build都可以",[17,992,993],{},[23,994],{"alt":110,"src":995},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776423543189.webp",[12,997,999],{"id":998},"移植作者tungchiahui的标准cc工程模板","移植作者tungchiahui的标准C\u002FC++工程模板",[17,1001,1002,1003],{},"用git clone命令克隆仓库:",[184,1004,1005],{"href":1005,"rel":1006},"https:\u002F\u002Fgithub.com\u002Ftungchiahui\u002FSTM32HAL_CMake_CPP_Template",[880],[83,1008,1010],{"className":85,"code":1009,"language":87,"meta":25,"style":25},"git clone https:\u002F\u002Fgithub.com\u002Ftungchiahui\u002FSTM32HAL_CMake_CPP_Template.git\n",[31,1011,1012],{"__ignoreMap":25},[91,1013,1014,1017,1020],{"class":93,"line":94},[91,1015,1016],{"class":97},"git",[91,1018,1019],{"class":210}," clone",[91,1021,1022],{"class":210}," https:\u002F\u002Fgithub.com\u002Ftungchiahui\u002FSTM32HAL_CMake_CPP_Template.git\n",[17,1024,1025,1026,1029],{},"把仓库里的除了",[31,1027,1028],{},".git","以外的东西都复制到我们的STM32工程根目录。",[17,1031,1032],{},[23,1033],{"alt":110,"src":1034},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776427498924.webp",[17,1036,1037],{},[23,1038],{"alt":25,"src":1039},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1791523805618-93a96d4e.webp",[17,1041,1042,1043,1046,1047,1050,1051,1046,1054,1057],{},"模板中的用户代码按功能模块组织，每个模块的 ",[31,1044,1045],{},".cpp","、",[31,1048,1049],{},".hpp","（或 ",[31,1052,1053],{},".c",[31,1055,1056],{},".h","）放在同一个文件夹里。复制后的目录结构如下：",[83,1059,1062],{"className":1060,"code":1061,"language":783,"meta":25},[781],"STM32工程根目录\u002F\n├── applications\u002F\n│   └── main\u002F\n│       ├── cpp_interface.cpp\n│       └── cpp_interface.h\n├── bsp\u002F\n│   └── boards\u002F\n│       ├── common\u002F\n│       │   └── struct_typedef.h\n│       └── delay\u002F\n│           ├── bsp_delay.cpp\n│           └── bsp_delay.hpp\n└── cmake\u002F\n    ├── stm32cubemx\u002F            # CubeMX生成的配置\n    └── user\u002F\n        └── CMakeLists.txt     # 用户代码的配置\n",[31,1063,1061],{"__ignoreMap":25},[17,1065,1066,1069,1070,1073,1074,1077],{},[31,1067,1068],{},"cmake\u002Fuser\u002FCMakeLists.txt"," 已经把 ",[31,1071,1072],{},"applications"," 和 ",[31,1075,1076],{},"bsp\u002Fboards"," 加入头文件搜索路径，所以引用用户头文件时统一使用“模块目录\u002F头文件名”的写法：",[83,1079,1083],{"className":1080,"code":1081,"language":1082,"meta":25,"style":25},"language-cpp shiki shiki-themes github-light github-dark","#include \"main\u002Fcpp_interface.h\"\n#include \"delay\u002Fbsp_delay.hpp\"\n#include \"common\u002Fstruct_typedef.h\"\n","cpp",[31,1084,1085,1094,1102],{"__ignoreMap":25},[91,1086,1087,1091],{"class":93,"line":94},[91,1088,1090],{"class":1089},"szBVR","#include",[91,1092,1093],{"class":210}," \"main\u002Fcpp_interface.h\"\n",[91,1095,1097,1099],{"class":93,"line":1096},2,[91,1098,1090],{"class":1089},[91,1100,1101],{"class":210}," \"delay\u002Fbsp_delay.hpp\"\n",[91,1103,1105,1107],{"class":93,"line":1104},3,[91,1106,1090],{"class":1089},[91,1108,1109],{"class":210}," \"common\u002Fstruct_typedef.h\"\n",[17,1111,1112],{},"在这两个目录下新增模块时，沿用这个写法即可，不需要为每个模块单独添加头文件搜索路径。",[17,1114,1115,1116,1119,1120,1073,1123,1126],{},"打开CubeMX生成的 ",[31,1117,1118],{},"Core\u002FSrc\u002Fmain.c","，在 ",[31,1121,1122],{},"USER CODE BEGIN Includes",[31,1124,1125],{},"USER CODE END Includes"," 之间加上：",[83,1128,1132],{"className":1129,"code":1130,"language":1131,"meta":25,"style":25},"language-c shiki shiki-themes github-light github-dark","#include \"main\u002Fcpp_interface.h\"\n","c",[31,1133,1134],{"__ignoreMap":25},[91,1135,1136,1138],{"class":93,"line":94},[91,1137,1090],{"class":1089},[91,1139,1093],{"class":210},[17,1141,1142,1143,863,1146,1073,1149,1152,1153,1156],{},"然后在 ",[31,1144,1145],{},"main()",[31,1147,1148],{},"USER CODE BEGIN 2",[31,1150,1151],{},"USER CODE END 2"," 之间调用 ",[31,1154,1155],{},"cpp_main()","，此时系统时钟和外设已经初始化完成：",[83,1158,1160],{"className":1129,"code":1159,"language":1131,"meta":25,"style":25},"cpp_main();\n",[31,1161,1162],{"__ignoreMap":25},[91,1163,1164,1167],{"class":93,"line":94},[91,1165,1166],{"class":97},"cpp_main",[91,1168,1170],{"class":1169},"sVt8B","();\n",[17,1172,1173,1174,1177,1178,1181],{},"注意 ",[31,1175,1176],{},"applications\u002Fmain\u002Fcpp_interface.h"," 中的 ",[31,1179,1180],{},"isRTOS"," 设置：",[1183,1184,1185,1196,1206],"ul",{},[1186,1187,1188,1189,1192,1193,1195],"li",{},"裸机使用默认值 ",[31,1190,1191],{},"0","，业务代码可以写在 ",[31,1194,1155],{}," 的无限循环中；",[1186,1197,1198,1199,1202,1203,1205],{},"使用FreeRTOS时要改成 ",[31,1200,1201],{},"1","，使 ",[31,1204,1155],{}," 执行完初始化后返回，程序才能继续创建任务并启动调度器。",[1186,1207,1208,1209,1211,1212,882],{},"下面沿用前面配置了FreeRTOS的工程，因此先将 ",[31,1210,1180],{}," 改为 ",[31,1213,1201],{},[17,1215,1216,1217,1220,1221,1224,1225,1228],{},"然后打开工程根目录的 ",[31,1218,1219],{},"CMakeLists.txt","，在CubeMX原有的 ",[31,1222,1223],{},"add_subdirectory(cmake\u002Fstm32cubemx)"," 后面添加 ",[31,1226,1227],{},"add_subdirectory(cmake\u002Fuser)","，引用用户代码的配置：",[83,1230,1234],{"className":1231,"code":1232,"language":1233,"meta":25,"style":25},"language-cmake shiki shiki-themes github-light github-dark","# Add STM32CubeMX generated sources\nadd_subdirectory(cmake\u002Fstm32cubemx)\n\n# Add USER generated sources\nadd_subdirectory(cmake\u002Fuser)\n","cmake",[31,1235,1236,1242,1250,1256,1262],{"__ignoreMap":25},[91,1237,1238],{"class":93,"line":94},[91,1239,1241],{"class":1240},"sJ8bj","# Add STM32CubeMX generated sources\n",[91,1243,1244,1247],{"class":93,"line":1096},[91,1245,1246],{"class":1089},"add_subdirectory",[91,1248,1249],{"class":1169},"(cmake\u002Fstm32cubemx)\n",[91,1251,1252],{"class":93,"line":1104},[91,1253,1255],{"emptyLinePlaceholder":1254},true,"\n",[91,1257,1259],{"class":93,"line":1258},4,[91,1260,1261],{"class":1240},"# Add USER generated sources\n",[91,1263,1265,1267],{"class":93,"line":1264},5,[91,1266,1246],{"class":1089},[91,1268,1269],{"class":1169},"(cmake\u002Fuser)\n",[17,1271,1272],{},[23,1273],{"alt":25,"src":1274},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2025\u002F07\u002F18\u002Fimage93.webp",[17,1276,1277,1278,1280,1281,1284,1285,1288],{},"在同一个顶层 ",[31,1279,1219],{}," 中，保留原有的C语言标准设置，并在 ",[31,1282,1283],{},"project()"," 之前增加C++标准设置（模板的 ",[31,1286,1287],{},"README-zh_CN.md"," 中也有说明）：",[83,1290,1292],{"className":1231,"code":1291,"language":1233,"meta":25,"style":25},"# Setup compiler settings\nset(CMAKE_C_STANDARD 11 CACHE STRING \"C language standard\")\nset(CMAKE_C_STANDARD_REQUIRED ON)\nset(CMAKE_C_EXTENSIONS ON)\n\nset(CMAKE_CXX_STANDARD 20 CACHE STRING \"C++ language standard\")\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\nset(CMAKE_CXX_EXTENSIONS ON)\n",[31,1293,1294,1299,1319,1331,1342,1346,1363,1375],{"__ignoreMap":25},[91,1295,1296],{"class":93,"line":94},[91,1297,1298],{"class":1240},"# Setup compiler settings\n",[91,1300,1301,1304,1307,1310,1313,1316],{"class":93,"line":1096},[91,1302,1303],{"class":1089},"set",[91,1305,1306],{"class":1169},"(CMAKE_C_STANDARD 11 ",[91,1308,1309],{"class":1089},"CACHE",[91,1311,1312],{"class":1089}," STRING",[91,1314,1315],{"class":210}," \"C language standard\"",[91,1317,1318],{"class":1169},")\n",[91,1320,1321,1323,1326,1329],{"class":93,"line":1104},[91,1322,1303],{"class":1089},[91,1324,1325],{"class":1169},"(CMAKE_C_STANDARD_REQUIRED ",[91,1327,1328],{"class":1089},"ON",[91,1330,1318],{"class":1169},[91,1332,1333,1335,1338,1340],{"class":93,"line":1258},[91,1334,1303],{"class":1089},[91,1336,1337],{"class":1169},"(CMAKE_C_EXTENSIONS ",[91,1339,1328],{"class":1089},[91,1341,1318],{"class":1169},[91,1343,1344],{"class":93,"line":1264},[91,1345,1255],{"emptyLinePlaceholder":1254},[91,1347,1349,1351,1354,1356,1358,1361],{"class":93,"line":1348},6,[91,1350,1303],{"class":1089},[91,1352,1353],{"class":1169},"(CMAKE_CXX_STANDARD 20 ",[91,1355,1309],{"class":1089},[91,1357,1312],{"class":1089},[91,1359,1360],{"class":210}," \"C++ language standard\"",[91,1362,1318],{"class":1169},[91,1364,1366,1368,1371,1373],{"class":93,"line":1365},7,[91,1367,1303],{"class":1089},[91,1369,1370],{"class":1169},"(CMAKE_CXX_STANDARD_REQUIRED ",[91,1372,1328],{"class":1089},[91,1374,1318],{"class":1169},[91,1376,1378,1380,1383,1385],{"class":93,"line":1377},8,[91,1379,1303],{"class":1089},[91,1381,1382],{"class":1169},"(CMAKE_CXX_EXTENSIONS ",[91,1384,1328],{"class":1089},[91,1386,1318],{"class":1169},[17,1388,1142,1389,1391,1392,1395,1396,1073,1399,1402],{},[31,1390,1072],{}," 下新建 ",[31,1393,1394],{},"led_task"," 文件夹，把 ",[31,1397,1398],{},"led_task.cpp",[31,1400,1401],{},"led_task.h"," 都放进去：",[83,1404,1407],{"className":1405,"code":1406,"language":783,"meta":25},[781],"applications\u002F\n├── main\u002F\n│   ├── cpp_interface.cpp\n│   └── cpp_interface.h\n└── led_task\u002F\n    ├── led_task.cpp\n    └── led_task.h\n",[31,1408,1406],{"__ignoreMap":25},[17,1410,1411,736],{},[31,1412,1413],{},"applications\u002Fled_task\u002Fled_task.cpp",[83,1415,1417],{"className":1080,"code":1416,"language":1082,"meta":25,"style":25},"#include \"led_task\u002Fled_task.h\"\n#include \"cmsis_os.h\"\n#include \"main.h\"\n\nint32_t t;\n\nextern \"C\"\nvoid StartDefaultTask(void *argument)\n{\n  for(;;)\n  {\n    HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);\n    ++t;\n    osDelay(500);\n  }\n}\n",[31,1418,1419,1426,1433,1440,1444,1452,1456,1464,1486,1492,1501,1507,1516,1525,1539,1545],{"__ignoreMap":25},[91,1420,1421,1423],{"class":93,"line":94},[91,1422,1090],{"class":1089},[91,1424,1425],{"class":210}," \"led_task\u002Fled_task.h\"\n",[91,1427,1428,1430],{"class":93,"line":1096},[91,1429,1090],{"class":1089},[91,1431,1432],{"class":210}," \"cmsis_os.h\"\n",[91,1434,1435,1437],{"class":93,"line":1104},[91,1436,1090],{"class":1089},[91,1438,1439],{"class":210}," \"main.h\"\n",[91,1441,1442],{"class":93,"line":1258},[91,1443,1255],{"emptyLinePlaceholder":1254},[91,1445,1446,1449],{"class":93,"line":1264},[91,1447,1448],{"class":1089},"int32_t",[91,1450,1451],{"class":1169}," t;\n",[91,1453,1454],{"class":93,"line":1348},[91,1455,1255],{"emptyLinePlaceholder":1254},[91,1457,1458,1461],{"class":93,"line":1365},[91,1459,1460],{"class":1089},"extern",[91,1462,1463],{"class":210}," \"C\"\n",[91,1465,1466,1469,1472,1475,1477,1480,1484],{"class":93,"line":1377},[91,1467,1468],{"class":1089},"void",[91,1470,1471],{"class":97}," StartDefaultTask",[91,1473,1474],{"class":1169},"(",[91,1476,1468],{"class":1089},[91,1478,1479],{"class":1089}," *",[91,1481,1483],{"class":1482},"s4XuR","argument",[91,1485,1318],{"class":1169},[91,1487,1489],{"class":93,"line":1488},9,[91,1490,1491],{"class":1169},"{\n",[91,1493,1495,1498],{"class":93,"line":1494},10,[91,1496,1497],{"class":1089},"  for",[91,1499,1500],{"class":1169},"(;;)\n",[91,1502,1504],{"class":93,"line":1503},11,[91,1505,1506],{"class":1169},"  {\n",[91,1508,1510,1513],{"class":93,"line":1509},12,[91,1511,1512],{"class":97},"    HAL_GPIO_TogglePin",[91,1514,1515],{"class":1169},"(GPIOC,GPIO_PIN_13);\n",[91,1517,1519,1522],{"class":93,"line":1518},13,[91,1520,1521],{"class":1089},"    ++",[91,1523,1524],{"class":1169},"t;\n",[91,1526,1528,1531,1533,1536],{"class":93,"line":1527},14,[91,1529,1530],{"class":97},"    osDelay",[91,1532,1474],{"class":1169},[91,1534,1535],{"class":206},"500",[91,1537,1538],{"class":1169},");\n",[91,1540,1542],{"class":93,"line":1541},15,[91,1543,1544],{"class":1169},"  }\n",[91,1546,1548],{"class":93,"line":1547},16,[91,1549,1550],{"class":1169},"}\n",[17,1552,1553,736],{},[31,1554,1555],{},"applications\u002Fled_task\u002Fled_task.h",[83,1557,1559],{"className":1080,"code":1558,"language":1082,"meta":25,"style":25},"#ifndef LED_TASK_H\n#define LED_TASK_H\n\n#include \"main\u002Fcpp_interface.h\"\n\n#endif\n",[31,1560,1561,1569,1576,1580,1586,1590],{"__ignoreMap":25},[91,1562,1563,1566],{"class":93,"line":94},[91,1564,1565],{"class":1089},"#ifndef",[91,1567,1568],{"class":97}," LED_TASK_H\n",[91,1570,1571,1574],{"class":93,"line":1096},[91,1572,1573],{"class":1089},"#define",[91,1575,1568],{"class":97},[91,1577,1578],{"class":93,"line":1104},[91,1579,1255],{"emptyLinePlaceholder":1254},[91,1581,1582,1584],{"class":93,"line":1258},[91,1583,1090],{"class":1089},[91,1585,1093],{"class":210},[91,1587,1588],{"class":93,"line":1264},[91,1589,1255],{"emptyLinePlaceholder":1254},[91,1591,1592],{"class":93,"line":1348},[91,1593,1594],{"class":1089},"#endif\n",[17,1596,1597,1598,1600,1601,1604],{},"然后打开 ",[31,1599,1068],{},"，把刚才新建的源文件添加到 ",[31,1602,1603],{},"Applications_Src"," 列表中：",[83,1606,1608],{"className":1231,"code":1607,"language":1233,"meta":25,"style":25},"set(Applications_Src\n    ${CMAKE_CURRENT_SOURCE_DIR}\u002F..\u002F..\u002Fapplications\u002Fmain\u002Fcpp_interface.cpp\n    ${CMAKE_CURRENT_SOURCE_DIR}\u002F..\u002F..\u002Fapplications\u002Fled_task\u002Fled_task.cpp\n)\n",[31,1609,1610,1617,1625,1632],{"__ignoreMap":25},[91,1611,1612,1614],{"class":93,"line":94},[91,1613,1303],{"class":1089},[91,1615,1616],{"class":1169},"(Applications_Src\n",[91,1618,1619,1622],{"class":93,"line":1096},[91,1620,1621],{"class":1089},"    ${CMAKE_CURRENT_SOURCE_DIR}",[91,1623,1624],{"class":1169},"\u002F..\u002F..\u002Fapplications\u002Fmain\u002Fcpp_interface.cpp\n",[91,1626,1627,1629],{"class":93,"line":1104},[91,1628,1621],{"class":1089},[91,1630,1631],{"class":1169},"\u002F..\u002F..\u002Fapplications\u002Fled_task\u002Fled_task.cpp\n",[91,1633,1634],{"class":93,"line":1258},[91,1635,1318],{"class":1169},[17,1637,1638,1639,1046,1641,1643,1644,1046,1646,1648,1649,1651,1652,1654],{},"只需要登记新增的 ",[31,1640,1053],{},[31,1642,1045],{}," 文件，",[31,1645,1056],{},[31,1647,1049],{}," 不需要列为编译源文件。因为 ",[31,1650,1072],{}," 已经是头文件搜索根目录，",[31,1653,1394],{}," 模块也不需要额外添加搜索路径。",[17,1656,1657,1658,1661,1662,1664,1665,1667,1668,1670],{},"详细介绍（可以不看）：",[31,1659,1660],{},"cmake\u002Fstm32cubemx\u002FCMakeLists.txt"," 由CubeMX管理，重新生成代码时可能更新，因此用户代码的源文件列表和头文件搜索路径统一维护在 ",[31,1663,1068],{}," 中，顶层 ",[31,1666,1219],{}," 通过 ",[31,1669,1227],{}," 加载它。这个用户配置文件已经包含在模板里，前面复制时就已经带过来了。",[17,1672,1673],{},"大功告成，编译一次试试。可以看到下图，那些新加的文件都编译上了。",[17,1675,1676],{},[23,1677],{"alt":110,"src":1678},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776429160105.webp",[12,1680,1681],{"id":1681},"下载程序到板子",[17,1683,1684],{},"下载之前首先要先配置：",[188,1686,1688],{"id":1687},"配置原生gdb调试器仅限st-link和j-link","配置原生gdb调试器（仅限St-link和J-link）",[1690,1691,1692],"blockquote",{},[17,1693,1694],{},"如果你不是stlink和jlink,接着往下看",[17,1696,1697],{},"按下图的来点击，你看看你是什么debugger,你就选哪个。",[17,1699,1700],{},[23,1701],{"alt":25,"src":1702},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790606954240-b80cbe26.webp",[17,1704,1705,1706,882],{},"如果这里看不到对应设备，遇到权限问题，请查看",[184,1707,1709],{"href":1708},"#usb-permissions","Linux 下 USB 权限问题",[1711,1712,1714],"h5",{"id":1713},"原生st-link","原生ST-Link",[17,1716,1717],{},"可以更新下STlink的驱动：",[17,1719,1720],{},[23,1721],{"alt":25,"src":1722},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790607581587-4d65b468.webp",[1711,1724,1726],{"id":1725},"原生jlink","原生JLink",[17,1728,1729],{},"先安装jlink-gdbserver的bundle，如下图所示：",[17,1731,1732],{},[23,1733],{"alt":110,"src":1734},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776431910132.webp",[188,1736,1737],{"id":1737},"使用openocd服务驱动原生gdb调试器",[17,1739,1740,1741,732,1744,1746],{},"当你要使用除了",[31,1742,1743],{},"ST-Link",[31,1745,294],{},"以外的调试器时：",[17,1748,1749,1750,736],{},"先点调试，让他生成",[31,1751,1752],{},"launch.json",[17,1754,1755,29,1758,736],{},[31,1756,1757],{},"openOCD接管",[31,1759,1760],{},"STM32Cube: STM32 Launch GDB",[17,1762,1763],{},[23,1764],{"alt":25,"src":1765},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790823172983-802516ef.webp",[17,1767,1768,1769,736],{},"然后选",[31,1770,203],{},[17,1772,1773],{},[23,1774],{"alt":25,"src":1775},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790823717750-d08ba3d3.webp",[17,1777,1778,1779],{},"过一会儿，肯定会调试失败，然后提示你",[31,1780,1781],{},"open launch.json",[17,1783,1784],{},[23,1785],{"alt":25,"src":1786},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790823682049-c5522e4c.webp",[17,1788,1789,1790,736],{},"然后再点",[31,1791,1760],{},[17,1793,1794,1796],{},[31,1795,1752],{},"内容如下：",[83,1798,1802],{"className":1799,"code":1800,"language":1801,"meta":25,"style":25},"language-json shiki shiki-themes github-light github-dark","{\n    \u002F\u002F Use IntelliSense to learn about possible attributes.\n    \u002F\u002F Hover to view descriptions of existing attributes.\n    \u002F\u002F For more information, visit: https:\u002F\u002Fgo.microsoft.com\u002Ffwlink\u002F?linkid=830387\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"type\": \"stgdbtarget\",\n            \"request\": \"launch\",\n            \"name\": \"STM32Cube: Launch Generic GDB Server\",\n            \"origin\": \"snippet\",\n            \"cwd\": \"${workspaceFolder}\",\n            \"preBuild\": \"${command:st-stm32-ide-debug-launch.build}\",\n            \"program\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n            \"gdb\": \"${command:st-stm32-ide-debug-launch.get-gdb-executable}\",\n            \"deviceName\": \"${command:st-stm32-ide-debug-launch.get-device-name}\",\n            \"deviceCore\": \"${command:st-stm32-ide-debug-launch.get-core-name}\",\n            \"deviceTrustzone\": \"${command:st-stm32-ide-debug-launch.get-trustzone-status}\",\n            \"serverExe\": \"\",\n            \"serverParameters\": [],\n            \"serverHost\": \"localhost\",\n            \"serverPort\": \"\",\n            \"serverCwd\": \"\",\n            \"runEntry\": \"main\",\n            \"imagesAndSymbols\": [\n                {\n                    \"imageFileName\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n                    \"imageOffset\": \"\",\n                    \"symbolFileName\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n                    \"symbolOffset\": \"\"\n                }\n            ]\n        },\n        {\n            \"type\": \"stgdbtarget\",\n            \"request\": \"attach\",\n            \"name\": \"STM32Cube: Launch GDB Client\",\n            \"origin\": \"snippet\",\n            \"cwd\": \"${workspaceFolder}\",\n            \"preBuild\": \"${command:st-stm32-ide-debug-launch.build}\",\n            \"program\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n            \"gdb\": \"${command:st-stm32-ide-debug-launch.get-gdb-executable}\",\n            \"serverHost\": \"localhost\",\n            \"serverPort\": \"${command:st-stm32-ide-debug-launch.get-server-port}\",\n            \"runEntry\": \"main\",\n            \"imagesAndSymbols\": [\n                {\n                    \"imageFileName\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n                    \"imageOffset\": \"\",\n                    \"symbolFileName\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n                    \"symbolOffset\": \"\"\n                }\n            ]\n        }\n    ]\n}\n","json",[31,1803,1804,1808,1813,1818,1823,1837,1845,1850,1862,1874,1886,1898,1910,1922,1934,1946,1958,1971,1984,1997,2006,2019,2031,2043,2056,2064,2070,2082,2094,2106,2117,2123,2129,2135,2140,2151,2163,2175,2186,2197,2208,2219,2230,2241,2253,2264,2271,2276,2287,2298,2309,2318,2323,2328,2334,2340],{"__ignoreMap":25},[91,1805,1806],{"class":93,"line":94},[91,1807,1491],{"class":1169},[91,1809,1810],{"class":93,"line":1096},[91,1811,1812],{"class":1240},"    \u002F\u002F Use IntelliSense to learn about possible attributes.\n",[91,1814,1815],{"class":93,"line":1104},[91,1816,1817],{"class":1240},"    \u002F\u002F Hover to view descriptions of existing attributes.\n",[91,1819,1820],{"class":93,"line":1258},[91,1821,1822],{"class":1240},"    \u002F\u002F For more information, visit: https:\u002F\u002Fgo.microsoft.com\u002Ffwlink\u002F?linkid=830387\n",[91,1824,1825,1828,1831,1834],{"class":93,"line":1264},[91,1826,1827],{"class":206},"    \"version\"",[91,1829,1830],{"class":1169},": ",[91,1832,1833],{"class":210},"\"0.2.0\"",[91,1835,1836],{"class":1169},",\n",[91,1838,1839,1842],{"class":93,"line":1348},[91,1840,1841],{"class":206},"    \"configurations\"",[91,1843,1844],{"class":1169},": [\n",[91,1846,1847],{"class":93,"line":1365},[91,1848,1849],{"class":1169},"        {\n",[91,1851,1852,1855,1857,1860],{"class":93,"line":1377},[91,1853,1854],{"class":206},"            \"type\"",[91,1856,1830],{"class":1169},[91,1858,1859],{"class":210},"\"stgdbtarget\"",[91,1861,1836],{"class":1169},[91,1863,1864,1867,1869,1872],{"class":93,"line":1488},[91,1865,1866],{"class":206},"            \"request\"",[91,1868,1830],{"class":1169},[91,1870,1871],{"class":210},"\"launch\"",[91,1873,1836],{"class":1169},[91,1875,1876,1879,1881,1884],{"class":93,"line":1494},[91,1877,1878],{"class":206},"            \"name\"",[91,1880,1830],{"class":1169},[91,1882,1883],{"class":210},"\"STM32Cube: Launch Generic GDB Server\"",[91,1885,1836],{"class":1169},[91,1887,1888,1891,1893,1896],{"class":93,"line":1503},[91,1889,1890],{"class":206},"            \"origin\"",[91,1892,1830],{"class":1169},[91,1894,1895],{"class":210},"\"snippet\"",[91,1897,1836],{"class":1169},[91,1899,1900,1903,1905,1908],{"class":93,"line":1509},[91,1901,1902],{"class":206},"            \"cwd\"",[91,1904,1830],{"class":1169},[91,1906,1907],{"class":210},"\"${workspaceFolder}\"",[91,1909,1836],{"class":1169},[91,1911,1912,1915,1917,1920],{"class":93,"line":1518},[91,1913,1914],{"class":206},"            \"preBuild\"",[91,1916,1830],{"class":1169},[91,1918,1919],{"class":210},"\"${command:st-stm32-ide-debug-launch.build}\"",[91,1921,1836],{"class":1169},[91,1923,1924,1927,1929,1932],{"class":93,"line":1527},[91,1925,1926],{"class":206},"            \"program\"",[91,1928,1830],{"class":1169},[91,1930,1931],{"class":210},"\"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\"",[91,1933,1836],{"class":1169},[91,1935,1936,1939,1941,1944],{"class":93,"line":1541},[91,1937,1938],{"class":206},"            \"gdb\"",[91,1940,1830],{"class":1169},[91,1942,1943],{"class":210},"\"${command:st-stm32-ide-debug-launch.get-gdb-executable}\"",[91,1945,1836],{"class":1169},[91,1947,1948,1951,1953,1956],{"class":93,"line":1547},[91,1949,1950],{"class":206},"            \"deviceName\"",[91,1952,1830],{"class":1169},[91,1954,1955],{"class":210},"\"${command:st-stm32-ide-debug-launch.get-device-name}\"",[91,1957,1836],{"class":1169},[91,1959,1961,1964,1966,1969],{"class":93,"line":1960},17,[91,1962,1963],{"class":206},"            \"deviceCore\"",[91,1965,1830],{"class":1169},[91,1967,1968],{"class":210},"\"${command:st-stm32-ide-debug-launch.get-core-name}\"",[91,1970,1836],{"class":1169},[91,1972,1974,1977,1979,1982],{"class":93,"line":1973},18,[91,1975,1976],{"class":206},"            \"deviceTrustzone\"",[91,1978,1830],{"class":1169},[91,1980,1981],{"class":210},"\"${command:st-stm32-ide-debug-launch.get-trustzone-status}\"",[91,1983,1836],{"class":1169},[91,1985,1987,1990,1992,1995],{"class":93,"line":1986},19,[91,1988,1989],{"class":206},"            \"serverExe\"",[91,1991,1830],{"class":1169},[91,1993,1994],{"class":210},"\"\"",[91,1996,1836],{"class":1169},[91,1998,2000,2003],{"class":93,"line":1999},20,[91,2001,2002],{"class":206},"            \"serverParameters\"",[91,2004,2005],{"class":1169},": [],\n",[91,2007,2009,2012,2014,2017],{"class":93,"line":2008},21,[91,2010,2011],{"class":206},"            \"serverHost\"",[91,2013,1830],{"class":1169},[91,2015,2016],{"class":210},"\"localhost\"",[91,2018,1836],{"class":1169},[91,2020,2022,2025,2027,2029],{"class":93,"line":2021},22,[91,2023,2024],{"class":206},"            \"serverPort\"",[91,2026,1830],{"class":1169},[91,2028,1994],{"class":210},[91,2030,1836],{"class":1169},[91,2032,2034,2037,2039,2041],{"class":93,"line":2033},23,[91,2035,2036],{"class":206},"            \"serverCwd\"",[91,2038,1830],{"class":1169},[91,2040,1994],{"class":210},[91,2042,1836],{"class":1169},[91,2044,2046,2049,2051,2054],{"class":93,"line":2045},24,[91,2047,2048],{"class":206},"            \"runEntry\"",[91,2050,1830],{"class":1169},[91,2052,2053],{"class":210},"\"main\"",[91,2055,1836],{"class":1169},[91,2057,2059,2062],{"class":93,"line":2058},25,[91,2060,2061],{"class":206},"            \"imagesAndSymbols\"",[91,2063,1844],{"class":1169},[91,2065,2067],{"class":93,"line":2066},26,[91,2068,2069],{"class":1169},"                {\n",[91,2071,2073,2076,2078,2080],{"class":93,"line":2072},27,[91,2074,2075],{"class":206},"                    \"imageFileName\"",[91,2077,1830],{"class":1169},[91,2079,1931],{"class":210},[91,2081,1836],{"class":1169},[91,2083,2085,2088,2090,2092],{"class":93,"line":2084},28,[91,2086,2087],{"class":206},"                    \"imageOffset\"",[91,2089,1830],{"class":1169},[91,2091,1994],{"class":210},[91,2093,1836],{"class":1169},[91,2095,2097,2100,2102,2104],{"class":93,"line":2096},29,[91,2098,2099],{"class":206},"                    \"symbolFileName\"",[91,2101,1830],{"class":1169},[91,2103,1931],{"class":210},[91,2105,1836],{"class":1169},[91,2107,2109,2112,2114],{"class":93,"line":2108},30,[91,2110,2111],{"class":206},"                    \"symbolOffset\"",[91,2113,1830],{"class":1169},[91,2115,2116],{"class":210},"\"\"\n",[91,2118,2120],{"class":93,"line":2119},31,[91,2121,2122],{"class":1169},"                }\n",[91,2124,2126],{"class":93,"line":2125},32,[91,2127,2128],{"class":1169},"            ]\n",[91,2130,2132],{"class":93,"line":2131},33,[91,2133,2134],{"class":1169},"        },\n",[91,2136,2138],{"class":93,"line":2137},34,[91,2139,1849],{"class":1169},[91,2141,2143,2145,2147,2149],{"class":93,"line":2142},35,[91,2144,1854],{"class":206},[91,2146,1830],{"class":1169},[91,2148,1859],{"class":210},[91,2150,1836],{"class":1169},[91,2152,2154,2156,2158,2161],{"class":93,"line":2153},36,[91,2155,1866],{"class":206},[91,2157,1830],{"class":1169},[91,2159,2160],{"class":210},"\"attach\"",[91,2162,1836],{"class":1169},[91,2164,2166,2168,2170,2173],{"class":93,"line":2165},37,[91,2167,1878],{"class":206},[91,2169,1830],{"class":1169},[91,2171,2172],{"class":210},"\"STM32Cube: Launch GDB Client\"",[91,2174,1836],{"class":1169},[91,2176,2178,2180,2182,2184],{"class":93,"line":2177},38,[91,2179,1890],{"class":206},[91,2181,1830],{"class":1169},[91,2183,1895],{"class":210},[91,2185,1836],{"class":1169},[91,2187,2189,2191,2193,2195],{"class":93,"line":2188},39,[91,2190,1902],{"class":206},[91,2192,1830],{"class":1169},[91,2194,1907],{"class":210},[91,2196,1836],{"class":1169},[91,2198,2200,2202,2204,2206],{"class":93,"line":2199},40,[91,2201,1914],{"class":206},[91,2203,1830],{"class":1169},[91,2205,1919],{"class":210},[91,2207,1836],{"class":1169},[91,2209,2211,2213,2215,2217],{"class":93,"line":2210},41,[91,2212,1926],{"class":206},[91,2214,1830],{"class":1169},[91,2216,1931],{"class":210},[91,2218,1836],{"class":1169},[91,2220,2222,2224,2226,2228],{"class":93,"line":2221},42,[91,2223,1938],{"class":206},[91,2225,1830],{"class":1169},[91,2227,1943],{"class":210},[91,2229,1836],{"class":1169},[91,2231,2233,2235,2237,2239],{"class":93,"line":2232},43,[91,2234,2011],{"class":206},[91,2236,1830],{"class":1169},[91,2238,2016],{"class":210},[91,2240,1836],{"class":1169},[91,2242,2244,2246,2248,2251],{"class":93,"line":2243},44,[91,2245,2024],{"class":206},[91,2247,1830],{"class":1169},[91,2249,2250],{"class":210},"\"${command:st-stm32-ide-debug-launch.get-server-port}\"",[91,2252,1836],{"class":1169},[91,2254,2256,2258,2260,2262],{"class":93,"line":2255},45,[91,2257,2048],{"class":206},[91,2259,1830],{"class":1169},[91,2261,2053],{"class":210},[91,2263,1836],{"class":1169},[91,2265,2267,2269],{"class":93,"line":2266},46,[91,2268,2061],{"class":206},[91,2270,1844],{"class":1169},[91,2272,2274],{"class":93,"line":2273},47,[91,2275,2069],{"class":1169},[91,2277,2279,2281,2283,2285],{"class":93,"line":2278},48,[91,2280,2075],{"class":206},[91,2282,1830],{"class":1169},[91,2284,1931],{"class":210},[91,2286,1836],{"class":1169},[91,2288,2290,2292,2294,2296],{"class":93,"line":2289},49,[91,2291,2087],{"class":206},[91,2293,1830],{"class":1169},[91,2295,1994],{"class":210},[91,2297,1836],{"class":1169},[91,2299,2301,2303,2305,2307],{"class":93,"line":2300},50,[91,2302,2099],{"class":206},[91,2304,1830],{"class":1169},[91,2306,1931],{"class":210},[91,2308,1836],{"class":1169},[91,2310,2312,2314,2316],{"class":93,"line":2311},51,[91,2313,2111],{"class":206},[91,2315,1830],{"class":1169},[91,2317,2116],{"class":210},[91,2319,2321],{"class":93,"line":2320},52,[91,2322,2122],{"class":1169},[91,2324,2326],{"class":93,"line":2325},53,[91,2327,2128],{"class":1169},[91,2329,2331],{"class":93,"line":2330},54,[91,2332,2333],{"class":1169},"        }\n",[91,2335,2337],{"class":93,"line":2336},55,[91,2338,2339],{"class":1169},"    ]\n",[91,2341,2343],{"class":93,"line":2342},56,[91,2344,1550],{"class":1169},[17,2346,2347],{},"我们需要改哪里呢？",[17,2349,2350],{},"主要是：",[1183,2352,2353,2365,2375,2381,2390,2399],{},[1186,2354,2355,2358,2359,2361,2362],{},[31,2356,2357],{},"serverExe"," ： 就填二进制程序名 ",[31,2360,203],{},"或者",[31,2363,2364],{},"openocd.exe",[1186,2366,2367,2370,2371],{},[31,2368,2369],{},"serverParameters"," ：填那两个openOCD参数，参考 ",[184,2372,2374],{"href":2373},"#openocd-parameters","openocd的两个-f参数",[1186,2376,2377,2380],{},[31,2378,2379],{},"serverHost"," ：OpenOCD GDB Server 默认监听 localhost，一般不用改",[1186,2382,2383,2386,2387],{},[31,2384,2385],{},"serverPort"," ：OpenOCD 默认 GDB 端口 为 ",[31,2388,2389],{},"3333",[1186,2391,2392,2395,2396,2398],{},[31,2393,2394],{},"serverCwd"," ： 填",[31,2397,2357],{},"这个二进制程序在哪个目录底下",[1186,2400,2401,2402,2405],{},"添加",[31,2403,2404],{},"liveWatch","参数（重要）",[2407,2408,2409],"ol",{},[1186,2410,2411,2413],{},[31,2412,2357],{},":",[17,2415,2416],{},"Linux填openocd\nWindows填openocd.exe",[17,2418,2419],{},[23,2420],{"alt":25,"src":2421},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790826993170-f6f4832e.webp",[2407,2423,2424],{"start":1096},[1186,2425,2426,2428],{},[31,2427,2369],{},"按下面这个格式来：",[17,2430,2431,2432,2435,2436,2438],{},"那俩",[31,2433,2434],{},"-f","的参数由",[184,2437,2374],{"href":2373},"可知：",[1183,2440,2441,2446],{},[1186,2442,2443],{},[31,2444,2445],{},"interface\u002Fstlink.cfg",[1186,2447,2448],{},[31,2449,2450],{},"target\u002Fstm32f1x.cfg",[17,2452,2453],{},"但是除了这俩，还需要一些参数：",[83,2455,2457],{"className":1799,"code":2456,"language":1801,"meta":25,"style":25},"            \"serverParameters\": [                \n                \"-f\",\n                \"interface\u002Fstlink.cfg\",\n\n                \"-c\",\n                \"transport select swd\",\n\n                \"-f\",\n                \"target\u002Fstm32f1x.cfg\",\n\n                \"-c\",\n                \"$_TARGETNAME configure -gdb-max-connections 2\"],\n",[31,2458,2459,2466,2473,2480,2484,2491,2498,2502,2508,2515,2519,2525],{"__ignoreMap":25},[91,2460,2461,2463],{"class":93,"line":94},[91,2462,2002],{"class":210},[91,2464,2465],{"class":1169},": [                \n",[91,2467,2468,2471],{"class":93,"line":1096},[91,2469,2470],{"class":210},"                \"-f\"",[91,2472,1836],{"class":1169},[91,2474,2475,2478],{"class":93,"line":1104},[91,2476,2477],{"class":210},"                \"interface\u002Fstlink.cfg\"",[91,2479,1836],{"class":1169},[91,2481,2482],{"class":93,"line":1258},[91,2483,1255],{"emptyLinePlaceholder":1254},[91,2485,2486,2489],{"class":93,"line":1264},[91,2487,2488],{"class":210},"                \"-c\"",[91,2490,1836],{"class":1169},[91,2492,2493,2496],{"class":93,"line":1348},[91,2494,2495],{"class":210},"                \"transport select swd\"",[91,2497,1836],{"class":1169},[91,2499,2500],{"class":93,"line":1365},[91,2501,1255],{"emptyLinePlaceholder":1254},[91,2503,2504,2506],{"class":93,"line":1377},[91,2505,2470],{"class":210},[91,2507,1836],{"class":1169},[91,2509,2510,2513],{"class":93,"line":1488},[91,2511,2512],{"class":210},"                \"target\u002Fstm32f1x.cfg\"",[91,2514,1836],{"class":1169},[91,2516,2517],{"class":93,"line":1494},[91,2518,1255],{"emptyLinePlaceholder":1254},[91,2520,2521,2523],{"class":93,"line":1503},[91,2522,2488],{"class":210},[91,2524,1836],{"class":1169},[91,2526,2527,2530],{"class":93,"line":1509},[91,2528,2529],{"class":210},"                \"$_TARGETNAME configure -gdb-max-connections 2\"",[91,2531,2532],{"class":1169},"],\n",[17,2534,2535],{},"这里建议按上面这个顺序排布参数：先探针 → 再通信协议 → 再 MCU → 最后修改这个 MCU target 的参数",[17,2537,2538,2539,2542],{},"这里的",[31,2540,2541],{},"-c transport select xxx","是选协议：",[221,2544,2545,2555],{},[224,2546,2547],{},[227,2548,2549,2552],{},[230,2550,2551],{},"实际调试方式",[230,2553,2554],{},"配置",[240,2556,2557,2567],{},[227,2558,2559,2562],{},[245,2560,2561],{},"STM32 常用 SWD",[245,2563,2564],{},[31,2565,2566],{},"transport select swd",[227,2568,2569,2572],{},[245,2570,2571],{},"JTAG",[245,2573,2574],{},[31,2575,2576],{},"transport select jtag",[17,2578,2579,2580,2583,2584,882],{},"咱们一般都是",[31,2581,2582],{},"swd",",所以选",[31,2585,2566],{},[17,2587,2588,2589,2592,2593,2596],{},"而这个",[31,2590,2591],{},"-c $_TARGETNAME configure -gdb-max-connections 2","是允许这个 OpenOCD target 同时接受最多 ",[31,2594,2595],{},"2"," 个 GDB 客户端连接。",[17,2598,2599],{},"正常调试已经占了一个：",[83,2601,2604],{"className":2602,"code":2603,"language":783,"meta":25},[781],"OpenOCD :3333\n    ↑\n    └── GDB #1\n         普通 Debug\n",[31,2605,2603],{"__ignoreMap":25},[17,2607,2608,2609,2612,2613,2615],{},"咱们还需要用到",[31,2610,2611],{},"Live Watch","，所以把参数设置为",[31,2614,2595],{},"之后：",[83,2617,2620],{"className":2618,"code":2619,"language":783,"meta":25},[781],"                  ┌─ GDB #1：普通 Debug\nSTM32 ← OpenOCD ──┤\n                  └─ GDB #2：Live Watch\n",[31,2621,2619],{"__ignoreMap":25},[2407,2623,2624],{"start":1104},[1186,2625,2626,736],{},[31,2627,2394],{},[17,2629,2630],{},"用终端命令直接查找下：",[83,2632,2634],{"className":85,"code":2633,"language":87,"meta":25,"style":25},"# Linux\nwhich openocd\n\n# Windows\nwhere.exe openocd\n",[31,2635,2636,2641,2649,2653,2658],{"__ignoreMap":25},[91,2637,2638],{"class":93,"line":94},[91,2639,2640],{"class":1240},"# Linux\n",[91,2642,2643,2646],{"class":93,"line":1096},[91,2644,2645],{"class":206},"which",[91,2647,2648],{"class":210}," openocd\n",[91,2650,2651],{"class":93,"line":1104},[91,2652,1255],{"emptyLinePlaceholder":1254},[91,2654,2655],{"class":93,"line":1258},[91,2656,2657],{"class":1240},"# Windows\n",[91,2659,2660,2663],{"class":93,"line":1264},[91,2661,2662],{"class":97},"where.exe",[91,2664,2648],{"class":210},[17,2666,2667],{},[23,2668],{"alt":25,"src":2669},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790779741632-f3fe4580.webp",[17,2671,2672,2673,2676,2677,2679,2680,882],{},"Linux如上图是",[31,2674,2675],{},"\u002Fusr\u002Fbin\u002Fopenocd","，所以",[31,2678,2394],{},"填",[31,2681,2682],{},"\u002Fusr\u002Fbin",[17,2684,2685],{},[23,2686],{"alt":25,"src":2687},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1791515580660-37f3dfa4.webp",[17,2689,2690,2691,2676,2694,2679,2696,2699,2700,2702,2703,2705,2706,2709,2710,2713,2714,882],{},"Windows如上图是",[31,2692,2693],{},"C:\\xpack-openocd-0.12.0-7\\bin\\openocd.exe",[31,2695,2394],{},[31,2697,2698],{},"C:\\xpack-openocd-0.12.0-7\\bin","。\n但是不能直接填",[31,2701,2698],{},"，因为在",[31,2704,1801],{},"中",[31,2707,2708],{},"\\","是转义字符，所以傻逼Windows应该填",[31,2711,2712],{},"C:\u002Fxpack-openocd-0.12.0-7\u002Fbin","或者双反斜杠",[31,2715,2716],{},"C:\\\\xpack-openocd-0.12.0-7\\\\bin",[2407,2718,2719],{"start":1258},[1186,2720,2401,2721,2723],{},[31,2722,2404],{},"参数",[17,2725,2726,2727,2729,2730,2733],{},"在",[31,2728,2394],{},"后面，",[31,2731,2732],{},"runEntry","前面加上：",[83,2735,2737],{"className":1799,"code":2736,"language":1801,"meta":25,"style":25},"            \"liveWatch\": {\n                \"enabled\": true,\n                \"samplesPerSecond\": \"4\"\n            },\n",[31,2738,2739,2747,2759,2769],{"__ignoreMap":25},[91,2740,2741,2744],{"class":93,"line":94},[91,2742,2743],{"class":210},"            \"liveWatch\"",[91,2745,2746],{"class":1169},": {\n",[91,2748,2749,2752,2754,2757],{"class":93,"line":1096},[91,2750,2751],{"class":206},"                \"enabled\"",[91,2753,1830],{"class":1169},[91,2755,2756],{"class":206},"true",[91,2758,1836],{"class":1169},[91,2760,2761,2764,2766],{"class":93,"line":1104},[91,2762,2763],{"class":206},"                \"samplesPerSecond\"",[91,2765,1830],{"class":1169},[91,2767,2768],{"class":210},"\"4\"\n",[91,2770,2771],{"class":93,"line":1258},[91,2772,2773],{"class":1169},"            },\n",[17,2775,2776],{},"最后：",[17,2778,2779],{},[248,2780,2781],{},"Linux：",[83,2783,2785],{"className":1799,"code":2784,"language":1801,"meta":25,"style":25},"{\n    \u002F\u002F Use IntelliSense to learn about possible attributes.\n    \u002F\u002F Hover to view descriptions of existing attributes.\n    \u002F\u002F For more information, visit: https:\u002F\u002Fgo.microsoft.com\u002Ffwlink\u002F?linkid=830387\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"type\": \"stgdbtarget\",\n            \"request\": \"launch\",\n            \"name\": \"STM32Cube: Launch Generic GDB Server\",\n            \"origin\": \"snippet\",\n            \"cwd\": \"${workspaceFolder}\",\n            \"preBuild\": \"${command:st-stm32-ide-debug-launch.build}\",\n            \"program\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n            \"gdb\": \"${command:st-stm32-ide-debug-launch.get-gdb-executable}\",\n            \"deviceName\": \"${command:st-stm32-ide-debug-launch.get-device-name}\",\n            \"deviceCore\": \"${command:st-stm32-ide-debug-launch.get-core-name}\",\n            \"deviceTrustzone\": \"${command:st-stm32-ide-debug-launch.get-trustzone-status}\",\n            \"serverExe\": \"openocd\",\n            \"serverParameters\": [                \n                \"-f\",\n                \"interface\u002Fstlink.cfg\",\n\n                \"-c\",\n                \"transport select swd\",\n\n                \"-f\",\n                \"target\u002Fstm32f1x.cfg\",\n\n                \"-c\",\n                \"$_TARGETNAME configure -gdb-max-connections 2\"],\n            \"serverHost\": \"localhost\",\n            \"serverPort\": \"3333\",\n            \"serverCwd\": \"\u002Fusr\u002Fbin\",\n            \"liveWatch\": {\n                \"enabled\": true,\n                \"samplesPerSecond\": \"4\"\n            },\n            \"runEntry\": \"main\",\n            \"imagesAndSymbols\": [\n                {\n                    \"imageFileName\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n                    \"imageOffset\": \"\",\n                    \"symbolFileName\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n                    \"symbolOffset\": \"\"\n                }\n            ]\n        },\n        {\n            \"type\": \"stgdbtarget\",\n            \"request\": \"attach\",\n            \"name\": \"STM32Cube: Launch GDB Client\",\n            \"origin\": \"snippet\",\n            \"cwd\": \"${workspaceFolder}\",\n            \"preBuild\": \"${command:st-stm32-ide-debug-launch.build}\",\n            \"program\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n            \"gdb\": \"${command:st-stm32-ide-debug-launch.get-gdb-executable}\",\n            \"serverHost\": \"localhost\",\n            \"serverPort\": \"${command:st-stm32-ide-debug-launch.get-server-port}\",\n            \"runEntry\": \"main\",\n            \"imagesAndSymbols\": [\n                {\n                    \"imageFileName\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n                    \"imageOffset\": \"\",\n                    \"symbolFileName\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n                    \"symbolOffset\": \"\"\n                }\n            ]\n        }\n    ]\n}\n",[31,2786,2787,2791,2795,2799,2803,2813,2819,2823,2833,2843,2853,2863,2873,2883,2893,2903,2913,2923,2933,2944,2950,2956,2962,2966,2972,2978,2982,2988,2994,2998,3004,3010,3020,3031,3042,3048,3058,3066,3070,3080,3086,3090,3100,3110,3120,3128,3132,3136,3140,3144,3154,3164,3174,3184,3194,3204,3214,3225,3236,3247,3258,3265,3270,3281,3292,3303,3312,3317,3322,3327,3332],{"__ignoreMap":25},[91,2788,2789],{"class":93,"line":94},[91,2790,1491],{"class":1169},[91,2792,2793],{"class":93,"line":1096},[91,2794,1812],{"class":1240},[91,2796,2797],{"class":93,"line":1104},[91,2798,1817],{"class":1240},[91,2800,2801],{"class":93,"line":1258},[91,2802,1822],{"class":1240},[91,2804,2805,2807,2809,2811],{"class":93,"line":1264},[91,2806,1827],{"class":206},[91,2808,1830],{"class":1169},[91,2810,1833],{"class":210},[91,2812,1836],{"class":1169},[91,2814,2815,2817],{"class":93,"line":1348},[91,2816,1841],{"class":206},[91,2818,1844],{"class":1169},[91,2820,2821],{"class":93,"line":1365},[91,2822,1849],{"class":1169},[91,2824,2825,2827,2829,2831],{"class":93,"line":1377},[91,2826,1854],{"class":206},[91,2828,1830],{"class":1169},[91,2830,1859],{"class":210},[91,2832,1836],{"class":1169},[91,2834,2835,2837,2839,2841],{"class":93,"line":1488},[91,2836,1866],{"class":206},[91,2838,1830],{"class":1169},[91,2840,1871],{"class":210},[91,2842,1836],{"class":1169},[91,2844,2845,2847,2849,2851],{"class":93,"line":1494},[91,2846,1878],{"class":206},[91,2848,1830],{"class":1169},[91,2850,1883],{"class":210},[91,2852,1836],{"class":1169},[91,2854,2855,2857,2859,2861],{"class":93,"line":1503},[91,2856,1890],{"class":206},[91,2858,1830],{"class":1169},[91,2860,1895],{"class":210},[91,2862,1836],{"class":1169},[91,2864,2865,2867,2869,2871],{"class":93,"line":1509},[91,2866,1902],{"class":206},[91,2868,1830],{"class":1169},[91,2870,1907],{"class":210},[91,2872,1836],{"class":1169},[91,2874,2875,2877,2879,2881],{"class":93,"line":1518},[91,2876,1914],{"class":206},[91,2878,1830],{"class":1169},[91,2880,1919],{"class":210},[91,2882,1836],{"class":1169},[91,2884,2885,2887,2889,2891],{"class":93,"line":1527},[91,2886,1926],{"class":206},[91,2888,1830],{"class":1169},[91,2890,1931],{"class":210},[91,2892,1836],{"class":1169},[91,2894,2895,2897,2899,2901],{"class":93,"line":1541},[91,2896,1938],{"class":206},[91,2898,1830],{"class":1169},[91,2900,1943],{"class":210},[91,2902,1836],{"class":1169},[91,2904,2905,2907,2909,2911],{"class":93,"line":1547},[91,2906,1950],{"class":206},[91,2908,1830],{"class":1169},[91,2910,1955],{"class":210},[91,2912,1836],{"class":1169},[91,2914,2915,2917,2919,2921],{"class":93,"line":1960},[91,2916,1963],{"class":206},[91,2918,1830],{"class":1169},[91,2920,1968],{"class":210},[91,2922,1836],{"class":1169},[91,2924,2925,2927,2929,2931],{"class":93,"line":1973},[91,2926,1976],{"class":206},[91,2928,1830],{"class":1169},[91,2930,1981],{"class":210},[91,2932,1836],{"class":1169},[91,2934,2935,2937,2939,2942],{"class":93,"line":1986},[91,2936,1989],{"class":206},[91,2938,1830],{"class":1169},[91,2940,2941],{"class":210},"\"openocd\"",[91,2943,1836],{"class":1169},[91,2945,2946,2948],{"class":93,"line":1999},[91,2947,2002],{"class":206},[91,2949,2465],{"class":1169},[91,2951,2952,2954],{"class":93,"line":2008},[91,2953,2470],{"class":210},[91,2955,1836],{"class":1169},[91,2957,2958,2960],{"class":93,"line":2021},[91,2959,2477],{"class":210},[91,2961,1836],{"class":1169},[91,2963,2964],{"class":93,"line":2033},[91,2965,1255],{"emptyLinePlaceholder":1254},[91,2967,2968,2970],{"class":93,"line":2045},[91,2969,2488],{"class":210},[91,2971,1836],{"class":1169},[91,2973,2974,2976],{"class":93,"line":2058},[91,2975,2495],{"class":210},[91,2977,1836],{"class":1169},[91,2979,2980],{"class":93,"line":2066},[91,2981,1255],{"emptyLinePlaceholder":1254},[91,2983,2984,2986],{"class":93,"line":2072},[91,2985,2470],{"class":210},[91,2987,1836],{"class":1169},[91,2989,2990,2992],{"class":93,"line":2084},[91,2991,2512],{"class":210},[91,2993,1836],{"class":1169},[91,2995,2996],{"class":93,"line":2096},[91,2997,1255],{"emptyLinePlaceholder":1254},[91,2999,3000,3002],{"class":93,"line":2108},[91,3001,2488],{"class":210},[91,3003,1836],{"class":1169},[91,3005,3006,3008],{"class":93,"line":2119},[91,3007,2529],{"class":210},[91,3009,2532],{"class":1169},[91,3011,3012,3014,3016,3018],{"class":93,"line":2125},[91,3013,2011],{"class":206},[91,3015,1830],{"class":1169},[91,3017,2016],{"class":210},[91,3019,1836],{"class":1169},[91,3021,3022,3024,3026,3029],{"class":93,"line":2131},[91,3023,2024],{"class":206},[91,3025,1830],{"class":1169},[91,3027,3028],{"class":210},"\"3333\"",[91,3030,1836],{"class":1169},[91,3032,3033,3035,3037,3040],{"class":93,"line":2137},[91,3034,2036],{"class":206},[91,3036,1830],{"class":1169},[91,3038,3039],{"class":210},"\"\u002Fusr\u002Fbin\"",[91,3041,1836],{"class":1169},[91,3043,3044,3046],{"class":93,"line":2142},[91,3045,2743],{"class":206},[91,3047,2746],{"class":1169},[91,3049,3050,3052,3054,3056],{"class":93,"line":2153},[91,3051,2751],{"class":206},[91,3053,1830],{"class":1169},[91,3055,2756],{"class":206},[91,3057,1836],{"class":1169},[91,3059,3060,3062,3064],{"class":93,"line":2165},[91,3061,2763],{"class":206},[91,3063,1830],{"class":1169},[91,3065,2768],{"class":210},[91,3067,3068],{"class":93,"line":2177},[91,3069,2773],{"class":1169},[91,3071,3072,3074,3076,3078],{"class":93,"line":2188},[91,3073,2048],{"class":206},[91,3075,1830],{"class":1169},[91,3077,2053],{"class":210},[91,3079,1836],{"class":1169},[91,3081,3082,3084],{"class":93,"line":2199},[91,3083,2061],{"class":206},[91,3085,1844],{"class":1169},[91,3087,3088],{"class":93,"line":2210},[91,3089,2069],{"class":1169},[91,3091,3092,3094,3096,3098],{"class":93,"line":2221},[91,3093,2075],{"class":206},[91,3095,1830],{"class":1169},[91,3097,1931],{"class":210},[91,3099,1836],{"class":1169},[91,3101,3102,3104,3106,3108],{"class":93,"line":2232},[91,3103,2087],{"class":206},[91,3105,1830],{"class":1169},[91,3107,1994],{"class":210},[91,3109,1836],{"class":1169},[91,3111,3112,3114,3116,3118],{"class":93,"line":2243},[91,3113,2099],{"class":206},[91,3115,1830],{"class":1169},[91,3117,1931],{"class":210},[91,3119,1836],{"class":1169},[91,3121,3122,3124,3126],{"class":93,"line":2255},[91,3123,2111],{"class":206},[91,3125,1830],{"class":1169},[91,3127,2116],{"class":210},[91,3129,3130],{"class":93,"line":2266},[91,3131,2122],{"class":1169},[91,3133,3134],{"class":93,"line":2273},[91,3135,2128],{"class":1169},[91,3137,3138],{"class":93,"line":2278},[91,3139,2134],{"class":1169},[91,3141,3142],{"class":93,"line":2289},[91,3143,1849],{"class":1169},[91,3145,3146,3148,3150,3152],{"class":93,"line":2300},[91,3147,1854],{"class":206},[91,3149,1830],{"class":1169},[91,3151,1859],{"class":210},[91,3153,1836],{"class":1169},[91,3155,3156,3158,3160,3162],{"class":93,"line":2311},[91,3157,1866],{"class":206},[91,3159,1830],{"class":1169},[91,3161,2160],{"class":210},[91,3163,1836],{"class":1169},[91,3165,3166,3168,3170,3172],{"class":93,"line":2320},[91,3167,1878],{"class":206},[91,3169,1830],{"class":1169},[91,3171,2172],{"class":210},[91,3173,1836],{"class":1169},[91,3175,3176,3178,3180,3182],{"class":93,"line":2325},[91,3177,1890],{"class":206},[91,3179,1830],{"class":1169},[91,3181,1895],{"class":210},[91,3183,1836],{"class":1169},[91,3185,3186,3188,3190,3192],{"class":93,"line":2330},[91,3187,1902],{"class":206},[91,3189,1830],{"class":1169},[91,3191,1907],{"class":210},[91,3193,1836],{"class":1169},[91,3195,3196,3198,3200,3202],{"class":93,"line":2336},[91,3197,1914],{"class":206},[91,3199,1830],{"class":1169},[91,3201,1919],{"class":210},[91,3203,1836],{"class":1169},[91,3205,3206,3208,3210,3212],{"class":93,"line":2342},[91,3207,1926],{"class":206},[91,3209,1830],{"class":1169},[91,3211,1931],{"class":210},[91,3213,1836],{"class":1169},[91,3215,3217,3219,3221,3223],{"class":93,"line":3216},57,[91,3218,1938],{"class":206},[91,3220,1830],{"class":1169},[91,3222,1943],{"class":210},[91,3224,1836],{"class":1169},[91,3226,3228,3230,3232,3234],{"class":93,"line":3227},58,[91,3229,2011],{"class":206},[91,3231,1830],{"class":1169},[91,3233,2016],{"class":210},[91,3235,1836],{"class":1169},[91,3237,3239,3241,3243,3245],{"class":93,"line":3238},59,[91,3240,2024],{"class":206},[91,3242,1830],{"class":1169},[91,3244,2250],{"class":210},[91,3246,1836],{"class":1169},[91,3248,3250,3252,3254,3256],{"class":93,"line":3249},60,[91,3251,2048],{"class":206},[91,3253,1830],{"class":1169},[91,3255,2053],{"class":210},[91,3257,1836],{"class":1169},[91,3259,3261,3263],{"class":93,"line":3260},61,[91,3262,2061],{"class":206},[91,3264,1844],{"class":1169},[91,3266,3268],{"class":93,"line":3267},62,[91,3269,2069],{"class":1169},[91,3271,3273,3275,3277,3279],{"class":93,"line":3272},63,[91,3274,2075],{"class":206},[91,3276,1830],{"class":1169},[91,3278,1931],{"class":210},[91,3280,1836],{"class":1169},[91,3282,3284,3286,3288,3290],{"class":93,"line":3283},64,[91,3285,2087],{"class":206},[91,3287,1830],{"class":1169},[91,3289,1994],{"class":210},[91,3291,1836],{"class":1169},[91,3293,3295,3297,3299,3301],{"class":93,"line":3294},65,[91,3296,2099],{"class":206},[91,3298,1830],{"class":1169},[91,3300,1931],{"class":210},[91,3302,1836],{"class":1169},[91,3304,3306,3308,3310],{"class":93,"line":3305},66,[91,3307,2111],{"class":206},[91,3309,1830],{"class":1169},[91,3311,2116],{"class":210},[91,3313,3315],{"class":93,"line":3314},67,[91,3316,2122],{"class":1169},[91,3318,3320],{"class":93,"line":3319},68,[91,3321,2128],{"class":1169},[91,3323,3325],{"class":93,"line":3324},69,[91,3326,2333],{"class":1169},[91,3328,3330],{"class":93,"line":3329},70,[91,3331,2339],{"class":1169},[91,3333,3335],{"class":93,"line":3334},71,[91,3336,1550],{"class":1169},[17,3338,3339],{},[248,3340,3341],{},"Windows：",[83,3343,3345],{"className":1799,"code":3344,"language":1801,"meta":25,"style":25},"{\n    \u002F\u002F Use IntelliSense to learn about possible attributes.\n    \u002F\u002F Hover to view descriptions of existing attributes.\n    \u002F\u002F For more information, visit: https:\u002F\u002Fgo.microsoft.com\u002Ffwlink\u002F?linkid=830387\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"type\": \"stgdbtarget\",\n            \"request\": \"launch\",\n            \"name\": \"STM32Cube: Launch Generic GDB Server\",\n            \"origin\": \"snippet\",\n            \"cwd\": \"${workspaceFolder}\",\n            \"preBuild\": \"${command:st-stm32-ide-debug-launch.build}\",\n            \"program\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n            \"gdb\": \"${command:st-stm32-ide-debug-launch.get-gdb-executable}\",\n            \"deviceName\": \"${command:st-stm32-ide-debug-launch.get-device-name}\",\n            \"deviceCore\": \"${command:st-stm32-ide-debug-launch.get-core-name}\",\n            \"deviceTrustzone\": \"${command:st-stm32-ide-debug-launch.get-trustzone-status}\",\n            \"serverExe\": \"openocd.exe\",\n            \"serverParameters\": [                \n                \"-f\",\n                \"interface\u002Fstlink.cfg\",\n\n                \"-c\",\n                \"transport select swd\",\n\n                \"-f\",\n                \"target\u002Fstm32f1x.cfg\",\n\n                \"-c\",\n                \"$_TARGETNAME configure -gdb-max-connections 2\"],\n            \"serverHost\": \"localhost\",\n            \"serverPort\": \"3333\",\n            \"serverCwd\": \"C:\u002Fxpack-openocd-0.12.0-7\u002Fbin\",\n            \"liveWatch\": {\n                \"enabled\": true,\n                \"samplesPerSecond\": \"4\"\n            },\n            \"runEntry\": \"main\",\n            \"imagesAndSymbols\": [\n                {\n                    \"imageFileName\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n                    \"imageOffset\": \"\",\n                    \"symbolFileName\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n                    \"symbolOffset\": \"\"\n                }\n            ]\n        },\n        {\n            \"type\": \"stgdbtarget\",\n            \"request\": \"attach\",\n            \"name\": \"STM32Cube: Launch GDB Client\",\n            \"origin\": \"snippet\",\n            \"cwd\": \"${workspaceFolder}\",\n            \"preBuild\": \"${command:st-stm32-ide-debug-launch.build}\",\n            \"program\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n            \"gdb\": \"${command:st-stm32-ide-debug-launch.get-gdb-executable}\",\n            \"serverHost\": \"localhost\",\n            \"serverPort\": \"${command:st-stm32-ide-debug-launch.get-server-port}\",\n            \"runEntry\": \"main\",\n            \"imagesAndSymbols\": [\n                {\n                    \"imageFileName\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n                    \"imageOffset\": \"\",\n                    \"symbolFileName\": \"${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}\",\n                    \"symbolOffset\": \"\"\n                }\n            ]\n        }\n    ]\n}\n",[31,3346,3347,3351,3355,3359,3363,3373,3379,3383,3393,3403,3413,3423,3433,3443,3453,3463,3473,3483,3493,3504,3510,3516,3522,3526,3532,3538,3542,3548,3554,3558,3564,3570,3580,3590,3601,3607,3617,3625,3629,3639,3645,3649,3659,3669,3679,3687,3691,3695,3699,3703,3713,3723,3733,3743,3753,3763,3773,3783,3793,3803,3813,3819,3823,3833,3843,3853,3861,3865,3869,3873,3877],{"__ignoreMap":25},[91,3348,3349],{"class":93,"line":94},[91,3350,1491],{"class":1169},[91,3352,3353],{"class":93,"line":1096},[91,3354,1812],{"class":1240},[91,3356,3357],{"class":93,"line":1104},[91,3358,1817],{"class":1240},[91,3360,3361],{"class":93,"line":1258},[91,3362,1822],{"class":1240},[91,3364,3365,3367,3369,3371],{"class":93,"line":1264},[91,3366,1827],{"class":206},[91,3368,1830],{"class":1169},[91,3370,1833],{"class":210},[91,3372,1836],{"class":1169},[91,3374,3375,3377],{"class":93,"line":1348},[91,3376,1841],{"class":206},[91,3378,1844],{"class":1169},[91,3380,3381],{"class":93,"line":1365},[91,3382,1849],{"class":1169},[91,3384,3385,3387,3389,3391],{"class":93,"line":1377},[91,3386,1854],{"class":206},[91,3388,1830],{"class":1169},[91,3390,1859],{"class":210},[91,3392,1836],{"class":1169},[91,3394,3395,3397,3399,3401],{"class":93,"line":1488},[91,3396,1866],{"class":206},[91,3398,1830],{"class":1169},[91,3400,1871],{"class":210},[91,3402,1836],{"class":1169},[91,3404,3405,3407,3409,3411],{"class":93,"line":1494},[91,3406,1878],{"class":206},[91,3408,1830],{"class":1169},[91,3410,1883],{"class":210},[91,3412,1836],{"class":1169},[91,3414,3415,3417,3419,3421],{"class":93,"line":1503},[91,3416,1890],{"class":206},[91,3418,1830],{"class":1169},[91,3420,1895],{"class":210},[91,3422,1836],{"class":1169},[91,3424,3425,3427,3429,3431],{"class":93,"line":1509},[91,3426,1902],{"class":206},[91,3428,1830],{"class":1169},[91,3430,1907],{"class":210},[91,3432,1836],{"class":1169},[91,3434,3435,3437,3439,3441],{"class":93,"line":1518},[91,3436,1914],{"class":206},[91,3438,1830],{"class":1169},[91,3440,1919],{"class":210},[91,3442,1836],{"class":1169},[91,3444,3445,3447,3449,3451],{"class":93,"line":1527},[91,3446,1926],{"class":206},[91,3448,1830],{"class":1169},[91,3450,1931],{"class":210},[91,3452,1836],{"class":1169},[91,3454,3455,3457,3459,3461],{"class":93,"line":1541},[91,3456,1938],{"class":206},[91,3458,1830],{"class":1169},[91,3460,1943],{"class":210},[91,3462,1836],{"class":1169},[91,3464,3465,3467,3469,3471],{"class":93,"line":1547},[91,3466,1950],{"class":206},[91,3468,1830],{"class":1169},[91,3470,1955],{"class":210},[91,3472,1836],{"class":1169},[91,3474,3475,3477,3479,3481],{"class":93,"line":1960},[91,3476,1963],{"class":206},[91,3478,1830],{"class":1169},[91,3480,1968],{"class":210},[91,3482,1836],{"class":1169},[91,3484,3485,3487,3489,3491],{"class":93,"line":1973},[91,3486,1976],{"class":206},[91,3488,1830],{"class":1169},[91,3490,1981],{"class":210},[91,3492,1836],{"class":1169},[91,3494,3495,3497,3499,3502],{"class":93,"line":1986},[91,3496,1989],{"class":206},[91,3498,1830],{"class":1169},[91,3500,3501],{"class":210},"\"openocd.exe\"",[91,3503,1836],{"class":1169},[91,3505,3506,3508],{"class":93,"line":1999},[91,3507,2002],{"class":206},[91,3509,2465],{"class":1169},[91,3511,3512,3514],{"class":93,"line":2008},[91,3513,2470],{"class":210},[91,3515,1836],{"class":1169},[91,3517,3518,3520],{"class":93,"line":2021},[91,3519,2477],{"class":210},[91,3521,1836],{"class":1169},[91,3523,3524],{"class":93,"line":2033},[91,3525,1255],{"emptyLinePlaceholder":1254},[91,3527,3528,3530],{"class":93,"line":2045},[91,3529,2488],{"class":210},[91,3531,1836],{"class":1169},[91,3533,3534,3536],{"class":93,"line":2058},[91,3535,2495],{"class":210},[91,3537,1836],{"class":1169},[91,3539,3540],{"class":93,"line":2066},[91,3541,1255],{"emptyLinePlaceholder":1254},[91,3543,3544,3546],{"class":93,"line":2072},[91,3545,2470],{"class":210},[91,3547,1836],{"class":1169},[91,3549,3550,3552],{"class":93,"line":2084},[91,3551,2512],{"class":210},[91,3553,1836],{"class":1169},[91,3555,3556],{"class":93,"line":2096},[91,3557,1255],{"emptyLinePlaceholder":1254},[91,3559,3560,3562],{"class":93,"line":2108},[91,3561,2488],{"class":210},[91,3563,1836],{"class":1169},[91,3565,3566,3568],{"class":93,"line":2119},[91,3567,2529],{"class":210},[91,3569,2532],{"class":1169},[91,3571,3572,3574,3576,3578],{"class":93,"line":2125},[91,3573,2011],{"class":206},[91,3575,1830],{"class":1169},[91,3577,2016],{"class":210},[91,3579,1836],{"class":1169},[91,3581,3582,3584,3586,3588],{"class":93,"line":2131},[91,3583,2024],{"class":206},[91,3585,1830],{"class":1169},[91,3587,3028],{"class":210},[91,3589,1836],{"class":1169},[91,3591,3592,3594,3596,3599],{"class":93,"line":2137},[91,3593,2036],{"class":206},[91,3595,1830],{"class":1169},[91,3597,3598],{"class":210},"\"C:\u002Fxpack-openocd-0.12.0-7\u002Fbin\"",[91,3600,1836],{"class":1169},[91,3602,3603,3605],{"class":93,"line":2142},[91,3604,2743],{"class":206},[91,3606,2746],{"class":1169},[91,3608,3609,3611,3613,3615],{"class":93,"line":2153},[91,3610,2751],{"class":206},[91,3612,1830],{"class":1169},[91,3614,2756],{"class":206},[91,3616,1836],{"class":1169},[91,3618,3619,3621,3623],{"class":93,"line":2165},[91,3620,2763],{"class":206},[91,3622,1830],{"class":1169},[91,3624,2768],{"class":210},[91,3626,3627],{"class":93,"line":2177},[91,3628,2773],{"class":1169},[91,3630,3631,3633,3635,3637],{"class":93,"line":2188},[91,3632,2048],{"class":206},[91,3634,1830],{"class":1169},[91,3636,2053],{"class":210},[91,3638,1836],{"class":1169},[91,3640,3641,3643],{"class":93,"line":2199},[91,3642,2061],{"class":206},[91,3644,1844],{"class":1169},[91,3646,3647],{"class":93,"line":2210},[91,3648,2069],{"class":1169},[91,3650,3651,3653,3655,3657],{"class":93,"line":2221},[91,3652,2075],{"class":206},[91,3654,1830],{"class":1169},[91,3656,1931],{"class":210},[91,3658,1836],{"class":1169},[91,3660,3661,3663,3665,3667],{"class":93,"line":2232},[91,3662,2087],{"class":206},[91,3664,1830],{"class":1169},[91,3666,1994],{"class":210},[91,3668,1836],{"class":1169},[91,3670,3671,3673,3675,3677],{"class":93,"line":2243},[91,3672,2099],{"class":206},[91,3674,1830],{"class":1169},[91,3676,1931],{"class":210},[91,3678,1836],{"class":1169},[91,3680,3681,3683,3685],{"class":93,"line":2255},[91,3682,2111],{"class":206},[91,3684,1830],{"class":1169},[91,3686,2116],{"class":210},[91,3688,3689],{"class":93,"line":2266},[91,3690,2122],{"class":1169},[91,3692,3693],{"class":93,"line":2273},[91,3694,2128],{"class":1169},[91,3696,3697],{"class":93,"line":2278},[91,3698,2134],{"class":1169},[91,3700,3701],{"class":93,"line":2289},[91,3702,1849],{"class":1169},[91,3704,3705,3707,3709,3711],{"class":93,"line":2300},[91,3706,1854],{"class":206},[91,3708,1830],{"class":1169},[91,3710,1859],{"class":210},[91,3712,1836],{"class":1169},[91,3714,3715,3717,3719,3721],{"class":93,"line":2311},[91,3716,1866],{"class":206},[91,3718,1830],{"class":1169},[91,3720,2160],{"class":210},[91,3722,1836],{"class":1169},[91,3724,3725,3727,3729,3731],{"class":93,"line":2320},[91,3726,1878],{"class":206},[91,3728,1830],{"class":1169},[91,3730,2172],{"class":210},[91,3732,1836],{"class":1169},[91,3734,3735,3737,3739,3741],{"class":93,"line":2325},[91,3736,1890],{"class":206},[91,3738,1830],{"class":1169},[91,3740,1895],{"class":210},[91,3742,1836],{"class":1169},[91,3744,3745,3747,3749,3751],{"class":93,"line":2330},[91,3746,1902],{"class":206},[91,3748,1830],{"class":1169},[91,3750,1907],{"class":210},[91,3752,1836],{"class":1169},[91,3754,3755,3757,3759,3761],{"class":93,"line":2336},[91,3756,1914],{"class":206},[91,3758,1830],{"class":1169},[91,3760,1919],{"class":210},[91,3762,1836],{"class":1169},[91,3764,3765,3767,3769,3771],{"class":93,"line":2342},[91,3766,1926],{"class":206},[91,3768,1830],{"class":1169},[91,3770,1931],{"class":210},[91,3772,1836],{"class":1169},[91,3774,3775,3777,3779,3781],{"class":93,"line":3216},[91,3776,1938],{"class":206},[91,3778,1830],{"class":1169},[91,3780,1943],{"class":210},[91,3782,1836],{"class":1169},[91,3784,3785,3787,3789,3791],{"class":93,"line":3227},[91,3786,2011],{"class":206},[91,3788,1830],{"class":1169},[91,3790,2016],{"class":210},[91,3792,1836],{"class":1169},[91,3794,3795,3797,3799,3801],{"class":93,"line":3238},[91,3796,2024],{"class":206},[91,3798,1830],{"class":1169},[91,3800,2250],{"class":210},[91,3802,1836],{"class":1169},[91,3804,3805,3807,3809,3811],{"class":93,"line":3249},[91,3806,2048],{"class":206},[91,3808,1830],{"class":1169},[91,3810,2053],{"class":210},[91,3812,1836],{"class":1169},[91,3814,3815,3817],{"class":93,"line":3260},[91,3816,2061],{"class":206},[91,3818,1844],{"class":1169},[91,3820,3821],{"class":93,"line":3267},[91,3822,2069],{"class":1169},[91,3824,3825,3827,3829,3831],{"class":93,"line":3272},[91,3826,2075],{"class":206},[91,3828,1830],{"class":1169},[91,3830,1931],{"class":210},[91,3832,1836],{"class":1169},[91,3834,3835,3837,3839,3841],{"class":93,"line":3283},[91,3836,2087],{"class":206},[91,3838,1830],{"class":1169},[91,3840,1994],{"class":210},[91,3842,1836],{"class":1169},[91,3844,3845,3847,3849,3851],{"class":93,"line":3294},[91,3846,2099],{"class":206},[91,3848,1830],{"class":1169},[91,3850,1931],{"class":210},[91,3852,1836],{"class":1169},[91,3854,3855,3857,3859],{"class":93,"line":3305},[91,3856,2111],{"class":206},[91,3858,1830],{"class":1169},[91,3860,2116],{"class":210},[91,3862,3863],{"class":93,"line":3314},[91,3864,2122],{"class":1169},[91,3866,3867],{"class":93,"line":3319},[91,3868,2128],{"class":1169},[91,3870,3871],{"class":93,"line":3324},[91,3872,2333],{"class":1169},[91,3874,3875],{"class":93,"line":3329},[91,3876,2339],{"class":1169},[91,3878,3879],{"class":93,"line":3334},[91,3880,1550],{"class":1169},[188,3882,3883],{"id":3883},"如何进入调试",[1711,3885,3886],{"id":3886},"显示1",[17,3888,3889],{},"如果你是下图这样，请按下面这样做：",[17,3891,3892],{},"如果不是，请往下滑看下面的显示2。",[17,3894,3895],{},[23,3896],{"alt":110,"src":3897},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776431995915.webp",[17,3899,3900,3901,3904],{},"点完",[31,3902,3903],{},"Run and Debug","后，如下图：",[1183,3906,3907,3914,3921],{},[1186,3908,3909,29,3911],{},[31,3910,1743],{},[31,3912,3913],{},"STM32cube: STM32 Launch STLink GDB Server",[1186,3915,3916,29,3918],{},[31,3917,294],{},[31,3919,3920],{},"STM32Cube: STM32 LaunchJLink GDB Server",[1186,3922,3923,29,3925],{},[31,3924,1757],{},[31,3926,3927],{},"STM32Cube: Launch Generic GDB Server",[17,3929,3930],{},[23,3931],{"alt":25,"src":1765},[17,3933,3934],{},[23,3935],{"alt":110,"src":3897},[1711,3937,3938],{"id":3938},"显示2",[17,3940,3889],{},[17,3942,3943],{},[23,3944],{"alt":110,"src":3945},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776432039560.webp",[17,3947,3948,3949,3951],{},"你显示上面这样，可能是因为你已经有生成的",[31,3950,1752],{},"了。（这样直接点击就行）",[17,3953,3954],{},[23,3955],{"alt":110,"src":3945},[188,3957,3958],{"id":3958},"进入调试",[17,3960,3961,3962],{},"然后会出现这个条，他会下载程序到板子（仅J-link）\n",[23,3963],{"alt":110,"src":3964},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776432143180.webp",[17,3966,3967],{},"然后就成功下载了程序并进入了Debug",[17,3969,3970],{},[23,3971],{"alt":110,"src":3972},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1776432211211.webp",[17,3974,3975],{},"按照下图所示，把你要监视的变量输入到最顶上的框里，就可以加入到实时监视框里了。",[17,3977,3978],{},[23,3979],{"alt":25,"src":3980},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1791525244481-514bc00f.webp",[17,3982,3983],{},"结构体也可以：",[17,3985,3986],{},[23,3987],{"alt":25,"src":3988},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790608511630-b448c1d8.webp",[188,3990,3992,3993,3996],{"id":3991},"更换调试器软件为cortex-debug可选很没啥必要","更换调试器软件为",[31,3994,3995],{},"cortex debug","（可选，很没啥必要）：",[1711,3998,4000,4001,4003],{"id":3999},"安装cortex-debug插件","安装",[31,4002,3995],{},"插件",[17,4005,4006,4007,4009],{},"在VScode里搜索",[31,4008,3995],{},"并安装",[17,4011,4012],{},[23,4013],{"alt":25,"src":4014},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790773273575-136b328f.webp",[1711,4016,4018,4019,4021],{"id":4017},"进行launchjson的配置","进行",[31,4020,1752],{},"的配置",[17,4023,4024,4025,2413],{},"新建",[31,4026,4027],{},".vscode\u002Flaunch.json",[83,4029,4031],{"className":1799,"code":4030,"language":1801,"meta":25,"style":25},"{\n    \"version\": \"0.2.0\",\n\n    \"configurations\": [\n        {\n            \u002F\u002F 调试配置名称\n            \"name\": \"STM32 - OpenOCD - Cortex Debug\",\n\n            \u002F\u002F Cortex-Debug 固定写法\n            \"type\": \"cortex-debug\",\n\n            \u002F\u002F 下载程序并开始调试\n            \"request\": \"launch\",\n\n            \u002F\u002F 工程工作目录\n            \"cwd\": \"${workspaceFolder}\",\n\n            \u002F\u002F ★ 必改：编译生成的 ELF\n            \"executable\": \"${workspaceFolder}\u002Fbuild\u002FDebug\u002FTEST.elf\",\n\n            \u002F\u002F 使用 OpenOCD\n            \"servertype\": \"openocd\",\n\n            \u002F\u002F ★ OpenOCD 可执行文件\n            \u002F\u002F Linux 下用 which openocd 查询\n            \"serverpath\": \"\u002Fusr\u002Fbin\u002Fopenocd\",\n\n            \u002F\u002F ★ 根据调试器和 MCU 修改\n            \u002F\u002F\n            \u002F\u002F ST-Link：\n            \u002F\u002F interface\u002Fstlink.cfg\n            \u002F\u002F\n            \u002F\u002F STM32F1：\n            \u002F\u002F target\u002Fstm32f1x.cfg\n            \u002F\u002F\n            \u002F\u002F STM32F4 则是：\n            \u002F\u002F target\u002Fstm32f4x.cfg\n            \"configFiles\": [\n                \"interface\u002Fstlink.cfg\",\n                \"target\u002Fstm32f1x.cfg\"\n            ],\n\n            \u002F\u002F ★ ARM GNU Toolchain 的 bin 目录\n            \u002F\u002F 建议不要直接写 \"~\"\n            \u002F\u002F 用 ${env:HOME} 更稳\n            \"armToolchainPath\": \"${env:HOME}\u002F.local\u002Fshare\u002Fstm32cube\u002Fbundles\u002Fgnu-tools-for-stm32\u002F14.3.1+st.2\u002Fbin\",\n\n            \u002F\u002F 启动后运行到 main()\n            \"runToEntryPoint\": \"main\",\n\n            \u002F\u002F ★ Cortex Live Watch\n            \u002F\u002F OpenOCD 下可用\n            \u002F\u002F samplesPerSecond 最大 20\n            \u002F\u002F 先用 4Hz 足够\n            \"liveWatch\": {\n                \"enabled\": true,\n                \"samplesPerSecond\": 4\n            }\n\n\n            \u002F\u002F ============================================================\n            \u002F\u002F 以下为可选配置\n            \u002F\u002F ============================================================\n\n\n            \u002F\u002F 如果 Cortex-Debug 找不到 OpenOCD，\n            \u002F\u002F Linux：\n            \u002F\u002F which openocd\n            \u002F\u002F\n            \u002F\u002F 一般 Fedora 是：\n            \u002F\u002F \u002Fusr\u002Fbin\u002Fopenocd\n            \u002F\u002F\n            \u002F\u002F \"serverpath\": \"\u002Fusr\u002Fbin\u002Fopenocd\",\n\n\n            \u002F\u002F 如果 OpenOCD 找不到 interface\u002F*.cfg 或 target\u002F*.cfg，\n            \u002F\u002F Fedora 一般脚本目录在：\n            \u002F\u002F \u002Fusr\u002Fshare\u002Fopenocd\u002Fscripts\n            \u002F\u002F\n            \u002F\u002F 可以显式增加：\n            \u002F\u002F\n            \u002F\u002F \"searchDir\": [\n            \u002F\u002F     \"\u002Fusr\u002Fshare\u002Fopenocd\u002Fscripts\"\n            \u002F\u002F ],\n\n\n            \u002F\u002F 调试 Cortex-Debug \u002F OpenOCD 问题：\n            \u002F\u002F\n            \u002F\u002F \"showDevDebugOutput\": \"raw\"\n        }\n    ]\n}\n",[31,4032,4033,4037,4047,4051,4057,4061,4066,4077,4081,4086,4097,4101,4106,4116,4120,4125,4135,4139,4144,4156,4160,4165,4176,4180,4185,4190,4202,4206,4211,4216,4221,4226,4230,4235,4240,4244,4249,4254,4261,4267,4272,4277,4281,4286,4291,4296,4308,4312,4317,4328,4332,4337,4342,4347,4352,4358,4368,4377,4382,4386,4390,4395,4400,4404,4408,4412,4417,4422,4427,4431,4436,4441,4446,4452,4457,4462,4468,4474,4480,4485,4491,4496,4502,4508,4514,4519,4524,4530,4535,4541,4546,4551],{"__ignoreMap":25},[91,4034,4035],{"class":93,"line":94},[91,4036,1491],{"class":1169},[91,4038,4039,4041,4043,4045],{"class":93,"line":1096},[91,4040,1827],{"class":206},[91,4042,1830],{"class":1169},[91,4044,1833],{"class":210},[91,4046,1836],{"class":1169},[91,4048,4049],{"class":93,"line":1104},[91,4050,1255],{"emptyLinePlaceholder":1254},[91,4052,4053,4055],{"class":93,"line":1258},[91,4054,1841],{"class":206},[91,4056,1844],{"class":1169},[91,4058,4059],{"class":93,"line":1264},[91,4060,1849],{"class":1169},[91,4062,4063],{"class":93,"line":1348},[91,4064,4065],{"class":1240},"            \u002F\u002F 调试配置名称\n",[91,4067,4068,4070,4072,4075],{"class":93,"line":1365},[91,4069,1878],{"class":206},[91,4071,1830],{"class":1169},[91,4073,4074],{"class":210},"\"STM32 - OpenOCD - Cortex Debug\"",[91,4076,1836],{"class":1169},[91,4078,4079],{"class":93,"line":1377},[91,4080,1255],{"emptyLinePlaceholder":1254},[91,4082,4083],{"class":93,"line":1488},[91,4084,4085],{"class":1240},"            \u002F\u002F Cortex-Debug 固定写法\n",[91,4087,4088,4090,4092,4095],{"class":93,"line":1494},[91,4089,1854],{"class":206},[91,4091,1830],{"class":1169},[91,4093,4094],{"class":210},"\"cortex-debug\"",[91,4096,1836],{"class":1169},[91,4098,4099],{"class":93,"line":1503},[91,4100,1255],{"emptyLinePlaceholder":1254},[91,4102,4103],{"class":93,"line":1509},[91,4104,4105],{"class":1240},"            \u002F\u002F 下载程序并开始调试\n",[91,4107,4108,4110,4112,4114],{"class":93,"line":1518},[91,4109,1866],{"class":206},[91,4111,1830],{"class":1169},[91,4113,1871],{"class":210},[91,4115,1836],{"class":1169},[91,4117,4118],{"class":93,"line":1527},[91,4119,1255],{"emptyLinePlaceholder":1254},[91,4121,4122],{"class":93,"line":1541},[91,4123,4124],{"class":1240},"            \u002F\u002F 工程工作目录\n",[91,4126,4127,4129,4131,4133],{"class":93,"line":1547},[91,4128,1902],{"class":206},[91,4130,1830],{"class":1169},[91,4132,1907],{"class":210},[91,4134,1836],{"class":1169},[91,4136,4137],{"class":93,"line":1960},[91,4138,1255],{"emptyLinePlaceholder":1254},[91,4140,4141],{"class":93,"line":1973},[91,4142,4143],{"class":1240},"            \u002F\u002F ★ 必改：编译生成的 ELF\n",[91,4145,4146,4149,4151,4154],{"class":93,"line":1986},[91,4147,4148],{"class":206},"            \"executable\"",[91,4150,1830],{"class":1169},[91,4152,4153],{"class":210},"\"${workspaceFolder}\u002Fbuild\u002FDebug\u002FTEST.elf\"",[91,4155,1836],{"class":1169},[91,4157,4158],{"class":93,"line":1999},[91,4159,1255],{"emptyLinePlaceholder":1254},[91,4161,4162],{"class":93,"line":2008},[91,4163,4164],{"class":1240},"            \u002F\u002F 使用 OpenOCD\n",[91,4166,4167,4170,4172,4174],{"class":93,"line":2021},[91,4168,4169],{"class":206},"            \"servertype\"",[91,4171,1830],{"class":1169},[91,4173,2941],{"class":210},[91,4175,1836],{"class":1169},[91,4177,4178],{"class":93,"line":2033},[91,4179,1255],{"emptyLinePlaceholder":1254},[91,4181,4182],{"class":93,"line":2045},[91,4183,4184],{"class":1240},"            \u002F\u002F ★ OpenOCD 可执行文件\n",[91,4186,4187],{"class":93,"line":2058},[91,4188,4189],{"class":1240},"            \u002F\u002F Linux 下用 which openocd 查询\n",[91,4191,4192,4195,4197,4200],{"class":93,"line":2066},[91,4193,4194],{"class":206},"            \"serverpath\"",[91,4196,1830],{"class":1169},[91,4198,4199],{"class":210},"\"\u002Fusr\u002Fbin\u002Fopenocd\"",[91,4201,1836],{"class":1169},[91,4203,4204],{"class":93,"line":2072},[91,4205,1255],{"emptyLinePlaceholder":1254},[91,4207,4208],{"class":93,"line":2084},[91,4209,4210],{"class":1240},"            \u002F\u002F ★ 根据调试器和 MCU 修改\n",[91,4212,4213],{"class":93,"line":2096},[91,4214,4215],{"class":1240},"            \u002F\u002F\n",[91,4217,4218],{"class":93,"line":2108},[91,4219,4220],{"class":1240},"            \u002F\u002F ST-Link：\n",[91,4222,4223],{"class":93,"line":2119},[91,4224,4225],{"class":1240},"            \u002F\u002F interface\u002Fstlink.cfg\n",[91,4227,4228],{"class":93,"line":2125},[91,4229,4215],{"class":1240},[91,4231,4232],{"class":93,"line":2131},[91,4233,4234],{"class":1240},"            \u002F\u002F STM32F1：\n",[91,4236,4237],{"class":93,"line":2137},[91,4238,4239],{"class":1240},"            \u002F\u002F target\u002Fstm32f1x.cfg\n",[91,4241,4242],{"class":93,"line":2142},[91,4243,4215],{"class":1240},[91,4245,4246],{"class":93,"line":2153},[91,4247,4248],{"class":1240},"            \u002F\u002F STM32F4 则是：\n",[91,4250,4251],{"class":93,"line":2165},[91,4252,4253],{"class":1240},"            \u002F\u002F target\u002Fstm32f4x.cfg\n",[91,4255,4256,4259],{"class":93,"line":2177},[91,4257,4258],{"class":206},"            \"configFiles\"",[91,4260,1844],{"class":1169},[91,4262,4263,4265],{"class":93,"line":2188},[91,4264,2477],{"class":210},[91,4266,1836],{"class":1169},[91,4268,4269],{"class":93,"line":2199},[91,4270,4271],{"class":210},"                \"target\u002Fstm32f1x.cfg\"\n",[91,4273,4274],{"class":93,"line":2210},[91,4275,4276],{"class":1169},"            ],\n",[91,4278,4279],{"class":93,"line":2221},[91,4280,1255],{"emptyLinePlaceholder":1254},[91,4282,4283],{"class":93,"line":2232},[91,4284,4285],{"class":1240},"            \u002F\u002F ★ ARM GNU Toolchain 的 bin 目录\n",[91,4287,4288],{"class":93,"line":2243},[91,4289,4290],{"class":1240},"            \u002F\u002F 建议不要直接写 \"~\"\n",[91,4292,4293],{"class":93,"line":2255},[91,4294,4295],{"class":1240},"            \u002F\u002F 用 ${env:HOME} 更稳\n",[91,4297,4298,4301,4303,4306],{"class":93,"line":2266},[91,4299,4300],{"class":206},"            \"armToolchainPath\"",[91,4302,1830],{"class":1169},[91,4304,4305],{"class":210},"\"${env:HOME}\u002F.local\u002Fshare\u002Fstm32cube\u002Fbundles\u002Fgnu-tools-for-stm32\u002F14.3.1+st.2\u002Fbin\"",[91,4307,1836],{"class":1169},[91,4309,4310],{"class":93,"line":2273},[91,4311,1255],{"emptyLinePlaceholder":1254},[91,4313,4314],{"class":93,"line":2278},[91,4315,4316],{"class":1240},"            \u002F\u002F 启动后运行到 main()\n",[91,4318,4319,4322,4324,4326],{"class":93,"line":2289},[91,4320,4321],{"class":206},"            \"runToEntryPoint\"",[91,4323,1830],{"class":1169},[91,4325,2053],{"class":210},[91,4327,1836],{"class":1169},[91,4329,4330],{"class":93,"line":2300},[91,4331,1255],{"emptyLinePlaceholder":1254},[91,4333,4334],{"class":93,"line":2311},[91,4335,4336],{"class":1240},"            \u002F\u002F ★ Cortex Live Watch\n",[91,4338,4339],{"class":93,"line":2320},[91,4340,4341],{"class":1240},"            \u002F\u002F OpenOCD 下可用\n",[91,4343,4344],{"class":93,"line":2325},[91,4345,4346],{"class":1240},"            \u002F\u002F samplesPerSecond 最大 20\n",[91,4348,4349],{"class":93,"line":2330},[91,4350,4351],{"class":1240},"            \u002F\u002F 先用 4Hz 足够\n",[91,4353,4354,4356],{"class":93,"line":2336},[91,4355,2743],{"class":206},[91,4357,2746],{"class":1169},[91,4359,4360,4362,4364,4366],{"class":93,"line":2342},[91,4361,2751],{"class":206},[91,4363,1830],{"class":1169},[91,4365,2756],{"class":206},[91,4367,1836],{"class":1169},[91,4369,4370,4372,4374],{"class":93,"line":3216},[91,4371,2763],{"class":206},[91,4373,1830],{"class":1169},[91,4375,4376],{"class":206},"4\n",[91,4378,4379],{"class":93,"line":3227},[91,4380,4381],{"class":1169},"            }\n",[91,4383,4384],{"class":93,"line":3238},[91,4385,1255],{"emptyLinePlaceholder":1254},[91,4387,4388],{"class":93,"line":3249},[91,4389,1255],{"emptyLinePlaceholder":1254},[91,4391,4392],{"class":93,"line":3260},[91,4393,4394],{"class":1240},"            \u002F\u002F ============================================================\n",[91,4396,4397],{"class":93,"line":3267},[91,4398,4399],{"class":1240},"            \u002F\u002F 以下为可选配置\n",[91,4401,4402],{"class":93,"line":3272},[91,4403,4394],{"class":1240},[91,4405,4406],{"class":93,"line":3283},[91,4407,1255],{"emptyLinePlaceholder":1254},[91,4409,4410],{"class":93,"line":3294},[91,4411,1255],{"emptyLinePlaceholder":1254},[91,4413,4414],{"class":93,"line":3305},[91,4415,4416],{"class":1240},"            \u002F\u002F 如果 Cortex-Debug 找不到 OpenOCD，\n",[91,4418,4419],{"class":93,"line":3314},[91,4420,4421],{"class":1240},"            \u002F\u002F Linux：\n",[91,4423,4424],{"class":93,"line":3319},[91,4425,4426],{"class":1240},"            \u002F\u002F which openocd\n",[91,4428,4429],{"class":93,"line":3324},[91,4430,4215],{"class":1240},[91,4432,4433],{"class":93,"line":3329},[91,4434,4435],{"class":1240},"            \u002F\u002F 一般 Fedora 是：\n",[91,4437,4438],{"class":93,"line":3334},[91,4439,4440],{"class":1240},"            \u002F\u002F \u002Fusr\u002Fbin\u002Fopenocd\n",[91,4442,4444],{"class":93,"line":4443},72,[91,4445,4215],{"class":1240},[91,4447,4449],{"class":93,"line":4448},73,[91,4450,4451],{"class":1240},"            \u002F\u002F \"serverpath\": \"\u002Fusr\u002Fbin\u002Fopenocd\",\n",[91,4453,4455],{"class":93,"line":4454},74,[91,4456,1255],{"emptyLinePlaceholder":1254},[91,4458,4460],{"class":93,"line":4459},75,[91,4461,1255],{"emptyLinePlaceholder":1254},[91,4463,4465],{"class":93,"line":4464},76,[91,4466,4467],{"class":1240},"            \u002F\u002F 如果 OpenOCD 找不到 interface\u002F*.cfg 或 target\u002F*.cfg，\n",[91,4469,4471],{"class":93,"line":4470},77,[91,4472,4473],{"class":1240},"            \u002F\u002F Fedora 一般脚本目录在：\n",[91,4475,4477],{"class":93,"line":4476},78,[91,4478,4479],{"class":1240},"            \u002F\u002F \u002Fusr\u002Fshare\u002Fopenocd\u002Fscripts\n",[91,4481,4483],{"class":93,"line":4482},79,[91,4484,4215],{"class":1240},[91,4486,4488],{"class":93,"line":4487},80,[91,4489,4490],{"class":1240},"            \u002F\u002F 可以显式增加：\n",[91,4492,4494],{"class":93,"line":4493},81,[91,4495,4215],{"class":1240},[91,4497,4499],{"class":93,"line":4498},82,[91,4500,4501],{"class":1240},"            \u002F\u002F \"searchDir\": [\n",[91,4503,4505],{"class":93,"line":4504},83,[91,4506,4507],{"class":1240},"            \u002F\u002F     \"\u002Fusr\u002Fshare\u002Fopenocd\u002Fscripts\"\n",[91,4509,4511],{"class":93,"line":4510},84,[91,4512,4513],{"class":1240},"            \u002F\u002F ],\n",[91,4515,4517],{"class":93,"line":4516},85,[91,4518,1255],{"emptyLinePlaceholder":1254},[91,4520,4522],{"class":93,"line":4521},86,[91,4523,1255],{"emptyLinePlaceholder":1254},[91,4525,4527],{"class":93,"line":4526},87,[91,4528,4529],{"class":1240},"            \u002F\u002F 调试 Cortex-Debug \u002F OpenOCD 问题：\n",[91,4531,4533],{"class":93,"line":4532},88,[91,4534,4215],{"class":1240},[91,4536,4538],{"class":93,"line":4537},89,[91,4539,4540],{"class":1240},"            \u002F\u002F \"showDevDebugOutput\": \"raw\"\n",[91,4542,4544],{"class":93,"line":4543},90,[91,4545,2333],{"class":1169},[91,4547,4549],{"class":93,"line":4548},91,[91,4550,2339],{"class":1169},[91,4552,4554],{"class":93,"line":4553},92,[91,4555,1550],{"class":1169},[17,4557,4558,4559,4562,4563,4562,4566,732,4569,736],{},"目前我们要知道三件事，",[31,4560,4561],{},"configFiles","，",[31,4564,4565],{},"executable",[31,4567,4568],{},"armToolchainPath",[31,4570,4571],{},"serverpath",[2407,4573,4574],{},[1186,4575,4576,2413],{},[31,4577,4561],{},[17,4579,4580,4581],{},"参考 ",[184,4582,2374],{"href":2373},[17,4584,728,4585,732,4587,4589,4590,882],{},[31,4586,731],{},[31,4588,735],{},"：\n所以",[31,4591,4592],{},"\"configFiles\": [\"interface\u002Fstlink.cfg\",\"target\u002Fstm32f1x.cfg\"]",[2407,4594,4595],{"start":1096},[1186,4596,4597,2413],{},[31,4598,4565],{},[17,4600,4601],{},"用vscode的终端命令直接查找下，或者直接在VScode的文件管理器里找：",[83,4603,4605],{"className":85,"code":4604,"language":87,"meta":25,"style":25},"# Linux\nfind build -name \"*.elf\"\n",[31,4606,4607,4611],{"__ignoreMap":25},[91,4608,4609],{"class":93,"line":94},[91,4610,2640],{"class":1240},[91,4612,4613,4616,4619,4622],{"class":93,"line":1096},[91,4614,4615],{"class":97},"find",[91,4617,4618],{"class":210}," build",[91,4620,4621],{"class":206}," -name",[91,4623,4624],{"class":210}," \"*.elf\"\n",[83,4626,4630],{"className":4627,"code":4628,"language":4629,"meta":25,"style":25},"language-powershell shiki shiki-themes github-light github-dark","# Windows\ngci build -Recurse -File -Filter \"*.elf\"\n","powershell",[31,4631,4632,4636],{"__ignoreMap":25},[91,4633,4634],{"class":93,"line":94},[91,4635,2657],{},[91,4637,4638],{"class":93,"line":1096},[91,4639,4640],{},"gci build -Recurse -File -Filter \"*.elf\"\n",[1690,4642,4643],{},[17,4644,4645,4646,4648,4649,882],{},"注意，Windows要用",[31,4647,4629],{},",不可以用",[31,4650,4651],{},"cmd",[17,4653,4654],{},[23,4655],{"alt":25,"src":4656},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790776029379-8fe367ee.webp",[17,4658,4659,4660,882],{},"如上图所示，在",[31,4661,4662],{},"build\u002FDebug\u002FTEST.elf",[17,4664,4665,4666,4668,4669,882],{},"所以",[31,4667,4565],{}," = ",[31,4670,4671],{},"${workspaceFolder}\u002Fbuild\u002FDebug\u002FTEST.elf",[2407,4673,4674],{"start":1104},[1186,4675,4676,2413],{},[31,4677,4568],{},[17,4679,4680],{},"用vscode的终端命令直接查找下：",[83,4682,4684],{"className":85,"code":4683,"language":87,"meta":25,"style":25},"cube bundle show --project\n",[31,4685,4686],{"__ignoreMap":25},[91,4687,4688,4691,4694,4697],{"class":93,"line":94},[91,4689,4690],{"class":97},"cube",[91,4692,4693],{"class":210}," bundle",[91,4695,4696],{"class":210}," show",[91,4698,4699],{"class":206}," --project\n",[17,4701,4702],{},[23,4703],{"alt":25,"src":4704},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790776233140-6b8addf2.webp",[17,4706,4707,4708],{},"这个输出说明，我在用",[31,4709,4710],{},"gnu-tools-for-stm32@14.3.1+st.2",[17,4712,4713],{},"用命令找他在哪：",[83,4715,4717],{"className":85,"code":4716,"language":87,"meta":25,"style":25},"# Linux\nfind ~\u002F.local\u002Fshare\u002Fstm32cube\u002Fbundles\u002Fgnu-tools-for-stm32 \\\n  -type f -name \"arm-none-eabi-gdb\"\n",[31,4718,4719,4723,4733],{"__ignoreMap":25},[91,4720,4721],{"class":93,"line":94},[91,4722,2640],{"class":1240},[91,4724,4725,4727,4730],{"class":93,"line":1096},[91,4726,4615],{"class":97},[91,4728,4729],{"class":210}," ~\u002F.local\u002Fshare\u002Fstm32cube\u002Fbundles\u002Fgnu-tools-for-stm32",[91,4731,4732],{"class":206}," \\\n",[91,4734,4735,4738,4741,4743],{"class":93,"line":1104},[91,4736,4737],{"class":206},"  -type",[91,4739,4740],{"class":210}," f",[91,4742,4621],{"class":206},[91,4744,4745],{"class":210}," \"arm-none-eabi-gdb\"\n",[83,4747,4749],{"className":4627,"code":4748,"language":4629,"meta":25,"style":25},"# Windows\ngci \"$env:LOCALAPPDATA\\stm32cube\\bundles\\gnu-tools-for-stm32\" `\n  -Recurse -File -Filter \"arm-none-eabi-gdb.exe\"\n",[31,4750,4751,4755,4760],{"__ignoreMap":25},[91,4752,4753],{"class":93,"line":94},[91,4754,2657],{},[91,4756,4757],{"class":93,"line":1096},[91,4758,4759],{},"gci \"$env:LOCALAPPDATA\\stm32cube\\bundles\\gnu-tools-for-stm32\" `\n",[91,4761,4762],{"class":93,"line":1104},[91,4763,4764],{},"  -Recurse -File -Filter \"arm-none-eabi-gdb.exe\"\n",[1690,4766,4767],{},[17,4768,4645,4769,4648,4771,882],{},[31,4770,4629],{},[31,4772,4651],{},[17,4774,4775],{},[23,4776],{"alt":25,"src":4777},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790776572642-f50c57f3.webp",[17,4779,4780],{},"复制输出结果：",[83,4782,4785],{"className":4783,"code":4784,"language":783,"meta":25},[781],"\u002Fhome\u002Ftungchiahui\u002F.local\u002Fshare\u002Fstm32cube\u002Fbundles\u002Fgnu-tools-for-stm32\u002F14.3.1+st.2\u002Fbin\u002Farm-none-eabi-gdb\n",[31,4786,4784],{"__ignoreMap":25},[17,4788,4789,4790,4793,4794,4797],{},"但是去掉最后的执行程序",[31,4791,4792],{},"arm-none-eabi-gdb","，只需要到",[31,4795,4796],{},"bin","即可：",[83,4799,4802],{"className":4800,"code":4801,"language":783,"meta":25},[781],"\u002Fhome\u002Ftungchiahui\u002F.local\u002Fshare\u002Fstm32cube\u002Fbundles\u002Fgnu-tools-for-stm32\u002F14.3.1+st.2\u002Fbin\n",[31,4803,4801],{"__ignoreMap":25},[17,4805,4665,4806,4668,4808,882],{},[31,4807,4568],{},[31,4809,4810],{},"\u002Fhome\u002Ftungchiahui\u002F.local\u002Fshare\u002Fstm32cube\u002Fbundles\u002Fgnu-tools-for-stm32\u002F14.3.1+st.2\u002Fbin",[2407,4812,4813],{"start":1258},[1186,4814,4815,2413],{},[31,4816,4571],{},[17,4818,2630],{},[83,4820,4822],{"className":85,"code":4821,"language":87,"meta":25,"style":25},"# Linux\nwhich openocd\n",[31,4823,4824,4828],{"__ignoreMap":25},[91,4825,4826],{"class":93,"line":94},[91,4827,2640],{"class":1240},[91,4829,4830,4832],{"class":93,"line":1096},[91,4831,2645],{"class":206},[91,4833,2648],{"class":210},[17,4835,4836],{},[23,4837],{"alt":25,"src":2669},[17,4839,4840],{},"而Windows,你自己装哪的你应该知道吧。。。",[17,4842,4843,4844,2413],{},"最终的",[31,4845,1752],{},[83,4847,4849],{"className":1799,"code":4848,"language":1801,"meta":25,"style":25},"{\n    \"version\": \"0.2.0\",\n\n    \"configurations\": [\n        {\n            \u002F\u002F 调试配置名称\n            \"name\": \"STM32 - OpenOCD - Cortex Debug\",\n\n            \u002F\u002F Cortex-Debug 固定写法\n            \"type\": \"cortex-debug\",\n\n            \u002F\u002F 下载程序并开始调试\n            \"request\": \"launch\",\n\n            \u002F\u002F 工程工作目录\n            \"cwd\": \"${workspaceFolder}\",\n\n            \u002F\u002F ★ 必改：编译生成的 ELF\n            \"executable\": \"${workspaceFolder}\u002Fbuild\u002FDebug\u002FTEST.elf\",\n\n            \u002F\u002F 使用 OpenOCD\n            \"servertype\": \"openocd\",\n\n            \u002F\u002F ★ OpenOCD 可执行文件\n            \u002F\u002F Linux 下用 which openocd 查询\n            \"serverpath\": \"\u002Fusr\u002Fbin\u002Fopenocd\",\n\n            \u002F\u002F ★ 根据调试器和 MCU 修改\n            \u002F\u002F\n            \u002F\u002F ST-Link：\n            \u002F\u002F interface\u002Fstlink.cfg\n            \u002F\u002F\n            \u002F\u002F STM32F1：\n            \u002F\u002F target\u002Fstm32f1x.cfg\n            \u002F\u002F\n            \u002F\u002F STM32F4 则是：\n            \u002F\u002F target\u002Fstm32f4x.cfg\n            \"configFiles\": [\n                \"interface\u002Fstlink.cfg\",\n                \"target\u002Fstm32f1x.cfg\"\n            ],\n\n            \u002F\u002F ★ ARM GNU Toolchain 的 bin 目录\n            \u002F\u002F 建议不要直接写 \"~\"\n            \u002F\u002F 用 ${env:HOME} 更稳\n            \"armToolchainPath\": \"\u002Fhome\u002Ftungchiahui\u002F.local\u002Fshare\u002Fstm32cube\u002Fbundles\u002Fgnu-tools-for-stm32\u002F14.3.1+st.2\u002Fbin\",\n\n            \u002F\u002F 启动后运行到 main()\n            \"runToEntryPoint\": \"main\",\n\n            \u002F\u002F ★ Cortex Live Watch\n            \u002F\u002F OpenOCD 下可用\n            \u002F\u002F samplesPerSecond 最大 20\n            \u002F\u002F 先用 4Hz 足够\n            \"liveWatch\": {\n                \"enabled\": true,\n                \"samplesPerSecond\": 4\n            }\n        }\n    ]\n}\n",[31,4850,4851,4855,4865,4869,4875,4879,4883,4893,4897,4901,4911,4915,4919,4929,4933,4937,4947,4951,4955,4965,4969,4973,4983,4987,4991,4995,5005,5009,5013,5017,5021,5025,5029,5033,5037,5041,5045,5049,5055,5061,5065,5069,5073,5077,5081,5085,5096,5100,5104,5114,5118,5122,5126,5130,5134,5140,5150,5158,5162,5166,5170],{"__ignoreMap":25},[91,4852,4853],{"class":93,"line":94},[91,4854,1491],{"class":1169},[91,4856,4857,4859,4861,4863],{"class":93,"line":1096},[91,4858,1827],{"class":206},[91,4860,1830],{"class":1169},[91,4862,1833],{"class":210},[91,4864,1836],{"class":1169},[91,4866,4867],{"class":93,"line":1104},[91,4868,1255],{"emptyLinePlaceholder":1254},[91,4870,4871,4873],{"class":93,"line":1258},[91,4872,1841],{"class":206},[91,4874,1844],{"class":1169},[91,4876,4877],{"class":93,"line":1264},[91,4878,1849],{"class":1169},[91,4880,4881],{"class":93,"line":1348},[91,4882,4065],{"class":1240},[91,4884,4885,4887,4889,4891],{"class":93,"line":1365},[91,4886,1878],{"class":206},[91,4888,1830],{"class":1169},[91,4890,4074],{"class":210},[91,4892,1836],{"class":1169},[91,4894,4895],{"class":93,"line":1377},[91,4896,1255],{"emptyLinePlaceholder":1254},[91,4898,4899],{"class":93,"line":1488},[91,4900,4085],{"class":1240},[91,4902,4903,4905,4907,4909],{"class":93,"line":1494},[91,4904,1854],{"class":206},[91,4906,1830],{"class":1169},[91,4908,4094],{"class":210},[91,4910,1836],{"class":1169},[91,4912,4913],{"class":93,"line":1503},[91,4914,1255],{"emptyLinePlaceholder":1254},[91,4916,4917],{"class":93,"line":1509},[91,4918,4105],{"class":1240},[91,4920,4921,4923,4925,4927],{"class":93,"line":1518},[91,4922,1866],{"class":206},[91,4924,1830],{"class":1169},[91,4926,1871],{"class":210},[91,4928,1836],{"class":1169},[91,4930,4931],{"class":93,"line":1527},[91,4932,1255],{"emptyLinePlaceholder":1254},[91,4934,4935],{"class":93,"line":1541},[91,4936,4124],{"class":1240},[91,4938,4939,4941,4943,4945],{"class":93,"line":1547},[91,4940,1902],{"class":206},[91,4942,1830],{"class":1169},[91,4944,1907],{"class":210},[91,4946,1836],{"class":1169},[91,4948,4949],{"class":93,"line":1960},[91,4950,1255],{"emptyLinePlaceholder":1254},[91,4952,4953],{"class":93,"line":1973},[91,4954,4143],{"class":1240},[91,4956,4957,4959,4961,4963],{"class":93,"line":1986},[91,4958,4148],{"class":206},[91,4960,1830],{"class":1169},[91,4962,4153],{"class":210},[91,4964,1836],{"class":1169},[91,4966,4967],{"class":93,"line":1999},[91,4968,1255],{"emptyLinePlaceholder":1254},[91,4970,4971],{"class":93,"line":2008},[91,4972,4164],{"class":1240},[91,4974,4975,4977,4979,4981],{"class":93,"line":2021},[91,4976,4169],{"class":206},[91,4978,1830],{"class":1169},[91,4980,2941],{"class":210},[91,4982,1836],{"class":1169},[91,4984,4985],{"class":93,"line":2033},[91,4986,1255],{"emptyLinePlaceholder":1254},[91,4988,4989],{"class":93,"line":2045},[91,4990,4184],{"class":1240},[91,4992,4993],{"class":93,"line":2058},[91,4994,4189],{"class":1240},[91,4996,4997,4999,5001,5003],{"class":93,"line":2066},[91,4998,4194],{"class":206},[91,5000,1830],{"class":1169},[91,5002,4199],{"class":210},[91,5004,1836],{"class":1169},[91,5006,5007],{"class":93,"line":2072},[91,5008,1255],{"emptyLinePlaceholder":1254},[91,5010,5011],{"class":93,"line":2084},[91,5012,4210],{"class":1240},[91,5014,5015],{"class":93,"line":2096},[91,5016,4215],{"class":1240},[91,5018,5019],{"class":93,"line":2108},[91,5020,4220],{"class":1240},[91,5022,5023],{"class":93,"line":2119},[91,5024,4225],{"class":1240},[91,5026,5027],{"class":93,"line":2125},[91,5028,4215],{"class":1240},[91,5030,5031],{"class":93,"line":2131},[91,5032,4234],{"class":1240},[91,5034,5035],{"class":93,"line":2137},[91,5036,4239],{"class":1240},[91,5038,5039],{"class":93,"line":2142},[91,5040,4215],{"class":1240},[91,5042,5043],{"class":93,"line":2153},[91,5044,4248],{"class":1240},[91,5046,5047],{"class":93,"line":2165},[91,5048,4253],{"class":1240},[91,5050,5051,5053],{"class":93,"line":2177},[91,5052,4258],{"class":206},[91,5054,1844],{"class":1169},[91,5056,5057,5059],{"class":93,"line":2188},[91,5058,2477],{"class":210},[91,5060,1836],{"class":1169},[91,5062,5063],{"class":93,"line":2199},[91,5064,4271],{"class":210},[91,5066,5067],{"class":93,"line":2210},[91,5068,4276],{"class":1169},[91,5070,5071],{"class":93,"line":2221},[91,5072,1255],{"emptyLinePlaceholder":1254},[91,5074,5075],{"class":93,"line":2232},[91,5076,4285],{"class":1240},[91,5078,5079],{"class":93,"line":2243},[91,5080,4290],{"class":1240},[91,5082,5083],{"class":93,"line":2255},[91,5084,4295],{"class":1240},[91,5086,5087,5089,5091,5094],{"class":93,"line":2266},[91,5088,4300],{"class":206},[91,5090,1830],{"class":1169},[91,5092,5093],{"class":210},"\"\u002Fhome\u002Ftungchiahui\u002F.local\u002Fshare\u002Fstm32cube\u002Fbundles\u002Fgnu-tools-for-stm32\u002F14.3.1+st.2\u002Fbin\"",[91,5095,1836],{"class":1169},[91,5097,5098],{"class":93,"line":2273},[91,5099,1255],{"emptyLinePlaceholder":1254},[91,5101,5102],{"class":93,"line":2278},[91,5103,4316],{"class":1240},[91,5105,5106,5108,5110,5112],{"class":93,"line":2289},[91,5107,4321],{"class":206},[91,5109,1830],{"class":1169},[91,5111,2053],{"class":210},[91,5113,1836],{"class":1169},[91,5115,5116],{"class":93,"line":2300},[91,5117,1255],{"emptyLinePlaceholder":1254},[91,5119,5120],{"class":93,"line":2311},[91,5121,4336],{"class":1240},[91,5123,5124],{"class":93,"line":2320},[91,5125,4341],{"class":1240},[91,5127,5128],{"class":93,"line":2325},[91,5129,4346],{"class":1240},[91,5131,5132],{"class":93,"line":2330},[91,5133,4351],{"class":1240},[91,5135,5136,5138],{"class":93,"line":2336},[91,5137,2743],{"class":206},[91,5139,2746],{"class":1169},[91,5141,5142,5144,5146,5148],{"class":93,"line":2342},[91,5143,2751],{"class":206},[91,5145,1830],{"class":1169},[91,5147,2756],{"class":206},[91,5149,1836],{"class":1169},[91,5151,5152,5154,5156],{"class":93,"line":3216},[91,5153,2763],{"class":206},[91,5155,1830],{"class":1169},[91,5157,4376],{"class":206},[91,5159,5160],{"class":93,"line":3227},[91,5161,4381],{"class":1169},[91,5163,5164],{"class":93,"line":3238},[91,5165,2333],{"class":1169},[91,5167,5168],{"class":93,"line":3249},[91,5169,2339],{"class":1169},[91,5171,5172],{"class":93,"line":3260},[91,5173,1550],{"class":1169},[1711,5175,5177],{"id":5176},"debug与livewatch","Debug与LiveWatch",[17,5179,5180],{},"先编译",[17,5182,5183],{},[23,5184],{"alt":25,"src":5185},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790779823836-11e63de7.webp",[17,5187,5188],{},"点击进入debug：",[17,5190,5191],{},[23,5192],{"alt":25,"src":5193},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790779844026-cbb6d48e.webp",[17,5195,5196],{},"成功进入：",[17,5198,5199],{},[23,5200],{"alt":25,"src":5201},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790779922152-6ec02de5.webp",[17,5203,5204,5205,2413],{},"复制一个你程序里的某个全局变量，我这里是",[31,5206,5207],{},"cmd_vel2",[17,5209,5210,5211,5214,5215,736],{},"填到",[31,5212,5213],{},"cortex live watch","，注意不是",[31,5216,5217],{},"stm32cube live watch",[17,5219,5220],{},[23,5221],{"alt":25,"src":5222},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790779948053-cd3fcb69.webp",[17,5224,5225,5226],{},"然后点运行看一下变量",[31,5227,5207],{},[17,5229,5230],{},[23,5231],{"alt":25,"src":5232},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790779999914-cf9b099a.webp",[17,5234,5235],{},"是不断在变化的：",[17,5237,5238],{},[23,5239],{"alt":25,"src":5240},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790780025415-338a7c30.webp",[17,5242,5243],{},[23,5244],{"alt":25,"src":5245},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F04\u002F17\u002F1790780038391-54b2f46b.webp",[787,5247,5248],{"id":5248},"常见问题",[17,5250,5251],{},[184,5252],{"id":5253},"usb-permissions",[12,5255,5257],{"id":5256},"linux下usb权限问题","Linux下USB权限问题",[1690,5259,5260],{},[17,5261,5262],{},[248,5263,5264],{},"如果你都正常识别出设备了，则没必要做这一步了",[1690,5266,5267],{},[17,5268,5269],{},"如果你遇到的话，你解决不了就让AI来解决，AI几秒钟就给你把事办了",[17,5271,5272,5273,5276],{},"如果调试器插上后能在 ",[31,5274,5275],{},"lsusb"," 中看到，但 VS Code 找不到设备，或者调试输出中出现下面的报错，通常是当前用户没有访问 USB 设备节点的权限：",[83,5278,5281],{"className":5279,"code":5280,"language":783,"meta":25},[781],"libusb couldn't open USB device \u002Fdev\u002Fbus\u002Fusb\u002F001\u002F008, errno=13\nlibusb requires write access to USB device nodes\nST-Link enumeration failed\n",[31,5282,5280],{"__ignoreMap":25},[17,5284,5285,5286,5288,5289,5292,5293,5296],{},"先在终端运行 ",[31,5287,5275],{},"，确认调试器已被系统识别。报错中的 ",[31,5290,5291],{},"\u002Fdev\u002Fbus\u002Fusb\u002F001\u002F008"," 只是示例，实际路径以你自己的输出为准。可以用 ",[31,5294,5295],{},"ls -l"," 查看该节点的权限：",[83,5298,5300],{"className":85,"code":5299,"language":87,"meta":25,"style":25},"lsusb\nls -l \u002Fdev\u002Fbus\u002Fusb\u002F001\u002F008\n",[31,5301,5302,5307],{"__ignoreMap":25},[91,5303,5304],{"class":93,"line":94},[91,5305,5306],{"class":97},"lsusb\n",[91,5308,5309,5312,5315],{"class":93,"line":1096},[91,5310,5311],{"class":97},"ls",[91,5313,5314],{"class":206}," -l",[91,5316,5317],{"class":210}," \u002Fdev\u002Fbus\u002Fusb\u002F001\u002F008\n",[17,5319,5320,5321,5324],{},"**使用 ST-Link：**先按上文点击插件中的 ",[31,5322,5323],{},"install ST-Link udev rules","。如果仍然报权限错误，检查规则是否装到了系统中：",[83,5326,5328],{"className":85,"code":5327,"language":87,"meta":25,"style":25},"find \u002Fetc\u002Fudev\u002Frules.d \u002Fusr\u002Flib\u002Fudev\u002Frules.d -maxdepth 1 -iname '*stlink*.rules' -print 2>\u002Fdev\u002Fnull\n",[31,5329,5330],{"__ignoreMap":25},[91,5331,5332,5334,5337,5340,5343,5346,5349,5352,5355,5358],{"class":93,"line":94},[91,5333,4615],{"class":97},[91,5335,5336],{"class":210}," \u002Fetc\u002Fudev\u002Frules.d",[91,5338,5339],{"class":210}," \u002Fusr\u002Flib\u002Fudev\u002Frules.d",[91,5341,5342],{"class":206}," -maxdepth",[91,5344,5345],{"class":206}," 1",[91,5347,5348],{"class":206}," -iname",[91,5350,5351],{"class":210}," '*stlink*.rules'",[91,5353,5354],{"class":206}," -print",[91,5356,5357],{"class":1089}," 2>",[91,5359,5360],{"class":210},"\u002Fdev\u002Fnull\n",[17,5362,5363,5364,5369,5370,5373,5374,5377,5378,5381,5382,5385],{},"如果没有找到规则，可以从 ST 官方的 ",[184,5365,5368],{"href":5366,"rel":5367},"https:\u002F\u002Fwww.st.com\u002Fen\u002Fdevelopment-tools\u002Fstsw-link007.html",[880],"STSW-LINK007 下载页","获取安装包。解压后进入 ",[31,5371,5372],{},"AllPlatforms\u002FStlinkRulesFilesForLinux","，按其中的 ",[31,5375,5376],{},"readme.txt"," 安装与你的发行版对应的 udev 规则包。在这个目录中，Fedora 使用 ",[31,5379,5380],{},".rpm"," 包，Ubuntu\u002FDebian 使用 ",[31,5383,5384],{},".deb"," 包：",[83,5387,5389],{"className":85,"code":5388,"language":87,"meta":25,"style":25},"# Fedora：只运行这一行\nsudo dnf install .\u002Fst-stlink-udev-rules-*.rpm\n\n# Ubuntu\u002FDebian：只运行这一行\nsudo apt install .\u002Fst-stlink-udev-rules-*.deb\n",[31,5390,5391,5396,5416,5420,5425],{"__ignoreMap":25},[91,5392,5393],{"class":93,"line":94},[91,5394,5395],{"class":1240},"# Fedora：只运行这一行\n",[91,5397,5398,5401,5404,5407,5410,5413],{"class":93,"line":1096},[91,5399,5400],{"class":97},"sudo",[91,5402,5403],{"class":210}," dnf",[91,5405,5406],{"class":210}," install",[91,5408,5409],{"class":210}," .\u002Fst-stlink-udev-rules-",[91,5411,5412],{"class":206},"*",[91,5414,5415],{"class":210},".rpm\n",[91,5417,5418],{"class":93,"line":1104},[91,5419,1255],{"emptyLinePlaceholder":1254},[91,5421,5422],{"class":93,"line":1258},[91,5423,5424],{"class":1240},"# Ubuntu\u002FDebian：只运行这一行\n",[91,5426,5427,5429,5432,5434,5436,5438],{"class":93,"line":1264},[91,5428,5400],{"class":97},[91,5430,5431],{"class":210}," apt",[91,5433,5406],{"class":210},[91,5435,5409],{"class":210},[91,5437,5412],{"class":206},[91,5439,5440],{"class":210},".deb\n",[17,5442,5443,5444,5449],{},"如果下载的包名不同，以实际文件名和随包说明为准。ST 的",[184,5445,5448],{"href":5446,"rel":5447},"https:\u002F\u002Fwww.st.com\u002Fresource\u002Fen\u002Frelease_note\u002Fdm00107009-firmware-upgrade-for-st-link-st-link-v2-st-link-v2-1-and-stlink-v3-boards-stmicroelectronics.pdf",[880],"发行说明","也说明了 Linux 下需要安装相应的 ST-Link USB 访问规则。",[17,5451,5452,5453,5456,5457,5462,5463,5465,5466,5468,5469,5472,5473,5476,5477,5480,5481,882],{},"**使用 J-Link：**上文安装的 ",[31,5454,5455],{},"jlink-gdbserver"," bundle 用于启动调试服务；USB 权限还需要 SEGGER 的 udev 规则。安装 ",[184,5458,5461],{"href":5459,"rel":5460},"https:\u002F\u002Fwww.segger.com\u002Fdownloads\u002Fjlink\u002F",[880],"SEGGER J-Link Software and Documentation Pack"," 中对应发行版的 ",[31,5464,5380],{}," 或 ",[31,5467,5384],{}," 包时，会一并安装规则。如果使用解压版，则按照包内 ",[31,5470,5471],{},"README.txt","，将 ",[31,5474,5475],{},"99-jlink.rules"," 复制到 ",[31,5478,5479],{},"\u002Fetc\u002Fudev\u002Frules.d\u002F","。具体方法见 ",[184,5482,5485],{"href":5483,"rel":5484},"https:\u002F\u002Fkb.segger.com\u002FJ-Link_Troubleshooting",[880],"SEGGER 的 Linux 排查说明",[17,5487,5488],{},"安装规则后，运行：",[83,5490,5492],{"className":85,"code":5491,"language":87,"meta":25,"style":25},"sudo udevadm control --reload-rules\n",[31,5493,5494],{"__ignoreMap":25},[91,5495,5496,5498,5501,5504],{"class":93,"line":94},[91,5497,5400],{"class":97},[91,5499,5500],{"class":210}," udevadm",[91,5502,5503],{"class":210}," control",[91,5505,5506],{"class":206}," --reload-rules\n",[17,5508,5509,5510,5513,5514,5516,5517,5520],{},"然后",[248,5511,5512],{},"拔下调试器再插回去","，重新运行 ",[31,5515,5275],{},"，用新的总线号和设备号查看 ",[31,5518,5519],{},"\u002Fdev\u002Fbus\u002Fusb\u002F..."," 节点。可以将实际路径代入下方命令，检查当前用户能否读写：",[83,5522,5524],{"className":85,"code":5523,"language":87,"meta":25,"style":25},"test -r \u002Fdev\u002Fbus\u002Fusb\u002F001\u002F008 && test -w \u002Fdev\u002Fbus\u002Fusb\u002F001\u002F008 && echo 'USB 设备节点可读写'\n",[31,5525,5526],{"__ignoreMap":25},[91,5527,5528,5531,5534,5537,5540,5542,5545,5547,5549,5552],{"class":93,"line":94},[91,5529,5530],{"class":206},"test",[91,5532,5533],{"class":206}," -r",[91,5535,5536],{"class":210}," \u002Fdev\u002Fbus\u002Fusb\u002F001\u002F008",[91,5538,5539],{"class":1169}," && ",[91,5541,5530],{"class":206},[91,5543,5544],{"class":206}," -w",[91,5546,5536],{"class":210},[91,5548,5539],{"class":1169},[91,5550,5551],{"class":206},"echo",[91,5553,5554],{"class":210}," 'USB 设备节点可读写'\n",[17,5556,5557,5558,5561,5562,5564],{},"拔插后设备号可能变化，不要照抄示例中的 ",[31,5559,5560],{},"001\u002F008","。确认权限后，回到 VS Code 重新选择调试器。如果 ",[31,5563,5275],{}," 根本看不到调试器，应先检查 USB 线、接口和供电；这不是 udev 权限问题。",[17,5566,5567,5568,5570,5571,5574],{},"这里检查的是 ",[31,5569,5519],{},"。如果另外还要打开板载虚拟串口 ",[31,5572,5573],{},"\u002Fdev\u002FttyACM*","，那是串口设备的权限，需要分别排查。",[5576,5577,5578],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":1096,"depth":1096,"links":5580},[5581,5582,5583,5584,5590],{"id":14,"depth":1104,"text":15},{"id":77,"depth":1104,"text":78},{"id":179,"depth":1104,"text":180},{"id":789,"depth":1096,"text":789,"children":5585},[5586,5587,5588,5589],{"id":792,"depth":1104,"text":793},{"id":903,"depth":1104,"text":903},{"id":998,"depth":1104,"text":999},{"id":1681,"depth":1104,"text":1681},{"id":5248,"depth":1096,"text":5248,"children":5591},[5592],{"id":5256,"depth":1104,"text":5257},0,"0500","2026-04-17","2026-04-17-stm32cubeide-vscode-huan-jing-da-jian","\u002Fwiki\u002F2026-04-17-stm32cubeide-vscode-huan-jing-da-jian","STM32CubeIDE VScode环境搭建","md",false,{},"\u002Fwiki\u002F2026-04-17-stm32cubeide-vscode-huan-jing-da-jian\u002F0500-cubeide-vscode-jiao-cheng",{"title":5,"description":25},"wiki\u002F2026-04-17-STM32CubeIDE-VScode环境搭建\u002F0500-CubeIDE-VScode教程","MxqgCZdQLEvxvlrWgApW6OiNhSULM7uvdJICqGvkhU8",[5607,5613,5619,5625,5631,5637,5639],{"path":5608,"stem":5609,"title":5610,"authors":5611,"date":5595,"chapterOrder":5612,"chapterDepth":5593,"docKey":5596,"docRoot":5597,"docTitle":5598,"isWikiDoc":1254,"isWikiIndex":5600},"\u002Fwiki\u002F2026-04-17-stm32cubeide-vscode-huan-jing-da-jian\u002F0100-jian-jie","wiki\u002F2026-04-17-STM32CubeIDE-VScode环境搭建\u002F0100-简介","简介",[7],"0100",{"path":5614,"stem":5615,"title":5616,"authors":5617,"date":5595,"chapterOrder":5618,"chapterDepth":5593,"docKey":5596,"docRoot":5597,"docTitle":5598,"isWikiDoc":1254,"isWikiIndex":5600},"\u002Fwiki\u002F2026-04-17-stm32cubeide-vscode-huan-jing-da-jian\u002F0200-can-kao-shi-pin","wiki\u002F2026-04-17-STM32CubeIDE-VScode环境搭建\u002F0200-参考视频","参考视频",[7],"0200",{"path":5620,"stem":5621,"title":5622,"authors":5623,"date":5595,"chapterOrder":5624,"chapterDepth":94,"docKey":5596,"docRoot":5597,"docTitle":5598,"isWikiDoc":1254,"isWikiIndex":5600},"\u002Fwiki\u002F2026-04-17-stm32cubeide-vscode-huan-jing-da-jian\u002F0300-0100-linux-huan-jing-zhun-bei","wiki\u002F2026-04-17-STM32CubeIDE-VScode环境搭建\u002F0300-0100-Linux环境准备","Linux环境准备",[7],"0300-0100",{"path":5626,"stem":5627,"title":5628,"authors":5629,"date":5595,"chapterOrder":5630,"chapterDepth":94,"docKey":5596,"docRoot":5597,"docTitle":5598,"isWikiDoc":1254,"isWikiIndex":5600},"\u002Fwiki\u002F2026-04-17-stm32cubeide-vscode-huan-jing-da-jian\u002F0300-0200-windows-huan-jing-zhun-bei","wiki\u002F2026-04-17-STM32CubeIDE-VScode环境搭建\u002F0300-0200-Windows环境准备","Windows环境准备",[7],"0300-0200",{"path":5632,"stem":5633,"title":5634,"authors":5635,"date":5595,"chapterOrder":5636,"chapterDepth":5593,"docKey":5596,"docRoot":5597,"docTitle":5598,"isWikiDoc":1254,"isWikiIndex":5600},"\u002Fwiki\u002F2026-04-17-stm32cubeide-vscode-huan-jing-da-jian\u002F0300-huan-jing-zhun-bei","wiki\u002F2026-04-17-STM32CubeIDE-VScode环境搭建\u002F0300-环境准备","环境准备",[7],"0300",{"path":5602,"stem":5604,"title":5,"authors":5638,"date":5595,"chapterOrder":5594,"chapterDepth":5593,"docKey":5596,"docRoot":5597,"docTitle":5598,"isWikiDoc":1254,"isWikiIndex":5600},[7],{"path":5597,"stem":5640,"title":5641,"authors":5642,"date":5595,"chapterOrder":5643,"chapterDepth":5593,"docKey":5596,"docRoot":5597,"docTitle":5598,"isWikiDoc":1254,"isWikiIndex":1254},"wiki\u002F2026-04-17-STM32CubeIDE-VScode环境搭建\u002Findex","STM32CubeIDE-VScode环境搭建",[7],null,[5645,5647,5650,5653],{"name":7,"image":5646},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":5648,"image":5649},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":5651,"image":5652},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":5654,"image":5655},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431905665]