主要思路:
文件从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数据交换。