STM32 特殊引腳作為普通IO口使用的問題

2021-10-21 19:53:04 字數 2628 閱讀 1718

開發平台:keil5

硬體平台:stm32f103rct6

之前有有弄過的東西,因為沒有記錄忘記了,所以還得重新找資料尋找答案,所以說,部落格還是得寫啊,不然搞過的東西,又得重新再來一遍。(-_-||)

原理圖如下:

原理圖中,我們將 osc_in 引腳接了有源晶振,osc_out引腳需要採集ds18b20資料(也就是做普通io使用),那麼我們需要如何配置:

在手冊中,由講解到:

注意,再這裡提到過,「當不適用主振盪器hse時,pd0 和pd1 可以對映到 osc_in 和 osc_out引腳 」。

再這裡,由於我們使用了外部高速時鐘 hse,所以,是不是不能使用了呢?再這裡我也有疑問。

在這裡我們既要引出stm32 時鐘部分

高速外部時鐘訊號(hse)由以下兩種時鐘源產生:

為了減少時鐘輸出的失真和縮短啟動穩定時間,晶體/陶瓷諧振器和負載電容器必須盡可能地靠

近振盪器引腳。負載電容值必須根據所選擇的振盪器來調整。

在這個模式裡,必須提供外部時鐘。它的頻率最高可達50mhz。使用者可通過設定在時鐘控制暫存器中的 hsebyp 和 hseon 位選擇這一模式。外部時鐘訊號(50%占空比的方波、正弦波或三角波)必須連到soc_in引腳,同時保證osc_out引腳懸空。 見圖12。

3~25mz外部振盪器可為系統提供非常精確的主時鐘。相關的硬體配置可參考圖12,進一步資訊可參考資料手冊的電氣特性部分。

在時鐘控制暫存器(rcc_cr)中的 hserdy 位用來指示 高速外部振盪器是否穩定。在啟動時,直到這一位被硬體置』1』,時鐘才被釋放出來。如果在時鐘中斷暫存器(rcc_cir)中允許產生中斷,將會產生相應中斷。hse晶體可以通過設定時鐘控制暫存器(rcc_cr)中的 hseon 位被啟動和關閉。

ps:在這裡,我們使用了有源晶振,但是之前我沒有細看原理圖,我的**裡面還是按照無源晶振配置,發現也是可以執行的,於是去尋找二者的配置區別,發現:有源晶振的配置就是多了一句:

/* enable hse and hse bypass */

rcc-

>cr |=(

(uint32_t

)rcc_cr_hseon | rcc_cr_hsebyp)

;

無源晶振則是:

/* enable hse */

rcc-

>cr |=(

(uint32_t

)rcc_cr_hseon)

;

於是,我在想,是不是有源晶振,上電了就輸出50%占空比的正弦波,然後系統直接檢測到了時鐘就緒標誌(rcc_cr_hserdy)系統執行。

rcc_cr_hsebyp : 定義是 hse晶振被外部時鐘旁路。指將晶元內部的用於外部晶體起振和功率驅動等的部分電路和xtal_out引腳斷開。這時使用的外部時鐘是:有源時鐘或者其他stm32提供的cco輸出等時鐘訊號,直接單線從xtal_in輸入。

這樣,就算是外部接了晶體(無源晶振)也不會起振。

回歸上面的問題:將osc_out 配置為普通io口使用:

上面說 「當不使用主振盪器hse時,pd0 和pd1 可以對映到 osc_in 和 osc_out引腳」,那麼我們使用了有源晶振,只接了osc_in,還有乙個腳 osc_out 還能不能使用呢?

實踐是檢驗真理的唯一標準。

配置如下:

/**

* @brief 初始化ds18b20的io口 dq 同時檢測ds的存在

* @param despition

* @retval null

*/void

bsp_gpio_init

(void

)

發現是可以輸出的。。

這就很尷尬。。

不過,再stm32h7的乙份手冊裡,我看到了這樣一句話:

也就是說,其實剛剛說的, osc_in使用外部時鐘模式,第二個引腳充當乙個io引腳是可以的。

這裡這個老哥比我寫的詳細,可參考:

stm32f1系列pb3,pb4,pa13,pa14,pa15用作普通io口的特殊配置

STM32 中JTAG 引腳作為普通IO口設定方法

第一次畫stm32 的pcb 因為採用了swd 除錯,認為jtag的引腳pb3,pb4,沒有用到就做了普通io口,麻煩從此引起了。設定pb3,pb4均為輸出口,且輸出高電平,用萬用表測量,pb4為高,pb3不是高電平,在看mdk 中的暫存器值,pb3,pb4都是高啊?暫存器的值怎麼和實際的值不一樣了...

STM32 中JTAG 引腳作為普通IO口設定方法

看上面的資料手冊,可以知道一般的io口,其預設功能就是io口。可是pb3 pb4 pa13 pa14 pa15這幾個io口的預設功能是jtag功能,io口功能反而是他們的重對映功能。因此要把他們作為普通io口使用,要把他們的重對映功能開啟。只需要把pb3,pb4,pa15當成io使用,設定 rcc ...

STM32 中JTAG 引腳作為普通IO口設定方法

第一次畫stm32 的pcb 因為採用了swd 除錯,認為jtag的引腳pb3,pb4,沒有用到就做了普通io口,麻煩從此引起了。設定pb3,pb4均為輸出口,且輸出高電平,用萬用表測量,pb4為高,pb3不是高電平,在看mdk 中的暫存器值,pb3,pb4都是高啊?暫存器的值怎麼和實際的值不一樣了...