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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

STM32各個系列時鐘調高時出現異常案例

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

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

{

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

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);

//設置 PLL 時鐘源及倍頻系數

RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);

。。。。。。

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

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

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

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

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

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

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

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

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

上面大致介紹了指令預取功能,預取主要是為了實現指令讀取和執行的高效性。具體細節請參考STM32和ARM cortex內核的相關技術手冊

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

FLASH_SetLatency(FLASH_Latency_n);

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

下面是STM32F4系列部分產品線的LATENCY設置的表格。從表格中可以看出LATENCY參數的設置與CPU的時鐘、電源電壓都有關系。另外,當電源電壓在2.1V以下時要關閉預取。

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

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

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

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

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


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5087

    文章

    19153

    瀏覽量

    306394
  • STM32
    +關注

    關注

    2270

    文章

    10915

    瀏覽量

    356737

原文標題:時鐘調高時出現異常的案例分享

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

收藏 人收藏

    評論

    相關推薦

    使用stm32的spi讀取ads1256數據,ads1256正常輸出數據一段時間后總會出現異常默認設置,為什么?

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

    TLV320ADC3101-K加載配置時出現異常,導致電腦藍屏死機怎么解決?

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

    TPA3251調大輸入時,波形出現異常,是哪里出了問題?

    當調大輸入時,波形出現異常,這可能是哪方面問題嗎?
    發表于 10-15 06:49

    電動機出現異常噪聲怎么處理

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

    如何解決交流接觸器出現異常抖動問題

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

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

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

    雙線磁環共模電感測試中出現異常的原因分析

    電子發燒友網站提供《雙線磁環共模電感測試中出現異常的原因分析.docx》資料免費下載
    發表于 06-03 14:50 ?0次下載

    在FreeRTOS中串口重定向使用HAL庫函數中斷出現異常的原因?

    HAL_UART_Transmit_IT。但結果反而是IT函數出現異常。 而HAL_UART_Transmit正常輸出 有人遇到過此類情況嗎? 不吝賜教。
    發表于 05-22 08:18

    為什么STM32L052打開比較器,功耗出現異常

    通過MX設置,COMP1沒打開時,電流3.84,打開COMP1后,電流為11.56,功耗出現異常 輸入端加上拉電阻,也沒什么用?
    發表于 05-11 06:48

    使用STM32F205模擬USB鍵盤,USBD_HID_SendReport發送鍵盤模擬值時出現異常怎么解決?

    使用STM32F205模擬USB鍵盤,使用USBD_HID_SendReport發送鍵盤模擬值時出現異常。 USBD_HID_SendReport( hUsbDeviceFS,Keybd1
    發表于 04-26 07:17

    電機轉速調高出現over current問題怎么解決?

    請教網友: 電機低轉速運行正常,但是當轉速調高出現over current問題?可能是什么原因呢? 示波器是uvw的控制pwm輸出。調試了好多參數組合都不能滿足提高轉速的目的。請教各位前輩,謝謝!
    發表于 04-24 06:05

    利用Motor Profiler測試電機參數時,老是出現異常的原因?

    大家好,我在利用Motor Profiler測試電機參數時,老是出現異常
    發表于 04-03 06:08

    STM32F407ZG MCU控制器偶爾會出現異常復位,為什么?

    我這邊用了STM32F407ZG MCU, 發現控制器偶爾會出現異常復位。 程序使用了獨立看門狗,沒有使用窗口看門狗。通過監控RCC->CSR, 發現異常復位時以下位置1: .位29
    發表于 04-01 07:13

    STM32定時器DMA輸出單通道和雙通道輸出切換出現異常的原因?

    STM32定時器DMA輸出單通道和雙通道輸出切換出現異常
    發表于 03-26 06:44

    發光二極管封裝膠可能出現異常情況

    發光二極管封裝膠是可能出現異常 因高可靠性與一致的顯色性,LED技術成為了當今照明領域中的主流技術,但高可靠性并不意味著發光二極管不會損壞,在實際應用中LED燈珠還是會出現變色問題。本文針對以下兩點講解了發光二極管在封裝
    的頭像 發表于 02-21 10:32 ?508次閱讀
    主站蜘蛛池模板: 国产三级日本三级日产三级66| 一级毛片一级黄片| 欧美一区二区三区影院| 嫩草网| 国产美女流出白浆在线观看| 四虎影院海外永久| 五月激情片| 日韩污| 免费香蕉视频国产在线看| 久久青青草原精品老司机| 天堂影院在线| 精品一区二区三区在线视频| 欧美综合网站| 黄色网址中文字幕| 国产美女一级高清免费观看| 男人操女人的网站| va国产| 欧美老汉色| 成人窝窝午夜看片| 黄a免费| 欧美一区二区三区激情啪啪| 一区二区视频网| 18满xo影院视频免费体验区| 午夜欧美性视频在线播放| 国产午夜精品片一区二区三区| 啪啪亚洲| 黄网站色视频免费观看| 性欧美成人免费观看视| 又污又黄的网站| 色久优优 欧美色久优优| 老色皮永久免费网站| 久久这里只有精品免费视频| 成人在线色视频| 操你啦在线播放| 色天天综合色天天看| 性欧美高清极品猛交| 嘿嘿嘿视频在线观看| 四虎影视在线观看| 黄 色 片成 人免费观看| 天天干小说| 去毛片|