你還在為看懂數據手冊而苦惱嗎,從零開始學單片機

2022-04-01     大方老師單片機

原標題:你還在為看懂數據手冊而苦惱嗎,從零開始學單片機

你還在為看懂數據手冊而苦惱嗎,從零開始學單片機

本章節白勺數據手冊閱讀技巧是綜合多種晶片白勺數據手冊來描述白勺。通用於多種晶片白勺數據手冊閱讀技巧通過本章節,c語言基礎白勺人都可以做出點LED燈這樣白勺簡單操作了

前置知識

開始確定查CPU內核確CPU的機器周期

這個信息可能在晶片數據手冊上有提供,可能需要去找這個晶片的內核的用戶手冊查找

查不到可以詢問晶片提供方(注意區分晶片數據手冊和內核用戶手冊是兩個東西)

時鐘周期1/FOSC(單位是時間ns,us,ms,s) //最小的時間單位

FOSC的單--->1/FOSC的單位

Mhz---->us

Khz---->ms

Hz---->s

機器周

一般查CPU內核概述或內核用戶手冊就可以知道

例如一個晶片的機器周期2個時鐘周期,而這個晶片FOSC=4Mhz

那麼這個晶片的機器周t=2*(1/FOSC)=2/FOSC=2/4=0.5us=500ns

FOSC的單位Hz,那麼獲得的周期單位s

1Mhz=1000000Hz

1Khz=1000hz

指令周期:指一條指令所花費的機器周期

單指令:指令周=機器周期(注意在一些流水線設計的內核中一個指令周期等於多個機器周期)

雙指令:指令周=2*機器周期

1.查看開頭部分的晶片特性

其大概包括如下信息

1.晶片架構

2.支持外設白勺種類和特性

3.支持最大時鐘頻率

4.有些手冊會將待機功耗(一般說白勺是待機電流)和正常功耗寫在這,

有些需要去查電氣信息才能了解

5.單片機白勺相關特性

...等等

查看該手冊支持哪些晶片

一般在支持哪些晶片就會畫上支持晶片白勺管腳圖

手冊一般會有選型表描述支持的晶片型號

2.數據手冊查詢信息步驟

第一步:

1.(直Ctrl+F查找,或者通過目錄查找)找到晶片的基本型模塊框(或者結構框)

英文文檔可查詢如下關鍵字block diagram

結構框圖可以大概了解晶片的如下信息

IO引腳

外部時鐘源引腳

電源引腳

各種總線

有一個大概的了解

查詢時鐘來源,查看時鐘樹圖

2.第二步

找到單片機的時鐘源來源

(查詢關鍵字:時鐘源、系統時鐘、時鐘源框圖、或時鐘樹框/震盪器配)配置時鐘源

英文文檔可查詢如下關鍵字:

Clocksoscillator Clocks and startupClock treeOSCOscillator Configurations

注意有些單片機沒有時鐘配置,也就是它只有一個內部時鐘,並沒有分頻和倍頻電路,

也就不會有時鐘樹圖

還有一些因為時鐘源配置簡單而沒有時鐘樹圖說明,碰到這樣的查詢技巧是找到該晶片的

OSC相關管腳,然後找該管腳相關的寄存器(通Registers查找到寄存器表)

單片機的時鐘來源有三個

1 HSE OSC外部高OSC時鐘

2 LSI RC 內部低RC時鐘

3 PLL

如下圖是東軟某款晶片的時鐘源框

圖標含義

梯形圖:選擇分支(梯形底部為分支來源,頂部為選擇結果輸出)

一般矩形圖:功能名稱

DIV矩形:分頻除以後面的數字

小矩形內部有交叉線:引腳

指向圖形的箭頭:寄存器配置

看框圖配置時鐘源

注意查FOSC的配置來源從右往左看,配置的時候最好從左往右配()

配置後的時鐘源就是上圖中最後FOSC這條線

1從這條線往左走,碰到第一個連接點連接到DIV16,

這表CLKO輸出的FOSC/16的頻率

2繼續往左走,碰到一CLKSS的箭頭指向的矩形

這表CLKSS這個配置位,作用是時鐘切換,並且受到前面OSCS這個配置位的影響

0:表示低速時鐘

1:表示高速時鐘

3繼續往左走,有分支,具體走那個分支還受OSCS這個配置位的影響

CLKSS選擇的是低速時鐘,

OSCS沒有選擇外部低速時鐘的話則往下走INTOSCL

OSCS選擇了外部低速時鐘的話,那麼則往最上面的路通OSCSXTAL

那麼此時只需要從左往右配OSCSCLKSS這倆個配置位就可以完FOSC的配置了

CLKSS選擇高速時,OSCS選擇的非外部時鐘源

那麼走的就是走上面的線並通OSCS這個梯形走下面的線到Foscs這個梯形

Foscs這個梯形可以選擇預分頻,到INTOSCH

上面的步驟是從結果逆推,更容易看懂時鐘的來源

而一般配置我們從左往右配置,比如開始用戶就知道自己是要用高頻時鐘還是低頻時鐘

外部時鐘還是內部時鐘

例如

我們需要一8Mhz頻率的時鐘源

從手冊上查到可知

INTOSCH提供的16Mhz

INTOSCL提供的32Khz

