性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

外設(shè)寄存器該這么看才對嘛

我們知道 STM32 有很多寄存器,看起來特別費勁,當(dāng)然如果通過前面的直接查看寄存器值的方法確實可以觀察數(shù)據(jù),但在這里我要介紹一個特別方便的查看方式。

KEIL 集成的外設(shè)窗口(注意這個外設(shè)串口對 STM32F4 系列支持效果并不理想,但對 STM32F1 的支持特別好)。

首先介紹比較一般的查看方式。

進入 Debug 模式后,你應(yīng)該能看到這個:

System Viewer 是關(guān)于片上外設(shè)的,也就是說不同的芯片具有不同的外設(shè)。

通過這個簡單看看 GPIO 吧(效果和 Watch 查看沒多大不同):

芯片的選擇是通過這個確定的:

而另一個 Core Peripherals 就是關(guān)于 CM3 內(nèi)核的了,只要你的芯片內(nèi)核是這個,基本都一樣的,比如 STM32F103RET6 和 STM32F103ZET6,都是 CM3 內(nèi)核:

通過它看看 System Tick Timer 好了:

看到?jīng)]有,這個界面和普通的寄存器查看就不同了,如果你想知道你的滴答定時器有沒有開啟,直接看 ENABLE 就可以了,根本不需要知道在哪個位。事實上用來查看中斷寄存器更能顯示它的不同:

你的中斷設(shè)置的優(yōu)先級是多少,是否開啟了,是否掛起了,是否處于活動狀態(tài),在這里一目了然。當(dāng)然這里只是簡單介紹,其它更多內(nèi)容自己去看咯,比如你設(shè)置的中斷分組情況,中斷向量表偏移等內(nèi)容都可以在這里查看。

再偷偷告訴你一個點,如何讓程序盡快進入中斷程序運行呢?試試勾選這個吧:

這樣在你的程序運行后馬上就能到你的中斷處理函數(shù)中執(zhí)行了呢,是不是很方便。

通常以上窗口就是一般都能看到的,還有一些窗口如果設(shè)置不當(dāng)是不能出現(xiàn)的,具體設(shè)置可以看 【Peripherals顯示空白】這個小節(jié)內(nèi)容。現(xiàn)在假設(shè)你已經(jīng)擁有如下窗口了:

這些窗口有什么好處呢?

我們知道,CM3 處理器的時鐘這一塊還是很復(fù)雜的,分頻、倍頻的都不知道到底最后時鐘是多少,但有了下面這個窗口就不一樣了:

圖片內(nèi)容太多了,我們來截取一個點好了,就從最后部分介紹:

看到?jīng)]有,當(dāng)時鐘為 8 M 的時候,HCLK、PCLK1、PCLK2 等這些時鐘頻率就根據(jù)你的配置正確顯示好了(前提是你的代碼已經(jīng)將時鐘配置這部分內(nèi)容運行完了)。那么 KEIL 是怎么知道你的外部時鐘是多少呢,通過修改這個:

事實上你可以直接修改這個:

但是這是臨時修改,下次進入 Debug 模式時讀取的還會是 8 M,所以最好修改上面那個。

可能你會說,時鐘頻率什么的我不關(guān)心,只要程序能運行就行,但是在器件通信的時候你可不能不關(guān)心時鐘頻率,因為有的器件的通信頻率是有要求的,比如 SPI 的通信速度要求是多少,你就得是多少,否則超出后肯定通信錯誤。那么如何查看呢?

比如 SPI1 的通信頻率(這里要說明一點是 SPI3 好像無法顯示出來,只能通過常規(guī)方法查看寄存器變量咯):

這里的時鐘分頻系數(shù)為 2,但是顯示的波特率為 72M,這是為什么呢?還記得之前我把 8 M 改成 16 M 了嗎?所以這里才會顯示 72M,所以你要注意一點的是,如果你使用的是外部時鐘,必須按前面的方法設(shè)置正確,這樣SPI這里的波特率顯示才正確。不過前面說了,Clock Disable,即時鐘關(guān)閉了,所以這個值是沒有意義的,因為沒有 SPI 時鐘你是無法工作的呀。

說完這個,再說說常用的外設(shè) GPIO 好了,以 GPIOA 為例說明:

看窗口,是不是相當(dāng)不錯呢。因為程序還沒開始運行,所以所有的 IO 口都是默認設(shè)置,即都是浮空輸入。我想暫時改為輸出怎么樣,直接修改就行了:

但是你會發(fā)現(xiàn)改完了也沒用,因為你的時鐘是關(guān)閉的呀:

所以如果你發(fā)現(xiàn)你的 IO 口沒工作,看看你的時鐘有沒有打開吧。

現(xiàn)在看看有意思的 IO 輸入輸出狀態(tài):

這個 IDR 表示輸入寄存器(不可像 ODR 一樣修改),如果這個 IO 口設(shè)置為輸入了,那么這個可以實時顯示你的 IO 口狀態(tài)的(另外魚鷹偷偷告訴你,如果在沒有萬用表的情況想知道輸入 IO 口是高電平還是低電平,看這個就可以了,即使程序不運行也可以觀察哦)。

 ODR 表示輸出寄存器,勾選了代表輸出為高電平,沒勾選就是低電平(前提是你的這個 IO 口已經(jīng)設(shè)置為輸出了),如果你想讓 IO 暫時輸出一個電平,那么改這個就行了,比如你想看這個 PA0 是否設(shè)置正確或者是否損壞了,結(jié)合萬用表就可以知道這個引腳是否能被你控制了。

LCKR 這個是引腳的鎖定寄存器,一般不怎么使用。而 Pins 這個選項是在軟件仿真情況下才會出現(xiàn)的,這個其實和用你的萬用表測量是一樣的道理,只不過因為是軟件仿真的緣故,所以不存在損壞的問題,如果不能控制,就說明是程序配置問題了:

比如當(dāng)你配置為 10M 輸出的情況下,如果勾選 PA0  ODR,那么這個引腳的 IDR  Pins 自動就會勾選了。而如果你在 Pins 里勾選,就類似于你在給這個引腳直接輸入一個高電平,而這個引腳本來是輸出的,所以會被禁止:

但是如果這個引腳是輸入的,勾選 Pins 就沒有問題了,并且 IDR 寄存器還能反映引腳狀態(tài)呢:

看完這些功能是不是感覺特別好用啊,所以說掌握了開發(fā)平臺的調(diào)試手段對你的開發(fā)是非常有必要的,磨刀不誤砍柴工,說的就是這個了。

另外再說一點,因為窗口太多了,只是拿其中部分窗口說明的,其他的就靠你自己去嘗試了。

PWM 輸出是否正常?變量的變化如何通過 KEIL 以波形的方式展現(xiàn)出來?

聲明:本內(nèi)容為作者獨立觀點,不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關(guān)注 160
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