Linux下開發,stm32和arduino,我該何去何從?

前提:我現在的唯一系統是ubuntu12.04,非常喜歡linux,故不想因為要裝keil而再搞個windows。

stm32在win下用keil開發和arduino是一樣的,都是傻瓜式的,非常方便,但是現在要在linux搞起,arduino跨平台的IDE就顯出優勢,而對於stm32,我花了3天時間從stlink到openocd不斷嘗試還是不能把交叉編譯好的程序燒到板子里。。。

於是在第4天,就是今天,我猶豫了,是不是該換成arduino,不用自己配置arm-none-eabi-gcc,不用自己各種google拼湊出一個四不像的ld文件,不用為stlink和openocd獲取不到板子的信息拍電腦。。。

要是這樣我還猶豫神馬啊?!直接arduino搞起唄~但是,arduino用的是16位avr(雖然也有板子是stm32的arduino兼容板,但不是官方出的,配置還很麻煩),stm32是32位72MHz的cortex-m3;而且arduino如果想用自帶的Ethernet.h頭文件和庫,必須用arduino擴展板(當然自己寫頭寫庫也可以的哈),但是arduino板子的引腳很令人開心,相關的模塊引腳都放在了一起,比stm32的各種開發板GPIOA的幾個腳分布在不同的地方,每次連線還要對著原理圖找要方便的多了~但arduino的文件是.ino擴展名,在linux下用vim打開沒有對應的高亮。

糾結這麼多,總結下,一個是高度可定製隨心所欲性能強勁但第一次的配置困難,至今沒有成功;另一個是簡單傻瓜方便快捷但性能稍弱不完全可控在屋檐下的感覺~

--------------------------------------------分界線---------------------------------------------

過了好幾天,認真看了大家提供的信息和思路,非常感謝~我逐漸明白我真正要的是什麼~我日常乾的是敲代碼的活兒,只能在業餘時間玩這些板子做小車啥的,所以如果投入/產出比太大的時候,可能就會妥協甚至放棄,所以大家建議的IDE(包括跨平台的150刀的那個和win下正統的keil等)是非常中肯的,事實也證明我用了3天還是沒有把Linux下的燒寫工具鏈玩明白~

其次,我當時只是看到arduino的方便簡單,但功能是太捉襟見肘了,我玩的目的是做一個相撲機器人,目前普遍的做法是用紅外測距,用紅外對管的話1k ram和16k flash的arduino完全hold住,但如果再想做呢?加個攝像頭呢?一個640x680的普通解析度,按yuv420p格式就是640x480x1.5=450kB,1k的ram根本hold不住,所以在這個角度是不適合我的(當然arduino在大多數場合非常合適,而且性能足夠,這只是我的需求哈),最後,我選擇raspberry pi,arm11還有操作系統,可以用python搞起,有GPIO口,雖然新款不帶pwm,但是自己軟體搞起還是ok的~哈哈~

最後,再次感謝大家!!(ps:為什麼我文字中每段開頭的空格都沒有了?)


謝邀。

題主,對於你的問題,我想問一句,你學Arduino或者STM32的目的是什麼?如果你從事的是軟體類開發工作,學習硬體只是處於自己的興趣,不想在硬體開發深入下去,那就建議你學習Arduino;如果從事硬體開發,那就學習stm32單片機吧,不管折騰系統有多麻煩。

個人感覺題主是從事軟體類開發的,那就選擇Arduino吧。

推薦兩個Arduino論壇給題主參考:Arduino中文社區和極客工坊-Arduino、藝術及自動化控制愛好者聚居地


除了 Maple 之外可以試試 Rowley Associates CrossWorks,上學時有個 Linux geek 跑得不亦樂乎。要錢,但單人賬戶 $100 也並不貴。它支持你能碰到的幾乎所有板子。

贈截圖一張,強大之處一目了然:


推薦由一個ARM主導,ST、NXP和Freescale等共同推動的開源軟硬體平台mbed。

今年ST推出了針對mbed的Nucleo系列開發板,不僅易用,而且非常便宜。

mbed平台兩個最閃耀的特點:

1. 在線IDE,也就是在瀏覽器裡面開發,支持Ubuntu當然不再話下,也可以在平板上用

2. 拖拽式下載固件——開發板在電腦上模擬出一個U盤,把bin文件放到U盤中,即下載開發板中(只要體驗一次,就讓人會愛上的一種下載方式)