好像上面的都不符合我們的要求,但是手裡又沒8Mhz的外部振蕩器

我們的策略是選INTOSCH,通過預分頻來達到目的

所以從上面的框圖我們選擇INTOSCH開始FOSC結束這條路線

FOSCSFHIOSC/2預分頻就可以獲16Mhz/2=8MHz的頻率了

然後再配OSCSCLKSS這兩個配置位就可以了

3.查看關鍵配置和外設功能復用引腳

第三步:

查看引腳,以及引腳的涉及的功能和配置

從下面可以看到晶片相關引腳的功

上圖是晶片的引腳排列以及功能

引腳從晶片帶圓點的位置逆時鐘從低到高排列

如上1VSS(電源負極,或者GND)16VDD(電源正)是晶片的電源相關引腳

PA0~PA7,PB0~PB7,表示的是普IO引腳

2號引腳

PA5:表示具有普IO外設功能

KIN5:具有外部喚醒功能(晶片睡眠器件可通過該引腳外部信號的電平變化來喚醒晶片)

PINT3:具有外部中斷功能(外部信號通過引腳變化會產生中斷,

一般這樣的具有中斷功能的引腳也具備喚醒功能)

OSC1:可以作為外部晶振輸入

CLKI:外部時鐘輸入

可以通過管腳復用說明查詢相關功能

PA5/KIN5/PINT3..描述使用左斜槓分隔,意義為引腳的復用功能

簡單的說這個引腳可被多個功能使用(通過配置相關寄存器來選擇該引腳使用的功能)

查看引腳復用功能表

一般為如下圖表,一般在管腳圖下方或者器件概述章節

4.外設配置

第四步:

根據使用的外設查詢對應的章節

以普通IO(GPIO)外設配置為例

在數據手冊上IO埠或者輸/輸出端英文文檔查I/O Port

描述的信息有

1.描述外設的電路的簡單框圖

2.外設的功能

3.外設涉及到的寄存器

GPIO管腳的通IO配置步驟如下

1.配置管腳的方向,輸入還是輸出

2.配置管腳的數據,就是管腳的電平

PIC TRISA寄存器配置管腳的方向0:為輸出1為輸入

這個寄存器8位的寄存器,每一位代表著這IO埠的一個引腳

TRISA:配置的PAPA0~PA7這樣8個引腳,

TRISB:配置的PBPB0~PB7這樣8個引腳,

配置位不一定都用到,可能只用到其中幾個,具體根據手冊信息

寄存器查詢技巧:

Registers查找到寄存器表,再通過寄存器的名稱

找到寄存器的詳細描述表

PORTA寄存器就是管腳的數據寄存器

假設,配置值16進位表示,可將其轉換為二進位更直觀查看與配置位的關係

TRISA=0x00

PORTA=0x01

上面配置PA0引腳輸出高電平,如果你晶片上的該引腳連接了一LED

查看原理圖上,LED燈是高電平點亮,這個設置就會點LED燈了

還有其他外設的配置流程一般入下

1.配置外設時鐘源(例I2C,uart等外設)

2.配置該外設的復用引腳

3.根據手冊配置該外設的其他寄存器

4.配置外設的中斷(該外設有中斷功能的)

5.編寫中斷服務函數,在函數內做自定義信號標記並清除該中斷的標記位,

在主循環中輪訓自定義信息標記,來判斷該外設是否產生了中斷

(服務例程中最好不要做耗時等操作,這樣做是為了儘量減少對其他外設中斷的影響)

5其他相關章節

1.存儲器構成(一般是在自己設計軟體包時用,以及自己實os內核查看,並且

這些信息只是簡單的信息)

描述了該晶片的存儲構成,寄存器的映射地址,堆棧、中斷向量、數據存儲器的映射地址等信息

2.電氣信息

描述的是器件的電壓,電流等信息

3.指令集

彙編中才用到

6.一個完整的程序流程偽代碼

#include <晶片寄存器相關的頭文件,由該晶片的軟體包提供,

也可以自己根據手冊的寄存器映射地址自己定>

unsigned char myFlag=0;

void IntFunction(){

//中斷服務例程,有些需要由特殊的關鍵字定義如:

// void interrupt函數(void)

// void __interrupt()函數(void)

// 晶片不同服務函數的關鍵字也不一樣,例STM可以修改啟動文件自己定義

// 8位的晶片所有的中斷都用一個中斷服務函數處理,由寄存器的標記位

// 來區分產生的是什麼中斷,也有為不同中斷分配不同服務函數的

if(xxxIE&&xxxIF){

//xxxIE:該中斷的使能位

//xxxIF:該中斷的標記位

//這些位的名稱根據手冊上的描述來

xxxIF=0;//清零中斷標記一般都要立馬清除標記位,否則下次中斷不會進入中斷服務函數

myFlag=1;

}

}

void main(void){

配置時鐘

配置引腳

配置外設

while(1){

晶片運行...

if(myFlag){

myFlag=0;

//輪詢到中斷,在這裡處理中斷要達到的目的

}

///下面led閃爍的偽代碼

led_();

delay(500);

led_()

delay(500);

}

}

說了這麼多,大家記得留意下方評論第一條(或者私信我)有干~

文章來源: https://twgreatdaily.com/zh-sg/b24ff4cb9b5a4c5164b453cbab35dc2a.html