ubuntu linux下建立stm32开发环境: 程序烧录 openocd+openjtag
原文出处: http://blog.csdn.net/embbnux/article/details/17619621
之前建立stm32开发环境,程序也已经编译好生成main.bin,接下来就是要把该文件烧录到stm32上.在linux下给arm烧录程序主要使用openocd,这个软件开源,而且支持众多芯片,从ARM9到A8都可以,当然STM32也可以.支持的JTAG工具也很多,JLINK ST-LINK OSBDM都可以,我这正好有一个openjtag基于FT2232C的,也是被支持的.
个人原创,转载请注明
参考:
How-to manual Installing a toolchain for Cortex-M3/STM32 on Ubuntu by Peter Seng
一 安装openocd
在ubuntu下安装openocd
sudo apt-get install openocd
也可以到官网下载源码包自己编译
二 安装openjtag驱动
插上openjtag
user@ubuntu:~/$ lsusb
Bus 002 Device 005: ID 093a:2521 Pixart Imaging, Inc.
Bus 002 Device 003: ID 1457:5118 First International Computer, Inc. OpenMoko Neo1973 Debug board (V2+)
第二个就是了,记下ID 1457:5118
sudo gedit /etc/udev/rules.d/45-ftdi2232-libftdi.rules 在里面添加
SYSFS{idProduct}=="5118", SYSFS{idVendor}=="1457", MODE="666", GROUP="plugdev"
权限666,使用openocd就不用sudo了.
sudo /etc/init.d/udev restart
拔下在插上就可以了.
三 使用openocd 连openjtag
JTAG接口配置文件openjtag.cfg.根据JTAG设备不同,修改下面
#interface configuration openjtag#############################
interface ft2232
ft2232_device_desc "USB<=>JTAG&RS232"
ft2232_layout jtagkey
ft2232_vid_pid 0x1457 0x5118
可以参考openocd目录下的文件:/usr/share/openocd/scripts/interface,主要是设备ID以及设备名字,可以通过dmesg | grep usb命令查看.
要烧录stm32f103就得有这个设备的相关配置,可以查看/usr/share/openocd/scripts/target/stm32f1x.cfg
这里把两个文件合在一起openocd.cfg
#daemon configuration###############################################################
telnet_port 4444
gdb_port 3333
#interface configuration openjtag#############################
interface ft2232
ft2232_device_desc "USB<=>JTAG&RS232"
ft2232_layout jtagkey
ft2232_vid_pid 0x1457 0x5118
#board configuration################################################################
# Adjust Work-area size (RAM size) according to MCU in use:
#STM32F103RB --> 20KB
#set WORKAREASIZE 0x5000
#STM32F103ZE --> 64KB
set WORKAREASIZE 0x10000
#target configuration###############################################################
# script for stm32f1x family
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME stm32f1x
}
if { [info exists ENDIAN] } {
set _ENDIAN $ENDIAN
} else {
set _ENDIAN little
}
# Work-area is a space in RAM used for flash programming
# By default use 16kB
if { [info exists WORKAREASIZE] } {
set _WORKAREASIZE $WORKAREASIZE
} else {
set _WORKAREASIZE 0x4000
}
# JTAG speed should be <= F_CPU/6. F_CPU after reset is 8MHz, so use F_JTAG = 1MHz
adapter_khz 500
adapter_nsrst_delay 100
jtag_ntrst_delay 100
#jtag scan chain
if { [info exists CPUTAPID] } {
set _CPUTAPID $CPUTAPID
} else {
# See STM Document RM0008
# Section 31.6.3
set _CPUTAPID 0x3ba00477
}
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
if { [info exists BSTAPID] } {
# FIXME this never gets used to override defaults...
set _BSTAPID $BSTAPID
} else {
# See STM Document RM0008
# Section 31.6.2
# Low density devices, Rev A
set _BSTAPID1 0x06412041
# Medium density devices, Rev A
set _BSTAPID2 0x06410041
# Medium density devices, Rev B and Rev Z
set _BSTAPID3 0x16410041
set _BSTAPID4 0x06420041
# High density devices, Rev A
set _BSTAPID5 0x06414041
# Connectivity line devices, Rev A and Rev Z
set _BSTAPID6 0x06418041
# XL line devices, Rev A
set _BSTAPID7 0x06430041
# VL line devices, Rev A and Z In medium-density and high-density value line devices
set _BSTAPID8 0x06420041
# VL line devices, Rev A
set _BSTAPID9 0x06428041
}
jtag newtap $_CHIPNAME bs -irlen 5 -expected-id $_BSTAPID1 \
-expected-id $_BSTAPID2 -expected-id $_BSTAPID3 \
-expected-id $_BSTAPID4 -expected-id $_BSTAPID5 \
-expected-id $_BSTAPID6 -expected-id $_BSTAPID7 \
-expected-id $_BSTAPID8 -expected-id $_BSTAPID9
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME cortex_m -endian $_ENDIAN -chain-position $_TARGETNAME
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
# flash size will be probed
set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME stm32f1x 0x08000000 0 0 0 $_TARGETNAME
# if srst is not fitted use SYSRESETREQ to
# perform a soft reset
cortex_m reset_config sysresetreq
开始烧录:
< 1 > 在一个终端下执行:
openocd -f openocd.cfg
出现:
Open On-Chip Debugger 0.7.0 (2013-05-15-17:28)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter speed: 500 kHz
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
cortex_m3 reset_config sysresetreq
Info : clock speed 500 kHz
Info : JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3)
Info : JTAG tap: stm32f1x.bs tap/device found: 0x06414041 (mfg: 0x020, part: 0x6414, ver: 0x0)
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
没有提示出错,就表示连接上STM32了 .如果出现出错,就在开发板上按下RESET 键复位,查看BOOT0和BOOT1有没有设置出错.
< 2 > 在另一个终端下,输入:
telnet localhost 4444
依次输入:
reset halt
flash probe 0
stm32f1x mass_erase 0
flash write_bank 0 /you_stm32_project_dir/main.bin 0
reset run
程序就烧好了,按下reset键,就开始运行了.
要输入这么多命令太麻烦了,写个perl脚本使它一步运行.
首先安装perl-telnet
sudo apt-get install libnet-telnet-perl
在工程目录下新建do_flash.pl文件
#!/usr/bin/perl
use Net::Telnet;
$numArgs = $#ARGV + 1;
if($numArgs != 1){
die( "Usage ./do_flash.pl [main.bin] \n");
}
$file = $ARGV[0];
$ip = "127.0.0.1";
$port = 4444;
$telnet = new Net::Telnet (
Port => $port,
Timeout=>10,
Errmode=>'die',
Prompt =>'/>/');
$telnet->open($ip);
print $telnet->cmd('reset halt');
print $telnet->cmd('flash probe 0');
print $telnet->cmd('stm32f1x mass_erase 0');
print $telnet->cmd('flash write_bank 0 '.$file.' 0');
print $telnet->cmd('reset halt');
print $telnet->cmd('exit');
print "\n";
在根目录下的Makefile文件里面加入这段语句:
flash:all
./do_flash.pl $(TOP)/main.bin
这样只要,执行make flash就可以直接运行第二步了,方便简介.
转载于:https://www.cnblogs.com/schips/p/10671259.html
ubuntu linux下建立stm32开发环境: 程序烧录 openocd+openjtag相关推荐
- buntu linux下建立stm32开发环境: GCC安装以及工程Makefile建立
之前在e络盟的意法半导体掏了一个STM32开发板挺好的,却不想在window下开发,也不想用那么占内存的IAR MDK等软件,所以决定在ubuntu下建立该开发环境,像之前avr linux一样,找了 ...
- nuttx linux 编译,linux下建立nuttx开发环境
1.安装ARM Toolchain.(也可以选择使用buildroot自己搭建开发环境,不过我在linux下使用ARM Toolchain觉得挺好用,官方的开发环境也能够比较好支持ARM Toolch ...
- linux skype 接口,ubuntu /linux下skype api开发环境搭建
1.安装Skype: 下载skype for linux,地址:http://www.skype.com/download/skype/linux/choose/ 可以下载一个ubuntu 8.10 ...
- 2021-01-13 Linux下安装lua开发环境 Ubuntu
Linux下安装lua开发环境 Ubuntu 1.下载lua包并解压 wget -c http://www.lua.org/ftp/lua-5.3.5.tar.gz tar zxvf lua-5.3. ...
- 在UBUNTU LINUX下搭建 ANDROID开发
菜鸟系列之一:在 UBUNTU LINUX下搭建 ANDROID开发 第一步:激活 ROOT用户.................................................... ...
- GCC编译器简明教程(Linux下C语言开发环境的搭建)
GCC编译器简明教程(Linux下C语言开发环境的搭建) 市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核.桌面环境(例如GNOME.KDE.Unity等)和各种常用的必 ...
- LibOpenCM3(一) Linux下命令行开发环境配置
目录 LibOpenCM3(一) Linux下命令行开发环境配置 LibOpenCM3(二) 项目模板 Makefile分析 LibOpenCM3(三) .ld文件(连接器脚本)和startup代码说 ...
- linux 下51单片机开发环境搭建
linux 下51单片机开发环境搭建(arch linux) 编译sdcc 软件: sdcc 命令:sdcc file.c 得到一堆文件需要( .inx) 命令: packihx file.inx & ...
- linux下julia的开发环境,Ubuntu搭建Julia远程开发环境
Julia作为一门新兴的编程语言,还是可以学一学的,这里总结了一下Ubuntu系统远程搭建Julia开发环境的方法. 前期准备: 云服务器一台,操作系统为Ubuntu18.04, xshell6 + ...
最新文章
- Linux SSH远程文件/文件夹传输命令scp
- 岭南六少个人独立博客开通啦
- 用了自定义Banner后,SpringBoot瞬间变的高大上了...
- 阿里一面 缓存穿透、缓存击穿、缓存雪崩和热点数据失效问题的解决方案
- 一步一步教你玩转.NET Framework的配置文件app.config (转载)
- 支持!解决卡巴斯基程序错误及程序断开的问题!
- 由于没有远程桌面授权服务器可以提供许可证,远程会话被中断。
- 使用ArcGIS软件进行投影变换和坐标校正
- 计算机打字测试,打字测试
- 使用scrapy框架爬虫实战
- Acwing-860. 染色法判定二分图
- GitLab 小白入手教程
- 供电企业的福音,远程抄表系统无线解决方案,让工程师告别奔波
- 窃听神技:使用智能手机收听通过笔记本电脑键盘输入的内容
- JS面试问题小总结——1
- MYSQL人事工资管理系统--数据库表及表设计(一)
- 什么是平均负载,以及影响平均负载的因素
- 升级5G手机是否需要更换5G卡?揭秘4G和5G网络的差异与转换方法
- base64文件流转换成pdf格式下载/打印,兼容IE浏览器
- 精彩剧透|SAP Concur 财经领袖峰会重磅嘉宾和深度议题
热门文章
- 涂鸦WIFI模组方案(模组 SDK)
- make工具和Makefile基础语法(含有交叉编译、pthread_create()的处理)
- oss图片尺寸调用方式_是时候来一场轰轰烈烈的OSS升级了
- 客户机-服务器系统,什么是客户机/服务器计算
- MySQL:union all与union区别详解
- 转list_你知道Java数组转List的三种方式及对比吗?
- 前端:20个 CSS 快速提升技巧
- 程序员漫画:别人眼中的程序员vs真实的程序员
- java jsonp 接口_jsonp使用,spring4.x对jsonp的支持
- Windows下访问VirtualBox的mysql服务