久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4235|回復: 0
打印 上一主題 下一主題
收起左側(cè)

I am master!使用Nucleo334打造新一代的調(diào)試利器

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:127084 發(fā)表于 2016-6-17 15:16 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
     通常,我們調(diào)試一個芯片的時候,往往是編寫程序---下載---更改---下載。。。這種方法固然好,但是像我這樣的懶人不大喜歡,我喜歡找一種一勞永逸的方法來解決。于是,開始動手寫了這個I am Master!顧名思義,就是將Nucleo作為一個主機,與我們需要使用的軟件進行通信。可能這樣說你不是很理解,沒關(guān)系,下面還會一 一介紹的。
   電腦作為控制端,通過串口與我們的Nucleo進行通信,而Nucleo根據(jù)電腦發(fā)送的字符,解析,并且產(chǎn)生一定的時序,與我們需要使用的芯片進行通信。



    比如,電腦端通過串口向Nucleo發(fā)送 input 0 1 2,代表Nucleo需要將 0 1 2這三個引腳設(shè)置成為輸入狀態(tài). 在我的程序中,將Nucleo左邊的A0~A5作為IO部分,分別對應編號0-5?梢杂糜趫(zhí)行比較簡單的任務(wù)。

注意:為了保證電腦端有一個良好的人機界面,大家務(wù)必使用能夠滿足linux終端要求的串口軟件。比如puTTy,smartty;蛘呤浅壗K端。像一般的串口軟件無法完成這個項目的要求。因為他們不能夠改變字體的顏色。這里推薦大家使用smarTTY,如果使用puTTY的話需要更改我上傳的程序。因為當我們按下Enter的時候,puTTY發(fā)送的是'',而smarTTY發(fā)送的是''。在附件中有最新的smarTTY的安裝版軟件。

    如果在使用smarTTY的時候,發(fā)現(xiàn)換行符不能正確顯示,請進行這樣的設(shè)置:





版本更新介紹:

V1.0.0支持函數(shù):

  • input
  • output
  • set
  • reset
  • toggle
  • read
  • spi
  • spi-config
  • man

V1.0.1新增函數(shù):
  • servo
  • i2c-online
  • i2c-write
  • i2c-read

V1.0.2更新說明:
  • 將i2c-online更改為i2c-scan
  • i2c-read命令新增參數(shù)-a 可以用于在讀取中指定一個寄存器地址。例如:從設(shè)備地址為0x90,寄存器地址為0x00的設(shè)備處讀取1個字節(jié)可以使用 i2c-read -d 0x90 -a 0x00 -r 1 。需要注意的是:如果寄存器地址多于1個字節(jié),只能先使用先寫地址,在讀的方式。例如:從設(shè)備地址為0x90,寄存器地址為0x0100的設(shè)備處讀取1個字節(jié)只能分成兩部:(1) i2c-write -d 0x90 0x01 0x00  (2) i2c-read -d 0x90 -r 1
  • 新增函數(shù)clear,用于清屏。

V1.0.3更新說明:
  • 為了在STM32系列中的可移植性,進行了一些并無實際卵用的更新。新建了config.h頭文件。STM32F3系列的其余Nucleo包馬上就會放出。
  • 修復了在不輸入任何字符,僅按下回車的情況下,提示Unknow command的bug。
  
V1.0.4更新說明:
  • 上電之后SPI的模式被修改為模式0,時鐘為4Mhz。
  • SPI讀取(由-r參數(shù)指定的)數(shù)據(jù)被緩沖,使相臨兩次讀取的時間由原先的100us縮減為7us。                                                                                                               
  • 串口數(shù)據(jù)改為中斷輸入方式,使用RingBuffer(1KB)進行緩存。
  • 支持發(fā)送命令文件。即將所有要發(fā)送的命令寫入文件,每一條命令占用一行,通過smarTTY直接發(fā)送文件。具體的細節(jié)請參考本帖第6樓。


