[{"data":1,"prerenderedAt":3554},["ShallowReactive",2],{"wiki-page-\u002Fzh-tw\u002Fwiki\u002F2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian\u002F0200-linux":3,"wiki-doc-items-\u002Fzh-tw\u002Fwiki\u002F2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian\u002F0200-linux":3523,"language-switcher-data-\u002Fzh-tw\u002Fwiki\u002F2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian\u002F0200-linux":3538,"wiki-i18n-paths-\u002Fzh-tw\u002Fwiki\u002F2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian\u002F0200-linux":3553},{"id":4,"title":5,"body":6,"canonicalPath":3504,"chapterDepth":3505,"chapterOrder":3506,"date":3507,"description":47,"docI18nKey":3508,"docKey":3509,"docRoot":3510,"docTitle":3511,"extension":3512,"i18nKey":3513,"isBlogPost":3514,"isWikiDoc":58,"isWikiIndex":3514,"layout":3515,"legacyPath":3515,"locale":3516,"localeSlug":3517,"meta":3518,"navigation":58,"path":3504,"seo":3519,"sourcePath":3520,"sourceStem":3513,"stem":3521,"wikiDepth":55,"__hash__":3522},"content\u002F_i18n\u002Fzh-tw\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},"\u002Fzh-tw\u002Fwiki\u002F2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian\u002F0200-linux",0,"0200","2025-07-18","wiki\u002F2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian","zh-tw:2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian","\u002Fzh-tw\u002Fwiki\u002F2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian","Linux STM32 CMake VScode环境搭建","md","wiki\u002F2025-07-18-Linux-STM32-CMake-VScode环境搭建\u002F0200-Linux",false,null,"zh-TW","zh-tw",{},{"title":5,"description":47},"\u002Fwiki\u002F2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian\u002F0200-linux","_i18n\u002Fzh-tw\u002Fwiki\u002F2025-07-18-Linux-STM32-CMake-VScode环境搭建\u002F0200-Linux","_hzH828Noa6QmNx92Y6qqJhxXEFASoXZtdhevVt9G6g",[3524,3529,3530,3535],{"path":3525,"stem":3526,"title":3527,"date":3507,"chapterOrder":3528,"chapterDepth":3505,"docKey":3509,"docRoot":3510,"docTitle":3511,"isWikiDoc":58,"isWikiIndex":3514},"\u002Fzh-tw\u002Fwiki\u002F2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian\u002F0100-jian-jie","_i18n\u002Fzh-tw\u002Fwiki\u002F2025-07-18-Linux-STM32-CMake-VScode环境搭建\u002F0100-简介","簡介","0100",{"path":3504,"stem":3521,"title":5,"date":3507,"chapterOrder":3506,"chapterDepth":3505,"docKey":3509,"docRoot":3510,"docTitle":3511,"isWikiDoc":58,"isWikiIndex":3514},{"path":3531,"stem":3532,"title":3533,"date":3507,"chapterOrder":3534,"chapterDepth":3505,"docKey":3509,"docRoot":3510,"docTitle":3511,"isWikiDoc":58,"isWikiIndex":3514},"\u002Fzh-tw\u002Fwiki\u002F2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian\u002F0300-windows","_i18n\u002Fzh-tw\u002Fwiki\u002F2025-07-18-Linux-STM32-CMake-VScode环境搭建\u002F0300-Windows","Windows","0300",{"path":3510,"stem":3536,"title":3537,"date":3507,"chapterOrder":3515,"chapterDepth":3505,"docKey":3509,"docRoot":3510,"docTitle":3511,"isWikiDoc":58,"isWikiIndex":58},"_i18n\u002Fzh-tw\u002Fwiki\u002F2025-07-18-Linux-STM32-CMake-VScode环境搭建\u002Findex","Linux-STM32-CMake-VScode環境搭建",{"variants":3539},[3540,3543,3546,3549,3550],{"path":3541,"localeSlug":3542,"i18nKey":3513},"\u002Fen-us\u002Fwiki\u002F2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian\u002F0200-linux","en-us",{"path":3544,"localeSlug":3545,"i18nKey":3513},"\u002Fzh-hant\u002Fwiki\u002F2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian\u002F0200-linux","zh-hant",{"path":3547,"localeSlug":3548,"i18nKey":3513},"\u002Fzh-hk\u002Fwiki\u002F2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian\u002F0200-linux","zh-hk",{"path":3504,"localeSlug":3517,"i18nKey":3513},{"path":3551,"localeSlug":3552,"i18nKey":3513},"\u002Fzh-cn\u002Fwiki\u002F2025-07-18-linux-stm32-cmake-vscode-huan-jing-da-jian\u002F0200-linux","zh-cn",[3541,3520,3544,3520,3547,3520,3504,3520,3551,3520],1784646874148]