1. 程式人生 > >基於stm32f10x微控制器USB流程理解

基於stm32f10x微控制器USB流程理解

主要思路:

檔案從main.c檔案到main()函式開始:

主要重點是,開啟中斷:

USB_Interrupts_Config();

STM32不像C51微控制器那樣可以用過interrupt關鍵字來定義中斷響應函式,STM32的中斷響應函式介面存在中斷向量表中。

其格式如下:

在檔案hw_config.c裡:

/* Enable the USB interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

在stm32f10x_it.c給予響應:

void USB_LP_CAN1_RX0_IRQHandler(void)    //USB_LP_CAN1_RX0_IRQHandler 在這吃大虧啦,啟動程式碼裡面帶1,這個不帶,
{
    USB_Istr();    //USB_LP_CAN1_RX0_IRQn   //USB_Istr
}

USB_Istr(); 主要是對IMR_MSK 進行響應,其定義如下:

#define IMR_MSK (CNTR_CTRM  | CNTR_WKUPM | CNTR_SUSPM | CNTR_ERRM  | CNTR_SOFM \
                 | CNTR_ESOFM | CNTR_RESETM )

我們關注的其實就是CTR(控制)函數了:

CTR_LP();

其主要會呼叫兩個函式:

void EP1_OUT_Callback(void);

void EP2_IN_Callback(void);

關於微控制器主要的流程是USB_Istr中斷的呼叫,利用中斷與主機HOST資料交換。