基于 Ubuntu 18.04 的 STM32F407 开发

作者:解琛
时间:2020 年 8 月 2 日

  • 基于 Ubuntu 18.04 的 STM32F407 开发
  • 一、编译一个最小工程
    • 1.1 编译启动文件
    • 1.2 编译 C 文件
    • 1.3 链接文件
    • 1.4 生成 bin 和 hex 文件
    • 1.5 烧写程序
      • 通过 openocd 服务操作 Jlink 烧写程序
      • 通过 stm32flash 烧写程序

一、编译一个最小工程

编译任何文件都需要带上如下参数。

参数 说明
-mthumb 表明使用的指令集(必需)
-mcpu=cortex-m3 表明芯片内核(必需)
-g 产生调试信息

文件树如下。

xiechen@xiechen-Ubuntu:~/文档/5.stm32/1.stm32f407t8u6/demo$ tree
.
├── main.c
├── startup_stm32f40xx.s
├── stm32f4xx.h
├── stm32_flash.ld
└── system_stm32f4xx.h0 directories, 5 files

1.1 编译启动文件

终于搞定ubuntu编译和烧写stm32 openocd

【STM32开发环境】Linux下开发stm32(一) | 使用gcc-arm-none-eabi工具链编译

编译汇编文件前需要添加的参数如下。

参数 说明
-x assembler-with-cpp 先对文件进行预处理
-Wa,option 向汇编器Assembler传递参数

注:可以向汇编器传递的参数如下。

参数 说明
-W或–no-warn 关闭所有告警
–fatal-warnings 将所有的警告提示为错误
–warn 正常提示告警信息

在固件库中拷贝启动文件。

STM32F4xx固件库\STM32F4xx_DSP_StdPeriph_Lib_V1.5.1\STM32F4xx_DSP_StdPeriph_Lib_V1.5.1\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\gcc_ride7

使用工具链对启动文件进行编译。

arm-none-eabi-gcc -c -mthumb -mcpu=cortex-m4 -g -Wa,--warn -o startup_stm32f40xx.o startup_stm32f40xx.s

1.2 编译 C 文件

编译 C 需要添加的参数如下。

参数 描述
-Wall 允许输出所有警告

使用工具链对启动文件进行编译。

arm-none-eabi-gcc -c -mthumb -mcpu=cortex-m4 -g -Wall -o main.o main.c

1.3 链接文件

在固件的案例中找到文件 stm32_flash.ld,拷贝到当前工程中。接着让链接器开始根据 stm32_flash.ld 这个文件对 startup_stm32f40xx.o 和 main.o 这两个文件开始链接,生成包含了调试信息的 elf 文件,同时,我们还需要给链接器传递一些参数:

参数 描述
-T 指定链接文件
arm-none-eabi-gcc -o test.elf main.o startup_stm32f40xx.o -mthumb -mcpu=cortex-m4 -T stm32_flash.ld -specs=nosys.specs -static -Wl,-cref,-u,Reset_Handler -Wl,-Map=test.map -Wl,--gc-sections -Wl,--defsym=malloc_getpagesize_P=0x80 -Wl,--start-group -lc -lm -Wl,--end-group

1.4 生成 bin 和 hex 文件

arm-none-eabi-objcopy test.elf test.bin
arm-none-eabi-objcopy test.elf -Oihex test.hex

1.5 烧写程序

通过 openocd 服务操作 Jlink 烧写程序

【STM32开发环境】Linux下开发stm32(二) | 使用openocd下载程序

sudo apt install openocd

安装好 Jlink 之后,启动 Jlink。

JLinkExe

接着在终端进行连接和配置。

connect

通过 stm32flash 烧写程序

sudo apt install stm32flash
stm32flash /dev/ttyUSB0
stm32flash -w basic_lib_test.hex -v -g 0 /dev/ttyUSB0