v2.0.0(重要更新)。
  • 優(yōu)化代碼結(jié)構(gòu)。如果僅僅為了使用,而不是閱讀代碼的話,那么這次更新并無卵用。
  • 不再使用占用大量CPU時間的printf,改為termiosXXX函數(shù)。
  • 從gcc庫中移植getopt。為命令行解釋提供了統(tǒng)一的方法。
  • shell函數(shù)解析的時候,將使用 "" 引起的字符作為一個參數(shù)。不管""內(nèi)的字符是不是含有空格。例如:輸入spi [ "Hello world" 0x24 0xff ] ,經(jīng)過shell解析傳給spi的命令參數(shù)為:argv[0]==spi , argv[1] =[ , argv[2] ="Hello world" ,argv[3]= 0x24, argv[4]=0xff, argv[5] = ] 。注意:"Hello world"是一個參數(shù),不同于windows和linux,這里為參數(shù)保留了引號。
  • 修改spi-config,如果spi-config未提供任何參數(shù),將顯示出現(xiàn)在spi的模式。包括模式,時鐘頻率,Msb/Lsb First。如果提供參數(shù),將對參數(shù)進行解析。


吐槽,意見,或者建議請聯(lián)系(PS有沒有E語好的大神,幫忙翻譯一下man的說明部分):
qianfanguijin@163.com
qianfanguijin@gmail.com


版權(quán)聲明:
本軟件僅供與學習交流之用,未經(jīng)允許,不得用于商業(yè)用途。

I am master v2.0.rar (2.3 MB, 下載次數(shù): 8)
I am masterv1.0.0.rar (1.6 MB, 下載次數(shù): 7)
I am masterv1.0.1.rar (2.22 MB, 下載次數(shù): 7)
I am masterV1.0.2.rar (2.22 MB, 下載次數(shù): 7)
I am masterV1.0.3.rar (2.22 MB, 下載次數(shù): 7)
I am masterV1.0.4.rar (2.24 MB, 下載次數(shù): 7)
master.hexV1.0.4hex文件.rar (21.51 KB, 下載次數(shù): 7)
SmarTTY-2.0.rar (4.14 MB, 下載次數(shù): 7)

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

使用入門:
  • 從附件中下載工程文件I am master 和 smarTTY軟件并解壓。
  • 打開工程,將hex文件下載至Nucleo334.將使用HSI作為時鐘源。
  • 打開smarTTY,新建一個串口通信,115200,8bit,無校驗,停止位1.

Nucleo通電之后,通過串口發(fā)送這樣的信息:

先來認識一個命令 man ,類似于linux中的man 。當你遇到某一個命令而不知道如何使用的時候,可以使用這個命令。比如獲取input這個命令的解釋:

這個命令的功能是將引腳設(shè)置成為輸入模式,引腳的范圍是0-5,對用Arduino接口的A0-A5.現(xiàn)在,我們在0號引腳上面掛接一個LED,在1號引腳上面掛在一個開關(guān)(平時為1,按下為0)?梢酝ㄟ^input,output兩條命令來切換他們的模式:



在將引腳設(shè)置成為輸出模式之后,就可以使用set,reset,toggle三條命令來設(shè)置引腳了。set是置1,reset是清零,toggle是反轉(zhuǎn)。如果引腳的模式是輸入模式,可以使用read來讀取。如果read的參數(shù)不是0-5范圍之內(nèi),那么顯示的數(shù)值就會用N來代替。例如read 0 1 255
==> 1 1 N
顯示0,1引腳的電平值為1,255是一個非法引腳。


其余命令的解釋大家可以使用man來查看。我的英語很不好,man的解釋大部分都是通過谷歌翻譯的。大家可以幫助修改一下源文件的翻譯,還請告知。謝謝!


在我們平時的調(diào)試中,光使用IO接口恐怕難以滿足我們的要求。還需要一些更復雜的通信協(xié)議,比如說SPI。下面我們就來說說SPI的使用。

不管什么時候,man總是我們靠譜的好朋友。

