ubuntu中安装配置STM32开发环境

3 篇文章 0 订阅
3 篇文章 0 订阅

笔者做嵌入式开发的,主要用到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



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值