娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

GD32 MCU碰到IIC總線卡死怎么辦?

發布者:Huanle最新更新時間:2024-11-07 來源: elecfans關鍵字:GD32  MCU  IIC總線 手機看文章 掃描二維碼
隨時隨地手機看文章

大家在使用MCU IIC通信時,若碰到設備復位或者總線干擾等情況,可能會導致IIC總線卡死,表現上總線上SDA或者SCL其中一根線為低電平,IIC總線一直處于busy狀態。此時若代碼上一直等待總線空閑,則可能導致軟件死機,為解決該問題,本視頻提供了軟件配置釋放IIC總線的方法。


首先為大家介紹發生IIC總線卡死的兩種情況:(1)主機在發送 START 信號后, 控制 SCL 產生 8 個時鐘脈沖,然后拉低 SCL 信號為低電平,在這個時候,從設備輸出應答信號,將 SDA 信號拉為低電平。如果這個時候主機異常復位, SCL 就會被釋放為高電平。此時,如果從機沒有復位,就會繼續 I2C 的應答,將 SDA一直拉為低電平,直到 SCL 變為低電平,才會結束應答信號。 而由于 I2C 主機復位后檢測總線的狀態,如果 SDA 信號為低電平,則 I2C 總線被占用,會一直等待 SCL 和 SDA信號變為高電平,因此,在 I2C 主機等待從機釋放 SDA 信號時, I2C 從機又在等待主機將 SCL 信號拉低以釋放應答信號,兩者相互等待, I2C 總線進入死鎖狀態 ;(2)主機在發送 START 信號后, 控制 SCL 產生 8 個時鐘脈沖,然后拉低 SCL 信號為低電平,在這個時候,從設備輸出應答信號,將 SDA 信號拉為低電平。如果這個時候主機異常復位, SCL 就會被釋放為高電平。此時,如果從機沒有復位,就會繼續 I2C 的應答,將 SDA一直拉為低電平,直到 SCL 變為低電平,才會結束應答信號。 而由于 I2C 主機復位后檢測總線的狀態,如果 SDA 信號為低電平,則 I2C 總線被占用,會一直等待 SCL 和 SDA信號變為高電平。因此,在 I2C 主機等待從機釋放 SDA 信號時, I2C 從機又在等待主機將 SCL 信號拉低以釋放應答信號,兩者相互等待, I2C 總線進入死鎖狀態 。

wKgZomXZShGAD0AVAAC3zH17MmY045.png


以下為兩種復位IIC總線卡死的軟件方法,大家可以嘗試使用:

(1)將SDA和SCL配置為推挽輸出,強制輸出stop信號

在 I2C 主機復位后,主機檢測 I2C 總線一直為 BUSY 狀態,且超過設定的時間,則總線被鎖死。可通過將 I2C 的 SCL 和 SDA 引腳初始化成普通 GPIO 功能,配置成推挽輸出。 先拉高SCL 信號,在拉高 SDA 信號,模擬產生一個 STOP 信號,然后再配置為 I2C 的引腳復用功能。配置代碼如下所示。

/*! brief reset i2c bus param[in] none param[out] none retval none */ void i2c_bus_reset() { GPIO_BC(GPIOB) |= GPIO_PIN_6 | GPIO_PIN_7; gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6|GPIO_PIN_7); __nop(); __nop(); __nop(); __nop(); __nop(); GPIO_BOP(GPIOB) |= GPIO_PIN_6; __nop(); __nop(); __nop(); __nop(); __nop(); GPIO_BOP(GPIOB) |= GPIO_PIN_7; gpio_init(GPIOB, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_6 | GPIO_PIN_7); } /*! brief check the I2C is or not busy param[in] none param[out] none retval none */ void check_bus_status(void) { while(i2c_flag_get(I2C0,I2C_FLAG_I2CBSY)) { if(--time_out == 0){ i2c_bus_reset(); } } }

wKgaomXZShiAbcOxAACtlqGCdfA351.png


(2)將SCL配置為推挽輸出,強制輸出9個clk

在 I2C 主機中增加 I2C 總線恢復程序。每次 I2C 主設備復位后,如果檢測到 SDA 數據線被拉低,則控制 I2C 中的 SCL 時鐘線產生 9 個時鐘脈沖(針對 8 位數據的情況),這樣 I2C 從設備就可以完成被掛起的操作,從死鎖狀態中恢復過來。

I2C 主機通過將 SCL 引腳初始化為普通 GPIO 功能,配置成推挽輸出。保證連續發送 9 個時鐘脈沖,為保證后續 I2C 正常通信,先將 I2C 模塊復位,再置位,最后再配置為 I2C 的引腳復用功能。配置代碼如下所示。

