基于 Ubuntu 18.04 的 STM32F407 开发
基于 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 开发相关推荐
- 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相隔 ...
- 基于Ubuntu 18.04机器人操作系统环境和深度学习环境配置
基于Ubuntu 18.04机器人操作系统环境和深度学习环境配置详解 CUDA+Cudnn+ROS+anaconda+ubuntu装机必备 笔记本双系统安装 U盘启动项安装ubuntu18.04.1 ...
- 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的计算机操 ...
- [TI TDA4 J721E]PROCESSOR-SDK-J721E RTOS Linux 开发环境搭建 基于 ubuntu 18.04
首先感谢阅读,如果您也对TDA4相关的开发感兴趣,我们这边有个学习交流微信群,可以入群和大家一起交流学习. 资历较浅,水平有限,如遇错误,请大家多指正! 保持开源精神,共同分享.进 ...
- 基于 Ubuntu 18.04 Jlink + Vim + Cmake + Makefile 调试 STM32
Ubuntu 18.04 Jlink + Vim + Cmake + Makefile 调试 STM32 作者:解琛 时间:2020 年 8 月 3 日 Ubuntu 18.04 Jlink + Vi ...
- #Kinect之路#基于ubuntu 12.04的Kinect开发环境搭建 OpenNI+NITE+AVIN2+qt
之前基于Win7搭建了kinect的开发环境,由于本人的机子太慢,编一个qt的hello world都要半分钟,所以为了方便以后的开发调试,尝试在ubuntu 12.04下搭建开发环境. 注意,如果你 ...
- 基于Ubuntu 18.04.3操作系统的TensorFlow 2.1.0、PyTorch 1.4.0、OpenCV 4.2.0、Darknet深度学习环境搭建
今天是初五,民间有破五的习俗,简单来说就是说该工作啦. 回顾研究生毕业的一年半,期间从事过桌面应用开发.CAN\串口开发.无人机目标检测开发.爬虫.数据工程.大数据系统运维等.研究生期间学的深度学习也 ...
- Ubuntu Linux内核版本升级或降级到指定版本(基于ubuntu 18.04示例)
目录 1.查看当前系统已安装的内核镜像 2.查询指定版本的linux镜像包 3.安装指定版本内核的linux系统头文件及镜像 4.查看当前系统中内核的启动顺序 5.修改内核启动顺序 6.生效grub配 ...
- 构建基于ubuntu 12.04的Sedona开发环境
一.引言 Sedona协议是朗德华楼控领域上重要的技术合作伙伴Tridium公司所研发的设计用于自控领域事实上的行业技术规范和标准. Sedona Framework是一个开源的用于嵌入式设备编程和开 ...
最新文章
- Linux那些事儿之我是Sysfs(7)dentry与inode
- jQuery Callbacks
- 【JOURNAL】《不思八九》 --和友腊八诗一首
- 【 MATLAB 】DFT性质讨论(一)线性、循环反转、共轭与实序列的对称性的MATLAB实现
- mysql(五)查询缓存
- 混合粒子群算法原理通俗讲解
- source insight使用说明[转]--后续发现好的再加
- wxpython动态实时绘图_wxPython: 简单的绘图例子
- 广告中oCPX到底是如何进行优化的
- 数组实用类:Arrays
- 南洋股份拟57亿元收购天融信 老牌安全厂商曲线登录资本市场
- 小程序【笔记002】逻辑层简介
- 查看本地服务器MYSQL的端口号
- 《敏捷可执行需求说明 Scrum提炼及实现技术》—— 3.4 关注干系人的“愿求”...
- 云服务器 ECS > 安全 > 实例RAM角色 > 概述
- 华为交换机学习指南基于子网划分划分vlan
- 核方法以及核函数讲解
- JPush推送 之 RegistrationID 精确对点推送
- 深入浅出精讲面向对象设计七大原则,彻底领悟设计背后思想
- 怎么让照片里的人嘴巴动起来_让嘴巴动起来的制作方法