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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277998.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277998.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277998.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在Teams中對網站的URL特殊解析

Teams中有一個不太被大家注意的擴展點&#xff0c;名字叫Link unfurling&#xff0c;就是對于一些特殊域名的URL進行特別的解釋。 可能這么說&#xff0c;大家還是無法理解&#xff0c;我們看一下下面這個圖&#xff0c;當用戶在message輸入框中輸入了一竄url后&#xff0c;Te…

Wireshark 在Windows下的安裝

1、wireshark官網地址&#xff1a;https&#xff1a;//www.wireshark.ort/ 下載抓包驅動&#xff1a;windows使用winpcap&#xff0c;Linux使用libcap2、安裝下載好的wireshark程序包&#xff1a;3、安裝winpcap插件&#xff1a;4、安裝USBPcap插件&#xff1a;5、安裝完成&…

Teams團隊的成員列表API的已知問題

如果大家經常使用Graph API來對Teams進行操作管理的話&#xff0c;有時候會遇到一些奇怪的問題&#xff0c;我前兩天還在Stack Overflow上回答了一個用戶的問題&#xff0c;這個問題我自己也遇到過。所以我想用這篇文章來分享一下&#xff0c;萬一以后大家遇到類似的問題&#…

OSChina 周三亂彈 —— 爸爸說,這個是從他硬盤里掉出來的

2019獨角獸企業重金招聘Python工程師標準>>> Osc亂彈歌單&#xff08;2018&#xff09;請戳&#xff08;這里&#xff09; 【今日歌曲】 煥煥 &#xff1a;分享鄭秀文的單曲《唉聲嘆氣》 《唉聲嘆氣》 手機黨少年們想聽歌&#xff0c;請使勁兒戳&#xff08;這里&am…

改進的二分查找

