[{"data":1,"prerenderedAt":3539},["ShallowReactive",2],{"wiki-page-/wiki/2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian/ch2-linux":3,"wiki-doc-items-/wiki/2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian/ch2-linux":3521},{"id":4,"title":5,"body":6,"chapter":3507,"chapterSort":3508,"date":3509,"description":47,"docKey":3510,"docRoot":3511,"docTitle":3512,"extension":3513,"isWikiDoc":58,"isWikiIndex":3514,"layout":3515,"meta":3516,"navigation":58,"path":3517,"seo":3518,"stem":3519,"wikiDepth":55,"__hash__":3520},"content/wiki/2025-07-18-Linux-STM32-CMake-VScode环境搭建/ch2-Linux.md","Linux",{"type":7,"value":8,"toc":3502},"minimark",[9,13,17,30,33,36,41,127,133,136,144,149,154,159,164,167,172,175,188,191,288,291,314,319,322,331,336,339,343,348,351,359,365,370,375,378,383,389,412,417,420,425,431,446,451,454,459,466,471,474,479,482,487,490,495,498,507,510,621,624,629,634,638,644,649,652,655,660,671,679,682,698,703,706,715,720,723,728,731,739,747,751,754,905,908,912,923,928,934,939,942,947,950,959,962,978,981,993,998,1008,1011,1027,1032,1035,1043,1062,1065,1074,1079,1085,1088,1100,1115,1133,1138,1141,1153,1157,1162,1207,1212,1215,1218,1231,1236,1240,1243,1246,1289,1294,1297,1303,1308,1311,1314,1317,1322,1325,1330,1337,1342,1358,1363,1366,1375,1380,1383,1386,1391,1395,1401,1406,1411,1413,1415,1417,1422,1427,1432,1448,1453,1456,1459,1468,1473,1477,1484,1487,1492,1495,1500,1503,1508,1511,1516,1519,1524,1527,1534,1539,1563,1568,1573,1576,1580,1583,1588,1591,1596,1599,1604,1609,1612,1617,1622,1625,1630,1635,1638,1641,1646,1651,1654,1657,1662,1665,1677,1682,1685,1690,1693,1699,1704,1709,1734,1737,1742,1745,1764,1769,1772,1785,1788,1793,1813,1825,1828,1833,1836,1839,1844,1847,1852,1855,1860,1863,1868,1871,1876,1881,1884,1889,1892,1897,1902,1907,1922,1925,1930,1933,1938,1968,1973,1978,1984,1987,1992,1996,2003,2019,2026,2031,2034,2039,2042,2199,2202,2286,2297,2326,2331,2334,2339,2362,2365,2381,2386,2389,2394,2399,2402,2407,2412,2421,2424,2438,2443,2446,2450,2453,2456,2461,2464,2469,2563,2566,2571,2576,2579,2593,2598,2601,2606,2610,2613,2628,2631,2636,2639,2644,2649,2652,2657,2660,2665,2668,2671,2675,2678,2696,2699,2710,2715,2721,3226,3231,3245,3250,3253,3258,3263,3270,3275,3288,3294,3300,3305,3310,3315,3318,3323,3328,3336,3340,3343,3346,3351,3356,3359,3364,3369,3372,3377,3380,3385,3388,3393,3396,3401,3404,3409,3412,3417,3420,3433,3436,3441,3444,3449,3452,3457,3462,3465,3471,3477,3482,3485,3490,3493,3498],[10,11,12],"h3",{"id":12},"环境介绍",[14,15,16],"p",{},"本教程环境介绍：",[18,19,20,24,27],"ol",{},[21,22,23],"li",{},"系统：Fedora 42 KDE Edition Linux",[21,25,26],{},"系统内核：Linux 6.15.6-200.fc42.x86_64",[21,28,29],{},"架构：X86_64",[14,31,32],{},"其他Linux环境也可以。",[10,34,35],{"id":35},"安装各种环境",[37,38,40],"h4",{"id":39},"安装cc环境","安装C/C++环境",[42,43,48],"pre",{"className":44,"code":45,"language":46,"meta":47,"style":47},"language-bash shiki shiki-themes github-light github-dark","\n# debian系\nsudo apt-get install gcc g++ gdb cmake-gui make\n\n# rhel系\nsudo dnf install gcc g++ gdb cmake-gui make\n","bash","",[49,50,51,60,67,96,101,107],"code",{"__ignoreMap":47},[52,53,56],"span",{"class":54,"line":55},"line",1,[52,57,59],{"emptyLinePlaceholder":58},true,"\n",[52,61,63],{"class":54,"line":62},2,[52,64,66],{"class":65},"sJ8bj","# debian系\n",[52,68,70,74,78,81,84,87,90,93],{"class":54,"line":69},3,[52,71,73],{"class":72},"sScJk","sudo",[52,75,77],{"class":76},"sZZnC"," apt-get",[52,79,80],{"class":76}," install",[52,82,83],{"class":76}," gcc",[52,85,86],{"class":76}," g++",[52,88,89],{"class":76}," gdb",[52,91,92],{"class":76}," cmake-gui",[52,94,95],{"class":76}," make\n",[52,97,99],{"class":54,"line":98},4,[52,100,59],{"emptyLinePlaceholder":58},[52,102,104],{"class":54,"line":103},5,[52,105,106],{"class":65},"# rhel系\n",[52,108,110,112,115,117,119,121,123,125],{"class":54,"line":109},6,[52,111,73],{"class":72},[52,113,114],{"class":76}," dnf",[52,116,80],{"class":76},[52,118,83],{"class":76},[52,120,86],{"class":76},[52,122,89],{"class":76},[52,124,92],{"class":76},[52,126,95],{"class":76},[14,128,129],{},[130,131],"img",{"alt":47,"src":132},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image1.webp",[14,134,135],{},"查看是否环境安装成功",[42,137,142],{"className":138,"code":140,"language":141},[139],"language-text","gcc -v\ng++ -v\ngdb -v\ncmake --version\n","text",[49,143,140],{"__ignoreMap":47},[14,145,146],{},[130,147],{"alt":47,"src":148},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image2.webp",[14,150,151],{},[130,152],{"alt":47,"src":153},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image3.webp",[14,155,156],{},[130,157],{"alt":47,"src":158},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image4.webp",[14,160,161],{},[130,162],{"alt":47,"src":163},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image5.webp",[14,165,166],{},"接下来测试是否能够对C/C++正常编译，请找一个存放C++代码的文件夹，然后在终端中cd进去。",[14,168,169],{},[130,170],{"alt":47,"src":171},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image6.webp",[14,173,174],{},"然后创建一个.cpp文件并用vim编辑",[42,176,178],{"className":44,"code":177,"language":46,"meta":47,"style":47},"vim hello.cpp\n",[49,179,180],{"__ignoreMap":47},[52,181,182,185],{"class":54,"line":55},[52,183,184],{"class":72},"vim",[52,186,187],{"class":76}," hello.cpp\n",[14,189,190],{},"复制以下代码到该文件里",[42,192,196],{"className":193,"code":194,"language":195,"meta":47,"style":47},"language-cpp shiki shiki-themes github-light github-dark","#include \u003Ciostream> \nint main(int argc,char **argv) \n{ \n    std::cout \u003C\u003C \"你好，机电创新学会！\" \u003C\u003C std::endl; \n    return 0; \n}\n","cpp",[49,197,198,211,243,248,271,283],{"__ignoreMap":47},[52,199,200,204,207],{"class":54,"line":55},[52,201,203],{"class":202},"szBVR","#include",[52,205,206],{"class":76}," \u003Ciostream>",[52,208,210],{"class":209},"sVt8B"," \n",[52,212,213,216,219,222,224,228,231,234,237,240],{"class":54,"line":62},[52,214,215],{"class":202},"int",[52,217,218],{"class":72}," main",[52,220,221],{"class":209},"(",[52,223,215],{"class":202},[52,225,227],{"class":226},"s4XuR"," argc",[52,229,230],{"class":209},",",[52,232,233],{"class":202},"char",[52,235,236],{"class":202}," **",[52,238,239],{"class":226},"argv",[52,241,242],{"class":209},") \n",[52,244,245],{"class":54,"line":69},[52,246,247],{"class":209},"{ \n",[52,249,250,253,256,259,262,265,268],{"class":54,"line":98},[52,251,252],{"class":72},"    std",[52,254,255],{"class":209},"::cout ",[52,257,258],{"class":202},"\u003C\u003C",[52,260,261],{"class":76}," \"你好，机电创新学会！\"",[52,263,264],{"class":202}," \u003C\u003C",[52,266,267],{"class":72}," std",[52,269,270],{"class":209},"::endl; \n",[52,272,273,276,280],{"class":54,"line":103},[52,274,275],{"class":202},"    return",[52,277,279],{"class":278},"sj4cs"," 0",[52,281,282],{"class":209},"; \n",[52,284,285],{"class":54,"line":109},[52,286,287],{"class":209},"}\n",[14,289,290],{},"然后编译",[42,292,294],{"className":44,"code":293,"language":46,"meta":47,"style":47},"g++ -o hello hello.cpp\nls\n",[49,295,296,309],{"__ignoreMap":47},[52,297,298,301,304,307],{"class":54,"line":55},[52,299,300],{"class":72},"g++",[52,302,303],{"class":278}," -o",[52,305,306],{"class":76}," hello",[52,308,187],{"class":76},[52,310,311],{"class":54,"line":62},[52,312,313],{"class":72},"ls\n",[14,315,316],{},[130,317],{"alt":47,"src":318},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image7.webp",[14,320,321],{},"运行",[42,323,325],{"className":44,"code":324,"language":46,"meta":47,"style":47},"./hello\n",[49,326,327],{"__ignoreMap":47},[52,328,329],{"class":54,"line":55},[52,330,324],{"class":72},[14,332,333],{},[130,334],{"alt":47,"src":335},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image8.webp",[14,337,338],{},"说明环境已经配置好了",[37,340,342],{"id":341},"安装cubemx","安装CubeMX",[14,344,345],{},[130,346],{"alt":47,"src":347},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image9.webp",[14,349,350],{},"下载地址：",[14,352,353],{},[354,355,356],"a",{"href":356,"rel":357},"https://www.st.com.cn/zh/development-tools/stm32cubemx.html",[358],"nofollow",[14,360,361],{},[362,363,364],"strong",{},"推荐下载6.14.1版本（不要下载6.15.0,这个版本有bug，不知道后续何时会修复）",[14,366,367],{},[130,368],{"alt":47,"src":369},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image10.webp",[14,371,372],{},[130,373],{"alt":47,"src":374},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image11.webp",[14,376,377],{},"解压出来",[14,379,380],{},[130,381],{"alt":47,"src":382},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image12.webp",[14,384,385,386],{},"用root权限打开这个软件",[49,387,388],{},"SetupSTM32CubeMX-6.15.0",[42,390,392],{"className":193,"code":391,"language":195,"meta":47,"style":47},"sudo ./SetupSTM32CubeMX-6.15.0\n",[49,393,394],{"__ignoreMap":47},[52,395,396,399,402,405,408],{"class":54,"line":55},[52,397,398],{"class":209},"sudo .",[52,400,401],{"class":202},"/",[52,403,404],{"class":209},"SetupSTM32CubeMX",[52,406,407],{"class":202},"-",[52,409,411],{"class":410},"s7hpK","6.15.0\n",[14,413,414],{},[130,415],{"alt":47,"src":416},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image13.webp",[14,418,419],{},"在新弹出的界面一直点下一步就行，安装结束后出现如下图就成功了。",[14,421,422],{},[130,423],{"alt":47,"src":424},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image14.webp",[14,426,427,430],{},[49,428,429],{},"/usr/local/STMicroelectronics/STM32Cube/STM32CubeMX","进入这个文件夹，然后打开终端输入",[42,432,434],{"className":193,"code":433,"language":195,"meta":47,"style":47},"./STM32CubeMX\n",[49,435,436],{"__ignoreMap":47},[52,437,438,441,443],{"class":54,"line":55},[52,439,440],{"class":209},".",[52,442,401],{"class":202},[52,444,445],{"class":209},"STM32CubeMX\n",[14,447,448],{},[130,449],{"alt":47,"src":450},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image15.webp",[14,452,453],{},"点击Help",[14,455,456],{},[130,457],{"alt":47,"src":458},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image16.webp",[14,460,461,462,465],{},"选",[49,463,464],{},"Manage embedded software packages","，把STM32F1，F4，H7的第一个最新的固件勾上。",[14,467,468],{},[130,469],{"alt":47,"src":470},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image17.webp",[14,472,473],{},"点install",[14,475,476],{},[130,477],{"alt":47,"src":478},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image18.webp",[14,480,481],{},"登陆上账号",[14,483,484],{},[130,485],{"alt":47,"src":486},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image19.webp",[14,488,489],{},"然后等下载和安装完",[14,491,492],{},[130,493],{"alt":47,"src":494},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image20.webp",[14,496,497],{},"下载好就行了。",[14,499,500,501,506],{},"接下来可以把CubeMX应用配置一个桌面快捷方式等可以快速打开，教程详见",[354,502,505],{"href":503,"rel":504},"https://sdutvincirobot.feishu.cn/wiki/GIKnwJo39iREkHkFGvqcy5Osntc",[358],"Vinci机器人队Linux入门教程","的Appimage章节，可以用ctrl+F快速定位该章节。",[14,508,509],{},"桌面快捷方式如下：",[42,511,513],{"className":44,"code":512,"language":46,"meta":47,"style":47},"[Desktop Entry]\nName=STM32CubeMX\nExec=/usr/local/STMicroelectronics/STM32Cube/STM32CubeMX/STM32CubeMX\nIcon=/usr/local/STMicroelectronics/STM32Cube/STM32CubeMX/help/STM32CubeMX.png\nType=Application\nCategories=Development;Electronics;Embedded;\nComment=STM32CubeMX configuration and code generation tool\nTerminal=false\n",[49,514,515,520,530,540,550,560,584,610],{"__ignoreMap":47},[52,516,517],{"class":54,"line":55},[52,518,519],{"class":209},"[Desktop Entry]\n",[52,521,522,525,528],{"class":54,"line":62},[52,523,524],{"class":209},"Name",[52,526,527],{"class":202},"=",[52,529,445],{"class":76},[52,531,532,535,537],{"class":54,"line":69},[52,533,534],{"class":209},"Exec",[52,536,527],{"class":202},[52,538,539],{"class":76},"/usr/local/STMicroelectronics/STM32Cube/STM32CubeMX/STM32CubeMX\n",[52,541,542,545,547],{"class":54,"line":98},[52,543,544],{"class":209},"Icon",[52,546,527],{"class":202},[52,548,549],{"class":76},"/usr/local/STMicroelectronics/STM32Cube/STM32CubeMX/help/STM32CubeMX.png\n",[52,551,552,555,557],{"class":54,"line":103},[52,553,554],{"class":209},"Type",[52,556,527],{"class":202},[52,558,559],{"class":76},"Application\n",[52,561,562,565,567,570,573,576,578,581],{"class":54,"line":109},[52,563,564],{"class":209},"Categories",[52,566,527],{"class":202},[52,568,569],{"class":76},"Development",[52,571,572],{"class":209},";",[52,574,575],{"class":72},"Electronics",[52,577,572],{"class":209},[52,579,580],{"class":72},"Embedded",[52,582,583],{"class":209},";\n",[52,585,587,590,592,595,598,601,604,607],{"class":54,"line":586},7,[52,588,589],{"class":209},"Comment",[52,591,527],{"class":202},[52,593,594],{"class":76},"STM32CubeMX",[52,596,597],{"class":72}," configuration",[52,599,600],{"class":76}," and",[52,602,603],{"class":76}," code",[52,605,606],{"class":76}," generation",[52,608,609],{"class":76}," tool\n",[52,611,613,616,618],{"class":54,"line":612},8,[52,614,615],{"class":209},"Terminal",[52,617,527],{"class":202},[52,619,620],{"class":76},"false\n",[14,622,623],{},"根据教程做，就可以实现这种效果啦。",[14,625,626],{},[130,627],{"alt":47,"src":628},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image21.webp",[14,630,631],{},[130,632],{"alt":47,"src":633},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image22.webp",[37,635,637],{"id":636},"安装vscode","安装VScode",[14,639,640],{},[354,641,642],{"href":642,"rel":643},"https://code.visualstudio.com/Download",[358],[14,645,646],{},[130,647],{"alt":47,"src":648},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image23.webp",[14,650,651],{},"如果是debian系下载deb,如果是rhel系下载rpm.",[14,653,654],{},"下载完之后，点击浏览器，找到这个安装包的文件夹，并在该路径打开终端。",[14,656,657],{},[130,658],{"alt":47,"src":659},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image24.webp",[14,661,662,663,666,667,670],{},"Debian系：输入",[49,664,665],{},"sudo apt install ./code","然后按",[49,668,669],{},"tab","按键补齐文件名，回车。",[14,672,673,674,666,677,670],{},"RHEL系：输入",[49,675,676],{},"sudo dnf install ./code",[49,678,669],{},[14,680,681],{},"例如补齐后的：",[42,683,685],{"className":44,"code":684,"language":46,"meta":47,"style":47},"sudo dnf install ./code-1.102.1-1752598767.el8.x86_64.rpm\n",[49,686,687],{"__ignoreMap":47},[52,688,689,691,693,695],{"class":54,"line":55},[52,690,73],{"class":72},[52,692,114],{"class":76},[52,694,80],{"class":76},[52,696,697],{"class":76}," ./code-1.102.1-1752598767.el8.x86_64.rpm\n",[14,699,700],{},[130,701],{"alt":47,"src":702},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image25.webp",[14,704,705],{},"然后打开VScode，在终端输入下面的命令",[42,707,709],{"className":44,"code":708,"language":46,"meta":47,"style":47},"code\n",[49,710,711],{"__ignoreMap":47},[52,712,713],{"class":54,"line":55},[52,714,708],{"class":72},[14,716,717],{},[130,718],{"alt":47,"src":719},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image26.webp",[14,721,722],{},"然后安装一些插件",[14,724,725],{},[130,726],{"alt":47,"src":727},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image27.webp",[14,729,730],{},"下面这些都要装",[14,732,733,736],{},[130,734],{"alt":47,"src":735},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image28.webp",[130,737],{"alt":47,"src":738},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image29.webp",[14,740,741,744],{},[130,742],{"alt":47,"src":743},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image30.webp",[130,745],{"alt":47,"src":746},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image31.webp",[37,748,750],{"id":749},"安装arm-gnu工具链","安装ARM GNU工具链",[14,752,753],{},"编译工具比较：",[755,756,757,777],"table",{},[758,759,760],"thead",{},[761,762,763,768,771,774],"tr",{},[764,765,767],"th",{"align":766},"left","特性",[764,769,770],{"align":766},"ARM GCC (GNU 工具链)",[764,772,773],{"align":766},"Keil AC5 (ARM Compiler 5)",[764,775,776],{"align":766},"Keil AC6 (ARM Compiler 6)",[778,779,780,795,808,822,836,850,864,877,891],"tbody",{},[761,781,782,786,789,792],{},[783,784,785],"td",{"align":766},"核心身份",[783,787,788],{"align":766},"基于GNU GPL的开源编译器",[783,790,791],{"align":766},"ARM自家的传统编译器",[783,793,794],{"align":766},"基于LLVM/Clang的现代编译器",[761,796,797,800,803,806],{},[783,798,799],{"align":766},"许可模式",[783,801,802],{"align":766},"免费、开源",[783,804,805],{"align":766},"商业收费（包含在MDK中）",[783,807,805],{"align":766},[761,809,810,813,816,819],{},[783,811,812],{"align":766},"代码生成/优化",[783,814,815],{"align":766},"良好，持续改进",[783,817,818],{"align":766},"优秀（尤其在小代码尺寸上）",[783,820,821],{"align":766},"极佳，在性能与尺寸间有最佳平衡",[761,823,824,827,830,833],{},[783,825,826],{"align":766},"标准兼容性",[783,828,829],{"align":766},"紧跟最新C/C++标准（如C17，C++17/20）",[783,831,832],{"align":766},"主要支持C++98，较陈旧",[783,834,835],{"align":766},"支持现代C++（C++11/14/17），兼容性更好",[761,837,838,841,844,847],{},[783,839,840],{"align":766},"错误/警告信息",[783,842,843],{"align":766},"比较清晰易懂",[783,845,846],{"align":766},"相对晦涩",[783,848,849],{"align":766},"非常清晰和友好，类似GCC/Clang",[761,851,852,855,858,861],{},[783,853,854],{"align":766},"与Keil MDK集成",[783,856,857],{"align":766},"需要手动配置或通过CubeIDE",[783,859,860],{"align":766},"原生、无缝集成",[783,862,863],{"align":766},"原生、无缝集成，是ARM推荐选择",[761,865,866,869,872,875],{},[783,867,868],{"align":766},"链接脚本",[783,870,871],{"align":766},"使用自有的链接脚本语法（.ld文件）",[783,873,874],{"align":766},"使用ARM自家的分散加载文件语法（.sct）",[783,876,874],{"align":766},[761,878,879,882,885,888],{},[783,880,881],{"align":766},"汇编语法",[783,883,884],{"align":766},"使用GNU汇编语法（.S文件）",[783,886,887],{"align":766},"使用ARM汇编语法（.s）",[783,889,890],{"align":766},"使用ARM汇编语法（.s），但AC6更严格",[761,892,893,896,899,902],{},[783,894,895],{"align":766},"生态与未来",[783,897,898],{"align":766},"生态强大，是很多开源项目（如Zephyr，ESP-IDF）和IDE（CubeIDE，VS Code）的首选",[783,900,901],{"align":766},"处于维护模式，ARM不再增加新功能，不推荐新项目使用",[783,903,904],{"align":766},"是ARM的未来和主力，持续更新和优化",[906,907],"hr",{},[909,910,911],"h5",{"id":911},"安装",[14,913,914],{},[362,915,916,917,922],{},"建议都用",[362,918,919],{},[362,920,921],{},"官方法","进行安装。",[924,925,927],"h6",{"id":926},"方法一官网法","方法一（官网法）",[14,929,930],{},[354,931,932],{"href":932,"rel":933},"https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads",[358],[14,935,936],{},[130,937],{"alt":47,"src":938},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image32.webp",[14,940,941],{},"进入下载目录并打开终端",[14,943,944],{},[130,945],{"alt":47,"src":946},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image33.webp",[14,948,949],{},"在终端里输入下列命令，将编译器文件tar压缩包复制到你存放程序的文件夹（这个文件夹你自己定，建议在home分区，别以后删了就行）。",[14,951,952,953,666,956,958],{},"具体命令为",[49,954,955],{},"cp ./arm-gnu",[49,957,669],{},"补齐，然后空格，再跟上你要复制到的文件夹的路径。",[14,960,961],{},"比如下面的命令：",[42,963,965],{"className":44,"code":964,"language":46,"meta":47,"style":47},"cp ./arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi.tar.xz ~/UserFolder/Applications/\n",[49,966,967],{"__ignoreMap":47},[52,968,969,972,975],{"class":54,"line":55},[52,970,971],{"class":72},"cp",[52,973,974],{"class":76}," ./arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi.tar.xz",[52,976,977],{"class":76}," ~/UserFolder/Applications/\n",[14,979,980],{},"然后进入复制到的文件夹：",[42,982,984],{"className":44,"code":983,"language":46,"meta":47,"style":47},"cd ~/UserFolder/Applications/\n",[49,985,986],{"__ignoreMap":47},[52,987,988,991],{"class":54,"line":55},[52,989,990],{"class":278},"cd",[52,992,977],{"class":76},[14,994,995],{},[130,996],{"alt":47,"src":997},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image34.webp",[14,999,1000,1001,1004,1005,1007],{},"在终端里输入",[49,1002,1003],{},"tar -xvf ./arm-gnu","并按",[49,1006,669],{},"补齐。",[14,1009,1010],{},"例如我补齐后的：",[42,1012,1014],{"className":44,"code":1013,"language":46,"meta":47,"style":47}," tar -xvf ./arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi.tar.xz\n",[49,1015,1016],{"__ignoreMap":47},[52,1017,1018,1021,1024],{"class":54,"line":55},[52,1019,1020],{"class":72}," tar",[52,1022,1023],{"class":278}," -xvf",[52,1025,1026],{"class":76}," ./arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi.tar.xz\n",[14,1028,1029],{},[130,1030],{"alt":47,"src":1031},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image35.webp",[14,1033,1034],{},"再进入这个解压后的文件夹",[14,1036,1037,1040,1041,1007],{},[49,1038,1039],{},"cd ./arm-gnu","按",[49,1042,669],{},[42,1044,1046],{"className":44,"code":1045,"language":46,"meta":47,"style":47},"cd ./arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi/\ncd ./bin\n",[49,1047,1048,1055],{"__ignoreMap":47},[52,1049,1050,1052],{"class":54,"line":55},[52,1051,990],{"class":278},[52,1053,1054],{"class":76}," ./arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi/\n",[52,1056,1057,1059],{"class":54,"line":62},[52,1058,990],{"class":278},[52,1060,1061],{"class":76}," ./bin\n",[14,1063,1064],{},"查看文件夹路径",[42,1066,1068],{"className":44,"code":1067,"language":46,"meta":47,"style":47},"pwd\n",[49,1069,1070],{"__ignoreMap":47},[52,1071,1072],{"class":54,"line":55},[52,1073,1067],{"class":278},[14,1075,1076],{},[130,1077],{"alt":47,"src":1078},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image36.webp",[14,1080,1081,1082],{},"复制一下",[49,1083,1084],{},"/home/tungchiahui/UserFolder/Applications/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi/bin",[14,1086,1087],{},"然后需要配置环境",[42,1089,1091],{"className":44,"code":1090,"language":46,"meta":47,"style":47},"vim ~/.bashrc\n",[49,1092,1093],{"__ignoreMap":47},[52,1094,1095,1097],{"class":54,"line":55},[52,1096,184],{"class":72},[52,1098,1099],{"class":76}," ~/.bashrc\n",[14,1101,1102,1103,1106,1107,1110,1111,1114],{},"在末尾输入下面的命令，把下面",[49,1104,1105],{},"~/UserFolder/Applications/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi/bin","替换成你刚才复制的路径，",[49,1108,1109],{},"/home/用户名","可以用",[49,1112,1113],{},"~","来代替。",[42,1116,1118],{"className":44,"code":1117,"language":46,"meta":47,"style":47},"export PATH=/home/tungchiahui/UserFolder/Applications/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi/bin:$PATH\n",[49,1119,1120],{"__ignoreMap":47},[52,1121,1122,1125,1128,1130],{"class":54,"line":55},[52,1123,1124],{"class":202},"export",[52,1126,1127],{"class":209}," PATH",[52,1129,527],{"class":202},[52,1131,1132],{"class":209},"/home/tungchiahui/UserFolder/Applications/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi/bin:$PATH\n",[14,1134,1135],{},[130,1136],{"alt":47,"src":1137},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image37.webp",[14,1139,1140],{},"加载环境",[42,1142,1144],{"className":44,"code":1143,"language":46,"meta":47,"style":47},"source ~/.bashrc\n",[49,1145,1146],{"__ignoreMap":47},[52,1147,1148,1151],{"class":54,"line":55},[52,1149,1150],{"class":278},"source",[52,1152,1099],{"class":76},[924,1154,1156],{"id":1155},"方法二系统仓库法","方法二（系统仓库法）",[14,1158,1159],{},[362,1160,1161],{},"不建议本法",[42,1163,1165],{"className":44,"code":1164,"language":46,"meta":47,"style":47},"\n# Debian系\nsudo apt install arm-none-eabi-gcc\n\n# Rhel系\nsudo dnf install arm-none-eabi-gcc\n",[49,1166,1167,1171,1176,1188,1192,1197],{"__ignoreMap":47},[52,1168,1169],{"class":54,"line":55},[52,1170,59],{"emptyLinePlaceholder":58},[52,1172,1173],{"class":54,"line":62},[52,1174,1175],{"class":65},"# Debian系\n",[52,1177,1178,1180,1183,1185],{"class":54,"line":69},[52,1179,73],{"class":72},[52,1181,1182],{"class":76}," apt",[52,1184,80],{"class":76},[52,1186,1187],{"class":76}," arm-none-eabi-gcc\n",[52,1189,1190],{"class":54,"line":98},[52,1191,59],{"emptyLinePlaceholder":58},[52,1193,1194],{"class":54,"line":103},[52,1195,1196],{"class":65},"# Rhel系\n",[52,1198,1199,1201,1203,1205],{"class":54,"line":109},[52,1200,73],{"class":72},[52,1202,114],{"class":76},[52,1204,80],{"class":76},[52,1206,1187],{"class":76},[14,1208,1209],{},[130,1210],{"alt":47,"src":1211},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image38.webp",[909,1213,1214],{"id":1214},"测试",[14,1216,1217],{},"检查版本",[42,1219,1221],{"className":44,"code":1220,"language":46,"meta":47,"style":47},"arm-none-eabi-gcc -v\n",[49,1222,1223],{"__ignoreMap":47},[52,1224,1225,1228],{"class":54,"line":55},[52,1226,1227],{"class":72},"arm-none-eabi-gcc",[52,1229,1230],{"class":278}," -v\n",[14,1232,1233],{},[130,1234],{"alt":47,"src":1235},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image39.webp",[37,1237,1239],{"id":1238},"安装jlink驱动","安装JLink驱动",[909,1241,1242],{"id":1242},"安装libreadline库",[14,1244,1245],{},"我们烧录会用到JLinkExe的命令，而JLinkExe会用到libreadline库，所以要安装libreadline库，执行如下命令安装：",[42,1247,1249],{"className":44,"code":1248,"language":46,"meta":47,"style":47},"\n# debian系\nsudo apt-get install libreadline-dev\n\n# rhel系\nsudo dnf install readline-devel\n",[49,1250,1251,1255,1259,1270,1274,1278],{"__ignoreMap":47},[52,1252,1253],{"class":54,"line":55},[52,1254,59],{"emptyLinePlaceholder":58},[52,1256,1257],{"class":54,"line":62},[52,1258,66],{"class":65},[52,1260,1261,1263,1265,1267],{"class":54,"line":69},[52,1262,73],{"class":72},[52,1264,77],{"class":76},[52,1266,80],{"class":76},[52,1268,1269],{"class":76}," libreadline-dev\n",[52,1271,1272],{"class":54,"line":98},[52,1273,59],{"emptyLinePlaceholder":58},[52,1275,1276],{"class":54,"line":103},[52,1277,106],{"class":65},[52,1279,1280,1282,1284,1286],{"class":54,"line":109},[52,1281,73],{"class":72},[52,1283,114],{"class":76},[52,1285,80],{"class":76},[52,1287,1288],{"class":76}," readline-devel\n",[14,1290,1291],{},[130,1292],{"alt":47,"src":1293},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image40.webp",[909,1295,1239],{"id":1296},"安装jlink驱动-1",[14,1298,1299],{},[354,1300,1301],{"href":1301,"rel":1302},"https://www.segger.com/downloads/jlink/",[358],[14,1304,1305],{},[130,1306],{"alt":47,"src":1307},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image41.webp",[14,1309,1310],{},"是Debian系下载64位DEB",[14,1312,1313],{},"是RHEL系下载64位RPM",[14,1315,1316],{},"（这里的64位指的是amd64和X86_64,如果你是ARM64请下载下方那个Linux ARM里的64位）",[14,1318,1319],{},[130,1320],{"alt":47,"src":1321},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image42.webp",[14,1323,1324],{},"打开下载到的文件夹，并打开终端",[14,1326,1327],{},[130,1328],{"alt":47,"src":1329},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image43.webp",[14,1331,1332,1333,1336],{},"然后",[49,1334,1335],{},"sudo apt install ./JLink","然后tab补齐。",[14,1338,1332,1339,1336],{},[49,1340,1341],{},"sudo dnf install ./JLink",[42,1343,1345],{"className":44,"code":1344,"language":46,"meta":47,"style":47},"sudo dnf install ./JLink_Linux_V852_x86_64.rpm\n",[49,1346,1347],{"__ignoreMap":47},[52,1348,1349,1351,1353,1355],{"class":54,"line":55},[52,1350,73],{"class":72},[52,1352,114],{"class":76},[52,1354,80],{"class":76},[52,1356,1357],{"class":76}," ./JLink_Linux_V852_x86_64.rpm\n",[14,1359,1360],{},[130,1361],{"alt":47,"src":1362},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image44.webp",[14,1364,1365],{},"检查是否安装成功",[42,1367,1369],{"className":44,"code":1368,"language":46,"meta":47,"style":47},"JLinkExe\n",[49,1370,1371],{"__ignoreMap":47},[52,1372,1373],{"class":54,"line":55},[52,1374,1368],{"class":72},[14,1376,1377],{},[130,1378],{"alt":47,"src":1379},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image45.webp",[14,1381,1382],{},"我们点击No，然后会进入Commander交互模式，在这种模式下，我们可以执行各种 J-Link Commander 提供的命令来连接、配置调试器，下载程序或文件到目标设备等操作，感兴趣的同学可自行学习。",[14,1384,1385],{},"执行“q”指令退出该模式。",[14,1387,1388],{},[130,1389],{"alt":47,"src":1390},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image46.webp",[909,1392,1394],{"id":1393},"下载并安装ozone","下载并安装Ozone",[14,1396,1397],{},[354,1398,1399],{"href":1399,"rel":1400},"https://www.segger.com/products/development-tools/ozone-j-link-debugger/",[358],[14,1402,1403],{},[130,1404],{"alt":47,"src":1405},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image47.webp",[14,1407,1408],{},[130,1409],{"alt":47,"src":1410},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image48.webp",[14,1412,1310],{},[14,1414,1313],{},[14,1416,1316],{},[14,1418,1419],{},[130,1420],{"alt":47,"src":1421},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image49.webp",[14,1423,1332,1424,1336],{},[49,1425,1426],{},"sudo apt install ./Ozone",[14,1428,1332,1429,1336],{},[49,1430,1431],{},"sudo dnf install ./Ozone",[42,1433,1435],{"className":44,"code":1434,"language":46,"meta":47,"style":47},"sudo dnf install ./Ozone_Linux_V338g_x86_64.rpm\n",[49,1436,1437],{"__ignoreMap":47},[52,1438,1439,1441,1443,1445],{"class":54,"line":55},[52,1440,73],{"class":72},[52,1442,114],{"class":76},[52,1444,80],{"class":76},[52,1446,1447],{"class":76}," ./Ozone_Linux_V338g_x86_64.rpm\n",[14,1449,1450],{},[130,1451],{"alt":47,"src":1452},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image50.webp",[909,1454,1214],{"id":1455},"测试-1",[14,1457,1458],{},"打开终端输入",[42,1460,1462],{"className":44,"code":1461,"language":46,"meta":47,"style":47},"ozone\n",[49,1463,1464],{"__ignoreMap":47},[52,1465,1466],{"class":54,"line":55},[52,1467,1461],{"class":72},[14,1469,1470],{},[130,1471],{"alt":47,"src":1472},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image51.webp",[37,1474,1476],{"id":1475},"下载svd","下载SVD",[14,1478,1479],{},[354,1480,1483],{"href":1481,"rel":1482},"https://www.st.com.cn/content/st%5C_com/zh.html",[358],"https://www.st.com.cn/content/st\\_com/zh.html",[14,1485,1486],{},"在搜索里搜索芯片型号，如stm32f103c8t6",[14,1488,1489],{},[130,1490],{"alt":47,"src":1491},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image52.webp",[14,1493,1494],{},"点CAD资源",[14,1496,1497],{},[130,1498],{"alt":47,"src":1499},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image53.webp",[14,1501,1502],{},"下载SVD，鼠标点红色框的区域就可以下载了",[14,1504,1505],{},[130,1506],{"alt":47,"src":1507},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image54.webp",[14,1509,1510],{},"解压后就可以获得F1系列的SVD文件了",[14,1512,1513],{},[130,1514],{"alt":47,"src":1515},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image55.webp",[14,1517,1518],{},"依次把F4和H7的也下载解压了就可以了。（可以解压到一个文件夹里）",[14,1520,1521],{},[130,1522],{"alt":47,"src":1523},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image56.webp",[14,1525,1526],{},"然后在上面的文件夹打开终端",[14,1528,1529,1530,1533],{},"将这些文件夹全部复制到Ozone的",[49,1531,1532],{},"Config/Peripherals/","目录下。（你需要提前确定一下ozone的配置是否是这个路径再复制）",[14,1535,1536],{},[130,1537],{"alt":47,"src":1538},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image57.webp",[42,1540,1542],{"className":44,"code":1541,"language":46,"meta":47,"style":47},"sudo cp ./*.svd /opt/SEGGER/Ozone_V338g/Config/Peripherals/\n",[49,1543,1544],{"__ignoreMap":47},[52,1545,1546,1548,1551,1554,1557,1560],{"class":54,"line":55},[52,1547,73],{"class":72},[52,1549,1550],{"class":76}," cp",[52,1552,1553],{"class":76}," ./",[52,1555,1556],{"class":278},"*",[52,1558,1559],{"class":76},".svd",[52,1561,1562],{"class":76}," /opt/SEGGER/Ozone_V338g/Config/Peripherals/\n",[14,1564,1565],{},[130,1566],{"alt":47,"src":1567},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image58.webp",[14,1569,1570],{},[130,1571],{"alt":47,"src":1572},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image59.webp",[10,1574,1575],{"id":1575},"工程创建与测试",[37,1577,1579],{"id":1578},"使用cubemx创建工程","使用CubeMX创建工程",[14,1581,1582],{},"点击进入单片机挑选的按钮",[14,1584,1585],{},[130,1586],{"alt":47,"src":1587},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image60.webp",[14,1589,1590],{},"搜索对应芯片，并双击对应芯片选项。",[14,1592,1593],{},[130,1594],{"alt":47,"src":1595},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image61.webp",[14,1597,1598],{},"进行一些配置，以下都是很基础的东西，你在看这个视频前肯定都会了",[14,1600,1601],{},[130,1602],{"alt":47,"src":1603},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image62.webp",[14,1605,1606],{},[130,1607],{"alt":47,"src":1608},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image63.webp",[14,1610,1611],{},"随便开一个IO用来测试，比如LED的GPIO",[14,1613,1614],{},[130,1615],{"alt":47,"src":1616},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image64.webp",[14,1618,1619],{},[130,1620],{"alt":47,"src":1621},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image65.webp",[14,1623,1624],{},"FreeRTOS也要配置一下。",[14,1626,1627],{},[130,1628],{"alt":47,"src":1629},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image66.webp",[14,1631,1632],{},[130,1633],{"alt":47,"src":1634},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image67.webp",[14,1636,1637],{},"这些文件夹也要配置好，最后Toolchain选择CMake,编译器选择GCC(6.14.1及之前没有选择编译器这个选项很正常)",[14,1639,1640],{},"（但是CubeMX6.15.0有bug,这个选择GCC编译器并没有用，还需要后续自己手动选择编译器，以后可能会修复这个bug.）",[14,1642,1643],{},[130,1644],{"alt":47,"src":1645},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image68.webp",[14,1647,1648],{},[130,1649],{"alt":47,"src":1650},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image69.webp",[37,1652,1653],{"id":1653},"对工程进行配置与编译",[14,1655,1656],{},"在工程文件夹打开终端",[14,1658,1659],{},[130,1660],{"alt":47,"src":1661},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image70.webp",[14,1663,1664],{},"然后打开vscode",[42,1666,1668],{"className":44,"code":1667,"language":46,"meta":47,"style":47},"code .\n",[49,1669,1670],{"__ignoreMap":47},[52,1671,1672,1674],{"class":54,"line":55},[52,1673,49],{"class":72},[52,1675,1676],{"class":76}," .\n",[14,1678,1679],{},[130,1680],{"alt":47,"src":1681},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image71.webp",[14,1683,1684],{},"进入vscode后，点击目录下的CMakeLists.txt",[14,1686,1687],{},[130,1688],{"alt":47,"src":1689},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image72.webp",[14,1691,1692],{},"检查第25行左右是否有下面这行，如果没有，你需要手动给他加上这两行。(6.14.1版本没有这个bug)",[14,1694,1695],{},[1696,1697,1698],"em",{},"tips1：这就是上面说的CubeMX6.15.0版本的bug,因为这个版本增加了对clang编译器的支持，在CubeMX里也支持了选择编译器的操作，但是这个选项估计是工程师没写好，选择编译器不管选哪个，他都不会选择咱们选择的编译器，所以咱们需要手动选择。",[14,1700,1701],{},[1696,1702,1703],{},"tips2:这CubeMX6.15.0有第二个bug,这个工作区根CMakeLists.txt他说了只会生成一次，后续不会再重新覆盖生成，但是发现每次在CubeMX修改配置后，然后重新生成代码，其他命令都被保留了，就这个命令不会被保留。不知道后续会不会被修复，或者直接修复上面tips1的bug.所以每次重新配置CubeMX后，需要再把这句加上。",[14,1705,1706],{},[130,1707],{"alt":47,"src":1708},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image73.webp",[42,1710,1712],{"className":44,"code":1711,"language":46,"meta":47,"style":47},"\n# Include toolchain file\ninclude(\"cmake/gcc-arm-none-eabi.cmake\")\n",[49,1713,1714,1718,1723],{"__ignoreMap":47},[52,1715,1716],{"class":54,"line":55},[52,1717,59],{"emptyLinePlaceholder":58},[52,1719,1720],{"class":54,"line":62},[52,1721,1722],{"class":65},"# Include toolchain file\n",[52,1724,1725,1728,1731],{"class":54,"line":69},[52,1726,1727],{"class":72},"include(",[52,1729,1730],{"class":72},"\"cmake/gcc-arm-none-eabi.cmake\"",[52,1732,1733],{"class":209},")\n",[14,1735,1736],{},"按ctrl+～打开内置终端。",[14,1738,1739],{},[130,1740],{"alt":47,"src":1741},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image74.webp",[14,1743,1744],{},"使用下方命令创建并进入build文件夹",[42,1746,1748],{"className":44,"code":1747,"language":46,"meta":47,"style":47},"mkdir build\ncd build\n",[49,1749,1750,1758],{"__ignoreMap":47},[52,1751,1752,1755],{"class":54,"line":55},[52,1753,1754],{"class":72},"mkdir",[52,1756,1757],{"class":76}," build\n",[52,1759,1760,1762],{"class":54,"line":62},[52,1761,990],{"class":278},[52,1763,1757],{"class":76},[14,1765,1766],{},[130,1767],{"alt":47,"src":1768},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image75.webp",[14,1770,1771],{},"接下来使用cmake命令生成makefile文件",[42,1773,1775],{"className":44,"code":1774,"language":46,"meta":47,"style":47},"cmake ..\n",[49,1776,1777],{"__ignoreMap":47},[52,1778,1779,1782],{"class":54,"line":55},[52,1780,1781],{"class":72},"cmake",[52,1783,1784],{"class":76}," ..\n",[14,1786,1787],{},"检查一下是否ARM的C/C++以及汇编编译器都被找到了（如果没有，请检查上面的教程是否有做错的地方）",[14,1789,1790],{},[130,1791],{"alt":47,"src":1792},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image76.webp",[14,1794,1795,1796,1799,1800,1803,1804,1806,1807,1809,1810,1812],{},"然后使用make命令进行编译，命令为",[49,1797,1798],{},"make","或者",[49,1801,1802],{},"make -jxx",",这里的xx是你想使用CPU的几个线程来进行编译，比如我电脑是8核16线程，我就可以让xx是比16低的数字。而",[49,1805,1798],{},"是默认用一个线程。如果你并不知道你CPU有几个线程，那你就老老实实用",[49,1808,1798],{},"命令，别用",[49,1811,1802],{},"命令了。",[42,1814,1816],{"className":44,"code":1815,"language":46,"meta":47,"style":47},"make -j16\n",[49,1817,1818],{"__ignoreMap":47},[52,1819,1820,1822],{"class":54,"line":55},[52,1821,1798],{"class":72},[52,1823,1824],{"class":278}," -j16\n",[14,1826,1827],{},"这样就是编译成功了。",[14,1829,1830],{},[130,1831],{"alt":47,"src":1832},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image77.webp",[37,1834,1835],{"id":1835},"对代码提示进行配置",[14,1837,1838],{},"在VScode中按Ctrl+Shift+P,搜索clangd,并选择下载语言服务",[14,1840,1841],{},[130,1842],{"alt":47,"src":1843},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image78.webp",[14,1845,1846],{},"在右下角选择安装即可，安装完就会出现下图提示。",[14,1848,1849],{},[130,1850],{"alt":47,"src":1851},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image79.webp",[14,1853,1854],{},"接着禁用C/C++插件的代码提示功能(如果没这个界面，请往下看)",[14,1856,1857],{},[130,1858],{"alt":47,"src":1859},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image80.webp",[14,1861,1862],{},"如果没有上图的弹窗，可以进行手动关闭，依然是ctrl shift P,输入settings然后找到如下图的选项",[14,1864,1865],{},[130,1866],{"alt":47,"src":1867},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image81.webp",[14,1869,1870],{},"找到下图这个选项，改成disabled即可。",[14,1872,1873],{},[49,1874,1875],{},"\"C_Cpp.intelliSenseEngine\": \"disabled\"",[14,1877,1878],{},[130,1879],{"alt":47,"src":1880},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image82.webp",[14,1882,1883],{},"在VScode中再按Ctrl+Shift+P,搜索clangd,并选择重启clangd语言服务(重启clangd语言服务之前必须编译过一遍代码了)",[14,1885,1886],{},[130,1887],{"alt":47,"src":1888},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image83.webp",[14,1890,1891],{},"此时，可以看代码里头文件都正常识别了,代码提示也正常了。",[14,1893,1894],{},[130,1895],{"alt":47,"src":1896},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image84.webp",[14,1898,1899],{},[130,1900],{"alt":47,"src":1901},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image85.webp",[14,1903,1904],{},[130,1905],{"alt":47,"src":1906},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image86.webp",[14,1908,1909,1910,1917,1918,1921],{},"⚠️注意：Clangd 默认找的是 ",[362,1911,1912,1913,1916],{},"本机系统的 libc/include 路径（比如 x86_64 的 ",[49,1914,1915],{},"/usr/include","）"," ，而我们工程里面实际使用的是 ",[362,1919,1920],{},"ARM 工具链的头文件路径"," ，这就有概率导致包含C/C++库函数的头文件报错",[14,1923,1924],{},"例如：",[14,1926,1927],{},[130,1928],{"alt":47,"src":1929},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image87.webp",[14,1931,1932],{},"这里的 #include \u003Cmath.h>显示找不到头文件，但是我们进行编译的时候却没有报错，说明是clangd的配置有问题 。以下介绍一种解决方法：",[18,1934,1935],{},[21,1936,1937],{},"运行以下命令，获取 ARM GCC 使用的标准 include 路径：",[42,1939,1941],{"className":44,"code":1940,"language":46,"meta":47,"style":47},"arm-none-eabi-gcc -x c -E -v - \u003C/dev/null\n",[49,1942,1943],{"__ignoreMap":47},[52,1944,1945,1947,1950,1953,1956,1959,1962,1965],{"class":54,"line":55},[52,1946,1227],{"class":72},[52,1948,1949],{"class":278}," -x",[52,1951,1952],{"class":76}," c",[52,1954,1955],{"class":278}," -E",[52,1957,1958],{"class":278}," -v",[52,1960,1961],{"class":76}," -",[52,1963,1964],{"class":202}," \u003C",[52,1966,1967],{"class":76},"/dev/null\n",[14,1969,1970],{},[130,1971],{"alt":47,"src":1972},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image88.webp",[18,1974,1975],{"start":62},[21,1976,1977],{},"在工程根目录下面创建 .clangd 文件 将自己的头文件路径包含进去（引号里面替换成你自己的arm gcc头文件路径）",[42,1979,1982],{"className":1980,"code":1981,"language":141},[139],"CompileFlags:\n  Add: [\n    \"-isystem\", \"/home/xiaofang/Applications/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi/lib/gcc/arm-none-eabi/14.3.1/include\",\n    \"-isystem\", \"/home/xiaofang/Applications/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi/lib/gcc/arm-none-eabi/14.3.1/include-fixed\",\n    \"-isystem\", \"/home/xiaofang/Applications/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi/arm-none-eabi/include\"\n  ]\n",[49,1983,1981],{"__ignoreMap":47},[14,1985,1986],{},"保存，此时刷新一下clangd,头文件提示正常",[14,1988,1989],{},[130,1990],{"alt":47,"src":1991},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image89.webp",[37,1993,1995],{"id":1994},"移植vinci机器人队标准cc工程模板","移植Vinci机器人队标准C/C++工程模板",[14,1997,1998,1999],{},"用git clone命令克隆仓库:",[354,2000,2001],{"href":2001,"rel":2002},"https://github.com/tungchiahui/CubeMX_MDK5to6_Template",[358],[42,2004,2006],{"className":44,"code":2005,"language":46,"meta":47,"style":47},"git clone https://github.com/tungchiahui/CubeMX_MDK5to6_Template.git\n",[49,2007,2008],{"__ignoreMap":47},[52,2009,2010,2013,2016],{"class":54,"line":55},[52,2011,2012],{"class":72},"git",[52,2014,2015],{"class":76}," clone",[52,2017,2018],{"class":76}," https://github.com/tungchiahui/CubeMX_MDK5to6_Template.git\n",[14,2020,2021,2022,2025],{},"把仓库里的“工程文件移植”文件夹里的 ",[362,2023,2024],{},"所有内容"," 复制到我们CMake工程的目录里。",[14,2027,2028],{},[130,2029],{"alt":47,"src":2030},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image90.webp",[14,2032,2033],{},"然后打开applications文件夹，在Src和Inc文件夹分别创建led_task.cpp和led_task.h，内容分别如下:",[14,2035,2036],{},[130,2037],{"alt":47,"src":2038},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image91.webp",[14,2040,2041],{},"led_task.cpp:",[42,2043,2045],{"className":193,"code":2044,"language":195,"meta":47,"style":47},"#include \"led_task.h\"\n#include \"cmsis_os.h\"\n#include \"stm32f1xx_hal.h\" \n\nGPIO_PinState pinstate = GPIO_PIN_RESET;\n\nextern \"C\"\nvoid StartDefaultTask(void *argument)\n{\n  for(;;)\n  {\n    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,pinstate);\n    pinstate = (pinstate == GPIO_PIN_RESET) ? GPIO_PIN_SET : GPIO_PIN_RESET;\n    osDelay(500);\n  }\n}\n",[49,2046,2047,2054,2061,2070,2074,2084,2088,2096,2116,2122,2131,2137,2146,2174,2188,2194],{"__ignoreMap":47},[52,2048,2049,2051],{"class":54,"line":55},[52,2050,203],{"class":202},[52,2052,2053],{"class":76}," \"led_task.h\"\n",[52,2055,2056,2058],{"class":54,"line":62},[52,2057,203],{"class":202},[52,2059,2060],{"class":76}," \"cmsis_os.h\"\n",[52,2062,2063,2065,2068],{"class":54,"line":69},[52,2064,203],{"class":202},[52,2066,2067],{"class":76}," \"stm32f1xx_hal.h\"",[52,2069,210],{"class":209},[52,2071,2072],{"class":54,"line":98},[52,2073,59],{"emptyLinePlaceholder":58},[52,2075,2076,2079,2081],{"class":54,"line":103},[52,2077,2078],{"class":209},"GPIO_PinState pinstate ",[52,2080,527],{"class":202},[52,2082,2083],{"class":209}," GPIO_PIN_RESET;\n",[52,2085,2086],{"class":54,"line":109},[52,2087,59],{"emptyLinePlaceholder":58},[52,2089,2090,2093],{"class":54,"line":586},[52,2091,2092],{"class":202},"extern",[52,2094,2095],{"class":76}," \"C\"\n",[52,2097,2098,2101,2104,2106,2108,2111,2114],{"class":54,"line":612},[52,2099,2100],{"class":202},"void",[52,2102,2103],{"class":72}," StartDefaultTask",[52,2105,221],{"class":209},[52,2107,2100],{"class":202},[52,2109,2110],{"class":202}," *",[52,2112,2113],{"class":226},"argument",[52,2115,1733],{"class":209},[52,2117,2119],{"class":54,"line":2118},9,[52,2120,2121],{"class":209},"{\n",[52,2123,2125,2128],{"class":54,"line":2124},10,[52,2126,2127],{"class":202},"  for",[52,2129,2130],{"class":209},"(;;)\n",[52,2132,2134],{"class":54,"line":2133},11,[52,2135,2136],{"class":209},"  {\n",[52,2138,2140,2143],{"class":54,"line":2139},12,[52,2141,2142],{"class":72},"    HAL_GPIO_WritePin",[52,2144,2145],{"class":209},"(GPIOC,GPIO_PIN_13,pinstate);\n",[52,2147,2149,2152,2154,2157,2160,2163,2166,2169,2172],{"class":54,"line":2148},13,[52,2150,2151],{"class":209},"    pinstate ",[52,2153,527],{"class":202},[52,2155,2156],{"class":209}," (pinstate ",[52,2158,2159],{"class":202},"==",[52,2161,2162],{"class":209}," GPIO_PIN_RESET) ",[52,2164,2165],{"class":202},"?",[52,2167,2168],{"class":209}," GPIO_PIN_SET ",[52,2170,2171],{"class":202},":",[52,2173,2083],{"class":209},[52,2175,2177,2180,2182,2185],{"class":54,"line":2176},14,[52,2178,2179],{"class":72},"    osDelay",[52,2181,221],{"class":209},[52,2183,2184],{"class":278},"500",[52,2186,2187],{"class":209},");\n",[52,2189,2191],{"class":54,"line":2190},15,[52,2192,2193],{"class":209},"  }\n",[52,2195,2197],{"class":54,"line":2196},16,[52,2198,287],{"class":209},[14,2200,2201],{},"led_task.h:",[42,2203,2205],{"className":193,"code":2204,"language":195,"meta":47,"style":47},"#ifndef __LED_TASK_H_\n#define __LED_TASK_H_\n\n#ifdef __cplusplus\nextern \"C\"\n{\n#endif\n\n#include \"cpp_interface.h\"\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n",[49,2206,2207,2215,2222,2226,2234,2240,2244,2249,2253,2260,2264,2270,2274,2278,2282],{"__ignoreMap":47},[52,2208,2209,2212],{"class":54,"line":55},[52,2210,2211],{"class":202},"#ifndef",[52,2213,2214],{"class":72}," __LED_TASK_H_\n",[52,2216,2217,2220],{"class":54,"line":62},[52,2218,2219],{"class":202},"#define",[52,2221,2214],{"class":72},[52,2223,2224],{"class":54,"line":69},[52,2225,59],{"emptyLinePlaceholder":58},[52,2227,2228,2231],{"class":54,"line":98},[52,2229,2230],{"class":202},"#ifdef",[52,2232,2233],{"class":72}," __cplusplus\n",[52,2235,2236,2238],{"class":54,"line":103},[52,2237,2092],{"class":202},[52,2239,2095],{"class":76},[52,2241,2242],{"class":54,"line":109},[52,2243,2121],{"class":209},[52,2245,2246],{"class":54,"line":586},[52,2247,2248],{"class":202},"#endif\n",[52,2250,2251],{"class":54,"line":612},[52,2252,59],{"emptyLinePlaceholder":58},[52,2254,2255,2257],{"class":54,"line":2118},[52,2256,203],{"class":202},[52,2258,2259],{"class":76}," \"cpp_interface.h\"\n",[52,2261,2262],{"class":54,"line":2124},[52,2263,59],{"emptyLinePlaceholder":58},[52,2265,2266,2268],{"class":54,"line":2133},[52,2267,2230],{"class":202},[52,2269,2233],{"class":72},[52,2271,2272],{"class":54,"line":2139},[52,2273,287],{"class":209},[52,2275,2276],{"class":54,"line":2148},[52,2277,2248],{"class":202},[52,2279,2280],{"class":54,"line":2176},[52,2281,59],{"emptyLinePlaceholder":58},[52,2283,2284],{"class":54,"line":2190},[52,2285,2248],{"class":202},[14,2287,2288,2289,2292,2293,2296],{},"然后打开",[49,2290,2291],{},"cmake/user","文件夹下的",[49,2294,2295],{},"CMakeLists.txt","，把刚才新建的led_task.cpp添加上去。",[14,2298,2299,2300,2303,2304,2306,2307,2309,2310,2312,2313,2315,2316,2318,2319,2321,2322,2325],{},"详细介绍（可以不看）：这里的",[49,2301,2302],{},"cmake/stm32cubemx","下的",[49,2305,2295],{},"是被CubeMX管理的，你重新用CubeMX生成新代码后，这个文件里的东西会被覆盖。而工作区根目录下的",[49,2308,2295],{},"是不会被重新覆盖的，而且给我们留了一些区域加源文件和头文件，但是这样会让这个文件太过于嘈杂。所以我们选择新建一个user文件夹，然后在这里面弄一个",[49,2311,2295],{},"，再用顶层",[49,2314,2295],{},"去加载这个子",[49,2317,2295],{},"，这个子",[49,2320,2295],{},"方便咱们修改，文件结构也更加明显。（这些都不需要咱们自己创建，我已经给创建到 ",[362,2323,2324],{},"工程文件移植"," 里了，你在上面复制的时候已经复制过来了）",[14,2327,2328],{},[130,2329],{"alt":47,"src":2330},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image92.webp",[14,2332,2333],{},"然后要去最顶层的CMakeLists.txt里加上这句话来引用我们自己的CMakeLists.txt。",[14,2335,2336],{},[130,2337],{"alt":47,"src":2338},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image93.webp",[42,2340,2343],{"className":2341,"code":2342,"language":1781,"meta":47,"style":47},"language-cmake shiki shiki-themes github-light github-dark","\n# Add USER generated sources\nadd_subdirectory(cmake/user)\n",[49,2344,2345,2349,2354],{"__ignoreMap":47},[52,2346,2347],{"class":54,"line":55},[52,2348,59],{"emptyLinePlaceholder":58},[52,2350,2351],{"class":54,"line":62},[52,2352,2353],{"class":65},"# Add USER generated sources\n",[52,2355,2356,2359],{"class":54,"line":69},[52,2357,2358],{"class":202},"add_subdirectory",[52,2360,2361],{"class":209},"(cmake/user)\n",[14,2363,2364],{},"大功告成，编译一次试试。可以看到下图，那些新加的文件都编译上了。",[42,2366,2368],{"className":44,"code":2367,"language":46,"meta":47,"style":47},"cmake ..\nmake\n",[49,2369,2370,2376],{"__ignoreMap":47},[52,2371,2372,2374],{"class":54,"line":55},[52,2373,1781],{"class":72},[52,2375,1784],{"class":76},[52,2377,2378],{"class":54,"line":62},[52,2379,2380],{"class":72},"make\n",[14,2382,2383],{},[130,2384],{"alt":47,"src":2385},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image94.webp",[14,2387,2388],{},"然后去main.c中引用cpp_interface.h头文件，并将cpp_main()函数在main函数的这个地方调用。(我这里是开RTOS了，所以需要在启动RTOS之前调用cpp_main函数，如果你是没有用RTOS的裸机程序，则在while (1)的上方调用cpp_main即可)",[14,2390,2391],{},[130,2392],{"alt":47,"src":2393},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image95.webp",[14,2395,2396],{},[130,2397],{"alt":47,"src":2398},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image96.webp",[14,2400,2401],{},"然后在cpp_interface.h里修改isRTOS这个宏来让程序知道你是否开启了RTOS，如果开启了，宏就为1，裸机就填0。",[14,2403,2404],{},[130,2405],{"alt":47,"src":2406},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image97.webp",[14,2408,2409],{},[130,2410],{"alt":47,"src":2411},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image98.webp",[14,2413,2414,2415,2420],{},"其他更加详细的关于STM32的C/C++工程介绍请看",[354,2416,2419],{"href":2417,"rel":2418},"https://sdutvincirobot.feishu.cn/wiki/PqsGwcPCuidbN6k13jfcGWtWn0b",[358],"Vinci机器人队单片机教程","。",[14,2422,2423],{},"此时在build文件夹下进行编译程序，发现成功!",[42,2425,2426],{"className":44,"code":2367,"language":46,"meta":47,"style":47},[49,2427,2428,2434],{"__ignoreMap":47},[52,2429,2430,2432],{"class":54,"line":55},[52,2431,1781],{"class":72},[52,2433,1784],{"class":76},[52,2435,2436],{"class":54,"line":62},[52,2437,2380],{"class":72},[14,2439,2440],{},[130,2441],{"alt":47,"src":2442},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image99.webp",[37,2444,2445],{"id":2445},"下载程序到板子",[909,2447,2449],{"id":2448},"配置cmake生成bin和hex文件","配置CMake生成.bin和.hex文件",[14,2451,2452],{},"在下载程序到板子之前，我们需要去看看咱们之前编译的到底生成了啥文件。",[14,2454,2455],{},"通过下图可知，他只生成了.elf文件，并没有咱们常见的.bin和.hex文件。",[14,2457,2458],{},[130,2459],{"alt":47,"src":2460},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image100.webp",[14,2462,2463],{},"咱们需要再更改一下工作区下的CMakeLists.txt从而来让编译的时候生成.hex和.bin（没办法，就得这么麻烦，我也不知道为啥CubeMX不给全干好）",[14,2465,2466],{},[130,2467],{"alt":47,"src":2468},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image101.webp",[42,2470,2472],{"className":2341,"code":2471,"language":1781,"meta":47,"style":47},"\n# 生成 .bin 和 .hex 文件\nfind_program(OBJCOPY arm-none-eabi-objcopy REQUIRED)\n\nadd_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD\n    COMMAND ${OBJCOPY} -O binary ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.bin\n    COMMAND ${OBJCOPY} -O ihex   ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.hex\n    COMMENT \"Generating ${CMAKE_PROJECT_NAME}.bin and ${CMAKE_PROJECT_NAME}.hex from ${CMAKE_PROJECT_NAME}.elf\"\n)\n",[49,2473,2474,2478,2483,2491,2495,2511,2533,2551,2559],{"__ignoreMap":47},[52,2475,2476],{"class":54,"line":55},[52,2477,59],{"emptyLinePlaceholder":58},[52,2479,2480],{"class":54,"line":62},[52,2481,2482],{"class":65},"# 生成 .bin 和 .hex 文件\n",[52,2484,2485,2488],{"class":54,"line":69},[52,2486,2487],{"class":202},"find_program",[52,2489,2490],{"class":209},"(OBJCOPY arm-none-eabi-objcopy REQUIRED)\n",[52,2492,2493],{"class":54,"line":98},[52,2494,59],{"emptyLinePlaceholder":58},[52,2496,2497,2500,2502,2505,2508],{"class":54,"line":103},[52,2498,2499],{"class":202},"add_custom_command",[52,2501,221],{"class":209},[52,2503,2504],{"class":202},"TARGET",[52,2506,2507],{"class":202}," ${CMAKE_PROJECT_NAME}",[52,2509,2510],{"class":209}," POST_BUILD\n",[52,2512,2513,2516,2519,2522,2525,2528,2530],{"class":54,"line":109},[52,2514,2515],{"class":202},"    COMMAND",[52,2517,2518],{"class":202}," ${OBJCOPY}",[52,2520,2521],{"class":209}," -O binary ",[52,2523,2524],{"class":202},"${CMAKE_PROJECT_NAME}",[52,2526,2527],{"class":209},".elf ",[52,2529,2524],{"class":202},[52,2531,2532],{"class":209},".bin\n",[52,2534,2535,2537,2539,2542,2544,2546,2548],{"class":54,"line":586},[52,2536,2515],{"class":202},[52,2538,2518],{"class":202},[52,2540,2541],{"class":209}," -O ihex   ",[52,2543,2524],{"class":202},[52,2545,2527],{"class":209},[52,2547,2524],{"class":202},[52,2549,2550],{"class":209},".hex\n",[52,2552,2553,2556],{"class":54,"line":612},[52,2554,2555],{"class":202},"    COMMENT",[52,2557,2558],{"class":76}," \"Generating ${CMAKE_PROJECT_NAME}.bin and ${CMAKE_PROJECT_NAME}.hex from ${CMAKE_PROJECT_NAME}.elf\"\n",[52,2560,2561],{"class":54,"line":2118},[52,2562,1733],{"class":209},[14,2564,2565],{},"这些需要在工作区主CMakeLists.txt里添加的命令我全都写在这个记事本里了，每次生成新工程直接复制即可。",[14,2567,2568],{},[130,2569],{"alt":47,"src":2570},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image102.webp",[14,2572,2573],{},[130,2574],{"alt":47,"src":2575},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image103.webp",[14,2577,2578],{},"然后再次编译",[42,2580,2581],{"className":44,"code":2367,"language":46,"meta":47,"style":47},[49,2582,2583,2589],{"__ignoreMap":47},[52,2584,2585,2587],{"class":54,"line":55},[52,2586,1781],{"class":72},[52,2588,1784],{"class":76},[52,2590,2591],{"class":54,"line":62},[52,2592,2380],{"class":72},[14,2594,2595],{},[130,2596],{"alt":47,"src":2597},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image104.webp",[14,2599,2600],{},"此时再看build目录：咱们需要的.hex或者.bin就出来了",[14,2602,2603],{},[130,2604],{"alt":47,"src":2605},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image105.webp",[909,2607,2609],{"id":2608},"将设备连接到jlink并烧录程序","将设备连接到JLink并烧录程序",[924,2611,2612],{"id":2612},"图形界面烧录",[42,2614,2616],{"className":44,"code":2615,"language":46,"meta":47,"style":47},"#打开终端输入\nJFlashLite\n",[49,2617,2618,2623],{"__ignoreMap":47},[52,2619,2620],{"class":54,"line":55},[52,2621,2622],{"class":65},"#打开终端输入\n",[52,2624,2625],{"class":54,"line":62},[52,2626,2627],{"class":72},"JFlashLite\n",[14,2629,2630],{},"选择对应的芯片型号和速度",[14,2632,2633],{},[130,2634],{"alt":47,"src":2635},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image106.webp",[14,2637,2638],{},"添加hex文件",[14,2640,2641],{},[130,2642],{"alt":47,"src":2643},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image107.webp",[14,2645,2646],{},[130,2647],{"alt":47,"src":2648},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image108.webp",[14,2650,2651],{},"点击烧录并完成：",[14,2653,2654],{},[130,2655],{"alt":47,"src":2656},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image109.webp",[14,2658,2659],{},"成功点亮led：",[14,2661,2662],{},[130,2663],{"alt":47,"src":2664},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image110.webp",[924,2666,2667],{"id":2667},"终端烧录",[14,2669,2670],{},"算鸟算鸟，太麻烦了。",[37,2672,2674],{"id":2673},"配置vscode任务","配置VScode任务",[14,2676,2677],{},"咱们在上面编译，一直需要输入以下命令",[42,2679,2681],{"className":2341,"code":2680,"language":1781,"meta":47,"style":47},"cd build\ncmake ..\nmake\n",[49,2682,2683,2688,2692],{"__ignoreMap":47},[52,2684,2685],{"class":54,"line":55},[52,2686,2687],{"class":209},"cd build\n",[52,2689,2690],{"class":54,"line":62},[52,2691,1774],{"class":209},[52,2693,2694],{"class":54,"line":69},[52,2695,2380],{"class":209},[14,2697,2698],{},"这样每次编译过于麻烦了，所以我们使用强大的VScode来一键编译。",[14,2700,2701,2702,2705,2706,2709],{},"首先创建",[49,2703,2704],{},".vscode","文件夹和",[49,2707,2708],{},"tasks.json","文件",[14,2711,2712],{},[130,2713],{"alt":47,"src":2714},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image111.webp",[14,2716,2717,2718,2720],{},"以下是",[49,2719,2708],{},"的内容：",[42,2722,2726],{"className":2723,"code":2724,"language":2725,"meta":47,"style":47},"language-json shiki shiki-themes github-light github-dark","{\n    \"version\": \"2.0.0\",\n    \"options\": {\n        \"cwd\": \"${workspaceFolder}/build\"    //需要进入到我们执行tasks任务的文件夹中\n    },\n    \"tasks\": [    //tasks包含4个任务\n        {\n            \"type\": \"shell\",\n            \"label\": \"stm32-cmake\",    //第一个任务的名字叫cmake\n            \"command\": \"bash\",\n            \"args\": [\n                \"-c\",\n                \"mkdir -p ../log && echo \\\"===== CMake started at: $(date) =====\\\" | tee -a ../log/cmake.log && cmake .. 2>&1 | tee -a ../log/cmake.log\"\n            ],\n            \"problemMatcher\": []    //这里需要添加一个空的问题匹配器，否则会报错\n        },\n        {\n            \"label\": \"stm32-make\",    //第二个任务的名字叫make\n            \"command\": \"bash\",\n            \"args\": [\n                \"-c\",\n                \"mkdir -p ../log && echo \\\"===== Make started at: $(date) =====\\\" | tee -a ../log/make.log && make -j$(grep -c ^processor /proc/cpuinfo) 2>&1 | tee -a ../log/make.log\"\n            ],\n            \"problemMatcher\": []    //这里也需要添加一个空的问题匹配器，否则会报错\n        },\n        {\n            \"label\": \"stm32-Build\",    //第3个任务的名字叫Build\n            \"group\": {               //默认是build任务\n                \"kind\": \"build\",\n                \"isDefault\": true\n            },\n            \"dependsOrder\": \"sequence\",    //顺序执行依赖项\n            \"dependsOn\":[    //依赖的2个项为cmake、make\n                \"stm32-cmake\",    //即第一个任务的label\n                \"stm32-make\"      //即第二个任务的label\n            ]\n        },\n        {\n            \"type\": \"shell\",\n            \"label\": \"stm32-clean\",    //第四个任务：清理 build 文件夹\n            \"command\": \"bash\",\n            \"args\": [\n                \"-c\",\n                \"echo \\\"===== Clean started at: $(date) =====\\\" && rm -rf * && echo \\\"Build folder cleaned.\\\"\"\n            ],\n            \"options\": {\n                \"cwd\": \"${workspaceFolder}/build\"    //只清理build目录下的文件\n            },\n            \"problemMatcher\": []    //不需要问题匹配器\n        }\n\n    ]\n}\n","json",[49,2727,2728,2732,2746,2754,2767,2772,2783,2788,2800,2816,2828,2836,2843,2859,2864,2875,2880,2885,2900,2911,2918,2925,2940,2945,2955,2960,2965,2980,2992,3005,3016,3022,3038,3050,3061,3070,3076,3081,3086,3097,3112,3123,3130,3137,3163,3168,3176,3189,3194,3204,3210,3215,3221],{"__ignoreMap":47},[52,2729,2730],{"class":54,"line":55},[52,2731,2121],{"class":209},[52,2733,2734,2737,2740,2743],{"class":54,"line":62},[52,2735,2736],{"class":278},"    \"version\"",[52,2738,2739],{"class":209},": ",[52,2741,2742],{"class":76},"\"2.0.0\"",[52,2744,2745],{"class":209},",\n",[52,2747,2748,2751],{"class":54,"line":69},[52,2749,2750],{"class":278},"    \"options\"",[52,2752,2753],{"class":209},": {\n",[52,2755,2756,2759,2761,2764],{"class":54,"line":98},[52,2757,2758],{"class":278},"        \"cwd\"",[52,2760,2739],{"class":209},[52,2762,2763],{"class":76},"\"${workspaceFolder}/build\"",[52,2765,2766],{"class":65},"    //需要进入到我们执行tasks任务的文件夹中\n",[52,2768,2769],{"class":54,"line":103},[52,2770,2771],{"class":209},"    },\n",[52,2773,2774,2777,2780],{"class":54,"line":109},[52,2775,2776],{"class":278},"    \"tasks\"",[52,2778,2779],{"class":209},": [    ",[52,2781,2782],{"class":65},"//tasks包含4个任务\n",[52,2784,2785],{"class":54,"line":586},[52,2786,2787],{"class":209},"        {\n",[52,2789,2790,2793,2795,2798],{"class":54,"line":612},[52,2791,2792],{"class":278},"            \"type\"",[52,2794,2739],{"class":209},[52,2796,2797],{"class":76},"\"shell\"",[52,2799,2745],{"class":209},[52,2801,2802,2805,2807,2810,2813],{"class":54,"line":2118},[52,2803,2804],{"class":278},"            \"label\"",[52,2806,2739],{"class":209},[52,2808,2809],{"class":76},"\"stm32-cmake\"",[52,2811,2812],{"class":209},",    ",[52,2814,2815],{"class":65},"//第一个任务的名字叫cmake\n",[52,2817,2818,2821,2823,2826],{"class":54,"line":2124},[52,2819,2820],{"class":278},"            \"command\"",[52,2822,2739],{"class":209},[52,2824,2825],{"class":76},"\"bash\"",[52,2827,2745],{"class":209},[52,2829,2830,2833],{"class":54,"line":2133},[52,2831,2832],{"class":278},"            \"args\"",[52,2834,2835],{"class":209},": [\n",[52,2837,2838,2841],{"class":54,"line":2139},[52,2839,2840],{"class":76},"                \"-c\"",[52,2842,2745],{"class":209},[52,2844,2845,2848,2851,2854,2856],{"class":54,"line":2148},[52,2846,2847],{"class":76},"                \"mkdir -p ../log && echo ",[52,2849,2850],{"class":278},"\\\"",[52,2852,2853],{"class":76},"===== CMake started at: $(date) =====",[52,2855,2850],{"class":278},[52,2857,2858],{"class":76}," | tee -a ../log/cmake.log && cmake .. 2>&1 | tee -a ../log/cmake.log\"\n",[52,2860,2861],{"class":54,"line":2176},[52,2862,2863],{"class":209},"            ],\n",[52,2865,2866,2869,2872],{"class":54,"line":2190},[52,2867,2868],{"class":278},"            \"problemMatcher\"",[52,2870,2871],{"class":209},": []    ",[52,2873,2874],{"class":65},"//这里需要添加一个空的问题匹配器，否则会报错\n",[52,2876,2877],{"class":54,"line":2196},[52,2878,2879],{"class":209},"        },\n",[52,2881,2883],{"class":54,"line":2882},17,[52,2884,2787],{"class":209},[52,2886,2888,2890,2892,2895,2897],{"class":54,"line":2887},18,[52,2889,2804],{"class":278},[52,2891,2739],{"class":209},[52,2893,2894],{"class":76},"\"stm32-make\"",[52,2896,2812],{"class":209},[52,2898,2899],{"class":65},"//第二个任务的名字叫make\n",[52,2901,2903,2905,2907,2909],{"class":54,"line":2902},19,[52,2904,2820],{"class":278},[52,2906,2739],{"class":209},[52,2908,2825],{"class":76},[52,2910,2745],{"class":209},[52,2912,2914,2916],{"class":54,"line":2913},20,[52,2915,2832],{"class":278},[52,2917,2835],{"class":209},[52,2919,2921,2923],{"class":54,"line":2920},21,[52,2922,2840],{"class":76},[52,2924,2745],{"class":209},[52,2926,2928,2930,2932,2935,2937],{"class":54,"line":2927},22,[52,2929,2847],{"class":76},[52,2931,2850],{"class":278},[52,2933,2934],{"class":76},"===== Make started at: $(date) =====",[52,2936,2850],{"class":278},[52,2938,2939],{"class":76}," | tee -a ../log/make.log && make -j$(grep -c ^processor /proc/cpuinfo) 2>&1 | tee -a ../log/make.log\"\n",[52,2941,2943],{"class":54,"line":2942},23,[52,2944,2863],{"class":209},[52,2946,2948,2950,2952],{"class":54,"line":2947},24,[52,2949,2868],{"class":278},[52,2951,2871],{"class":209},[52,2953,2954],{"class":65},"//这里也需要添加一个空的问题匹配器，否则会报错\n",[52,2956,2958],{"class":54,"line":2957},25,[52,2959,2879],{"class":209},[52,2961,2963],{"class":54,"line":2962},26,[52,2964,2787],{"class":209},[52,2966,2968,2970,2972,2975,2977],{"class":54,"line":2967},27,[52,2969,2804],{"class":278},[52,2971,2739],{"class":209},[52,2973,2974],{"class":76},"\"stm32-Build\"",[52,2976,2812],{"class":209},[52,2978,2979],{"class":65},"//第3个任务的名字叫Build\n",[52,2981,2983,2986,2989],{"class":54,"line":2982},28,[52,2984,2985],{"class":278},"            \"group\"",[52,2987,2988],{"class":209},": {               ",[52,2990,2991],{"class":65},"//默认是build任务\n",[52,2993,2995,2998,3000,3003],{"class":54,"line":2994},29,[52,2996,2997],{"class":278},"                \"kind\"",[52,2999,2739],{"class":209},[52,3001,3002],{"class":76},"\"build\"",[52,3004,2745],{"class":209},[52,3006,3008,3011,3013],{"class":54,"line":3007},30,[52,3009,3010],{"class":278},"                \"isDefault\"",[52,3012,2739],{"class":209},[52,3014,3015],{"class":278},"true\n",[52,3017,3019],{"class":54,"line":3018},31,[52,3020,3021],{"class":209},"            },\n",[52,3023,3025,3028,3030,3033,3035],{"class":54,"line":3024},32,[52,3026,3027],{"class":278},"            \"dependsOrder\"",[52,3029,2739],{"class":209},[52,3031,3032],{"class":76},"\"sequence\"",[52,3034,2812],{"class":209},[52,3036,3037],{"class":65},"//顺序执行依赖项\n",[52,3039,3041,3044,3047],{"class":54,"line":3040},33,[52,3042,3043],{"class":278},"            \"dependsOn\"",[52,3045,3046],{"class":209},":[    ",[52,3048,3049],{"class":65},"//依赖的2个项为cmake、make\n",[52,3051,3053,3056,3058],{"class":54,"line":3052},34,[52,3054,3055],{"class":76},"                \"stm32-cmake\"",[52,3057,2812],{"class":209},[52,3059,3060],{"class":65},"//即第一个任务的label\n",[52,3062,3064,3067],{"class":54,"line":3063},35,[52,3065,3066],{"class":76},"                \"stm32-make\"",[52,3068,3069],{"class":65},"      //即第二个任务的label\n",[52,3071,3073],{"class":54,"line":3072},36,[52,3074,3075],{"class":209},"            ]\n",[52,3077,3079],{"class":54,"line":3078},37,[52,3080,2879],{"class":209},[52,3082,3084],{"class":54,"line":3083},38,[52,3085,2787],{"class":209},[52,3087,3089,3091,3093,3095],{"class":54,"line":3088},39,[52,3090,2792],{"class":278},[52,3092,2739],{"class":209},[52,3094,2797],{"class":76},[52,3096,2745],{"class":209},[52,3098,3100,3102,3104,3107,3109],{"class":54,"line":3099},40,[52,3101,2804],{"class":278},[52,3103,2739],{"class":209},[52,3105,3106],{"class":76},"\"stm32-clean\"",[52,3108,2812],{"class":209},[52,3110,3111],{"class":65},"//第四个任务：清理 build 文件夹\n",[52,3113,3115,3117,3119,3121],{"class":54,"line":3114},41,[52,3116,2820],{"class":278},[52,3118,2739],{"class":209},[52,3120,2825],{"class":76},[52,3122,2745],{"class":209},[52,3124,3126,3128],{"class":54,"line":3125},42,[52,3127,2832],{"class":278},[52,3129,2835],{"class":209},[52,3131,3133,3135],{"class":54,"line":3132},43,[52,3134,2840],{"class":76},[52,3136,2745],{"class":209},[52,3138,3140,3143,3145,3148,3150,3153,3155,3158,3160],{"class":54,"line":3139},44,[52,3141,3142],{"class":76},"                \"echo ",[52,3144,2850],{"class":278},[52,3146,3147],{"class":76},"===== Clean started at: $(date) =====",[52,3149,2850],{"class":278},[52,3151,3152],{"class":76}," && rm -rf * && echo ",[52,3154,2850],{"class":278},[52,3156,3157],{"class":76},"Build folder cleaned.",[52,3159,2850],{"class":278},[52,3161,3162],{"class":76},"\"\n",[52,3164,3166],{"class":54,"line":3165},45,[52,3167,2863],{"class":209},[52,3169,3171,3174],{"class":54,"line":3170},46,[52,3172,3173],{"class":278},"            \"options\"",[52,3175,2753],{"class":209},[52,3177,3179,3182,3184,3186],{"class":54,"line":3178},47,[52,3180,3181],{"class":278},"                \"cwd\"",[52,3183,2739],{"class":209},[52,3185,2763],{"class":76},[52,3187,3188],{"class":65},"    //只清理build目录下的文件\n",[52,3190,3192],{"class":54,"line":3191},48,[52,3193,3021],{"class":209},[52,3195,3197,3199,3201],{"class":54,"line":3196},49,[52,3198,2868],{"class":278},[52,3200,2871],{"class":209},[52,3202,3203],{"class":65},"//不需要问题匹配器\n",[52,3205,3207],{"class":54,"line":3206},50,[52,3208,3209],{"class":209},"        }\n",[52,3211,3213],{"class":54,"line":3212},51,[52,3214,59],{"emptyLinePlaceholder":58},[52,3216,3218],{"class":54,"line":3217},52,[52,3219,3220],{"class":209},"    ]\n",[52,3222,3224],{"class":54,"line":3223},53,[52,3225,287],{"class":209},[14,3227,3228],{},[362,3229,3230],{},"方法一：",[14,3232,3233,3234,3237,3238,3241,3242,2420],{},"在VScode标题栏上，找到",[49,3235,3236],{},"终端","，然后再选择",[49,3239,3240],{},"运行构建任务","，快捷键是",[49,3243,3244],{},"Ctrl+Shift+B",[14,3246,3247],{},[130,3248],{"alt":47,"src":3249},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image112.webp",[14,3251,3252],{},"可见任务已经被运行了。",[14,3254,3255],{},[130,3256],{"alt":47,"src":3257},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image113.webp",[14,3259,3260],{},[362,3261,3262],{},"方法二：",[14,3264,3233,3265,3237,3267,2420],{},[49,3266,3236],{},[49,3268,3269],{},"运行任务",[14,3271,3272],{},[130,3273],{"alt":47,"src":3274},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image114.webp",[14,3276,3277,3278,3281,3282,3284,3285,3287],{},"下面有4个stm32的任务，第一个是",[49,3279,3280],{},"stm32-Build","任务，运行后的效果和刚才方法一是一样的，方法一的那个",[49,3283,3240],{},"的按钮，就是运行的这个",[49,3286,3280],{},"任务。",[14,3289,3290,3291,3293],{},"这个",[49,3292,3280],{},"任务包含stm32-cmake和stm32-make任务。",[14,3295,1332,3296,3299],{},[49,3297,3298],{},"stm32-clean","任务就是清除build文件夹下的所有文件。",[14,3301,3302],{},[130,3303],{"alt":47,"src":3304},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image115.webp",[14,3306,3307,3308,3287],{},"可以试一下",[49,3309,3298],{},[14,3311,3312],{},[130,3313],{"alt":47,"src":3314},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image116.webp",[14,3316,3317],{},"可以发现都删完了。",[14,3319,3320],{},[130,3321],{"alt":47,"src":3322},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image117.webp",[14,3324,3325],{},[362,3326,3327],{},"你不用担心每次新建工程都需要配置那么多东西。",[14,3329,3330,3331],{},"以上大多数配置文件全部都已经包含在",[354,3332,3335],{"href":3333,"rel":3334},"https://github.com/tungchiahui/CubeMX%5C_MDK5to6%5C_Template%E4%BB%93%E5%BA%93%E4%B8%8B%E7%9A%84***%60%E5%B7%A5%E7%A8%8B%E6%96%87%E4%BB%B6%E7%A7%BB%E6%A4%8D(%E5%88%9B%E5%BB%BA%E6%96%B0%E6%A8%A1%E6%9D%BF%E8%AF%B7%E7%9C%8B%E8%BF%99%E9%87%8C)%60***%E6%96%87%E4%BB%B6%E5%A4%B9%E4%BA%86%EF%BC%8C%E5%88%B0%E6%97%B6%E5%80%99%E6%96%B0%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%B7%A5%E7%A8%8B%E5%90%8E%EF%BC%8C%E7%9B%B4%E6%8E%A5%E6%8A%8A%E8%BF%99%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%8B%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E5%85%A8%E9%83%A8%E5%A4%8D%E5%88%B6%E8%BF%87%E6%9D%A5%E5%8D%B3%E5%8F%AF%E3%80%82",[358],"https://github.com/tungchiahui/CubeMX\\_MDK5to6\\_Template仓库下的***`工程文件移植(创建新模板请看这里)`***文件夹了，到时候新建一个工程后，直接把这个文件夹下的所有文件全部复制过来即可。",[37,3337,3339],{"id":3338},"使用ozone进行flash烧录和debug调试","使用ozone进行Flash烧录和Debug调试",[909,3341,3342],{"id":3342},"基础配置",[14,3344,3345],{},"打开终端输入ozone打开软件或者直接找到应用图标打开ozone",[14,3347,3348],{},[130,3349],{"alt":47,"src":3350},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image118.webp",[14,3352,3353],{},[130,3354],{"alt":47,"src":3355},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image119.webp",[14,3357,3358],{},"先选择device，比如我是STM32F407VET6",[14,3360,3361],{},[130,3362],{"alt":47,"src":3363},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image120.webp",[14,3365,3366],{},[130,3367],{"alt":47,"src":3368},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image121.webp",[14,3370,3371],{},"选择Peripherals:",[14,3373,3374],{},[130,3375],{"alt":47,"src":3376},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image122.webp",[14,3378,3379],{},"点击下一步",[14,3381,3382],{},[130,3383],{"alt":47,"src":3384},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image123.webp",[14,3386,3387],{},"你用的SWD就填SWD，是JTAG就填JTAG",[14,3389,3390],{},[130,3391],{"alt":47,"src":3392},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image124.webp",[14,3394,3395],{},"选择ELF",[14,3397,3398],{},[130,3399],{"alt":47,"src":3400},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image125.webp",[14,3402,3403],{},"elf,hex,bin都可以选，一般选elf就行。",[14,3405,3406],{},[130,3407],{"alt":47,"src":3408},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image126.webp",[14,3410,3411],{},"这一步保持默认即可。",[14,3413,3414],{},[130,3415],{"alt":47,"src":3416},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image127.webp",[14,3418,3419],{},"如果你开启了RTOS可能会遇到这个问题。",[42,3421,3423],{"className":44,"code":3422,"language":46,"meta":47,"style":47},"warning (138): The target application seems to be using FreeRTOS, but FreeRTOS-awareness is not enabled.\n",[49,3424,3425],{"__ignoreMap":47},[52,3426,3427,3430],{"class":54,"line":55},[52,3428,3429],{"class":72},"warning",[52,3431,3432],{"class":209}," (138): The target application seems to be using FreeRTOS, but FreeRTOS-awareness is not enabled.\n",[14,3434,3435],{},"意思是你的目标应用似乎使用了 FreeRTOS，但当前没有启用对 FreeRTOS 的调试支持（RTOS-awareness）。",[14,3437,3438],{},[130,3439],{"alt":47,"src":3440},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image128.webp",[14,3442,3443],{},"直接按照他底下的提示应用修复即可。",[14,3445,3446],{},[130,3447],{"alt":47,"src":3448},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image129.webp",[14,3450,3451],{},"点继续就行。",[14,3453,3454],{},[130,3455],{"alt":47,"src":3456},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image130.webp",[14,3458,3459],{},[130,3460],{"alt":47,"src":3461},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image131.webp",[909,3463,3464],{"id":3464},"烧录与调试",[14,3466,3467,3468],{},"可以看下面这个视频，讲的挺好的。",[362,3469,3470],{},"(从30:10开始看）",[14,3472,3473],{},[354,3474,3475],{"href":3475,"rel":3476},"https://www.bilibili.com/video/BV1yrLHzZEoE",[358],[14,3478,3479],{},[130,3480],{"alt":47,"src":3481},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image132.webp",[14,3483,3484],{},"点击File让他按文件名排序。",[14,3486,3487],{},[130,3488],{"alt":47,"src":3489},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image133.webp",[14,3491,3492],{},"找到led_task.cpp点击就可以打开这个源文件啦。",[14,3494,3495],{},[130,3496],{"alt":47,"src":3497},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2025/07/18/image134.webp",[3499,3500,3501],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .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 .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":47,"searchDepth":62,"depth":62,"links":3503},[3504,3505,3506],{"id":12,"depth":69,"text":12},{"id":35,"depth":69,"text":35},{"id":1575,"depth":69,"text":1575},"2",2000000,"2025-07-18","2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian","/wiki/2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian","Linux STM32 CMake VScode环境搭建","md",false,null,{},"/wiki/2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian/ch2-linux",{"title":5,"description":47},"wiki/2025-07-18-Linux-STM32-CMake-VScode环境搭建/ch2-Linux","MnRDO6_8CyNTy3_eT-_wTVoZAuaESVrp46wS30HB81M",[3522,3528,3529,3535],{"path":3523,"stem":3524,"title":3525,"date":3509,"chapter":3526,"chapterSort":3527,"docKey":3510,"docRoot":3511,"docTitle":3512,"isWikiDoc":58,"isWikiIndex":3514},"/wiki/2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian/ch1-jian-jie","wiki/2025-07-18-Linux-STM32-CMake-VScode环境搭建/ch1-简介","简介","1",1000000,{"path":3517,"stem":3519,"title":5,"date":3509,"chapter":3507,"chapterSort":3508,"docKey":3510,"docRoot":3511,"docTitle":3512,"isWikiDoc":58,"isWikiIndex":3514},{"path":3530,"stem":3531,"title":3532,"date":3509,"chapter":3533,"chapterSort":3534,"docKey":3510,"docRoot":3511,"docTitle":3512,"isWikiDoc":58,"isWikiIndex":3514},"/wiki/2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian/ch3-windows","wiki/2025-07-18-Linux-STM32-CMake-VScode环境搭建/ch3-Windows","Windows","3",3000000,{"path":3511,"stem":3536,"title":3537,"date":3509,"chapter":3515,"chapterSort":3538,"docKey":3510,"docRoot":3511,"docTitle":3512,"isWikiDoc":58,"isWikiIndex":58},"wiki/2025-07-18-Linux-STM32-CMake-VScode环境搭建/index","Linux-STM32-CMake-VScode环境搭建",0,1778560327871]