前言
目前很多用戶在使用 STM8 的時(shí)候使用了 16MHz 的內(nèi)部振蕩或者外部晶體來作為時(shí)鐘源。事實(shí)上,STM8 家族中有些系列是支持最高 24MHz 主頻的,比如 STM8S207、STM8AF52,等等。那么,需要更快的運(yùn)行速度時(shí),是否只需要使用更高的主頻就可以直接運(yùn)行了呢?
問題
某客戶在其產(chǎn)品的設(shè)計(jì)中,使用了 STM8AF52A9。客戶工程師稱其一段以前已經(jīng)驗(yàn)證過的代碼,使用 STVP 下載后無法正常運(yùn)行。但是他試過在 IAR for STM8 中是可以正常調(diào)試的,不知道為何使用 STVP 后就無法正常工作了呢?
調(diào)研
1.了解問題
使用編譯好的.s19 文件使用 STVP 燒寫到 STM8AF52A9,發(fā)現(xiàn)上電后是無法正常工作的。觀察用戶代碼,在 IAR 中進(jìn)入調(diào)試狀態(tài),可以斷點(diǎn)調(diào)試,單步調(diào)試,都可以。不過,最后發(fā)現(xiàn)在線調(diào)試時(shí),一旦運(yùn)行到以下代碼時(shí),程序就死掉了。
status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);
2.分析問題
STM8 上電后默認(rèn)的主時(shí)鐘源為內(nèi)部 HSI RC 時(shí)鐘的 8 分頻,即 fHSI/8。原因是 HSI 時(shí)鐘的穩(wěn)定時(shí)間短,而 8 分頻可保證系統(tǒng)在較差的 VDD條件下安全啟動(dòng)。等主時(shí)鐘源穩(wěn)定后,用戶可以自行將主時(shí)鐘切換到其他時(shí)鐘源上。
先來看一下剛才這個(gè)函數(shù)的原型:
ErrorStatus CLK_ClockSwitchConfig(CLK_SwitchMode_TypeDef CLK_SwitchMode,CLK_Source_TypeDef CLK_NewClock, FunctionalState ITState, CLK_CurrentClockState_TypeDefCLK_CurrentClockState)
它的作用在于切換時(shí)鐘源。CLK_SwitchMode 代表使用的切換方式,有自動(dòng)切換和手動(dòng)切換;CLK_NewClock 代表新的時(shí)鐘源;ITState 代表是否使能或禁用中斷;CLK_CurrentClockState 代表切換后原時(shí)鐘源的狀態(tài)是否保持或關(guān)閉。所以,用戶代碼的意思就是:使用自動(dòng)切換方式,切換主時(shí)鐘到 HSE,不產(chǎn)生中斷,切換后原主時(shí)鐘源關(guān)閉。
切換主時(shí)鐘源后程序就出問題這種情況,看來問題很可能出在 HSE 上,必須對(duì)外部晶振進(jìn)行檢測。原本思考是否 HSE 外部晶體的振蕩是否存在什么問題,但是在使用示波器進(jìn)行檢測后發(fā)現(xiàn) HSE 已經(jīng)是在正常的振蕩當(dāng)中了,而且波形很漂亮。但是,在示波器上看到頻率是 24MHz。檢查晶體上的標(biāo)記,果然是 24MHz 的頻率。所以,客戶在使用 STM8AF52A9 時(shí),為了提高性能,使用了最高主頻 24MHz。
客戶所遇到的問題應(yīng)該就出在 24MHz 的使用上了??蛻粢郧笆褂枚际?16MHz 的主頻。STM8 要求,如果用戶使用的主時(shí)鐘頻率超過了 16MHz,那么 Flash 以及 EEPROM 的訪問需要配置 1 個(gè)等待周期。
STM8AF52A9 數(shù)據(jù)手冊可見如下:
參考手冊 RM0016 在 HSE 的描述中,也提到了:
對(duì)于選擇 0 等待周期還是 1 等待周期,必須在選項(xiàng)字節(jié)中選擇。檢查芯片的選項(xiàng)字節(jié),發(fā)現(xiàn)選擇的是 0 等待周期,所以問題就是就出在這了。
3.問題解決
使用 STVP,在 OPTION BYTE 頁面修改選項(xiàng)字節(jié),將等待周期設(shè)置為 1 個(gè)等待周期,如下:
下載更新芯片的選項(xiàng)字節(jié),使用之前的.hex 文件,可以正常工作了。
結(jié)論
由于使用的 24MHz 主頻已經(jīng)超出 16MHz,而在選項(xiàng)字節(jié)中并沒有修改等待周期為 1 等待周期,導(dǎo)致在 Flash 訪問上存在問題,無法正常運(yùn)行程序。
處理
需要修改選項(xiàng)字節(jié),將等待周期修改為 1 等待周期。
-
STM32
+關(guān)注
關(guān)注
2270文章
10915瀏覽量
356765 -
時(shí)鐘源
+關(guān)注
關(guān)注
0文章
93瀏覽量
16007
原文標(biāo)題:STM8使用24MHz外部晶振無法正常運(yùn)行
文章出處:【微信號(hào):mcugeek,微信公眾號(hào):MCU開發(fā)加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論