天天看點

系統時鐘的配置、半主機模式(百問網7天物聯網智能家居筆記3)

3. 系統時鐘的配置

系統時鐘的配置、半主機模式(百問網7天物聯網智能家居筆記3)

RCC

● 根據STM32F1XX的參考手冊RCC部分,我們可以看到有兩個章節都是關于RCC的(第七章和第八章)

系統時鐘的配置、半主機模式(百問網7天物聯網智能家居筆記3)

● 這是對應不同規格處理器做的不同說明,一個使用通用存儲容量型的處理器,另一個使用的是串聯通信型的處理器

○ STM32F103是第七章的那種類型的處理器 , 在手冊的最前方有說明 :

系統時鐘的配置、半主機模式(百問網7天物聯網智能家居筆記3)

時鐘樹

● 以系統時鐘SYSCLK處為界限

系統時鐘的配置、半主機模式(百問網7天物聯網智能家居筆記3)

● 我們可以将F103的時鐘配置分為兩部分 :

○ 配置系統時鐘 (時鐘樹的左側分析)

■ 系統時鐘源可以來自三個方向,一個是内部高速時鐘HSI,一個是PLL輸出時鐘PLLCLK,還有一個是外部高速時鐘HSE

■ 通過鎖相環PLL将時鐘輸入源經過倍頻和分頻後得到一個符合處理器支援的工作範圍的更高的系統時鐘。

○ 配置總線時鐘 ( 時鐘樹的右側分析 )

■ 可以看到由系統時鐘出發,可以配置處理器的總線和各外設的時鐘。不同總線要求的最大時鐘頻率是不同的,我們需要根據這些要求來配置總線和外設的時鐘。

系統時鐘的配置、半主機模式(百問網7天物聯網智能家居筆記3)

4. 序列槽初始化流程及 printf 函數重定向

序列槽初始化流程

1、使能序列槽外設時鐘;

2、是能序列槽外設的GPIO的時鐘;

3、配置序列槽外設GPIO的複用功能;

4、配置序列槽的參數:波特率、資料位、停止位、校驗位、傳輸方向等;

printf函數的重定向 ( 半主機模式和ARM C庫 )

● 半主機模式是ARM标注你提出的一個概念和機制

○ 它是一種用于ARM處理器或者模拟器與PC主機之間進行輸入輸出通信的一種機制。

○ 這裡的輸入輸出一般指的就是鍵盤輸入和PC螢幕顯示輸出 。 且這個機制運作的環境必須是PC主機在運作一個ARM模拟器或者是PC主機已經和一個ARM處理器通過某種方式有通信連接配接,比如序列槽、網口、USB等。

■ 比如我們可以使用C庫裡面的printf()函數和scanf()函數使處理器進行擷取PC主機的鍵盤輸入和螢幕顯示而不是真的在處理器上連接配接一個鍵盤和顯示器。

○ 而對于C庫,其本身是很龐大複雜的,我們沒有對裡面所有的内容都進行了解,隻是針對于半主機模式和microlib進行了粗淺的認識

○ ARM處理器的模拟器使用的是半主機模式,我們無需添加某些頭檔案或者指令即可使用半主機模式中的一些接口或者指令,比如HLT、SVC、BKPT等;

○ 但是那是适用于模拟器的,并不适用于一個實際的硬體開發闆,因為大多情況下我們的開發闆是不會接入一個鍵盤來擷取資料的, 比如我們要實作的調試序列槽的驅動,我們希望調用printf函數來讓UART輸出資料, 我們需要重寫fputc這個函數才行 .

○ 要将我們的程式是在非半主機模式下運用C庫,隻需要在程式中任意地方添加以下代碼即可:

系統時鐘的配置、半主機模式(百問網7天物聯網智能家居筆記3)

○ 關于如何重定向printf,即重寫fputc,在C庫手冊中有示例:

系統時鐘的配置、半主機模式(百問網7天物聯網智能家居筆記3)

microlib

● microlib是C庫中的一種,它是預設C庫的替代庫檔案

○ 設計它的初衷是用于那些基于極少記憶體映射的嵌入式應用

○ 而使用了microlib的應用在【有作業系統的情況下】是>無法正常運作的<

○ microlib也有許多的内容,比如和C庫的不同點,有哪些特别之處,使用方法等等。 然而我們現在關心的是調試序列槽的使用printf、scanf的輸入輸出 。 那麼microlib裡面也有對這一點進行特别說明 :

系統時鐘的配置、半主機模式(百問網7天物聯網智能家居筆記3)

半主機模式、C庫的總結:

系統時鐘的配置、半主機模式(百問網7天物聯網智能家居筆記3)

繼續閱讀