在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32各個系列時鐘調(diào)高時出現(xiàn)異常案例

STM32單片機 ? 來源:未知 ? 作者:劉勇 ? 2017-12-20 07:27 ? 次閱讀

近日某論壇STM32用戶反饋,使用STM32F103內(nèi)部時鐘,把系統(tǒng)時鐘配置成64MHz單片機就不跑了,配置成36MHz程序就正常妥妥的,頻率稍高點就容易導(dǎo)致死機。他貼出的代碼如下:void RCC_Configuration(void)

{

RCC_DeInit();//將外設(shè) RCC寄存器重設(shè)為缺省值

RCC_HSICmd(ENABLE);//使能HSI

while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待HSI使能成功

//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

//FLASH_SetLatency(FLASH_Latency_2);

RCC_HCLKConfig(RCC_SYSCLK_Div1);

RCC_PCLK1Config(RCC_HCLK_Div2);

RCC_PCLK2Config(RCC_HCLK_Div1);

//設(shè)置 PLL 時鐘源及倍頻系數(shù)

RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);

。。。。。。

結(jié)合他的問題描述及他貼出來的代碼,大致可以判斷很可能是因為他屏蔽了指令預(yù)取和flash讀取等待延遲的參數(shù)配置而導(dǎo)致的。即上面兩條紅色標(biāo)注出來的代碼。

后來我明確地提醒他這點后,他似乎并沒及時反應(yīng)過來,還折騰了幾下才開啟了上述配置,問題最終得以解決。

其實,關(guān)于這個問題經(jīng)常有人遇到,尤其是那些基于STM32標(biāo)準固件庫進行開發(fā)或自行創(chuàng)建工程的新手更容易碰到這個問題。主要原因是因為他們對上述兩行代碼的功能不了解,導(dǎo)致有意或無意的將庫例程中相關(guān)代碼屏蔽掉無視掉而不做配置、或者配置不正確。

這里將這個問題再次分享出來,并對那兩行代碼簡單做些解釋。希望更多人對此有所知曉,少在這個地方走彎路。

這句 FLASH_PrefetchBufferCmd(); 用來開啟或禁用flash指令預(yù)取功能。

現(xiàn)有STM32各個系列都是基于ARM cortexM內(nèi)核的微處理器,它們采用多級流水線的哈佛結(jié)構(gòu),即一條指令的執(zhí)行分割為幾個階段,如取指、譯碼、執(zhí)行等,使得當(dāng)前指令的取指操作完成后就可以開始后續(xù)指令的取指、譯碼等操作,程序指令就這樣像流水一樣執(zhí)行下去,大大提高了指令的執(zhí)行效率。

具體到STM32各系列單片機,這個指令預(yù)取功能的開啟或關(guān)閉可以軟件配置,一般配置為開啟。要注意的是,復(fù)位后不同的系列該功能有的默認為開啟有的則默認為關(guān)閉。比方STM32F1系列的flash指令預(yù)取功能就是默認打開的,當(dāng)然你也可以關(guān)閉。其中,明確要求打開的情景就是當(dāng)那個AHB時鐘預(yù)分頻系數(shù)不等于1時。

再比如STM32F4系列,它的指令預(yù)取功能在芯片復(fù)位后是默認關(guān)閉的,你可以自行打開。但明確要求關(guān)閉的場景就是芯片的供電電壓低于2.1V時。

其實,STM32F4的預(yù)取功能與STM32F1不盡一樣,STM32F4、STM32F2、STM32L4、STM32F7系列芯片使用了ST的專利技術(shù)ART存儲加速器【Adaptive real-time memory accelerator】。該加速器使用指令預(yù)取隊列和分支跳轉(zhuǎn)緩存技術(shù),從而提高 Flash 程序代碼執(zhí)行速度,使得CPU即使在其最高主頻下也能完美實現(xiàn)0 等待執(zhí)行flash程序指令。

上面大致介紹了指令預(yù)取功能,預(yù)取主要是為了實現(xiàn)指令讀取和執(zhí)行的高效性。具體細節(jié)請參考STM32和ARM cortex內(nèi)核的相關(guān)技術(shù)手冊

