在linux系统下搭建STM32单片机开发环境的记录
目录前言
懒得说了,过后再补
准备
ubuntu系统,vscode,交叉编译工具链gcc-arm-none-eabi,还需要一个下载软件,我还没装
安装交叉编译工具链
ubuntu系统可直接运行下面的命令直接安装
sudo apt install gcc-arm-none-eabi #这里不知道为什么apt-get安装显示没找到包,apt就找到了。
这里是通过系统命令安装的,会安装在/usr/bin目录下,我们就不需要配置环境变量了,通过官网那个下载的还需要配置环境变量。
vscode的配置
编码问题
使用vscode打开现有的或者创建一个STM32工程会出现中文乱码的情况,需要我们点击屏幕左下角齿轮->设置,在上面搜索encoding,将Files:Encoding选项内更换成GB2312,因为日常使用的keil预设为GB2312编码,这里我们将vscode的编码也改称GB2312就可以避免打开时中文乱码,或创建一个新工程后在keil打开乱码的情况了。再勾选Files:Auto Guess Encoding前的选项,这部分没弄明白什么作用,但是很多教程都说要勾上,那就勾上。
设置完之后我们就可以退出vscode重新打开,中文乱码不见了,文件的编码格式也会自动以GB2312打开。
include问题
在打开STM32项目的时候会面临很多引用报错问题,这是因为我们没有将需要引用的文件添加到includepath路径内,在keil下我们需要设置,在vscode下我们也需要设置一下,在项目的根目录下创建.vscode目录,并在.vscode目录下创建c_cpp_properties.json文件,如果已经有这个目录或这个文件就不需要创建,接着下一步进行设置就可以了。
文件内的内容填写下图中的代码即可,主要的部分是在includepath后的中括号内添加"${workspaceFolder}/**",这行代码的意思是工作区下的每一个文件夹以及子文件夹都添加到includepath。这样我们就解决掉了文件内include报错的问题了。
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**", //添加工作区目录下所有文件夹以及自文件夹到includepath
],
"defines": [
"STM32F103xE"
],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
关于其他报错处理
除了中文乱码以及include报错,还会有个别的未定义报错,如:RCC未定义,GPIOB未定义等,这部分错误的解决办法我没有找到,但是不处理这部分也可以正常运行代码,文件内的引用和定义也都可以通过CTRL+鼠标单击跳转,只是红色波浪线实在让人难以天天看着忍受,这里我们可以选择关闭红色波浪线提示。
在c_cpp_properties.json文件下的"defines"目录下添加对应的单片机型号按理说是可以实现去除红色波浪线的,我在windows系统上实现了,但是linux系统没实现,可能是硬盘读取速度慢的原因。也不确定和c语言环境有没有什么直接关系,配置都相似。
有的时候CTRL+鼠标单击没有实现跳转,但是我们确定有另一个文件声明,我遇到过在其他文件下打开stm32f103xe.h文件的声明时有可能打不开,这个文件有上万行代码,个人判定为代码过多,系统有的时候加载不出来。
这里我们在.vscode目录下新建settings.json文件,并在文件内添加下面的代码,如果已经有了settings.json文件可以在最外侧的大括号内添加下面的语句就可以了。
{
"C_Cpp.errorSquiggles": "enabled" //enable为关闭
}
将enabled更换为disabled即可开启红色波浪线提示。
makefile
既然我们要脱离windows系统进行编写STM32程序,那么我们肯定是要抛弃keil的,那我们的编译代码的过程就要更换到使用makefile文件来达到和keil编译相同的效果。
我们可以在linux系统下使用touch
来创建makefile文件,在文件内编写相关的配置文件就可以实现与keil的编译相同的作用。关于makefile文件的编写这里不多赘述。