/*! brief reset i2c bus param[in] none param[out] none retval none */ void i2c_bus_reset() { uint8_t I = 0; gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6); /* SCL output clock signal */ for(I = 0; I < 10; i++){ gpio_bit_reset(GPIOB, GPIO_PIN_6); delay_1us(2); gpio_bit_set(GPIOB, GPIO_PIN_6); delay_1us(2); } /* reset I2C */ i2c_software_reset_config(I2C0, I2C_SRESET_RESET); i2c_software_reset_config(I2C0, I2C_SRESET_SET); gpio_init(GPIOB, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_6 | GPIO_PIN_7); } /*! brief check the I2C is or not busy param[in] none param[out] none retval none */ void check_bus_status(void) { while(i2c_flag_get(I2C0,I2C_FLAG_I2CBSY)) { if(--time_out == 0){ i2c_bus_reset(); } } }

wKgaomXZSh6AfaDhAADGMKXklJo287.png

關鍵字:GD32  MCU  IIC總線 引用地址:GD32 MCU碰到IIC總線卡死怎么辦?

上一篇:GD32 FATFS+FTL Nand解決方案
下一篇:基于GD32驅動BLDC電機(1)定時器和PWM

推薦閱讀最新更新時間:2025-03-31 17:34

什么是GD32 MCU讀保護?
如今電子產品市場風云變幻,暗流洶涌,有沒有小伙伴遇到自己費了大力氣寫出來的代碼,很容易就被別人“借鑒”了,真的是讓聞者傷心,聽著落淚啊。 那有沒有什么方法可以防止別人將你的代碼從MCU讀出來呢?答案當然是肯定的,GD32 MCU全系列都有“讀保護”功能,我們以GD32F30x系列為例,來看下用戶手冊中的選項字節的介紹: 我們可以看到,地址0x1fff f800存儲的是安全保護值,也就是我們所說的讀保護。當該值為0xA5的時候,MCU處于無保護狀態,此時可以通過Jlink、GDlink配合一些上位機比如Jflash、GDlink Programmer就可以讀出,當然,通過串口ISP也可以讀出代碼;當讀保護值為非0xA5時,
[單片機]
什么是<font color='red'>GD32</font> <font color='red'>MCU</font>讀保護?
GD32開發實戰指南(基礎篇) 第9章 呼吸燈
開發環境: MDK:Keil 5.30 開發板:GD32F207I-EVAL MCU:GD32F207IK 1 呼吸燈的工作原理 呼吸燈,就是指燈光設備的亮度隨著時間由暗到亮逐漸增強,再由亮到暗逐漸衰減,很有節奏感地一起一伏,就像是在呼吸一樣,因而被廣泛應用于手機、電腦等電子設備的指示燈中。 要使用數字器件控制燈光的強弱,我們很自然就想到 PWM(脈沖寬度調制)技術。假如以LED 作為燈光設備,且由控制器輸出的 PWM 信號可以直接驅動 LED,PWM 信號中的低電平可點亮 LED 燈。當 LED 以較高的頻率進行開關(亮滅)切換時,由于視覺暫留效應,人眼是看不到 LED 燈的閃爍現象的,反映到人眼中能感覺到的
[單片機]
如何調試GD32虛擬串口的兩個BUG?
最近魚鷹在搞調試器,折騰了好多天終于理解了 MDK 、下載算法、調試器、MCU 之間的關系。 簡單來說,就是,調試器作為 USB 轉 SWD 協議的轉換工具,MDK 通過 USB 驅動這個工具,下載算法包含了一些 MCU 內部 FLASH 擦除、編程代碼,和普通代碼不同的是,該代碼可以下載在任意位置運行。如果需要校驗,還會加入 CRC 校驗代碼,扇區檢測代碼。 MDK 首先通過調試器將算法寫入內部 RAM,然后把需要寫入的固件程序寫入 RAM,再由 MDK 控制(通過調試器) MCU 執行相應代碼(擦除或寫入扇區),通過 MCU 的寄存器和設定軟件斷點得到執行結果,如此來回搬運,就可完成固件下載。 說起來簡單,做起來很麻煩
[單片機]
如何調試<font color='red'>GD32</font>虛擬串口的兩個BUG?
GD32對Timer定時器原理的詳細講解
GD32 Timr定時器看起來比較復雜啊。一看GD32E10x 的SPEC:一個高級定時器,三個通用定時器,還有一個基本定時器。 項目上想用來做分時處理程序都不知道用哪個? 就用通用的定時器 timer1 一起看下時鐘樹,如下圖所示: GD32時鐘樹部分硬件展示 TIMER1的時鐘是CK_TIMER1,要提供CK_TIMER1需要TIMER1 enable并且需要提供具體的時鐘 具體的時鐘 if(APB1 prescale = 1 ) x 1 else x 2 我們的CK_SYS時鐘(系統時鐘)經過Prescaler之后最大頻率是CK_AHB(120MHz) 然后經過預分頻,APB1頻率最大到60MHz,如果預分頻系數是1的
[單片機]
<font color='red'>GD32</font>對Timer定時器原理的詳細講解
LT8228和LTC7871雙向降壓/升壓微控制器在48V/12V雙電池系統電動汽車中的應用
在節能減排等需求的推動下,電動汽車近年來得到了前所未有的關注度,這種在數年前還頗顯「另類」的產品,如今已是遍地開花,電池及其控制技術也隨著越來越嚴格的排放法規而不斷發展。與此同時,數字化、智能化的浪潮也已經開始席卷汽車工業,自主駕駛、汽車互聯等技術得到了長足進步,連接到汽車電氣系統的應用也在持續增加,產生了更高的電力需求,畢竟諸如雷達、LiDAR、傳感器、攝像頭和計算機等組件都需要供電。不僅如此,諸如油泵、水泵、動力轉向系統、傳動系統組件等,都將逐漸從機械驅動轉換為電力驅動。這些加在一起,使得傳統的12V汽車電氣系統越來越難以適應當下的現狀,改變已經勢在必行。 于是,48V/12V雙電池系統便在這樣的背景下走進了人們的視野。一般而
[嵌入式]
單片機stm32零基礎入門之--初識STM32 標準庫
  CMSIS 標準及庫層次關系   因為基于Cortex 系列芯片采用的內核都是相同的,區別主要為核外的片上外設的差異,這些差異卻導致軟件在同內核,不同外設的芯片上移植困難。為了解決不同的芯片廠商生產的Cortex 微控制器軟件 的兼容性問題,ARM 與芯片廠商建立了CMSIS 標準(CortexMicroController Software Interface Standard)。   所謂CMSIS 標準,實際是新建了一個軟件抽象層。   CMSIS 標準中最主要的為CMSIS 核心層,它包括了:   內核函數層:其中包含用于訪問內核寄存器的名稱、地址定義,主要由ARM 公司提供。   設備外設訪問層:提供了片上的核
