STM32 USB部分中斷函式簡要分析

2021-07-22 04:05:58 字數 862 閱讀 5446

void usb_lp_can1_rx0_irqhandler(void)

可見usb_istr()是處理usb_lp_can1_rx0_irqhandler中斷的,而這個中斷管理的是控制傳輸、中斷傳輸、批量傳輸(單緩衝區)。

下面對此函式中關鍵部分進行分析

wistr = _getistr();這句說白了就是獲取istr暫存器的值,從usb_regs.h中這個巨集定義#define _getistr() 

((uint16_t) *istr)中便知

#define imr_msk (cntr_ctrm  | cntr_wkupm | cntr_suspm | cntr_errm  | cntr_sofm \

| cntr_esofm | cntr_resetm )這個巨集定義就是宣告下這些位的集合,估計要跟什麼&下

istr_ctr是暫存器usb_istr中的ctr位,表明端點一次正確的傳輸

winterrupt_mask這個可能是表示允許cntr中的哪些位中斷

if (wistr & istr_ctr & winterrupt_mask)那麼這句話就容易理解了,就是說某位中斷了並且是正確的傳輸,意思是我們可以來處理了

istr_ep_id是端點號

ctr_lp()這個函式是真正的中斷服務函式,大致上的結構是這樣的

epindex = (uint8_t)(wistr & istr_ep_id);這句是讀取端點號,下面分端點是否為0展開

if (epindex == 0)

else

else if ((wepval & ep_ctr_rx) != 0)  }

}else 

if ((wepval & ep_ctr_tx) != 0)

}

STM32 USB學習筆記

stm32 usb學習筆記 一 usb fs device firmware library 使用韌體庫開發程式,需要包含幾個檔案 從圖中可見,應用程式介面部分,有 usb pwr,usb conf,usb desc,usb istr,usb prop,usb endp六個檔案,在裝置驅動中有六個檔...

STM32 USB設計 硬體篇

stm32晶元內部整合了usb外設,大大減輕了usb電路的設計負擔,只需設計usb介面電路,就可以實現基於stm32晶元的電路板的usb通訊設計。本文將具體講述基於stm32f103rbt6晶元的usb設計 本文為硬體篇。首先,我們來認識一下stm32f103rbt6晶元。其中usb相關引腳為pa1...

STM32 USB學習整理3

這個檔案主要和 vcp 驅動有直接關係!很多部分都是空的內容,其中包含了一些引數的設定,需要注意的是 波特率的大小與usb速度沒有關係,波特率的設定會影響串列埠速度 usb虛擬串列埠相關配置引數 line coding linecoding u8 usart printf buffer usb us...