當然不是局限於在線的IDE,將program導出到本地,支持GCC、MDK、IAR等工具。在Ubuntu下面用GCC就好,導出的program包含Makefile和鏈接文件,直接可以make,生成bin文件,然後拖拽到開發板模擬的U盤中就可以運行了。

在mbed平台上,社區已經分享了豐富的軟體庫和程序,支持眾多的感測器、顯示設備等,這些軟體庫和程序可以直接導入到在線的IDE。比如,打開這個把蘋果變成一個觸摸按鍵的程序的鏈接,就對應的程序導入到在線IDE(需要註冊一個mbed賬號,登陸到mbed上)。

mbed還非常多很棒的東西,比如說基於CMSIS-DAP的HDK、USB Stack、File System、Ethernet和RTOS。如果你是嵌入式開發人員,去探索一下mbed吧。


Linux下跑STM32是可以的,但難度上確實有點變態。我斷斷續續花在配置環境上的時間有差不多一年。

現在的開發環境是。

1、vim:寫代碼

2、scons:build工具,寫了近300行來適應Linux和MacOSX下的各種環境

3、OpenOCD:調試器兼燒寫

4、arm-none-eabi-gcc:編譯器

坦白講,也就是業餘玩玩還行,很鍛煉人。現在人力跟蹤個arm彙編啥的不在話下。也正是因為道路崎嶇,把ARM的原理搞的很清楚。

但如果想靠這路玩法參加競賽或者工作,那就太不靠譜了。另外我也沒學過其他的ARM開發工具,不清楚其他工具能帶來多少便利。我之所以不用Keil一類工具主要是很煩IDE把很多細節隱藏後,調試稍微困難點的bug更浪費時間這一點,或者說IDE的引入使得可維護性變差了。


我認為是STM32,因為STM32的性價比比AVR的單片機高太多了,如果要做產品的化,同等成本下STM32比AVR優勢很大。STM32的缺點是使用太不友好。

Arduino個人感覺更適合做原型快速實現,實現後真正做產品的時候還是要遷移到性價比合適的平台上的。

PS:如果既想了解STM32的使用,又離不開Arduino類的友好環境,建議考慮下Maple項目:

http://leaflabs.com/devices/maple/


首先還是搞清楚自己的需求吧。為什麼學STM32,為什麼學arduino?

其次我也認為你需要一個虛擬機。無論如何,我覺著你這個事情不應該因為你的操作系統而受影響。如果學STM32,win下的keil和IAR都是很好的IDE,不理解為了一個自己喜歡的系統而影響到自己的工作和學習。 我以前也想過在LINUX環境下試試51, STM32的開發,但是搜著看了看就感覺得不償失。上學期為了良好兼容西門子的STEP7和PC ACCESS我甚至專門搞了一個XP和win7的雙系統。 希望樓主分清主次,操作系統畢竟是為了我們的學習工作娛樂服務的,而不是反之。

個人沒接觸過arduino,只是道聽途說過。 比較熟悉51和STM8以及STM32,目前正做STM32的項目。就只說說STM32吧。STM32的性價比真的很高,低端型號已經賣到了八位機的價錢。 而且如果使用ST庫開發也很省時省力。網上資料又很豐富。

還是感覺樓主要想清楚自己要幹什麼。


轉載自在Linux系統下去燒錄單片機 :

在Linux系統下去燒錄單片機

本帖最後由 bywetech 於 2011-4-24 16:03 編輯

怎樣在Linux系統下去燒錄單片機51,avr,pic,fpga等實現實時控制子系統

{編輯器}:

首先介紹一下編輯器,emacs,vi,geany,等通用編輯器,(本人用終端的nano編輯器),把源代碼編輯好之後進入以下環節。

二進位和hex編輯器有 beav, bless, bvi,lfhex等是不錯的bin和hex文件的編輯器。

{編譯器}:

其次是用軟體把源代碼編譯成微控制器可以識別的代碼,這裡必須用的就是sdcc編譯器(Small Device C Compiler)和gcc,gcc-avr,gcc-m68x,等。

*SDCC 是小型器件c編譯器,集成和優化的ANSI- C編譯器目標是可以對英特爾8051,maxium,80DS390,Zilog公司的Z80和摩托羅拉68HC08微控制器。工作是支持 Microchip的PIC16和PIC18系列的進展。SDCC是自由開放源碼軟體,在GNU通用公共許可證(GPL)發布。

