工作需求,准備學習單片機,加上以后准備學習嵌入式Linux,而且最近煩透了Win10的自動更新,遂放棄Windows環境,准備在Linux環境下從51單片機開始折騰起,學單片機和Linux兩不誤。本人是單片機和Linux系統雙料新手,學習過程中碰壁不斷,遂將過程做一下筆記,也分享到網上,高手見笑,新手且看,希望能幫到一些朋友。
系統: Ubuntu 16.04 LTS amd64
單片機: 某寶¥149開發板,芯片STC90C51,板子自帶USB轉串口芯片CH340G。Ubuntu好像自帶了這個的驅動,不用另裝驅動了。
本來想折騰mcu8051ide的,但是apt-get安裝和手動一個個安裝依賴庫再編譯主程序安裝兩種方式的都運行閃退,只能用原始的方法了。
需要的軟件:
1. 編輯器: 隨便 vim emacs gedit nano都行
2. 編譯器:sdcc,一個小型的C編譯器
sudo apt-get install sdcc sdcc-doc
3. ISP下載器:
a. stcflash.py,一個單獨的python文件,命令行直接使用。【推薦】
https://github.com/laborer/stcflash
b. gSTCISP,一個帶GUI的下載器,SourceForge提供源碼下載,需要編譯安裝。也可以在Ubuntu論壇找到一個編譯好的版本。我自己測試時,燒寫成功率不高,不知道怎么回事,所有不太推薦。
https://sourceforge.net/projects/gstcisp/
開發單片機程序簡單步驟:
1.隨便寫個單片機程序,比如main.c。需要注意的是sdcc下的程序與Windows 的Keil下有點區別,目前僅發現兩點:頭文件不一樣和IO口sbit定義不一樣,具體區別自行百度。
#include <8051.h> void Delayms(unsigned int ms); void main() { while(1) { P0=0xfe; Delayms(500); P0=0x01; Delayms(500); } } void Delayms(unsigned int ms) { unsigned int i, j; for(i = ms; i > 0; i--) for(j = 110; j > 0; j--); return; }
2. 編譯:調用sdcc編譯並生成bin或hex文件。需要說一下的是,gSTCISP只支持下載bin文件,而stcflash.py能下載bin和hex文件。
生成hex文件:
sdcc main.c && packihx main.ihx > main.hex
生成bin文件:
sdcc main.c && makebin -p main.ihx main.bin
3. 燒寫程序:
推薦使用stcflash.py,因為我用gSTCIPS十次有九次都下不進去,不知道什么原因。
stcflash.py是Python語言寫的,需要用到Python的串口模塊,用如下命令安裝。
sudo apt-get install python-serial
為了方便使用,我把stcflash.py復制到了/usr/bin/下,並添加執行權限,這樣不用每次調用都要輸入文件的保存路徑了。當然應該也可以把stcflash.py的保存路徑加入$PATH變量,我是懶人。
sudo cp stcflash.py /usr/bin/
sudo chmod +x /usr/bin/stcflash.py
然后檢查USB連接:
a. $ lsmod | grep usbserial
如果輸出有 usbserial,說明系統支持USB轉串口。
b. 用USB數據線將開發板與電腦連接起來,運行
$ ls /dev/ttyUSB*
如果輸出有/dev/ttyUSB0或1等等,說明系統已正確識別該USB轉串口設備。
也可以用“#lsusb”命令查看是否有“USB-Serial adapter”類似的設備。
c. 設置串口為ttyUSB0(可以不做,在下載時手動指定--port):
$ dmesg | grep ttyUSB0
d. 關閉開發板電源,運行stcflash.py燒寫程序,當出現如下字樣時,打開開發板電源,即開始下載:
$ sudo stcflash.py main.bin --port /dev/ttyUSB0 --lowbaud 1200 Connect to /dev/ttyUSB1 at baudrate 1200 Detecting target...
下載完成為這樣:
$ sudo stcflash.py main.bin --port /dev/ttyUSB0 --lowbaud 1200 Connect to /dev/ttyUSB1 at baudrate 1200 Detecting target... done
FOSC: 12.013MHz Model: STC90C516RD+ (ver4.3C) ROM: 64KB [X] Reset stops watchdog [X] Internal XRAM [X] Normal ALE pin [X] Full gain oscillator [X] Not erase data EEPROM [X] Download regardless of P1 [X] 12T mode Baudrate: 38400 Erasing target... done Size of the binary: 158 Programming: #################### done Setting options... done
stcflash.py默認port為/dev/ttyUSB0,波特率為2400,所以當使用ttyUSB0時,也可以直接運行"$sudo stcflash.py main.bin",不用手動指定端口和波特率。
完。