在SPI通信上,使用板子上面表示的SPI引腳。這里就不詳細解釋了?梢钥匆幌掳遄由厦娴慕z印。

spi的參數(shù)有著固定的要求:
  • [ 表示將CS信號線拉低。注意[也是一個參數(shù),后面需要至少一個空格;
  • r:9表示從SPI總線上讀取多少個字符。后面的9代表讀取9個字符,需要使用十進制表示。
  • 其余的參數(shù)使用十六進制表示,不區(qū)分大小寫。前綴可以加0x,也可以不加。想FF,ff,0xFF表示的都是同一個數(shù)。
  • ] 表示將CS信號拉高。同樣 ] 也是一個參數(shù),需要后面至少一個空格。

好了,就這么多,下面就來通過spi這條命令,讀寫SPI存儲芯片W25X16.他的數(shù)據(jù)手冊在附件中,大家可以下載學習一下。
先看W25的一個指令表:


在原PDF的第17頁?梢钥吹缴厦嬗幸粭l指令是讀ID,解釋如下:


在面包板上面插好線之后,使用spi命令與之進行通信:

回應了兩個數(shù)字,0xEF,0x14,正好與上表的數(shù)據(jù)吻合。說明通信正確。

通過查看數(shù)據(jù)手冊可以看出,要想往一個地址內(nèi)寫數(shù)據(jù),首先要寫一個WriteEnable命令,在寫完WriteEnable命令之后,StatusRegister寄存器中相應的WEL為會被置1,說明允許寫。


在寫完WriteEnable命令之后,可以看到WEL位已經(jīng)被置1了,說明操作正確。

下面將第一扇區(qū)格式化,之后往里寫如一些數(shù)據(jù):

0x20是格式化命令,格式化命令之后WEL位被清零,說明不能在繼續(xù)寫數(shù)據(jù)。為了能夠繼續(xù)寫數(shù)據(jù),只好在重新發(fā)送一遍WriteEnable命令了。

讀取一下格式化之后0x00處連續(xù)10個地址的數(shù)據(jù):讀取的命令是0x03

數(shù)據(jù)全是0xFF,說明格式化成功了。下面再將0x00連續(xù)地址處寫如0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A十個數(shù)字,寫入之后再讀。

這里寫入了10個數(shù)據(jù),讀取了11個數(shù)據(jù),可以看到第11個數(shù)據(jù)是0xff,也就是沒有被更改,寫入和讀取都正確。


好了,spi的操作就說到這里。
當然,你可能疑問,這使用了默認的模式3,如果我想使用模式0怎么辦呢?大家可以使用man spi-config尋找答案。


102801-0001R-SPIFlash.pdf (1.26 MB, 下載次數(shù): 7)





一起來開發(fā),定制你自己的命令

  可能你覺得這些命令遠遠不夠用,或者你希望定制一個你自己的命令,比如man 你的名字。其實,定制一個這樣的命令是一個很簡單的事情。
  在串口中接受到的字符,最終是要交給shell [void shell ( char * cmd_str) ; ]這個程序來處理的,這個程序?qū)⒋诮邮盏降囊恍凶址,在空格處分割,并且轉(zhuǎn)換成為int argc,char *argv[]的形式。這個形式是man函數(shù)的標準形式。argv[0]表示的需要調(diào)用的應用程序的名字。例如串口輸入input 0 1 2,經(jīng)過shell的處理之后:
  • argc=4;
  • argv[0]="input"
  • argv[1]="0"
  • argv[2]="1"
  • argv[3]="2"
  • argv[4]=NULL

處理之后,shell去一個cmdList列表中尋找名字叫做input的函數(shù)。如果找到了,將控制權(quán)和argc,argv一起交給input函數(shù)。而input就是我們需要編寫的,只需要遍歷argv,讀取每一個引腳的編號,并且設(shè)置成為輸出即可。具體shell函數(shù)在cmdList中尋找input函數(shù)的方法在后文中會詳細講到。
下面是一個簡單的input函數(shù)的實現(xiàn):
int input(int argc,char *argv[])
{
  int i=0;
  for(i=0;i<argc;i++)
  {
    //設(shè)置argv表示的引腳為輸入方式
  }
}