1 import java.util.Comparator;2 3 public class MyUtil {4 5 public static <T extends Comparable<T>> int binarySearch(T[] x, T key) {6 return binarySearch(x, 0, x.length- 1, key);7 }8 9 // 使用循環實現的二分查找 10 public static…

LuckyDraw app被評為Microsoft365 App Award

今天查了一下LuckyDraw app&#xff0c;突然發現我上半年開發的Teams app: LuckyDraw&#xff0c;竟然多了一個勛章圖標&#xff0c;點進去一看是微軟給我的app評了一個”Microsoft 365 App Award”。Super surprise!!&#x1f60d;&#x1f60d;&#x1f60d; 看來我必須要抓…

Python學習筆記__10.4章 進程VS線程

# 這是學習廖雪峰老師python教程的學習筆記1、概覽我們介紹了多進程和多線程&#xff0c;這是實現多任務最常用的兩種方式。現在&#xff0c;我們來討論一下這兩種方式的優缺點要實現多任務&#xff0c;通常我們會設計Master-Worker模式&#xff0c;Master負責分配任務&#xf…

Filebeat占用內存和CPU過高問題排查

經反饋&#xff0c;新部署的服務器上filebeat占用的cpu過高&#xff0c;且內存只增不減。 而據我了解filebeat非常輕量級&#xff0c;正常情況下占用的資源幾乎都能忽略不計&#xff0c;所以懷疑是filebeat本身出了問題。 第一時間查看filebeat日志&#xff08;默認路徑/var/lo…

Teams架構剖析(2019年版本)

在上個月剛剛結束的Ignite大會上&#xff0c;Teams產品的架構師Bill Bliss給大家奉上了最新的Teams的架構設計&#xff0c;之前2017年和2018年微軟的技術大會上都Teams架構的分享&#xff0c;但是今年大神把Teams架構講得很深入&#xff0c;覆蓋面很廣。我這里就挑一些&#xf…

pycharm工具下代碼下面顯示波浪線的去處方法

近期安裝了python后&#xff0c;發現使用pycharm工具打開代碼后發現代碼下邊會有波浪線的顯示&#xff1b;但是該代碼語句確實沒有錯誤&#xff0c;通過查詢發現了兩種方法去掉該波紋的顯示&#xff0c;下面就具體說明一下&#xff1a; 方法一&#xff1a; 打開pycharm在右下方…

js面向對象與PHP面向對象總結

js面向對象&#xff1a; 1.什么是對象&#xff1f; 對象&#xff1a;任何實體都是對象&#xff0c;擁有屬性和方法兩大特征 屬性&#xff1a;描述事物的特點&#xff1b; 方法&#xff1a;實物擁有的行為&#xff1b; 2.在JS里 Person.name"zhang" Person.fnfunction…

面向全球用戶的Teams app之Culture數字篇

我前幾周在微軟Ignite the Tour北京大會上&#xff0c;分享了如何開發一款面向全世界用戶的Teams App&#xff0c;里面介紹了在開發Global Ready的app時會遇到的各種挑戰&#xff0c;反響很好。所以我準備寫幾篇文章&#xff0c;將這些內容分享給沒有時間參加大會的同學。 這篇…

Dubbo原理與框架設計

Dubbo是常用的開源服務治理型RPC框架&#xff0c;在之前osgi框架下不同bundle之間的方法調用時用到過。其工作原理和框架設計值得開源技術愛好者學習和研究。 一、Dubbo的工作原理 調用關系說明 服務容器負責啟動&#xff0c;加載&#xff0c;運行服務提供者。服務提供者在啟動…

面向全球用戶的Teams app之Culture計量單位和禁忌篇

我在前一篇文章里分享了Global Ready的app時會遇到的不同文化對于數字方面的挑戰。這篇我繼續分享不同文化對于計量單位和禁忌方面的挑戰。 我們先來看一個例子&#xff0c;假如有一個teams bot&#xff0c;它告訴你一些動物的速度&#xff0c;比如它告訴你&#xff1a; 獵豹能…

【我的Android進階之旅】Android自定義Lint實踐

背景 2017年8月份的時候&#xff0c;我在公司開始推廣Lint、FindBugs等靜態代碼檢測工具。然后發現系統自帶的Lint檢測的Issue不滿足我們團隊內部的特定需求&#xff0c;因此去自定義了部分Lint規則。這個檢測運行了大半年&#xff0c;運行良好&#xff0c;團隊的代碼規范也有了…

存儲結構與索引

一、SQL數據存儲的基本介紹 數據庫中的數據存儲涉及頁&#xff08;Page&#xff09;和區&#xff08;Extent)這兩個概念了。SQL server中數據存儲的基本單位是頁。為數據庫中的數據文件&#xff08;.mdf或.ndf&#xff09;分配的磁盤空間可以從邏輯上劃分成頁&#xff08;從0到…

面向全球用戶的Teams app之時區篇

我在前兩篇文章里分享了Global Ready的app時會遇到的不同文化的挑戰。這篇我繼續分享在時區方面的挑戰。 時間是最復雜的&#xff0c;最容易出錯的部分。時間復雜的最根本原因是時區問題。 首先&#xff0c;大家都知道&#xff0c;我們地球是圓的&#xff0c;這個意味著如果大…

Linux: Nginx proxy_pass域名解析引發的故障

背景 業務架構&#xff1a; 部署細節&#xff1a;  兩容器均部署在同一機器上&#xff0c;通過 docker-compose 編排&#xff0c;并且通過link方式鏈接。 故障描述 在有次更新代碼時&#xff0c;發現前端能夠打開&#xff0c;但是所有接口請求全是502(Bad GateWay) 故障排查 …

Oracle建立全文索引詳解

Oracle建立全文索引詳解1.全文檢索和普通檢索的區別 不使用Oracle text功能&#xff0c;當然也有很多方法可以在Oracle數據庫中搜索文本&#xff0c;比如INSTR函數和LIKE操作&#xff1a; SELECT *FROM mytext WHERE INSTR (thetext, Oracle) > 0; SELECT * FROM mytext WHE…

面向全球用戶的Teams app之夏令時篇

我在前兩篇文章里分享了Global Ready的teams app時會遇到的不同挑戰。這篇我繼續分享在夏令時方面的挑戰。 夏令時&#xff0c;主要是為了節約能源&#xff0c;英文里通常縮寫成DST(Daylight Saving Time)。一般在天亮早的夏季人為將時間調快一小時&#xff0c;可以使人早起早…