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

STM32 軟件復位并模擬USB拔插

發布者:幸福自由最新更新時間:2025-02-18 來源: cnblogs關鍵字:STM32  軟件復位 手機看文章 掃描二維碼
隨時隨地手機看文章

最近做了個USB跟上位機通信,需要軟件對MCU進行復位,復位后如果USB沒有拔插,PC就不會重新枚舉USB為了解決這個問題,我做了軟件復位跟,軟件模擬USB拔插。


1、軟件復位

這里我用的是HAL庫的軟件復位,復位前先把中斷關掉,再復位,在你需要復位的代碼處添加下面代碼即可,代碼如下:


__set_FAULTMASK(1); //關中斷

NVIC_SystemReset(); //復位   


2、模擬USB拔插

至于怎么實現模擬USB拔插,則只需要在USB初始化前把PA12進行一個拉低——延時——拉高的操作即可,一般PC機可以通過檢查USB的D+引腳來判斷USB是否有變化的,對于STM32的PA12就對應了這個引腳(我這里的USB的D+設定在這個腳上,所以就操作這個腳即可),所以可以通過模擬這個引腳電平變化實現模擬USB拔插操作。先模擬拔插,再進行USB初始化,這樣PC就可以重新枚舉USB了,代碼如下:


/** Configure pins as 

        * Analog 

        * Input 

        * Output

        * EVENT_OUT

        * EXTI

*/

 void MX_GPIO_Init(void)

{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */

  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */

  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);

  /*Configure GPIO pin : PA12 */

  GPIO_InitStruct.Pin = GPIO_PIN_12;

  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

  GPIO_InitStruct.Pull = GPIO_PULLDOWN;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

                        

  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, 

  GPIO_PIN_RESET);                                            

  HAL_Delay(65);

  //先把PA12拉低再拉高,利用D+模擬USB的拔插動作   

  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_SET);

  HAL_Delay(65);

}


注意:

模擬拔插放在USB初始化前,這樣就可以在每次復位后都模擬拔插,并可以讓PC重新枚舉USB了。


關鍵字:STM32  軟件復位 引用地址:STM32 軟件復位并模擬USB拔插

上一篇:STM32 Cubemx 配置定時器定時1mS
下一篇:STM32 HAL庫利用DMA實現串口不定長度接收方法

推薦閱讀最新更新時間:2025-04-01 23:58

