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