開發平台: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都是高啊?暫存器的值怎麼和實際的值不一樣了...