STM32F205 HAL庫 RTC軟件復位后不準
在RTC初始化配置時,沒考慮到軟件復位的情況,當頻繁實現軟件系統復位時,發現RTC時間有偏差。原因在于每一次軟件復位后都會再次重新初始化RTC,中間便會產生時間差,頻繁復位偏差更明顯。 解決方法:通過RTC備份寄存器的判斷以重新初始化RTC,只有當系統斷電時備份寄存器才會清空,如系統選擇軟件復位則不需重新初始化RTC。 RTC_HandleTypeDef RtcHandle; #define RTC_ASYNCH_PREDIV 0x7F #define RTC_SYNCH_PREDIV 0x00FF #define RTC_BKP_VAULE 0x1A1B void bsp_rtc_init(void) { __H
[單片機]
LPC1114如何在程序中軟件復位
LPC1114軟件復位,在程序中,需要復位的地方,加上NVIC_SystemReset();這條語句即可。 NVIC_SystemReset()函數位于core_m0.h文件中,只要在頭文件中包含lpc11xx.h文件即可使用。 /** \brief System Reset The function initiates a system reset request to reset the MCU. */__STATIC_INLINE void NVIC_SystemReset(void) { __DSB(); SCB- AIRCR = ((0x5FA SCB_AIRCR_VECTKEY_Pos) | SCB_AIRCR_SY
[單片機]
LPC1114如何在程序中<font color='red'>軟件</font><font color='red'>復位</font>
STM32一文通(7) 系統定時器
直接看第五節就是定時函數. 下面的內容都是在介紹原理 3.0 版以后的 STM32 固件庫在標準外設庫中移除了 SysTick 的驅動,因此用戶必須調用 CMSIS 定義的函數。 CMSIS 只提供了一個 SysTick 設置的函數,替代了 STM32 原有 SysTick 驅動的全部函數。 SysTick_Config(uint32_t ticks); -SysTick 計時器是 24 位的,所以設置參數的時候不要超過 24 位的范圍。 一. 什么是系統定時器 SysTick SysTick:系統定時器,24位,只能遞減,存在于內核,嵌套在NVIC中,所有的Cortex-M內核的單片機都具有這個定時器。 系統嘀嗒校準
[單片機]
《嵌入式-STM32開發指南》第二部分 基礎篇 - 第4章 定時器(HAL庫)
4.1定時器的工作原理 STM32有三類定時器,基本定時器就是單純的定時計數器,通用定時器多了四個通道,相對應的增加了功能,高級定時器具有基本,通用定時器的所有的功能,并且添加了其他功能。定時器的對比特性如下表所示。 表1各個定時器特征 4.1.1基本定時器 TIM6和TIM7定時器的主要功能包括: ● 16位自動重裝載累加計數器 ● 16位可編程(可實時修改)預分頻器,用于對輸入的時鐘按系數為1~65536之間的任意數值分頻 ● 觸發DAC的同步電路 ● 在更新事件(計數器溢出)時產生中斷/DMA請求 總的說來,基本定時器 TIM6 和 TIM7 只具備最基本的定時功能,就是累加的時鐘脈沖數超過預定值時,能觸發中斷或觸發
[單片機]
STM32選型考量指標
項目中選擇的具體型號為M4。該芯片的特點:Cortex-M內核、低功耗、外設豐富。具體原因如下: 1. STM32的競爭優勢: 1)極高的性能,主流的Cortex內核 2)豐富合理的外設,合理的功耗,合理的價格 3)強大的軟件支持:豐富的軟件包 4)全面豐富的技術文檔 5)芯片型號鐘磊多,覆蓋面廣 6)強大的用戶基礎:最先成功試水CM4芯片的公司,積累了大量的用戶群體,為其領先做了鋪墊 2. STM32是新的基于ARM內核的32位MCU系列,標準的ARM架構。 3. 超前的體系結構: 1)高性能 2)低電壓 3)低功耗 4)創新的內核以及外設 4. 對于影響運算性能的因素考慮:
[單片機]
STM32電源框圖解析(VDD、VSS、VDDA、VSSA、VREF+、VREF-、VBAT等的區別)
STM32的工作電壓(VDD )為2.0~3.6V,通過內置的電壓調節器提供所需的1.8V電源,當主電源VDD 掉電后,通過VBAT 腳為實時時鐘(RTC)和備份寄存器提供電源(下圖為STM32F1**系列電源框架圖,STM32基本大同小異)。 1、名詞解析 可以看到上圖有VDD、VSS、VDDA、VSSA、VREF+等標識,這些是什么意思呢?有什么特點呢?如何看懂STM32系統的電源框架圖呢? 首先對名詞進行解析,如下所示: VCC電路的供電正電壓VDDD芯片的工作數字正電壓 GND電路的供電負電壓VSSD芯片的工作數字正電壓 VDD芯片的工作正電壓VREF+ADC基準參考正電壓 VSS芯片的工作負電壓VREF-ADC基
[單片機]
stm32 freertos 任務不能調度(啟動)可能原因
觀點 先說結論,給趕時間的朋友省點事: 檢查FreeRTOS的調度配置,是否正確配置成可搶占的 是不是某些任務回調函數退出的時候,沒有調用 vTaskDelete() 刪除任務 敘事 今天寫了個簡單的 基于stm32/cubeIDE 的freertos hello_world 例程。創建了2個簡單線程,但是發現居然不能調度,而且整個系統都被卡住。 一開始以為是搶占式調度配置沒有設好, 搶占式時間片調度(Prioritized Pre-emptive Scheduling with Time Slicing) 這是比較通用的調度方式,上一篇提到的溫度檢測系統采用的就是這種方式。內核調度器在每個時間片結束的時候執行一次,選擇
[單片機]
基于stm32的多功能時鐘4——超聲波測距
前兩章,主要講述了環境參量的測量獲取,想必大家都有些許收獲。在這一章中,小編將介紹如何利用超聲波來測距。在現實生活中,利用超聲波測距的應用很多,廣泛應用于機器人避障 、物體測距 、液位檢測 、公共安防、停車場檢測等領域。 1.模塊介紹 超聲波模塊 本次測距使用的超聲波為HC-SRO4,該模塊共有4個引腳,分別是兩個電源引腳VCC和GND,一個觸發控制信號輸入(TRIG)和一個回響信號輸出( ECHO),性能穩定,測度距離精確,模塊高精度,盲區小。 那么,超聲波模塊測距原理是:首先,給Trig引腳至少10us的高電平信號,檢測Echo是否有信號返回,若有信號返回,則Echo發出高電平。高電平持續的時間就
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 深水埗区| 白玉县| 若尔盖县| 怀来县| 潼南县| 和平区| 比如县| 临汾市| 五莲县| 绥滨县| 南安市| 长武县| 临汾市| 肇州县| 武城县| 岑巩县| 青铜峡市| 广昌县| 梁河县| 内丘县| 新蔡县| 富民县| 山东| 乌拉特后旗| 江孜县| 阿拉尔市| 集贤县| 扎鲁特旗| 平南县| 广宁县| 旺苍县| 罗江县| 巫山县| 汝南县| 化隆| 甘谷县| 安达市| 苍南县| 蒙城县| 缙云县| 库伦旗|