我們知道CPU的運行速度可調(diào)、可以很快,通常使用高速總線訪問FLASH接口控制器,F(xiàn)LASH控制器收到來自CPU的取指指令后然后去讀取相應(yīng)地址的指令或數(shù)據(jù)。Flash控制器自身的讀取速度相比CPU的高速請求來說可能會出現(xiàn)滯后,往往需要CPU做相應(yīng)的延時等待。為了讓CPU準確及時讀取Flash 數(shù)據(jù),我們須根據(jù) CPU 時鐘頻率以及器件供電情況在Flash存取控制寄存器 (FLASH_ACR)中正確地編程等待周期數(shù)(LATENCY),類似上面提到另外一句代碼:

FLASH_SetLatency(FLASH_Latency_n);

這里的等待周期數(shù)視不同的STM32系列也各有差異,不妨以STM32F4為例:

下面是STM32F4系列部分產(chǎn)品線的LATENCY設(shè)置的表格。從表格中可以看出LATENCY參數(shù)的設(shè)置與CPU的時鐘、電源電壓都有關(guān)系。另外,當(dāng)電源電壓在2.1V以下時要關(guān)閉預(yù)取。

在設(shè)置上面的等待周期參數(shù)時,選擇合適的就好。不難理解,設(shè)置太大了影響CPU性能的充分發(fā)揮,太小了容易導(dǎo)致異常。

具體回到開頭所提案例,它出現(xiàn)死機問題極可能是因為沒有合理配置等待周期參數(shù)導(dǎo)致異常,因為它屏蔽了例程中那兩句配置代碼,即使用其默認功能,對于STM32F1,指令預(yù)取功能默認為開啟。而STM32F1系列芯片的latency默認值即為0,無等待。這樣的話,當(dāng)他把時鐘調(diào)高到一定程度時出現(xiàn)死機就不難理解了。

另外,當(dāng)他反饋時鐘調(diào)高產(chǎn)生異常時,我還給他提醒了注意檢查VDDA的電源情況。我碰到有人遇到因VDDA沒接好使得PLL不正常的情況。我們知道,對于STM32芯片,調(diào)高其工作時鐘,往往借助于鎖相環(huán)。而PLL的供電來自VDDA,如果PLL沒有被正常供電,也是個非常隱蔽的麻煩。曾經(jīng)有個客戶為此折騰好久,才愿沉下心來檢查其“壞品”的電源腳,結(jié)果發(fā)現(xiàn)有個VDDA腳虛焊。一直以芯片低頻沒問題,頻率高了就異常為由懷疑芯片品質(zhì)問題而耽誤時間。

最后給點建議,做STM32開發(fā)的話,尤其是新手,如果參照ST的官方例程的話,有些配置在沒看懂的情況下不要輕易屏蔽或修改。我碰到多個類似本案隨意屏蔽例程中的初始化配置代碼或斷言代碼出現(xiàn)異常,自己又找不到方向的。另外,盡可能使用ST官方的stm32cubeMx圖形配置工具做基本的配置,通過它來生成初始化配置文件,這樣方便省事很多。當(dāng)然,即使使用STM32CUBEMX配置也不是萬能的。比方:曾經(jīng)有人使用STM32F0開發(fā)產(chǎn)品,用CUBEMX配置初始化文件,剛開始配置時時鐘選擇得比較低, STM32CubeMx自然根據(jù)他選擇的時鐘做了相關(guān)參數(shù)配置。后來他自己在用戶代碼里手動調(diào)高了時鐘,而不知相應(yīng)調(diào)整跟FLASH讀取等待有關(guān)的參數(shù),也是發(fā)生跟本案同樣的情況。

好,就此打住。旨在交流與分享,祝君好運!


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5143

    文章

    19571

    瀏覽量

    315696
  • STM32
    +關(guān)注

    關(guān)注

    2290

    文章

    11018

    瀏覽量

    362960

