正確使能AHB1時鐘的重要性

2021-09-24 21:37:21 字數 726 閱讀 9829

在第一遍寫完usart3的hmi庫函式後,時隔已久再次想豐富hmi的使用,卻發現無論如何微控制器就是不能通過usart3發出串列埠資料,而usart1當然可以。然後我換了乙個工程檔案嘗試,卻發現可以正常執行usart3。這讓我百思不得其解,使用同樣的hmi.c和usart.c的兩個工程只有無關的各種中斷函式和adc有所差別,為什麼會影響看似毫不關聯的usart3?當時也可以選擇直接使用usart1來做hmi的通訊,但是這個懸而未決的問題並不會因此解決。可惜我並沒有認真仔細閱讀關鍵可疑程式**的習慣,而是只關心使用到的功能**,其餘的自動無視了。如果被我忽視的程式不是我自己改寫的,而是原封不動的例程,那麼問題不大。可是我忘了在對照usart.c寫出hmi.c後,我並沒有仔細確認,只是僥倖通過了功能測試便認為達到目的,現在重新使用當時的程式,問題終於暴露,雖然耗費了大量時間。

不得已,我試圖按照在同乙個工程中找bug的方法,將可執行的工程按照某種方式一步步替換成有問題的工程,但是過多差異很大的c檔案使這種想法不可實現。

更好的做法其實很容易想到:

rcc_ahb1periphclockcmd(rcc_ahb1periph_gpiob, enable);
原來gpio時鐘都是ahb1,,我當時複製岔了。。。

使用時一定要改fputc in usart.c

//重定義fputc函式 

int fputc(int ch, file *f)

GPIO時鐘使能和串列埠時鐘使能的關係

由於stm32有很多外設,為降低功耗,每個外設都對應著乙個時鐘。在晶元剛剛上電時,這些時鐘都是被關閉的。如果想要外設工作,必須把相應的時鐘開啟。即當gpio口復用usart進行通訊時,必須要先使能gpio的時鐘,然後再使能具體外設的時鐘 usart的時鐘 1.stm32微控制器的i o埠配置步驟 1...

mysql 多個and無效 MySQL正確使用索引

show index from 表名 查詢索引名 alter table 表名 drop index 索引名 刪除普通索引 alter table 表名 change id id int 去除主鍵自動增長功能,才能刪除主鍵,相當於重新定義id alter table 表名 drop primary ...

門控時鐘和時鐘使能

在fpga設計中,我們經常會使用分頻的方法來得到乙個我們需要的時鐘頻率,而在很多開發板廠家配套的教程裡,他們常常會使用計數器分頻得到的高低電平時鐘來當做驅動時鐘,這種方法簡單易懂,但是,在工程設計中,這種方法是不被允許的。門控時鐘就是使用計數器和邏輯門翻轉來產生的時鐘,下面是典型的門控時鐘 生成i2...