基于 Ubuntu 18.04 的 STM32F407 开发相关推荐

  1. x-lite for linux,Linux Lite 4.6正式发布:现基于Ubuntu 18.04.3 LTS

    原标题:Linux Lite 4.6正式发布:现基于Ubuntu 18.04.3 LTS 创建者Jerry Bezencon于今天正式宣布Linux Lite 4.6系统版本更新,和上个版本4.4相隔 ...

  2. 基于Ubuntu 18.04机器人操作系统环境和深度学习环境配置

    基于Ubuntu 18.04机器人操作系统环境和深度学习环境配置详解 CUDA+Cudnn+ROS+anaconda+ubuntu装机必备 笔记本双系统安装 U盘启动项安装ubuntu18.04.1 ...

  3. linux操作系统老旧电脑,适用于旧PC的Linux操作系统LXLE 18.04.3发布,基于Ubuntu 18.04.3 LTS...

    原标题:适用于旧PC的Linux操作系统LXLE 18.04.3发布,基于Ubuntu 18.04.3 LTS LXLE团队宣布了LXLE 18.04.3的最终版本,这是他们基于Ubuntu的计算机操 ...

  4. [TI TDA4 J721E]PROCESSOR-SDK-J721E RTOS Linux 开发环境搭建 基于 ubuntu 18.04

              首先感谢阅读,如果您也对TDA4相关的开发感兴趣,我们这边有个学习交流微信群,可以入群和大家一起交流学习. 资历较浅,水平有限,如遇错误,请大家多指正! 保持开源精神,共同分享.进 ...

  5. 基于 Ubuntu 18.04 Jlink + Vim + Cmake + Makefile 调试 STM32

    Ubuntu 18.04 Jlink + Vim + Cmake + Makefile 调试 STM32 作者:解琛 时间:2020 年 8 月 3 日 Ubuntu 18.04 Jlink + Vi ...

  6. #Kinect之路#基于ubuntu 12.04的Kinect开发环境搭建 OpenNI+NITE+AVIN2+qt

    之前基于Win7搭建了kinect的开发环境,由于本人的机子太慢,编一个qt的hello world都要半分钟,所以为了方便以后的开发调试,尝试在ubuntu 12.04下搭建开发环境. 注意,如果你 ...

  7. 基于Ubuntu 18.04.3操作系统的TensorFlow 2.1.0、PyTorch 1.4.0、OpenCV 4.2.0、Darknet深度学习环境搭建

    今天是初五,民间有破五的习俗,简单来说就是说该工作啦. 回顾研究生毕业的一年半,期间从事过桌面应用开发.CAN\串口开发.无人机目标检测开发.爬虫.数据工程.大数据系统运维等.研究生期间学的深度学习也 ...

  8. Ubuntu Linux内核版本升级或降级到指定版本(基于ubuntu 18.04示例)

    目录 1.查看当前系统已安装的内核镜像 2.查询指定版本的linux镜像包 3.安装指定版本内核的linux系统头文件及镜像 4.查看当前系统中内核的启动顺序 5.修改内核启动顺序 6.生效grub配 ...

  9. 构建基于ubuntu 12.04的Sedona开发环境

    一.引言 Sedona协议是朗德华楼控领域上重要的技术合作伙伴Tridium公司所研发的设计用于自控领域事实上的行业技术规范和标准. Sedona Framework是一个开源的用于嵌入式设备编程和开 ...

最新文章

  1. Linux那些事儿之我是Sysfs(7)dentry与inode
  2. jQuery Callbacks
  3. 【JOURNAL】《不思八九》 --和友腊八诗一首
  4. 【 MATLAB 】DFT性质讨论(一)线性、循环反转、共轭与实序列的对称性的MATLAB实现
  5. mysql(五)查询缓存
  6. 混合粒子群算法原理通俗讲解
  7. source insight使用说明[转]--后续发现好的再加
  8. wxpython动态实时绘图_wxPython: 简单的绘图例子
  9. 广告中oCPX到底是如何进行优化的
  10. 数组实用类:Arrays
  11. 南洋股份拟57亿元收购天融信 老牌安全厂商曲线登录资本市场
  12. 小程序【笔记002】逻辑层简介
  13. 查看本地服务器MYSQL的端口号
  14. 《敏捷可执行需求说明 Scrum提炼及实现技术》—— 3.4 关注干系人的“愿求”...
  15. 云服务器 ECS > 安全 > 实例RAM角色 > 概述
  16. 华为交换机学习指南基于子网划分划分vlan
  17. 核方法以及核函数讲解
  18. JPush推送 之 RegistrationID 精确对点推送
  19. 深入浅出精讲面向对象设计七大原则,彻底领悟设计背后思想
  20. 怎么让照片里的人嘴巴动起来_让嘴巴动起来的制作方法

热门文章

  1. 易臣|企业车辆管理乱,用车难,怎么破?
  2. 最全markdown教程,它来了
  3. 继电器与LED小夜灯结合实现控制小夜灯循环亮灭
  4. 测试管理的绩效管理启示
  5. 正则表达式校验新疆人姓名格式
  6. 1034 Head of a Gang (30 分)
  7. How to use GDI+?simle introduction about configure
  8. 水下自动循迹机器人_全自动循迹灭火机器人的设计
  9. 详细解读最新的合同法
  10. 行星数据分析,地球诞生46亿年,而银河系诞生至少130亿年以上