STM32F091的HAL Delay生效問題

2021-10-19 10:19:16 字數 3187 閱讀 9543

板子打樣回來,上面有2顆stm32f091rct6.

同事焊接的板子。人家是專業焊工,都是一口氣焊接完的。

如果是我,就會按照原理圖,一部分子電路一部分的焊接,焊接完乙個子電路,量一量,如果帶mcu的,就寫個測試程式測試一下,如果看起來正常了,再繼續焊接下一部分。畢竟打樣的板子,原理圖都可能會錯的。

想先驗證一下mcu是否能操作板子上的硬體資源, 使用hal庫 + iar程式設計。

實驗時,發現時基不對。一呼叫hal_delay(), 就過不去,卡死在那裡了。

正常的時基,會週期性的進systick_handler()。但是我這程式,不進systick_handler().

因為板子的料是中間商買的,料也買的不全,同事焊接時,將2片stm32f091rc都焊接成stm32f103了,這事弄的…

我用熱風槍將stm32f103吹下來,換上stm32f091rc也不好使。有點懷疑用到了f091的假貨或者有硬體元器件壞掉了。

領導就想到讓同事焊接,能比我焊的快(我就不知道,能快多少?!),他就沒想到如果別人幫我焊接,可能我搭進去的除錯時間,可能要比焊接時間多很多. 下次堅決拒絕同事幫我焊接打樣的板子。

開始自己買全套的料,看見一款f091的開發板,也順手買來。

f091開發板到了之後,人家例程用的mdk + f0韌體庫。對我沒大用。

買的時候,店家說他那沒f091了,我就讓他將不帶f091的開發板發來,現在感覺料整5份到10份好些。像可程式設計器件,按照10份料買來靠譜點。

我自己用手頭的f091焊接的。

焊好後,用萬用表將f091相鄰的每2條管腳都量過,沒短路。3v3和gnd之間也沒短路。

上電,用cubemx生成乙個模板工程試了下,還不好使, hal_delay()過不去。

用示波器看了主晶振和輔助晶振的頻率,乙個是8mhz, 乙個是幾十khz到100多khz, 差不多。

有點疑惑了。

想起手頭還有st官方板子 nucleo-f091rc,用st官方在github上發布的stm32cubef0工程中帶的f091例程試試,好使, hal_delay() 沒問題。

去下f091的原理圖和板圖,看到f091用的晶振是stlink從mco給的, 輔助晶振用的f091上接的。

量了nucleo-f091rc晶振頻率,主晶振8mhz左右,輔助晶振幾十khz,我板子的晶振指標看來可以。

到此,開始懷疑是cubemx生成工程時,配置的不對,引起生成**時鐘相關配置**產生的不對。導致hal_delay() 卡死。

這次,是在tb買來得f091最小系統板上做的實驗。將實驗記錄一下,稍後再去自己板子上做實驗。

這個實驗,只配置cubemx,使hal_delay() 好使就行。

只配置主晶振,輔助晶振,swd除錯口

在能用的實驗配置上看,要使hal_delay好使,和配置前相比,改動了以下幾個子頁面。

直接配置項為sys, rcc, rtc

因為動了配置,gpio, nvic也間接變了

選擇sys子頁面

勾選swd選項, 時基是systick

選擇rcc子頁面

hse, lse都使用外部晶振

hse, lse的超時值(週期)都設定為1ms

選擇rtc子頁面

勾選"啟用時鐘源", 否則在時鐘配置頁面,不能設定hse, lse時鐘使用外部晶振。

選擇nvic子頁面,開啟**產生選項頁面

可以看到時基函式是要產生的。

lse, hse晶振都選擇使用外部晶振,通過hse + pll + css產生時鐘內部主晶振頻率為48mhz.

輸入完48mhz內部主頻率後,回車讓cubemx自己去解決pll倍頻引數。

產生**時,將.c/.h分開產生,容易維護些。

確認下,生成的初始化函式是可見的。

將iar優化關了。否則單步時,會產生錯覺。

在主程式中加入hal_delay呼叫

/**

* @retval int

*/intmain

(void

)/* user code end 3 */

}

在systick處下斷點

/**

* @brief this function handles system tick timer.

*/void

systick_handler

(void

)

當程式跑起來時,呼叫hal_delay(x)時,就進入systick_handler() x次,這樣時基就對了。

如果有問題時,先確認硬體沒問題,能用stlink除錯,晶振頻率沒問題。

用st自帶的模板先試試,確認基本能跑。

再檢查cubemx配置的是否有問題,如果有問題,用cubemx按照st開發板的配置生成乙個模板工程,看看是否能用。如果能用,再配置自己的工程。

今年30和初一都沒幹活,希望不要從年頭忙到年尾。

除了這2天,其餘時間幹活,都是可以從心裡原諒自己的。

願我年年有今日,歲歲有今朝。

STM32F4與STM32F1的區別

作為cortex m3市場的最大佔有者,st公司在2011年又推出基於cortex m4核心的stm32f4系列產品,相對與stm32f1 f2等cortex m3產品,stm32f4最大的優勢,就是新增了硬體fpu單元以及dsp指令,同時,stm32f4的主頻也提高了很多,達到168mhz 可獲得...

基於stm32f407建立stm32F427工程

分為三個部分 1.啟動檔案 2.fwilib 包含兩個資料夾inc和src。src裡面是stm32資源的c檔案,inc則是32資源的h檔案 3.user這也是我不太理解的部分 ddbugconfig只包含了用於debug的初始化,則是f4的系統檔案。我是在f407的基礎上改的 總的來說 1.改了晶元...

STM32F1與STM32F4間CAN通訊除錯

can通訊的除錯不單是軟體上的除錯,也需要對硬體進行檢查。在調通之前一直有兩個疑惑干擾判斷 結論在文末 1.不同的can晶元是否存在不相容。2.不同型號的stm32是否can通訊是否存在差異。stm32f1與stm32f4之間can通訊的除錯過程 僅以stm32f1作介紹 標準庫 1.確定引腳與資源...