編程的語言以c和彙編為主。

*gcc就太熟悉了。

還有一些專門針對固定器件的編譯器:

01. mcu8051 ide, ASEM51(彙編),UISP, as31, dis51,等是專門針對51系列單片機的編譯軟體;

02. avra,avarice,arduino ide 等是專業針對avr系列進行編譯的軟體;

03, pikdev, piklab,gputil(兼容MPASM)等軟體是專業針對microchip公司的pic和dspic系列的晶元進行編譯和反編譯的軟體。

04. a56, crasm, biuntils-m68hc1x等是專業針對motorola, freescale 的 編譯軟體。

05,z80asm , z80dasm是專業針對zilog的 z80器件進行編譯的軟體。

等等... ... 很有很多

{燒錄軟體}和{jtag在線調試}

把編譯的代碼可以直接燒錄到晶元中,這個是開發的必經之路。必須確定燒錄硬體的可行性和正確性等,然後進行燒錄。

01, 51系列的ASEM51支持的最多,Support of 8051 Derivatives, 幾乎支持所有廠家的8051各個型號晶元。用BOOT-51寫入到eeprom.

這個軟體也是教程最完善的一個。

02.MCU 8051 這個IDE包含模擬模擬器,源代碼編輯器,彙編器,硬體編程器和許多其他工具。是工具最全的51開發環境。

http://mcu8051ide.sourceforge.net/

03.s51dude,是一個專業的,基於終端的針對AT89S8252,AT89s53的isp燒錄軟體,usbtiny.

http://gd.tuwien.ac.at/opsys/linux/debi ... s/s51dude/

04.uisp, 是一個專業的,基於終端的針對AT89S518252,AT89s52的isp燒錄軟體,

http://www.nongnu.org/uisp/

05,usbprog,是一個針對usb轉rs 232 的一個燒錄軟體,主要應用到avr 和 arm的固件燒錄,(有一個固定的硬體)。

http://www2.embedded-projects.net/index.php?page_id=165

06,arduino是一個有專業電路板(arduino電路板)的avr 的集成開發環境(有一個固定硬體)。

Arduino - HomePage

07,avrp是一個針對flash和eeprom的燒錄軟體,應用到avr 8位系列的單片機和 at89系列的單片機。

avrp - Atmel AVR programmer software for Linux and others

08,avrprog是一個針對atmel公司的avr系列的isp燒錄軟體,基於通過pc的並口轉串口器件的燒錄。

avrprog | Free System Administration software downloads at SourceForge.net

09,avrdude是一個針對avr的isp燒錄軟體,針對rom和eeprom,基於終端操作。

AVRDUDE - AVR Downloader/UploaDEr

10,gdb avr, 是一個源代碼調試軟體,基於avr.

Debian -- Package Search Results -- gdb-avr

11. picp,是一個比MPlab要快的軟體,支持PICSTAR,Warp-13 or JuPic等編程器。

http://pp06.sourceforge.net/picp.html

12,pikdev是一個集成開發環境,同時支持並口,串口和usb全系列編程器進行燒錄pic和dspic全系列的晶元。(piklab是基於pikdev開發的)。

PiKdev, An IDE for the development of PIC based applications under KDE

13,ARM和FPGA等一些支持jtag的晶元可以直接用openOCD, openwince-jtag, urjtag進行調試。

http://openocd.berlios.de/web/

http://urjtag.org/

14,TI系列的就可以用TI CCS 5.0.2 進行開發, 詳細可見:TI CCS 5.0.1 支持linux

下載地址:Category:Code Composer Studio v5

{模擬軟體和模擬器}:同時可以用相關的專業軟體進行模擬。

比如emu8051可以模擬51系列,gnusim8085是intel 8085的ide軟體,simulavr,avarice可以模擬avr系列,gpsim,simulpic,nitpic等針對microchip公司的pic和dspic系列, softgen,是專業針對arm和dsp等進行嵌入模擬的軟體,spim是mips R2000/R3000系列的模擬,coldfire是freescalecoldfire 5206模擬器, freeHDL是VHDL 在linux 環境下的模擬軟體,verilator是一個verilog的模擬軟體,sdcc-ucsim是一個MCS51 family, HC08 and Z80通用的模擬軟體,

{基礎電路設計}

qucs是一個不錯的基礎電路設計和模擬軟體。

