ubuntu中安装配置STM32开发环境

发布者:独行侠客最新更新时间:2020-07-02 来源: eefocus关键字: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的库,函数名老是变来变去的,今年写的代码明年不能编译,蛋蛋受不了

关键字:ubuntu  安装配置  STM32  开发环境 引用地址:ubuntu中安装配置STM32开发环境

上一篇:STM32实现串口下载
下一篇:STM32高级开发(15)-使用eclipse开发STM32

推荐阅读最新更新时间:2024-11-12 18:12

STM32开发笔记37: 485总线的收发切换时间
单片机型号:STM32L053R8T6 使用STM32进行485程序设计时,采用中断进行发数,这就意味着在发数的同时还需考虑收发切换时间。先看下程序: while (1) { Target.HAL.CommonUart.SetWorkingMode(2); Target.HAL.CommonUart.SendData(Target.HAL.CommonUart.Buffer, 1); Target.Delayms(4); Target.HAL.CommonUart.SetWorkingMode(1); Target.HAL.WorkingLed.Turn(); Target.Delayms(100);
[单片机]
STM32 中断优先级(Cortex-M3)
一、概述 STM32(Cortex-M3)中有两个优先级的概念——抢占优先级和响应优先级,其属性编号越小,则优先级别越高。有人把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相
[单片机]
stm32外设的使能,失能,复位的区别
首先明确的是,在STM32中所有外设正常工作的前提是使能了相应的外设,有的可能只用使能一个(如GPIO),有的使能两个(如GPIO和USART),有的可能需要使能三个(如GPIO,AFIO,TIM)。总而言之,只有使能了外设时钟外设才能工作。 所以外设使能实际使能的是外设的时钟,而与之相应的外设失能也是使外设时钟失能。外设失能后配置外设是没有作用的除非重新使能。 与以上两个不同的是外设复位,它是通过改变外设的复位寄存器来实现复位功能的,所以并不会去改变外设的时钟状态,再次使用这个外设不需要重新使能时钟,但是其他相关的一些配置还是必须的(如GPIO的输入输出状态会恢复默认值,需要重新配置)。
[单片机]
STM32复位/时钟控制
========================== Reset/Clock Control ======================= 1、时钟安全系统(CSS) 时钟安全系统被激活后,时钟监控器将实时监控外部高速振荡器;如果HSE时钟发生故障,外部振荡器自动被关闭,产生时钟安全中断,该中断被连接到Cortex-M3的NMI的中断;同时CSS将内部RC振荡器切换为STM32的系统时钟源(对于STM32F103,时钟失效事件还将被送到高级定时器TIM1的刹车输入端,用以实现电机保护控制)。 操作流程: 1)、启动时钟安全系统CSS: RCC_ClockSecuritySystemCmd(ENABLE); (
[单片机]
stm32下载方式之串口ISP\swd
说明: 库文件版本:3.5.0 1.首先看一下stm32启动模式 stm32的启动模式由32芯片的boot0与boot1引脚决定。分为内嵌flash启动模式(正常启动模式)、内存启动模式、rom启动模式 启动方式与引脚高低电平的对应关系如下,芯片复位的四个时钟周期内会去读取boot0和boot1引脚的电平情况确定芯片的运行模式。 boot0=0,boot1=x ----------------内嵌flash启动模式 boot0=1,boot1=1 ----------------内存启动模式 boot0=1,boot1=0----------------rom启动模式(串口isp下载程序) 2.串口
[单片机]
基于STM32的多功能数字钟(中文版)
/************************************************************************************** 程序功能:基于STM32的多功能数字钟(中文版) ************************************************************************************** 1、时钟的基准用STM32F103RCT6自带的RTC实现。 2、这三个按键的功能分别为: 设置 、 加 、 减 。(WAKEUP KEY0 KEY1) 三个按键作为这三个功能: 键盘上的WAKEUP用作 设置 ,KE
[单片机]
STM32-(21):NVIC中断
NVIC:提供中断控制器,用于总体管理异常,称之为“内嵌向量中断控制器:Nested Vectored Interrupt Controller (NVIC)”。NVIC和处理器内核紧密相连. 中断的概念: 1、为什么需要中断? 有很重要的事件需要处理 2、中断来之之后,CPU需要做什么? 首先保护现场,处理中断,恢复现场 3、中断完了之后,怎么办? 继续处理原来的事件 1.编写一个数码管不断刷新和显示的程序: 当用户按下键盘时,数码管停止更新;当用户再次按下键盘时,数码管继续更新。 按键电路: Main() { while(1) { //数码管的值的更新函数 //数码管刷新函数 //按键判断函数 } }
[单片机]
STM32-(21):NVIC中断
STM32的AD9854 DDS模块调试总结
  DDS基本原理和特点   1、DDS基本原理   直接频率合成技术实际上是通过将存储的波形数据,通过特定算法,经过高速D/A转换器转换成所需要模拟信号的数字合成技术。其基本原理框图如图1所示。   由图1可见,其主要由标准参考频率源、相位累加器、波形存储器、数/模转换器等部分组成。其中,参考频率源一般是一个高稳定的晶体振荡器,其输出信号用于DDS中各部件同步工作。当频率合成器正常工作时,在标准频率参考源的控制下(频率控制字K决定了其相位增量),相位累加器则不断地对该相位增量进行线性累加,当相位累加器积满量时就会产生一次溢出,从而完成一个周期性的动作,即合成信号的一个频率周期。累加器的输出地址对波形ROM进行寻址,从而把存
[单片机]
<font color='red'>STM32</font>的AD9854 DDS模块调试总结
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved