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

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

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

3天內不再提示

分享兩個STM32應用中的實戰(zhàn)案例

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

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

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

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

案例1:

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

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

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

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

那是為什么呢?

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

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

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

案例 2:

芯片工作時偶發(fā)性出現死機現象

有人在做STM32芯片做產品開發(fā),會偶發(fā)性地出現芯片進入死機狀態(tài)的現象。

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

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

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

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

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

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

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

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

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

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

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

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

審核編輯:湯梓紅

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

    關注

    10

    文章

    1635

    瀏覽量

    148017
  • STM32
    +關注

    關注

    2270

    文章

    10900

    瀏覽量

    355985
  • 編程
    +關注

    關注

    88

    文章

    3615

    瀏覽量

    93732
  • 定時器
    +關注

    關注

    23

    文章

    3248

    瀏覽量

    114792

原文標題:又能聞花香了

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

收藏 人收藏

    評論

    相關推薦

    STM32移植而引發(fā)的兩個小疑問

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

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

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

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

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

    合并兩個排序的鏈表

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

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

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

    基于KEIL MDK環(huán)境調試STM32兩個誤會

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

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

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

    冷鏈運輸兩個重要環(huán)節(jié)

    冷鏈運輸兩個重要環(huán)節(jié)
    的頭像 發(fā)表于 01-28 17:13 ?1175次閱讀
    冷鏈運輸<b class='flag-5'>中</b>的<b class='flag-5'>兩個</b>重要環(huán)節(jié)

    兩個LED和兩個按鈕的使用

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

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

    Linux 如何比較兩個文件的差異?答案是使用 diff 命令。
    的頭像 發(fā)表于 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。
    的頭像 發(fā)表于 07-24 11:12 ?4762次閱讀

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

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

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

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

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

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

    arcgis如何關聯兩個屬性表

    在ArcGIS,關聯兩個屬性表是一重要的操作,可以通過此操作將兩個的數據關聯起來,以便進行分析和查詢。下面是詳細介紹如何在ArcGI
    的頭像 發(fā)表于 02-25 11:01 ?4235次閱讀
    主站蜘蛛池模板: 99热精品一区| 97久久综合九色综合| 久久免费99精品久久久久久| 菲菲国产在线观看| 国产天天射| 成人a视频| 四虎影院永久在线| 国产你懂| 爱综合网| 日本视频一区二区| 亚洲成人网在线观看| 黄色在线视频免费看| 久久天天丁香婷婷中文字幕| 乱高h亲女| 久久伊人色| 在线精品小视频| 超级乱淫片67194免费看| 色综合激情丁香七月色综合| 成人a级特黄毛片| 欧美宗合网| 色噜噜狠狠色综合久| 久久精品视频免费播放| 免费观看黄a一级视频| semimi亚洲综合在线观看| 色老头成人免费综合视频| 午夜小视频在线播放| 嗯好舒服好爽好快好大| 欧美成人三级伦在线观看| 欧美久久天天综合香蕉伊| 中文字幕天堂在线| 国产乱码一区二区三区四川人| 1000又爽又黄禁片| 高清一区二区| 国产综合精品久久亚洲| aaa在线| 亚洲最大色网| www色多多| 1024毛片基地| 日韩色爱| 一个色综合网站| 男女全黄做爰视频|