STM32F1系列单片机USB外设相关寄存器的定义

2019-07-19来源: eefocus关键字:STM32F1系列  单片机  USB外设  寄存器

Keil MDK网站上下载的Keil.STM32F1xx_DFP.2.2.0.pack包中的stm32f10x.h头文件里面没有USB_TypeDef的定义,只有寄存器位的定义,是不完整的头文件。没有USB的数据结构就会给访问USB寄存器带来一定的困难。虽然可以参照STM32参考手册中的USB register map自己编写出USB_TypeDef结构体,但是这样比较麻烦。


不过,STM32CubeMX工具生成的STM32F103工程中的头文件stm32f103xe.h中就有完整的USB数据结构,该头文件的版本是V4.2.0,日期为31-March-2017,作者仍然是Keil里面的MCD Application Team,这比Keil中的V3.5.0(11-March-2011)版本新得多,里面还额外增加了各寄存器位的具体位置的定义:***_Pos。


有了Pos定义,我们就可以直接指定多位选项的值。例如:


SDIO->CLKCR = SDIO_CLKCR_CLKEN | (70 << SDIO_CLKCR_CLKDIV_Pos); // 72MHz/(70+2)=1MHz

SDIO->CMD = SDIO_CMD_CPSMEN | (15 << SDIO_CMD_CMDINDEX_Pos); // 发送15号命令

 

ADC1->SQR1 = (3 << ADC_SQR1_L_Pos); // L=3, 3+1 conversions

ADC1->SQR3 = (4 << ADC_SQR3_SQ1_Pos) | (9 << ADC_SQR3_SQ2_Pos) | (0 << ADC_SQR3_SQ3_Pos) | (11 << ADC_SQR3_SQ4_Pos);

而不用一位一位的或起来,这样可读性比较差:

ADC1->SQR1 = ADC_SQR1_L_1 | ADC_SQR1_L_0; // L=3, 3+1 conversions


我们可以把其中常用的USB有关的内容复制出来,单独存放为一个stm32f10x_usb.h文件,或者索性直接就使用较新版本的头文件。


【stm32f10x_usb.h】


#define USB_BASE              (APB1PERIPH_BASE + 0x00005C00U) /*!< USB_IP Peripheral Registers base address */

#define USB_PMAADDR           (APB1PERIPH_BASE + 0x00006000U) /*!< USB_IP Packet Memory Area base address */

 

#define USB                 ((USB_TypeDef *)USB_BASE)

 

/** 

  * @brief Universal Serial Bus Full Speed Device

  */

  

typedef struct

{

  __IO uint16_t EP0R;                 /*!< USB Endpoint 0 register,                   Address offset: 0x00 */ 

  __IO uint16_t RESERVED0;            /*!< Reserved */     

  __IO uint16_t EP1R;                 /*!< USB Endpoint 1 register,                   Address offset: 0x04 */

  __IO uint16_t RESERVED1;            /*!< Reserved */       

  __IO uint16_t EP2R;                 /*!< USB Endpoint 2 register,                   Address offset: 0x08 */

  __IO uint16_t RESERVED2;            /*!< Reserved */       

  __IO uint16_t EP3R;                 /*!< USB Endpoint 3 register,                   Address offset: 0x0C */ 

  __IO uint16_t RESERVED3;            /*!< Reserved */       

  __IO uint16_t EP4R;                 /*!< USB Endpoint 4 register,                   Address offset: 0x10 */

  __IO uint16_t RESERVED4;            /*!< Reserved */       

  __IO uint16_t EP5R;                 /*!< USB Endpoint 5 register,                   Address offset: 0x14 */

  __IO uint16_t RESERVED5;            /*!< Reserved */       

  __IO uint16_t EP6R;                 /*!< USB Endpoint 6 register,                   Address offset: 0x18 */

  __IO uint16_t RESERVED6;            /*!< Reserved */       

  __IO uint16_t EP7R;                 /*!< USB Endpoint 7 register,                   Address offset: 0x1C */

  __IO uint16_t RESERVED7[17];        /*!< Reserved */     

  __IO uint16_t CNTR;                 /*!< Control register,                          Address offset: 0x40 */

  __IO uint16_t RESERVED8;            /*!< Reserved */       

  __IO uint16_t ISTR;                 /*!< Interrupt status register,                 Address offset: 0x44 */

  __IO uint16_t RESERVED9;            /*!< Reserved */       

  __IO uint16_t FNR;                  /*!< Frame number register,                     Address offset: 0x48 */

  __IO uint16_t RESERVEDA;            /*!< Reserved */       

  __IO uint16_t DADDR;                /*!< Device address register,                   Address offset: 0x4C */

  __IO uint16_t RESERVEDB;            /*!< Reserved */       

  __IO uint16_t BTABLE;               /*!< Buffer Table address register,             Address offset: 0x50 */

  __IO uint16_t RESERVEDC;            /*!< Reserved */       

} USB_TypeDef;



