⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stm32f10x_usb.c

📁 STM32 USB HID
💻 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 + -