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

1、STVD和STVP的使用及串口燒寫程序教程

STM32每次下載后正常運行,但是斷電或復(fù)位后程序運行就無法正常運行的解決辦法

stm32插入micro USB線后,電腦無法識別原因

STM32的SPI1,按下復(fù)位鍵無法通信或者用仿真器提供的電源時無法正常通信、只有當(dāng)重新連接電源才正常通信

評論