[單片機]
極海APM32A407車規級MCU倒車雷達記錄儀應用方案
倒車雷達,全稱叫倒車防撞雷達,是汽車停泊車時的安全輔助裝置。通過雷達探頭發射的超聲波測算不在視線范圍內的障礙物距離,倒車雷達隨后根據所測距離以聲音或者顯示告知司機周圍障礙物,幫助司機判斷車后情況,輕松控制停車方位。 在汽車新四化趨勢下,用戶對倒車雷達系統也提出了更多智能化需求,倒車雷達記錄儀就是傳統系統的一次升級:一邊停泊車,一邊記錄分析停泊車過程。 倒車雷達記錄儀 倒車雷達記錄儀一般由主控芯片、倒車雷達傳感器、超聲波發射/接收電路、報警電路、顯示電路等部分組成。極海推出的倒車雷達記錄儀應用方案,基于高性能、低功耗、高可靠的APM32A407系列車規級MCU設計,結合超聲波測距可實現豐富、強大且方便實用的倒車雷達記錄功能。
[嵌入式]
極海APM32A407車規級<font color='red'>MCU</font>倒車雷達記錄儀應用方案
高端多核域控32Bit 車規級MCU丨云途半導體確認申報2024金輯獎
申請技術丨高端多核域控32Bit 車規級MCU 申報領域丨車規級芯片 獨特優勢: 1)YTM32B1HA0x是云途YTM32B1H系列芯片的首顆芯片,是一顆車規高端域控制器多核微控制器芯片,從2023年8月發布以來,已經實現幾十個項目定點,多家主機廠的平臺化開發項目。 2)2024年5月21日,YTM32B1HA0x 獲得ISO 26262 功能安全ASIL-D產品認證,是國內首顆獲得ASIL-D產品認證的高端域控MCU芯片。 3)2024年6月,YTM32B1HA0x 獲得AEC-Q100認證,標志著此顆芯片正式進入量產階段。 應用場景: 云途YTM32B1H系列是32Bit多核
[汽車電子]
高端多核域控32Bit 車規級<font color='red'>MCU</font>丨云途半導體確認申報2024金輯獎
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 沽源县| 龙州县| 招远市| 襄汾县| 襄樊市| 宣威市| 武冈市| 漳浦县| 青浦区| 将乐县| 吴江市| 巴彦淖尔市| 玉门市| 祁阳县| 营山县| 梁山县| 镇远县| 榆树市| 泰兴市| 怀柔区| 马边| 惠来县| 鞍山市| 桃江县| 呼图壁县| 克什克腾旗| 夹江县| 河北省| 昆山市| 庄河市| 高碑店市| 丰顺县| 古蔺县| 崇阳县| 九龙坡区| 呼图壁县| 崇明县| 武强县| 溧阳市| 昌平区| 萨嘎县|