关键字:STM32F1系列  单片机  USB外设  寄存器 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic468588.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32F103 DMA 通道对应的外设
下一篇:stm32内核外设Systick与普通外设中断优先级比较的验证实验

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

stm32的can总线理解及应用——程序对应stm32f103系列
有28个(互联型),但是STM32F103ZET6只有14个(增强型),每个滤波器组x由2个32为寄存器,CAN_FxR1和CAN_FxR2组成。STM32每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求。根据位宽的不同,每个过滤器组可提供:● 1个32位过滤器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位● 2个16位过滤器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位此外过滤器可配置为,屏蔽位模式和标识符列表模式。在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。而在标识符列表模式下,屏蔽寄存器也被当作
发表于 2019-09-30
stm32的can总线理解及应用——程序对应stm32f103系列
STM32F2系列的EXTI使用
p; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0x0F;      NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0x0F;      NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE;      NVIC_Init(&NVIC_InitStructure);}3.1.使能作为外部中断的引脚的GPIO端口时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE
发表于 2019-09-28
STM32F2系列的EXTI使用
关于STM32F2系列项目开发工程文件的建立
最近在开发STM32F205ZET固件,装完Keil uVision5和驱动Keil.STM32F2xx_DFP.2.9.0,接着学习力工程文件的建立(这是教程,可点击),其中介绍STM32F1系列的标准固件库STM32F10x_Stdperiph_Lib和利用Keil uVision5的向导两种方式构建工程,但当我想在ST官网下载STM32F2系列的标准库时只发现STM32CubeF2_V1.7.0的固件库,这时就些蒙了,STM32F10x_Stdperiph_Lib、STM32CubeF2_V1.7.0、Keil.STM32F2xx_DFP.2.9.0这三者有何联系,通过查阅资料以及查看他们的文件系统机构,发现
发表于 2019-09-27
关于STM32F2系列项目开发工程文件的建立
STM32F1系列——固件库函数使用手册摘要
命名1.缩写2.函数命名固态函数库遵从以下命名规则 PPP表示任一外设缩写,例如:ADC。更多缩写相关信息参阅章节1.1 缩写系统、源程序文件和头文件命名都以“stm32f10x_”作为开头,例如:stm32f10x_conf.h。常量仅被应用于一个文件的,定义于该文件中;被应用于多个文件的,在对应头文件中定义。所有常量都由英文字母大写书写。寄存器作为常量处理。他们的命名都由英文字母大写书写。在大多数情况下,他们采用与缩写规范与本用户手册一致。外设函数的命名以该外设的缩写加下划线为开头。每个单词的第一个字母都由英文字母大写书写,例如:SPI_SendData。在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分
发表于 2019-09-24
STM32F1系列——固件库函数使用手册摘要
第51章 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列
就无法再更新应用程序了。所谓的"后门"是一种IAP程序(In Application Program),它通过某个通讯接口获取将要更新的程序内容,然后利用内部FLASH擦写操作把这些内容烧录到自己的内部FLASH中,实现应用程序的更新。不同级别下的访问限制见图 511。图 511 不同级别下的访问限制不同保护级别之间的状态转换见图 512。图 512 不同级别间的状态转换51.1.3 PCROP代码读出保护在STM32F42xx及STM32F43xx系列的芯片中,除了可使用RDP对整片FLASH进行读保护外,还有一个专用的代码读出保护功能(Proprietary code readout protection,下面
发表于 2019-09-20
第51章 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列
第45章 DCMI—OV2640摄像头—零死角玩转STM32-F429系列
4515,若我们使用Y2-Y9数据线,图像格式设置为RGB565,进行数据输出时,Y2-Y9数据线会在1个像素同步时钟PCLK的驱动下发送1字节的数据信号,所以2个PCLK时钟可发送1个RGB565格式的像素数据。像素数据依次传输,每传输完一行数据时,行同步信号HREF会输出一个电平跳变信号,每传输完一帧图像时,VSYNC会输出一个电平跳变信号。图 4514像素同步时序图 4515 帧图像同步时序45.3 STM32的DCMI接口简介STM32F4系列的控制器包含了DCMI数字摄像头接口(Digital camera Interface),它支持使用上述类似VGA的时序获取图像数据流,支持原始的按行、帧格式来组织的图像数据,如YUV
发表于 2019-09-20
第45章 DCMI—OV2640摄像头—零死角玩转STM32-F429系列
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved