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

2021-08-02 11:40:19 字數 1004 閱讀 4793

主要思路:

檔案從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(); 主要是對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資料交換。 

STM32F10x系列 中斷

概念問題 中斷與事件有什麼聯絡與區別?stm32之中斷與事件 中斷與事件的區別 簡單概括下。中斷 cpu單執行緒情況下只能處理單一任務,在有零時任務需要處理時,可以暫時放下當前任務,優先處理零時任務,再回過來處理之前的任務。多個中斷可以進行巢狀,比如產生了多個零時任務,那麼就可以按照優先順序處理這多...

STM32F10X入門 流水燈

2019 3 16 2019 3 19 core cm32.c stdin.h中定義了字元型 stm32f10x.h stm32f10x conf.h中定義了引用的外設標頭檔案 庫檔案之間的依賴呼叫關係 pngstm32f10x.h檢視位址對映 比如define gpioa base apb2per...

STM32F10X 位帶操作

在stm32微控制器的學習中,有乙個最大的特點就是你所編寫的stm32的程式操作,基本上都是匯流排的操作,比如gpiob odr 0x0001 或者直接等於1 這樣的操作必須要考慮整個暫存器的資料,但其實如果學過51微控制器的人都知道,我們除了對於匯流排操作外,我們還是經常會對單獨的位進行操作,比如...