原文標(biāo)題:時鐘調(diào)高時出現(xiàn)異常的案例分享

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    TJA1043的收發(fā)器,如果CAN總線出現(xiàn)異常,它會進入異常狀態(tài)嗎?

    關(guān)于 TJA1043 的收發(fā)器,如果 CAN 總線出現(xiàn)異常,它會進入異常狀態(tài)嗎?一旦處于異常狀態(tài),它的行為會如何?例如,可以發(fā)送數(shù)據(jù)包但無法接收,謝謝
    發(fā)表于 04-04 07:30

    重復(fù)開機關(guān)機,有時會出現(xiàn)ADS1232異常,為什么?

    PWND拉低復(fù)位操作。等出現(xiàn)異常狀態(tài)時,快速重新開關(guān)機。采樣的數(shù)值依然不正確。PWND拉低復(fù)位,無效果. 4.當(dāng)出現(xiàn)異常狀態(tài)時,需要長時間斷電后,重新開機。ADS1232才有可能正常 。 有沒有出現(xiàn)這個現(xiàn)象的?可能是什么原因呢?
    發(fā)表于 02-11 06:44

    ADS1118低溫下出現(xiàn)異常的原因?

    口(設(shè)置成5V,1s)每秒鐘大概有5次轉(zhuǎn)換進行;當(dāng)我把電路板放在室外后,上述較為規(guī)律的波形就會出現(xiàn)異常,具體表現(xiàn)為某一次轉(zhuǎn)換時間變長;當(dāng)溫度繼續(xù)下降時,ADC的一次轉(zhuǎn)換就無法完成,由于我的程序中有一個
    發(fā)表于 02-10 07:45

    ads1298使用內(nèi)部測試信號,連續(xù)讀數(shù)據(jù)方式,獲取的數(shù)據(jù)會不定時的出現(xiàn)異常數(shù)據(jù),是哪里出了問題?

    ads1298 使用內(nèi)部 測試信號,連續(xù)讀數(shù)據(jù)方式,獲取的數(shù)據(jù)會不定時的出現(xiàn)異常數(shù)據(jù),不知道哪里出問題。
    發(fā)表于 01-23 07:56

    使用stm32的spi讀取ads1256數(shù)據(jù),ads1256正常輸出數(shù)據(jù)一段時間后總會出現(xiàn)異常默認設(shè)置,為什么?

    使用stm32的spi讀取ads1256數(shù)據(jù),發(fā)現(xiàn)ads1256在正常輸出數(shù)據(jù)一段時間(不確定多少時間,有時候幾秒有時候一兩分鐘)之后,總會出現(xiàn)異常默認設(shè)置,表現(xiàn)為數(shù)據(jù)輸出頻率(DRDY引腳脈沖
    發(fā)表于 01-07 08:23

    ADS1248采集溫度會出現(xiàn)噪音的干擾,為什么?

    我利用熱敏電阻(高精度線性)采集溫度,在常溫下,不斷地切換四路熱敏電阻,不會出現(xiàn)波動,在恒溫60度時,也不會出現(xiàn)異常波動,異常波動為溫度一下跳動大于0.1度,但是在持續(xù)加熱或常溫散熱時,溫度
    發(fā)表于 12-20 08:00

    采用多個ADS1299用菊花鏈的方式連接,用內(nèi)部測試信號進行測試,第二個芯片讀取時不知道為什么出現(xiàn)異常

    你好,我采用多個ADS1299用菊花鏈的方式連接,采用1299內(nèi)部測試信號進行測試,第一個芯片讀取時數(shù)據(jù)是對的,第二個芯片讀取時不知道為什么出現(xiàn)異常
    發(fā)表于 11-27 07:52

    ADS5294在test pattern mode時數(shù)據(jù)異常的原因?如何解決?

    的。過一段時間以后(時間長度不固定),例如本例到理論值是38時,在最后面補兩位“00”。后面的數(shù)據(jù)又能對齊了,即到39時又正確了。 在出現(xiàn)異常時是8通道同時出現(xiàn),同時恢復(fù)。 在test pattern
    發(fā)表于 11-22 06:10

    TLV320ADC3101-K加載配置時出現(xiàn)異常,導(dǎo)致電腦藍屏死機怎么解決?

    請教大牛一個問題, 第一次使用音頻ADC評估板(TLV320ADC3101-K),當(dāng)加載配置(”USB-AudioEVM0304_48KHZ”)時出現(xiàn)異常,導(dǎo)致電腦藍屏死機(Win10系統(tǒng)),之后只要把評估板連接電腦均導(dǎo)致電腦藍屏。
    發(fā)表于 10-18 08:03

    TPA3251調(diào)大輸入時,波形出現(xiàn)異常,是哪里出了問題?

    當(dāng)調(diào)大輸入時,波形出現(xiàn)異常,這可能是哪方面問題嗎?
    發(fā)表于 10-15 06:49

    使用TAS5755M PBTL模式驅(qū)動3歐、40W低音喇叭,輸出出現(xiàn)異常的原因有哪些?

    使用5755M PBTL模式驅(qū)動3歐、40W低音喇叭,輸出實際功率為32W@100Hz。 在此功率下工作時,5755M輸出出現(xiàn)異常,會使得OUTA&B對地電壓14V,OUTC&D對地電壓0.7V。出現(xiàn)此問題后,很快即損壞喇叭。 想請教,這樣的現(xiàn)象可能的原因
    發(fā)表于 10-09 08:04

    電動機出現(xiàn)異常噪聲怎么處理

    當(dāng)電動機發(fā)出異常噪聲時,首先需要檢查的是機械部件是否出現(xiàn)了問題。其中,軸承是最容易出現(xiàn)問題的部件之一。 軸承磨損或者損壞會導(dǎo)致電動機在運行過程中發(fā)出嗡嗡或者嘎吱嘎吱的聲音。這種聲音通常比較明顯,容易
    的頭像 發(fā)表于 09-14 17:19 ?957次閱讀

    如何解決交流接觸器出現(xiàn)異常抖動問題

    在工業(yè)控制系統(tǒng)中,交流接觸器穩(wěn)定性直接影響到整個系統(tǒng)的可靠性。針對交流接觸器出現(xiàn)異常抖動問題,采取有效的措施是至關(guān)重要的。本文將詳細探討如何應(yīng)對交流接觸器異常抖動的問題。 首先,從電源電壓的角度出發(fā)
    的頭像 發(fā)表于 09-11 10:52 ?1418次閱讀

    LMV321AIDBVR在板子上面不工作,出現(xiàn)異常不亮燈的情況,為什么?

    LMV321AIDBVR,在板子上面不工作,出現(xiàn)異常不亮燈的情況,重新更換了芯片,然后就正常工作了,請問這是什么情況呢?附件有視頻可提供參考,謝謝!
    發(fā)表于 08-13 07:02

    長時間發(fā)送344個字節(jié)的UDP報文,出現(xiàn)overflow the heap_size并導(dǎo)致系統(tǒng)異常重啟怎么解決?

    Jan8 2013,rst cause:2, boot mode:(3,0) 請問這個協(xié)議棧有問題??什么原因?qū)е逻@個問題??? 另外的現(xiàn)象,就是sendto的地方掛死。 之前在sendto地方加了一個select 判斷是否能夠發(fā)送報文,短一點的報文,不會出現(xiàn)異常或者掛死的現(xiàn)象。
    發(fā)表于 07-11 07:55
    主站蜘蛛池模板: 4hc44四虎www在线影院男同 | 色香欲亚洲天天综合网 | 天堂中文在线最新版地址 | 免费黄色网址网站 | 国产女主播在线播放一区二区 | 又色又污又爽又黄的网站 | 天天视频免费观看高清影视 | 放荡女同老师和女同学生 | 天天澡天天摸天天爽免费 | 久久精品国产精品亚洲人人 | 一级特黄a免费大片 | 四虎国产视频 | 最新黄色在线 | 国产亚洲第一伦理第一区 | 午夜三级毛片 | 黄色网址你懂的 | 在线视频亚洲 | 欧美伊人久久大香线蕉综合69 | 中文字幕亚洲一区二区v@在线 | 在线观看免费视频 | 四虎永久免费网站入口2020 | 亚洲无线码一区在线观看 | 日本欧美一区二区三区不卡视频 | 在线观看黄色x视频 | 四虎在线成人免费网站 | 亚洲午夜久久久精品影院视色 | 午夜黄| 午夜激情小视频 | 亚洲黄色高清视频 | 国产在线97色永久免费视频 | 日本xxxxx69 | 欧美精品xx | 欧美日韩一卡2卡三卡4卡新区 | 久久精品国产6699国产精 | 天天澡天天干 | 在线看av网址| 狠狠色噜噜狠狠狠狠888奇米 | 视频一区视频二区在线观看 | 欧美高清在线观看视频 | 婷婷五月天.com | 99精品偷自拍 |