ubuntu中安装配置STM32开发环境

笔者做嵌入式开发的,主要用到linux系统来做开发,有时候遇到既要开发arm linux,又要挂载MCU的情况(主要是STM32这款),这两个芯片跨平台,指令不兼容。以前开发STM32是在windows下的IDE,使用keil或者IAR来开发,自从搞arm linux以来,很少开windows系统,两个系统切来切去着实麻烦。这篇文章主要针对长期使用Linux系统的用户,有什么不对的地方,欢迎指正。

接下教教大家怎么在linux下部署STM32开发环境

首先安装一个stm32cubemx,该软件可以在st官网下载,要注册账号,还要搞邮件的乱七八糟的步骤就不说了,自行解决

下载下来的文件中就用到下面两个文件

SetupSTM32CubeMX-4.23.0.exe

SetupSTM32CubeMX-4.23.0.linux

顺便提一下,cubemx是用java编写的,安装需要较新的java环境,这个问题读者自行解决


命令行下运行SetupSTM32CubeMX-4.23.0.linux,也可以鼠标双击,但是命令行更有逼格一些,推荐使用


安装完之后/home下面有个STM32CubeMX文件夹,打开文件夹,双击图中可执行文件



选择芯片型号,就选一个stm32f103c8的芯片好了,不嫌累可以在右下方的型号表里面翻,也可以从左上角的搜索框直接查找。

确认型号后点start project开启一个工程



打开新世界的大门后是这样一个界面,推荐把PD0,PD1,PC14,PC15设置为RCC管脚,接外部晶振,并在左边RCC选项下打开。接着点上乱七八糟的管脚配置,笔者比较喜欢勾选上freertos操作系统



时钟配置为外部时钟,倍频到72Mhz



NVIC DMA等看情况配置,都不傻,瞎配着多踩几下坑就会了,就不啰嗦了



点击这个齿轮生成工程,并选择生成makefile版本的工程,工具链暂时先按默认处理吧,后面再讲讲工具链怎么搞


 

你以为这就搞好了吗,嘿嘿,STM32cubeMX还有点bug,生成工程的时候有几条是重复的,如果不管会导致编译出错的,比如图中选中的部分,75行和108行是一样的,要手动把Makefile重复的部分删掉一个



--------------------------------------------------

接下来配置一下交叉工具链,STM32的交叉工具链是arm-none-eabi-

可以从 https://launchpad.net/gcc-arm-embedded/+download

下载工具链,笔者比较喜欢下载源码自己编译,但是这里一不小心下载成bin文件了,没关系,可以运行就好。需要折腾的选择src版本自行编译。



找到工具链位置,export 一下。或者打开STM32cubeMX,点击load project,打开之前生成工程的.ioc文件,在生成工程时指定工具链位置



或者简单粗暴一点,在makefile里面直接指定路径



之后make 一下,生成hex和bin,没问题~~~~~~oh yeah



----------------------------------------------------------

接下来安装stlink驱动。

准备工作,先装上libusb

sudo apt-get install libusb-dev

sudo apt-get install libusb-1.0-0-dev

获取源码

git clone https://github.com/texane/stlink

编译方法参考https://github.com/texane/stlink/blob/master/doc/compiling.md

编译安装完成后,./st-flash erase 擦一擦芯片试试


makefile里面加上一段

#---------------------------- write to mcu -----------------------------#
flash:
    st-flash write build/ $( TARGET ).bin 0x8000000



使用命令make flash就能下载程序到MCU里面去了

需要jlink来调试的,到http://www.segger.com/jlink-software.html下载linux版本安装包,具体用法我就告诉你,这道题太难了,我不会做,不会做,读者自行解决,有好的教程也可以分享给我。

后面还有仿真之类的乱七八糟的,就呵呵了,不会配也很少用。

在这里可以教大家一个debug技巧,重定向一下printf函数,这里需要敲一下黑板,在keil下,printf的底层是fputc函数实现的,但gnu下面是_write函数,注意不要搞错了。


//gnu下用此函数重定向printf
int _write ( int fd, char *pBuffer, int size)
{
   int i;
     for (i = 0; i < size; i++)
    {
         while((USART1-> SR& 0X40)== 0); //等待上一次串口数据发送完成
        USART1-> DR = ( uint8_t) pBuffer[i];   //写DR,串口1将发送数据
    }
     return size;
}
//end


最后喜欢写寄存器代码的,可以参考我的开源代码,我就不喜欢ST的库,函数名老是变来变去的,今年写的代码明年不能编译,蛋蛋受不了

https://github.com/MagicPrince666/STM32_LCD.git



### 如何在 Ubuntu 系统中搭建 STM32 开发环境 #### 工具链安装 为了能够在 Ubuntu 上开发 STM32 微控制器程序,需要先安装必要的工具链。这些工具通常包括编译器 `arm-none-eabi-gcc` 和调试工具 OpenOCD。 1. **更新包管理器并添加源** 首先确保系统的软件包是最新的,并通过国内镜像加速下载速度。 ```bash sudo apt update && sudo apt upgrade -y ``` 2. **安装 GCC 编译器** 使用以下命令安装 ARM GNU Toolchain: ```bash sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi -y ``` 这一步会安装用于交叉编译的工具链[^1]。 3. **安装 GDB 调试器** 安装支持远程目标调试的 GDB 版本: ```bash sudo apt install gdb-multiarch -y ``` 4. **安装 OpenOCD** OpenOCD 是一个开源硬件调试工具,可以用来烧录代码到 STM32 并进行在线调试。 ```bash sudo apt install openocd -y ``` 如果默认仓库中的 OpenOCD 不够新,可以通过构建最新版来替代现有版本。 5. **安装 ST-Link 工具** 对于 STM32 的调试和编程,推荐使用官方驱动程序 stlink。 ```bash sudo add-apt-repository ppa:stlink-org/stlink-v1 sudo apt update sudo apt install stlink-tools -y ``` #### IDE 安装配置 对于集成开发环境 (IDE),可以选择 VSCode 或 Arduino IDE 来完成开发工作流。 1. **VS Code 安装** Visual Studio Code 提供轻量级编辑体验以及强大的插件生态系统。 ```bash wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" sudo apt update sudo apt install code -y ``` 推荐安装 C/C++ 插件扩展以便更好地支持语法高亮、智能感知等功能。 2. **Arduino IDE 支持 STM32** 若希望简化流程,则可以直接利用 Arduino IDE 实现快速原型设计。 下载 Linux 版本后解压运行即可: ```bash cd ~/Downloads/ wget https://downloads.arduino.cc/arduino-latest-linux64.tar.xz tar xf arduino*.tar.xz ./arduino* ``` 同时记得按照文档指引增加对 STM32 核心的支持[^2]。 3. **CubeMX 设置** STM32CubeMX 可帮助生成初始化代码框架,减少手动编写寄存器操作的时间成本。 借助 Wine 模拟层加载 Windows 应用程序实例化该图形界面应用: ```bash sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install wine-stable winbind lib32ncurses5:i386 lib32stdc++6:i386 zlib1g:i386 -y ``` #### 测试验证 最后确认整个链条正常运作无误的方法如下: - 创建简单的 Blink LED 示例工程; - 将其上传至实际硬件设备观察效果是否一致; - 利用断点功能逐步跟踪执行路径以熟悉调试技巧。 ```python def blink_led(): import time while True: print("LED ON") time.sleep(0.5) print("LED OFF") time.sleep(0.5) blink_led() ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值