<p style="text-indent:2em;"> <u>STM32</u><u>单片机</u>非常强大,大多数教程都是使用 <u>keil</u> 编译器,keil 是收费的而 gcc 是开源免费的。这里介绍一些使用 gcc + vscode 开发单片机程序的经验。(这里不解释 gcc 是什么)。</p>
讯享网
讯享网第一:环境准备</p> gcc</p> 讯享网<u>ARM</u> <u>开发者</u>官网 </p> https://developer.arm.com/</p> 讯享网<img src="https://file1.elecfans.com/web2/M00/A4/DE/wKgaomUFE3qAZaJTAAFzR2bbyDQ357.png" alt="c2-53e1-11ee-a25d-92fbcf53809c.png" /></p> <img src="https://file1.elecfans.com/web2/M00/A4/DE/wKgaomUFE3yACSVCAAF9_S5w0Vw891.png" alt="79ceb23a-53e1-11ee-a25d-92fbcf53809c.png" /></p> 讯享网<img src="https://file1.elecfans.com/web2/M00/A4/DE/wKgaomUFE32ASvqdAADr_UTqy-M250.png" alt="7a093572-53e1-11ee-a25d-92fbcf53809c.png" /></p> 我有个习惯:尽量使用免安装版软件,直接解压到软件安装目录中,添加环境变量即可使用,这样即使重装系统也不必重装软件。</p> 讯享网把 arm-none-eabi-gcc 的 bin/ 目录添加到环境变量 Path 中就算安装完成了。打开命令行执行</p> </p> 讯享网 </p> arm-none-eabi-gcc -v
讯享网 </p> </p> 讯享网显示出版本<u>信息</u>就说明 arm-none-eabi-gcc 可以使用了。</p> <img src="https://file1.elecfans.com/web2/M00/A4/DE/wKgaomUFE4KAcYTIAAgBak5woS0416.png" alt="7a36e990-53e1-11ee-a25d-92fbcf53809c.png" /></p> 讯享网第二:make</p> 我使用的 make 是从 mingw-w64 中复制出来的。</p> 讯享网http://mingw-w64.yaxm.<u>or</u>g/doku.php</p> 方便单独<u>下载</u> make:</p> 讯享网https://downlo<u>ad</u>.csdn.net/download/_/</p> 下载的 make 工具同样添加到环境变量 Path 中即可使用。</p> 讯享网第三:vscode</p> vscode 仅仅是个文本编辑器,没有它也能开发(txt 写代码,命令行编译)。</p> 讯享网https://code.visualstudio.com/#alt-downloads</p> 又是免安装版:</p> 讯享网<img src="https://file1.elecfans.com/web2/M00/A4/DE/wKgaomUFE4OAZKWmAAEdxUadOsQ282.png" alt="7aa9e512-53e1-11ee-a25d-92fbcf53809c.png" /></p> <img src="https://file1.elecfans.com/web2/M00/A4/DE/wKgaomUFE4WAFSbBAANcuXMA-TQ693.png" alt="7ad2f2d6-53e1-11ee-a25d-92fbcf53809c.png" /></p> 讯享网软件目录下新建文件夹 data/ 可以使 vscode 完全不使用 C 盘空间,所有的缓存文件都会生成在 data/ 内。</p> <img src="https://file1.elecfans.com/web2/M00/A4/DE/wKgaomUFE4eAOLJRAAHQdbE1Wf0772.png" alt="7b2528ee-53e1-11ee-a25d-92fbcf53809c.png" /></p> 讯享网第四:编译链接过程</p> <img src="https://file1.elecfans.com/web2/M00/A4/DE/wKgaomUFE4mAaoQJAAMEut3HfPk271.png" alt="7b516fa8-53e1-11ee-a25d-92fbcf53809c.png" /></p> 讯享网Makefile 告诉 make 要干点什么,要编译谁,具体怎么编译;</p> make 生成相应的命令调用各个工具执行动作;</p> 讯享网gcc 负责把 c 源文件编译成<u>汇编</u>;</p> as 负责把 编译器生成的汇编文件和秃头<u>程序员</u>手撸的汇编文件都转换成二进制指令,输出到可重定位目标文件 ( *.o );</p> 讯享网(gcc 也可以一次完成 编译和汇编的动作, 直接用 .c 文件生成 .o 文件)</p> .ld 文件是链接脚本, 告诉链接器哪段地址是内存 <u>RAM</u>, 哪段地址是 Flash, 哪些 RAM 分配给了栈, 哪些地址分配给了堆...</p> 讯享网链接器把所有 .o 文件组合起来, 静态变量的地址, 函数的地址都会在这里确定, 调用函数的函数名会被替换成函数的地址...最后生成一个 elf 文件;</p> 虽然 elf 是可执行文件, 但裸机是没法解析 elf 文件的, 所以需要 objcopy 导出纯二进制代码, 这个二进制文件就可以直接烧录到单片机运行了, 这一步也可以输出 hex 文件;</p> 讯享网如果有需要还可以用 objdump 反汇编二进制文件, 也可以反汇编 elf 文件, 反汇编 .o 文件, 帮助调试.</p> 创建空工程</p> 讯享网<img src="https://file1.elecfans.com/web2/M00/A4/DE/wKgaomUFE4qASqIPAAB-xv-JVqU211.png" alt="7b7f982e-53e1-11ee-a25d-92fbcf53809c.png" /></p> 一个 ".vscode" 文件夹装一些配置,"boot" 装启动单片机的汇编文件,"cmsis" 装官方提供的源文件,"inc" 装头文件,"src" 装源文件,"output" 装输出文件,再来一个 makefile 一个链接脚本就完成了。完全没有多余的东西(txt 写代码,命令行编译的话可以删掉".vscode")。</p> 讯享网<img src="https://file1.elecfans.com/web2/M00/A4/DE/wKgaomUFE4uAJTx7AADvmheGJW0189.png" alt="7ba44336-53e1-11ee-a25d-92fbcf53809c.png" /></p> 在 makefile 所在的目录执行 "make" 就编译好了。</p> 讯享网https://github.com/bfuxd/stm32f103EmptyProject</p> 这是完整工程(去掉了空文件夹,去掉了输出目录),其中的 makefile 支持 windows 和 <u>linux</u> 。</p> 讯享网https://github.com/bfuxd/stm32f1<u>Te</u>mplate</p> 是模板工程,添加了一些基本功能。</p> 讯享网J-Link烧录和调试</p> .vscode/launch.json 里写入</p> 讯享网 </p> </p> 讯享网 { // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid= “version”: “0.2.0”, “configurations”: [ { "name": "Cortex Debug", "type": "cortex-debug", "cwd": "${worksp<u>ac</u>eRoot}", "executable": "${workspaceFolder}output emplate.elf", "request": "launch", "servertype": "jlink", "device": "STM32F103ZE", "interface": "swd", "preLaunchTask": "Com<u>pi</u>le" } ], }
讯享网 </p> </p> 讯享网.vscode/tasks.json 里写入</p> </p> 讯享网 </p> { 讯享网"version": "2.0.0", //每次执行都不启动一个新的控制台 "presentation": { "reveal": "always", "panel": "shared", //"new", "echo": true }, //设置环境变量 "options": { "env": { //"Path": "%Path%;D:ProgramFilesMinGW64bin", "LOCAL_SRC_HOME": "${workspaceRoot}" } }, //任务列表 "tasks": [ { "label": "Compile", "command": "make", "args": [], "group": { "kind": "build", "i<u>sD</u>efault": true } } ] }
</p> 讯享网 </p> 安装 J-Link 驱动后,把 J-Link 添加到环境变量 Path 中,点击 F5 就能<u>仿真</u>了。</p> 讯享网<img src="https://file1.elecfans.com/web2/M00/A4/DE/wKgaomUFE42AN36zAAHImX3WU_E115.png" alt="7bd38286-53e1-11ee-a25d-92fbcf53809c.png" /></p> 还可以监视指定内存、变量、<u>寄存器</u>,反汇编指定函数 ……</p> 讯享网仿真时点击 " Ctrl + Shift + P " 输入 Cortex-debug: Show di<u>sas</u>sembly 回车输入函数名, 即可在汇编中执行指定函数, " Ctrl + Shift + P " 输入 Cortex-debug: View Memory 回车输入起始地址和数据长度, 即可查看内存中指定区域的数据.</p> 彻底告别 keil。</p> 讯享网编辑:黄飞</p> </p>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/181217.html