kicad是一個支持3d模擬的pcb設計軟體, 包括原理圖和元件庫等。也可以選擇eagle, geda, pcb等開源pcb軟體。

Linux下搞嵌入式的各種各種工具鏈都有了,搞stm32應該沒問題。

但是我感覺你搞開發還是windows下用IDE的思路啊,可能還是不習慣linux下手動搭工具鏈的開發流程,所以不如跑個虛擬機在windows上用keil這樣已經成熟的IDE,或者不作為主業的話,乾脆放棄STM32就玩arduino得了。我試過在Linux下用openocd和其他工具開發TI的板子,也是挺蛋疼的,乾脆換回win了。


題主沒有將問題具體化,所以有一大堆的不同方向不同維度的答案。

其實,題主的問題不對稱,STM32是硬體,Arduino卻是開原生態。合理比較是STM32 vs AVR/Atmel ARM,mbed vs Arduino。Arduino和mbed讓你面嚮應用,忽略細節,而STM32 HAL/LL讓你關注細節,提升性能。

至於Linux下,顯然題主關注開源,那麼STM32 HAL/LL + GCC以及Arduino + GCC都有合適的工具,所以,題主必須明確你卡在那一步上了。

最後,用《癢》贈給題主。

「來啊,造作啊,反正有大把時間。「

慢慢玩,讓我們心癢難耐的好東西還有很多。


謝邀。不過不好意思,我沒用過arduino。

我覺得這個要結合你自己學習的目的去選擇,本身本人學習32不代表我今後一定會用到它,而是借用這個平台實現一些功能。因此題主覺得arduino能完成stm32的功能那就用你覺得最方便的arduino,如果stm32某方面對於arduino來說比較有優勢,那就用stm32。

其次我不明白為什麼非常喜歡linux就不去用win?難道真的那麼矯情?那就雙系統吧。


親愛的樓主,親愛的,,

那啥我說一下。

source g啥的那個,忘了他吧,放棄吧。

連lite版下載都要寫郵件,這意思是說我要說一句求求你給我嗎?

所以小暴脾氣的我直接忽略。

後來一哥們介紹了一個arm官方維護的gcc 工具鏈。

哥用了,這是個痛苦的過程。

不過,,後來哥想通了,去github偷東西。

偷常式。

太幸運了,不僅偷到了,而且他奶奶還是我手頭有的stm32f3 discover 後來,我借著這個相對單純的ld makefile以及從st庫常式里現成的各種文件,成功搞定,就是是在windows下做的,linux的還沒試,上次不行估計是許可權,我一時腦殘忘了,後來因為一直一直在倒騰s5pv210,所以還沒搞。

但是想了想應該不是問題。

另外ps,如果你那麼喜歡ide其實也有一個免費方案,eclipse,如果你能忍vs一樣的慢和卡。

或者交錢,arm官方的rvds,那絕對是正宗標準開發神器,keil和他比就是擺地攤。

最後關於調試,其實我個人並不太喜歡也不在意,但如果你真的很在意,你需要gdb神馬,你說你不想要命令行,那麼ddd你值得擁有,這是gcc世界的通用工具,一通百通。

就是gdbserver那地方費點勁。這地方我也沒搞明白。

ps,說實在的,要用工具就要用大主流,gcc系列首推,哪些亂七八糟的不通用的還是忽略吧,沒有什麼延續性

——華麗麗的分割線

差點忘了說

或者說我回答的時候還沒走到這一步。

事實上,自從8月底我到南京出差以後,一直都很忙,國慶節後才回到公司上班,但亂七八糟的事情非常多,根本無暇顧及這個事情。

但是直到8月25日出差以前我記得我的狀況是這樣的。

當時,我已經搞定了編譯器,gcc,我是從source code g++ lite搞到的,沒錯,就是那個傳說中開源的東西。

我搞半天只搞到了它的 編譯器gcc,但是這不要緊,在linux下,或者說沒有了win環境那種便利的NEXT NEXT,,,,的情況下,我們可以一個一個部件的搭建。

再後來,我在github上搞到一個 stlink master,我試過了幾個命令,包括下載都沒問題,到了這一步,工具方面其實我就只差一個 gdb server了,但當時我決定先不搞。

我和你的情況類似,也是卡在 ld連接腳本,我對單片機的工程項目以及stm家的晶元比較熟,因此,我對自己建立的工程和代碼是有絕對的信心。

