基於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資料交換。