好了,下面就來說說定制命令的詳細步驟:
  • 每一個命令都需要一個入口函數(shù),格式是int test (int argc,char *argv[])。
  • 每一個命令都需要一個解釋函數(shù),用于man的調(diào)用。格式是void manTest(void);當然,函數(shù)的名字可以自己取。
  • 計算函數(shù)名字的hash,用于shell快速尋找函數(shù)的入口點。不過這個hash只是特別簡單的計算方法,在后續(xù)的更新中,會考慮更換他的計算方法。目前的方法主要是將函數(shù)的名字的各個字符異或(^ )。在工程文件下tools/computer_xor下有一個xor.exe,是用于計算hash的。只要在控制臺下調(diào)用這個程序,參數(shù)寫你需要求的字符串。例如:
  • 上面算出的test的hash值是0x16,記下這個數(shù)字,我們在后續(xù)中會使用到。
  • 打開commands.h,在里面添加兩個函數(shù)的聲明:test和manTest:
  • 打開commands.c文件,在cmdList中添加manTest和test:     
  • 新建一個源文件,test.c,并添加到工程中。寫上test和manTest兩個函數(shù)的實現(xiàn):
  • 好了,目前一切需要做的已經(jīng)做好了,編譯,下載,打開smarTTY,稍微測試一下:

更多更有趣的功能歡迎你來實現(xiàn)!



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


在v1.0.1版本中,新增了四個命令,servo,用于控制舵機的。函數(shù)的參數(shù)在500~2500之間,代表在舵機的50000us中,高電平占用的時間。比如servo 1000代表高電平是1000us,占空比是1000/50000=2%。但是寫完之后發(fā)現(xiàn)控制舵機并沒有什么卵用。因此這里就不再多廢話了,主要是講如何使用I2C接口。

I2C
    STM32F1和STM32F4使用的I2C接口是一類,用起來各種復雜,不好用。但是STM32F3的I2C卻非常好用。之前看見有人說STM32的I2C是雞肋,只能說明他沒有用過STM32F3的。下面就說說I2C如何使用。主要操作的芯片是LM75,一個溫度傳感器。
首先介紹三個命令:
  • i2c-online:用于獲取掛接在I2C接口上所有芯片的設(shè)備地址。
  • i2c-write:將數(shù)據(jù)通過I2C接口發(fā)送出去。必須指定的參數(shù):-d(設(shè)備地址)。
  • i2c-read:通過I2C接口讀取制定數(shù)量字節(jié)。必須指定的參數(shù):-d(設(shè)備地址),-r(讀取的字節(jié)數(shù))。
  • 注:在V1.0.2版本中,將命令i2c-online改名為i2c-scan
  • 注:在V1.0.2版本中,i2c-read新增參數(shù)-a,用于指定需要讀取的寄存器地址。


為了編寫程序的簡便,I2C的操作使用流的方式,即只能采用內(nèi)置的通信方式(START,STOP)。不能指定RESTART。一般的I2C的讀取操作是 START+devAddr[Write]+regAddr+ReStart+devAddr[Read]+{some bytes}+STOP。由于不能采用ReStart,所以像這樣的讀取應該分成先寫在讀兩部分,即:
  • START+devAddr[Write]+regAddr+STOP
  • START+devAddr[Read]+{read some bytes}+STOP
  • devAddr代表設(shè)備地址
  • regAddr代表需要讀取或者寫入的寄存器地址。

我的I2C總線上掛接了一個LM75,但是我懶得查數(shù)據(jù)手冊去找他的設(shè)備地址,所以可以使用i2c-online查看所有在線的i2c設(shè)備的設(shè)備地址:

注:在V1.0.2種將i2c-online更改為i2c-scan,并根據(jù)設(shè)備地址添加了提示。如下圖。


