精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

分享兩個STM32應用中的實戰案例

茶話MCU ? 來源:茶話MCU ? 2023-01-11 09:13 ? 次閱讀

前不久,幾乎舉國上下在同一時間段內整齊劃一地被感染了新冠。

很多人感染后都不同程度地出現味覺、嗅覺失靈的情形。本人也有相同經歷。這幾天,味覺恢復,嗅覺也在慢慢恢復中。既能聞到誘人的煎餅香,也能聞到清新的花香了。

今天在此分享兩個STM32應用中的實戰案例,權作提醒,以免重蹈覆轍。

案例1:

系統聯機工作時,Flash編程偶發性失敗

有人使用STM32F4系列芯片做開發,代碼里涉及到FLASH編程。他發現FLASH編程過程中時不時地出現編程錯誤,即提示HAL_FLASH_ERROR_PGP錯誤。

他的產品系統有用到CAN通信。當他不將芯片做系統聯機工作時不會發生該錯誤,只有在做整體聯機測試時才可能發生編程異常。

起初,客戶使用4字節編程模式,平常單獨就flash編程功能測試也正常,整體聯機運行時才可能出問題。后來,無意中嘗試將FLASH單次編程寬度調整為1個字節后則異常消失。

那是為什么呢?

09eb3f0c-9135-11ed-bfe3-dac502259ad0.png

其實,在做FLASH編程時,選擇不同的編程寬度所需的芯片供電電壓是不一樣的。上面截圖來自STM32F4系列參考手冊。從圖中不難看出,選擇的編程寬度越寬,芯片所需供電電壓越高。

若不運行其它功能,只是單獨就芯片做flash編程,功耗需求相對較小、電源波動也小。當聯機工作時,系統功耗、串擾都有所增大,電源波動也可能加劇,這時很可能出現電源難以保證支持4字節編程方式的穩定需求。由于單字節編程模式所需電源電壓相對較低,在系統聯機工作時,相同的電源條件下,即使電源有所波動,但完全可能依舊能提供滿足單字節編程的穩定電壓需求,因而不會出現因供電問題導致的編程異常。

案例 2:

芯片工作時偶發性出現死機現象

有人在做STM32芯片做產品開發,會偶發性地出現芯片進入死機狀態的現象。

代碼里有做FLASH編程操作,有UART的收發動作及相關中斷,另外還開啟了某定時器更新中斷。經過測試發現,如果關閉定時器中斷,FLASH編程、UART收發動作保持的情況下,則不會出現死機的現象。可是定時器中斷怎么會導致芯片死機呢?感覺沒有找到根本原因。后來,進一步跟蹤調試發現,芯片出現死機,實際上是程序不停地進入UART接收中斷。

用戶代碼里的確使能了UART收發中斷,但在中斷代碼里程序實實在在有對接收非空標志【RXNE】做清零處理,不應該沒完沒了地進接收中斷?。〗涍M一步確認,發生死機現象時總是對應著UART接收溢出事件【ORE】。哦,如果這樣,當UART接收發生溢出時的確也會產生接收非空中斷。下圖為STM32USART的各個中斷請求事件及中斷使能控制位。從下圖可以看出,當使能RXNEIE時,RXNE和ORE事件都可產生接收中斷。

09fab90a-9135-11ed-bfe3-dac502259ad0.png

用戶雖然在UART接收中斷里有對RXNE標志清零,但當發生溢出事件而進入中斷時,他并沒有對ORE標志做檢測及相應的清零操作。

0a0b927a-9135-11ed-bfe3-dac502259ad0.png

實際上,用戶根本就沒有意識到發生ORE事件時也可以產生接收中斷,在其代碼里根本沒有對ORE標志進行檢測,更沒有對ORE標志做清零,導致UART接收中斷沒完沒了的進入,感覺芯片猶如死機一般。

為什么關閉定時器中斷能防止死機現象發生呢? 我們知道,UART接收產生溢出是因為數據接收到后不能及時取走才產生的,而定時器中斷的存在,因為中斷競爭的原因導致了UART接收中斷的及時性受到影響,進而容易發生溢出。如果關閉定時器中斷或或將UART接收中斷的優先級配置成可以搶占定時器中斷就可以避免UART接收不及時的問題,也就不會發生溢出。這樣的話,即使用戶的UART接收中斷里沒有對ORE事件的處理也無所謂。

當然,我們做UART的中斷接收時,中斷代碼里最好加上對ORE事件的檢測處理,當發生溢出事件時,及時對ORE事件標志清零。否則,萬一發生溢出,就可能因ORE事件而發生沒完沒了進中斷的問題,進而導致功能異常。

具體到本案例,再順便提醒一點,除非片內FLASH采用雙BANK結構,FLASH編程也是會影響中斷響應的。即該操作也可能讓UART的接收中斷的響應因臨時堵塞而發生接收溢出。

好,今天的分享到此打住。也愿這里的分享能給有需要的人帶來一些幫助。

目前尚是冬季,大家注意防寒保暖并保證休息,以利新冠康復。如有咳嗽,除了使用適當藥劑外,盡量避免說話,尤其是高聲說話。

待到山花爛漫、綠柳如煙時,魑魅魍魎盡遁去。九州華夏重抖擻,東方旭日耀寰宇。~~~~~~一起加油!~~~~~

審核編輯:湯梓紅

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

    關注

    10

    文章

    1621

    瀏覽量

    147745
  • STM32
    +關注

    關注

    2266

    文章

    10871

    瀏覽量

    354786
  • 編程
    +關注

    關注

    88

    文章

    3591

    瀏覽量

    93592
  • 定時器
    +關注

    關注

    23

    文章

    3237

    瀏覽量

    114464

原文標題:又能聞花香了

文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    STM32移植而引發的兩個小疑問

    STM32用戶將基于STM32F0芯片的代碼移植到STM32F4系列時遇到了些麻煩。其中有問題跟中斷處理有關。有個中斷服務程序代碼在STM32
    的頭像 發表于 11-18 14:12 ?1100次閱讀
    因<b class='flag-5'>STM32</b>移植而引發的<b class='flag-5'>兩個</b>小疑問

    如何在兩個程序交換變量值?

    的扇區 0 上運行。)作為參考,我使用 STM32CubeIDE 1.3.0 作為編譯工具。以前用IAR的時候,程序兩個變量放在noinit區的同一地址,把編譯工具改成
    發表于 02-08 08:38

    Obtain_Studio自帶兩個STM32_GUI實例使用說明

    Obtain_Studio自帶兩個STM32_GUI實例使用說明
    發表于 07-15 16:03 ?25次下載

    合并兩個排序的鏈表

    結點; 2、依次比較兩個鏈表節點的大小,將一鏈表合并到另一鏈表; 3、合并完之后,剩余部分合并到新鏈表最后; 我的代碼 /*struct ListNode {int val;st
    發表于 01-16 22:02 ?576次閱讀

    新建STM32工程全局聲明兩個宏的原因

    在uVision中新建STM32工程后,需要從STM32標準庫拷貝標準外設驅動到自己的工程目錄,此時需要在工程設置->C/C++選項卡下的Define文本框中鍵入這
    發表于 08-10 10:25 ?1943次閱讀

    基于KEIL MDK環境調試STM32兩個誤會

    曾有兩個不同的STM32用戶反饋了相似的問題,他們在對STM32F7Cube庫里的工程例程進行編譯時,發現了一令人很不解的事。編譯的結果提示芯片內的RAM幾乎都耗光了。
    發表于 02-08 16:06 ?0次下載
    基于KEIL MDK環境調試<b class='flag-5'>STM32</b>的<b class='flag-5'>兩個</b>誤會

    Linux如何比較兩個文件的差異?

    Linux 如何比較兩個文件的差異?答案是使用 diff 命令。
    的頭像 發表于 01-17 17:30 ?5168次閱讀
    Linux<b class='flag-5'>中</b>如何比較<b class='flag-5'>兩個</b>文件的差異?

    冷鏈運輸兩個重要環節

    冷鏈運輸兩個重要環節
    的頭像 發表于 01-28 17:13 ?1128次閱讀
    冷鏈運輸<b class='flag-5'>中</b>的<b class='flag-5'>兩個</b>重要環節

    兩個LED和兩個按鈕的使用

    電子發燒友網站提供《兩個LED和兩個按鈕的使用.zip》資料免費下載
    發表于 01-30 16:04 ?1次下載
    <b class='flag-5'>兩個</b>LED和<b class='flag-5'>兩個</b>按鈕的使用

    Linux如何比較兩個文件的差異?

    Linux 如何比較兩個文件的差異?答案是使用 diff 命令。
    的頭像 發表于 01-30 16:04 ?1.2w次閱讀
    Linux<b class='flag-5'>中</b>如何比較<b class='flag-5'>兩個</b>文件的差異?

    STM32F1兩個USB中斷入口詳解

    STM32斷入口有兩個,分別是USB_HP_CAN1_TX_IRQHandler和USB_LP_CAN1_RX0_IRQHandler。
    的頭像 發表于 07-24 11:12 ?4537次閱讀

    stm32單片機如何實現一按鍵切換兩個程序?

    stm32單片機如何實現一按鍵切換兩個程序? 作為一款功能強大的微控制器,STM32單片機可以支持多種應用場景,其中一實用的功能是按鍵切
    的頭像 發表于 09-14 14:22 ?5957次閱讀

    電子設計兩個不同概念:pcb與pcb封裝

    電子設計兩個不同概念:pcb與pcb封裝
    的頭像 發表于 12-11 15:49 ?818次閱讀

    stm32定時器能同時控制兩個燈以不同頻率閃爍嗎?

    STM32的定時器功能強大,**STM32的定時器可以同時控制兩個燈以不同頻率閃爍** 。
    的頭像 發表于 12-13 10:43 ?1994次閱讀

    arcgis如何關聯兩個屬性表

    在ArcGIS,關聯兩個屬性表是一重要的操作,可以通過此操作將兩個的數據關聯起來,以便進行分析和查詢。下面是詳細介紹如何在ArcGI
    的頭像 發表于 02-25 11:01 ?3998次閱讀