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

標題: I am master!使用Nucleo334打造新一代的調(diào)試利器 [打印本頁]

作者: 51hei大小    時間: 2016-6-17 15:16
標題: I am master!使用Nucleo334打造新一代的調(diào)試利器
     通常,我們調(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部分,分別對應(yīng)編號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ù):


V1.0.1新增函數(shù):
V1.0.2更新說明:
V1.0.3更新說明:
  
V1.0.4更新說明:

v2.0.0(重要更新)。

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


版權(quán)聲明:
本軟件僅供與學(xué)習(xí)交流之用,未經(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)

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

使用入門:

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接口恐怕難以滿足我們的要求。還需要一些更復(fù)雜的通信協(xié)議,比如說SPI。下面我們就來說說SPI的使用。

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

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

spi的參數(shù)有著固定的要求:

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


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


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

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

通過查看數(shù)據(jù)手冊可以看出,要想往一個地址內(nèi)寫數(shù)據(jù),首先要寫一個WriteEnable命令,在寫完WriteEnable命令之后,StatusRegister寄存器中相應(yīng)的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)用的應(yīng)用程序的名字。例如串口輸入input 0 1 2,經(jīng)過shell的處理之后:
處理之后,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表示的引腳為輸入方式
  }
}

好了,下面就來說說定制命令的詳細步驟:

更多更有趣的功能歡迎你來實現(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接口是一類,用起來各種復(fù)雜,不好用。但是STM32F3的I2C卻非常好用。之前看見有人說STM32的I2C是雞肋,只能說明他沒有用過STM32F3的。下面就說說I2C如何使用。主要操作的芯片是LM75,一個溫度傳感器。
首先介紹三個命令:

為了編寫程序的簡便,I2C的操作使用流的方式,即只能采用內(nèi)置的通信方式(START,STOP)。不能指定RESTART。一般的I2C的讀取操作是 START+devAddr[Write]+regAddr+ReStart+devAddr[Read]+{some bytes}+STOP。由于不能采用ReStart,所以像這樣的讀取應(yīng)該分成先寫在讀兩部分,即:

我的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è)備是否應(yīng)達就行,通過邏輯分析儀抓包如下:(只截取了部分)



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

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



i2c-write必須要有-d參數(shù),用于指示設(shè)備地址。其余的數(shù)據(jù)是要發(fā)送的數(shù)值。如果想通過i2c發(fā)送0x00 0x01 0x02 0x03 這四個數(shù)字可以使用這樣的命令:
設(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,那么應(yīng)該使用這樣的命令:
除了本機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 ]
復(fù)制代碼

在每次給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++)





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久久日韩精品一区二区三区 | 亚洲一区毛片 | 国产精品一区久久久 | jlzzjlzz欧美大全 | 99精品99| julia中文字幕久久一区二区 | 亚洲人人 | 欧美成人精品在线 | 欧美一区在线视频 | 日日夜夜精品视频 | 五十女人一级毛片 | 欧美日韩精品久久久免费观看 | 狠狠干美女 | 成年人在线视频 | 狠狠操狠狠干 | 日韩www| 亚洲 中文 欧美 日韩 在线观看 | 一级片在线观看 | 欧美久久久久久久 | 亚洲黄色av | 欧美天堂 | 国产成人精品999在线观看 | 国产美女精品 | 亚洲天堂中文字幕 | av高清 | 亚洲第一网站 | 综合久久av| 综合国产| 久久这里有精品 | 一区二区久久精品 | 91久久久久久 | 亚洲网站在线观看 | 在线播放国产一区二区三区 | 久久国产精品精品 | 精品在线一区二区三区 | 99精品一级欧美片免费播放 | 美女毛片免费看 | 日韩视频在线免费观看 | 国产精品99视频 | 日批免费观看 | 欧美日韩久久久 |