唯一的問題在於,我想還是ld腳本哪裡有問題。

當時我為此也非常糾結,不知道該咋整。

後來我想到了一個折中的辦法(只不過如前所述,我到現在還沒有時間,主要的說其實是心情去嘗試)

那就是先回到windows下,我也不用什麼g++ for windows,

因為當時我裝了 g++的 完整版本(就是32KB限制版還是30天限制版 那個),結果一看我差點沒吐血,我手頭的板子是 stm32f030r8t6,它沒,它的f0是 f050,我手頭當然還有一個 stm32f103,可惜我那個板子沒有swd介面。

後來想了想,與其再去折騰jlink,也罷,反正我自己是非常不喜歡jlink的。

所以我決定回到windows下,在 truestudio什麼的平台上(為啥是這些平台,主要是貪它們是比較主流的stm32開發工具,應該有比較好的 常式啊什麼的。)

我決定在這個地方,把一個可用的 ld腳本搞到手,然後再回到linux下去。

因為ld腳本只和gcc有關,和系統是無關的。

當然了,在最不濟的情況下,我會考慮試試 stm32f103那個板子能不能用swd介面

畢竟jtag口是兼容swd的。

再不行,就更簡單了,花錢的了,買一個f050,然後,然後等我把ld搞到手,我就可以學會它怎麼寫了。

---------------------------------------------------------------------------

偶只有一個回答

在linux下生存的感覺,就好像以前玩 second life一樣。

我們總有很多懶得解釋的為什麼要在linux下的原因,所以不比解釋。

喜歡就夠了。

偶目前是雙系統,沒辦法時,生活和工作還是要繼續,但是有空我就會做各種嘗試各種努力,直到達到目標為止。

PS:隨著時間的流逝,說實話,現在的linux發行版,以及相關的軟體,應用真的已經是越來越完善了,所以,不要放棄,不要被別人的話嚇到。


好吧。那就讓你的Arduino(包括IDE和API)都支持STM32吧。

github:MakerLabMe/MakerLabBoard · GitHub

簡單教程:http://learn.makerlab.me/guides/2


題主,對於這個情況我覺得是你需要一個虛擬機了.....


為什麼不要windows ?你能保證你以後所有的工作和學習都不要windows?

為什麼不去適應? 做到全能。

何必限制自己的工具種類?


看你的單片機基礎和項目要求,項目簡單基礎差就用開源硬體,開源硬體搞不定了只好用stm32自己開發。

不過無論會不會單片機都建議直接使用開源硬體,性能可靠開發速度快成本低,如非必要不要自己做板子。


樓主,你一定沒用過STM32CubeMX,

用apt、dnf、yum之類的主repo裝上的arm-none-eabi-gcc是不用怎麼配置的,即裝即用,

裝一個stlink就可以,st-flash 刷flash,st-util連debugger

STM32CubeMX可以根據你的配置生成工程,可以選keil,iar,ewarm,sw4,makefile

如果樓主會用make的話,基本不用怎麼裝東西就可以用,

stlink+arm-none-eabi-gcc+gvim+make+STM32CubeMX完美解決


題主,你會ARM STM32F103 RCT6 GH20U開發?可以聯繫我


題主你的問題到底是在STM32和arduino上,還是在win和linux上?

系統只是一個工具,為何要因為一個工具折騰自己?


樓主只不過是需要一個好的 IDE 而已:CodeBlocks,附鏈接:

Creating STM32 Microcontroller Project in Code::Blocks


linux也可以直接做stm32啊

GitHub - embbnux/stm32_development_on_linux: stm32 development on linux


現在有社區搞了一個system workbench for stm32。。。可以算是官方的了,支持還是不錯的,全平台,不過基於eclipse。。。


謝邀,我感覺裝個虛擬機用上Win吧。你的目的是使用這個arduino或stm32。不是展現在linux下開發這些有多牛逼。

同志,實用是關鍵!確認你的目的是什麼!


上個暑假fedora下stm32交叉編譯環境配好。。。略傷阿


推薦閱讀:

樹莓派比起低功耗x86 CPU有什麼獨特優勢?
小霸王之類的學習機上的DOS系統是如何實現的?
raspberry pi外接電池供電需要穩壓晶元嗎?
怎樣剝離一個解釋器的執行部分?
推薦一個matlab支持的硬體平台?

TAG:嵌入式系統 | Arduino | STM32 |