通過這條命令查出了唯一的地址,0x90 。那么這個地址就是LM75的設(shè)備地址了。之后我們要進行的讀和寫的操作都要靠這個地址。其實這條命令的實現(xiàn)很簡單,只不過從0-127挨個詢問,看設(shè)備是否應達就行,通過邏輯分析儀抓包如下:(只截取了部分)



好了,有了地址就可以進行操作了,先來看看LM75的寄存器:

從上圖中可以看出,0x00是溫度寄存器的地址。要想讀這個地址處的數(shù)值,必須首先發(fā)送寄存器地址:



i2c-write必須要有-d參數(shù),用于指示設(shè)備地址。其余的數(shù)據(jù)是要發(fā)送的數(shù)值。如果想通過i2c發(fā)送0x00 0x01 0x02 0x03 這四個數(shù)字可以使用這樣的命令:
  • i2c-write -d 0x90 0x00 0x01 0x02 0x03
  • i2c-write 0x00 0x01 0x02 0x03 -d 0x90
  • i2c-write 0x00 0x01 -d 0x90 0x02 0x03
  • ...

設(shè)備地址0x90必須緊跟在-d的后面。除了i2c-write的位置之外,出現(xiàn)在什么地方都是可以的。


在發(fā)送完寄存器地址之后,就可以讀取寄存器中的數(shù)值了。查看數(shù)據(jù)手冊,可以看到LM75的溫度寄存器由兩個字節(jié)組成。在發(fā)送的時候先發(fā)送高字節(jié),在發(fā)送低字節(jié)。

之后將兩個字節(jié)合并成一個16位的有符號數(shù)字,數(shù)字使用2的補碼表示。正溫度有正的有符號數(shù)表示(最高為是0),負溫度的最高位是1 。之后將數(shù)據(jù)去掉符號右移5位,加上符號,乘以0.125就是所需的溫度值。這里有幾個事例值,感興趣的話可以算一下:

先使用i2c-read來讀取一下這兩個字節(jié):高字節(jié)在前:




最后來計算一下結(jié)果:0x16C0 >> 5 =0xB6 =186
所以溫度值為186*0.125=23.25

可以看出,煙臺的晚上還是非常涼爽的!

注:在V1.0.2版本中,i2c-read函數(shù)新增參數(shù)-a,用于指定寄存器地址(寄存器地址只能為1個字節(jié)。如果寄存器地址多于1個字節(jié),只能使用先寫在讀的方式進行操作)。



另外,需要補充一點的是,i2c-write和i2c-read在正確寫入和讀取的時候不會輸出任何信息的。只有在發(fā)生錯誤的時候才會進行提示:





LM75A.pdf (137.07 KB, 下載次數(shù): 7)





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


V1.0.4命令文件說明
    在1.0.4版本中,新增了直接發(fā)送命令文件這一特色。下面就針對命令文件結(jié)合TCP/IP芯片W5100,進行一下說明。
   
    5100使用SPI方式進行通信,并且僅僅支持模式0. 還需要注意的是,對5100芯片進行讀寫的時候,SPI的速率不能太低。在之前的操作中,發(fā)現(xiàn)使用256KHz的SPI進行通信,不能正常的進行讀寫。因此在1.0.4版本中,將SPI的時鐘頻率提升到了4MHz。
    上圖是SPI通信的協(xié)議圖。分為3部分。第一部分是操作碼。讀的時候,操作碼是0x0F
,寫的時候操作碼是0xF0 。 第二部分是5100寄存器地址,2個字節(jié),分為兩次發(fā)送。第三部分是需要寫的數(shù)據(jù)。1個字節(jié)。


    看一下相關(guān)的寄存器:
   
比如說設(shè)置本機IP,就要分四次來寫(本機IP由4個字節(jié)組成,每次只能對1個字節(jié)進行讀寫),如果設(shè)置成為192.168.1.3,那么應該使用這樣的命令:
  • spi [ 0xf0 0x00 0x0f  0xc0 ]
  • spi [ 0xf0 0x00 0x10 0xa8 ]
  • spi [ 0xf0 0x00 0x11 0x01 ]
  • spi [ 0xf0 0x00 0x12 0x03 ]

除了本機IP,還需要設(shè)置網(wǎng)關(guān)IP,子網(wǎng)掩碼,MAC地址,共需要20次操作:
  1.     spi [ 0xf0 0x00 0x01 0xc0 ]
  2.     spi [ 0xf0 0x00 0x02 0xa8 ]
  3.     spi [ 0xf0 0x00 0x03 0x01 ]
  4.     spi [ 0xf0 0x00 0x04 0x01 ]

  5.     spi [ 0xf0 0x00 0x05 0xff ]
  6.     spi [ 0xf0 0x00 0x06 0xff ]
  7.     spi [ 0xf0 0x00 0x07 0xff ]
  8.     spi [ 0xf0 0x00 0x08 0x00 ]

  9.     spi [ 0xf0 0x00 0x09 0xde ]
  10.     spi [ 0xf0 0x00 0x0a 0xad ]
  11.     spi [ 0xf0 0x00 0x0b 0xbe ]
  12.     spi [ 0xf0 0x00 0x0c 0xef ]
  13.     spi [ 0xf0 0x00 0x0d 0xfe ]
  14.     spi [ 0xf0 0x00 0x0e 0xed ]

  15.     spi [ 0xf0 0x00 0x0f 0xc0 ]
  16.     spi [ 0xf0 0x00 0x10 0xa8 ]
  17.     spi [ 0xf0 0x00 0x11 0x01 ]
  18.     spi [ 0xf0 0x00 0x12 0x03 ]

  19.     spi [ 0x0f 0x00 0x01 r:1 ]
  20.     spi [ 0x0f 0x00 0x02 r:1 ]
  21.     spi [ 0x0f 0x00 0x03 r:1 ]
  22.     spi [ 0x0f 0x00 0x04 r:1 ]
復制代碼

在每次給5100通電的時候,都需要重新發(fā)送一下這樣的字符,太麻煩了,所以索性將這些命令保存在一個txt文件中,直接通過smarTTY發(fā)送文件:

點擊smarTTY中的send a binary file(在上圖中用圓圈圈出),選擇w5100.txt :

最后四個命令是讀取網(wǎng)關(guān)的ip地址。在設(shè)置完這些寄存器之后,就可以使用windows上的ping命令來測試一下了:


斷開5100的網(wǎng)線再ping一下:



w5100.txt.rar (214 Bytes, 下載次數(shù): 7)


w5100_Datasheet_cn.pdf (1.8 MB, 下載次數(shù): 7)

W5100_Datasheet_v1.2.5.pdf (1.61 MB, 下載次數(shù): 7)



-------------------------------------------------------------
</argc;i++)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品小视频在线观看 | av一级| 91看片免费 | 97色综合| 日本精品在线一区 | 在线播放日韩 | 日韩在线第一 | 欧美视频三区 | 男人天堂社区 | 九色国产 | 天堂网av在线| 91伦理片| 亚洲精品乱码久久久久久9色 | 99reav| 成人午夜视频在线观看 | 久久精品一级 | 免费九九视频 | 男人天堂网站 | 午夜精品一区二区三区免费视频 | 日韩在线不卡 | 国产精品一区二区视频 | a免费视频 | 国产免费一区二区 | 国产99热| 香蕉国产在线视频 | 免费看黄视频网站 | 伊人免费视频二 | a级毛片基地 | 日韩一区二区三区在线视频 | av影音资源 | 中文字幕一区二区三区精彩视频 | 2019天天干夜夜操 | 亚洲福利一区二区 | 亚洲精品国产电影 | 国产精品视频一区二区三区不卡 | 国产精品海角社区在线观看 | 亚洲在线看 | 成人午夜av | 国产成人网 | 伊人网站| 中文字幕高清av |