📄 stm32f10x_usb.c
字号:
#include"stm32f10x_rcc.h"
#include"stm32f10x_nvic.h"
//-----------------------------------------------------------------------------
#include"stm32f10x_usb.h"
//-----------------------------------------------------------------------------
void USB_Configuration(void)
{
NVIC_SETENA0|=EN_USB_LP;
RCC_APB1ENR_BITS[USB_EN]=1; //相应时钟使能
}
//-----------------------------------------------------------------------------
#define EP_TX_DIS (0x0000) /* EndPoint TX DISabled */
#define EP_TX_STALL (0x0010) /* EndPoint TX STALLed */
#define EP_TX_NAK (0x0020) /* EndPoint TX NAKed */
#define EP_TX_VALID (0x0030) /* EndPoint TX VALID */
#define EPTXMASK (0x8FBF)
//-----------------------------------------------------------------------------
#define EP_RX_DIS (0x0000) /* EndPoint RX DISabled */
#define EP_RX_STALL (0x1000) /* EndPoint RX STALLed */
#define EP_RX_NAK (0x2000) /* EndPoint RX NAKed */
#define EP_RX_VALID (0x3000) /* EndPoint RX VALID */
#define EPRXMASK (0xBF8F)
//-----------------------------------------------------------------------------
#define EPREG_MASK (0x8f8f)
//-----------------------------------------------------------------------------
#define KIND (0x0100) /* EndPoint KIND */
//-----------------------------------------------------------------------------
unsigned int EPxR_STATUS;
unsigned int* const pEPxR_STATUS=&EPxR_STATUS;
void USB_Reset(void)
{
EP0R_BITS[EP_TYPE_1]=0;
EP0R_BITS[EP_TYPE_0]=1;
EP0R=(EP0R&EPTXMASK)^EP_TX_STALL; //端点发送 NAK分组响应
EP0_ADDR_RX=0x18;
EP0_ADDR_TX=0x58;
EP0R=(EP0R&EPTXMASK)^EP_TX_STALL; //端点发送 NAK分组响应
EP0R=EP0R&(EPREG_MASK&(~KIND)); //端点发送 NAK分组响应
EP0_COUNT_RX=0x8400;
EP0R=(EP0R&EPRXMASK)^EP_RX_VALID;
}
//-----------------------------------------------------------------------------
#include<stdio.h>
//-----------------------------------------------------------------------------
#define USB_INTRUPTER_DEBUG
//-----------------------------------------------------------------------------
void USB_LP_CAN_RX0_IRQHandler(void)
{
#ifdef USB_INTRUPTER_DEBUG
{
printf("\r\n");
printf("进入中断 ISTR:0x%.4x\r\n",ISTR);
}
#endif
if(ISTR_BITS[15])
{
#ifdef USB_INTRUPTER_DEBUG
{
printf("正确的传输\r\n");
}
#endif
ISTR_BITS[15]=0;
}
if(ISTR_BITS[14])
{
#ifdef USB_INTRUPTER_DEBUG
{
printf("包缓冲区溢出\r\n");
}
#endif
ISTR_BITS[14]=0;
}
if(ISTR_BITS[13])
{
#ifdef USB_INTRUPTER_DEBUG
{
printf("出错\r\n");
}
#endif
ISTR_BITS[13]=0;
}
if(ISTR_BITS[12])
{
#ifdef USB_INTRUPTER_DEBUG
{
printf("唤醒请求\r\n");
}
#endif
ISTR_BITS[12]=0;
}
if(ISTR_BITS[11])
{
#ifdef USB_INTRUPTER_DEBUG
{
printf("挂起请求\r\n");
}
#endif
ISTR_BITS[11]=0;
}
if(ISTR_BITS[10])
{
#ifdef USB_INTRUPTER_DEBUG
{
printf("复位请求\r\n");
}
#endif
USB_Reset();
ISTR_BITS[10]=0;
}
if(ISTR_BITS[9])
{
#ifdef USB_INTRUPTER_DEBUG
{
printf("帧首标志\r\n");
}
#endif
ISTR_BITS[9]=0;
}
if(ISTR_BITS[8])
{
#ifdef USB_INTRUPTER_DEBUG
{
printf("出现期望的帧首\r\n");
}
#endif
ISTR_BITS[8]=0;
}
#ifdef USB_INTRUPTER_DEBUG
{
printf("出中断\r\n");
}
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -