欢迎来到天天文库
浏览记录
ID:955631
大小:194.00 KB
页数:21页
时间:2017-10-18
《stm32-usb使用方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、STM32-USB使用方法开发板买的是奋斗mini开发板,芯片是:STM32F103VET6.如果需要源程序keil4-arm工程,上位机vb。加qq339396264要程序。USB开发涉及主机和设备,为了避免开发驱动程序,使用Windows自带的驱动程序。所以设备枚举成HID类设备。USB鼠标就是标准的USB-HID设备。不过操作系统阻止了应用程序直接访问USB鼠标返回的报告。所以本例使用自定义HID设备。一来免去了开发驱动程序,二来自定义的HID设备应用程序和设备可以自由收发数据(仅指数据内容)。本文主要
2、介绍STM32的USB模块的简单使用,不会介绍USB协议。主要是介绍一下STM32F103的USB模块使用。USB模块从初始化首先是配置和使能时钟下面是时钟的初始化:voidSet_USBClock(void){//RCC_USBCLKSource_PLLCLK_1Div5表示【USB时钟=PLL时钟除以1.5】【72/1.5=48MHz】RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);RCC_APB1PeriphClockCmd(RCC_APB1Periph_
3、USB,ENABLE);//【使能配置好了的USB时钟】}首先系统时钟要设置为72MHz,然后配置USB时钟为48MHz并使能。然后是配置中断voidUSB_Interrupts_Config(void){#defineUSB_LP_CAN1_RX0_IRQn20NVIC_InitTypeDefNVIC_InitStructure;//【使能USB中断】NVIC_InitStructure.NVIC_IRQChannel=USB_LP_CAN1_RX0_IRQn;//【USB低优先级中断】NVIC_InitS
4、tructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);}然后初始化模块的一些寄存器USART_send_str("USB断开r");USB_DISCONNECT//这是断开1.5k上拉电阻delay(0x7AFFFF);//
5、延时一会USB_CONNECT//使能1.5K上拉电阻USART_send_str("USB连接r");DADDR=0x0080;//USB模块使能位。EF必须置1CNTR=0x0001;//强制复位CNTR=0x0000;//退出复位ISTR=0x0000;//清除可能产生的假中断CNTR=(I_CTR
6、I_RESET);//使能一些中断,为了简单这里只使能了【总线复位中断】和【数据正确传输中断】ISTR=0x0000;//清除可能产生的假中断自此USB模块初始化完毕。以后的流程就在USB中断的驱动下
7、执行。USB中断函数:voidUSB_LP_CAN1_RX0_IRQHandler(void){u16wIstr;//USB中断状态寄存器wIstr=(u16)ISTR;//【USB复位中断】if(wIstr&I_RESET){USB_RST_Process();return;}//【正确传输中断】if(wIstr&I_CTR){USB_CTR_Process();return;}}在USB中断函数中就是判断中断源,并转向相应的中断服务函数。USB总线复位后,USB相关的一些寄存器会复位。在USB总线复位中要
8、配置一下寄存器和数据收发的缓冲区。程序如下voidUSB_RST_Process(void){//清除中断ISTR=(u16)(~I_RESET);//清除ISTR寄存器中断RESET位。写0清除,写1寄存器位内容不变。//USART_send_str("【USB】【复】【位】【中】【断】r");usb_status=0;//复位处理DADDR=0x0080;//USB模块使能位。EF必须置1BTABLE=0;//复位后默认为0EP0REG=(u16)(0x0220);//000000100010000
9、0端点0初始化:控制端点,NAK主机的IN令牌,端点号0//设置TX/RX起始地址USB_ADDR0_TX=32;//32-95端点0的发送缓冲区从32开始到95,共64字节USB_ADDR0_RX=96;//96-159端点0的接收缓冲区从96开始到159,共64字节//设置端点0接收缓冲区大小:64ByteUSB_CNT0_RX=0x8400;//1000,0100,0000,0000//【端点
此文档下载收益归作者所有