STM32 Technical Reference Manual (Chinese)

User Manual:

Open the PDF directly: View PDF PDF.
Page Count: 754 [warning: Documents this large are best viewed by clicking the View PDF Link!]

STM32F10xxx参考手册
翻译说明
本文档是依据STM32 Reference Manual (RM0008)翻译的,已经与20096月的英文第9(Doc ID
13902 Rev 9)进行了全面校对,更正了不少以前版本的错误。
在校对即将结束时,ST200912月中旬又发布了英文第10(Doc ID 13902 Rev 10),为了与最新的
英文版同步,我们按照英文第10版结尾的文档版本历史中的指示,在翻译的文档中快速地校对更正了对
应的部分。由于时间的关系,没有逐字逐句地按照英文第10版进行通篇校对,鉴于芯片本身没有改变,
我们相信除了文档版本历史中指出的差别外,英文第10版与英文第9版不会再有更多的变化,遂定稿现
在这个翻译版本为对应的中文第10版文档。
由于我们的水平有限以及文档篇幅的庞大,翻译的过程中难免会有错误和遗漏的地方,希望广大读者们
能够及时向我们反馈您在阅读期间所发现的错误和问题,我们会尽快在下一个版本中更正。您可以发邮
件到mcu.china@st.com向我们提出您的意见和建议,谢谢。
意法半导体(中国)投资有限公司
MCU技术支持
2010110
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
STM32F10xxx参考手册
文档使用说明
本手册是STM32微控制器产品的技术参考手册
参照200912 RM0008 Reference Manual 英文第10
技术参考手册是有关如何使用该产品的具体信息,包含
各个功能模块的内部结构、所有可能的功能描述、各种工作模式的使用和寄存器配置等详细信息。
技术参考手册不包含有关产品技术特征的说明,这些内容在数据手册中。数据手册中的内容包括:产品
的基本配置(如内置FlashRAM的容量、外设模块的种类和数量等),管脚的数量和分配,电气特性,封
装信息,和定购代码等。
STM32是一个微控制器产品系列的总称,目前这个系列中已经包含了多个子系列,分别是:STM32小容
量产品、STM32中容量产品、STM32大容量产品和STM32互联型产品;按照功能上的划分,又可分为
STM32F101xxSTM32F102xxSTM32F103xx系列;因此STM32产品系列有以下这些数据手册:
小容量STM32F101xxhttp://www.st.com/stonline/products/literature/ds/15058.pdf
中容量STM32F101xxhttp://www.st.com/stonline/products/literature/ds/13586.pdf
大容量STM32F101xxhttp://www.st.com/stonline/products/literature/ds/14610.pdf
小容量STM32F102xxhttp://www.st.com/stonline/products/literature/ds/15057.pdf
中容量STM32F102xxhttp://www.st.com/stonline/products/literature/ds/15056.pdf
小容量STM32F103xxhttp://www.st.com/stonline/products/literature/ds/15060.pdf
中容量STM32F103xxhttp://www.st.com/stonline/products/literature/ds/13587.pdf
大容量STM32F103xxhttp://www.st.com/stonline/products/literature/ds/14611.pdf
互联型STM32F105xx/STM32F107xxhttp://www.st.com/stonline/products/literature/ds/15274.pdf
STM32微控制器产品中大多数功能模块都是在多个产品(或所有产品)中共有的并且是相同的,因此只有一
STM32微控制器产品的技术参考手对应所有这些产品。技术参考手对每种功能模块都有专门的一
个章节对应,每章的开始申明了这个功能模块的适用范围;例如第5备份寄存器适用于整个STM32
控制器系列,第27以太网只适用于STM32F107xx互联型产品。
为了方便阅读,下一页的表格列出了每个产品子系列所对应功能模块在技术参考手册中的章节一览。
数据手册通常在芯片选型的初期,首先要看 以评估该产品是否能够满足设计上的功能需求;在基本选定
所需产品后,需要察看技术参考手册确定各功能模块的工作模式是否符合要求;在确定选型进入编程
设计阶段时,需要详细阅读技术参考手册获知各项功能的具体实现方式和寄存器的配置使用。 在设计硬
件时还需参考数据手册以获得电压、电流、管脚分配、驱动能力等信息。
关于Cortex-M3核心、SysTick定时器和NVIC的详细说明,请参考另一篇ST的文档和一篇ARM的文档:
STM32F10xxx Cortex-M3编程手册》和《Cortex™-M3技术参考手册》。
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
STM32F10xxx参考手册
STM32系列产品命名规则
示例:
产品系列
STM32 = 基于ARM®32位微控制器
产品类型
F = 通用类型
产品子系列
101 = 基本型
102 = USB基本型,USB 2.0全速设备
103 = 增强型
105107 = 互联型
引脚数目
T = 36
C = 48
R = 64
V = 100
Z = 144
闪存存储器容量
4 = 16K字节的闪存存储器
6 = 32K字节的闪存存储器
8 = 64K字节的闪存存储器
B = 128K字节的闪存存储器
C = 256K字节的闪存存储器
D = 384K字节的闪存存储器
E = 512
K
字节的闪存存储器
封装
H = BGA
T = LQFP
U = VFQFPN
Y = WLCSP64
温度范围
6 = 工业级温度范围,-40°C~85°C
7 = 工业级温度范围,-40°C~105°C
内部代码
A 或者空 (见产品数据手册)
选项
xxx = 编程的器件代号(3个数字)
TR = 卷带式包装
STM32 F 103 C xxx8T6A
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
STM32F10xxx参考手册
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
STM32技术参考手册各章节与各产品系列交叉对照表
STM32F101xx
STM32F101xx
STM32F101xx
STM32F102xx
STM32F102xx
STM32F103xx
STM32F103xx
STM32F103xx
STM32F105xx
STM32F107xx
1章:文中的缩写 ●●●●● ●●●
2章:存储器和总线构架 ●●●●● ●●●
3章:CRC计算单元(CRC) ●●●●● ●●●
4章:电源控制(PWR) ●●●●● ●●●
5章:备份寄存器(BKP) ●●●●● ●●●
6章:小容量、中容量和大容量产品的复位和时钟控制(RCC) ●●●●●
7章:互联型产品的复位和时钟控制(RCC) ● ●
8章:通用和复用功能I/O(GPIOAFIO) ●●●●● ●●●
9章:中断和事件 ●●●●● ●●●
10章:DMA控制器(DMA) ●●●●● ●●●
11章:模拟/数字转换(ADC) ●●●●● ●●●
12章:数字/模拟转换(DAC) ●●●
13章:高级控制定时器(TIM1TIM8) ●●●
14章:通用定时器(TIMx) ●●●●● ●●●
15章:基本定时器(TIM6TIM7) ●●●
16章:实时时钟(RTC) ●●●●● ●●●
17章:独立看门狗(IWDG) ●●●●● ●●●
18章:窗口看门狗(WWDG) ●●●●● ●●●
19章:灵活的静态存储器控制器(FSMC)
20章:SDIO接口(SDIO)
21章:USB全速设备接口(USB) ● ●
22章:控制器局域网(bxCAN) ●●●
23章:串行外设接口(SPI) ●●●●● ●●●
24章:I2C接口 ●●●●● ●●●
25章:通用同步异步收发器(USART) ●●●●● ●●●
26章:USB OTG全速(OTG_FS) ● ●
27章:以太网(ETH):具有DMA控制器的介质访问控制(MAC)
28章:器件电子签名 ●●●●● ●●●
29章:调试支持(DBG) ●●●●● ●●●
● 表示所在行对应的章节适用于该列标示的产品系列
提示:点击上表中的章节名字可以直接跳转到对应的章节。
STM32F10xxx参考手册
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
下表给出了一个交叉参考,在使用各功能模块时应重点阅读哪些章节:
功能模块
(BKP)
(GPIO)
/(ADC)
/(DAC)
(TIMx(x=1…8))
(RTC)
(IWDG)
WWDG)
(FSMC)
SDIO (SDIO)
(USB)
(bxCAN)
(SPI)
(I2C)
(USART)
OTG(OTG_FS)
(ETH)
1章:文中的缩写 ●●●●●●●●●●● ● ● ●
2章:存储器和总线构架 ●●●●●●●●●●● ● ● ●
3章:CRC计算单元(CRC)
4章:电源控制(PWR) ●●●●●●●●●●● ● ● ●
5章:备份寄存器(BKP) ● ◎
6章:小容量、中容量和大容量产品的复位
和时钟控制(RCC)
7章:互联型产品的复位和时钟控制(RCC)
●●●●●●●●●●● ● ● ●
8章:通用和复用功能I/O(GPIOAFIO) ◎●●●●◎●●●●● ● ● ●
9章:中断和事件 ◎◎◎◎◎ ◎◎◎◎ ◎ ◎ ◎
10章:DMA控制器(DMA) ◎◎◎ ◎◎
11章:模拟/数字转换(ADC)
12章:数字/模拟转换(DAC)
13章:高级控制定时器(TIM1TIM8) ◎ ●
14章:通用定时器(TIMx) ◎ ●
15章:基本定时器(TIM6TIM7) ◎◎●
16章:实时时钟(RTC) ● ●
17章:独立看门狗(IWDG)
18章:窗口看门狗(WWDG)
19章:灵活的静态存储器控制器(FSMC)
20章:SDIO接口(SDIO)
21章:USB全速设备接口(USB)
22章:控制器局域网(bxCAN)
23章:串行外设接口(SPI)
24章:I2C接口
25章:通用同步异步收发器(USART)
26章:USB OTG全速(OTG_FS)
27章:以太(ETH):具有DMA控制器的
介质访问控制(MAC)
28章:器件电子签名
29章:调试支持(DBG) ◎◎◎◎◎◎◎◎◎◎◎ ◎ ◎ ◎
● 表示对应的章节是必读的
◎ 表示对应的章节是选读的
注:请区分第
7
章的内容只适合于互联型产品,第
6
章的内容适合于除互联型产品以外的产品。
STM32F10xxx参考手册
参考手册
STM32F101xx, STM32F102xxSTM32F103xxSTM32F105xx
STM32F107xxARM 内核 32 位高性能微控制器
导言
本参考手册针对应用开发,提供关于如何使用STM32F101xxSTM32F102xxSTM32F103
STM32F105xx/STM32F107xx 微控制器的存储器和外设的详细信息。在本参考手册中
STM32F101xx STM32F102xx STM32F103 STM32F105xx/STM32F107xx 被统称为
STM32F10xxx
STM32F10xxx系列拥有不同的存储器容量、封装和外设配置。
关于订货编号、电气和物理性能参数,请参考小容量、中容量和大容量的STM32F101xx
STM32F103xx 的数据手册,小容量和中容量的STM32F102xx 数据手册和STM32F105xx/
STM32F107xx互联型产品的数据手册。
STM32F10xxx闪存编程手册
参照200912 RM0008 Reference Manual 英文第10
关于芯片内部闪存的编程,擦除和保护操作,请参考
关于ARM Cortex™-M3内核的具体信息,请参考Cortex™-M3技术参考手册。
相关文档
Cortex™-M3技术参考手册,可按下述链接下载:
http://infocenter.arm.com/help/topic/com.arm.doc.ddi0337e/DDI0337E_cortex_m3_r1p1_trm.pdf
下述文档可在ST网站下载(http://www.st.com/mcu/)
STM32F101xxSTM32F102xxSTM32F103xx的数据手册。
STM32F10xxx闪存编程手册。
相关数据手册下载地址:
小容量STM32F101xxhttp://www.st.com/stonline/products/literature/ds/15058.pdf
中容量STM32F101xxhttp://www.st.com/stonline/products/literature/ds/13586.pdf
大容量STM32F101xxhttp://www.st.com/stonline/products/literature/ds/14610.pdf
小容量STM32F102xxhttp://www.st.com/stonline/products/literature/ds/15057.pdf
中容量STM32F102xxhttp://www.st.com/stonline/products/literature/ds/15056.pdf
小容量STM32F103xxhttp://www.st.com/stonline/products/literature/ds/15060.pdf
中容量STM32F103xxhttp://www.st.com/stonline/products/literature/ds/13587.pdf
大容量STM32F103xxhttp://www.st.com/stonline/products/literature/ds/14611.pdf
互联型STM32F105xx/STM32F107xxhttp://www.st.com/stonline/products/literature/ds/15274.pdf
STM32F10xxx Cortex-M3编程手册:http://www.st.com/stonline/products/literature/pm/15491.pdf
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
目录
1 文中的缩写 24
1.1 寄存器描述表中使用的缩写列表 24
1.2 术语表 24
1.3 可用的外设 24
2 存储器和总线构架 25
2.1 系统构架 25
2.2 存储器组织 27
2.3 存储器映像 28
2.3.1 嵌入式SRAM 29
2.3.2 位段 29
2.3.3 嵌入式闪存 30
2.4 启动配置 33
3 CRC计算单元(CRC) 34
3.1 CRC简介 34
3.2 CRC主要特性 34
3.3 CRC功能描述 34
3.4 CRC寄存器 35
3.4.1 数据寄存器(CRC_DR) 35
3.4.2 独立数据寄存器(CRC_IDR) 35
3.4.3 控制寄存器(CRC_CR) 36
3.4.4 CRC寄存器映像 36
4 电源控制(PWR) 37
4.1 电源 37
4.1.1 独立的A/D转换器供电和参考电压 37
4.1.2 电池备份区域 38
4.1.3 电压调节器 38
4.2 电源管理器 38
4.2.1 上电复位(POR)和掉电复位(PDR) 38
4.2.2 可编程电压监测器(PVD) 39
4.3 低功耗模式 40
4.3.1 降低系统时钟 40
4.3.2 外部时钟的控制 40
4.3.3 睡眠模式 40
4.3.4 停止模式 41
4.3.5 待机模式 42
4.3.6 低功耗模式下的自动唤醒(AWU) 43
4.4 电源控制寄存器 44
4.4.1 电源控制寄存器(PWR_CR) 44
4.4.2 电源控制/状态寄存器(PWR_CSR) 45
4.4.3 PWR寄存器地址映像 46
5 备份寄存器(BKP) 47
5.1 BKP简介 47
5.2 BKP特性 47
7/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
5.3 BKP功能描述 47
5.3.1 侵入检测 47
5.3.2 RTC校准 48
5.4 BKP寄存器描述 48
5.4.1 备份数据寄存器x(BKP_DRx) (x = 1 … 10) 48
5.4.2 RTC时钟校准寄存器(BKP_RTCCR) 48
5.4.3 备份控制寄存器(BKP_CR) 49
5.4.4 备份控制/状态寄存器(BKP_CSR) 49
5.4.5 BKP寄存器映像 51
6 小容量、中容量和大容量产品的复位和时钟控制(RCC) 54
6.1 复位 54
6.1.1 系统复位 54
6.1.2 电源复位 54
6.1.3 备份域复位 55
6.2 时钟 55
6.2.1 HSE时钟 57
6.2.2 HSI时钟 57
6.2.3 PLL 58
6.2.4 LSE时钟 58
6.2.5 LSI时钟 58
6.2.6 系统时钟(SYSCLK)选择 59
6.2.7 时钟安全系统(CSS) 59
6.2.8 RTC时钟 59
6.2.9 看门狗时钟 59
6.2.10 时钟输出 59
6.3 RCC寄存器描述 60
6.3.1 时钟控制寄存器(RCC_CR) 60
6.3.2 时钟配置寄存器(RCC_CFGR) 61
6.3.3 时钟中断寄存器 (RCC_CIR) 63
6.3.4 APB2外设复位寄存器 (RCC_APB2RSTR) 65
6.3.5 APB1外设复位寄存器 (RCC_APB1RSTR) 67
6.3.6 AHB外设时钟使能寄存器 (RCC_AHBENR) 69
6.3.7 APB2外设时钟使能寄存器(RCC_APB2ENR) 70
6.3.8 APB1外设时钟使能寄存器(RCC_APB1ENR) 71
6.3.9 备份域控制寄存器 (RCC_BDCR) 74
6.3.10 控制/状态寄存器 (RCC_CSR) 75
6.3.11 RCC寄存器地址映像 77
7 互联型产品的复位和时钟控制(RCC) 78
7.1 复位 78
7.1.1 系统复位 78
7.1.2 电源复位 78
7.1.3 备份域复位 79
7.2 时钟 79
7.2.1 HSE时钟 81
7.2.2 HSI时钟 82
7.2.3 PLL 82
7.2.4 LSE时钟 82
7.2.5 LSI时钟 83
7.2.6 系统时钟(SYSCLK)选择 83
8/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
7.2.7 时钟安全系统(CSS) 83
7.2.8 RTC时钟 83
7.2.9 看门狗时钟 84
7.2.10 时钟输出 84
7.3 RCC寄存器 85
7.3.1 时钟控制寄存器(RCC_CR) 85
7.3.2 时钟配置寄存器(RCC_CFGR) 86
7.3.3 时钟中断寄存器(RCC_CIR) 88
7.3.4 APB2外设复位寄存器(RCC_APB2RSTR) 91
7.3.5 APB1外设复位寄存器(RCC_APB1RSTR) 92
7.3.6 AHB外设时钟使能寄存器(RCC_AHBENR) 94
7.3.7 APB2外设时钟使能寄存器(RCC_APB2ENR) 95
7.3.8 APB1外设时钟使能寄存器(RCC_APB1ENR) 97
7.3.9 备份域控制寄存器(RCC_BDCR) 99
7.3.10 控制/状态寄存器(RCC_CSR) 100
7.3.11 AHB外设时钟复位寄存器(RCC_AHBRSTR) 101
7.3.12 时钟配置寄存器2(RCC_CFGR2) 101
7.3.13 RCC寄存器地址映像 103
8 通用和复用功能I/O(GPIOAFIO) 105
8.1 GPIO功能描述 105
8.1.1 通用I/O(GPIO) 106
8.1.2 单独的位设置或位清除 107
8.1.3 外部中断/唤醒线 107
8.1.4 复用功能(AF) 107
8.1.5 软件重新映射I/O复用功能 107
8.1.6 GPIO锁定机制 107
8.1.7 输入配置 107
8.1.8 输出配置 108
8.1.9 复用功能配置 109
8.1.10 模拟输入配置 109
8.1.11 外设的GPIO配置 110
8.2 GPIO寄存器描述 113
8.2.1 端口配置低寄存器(GPIOx_CRL) (x=A..E) 113
8.2.2 端口配置高寄存器(GPIOx_CRH) (x=A..E) 114
8.2.3 端口输入数据寄存器(GPIOx_IDR) (x=A..E) 114
8.2.4 端口输出数据寄存器(GPIOx_ODR) (x=A..E) 115
8.2.5 端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E) 115
8.2.6 端口位清除寄存器(GPIOx_BRR) (x=A..E) 115
8.2.7 端口配置锁定寄存器(GPIOx_LCKR) (x=A..E) 116
8.3 复用功能I/O和调试配置(AFIO) 116
8.3.1 OSC32_IN/OSC32_OUT作为GPIO 端口PC14/PC15 116
8.3.2 OSC_IN/OSC_OUT引脚作为GPIO端口PD0/PD1 117
8.3.3 CAN1复用功能重映射 117
8.3.4 CAN2复用功能重映射 117
8.3.5 JTAG/SWD复用功能重映射 117
8.3.6 ADC复用功能重映射 118
8.3.7 定时器复用功能重映射 118
8.3.8 USART复用功能重映射 119
8.3.9 I2C1复用功能重映射 120
8.3.10 SPI 1复用功能重映射 120
9/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
8.3.11 SPI3复用功能重映射 120
8.3.12 以太网复用功能重映射 121
8.4 AFIO寄存器描述 121
8.4.1 事件控制寄存器(AFIO_EVCR) 121
8.4.2 复用重映射和调试I/O配置寄存器(AFIO_MAPR) 121
8.4.3 外部中断配置寄存器1(AFIO_EXTICR1) 126
8.4.4 外部中断配置寄存器2(AFIO_EXTICR2) 127
8.4.5 外部中断配置寄存器3(AFIO_EXTICR3) 127
8.4.6 外部中断配置寄存器4(AFIO_EXTICR4) 128
8.5 GPIO AFIO寄存器地址映象 129
9 中断和事件 130
9.1 嵌套向量中断控制器 130
9.1.1 系统嘀嗒(SysTick)校准值寄存器 130
9.1.2 中断和异常向量 130
9.2 外部中断/事件控制器(EXTI) 134
9.2.1 主要特性 134
9.2.2 框图 135
9.2.3 唤醒事件管理 135
9.2.4 功能说明 135
9.2.5 外部中断/事件线路映像 137
9.3 EXTI 寄存器描述 138
9.3.1 中断屏蔽寄存器(EXTI_IMR) 138
9.3.2 事件屏蔽寄存器(EXTI_EMR) 138
9.3.3 上升沿触发选择寄存器(EXTI_RTSR) 139
9.3.4 下降沿触发选择寄存器(EXTI_FTSR) 139
9.3.5 软件中断事件寄存器(EXTI_SWIER) 140
9.3.6 挂起寄存器(EXTI_PR) 140
9.3.7 外部中断/事件寄存器映像 141
10 DMA控制器(DMA) 142
10.1 DMA简介 142
10.2 DMA主要特性 142
10.3 功能描述 143
10.3.1 DMA处理 143
10.3.2 仲裁器 144
10.3.3 DMA 通道 144
10.3.4 可编程的数据传输宽度、对齐方式和数据大小端 145
10.3.5 错误管理 146
10.3.6 中断 146
10.3.7 DMA请求映像 147
10.4 DMA寄存器 149
10.4.1 DMA中断状态寄存器(DMA_ISR) 149
10.4.2 DMA中断标志清除寄存器(DMA_IFCR) 150
10.4.3 DMA通道x配置寄存器(DMA_CCRx)(x = 1…7) 150
10.4.4 DMA通道x传输数量寄存器(DMA_CNDTRx)(x = 1…7) 152
10.4.5 DMA通道x外设地址寄存器(DMA_CPARx)(x = 1…7) 152
10.4.6 DMA通道x存储器地址寄存器(DMA_CMARx)(x = 1…7) 152
10.4.7 DMA寄存器映像 153
11 模拟/数字转换(ADC) 155
10/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
11.1 ADC介绍 155
11.2 ADC主要特征 155
11.3 ADC功能描述 156
11.3.1 ADC开关控制 157
11.3.2 ADC时钟 157
11.3.3 通道选择 157
11.3.4 单次转换模式 157
11.3.5 连续转换模式 158
11.3.6 时序图 158
11.3.7 模拟看门狗 158
11.3.8 扫描模式 159
11.3.9 注入通道管理 159
11.3.10 间断模式 160
11.4 校准 161
11.5 数据对齐 161
11.6 可编程的通道采样时间 161
11.7 外部触发转换 162
11.8 DMA请求 163
11.9 ADC模式 163
11.9.1 同步注入模式 164
11.9.2 同步规则模式 165
11.9.3 快速交叉模式 165
11.9.4 慢速交叉模式 166
11.9.5 交替触发模式 166
11.9.6 独立模式 167
11.9.7 混合的规则/注入同步模式 167
11.9.8 混合的同步规则+交替触发模式 167
11.9.9 混合同步注入 + 交叉模式 168
11.10 温度传感器 168
11.11 ADC中断 169
11.12 ADC寄存器 170
11.12.1 ADC状态寄存器(ADC_SR) 170
11.12.2 ADC控制寄存器1(ADC_CR1) 171
11.12.3 ADC控制寄存器2(ADC_CR2) 173
11.12.4 ADC采样时间寄存器1(ADC_SMPR1) 175
11.12.5 ADC采样时间寄存器2(ADC_SMPR2) 175
11.12.6 ADC注入通道数据偏移寄存器x (ADC_JOFRx)(x=1..4) 176
11.12.7 ADC看门狗高阀值寄存器(ADC_HTR) 176
11.12.8 ADC看门狗低阀值寄存器(ADC_LRT) 176
11.12.9 ADC规则序列寄存器1(ADC_SQR1) 177
11.12.10 ADC规则序列寄存器2(ADC_SQR2) 177
11.12.11 ADC规则序列寄存器3(ADC_SQR3) 178
11.12.12 ADC注入序列寄存器(ADC_JSQR) 178
11.12.13 ADC 注入数据寄存器x (ADC_JDRx) (x= 1..4) 179
11.12.14 ADC规则数据寄存器(ADC_DR) 179
11.12.15 ADC寄存器地址映像 180
12 数字/模拟转换(DAC) 182
12.1 DAC简介 182
11/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
12.2 DAC主要特征 182
12.3 DAC功能描述 183
12.3.1 使能DAC通道 183
12.3.2 使能DAC输出缓存 184
12.3.3 DAC数据格式 184
12.3.4 DAC转换 185
12.3.5 DAC输出电压 185
12.3.6 选择DAC触发 185
12.3.7 DMA请求 186
12.3.8 噪声生成 186
12.3.9 三角波生成 187
12.4 DAC通道转换 187
12.4.1 不使用波形发生器的独立触发 187
12.4.2 使用相同LFSR的独立触发 188
12.4.3 使用不同LFSR的独立触发 188
12.4.4 产生相同三角波的独立触发 188
12.4.5 产生不同三角波的独立触发 188
12.4.6 同时软件启动 189
12.4.7 不使用波形发生器的同时触发 189
12.4.8 使用相同LFSR的同时触发 189
12.4.9 使用不同LFSR的同时触发 189
12.4.10 使用相同三角波发生器的同时触发 189
12.4.11 使用不同三角波发生器的同时触发 190
12.5 DAC寄存器 191
12.5.1 DAC控制寄存器(DAC_CR) 191
12.5.2 DAC软件触发寄存器(DAC_SWTRIGR) 193
12.5.3 DAC通道112位右对齐数据保持寄存器(DAC_DHR12R1) 194
12.5.4 DAC通道112位左对齐数据保持寄存器(DAC_DHR12L1) 194
12.5.5 DAC通道18位右对齐数据保持寄存器(DAC_DHR8R1) 194
12.5.6 DAC通道212位右对齐数据保持寄存器(DAC_DHR12R2) 195
12.5.7 DAC通道212位左对齐数据保持寄存器(DAC_DHR12L2) 195
12.5.8 DAC通道28位右对齐数据保持寄存器(DAC_DHR8R2) 195
12.5.9 DAC12位右对齐数据保持寄存器(DAC_DHR12RD) 196
12.5.10 DAC12位左对齐数据保持寄存器(DAC_DHR12LD) 196
12.5.11 DAC8位右对齐数据保持寄存器(DAC_DHR8RD) 196
12.5.12 DAC通道1数据输出寄存器(DAC_DOR1) 197
12.5.13 DAC通道2数据输出寄存器(DAC_DOR2) 197
12.5.14 DAC寄存器映像 198
13 高级控制定时器(TIM1 TIM8) 199
13.1 TIM1TIM8简介 199
13.2 TIM1TIM8主要特性 199
13.3 TIM1TIM8功能描述 200
13.3.1 时基单元 200
13.3.2 计数器模式 202
13.3.3 重复计数器 209
13.3.4 时钟选择 210
13.3.5 捕获/比较通道 213
13.3.6 输入捕获模式 215
13.3.7 PWM输入模式 216
13.3.8 强置输出模式 216
12/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
13.3.9 输出比较模式 217
13.3.10 PWM模式 218
13.3.11 互补输出和死区插入 220
13.3.12 使用刹车功能 221
13.3.13 在外部事件时清除OCxREF信号 223
13.3.14 产生六步PWM输出 223
13.3.15 单脉冲模式 224
13.3.16 编码器接口模式 225
13.3.17 定时器输入异或功能 227
13.3.18 与霍尔传感器的接口 227
13.3.19 TIMx定时器和外部触发的同步 229
13.3.20 定时器同步 232
13.3.21 调试模式 232
13.4 TIM1TIM8寄存器描述 233
13.4.1 TIM1TIM8控制寄存器1(TIMx_CR1) 233
13.4.2 TIM1TIM8控制寄存器2(TIMx_CR2) 234
13.4.3 TIM1TIM8从模式控制寄存器(TIMx_SMCR) 235
13.4.4 TIM1TIM8 DMA/中断使能寄存器(TIMx_DIER) 237
13.4.5 TIM1TIM8状态寄存器(TIMx_SR) 238
13.4.6 TIM1TIM8事件产生寄存器(TIMx_EGR) 239
13.4.7 TIM1TIM8捕获/比较模式寄存器1(TIMx_CCMR1) 240
13.4.8 TIM1TIM8捕获/比较模式寄存器2(TIMx_CCMR2) 242
13.4.9 TIM1TIM8捕获/比较使能寄存器(TIMx_CCER) 244
13.4.10 TIM1TIM8计数器(TIMx_CNT) 246
13.4.11 TIM1TIM8预分频器(TIMx_PSC) 246
13.4.12 TIM1TIM8自动重装载寄存器(TIMx_ARR) 246
13.4.13 TIM1TIM8重复计数寄存器(TIMx_RCR) 246
13.4.14 TIM1TIM8捕获/比较寄存器1(TIMx_CCR1) 247
13.4.15 TIM1TIM8捕获/比较寄存器2(TIMx_CCR2) 247
13.4.16 TIM1TIM8捕获/比较寄存器3(TIMx_CCR3) 247
13.4.17 TIM1TIM8捕获/比较寄存器(TIMx_CCR4) 248
13.4.18 TIM1TIM8刹车和死区寄存器(TIMx_BDTR) 248
13.4.19 TIM1TIM8 DMA控制寄存器(TIMx_DCR) 249
13.4.20 TIM1TIM8连续模式的DMA地址(TIMx_DMAR) 250
13.4.21 TIM1TIM8寄存器图 251
14 通用定时器(TIMx) 253
14.1 TIMx简介 253
14.2 TIMx主要功能 253
14.3 TIMx功能描述 254
14.3.1 时基单元 254
14.3.2 计数器模式 255
14.3.3 时钟选择 263
14.3.4 捕获/比较通道 265
14.3.5 输入捕获模式 267
14.3.6 PWM输入模式 267
14.3.7 强置输出模式 268
14.3.8 输出比较模式 268
14.3.9 PWM 模式 269
14.3.10 单脉冲模式 271
14.3.11 在外部事件时清除OCxREF信号 273
14.3.12 编码器接口模式 273
13/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
14.3.13 定时器输入异或功能 275
14.3.14 定时器和外部触发的同步 275
14.3.15 定时器同步 277
14.3.16 调试模式 281
14.4 TIMx寄存器描述 282
14.4.1 控制寄存器1(TIMx_CR1) 282
14.4.2 控制寄存器2(TIMx_CR2) 283
14.4.3 从模式控制寄存器(TIMx_SMCR) 284
14.4.4 DMA/中断使能寄存器(TIMx_DIER) 285
14.4.5 状态寄存器(TIMx_SR) 286
14.4.6 事件产生寄存器(TIMx_EGR) 287
14.4.7 捕获/比较模式寄存器1(TIMx_CCMR1) 288
14.4.8 捕获/比较模式寄存器2(TIMx_CCMR2) 290
14.4.9 捕获/比较使能寄存器(TIMx_CCER) 292
14.4.10 计数器(TIMx_CNT) 293
14.4.11 预分频器(TIMx_PSC) 293
14.4.12 自动重装载寄存器(TIMx_ARR) 293
14.4.13 捕获/比较寄存器1(TIMx_CCR1) 293
14.4.14 捕获/比较寄存器2(TIMx_CCR2) 294
14.4.15 捕获/比较寄存器3(TIMx_CCR3) 294
14.4.16 捕获/比较寄存器4(TIMx_CCR4) 294
14.4.17 DMA控制寄存器(TIMx_DCR) 295
14.4.18 连续模式的DMA地址(TIMx_DMAR) 295
14.4.19 TIMx寄存器图 296
15 基本定时器(TIM6 TIM7) 298
15.1 TIM6TIM7简介 298
15.2 TIM6TIM7的主要特性 298
15.3 TIM6TIM7的功能 299
15.3.1 时基单元 299
15.3.2 计数模式 300
15.3.3 时钟源 302
15.3.4 调试模式 303
15.4 TIM6TIM7寄存器 303
15.4.1 TIM6TIM7控制寄存器1(TIMx_CR1) 303
15.4.2 TIM6TIM7控制寄存器2(TIMx_CR2) 304
15.4.3 TIM6TIM7 DMA/中断使能寄存器(TIMx_DIER) 304
15.4.4 TIM6TIM7状态寄存器(TIMx_SR) 305
15.4.5 TIM6TIM7事件产生寄存器(TIMx_EGR) 305
15.4.6 TIM6TIM7计数器(TIMx_CNT) 305
15.4.7 TIM6TIM7预分频器(TIMx_PSC) 306
15.4.8 TIM6TIM7自动重装载寄存器(TIMx_ARR) 306
15.4.9 TIM6TIM7寄存器图 307
16 实时时钟(RTC) 308
16.1 RTC简介 308
16.2 主要特性 308
16.3 功能描述 308
16.3.1 概述 308
16.3.2 复位过程 309
16.3.3 RTC寄存器 309
14/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
16.3.4 配置RTC寄存器 310
16.3.5 RTC标志的设置 310
16.4 RTC寄存器描述 311
16.4.1 RTC控制寄存器高位(RTC_CRH) 311
16.4.2 RTC控制寄存器低位(RTC_CRL) 311
16.4.3 RTC预分频装载寄存器(RTC_PRLH/RTC_PRLL) 312
16.4.4 RTC预分频器余数寄存器(RTC_DIVH / RTC_DIVL) 313
16.4.5 RTC计数器寄存器 (RTC_CNTH / RTC_CNTL) 313
16.4.6 RTC闹钟寄存器(RTC_ALRH/RTC_ALRL) 314
16.4.7 RTC寄存器映像 315
17 独立看门狗(IWDG) 316
17.1 简介 316
17.2 IWDG主要性能 316
17.3 IWDG功能描述 316
17.3.1 硬件看门狗 316
17.3.2 寄存器访问保护 316
17.3.3 调试模式 316
17.4 IWDG寄存器描述 317
17.4.1 键寄存器(IWDG_KR) 317
17.4.2 预分频寄存器(IWDG_PR) 318
17.4.3 重装载寄存器(IWDG_RLR) 318
17.4.4 状态寄存器(IWDG_SR) 319
17.4.5 IWDG寄存器映像 319
18 窗口看门狗(WWDG) 320
18.1 WWDG简介 320
18.2 WWDG主要特性 320
18.3 WWDG功能描述 320
18.4 如何编写看门狗超时程序 321
18.5 调试模式 322
18.6 寄存器描述 322
18.6.1 控制寄存器(WWDG_CR) 322
18.6.2 配置寄存器(WWDG_CFR) 322
18.6.3 状态寄存器(WWDG_SR) 323
18.6.4 WWDG寄存器映像 323
19 灵活的静态存储器控制器(FSMC) 324
19.1 FSMC功能描述 324
19.2 框图 324
19.3 AHB接口 325
19.3.1 支持的存储器和操作 325
19.4 外部设备地址映像 326
19.4.1 NORPSRAM地址映像 327
19.4.2 NANDPC卡地址映像 327
19.5 NOR闪存和PSRAM控制器 328
19.5.1 外部存储器接口信号 329
19.5.2 支持的存储器及其操作 330
19.5.3 时序规则 330
19.5.4 NOR闪存和PSRAM控制器时序图 330
15/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
19.5.5 同步的成组读 343
19.5.6 NOR闪存和PSRAM控制器寄存器 347
19.6 NAND闪存和PC卡控制器 352
19.6.1 外部存储器接口信号 352
19.6.2 NAND闪存/PC卡支持的存储器及其操作 353
19.6.3 NAND闪存、ATAPC卡时序图 353
19.6.4 NAND闪存操作 354
19.6.5 NAND闪存预等待功能 355
19.6.6 NAND闪存的纠错码ECC计算(NAND闪存) 356
19.6.7 NAND闪存和PC卡控制器寄存器 356
19.7 FSMC寄存器地址映象 362
20 SDIO接口(SDIO) 363
20.1 SDIO主要功能 363
20.2 SDIO总线拓扑 363
20.3 SDIO功能描述 366
20.3.1 SDIO适配器 367
20.3.2 SDIO AHB接口 374
20.4 卡功能描述 374
20.4.1 卡识别模式 374
20.4.2 卡复位 374
20.4.3 操作电压范围确认 375
20.4.4 卡识别过程 375
20.4.5 写数据块 376
20.4.6 读数据块 376
20.4.7 数据流操作,数据流写入和数据流读出(只适用于多媒体卡) 376
20.4.8 擦除:成组擦除和扇区擦除 377
20.4.9 宽总线选择和解除选择 378
20.4.10 保护管理 378
20.4.11 卡状态寄存器 380
20.4.12 SD状态寄存器 382
20.4.13 SDI/O模式 385
20.4.14 命令与响应 385
20.5 响应格式 388
20.5.1 R1(普通响应命令) 388
20.5.2 R1b 388
20.5.3 R2(CIDCSD寄存器) 388
20.5.4 R3(OCR寄存器) 389
20.5.5 R4(快速I/O) 389
20.5.6 R4b 389
20.5.7 R5(中断请求) 390
20.5.8 R6(中断请求) 390
20.6 SDIO I/O卡特定的操作 390
20.6.1 使用SDIO_D2信号线的SDIO I/O读等待操作 390
20.6.2 使用停止SDIO_CKSDIO读等待操作 391
20.6.3 SDIO暂停/恢复操作 391
20.6.4 SDIO中断 391
20.7 CE-ATA特定操作 391
20.7.1 命令完成指示关闭 391
20.7.2 命令完成指示使能 391
16/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
20.7.3 CE-ATA中断 392
20.7.4 中止CMD61 392
20.8 硬件流控制 392
20.9 SDIO寄存器 392
20.9.1 SDIO电源控制寄存器(SDIO_POWER) 392
20.9.2 SDIO时钟控制寄存器(SDIO_CLKCR) 392
20.9.3 SDIO参数寄存器(SDIO_ARG) 393
20.9.4 SDIO命令寄存器(SDIO_CMD) 393
20.9.5 SDIO命令响应寄存器(SDIO_RESPCMD) 394
20.9.6 SDIO响应1..4寄存器(SDIO_RESPx) 395
20.9.7 SDIO数据定时器寄存器(SDIO_DTIMER) 395
20.9.8 SDIO数据长度寄存器(SDIO_DLEN) 395
20.9.9 SDIO数据控制寄存器(SDIO_DCTRL) 396
20.9.10 SDIO数据计数器寄存器(SDIO_DCOUNT) 397
20.9.11 SDIO状态寄存器(SDIO_STA) 397
20.9.12 SDIO清除中断寄存器(SDIO_ICR) 398
20.9.13 SDIO中断屏蔽寄存器(SDIO_MASK) 399
20.9.14 SDIO FIFO计数器寄存器(SDIO_FIFOCNT) 401
20.9.15 SDIO数据FIFO寄存器(SDIO_FIFO) 401
20.9.16 SDIO寄存器映像 402
21 USB全速设备接口(USB) 403
21.1 USB简介 403
21.2 USB主要特征 403
21.3 USB功能描述 404
21.3.1 USB功能模块描述 405
21.4 编程中需要考虑的问题 406
21.4.1 通用USB设备编程 406
21.4.2 系统复位和上电复位 406
21.4.3 双缓冲端点 409
21.4.4 同步传输 410
21.4.5 挂起/恢复事件 411
21.5 USB寄存器描述 412
21.5.1 通用寄存器 412
21.5.2 端点寄存器 416
21.5.3 缓冲区描述表 419
21.5.4 USB寄存器映像 421
22 控制器局域网(bxCAN) 423
22.1 bxCAN简介 423
22.2 bxCAN主要特点 423
22.3 bxCAN总体描述 424
22.3.1 CAN 2.0B主动内核 424
22.3.2 控制、状态和配置寄存器 424
22.3.3 发送邮箱 424
22.3.4 接收过滤器 424
22.4 bxCAN工作模式 426
22.4.1 初始化模式 426
22.4.2 正常模式 426
22.4.3 睡眠模式(低功耗) 426
17/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
22.5 测试模式 427
22.5.1 静默模式 427
22.5.2 环回模式 427
22.5.3 环回静默模式 428
22.6 STM32F10xxx处于调试模式时 428
22.7 bxCAN功能描述 428
22.7.1 发送处理 428
22.7.2 时间触发通信模式 430
22.7.3 接收管理 430
22.7.4 标识符过滤 431
22.7.5 报文存储 434
22.7.6 出错管理 435
22.7.7 位时间特性 436
22.8 bxCAN中断 438
22.9 CAN 寄存器描述 439
22.9.1 寄存器访问保护 439
22.9.2 CAN控制和状态寄存器 439
22.9.3 CAN邮箱寄存器 447
22.9.4 CAN过滤器寄存器 451
22.9.5 bxCAN寄存器列表 454
23 串行外设接口(SPI) 457
23.1 SPI简介 457
23.2 SPII2S主要特征 457
23.2.1 SPI特征 457
23.2.2 I2S功能 458
23.3 SPI功能描述 459
23.3.1 概述 459
23.3.2 配置SPI为从模式 462
23.3.3 配置SPI为主模式 462
23.3.4 配置SPI为单工通信 463
23.3.5 数据发送与接收过程 463
23.3.6 CRC计算 468
23.3.7 状态标志 469
23.3.8 关闭SPI 470
23.3.9 利用DMASPI通信 470
23.3.10 错误标志 472
23.3.11 SPI中断 472
23.4 I2S功能描述 473
23.4.1 I2S功能描述 473
23.4.2 支持的音频协议 474
23.4.3 时钟发生器 479
23.4.4 I2S主模式 482
23.4.5 I2S从模式 483
23.4.6 状态标志位 484
23.4.7 错误标志位 485
23.4.8 I2S中断 485
23.4.9 DMA功能 485
23.5 SPII2S寄存器描述 486
18/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
23.5.1 SPI控制寄存器1(SPI_CR1)(I2S模式下不使用) 486
23.5.2 SPI控制寄存器2(SPI_CR2) 487
23.5.3 SPI 状态寄存器(SPI_SR) 488
23.5.4 SPI 数据寄存器(SPI_DR) 489
23.5.5 SPI CRC多项式寄存器(SPI_CRCPR)(I2S模式下不使用) 489
23.5.6 SPI Rx CRC寄存器(SPI_RXCRCR)(I2S模式下不使用) 490
23.5.7 SPI Tx CRC寄存器(SPI_TXCRCR) 490
23.5.8 SPI_I2S配置寄存器(SPI_I2S_CFGR) 490
23.5.9 SPI_I2S预分频寄存器(SPI_I2SPR) 491
23.5.10 SPI 寄存器地址映象 492
24 I2C接口 493
24.1 I2C简介 493
24.2 I2C主要特点 493
24.3 I2C功能描述 494
24.3.1 模式选择 494
24.3.2 I2C从模式 495
24.3.3 I2C主模式 497
24.3.4 错误条件 499
24.3.5 SDA/SCL线控制 500
24.3.6 SMBus 501
24.3.7 DMA请求 502
24.3.8 包错误校验(PEC) 503
24.4 I2C中断请求 504
24.5 I2C调试模式 505
24.6 I2C寄存器描述 505
24.6.1 控制寄存器1(I2C_CR1) 505
24.6.2 控制寄存器2(I2C_CR2) 507
24.6.3 自身地址寄存器1(I2C_OAR1) 508
24.6.4 自身地址寄存器2(I2C_OAR2) 509
24.6.5 数据寄存器(I2C_DR) 509
24.6.6 状态寄存器1(I2C_SR1) 510
24.6.7 状态寄存器2 (I2C_SR2) 512
24.6.8 时钟控制寄存器(I2C_CCR) 513
24.6.9 TRISE寄存器(I2C_TRISE) 514
24.6.10 I2C寄存器地址映象 515
25 通用同步异步收发器(USART) 516
25.1 USART介绍 516
25.2 USART主要特性 516
25.3 USART功能概述 517
25.3.1 USART 特性描述 518
25.3.2 发送器 519
25.3.3 接收器 521
25.3.4 分数波特率的产生 524
25.3.5 USART接收器容忍时钟的变化 525
25.3.6 多处理器通信 526
25.3.7 校验控制 527
25.3.8 LIN(局域互联网)模式 528
25.3.9 USART 同步模式 530
25.3.10 单线半双工通信 532
19/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
25.3.11 智能卡 532
25.3.12 IrDA SIR ENDEC 功能模块 533
25.3.13 利用DMA连续通信 535
25.3.14 硬件流控制 537
25.4 USART中断请求 538
25.5 USART模式配置 539
25.6 USART寄存器描述 540
25.6.1 状态寄存器(USART_SR) 540
25.6.2 数据寄存器(USART_DR) 541
25.6.3 波特比率寄存器(USART_BRR) 542
25.6.4 控制寄存器1(USART_CR1) 542
25.6.5 控制寄存器2(USART_CR2) 544
25.6.6 控制寄存器3(USART_CR3) 545
25.6.7 保护时间和预分频寄存器(USART_GTPR) 546
25.6.8 USART寄存器地址映象 548
26 USB OTG全速(OTG_FS) 549
26.1 OTG模块介绍 549
26.2 OTG_FS主要功能 549
26.2.1 通用功能 549
26.2.2 主机模式功能 550
26.2.3 设备模式功能 550
26.3 OTG_FS功能描述 551
26.3.1 OTG全速控制器 551
26.3.2 全速OTG PHY(物理接口) 551
26.4 OTG双角色设备(DRD) 552
26.4.1 ID信号检测 552
26.4.2 HNP双角色设备 552
26.4.3 SRP双角色设备 553
26.5 USB设备模式 553
26.5.1 具备SRP功能的设备 553
26.5.2 设备状态 554
26.5.3 设备端点 554
26.6 USB主机 556
26.6.1 具备SRP功能的主机 556
26.6.2 USB主机状态 557
26.6.3 主机通道 558
26.6.4 主机调度器 558
26.7 SOF触发 560
26.7.1 主机SOF 560
26.7.2 设备SOF 560
26.8 供电选项 560
26.9 USB数据FIFO 562
26.10 设备模式下的FIFO结构 563
26.10.1 设备模式下的接收FIFO 563
26.10.2 设备模式下的发送FIFO 563
26.11 主机模式下的FIFO结构 564
26.11.1 主机模式下的接收FIFO 564
20/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
26.11.2 主机模式下的发送FIFO 564
26.12 USB系统性能 565
26.13 OTG_FS中断 566
26.14 OTG_FS控制和状态寄存器 566
26.14.1 CSR存储器映像 567
26.14.2 OTG_FS全局寄存器 570
26.14.3 主机模式下的寄存器 585
26.14.4 设备模式下的寄存器 593
26.14.5 OTG_FS电源和时钟门控寄存器(OTG_FS_PCGCCTL) 608
26.14.6 OTG_FS寄存器映像 610
26.15 OTG_FS编程规则 617
26.15.1 控制器初始化 617
26.15.2 主机模式下的初始化 617
26.15.3 设备模式下的初始化 617
26.15.4 主机模式下的编程规则 618
26.15.5 设备模式下的编程规则 632
26.15.6 操作流程 633
26.15.7 最差情况下的响应时间 646
26.15.8 OTG编程规则 648
27 以太网(ETH):具有DMA控制器的介质访问控制(MAC) 652
27.1 以太网模块介绍 652
27.2 以太网模块主要功能 652
27.2.1 MAC控制器功能 652
27.2.2 DMA功能 653
27.2.3 PTP功能 654
27.3 以太网模块引脚和内部信号 654
27.4 以太网模块功能描述:SMIMIIRMII 655
27.4.1 站点管理接口(SMI) 655
27.4.2 独立于介质的接口:MII 657
27.4.3 精简的独立于介质的接口:RMII 659
27.4.4 MII/RMII的选择 660
27.5 以太网模块功能描述:MAC 802.3 660
27.5.1 MAC 802.3帧格式 661
27.5.2 MAC帧的传输 663
27.5.3 MAC帧的接收 669
27.5.4 MAC中断 673
27.5.5 MAC过滤 673
27.5.6 MAC自循环模式 675
27.5.7 MAC管理计数器:MMC 675
27.5.8 电源管理:PMT 676
27.5.9 精确时间协议(IEEE1588 PTP) 678
27.6 以太网功能描述:DMA控制器操作 682
27.6.1 使用DMA发送的初始化步骤 683
27.6.2 主机总线突发访问 683
27.6.3 主机数据缓存对齐 684
27.6.4 缓冲区大小计算 684
27.6.5 DMA仲裁器 684
27.6.6 DMA错误响应 684
21/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
27.6.7 发送DMA设置 684
27.6.8 接收DMA设置 694
27.6.9 DMA中断 700
27.7 以太网中断 701
27.8 以太网寄存器描述 702
27.8.1 MAC寄存器描述 702
27.8.2 MMC寄存器描述 713
27.8.3 IEEE 1588时间戳寄存器 716
27.8.4 DMA寄存器描述 719
27.8.5 以太网寄存器映像 729
28 器件电子签名 732
28.1 存储器容量寄存器 732
28.1.1 闪存容量寄存器 732
28.2 产品唯一身份标识寄存器(96) 732
29 调试支持(DBG) 734
29.1 概况 734
29.2 ARM参考文献 735
29.3 SWJ调试端口(serial wire and JTAG) 735
29.3.1 JTAG-DPSW-DP切换的机制 736
29.4 引脚分布和调试端口脚 736
29.4.1 SWJ调试端口脚 736
29.4.2 灵活的SWJ-DP脚分配 736
29.4.3 JTAG脚上的内部上拉和下拉 737
29.4.4 利用串行接口并释放不用的调试脚作为普通I/O 737
29.5 STM32F10xxx JTAG TAP 连接 738
29.6 ID 代码和锁定机制 738
29.6.1 微控制器设备ID编码 738
29.6.2 边界扫描TAP 739
29.6.3 Cortex-M3 TAP 740
29.6.4 Cortex-M3 JEDEC-106 ID代码 740
29.7 JTAG调试端口 740
29.8 SW调试端口 741
29.8.1 SW协议介绍 741
29.8.2 SW协议序列 741
29.8.3 SW-DP状态机(Reset, idle states, ID code) 742
29.8.4 DPAP/写访问 742
29.8.5 SW-DP寄存器 742
29.8.6 SW-AP寄存器 743
29.9 对于JTAG-DPSWDP都有效的AHB-AP (AHB 访问端口) 743
29.10 内核调试 744
29.11 调试器主机在系统复位下的连接能力 744
29.12 FPB (Flash patch breakpoint) 744
29.13 DWT(数据观察点触发data watchpoint trigger) 745
29.14 ITM (指令跟踪微单元 instrumentation trace macrocell) 745
29.14.1 概述 745
29.14.2 时间戳包,同步和溢出包 745
22/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
目录 STM32F10xxx参考手册
23/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
29.15 ETM模块(嵌入式跟踪微单元Embedded Trace Macrocell) 746
29.15.1 概述 746
29.15.2 信号协议和包类型 746
29.15.3 主要的ETM寄存器 747
29.15.4 配置实例 747
29.16 MCU调试模块(MCUDBG) 747
29.16.1 低功耗模式的调试支持 747
29.16.2 支持定时器、看门狗、bxCANI2C的调试 747
29.16.3 调试MCU配置寄存器 748
29.17 TPIU (跟踪端口接口单元 Trace Port Interface Unit) 750
29.17.1 导言 750
29.17.2 跟踪引脚分配 750
29.17.3 TPUI格式器 752
29.17.4 TPUI帧异步包 752
29.17.5 同步帧包的发送 752
29.17.6 同步模式 752
29.17.7 异步模式 753
29.17.8 TRACECLKINSTM32F10xxx内部的连接 753
29.17.9 TPIU寄存器 753
29.17.10 配置的例子 754
29.18 DBG寄存器地址映象 754
存储器和总线架构 STM32F10xxx参考手册
1 文中的缩写
1.1 寄存器描述表中使用的缩写列表
在对寄存器的描述中使用了下列缩写:
read / write (rw) 软件能读写此位。
read-only (r) 软件只能读此位。
write-only (w) 软件只能写此位,读此位将返回复位值。
read/clear (rc_w1) 软件可以读此位,也可以通过写’1’清除此位,写’0’对此位无影响。
read / clear (rc_w0) 软件可以读此位,也可以通过写’0’清除此位,写’1’对此位无影响。
read / clear by read (rc_r) 软件可以读此位;读此位将自动地清除它为’0’,写’0’对此位无影响。
read / set (rs) 软件可以读也可以设置此位,写’0’对此位无影响。
read-only write trigger (rt_w) 软件可以读此位;写’0’’1’触发一个事件但对此位数值没有影响。
toggle (t) 软件只能通过写’1’来翻转此位,写’0’对此位无影响。
Reserved(Res.) 保留位,必须保持默认值不变
1.2 术语表
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx
微控制器。
互联型产品STM32F105xxSTM32F107xx微控制器。
1.3 可用的外设
有关STM32微控制器系列全部型号中,某外设存在与否及其数目,请查阅相应的小容量、中容
量或者大容量STM32F101xxSTM32F103xx以及小容量和中容量STM32F102xx数据手册,
以及STM32F105xx/STM32F107xx数据手册。
24/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
存储器和总线架构 STM32F10xxx参考手册
2 存储器和总线构架
2.1 系统构架
在小容量、中容量和 大容量产品中,主系统由以下部分构成:
四个驱动单元:
Cortex™-M3内核DCode总线(D-bus),和系统总线(S-bus)
通用DMA1和通用DMA2
四个被动单元
内部SRAM
内部闪存存储器
FSMC
AHBAPB的桥(AHB2APBx),它连接所有的APB设备
25/754
这些都是通过一个多级的AHB总线构架相互连接的,如下图图1所示:
1 系统结构
在互联型产品中,主系统由以下部分构成:
五个驱动单元:
Cortex™-M3内核DCode总线(D-bus),和系统总线(S-bus)
通用DMA1和通用DMA2
以太网DMA
三个被动单元
内部SRAM
内部闪存存储器
AHBAPB的桥(AHB2APBx),它连接所有的APB设备
这些都是通过一个多级的AHB总线构架相互连接的,如图2所示:
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
存储器和总线架构 STM32F10xxx参考手册
2 互联型产品的系统结构
ICode总线
该总线将Cortex™-M3内核的指令总线与闪存指令接口相连接。指令预取在此总线上完成。
DCode总线
该总线将Cortex™-M3内核的DCode总线与闪存存储器的数据接口相连(常量加载和调试访
)
系统总线
此总线连接Cortex™-M3内核的系统总线(外设总线)到总线矩阵,总线矩阵协调着内核和DMA
的访问。
DMA总线
此总线将DMAAHB主控接口与总线矩阵相联,总线矩阵协调着CPUDCodeDMA
SRAM、闪存和外设的访问。
总线矩阵
总线矩阵协调内核系统总线和DMA主控总线之间的访问仲裁,仲裁利用轮换算法。在互联型
品中,总线矩阵包含5个驱动部件(CPUDCode、系统总线、以太网DMADMA1总线和
DMA2总线)3个从部件(闪存存储器接口(FLITF)SRAMAHB2APB)。在其它产品中总线
矩阵包含4个驱动部件(CPUDCode系统总线、DMA1总线和DMA2总线)和4个被动部件(闪存
存储器接口(FLITF)SRAMFSMCAHB2APB)
AHB外设通过总线矩阵与系统总线相连,允许DMA访问。
26/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
存储器和总线架构 STM32F10xxx参考手册
AHB/APB(APB)
两个AHB/APB桥在AHB2APB总线间提供同步连接。APB1操作速度限于36MHzAPB2
作于全速(最高72MHz)
1有关连接到每个桥的不同外设的地址映射请参考 。在每一次复位以后,所有除SRAM
FLITF以外的外设都被关闭,在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外
设的时钟。
注意:
当对
APB
寄存器进行
8
位或者
16
位访问时,该访问会被自动转换成
32
位的访问:桥会自动将
8
或者
32
位的数据扩展以配合
32
位的向量。
2.2 存储器组织
程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。
数据字节以小端格式存放在存储器中。一个字里的最低地址字节被认为是该字的最低有效
节,而最高地址字节是最高有效字节。
外设寄存器的映像请参考相关章节。
可访问的存储器空间被分成8个主要块,每个块为512MB
其他所有没有分配给片上存储器和外设的存储器空间都是保留的地址空间,请参考相应器件的
数据手册中的存储器映像图。
27/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
存储器和总线架构 STM32F10xxx参考手册
2.3 存储器映像
1请参考相应器件的数据手册中的存储器映像图。 列出了所用STM32F10xxx中内置外设的起
始地址。
1 寄存器组起始地址
起始地址 外设 总线 寄存器映像
0x5000 0000 – 0x5003 FFFF USB OTG 全速
28/754
参见26.14.6
0x4003 0000 – 0x4FFF FFFF
保留 AHB
0x4002 8000 – 0x4002 9FFF 以太网 参见27.8.5
0x4002 3400 - 0x4002 3FFF
保留
0x4002 3000 - 0x4002 33FF CRC 参见3.4.4
0x4002 2000 - 0x4002 23FF
闪存存储器接口
0x4002 1400 - 0x4002 1FFF
保留
0x4002 1000 - 0x4002 13FF 复位和时钟控制(RCC) 参见6.3.11
0x4002 0800 - 0x4002 0FFF 保留
AHB
0x4002 0400 - 0x4002 07FF DMA2 参见10.4.7
0x4002 0000 - 0x4002 03FF DMA1 参见10.4.7
0x4001 8400 - 0x4001 7FFF
保留
0x4001 8000 - 0x4001 83FF SDIO 参见20.9.16
0x4001 4000 - 0x4001 7FFF
保留
0x4001 3C00 - 0x4001 3FFF ADC3 参见11.12.15
0x4001 3800 - 0x4001 3BFF USART1 参见25.6.8
0x4001 3400 - 0x4001 37FF TIM8定时器 参见13.4.21
0x4001 3000 - 0x4001 33FF SPI1 参见23.5
0x4001 2C00 - 0x4001 2FFF TIM1定时器 参见13.4.21
0x4001 2800 - 0x4001 2BFF ADC2 参见11.12.15
0x4001 2400 - 0x4001 27FF ADC1 参见11.12.15
0x4001 2000 - 0x4001 23FF GPIO端口G 参见8.5
APB2
0x4001 2000 - 0x4001 23FF GPIO端口F 参见8.5
0x4001 1800 - 0x4001 1BFF GPIO端口E 参见8.5
0x4001 1400 - 0x4001 17FF GPIO端口D 参见8.5
0x4001 1000 - 0x4001 13FF GPIO端口C 参见8.5
0X4001 0C00 - 0x4001 0FFF GPIO端口B 参见8.5
0x4001 0800 - 0x4001 0BFF GPIO端口A 参见8.5
0x4001 0400 - 0x4001 07FF EXTI 参见9.3.7
0x4001 0000 - 0x4001 03FF AFIO 参见8.5
0x4000 7800 - 0x4000FFFF
保留 APB1
0x4000 7400 - 0x4000 77FF DAC 参见12.5.14
0x4000 7000 - 0x4000 73FF 电源控制(PWR) 参见4.4.3
0x4000 6C00 - 0x4000 6FFF 后备寄存器(BKP) 参见5.4.5
0x4000 6800 - 0x4000 6BFF bxCAN2 参见22.9.5
0x4000 6400 - 0x4000 67FF bxCAN1 参见22.9.5
0x4000 6000(1) - 0x4000 63FF
USB/CAN共享的512字节SRAM
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
存储器和总线架构 STM32F10xxx参考手册
0x4000 5C00 - 0x4000 5FFF USB全速设备寄存器
29/754
参见21.5.4
0x4000 5800 - 0x4000 5BFF I2C2 参见24.6.10
0x4000 5400 - 0x4000 57FF I2C1 参见24.6.10
0x4000 5000 - 0x4000 53FF UART5 参见25.6.8
0x4000 4C00 - 0x4000 4FFF UART4 参见25.6.8
0x4000 4800 - 0x4000 4BFF USART3 参见25.6.8
0x4000 4400 - 0x4000 47FF USART2 参见25.6.8
0x4000 4000 - 0x4000 3FFF
保留
0x4000 3C00 - 0x4000 3FFF SPI3/I2S3 参见23.5
0x4000 3800 - 0x4000 3BFF SPI2/I2S3 参见23.5
0x4000 3400 - 0x4000 37FF
保留
0x4000 3000 - 0x4000 33FF 独立看门狗(IWDG) 参见17.4.5
0x4000 2C00 - 0x4000 2FFF 窗口看门狗(WWDG) 参见18.6.4
0x4000 2800 - 0x4000 2BFF RTC 参见16.4.7
0x4000 1800 - 0x4000 27FF
保留
0x4000 1400 - 0x4000 17FF TIM7定时器 参见15.4.9
0x4000 1000 - 0x4000 13FF TIM6定时器 参见15.4.9
0x4000 0C00 - 0x4000 0FFF TIM5定时器 参见14.4.19
0x4000 0800 - 0x4000 0BFF TIM4定时器 参见14.4.19
0x4000 0400 - 0x4000 07FF TIM3定时器 参见14.4.19
0x4000 0000 - 0x4000 03FF TIM2定时器 参见14.4.19
1.只在小容量、中容量和大容量的产品中才有这个共享的SRAM区域,互联型产品中没有这个区域。
2.3.1 嵌入式SRAM
STM32F10xxx内置64K字节的静态SRAM。它可以以字节、半字(16)或全字(32)访问。
SRAM的起始地址是0x2000 0000
2.3.2 位段
Cortex™-M3存储器映像包括两个位段(bit-band)区。这两个位段区将别名存储器区中的每个字
映射到位段存储器区的一个位,在别名存储区写入一个字具有对位段区的目标位执行读--写操
作的相同效果。
STM32F10xxx里,外设寄存器和SRAM都被映射到一个位段区里,这允许执行单一的位段
写和读操作。
下面的映射公式给出了别名区中的每个字是如何对应位带区的相应位的:
bit_word_addr = bit_band_base + (byte_offset×32) + (bit_number×4)
其中:
bit_word_addr是别名存储器区中字的地址,它映射到某个目标位。
bit_band_base是别名区的起始地址。
byte_offset是包含目标位的字节在位段里的序号
bit_number是目标位所在位置(0-31)
例子:
下面的例子说明如何映射别名区中SRAM地址为0x20000300的字节中的位2
0x22006008 = 0x22000000 + (0x300×32) + (2×4).
0x22006008地址的写操作与对SRAM中地址0x20000300节的位2执行读--写操作有着相
同的效果。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
存储器和总线架构 STM32F10xxx参考手册
0x22006008地址返回SRAM中地址0x20000300字节的位2的值(0x01 0x00)
请参考《Cortex™-M3技术参考手册》以了解更多有关位段的信息。
2.3.3 嵌入式闪存
高性能的闪存模块有以下的主要特性:
高达512K字节闪存存储器结构:闪存存储器有主存储块和信息块组成:
主存储块容量:
小容量产品主存储块最大为4K×64位,每个存储块划分为321K字节的页(见表2)
中容量产品主存储块最大为16K×64位,每个存储块划分为1281K字节的页(见表3)
大容量产品主存储块最大为64K×64位,每个存储块划分为2562K字节的页(见表4)
互联型产品主存储块最大为32K×64位,每个存储块划分为1282K字节的页(见表5)
信息块容量:
互联型产品有2360×64(见表5)
其它产品有258×64(见表2
30/754
、表34)
闪存存储器接口的特性为:
带预取缓冲器的读接口(每字为2×64)
选择字节加载器
闪存编程/擦除操作
访问/写保护
2 闪存模块的组织(小容量产品)
模块 名称 地址 大小(字节)
0x0800 0000 - 0x0800 03FF 0 1K
0x0800 0400 - 0x0800 07FF 1 1K
0x0800 0800 - 0x0800 0BFF 2 1K
0x0800 0C00 - 0x0800 0FFF 3 1K
4 0x0800 1000 - 0x0800 13FF 1K
主存储块
0x0800 7C00 - 0x0800 7FFF
31 1K
0x1FFF F000 - 0x1FFF F7FF 系统存储器 2K
信息块 0x1FFF F800 - 0x1FFF F80F 16 选择字节
0x4002 2000 - 0x4002 2003 FLASH_ACR 4
0x4002 2004 - 0x4002 2007 FALSH_KEYR 4
0x4002 2008 - 0x4002 200B FLASH_OPTKEYR 4
0x4002 200C - 0x4002 200F FLASH_SR 4
FLASH_CR 0x4002 2010 - 0x4002 2013 4
闪存存储器
FLASH_AR 0x4002 2014 - 0x4002 2017 4
接口寄存器
0x4002 2018 - 0x4002 201B 4
保留
0x4002 201C - 0x4002 201F FLASH_OBR 4
0x4002 2020 - 0x4002 2023 FLASH_WRPR 4
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
存储器和总线架构 STM32F10xxx参考手册
3 闪存模块的组织(中容量产品)
模块 名称 地址 大小(字节)
0x0800 0000 - 0x0800 03FF 0 1K
0x0800 0400 - 0x0800 07FF 1 1K
0x0800 0800 - 0x0800 0BFF 2 1K
0x0800 0C00 - 0x0800 0FFF 3 1K
31/754
4 0x0800 1000 - 0x0800 13FF 1K
主存储块
0x0801 FC00 - 0x0801 FFFF
127 1K
0x1FFF F000 - 0x1FFF F7FF 系统存储器 2K
信息块 0x1FFF F800 - 0x1FFF F80F 16 选择字节
0x4002 2000 - 0x4002 2003 FLASH_ACR 4
0x4002 2004 - 0x4002 2007 FALSH_KEYR 4
0x4002 2008 - 0x4002 200B FLASH_OPTKEYR 4
0x4002 200C - 0x4002 200F FLASH_SR 4
FLASH_CR 0x4002 2010 - 0x4002 2013 4
闪存存储器
FLASH_AR 0x4002 2014 - 0x4002 2017 4
接口寄存器
0x4002 2018 - 0x4002 201B 4
保留
0x4002 201C - 0x4002 201F FLASH_OBR 4
0x4002 2020 - 0x4002 2023 FLASH_WRPR 4
4 闪存模块的组织(大容量产品)
模块 名称 地址 大小(字节)
0x0800 0000 - 0x0800 07FF 0 2K
0x0800 0800 - 0x0800 0FFF 1 2K
0x0800 1000 - 0x0800 17FF 2 2K
3 0x0800 1800 - 0x0800 1FFF 2K
主存储块
0x0807 F800 - 0x0807 FFFF
255 2K
0x1FFF F000 - 0x1FFF F7FF 系统存储器 2K
信息块 0x1FFF F800 - 0x1FFF F80F 16 选择字节
0x4002 2000 - 0x4002 2003 FLASH_ACR 4
0x4002 2004 - 0x4002 2007 FALSH_KEYR 4
0x4002 2008 - 0x4002 200B FLASH_OPTKEYR 4
0x4002 200C - 0x4002 200F FLASH_SR 4
FLASH_CR 0x4002 2010 - 0x4002 2013 4
闪存存储器
FLASH_AR 0x4002 2014 - 0x4002 2017 4
接口寄存器
0x4002 2018 - 0x4002 201B 4
保留
0x4002 201C - 0x4002 201F FLASH_OBR 4
0x4002 2020 - 0x4002 2023 FLASH_WRPR 4
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
存储器和总线架构 STM32F10xxx参考手册
5 闪存模块的组织(互联型产品)
模块 名称 地址 大小(字节)
0x0800 0000 - 0x0800 07FF 0 2K
0x0800 0800 - 0x0800 0FFF 1 2K
0x0800 1000 - 0x0800 17FF 2 2K
32/754
3 0x0800 1800 - 0x0800 1FFF 2K
主存储块
0x0803 F800 - 0x0803 FFFF
127 2K
0x1FFF B000 - 0x1FFF F7FF 系统存储器 18K
信息块 0x1FFF F800 - 0x1FFF F80F 16 选择字节
0x4002 2000 - 0x4002 2003 FLASH_ACR 4
0x4002 2004 - 0x4002 2007 FALSH_KEYR 4
0x4002 2008 - 0x4002 200B FLASH_OPTKEYR 4
0x4002 200C - 0x4002 200F FLASH_SR 4
FLASH_CR 0x4002 2010 - 0x4002 2013 4
闪存存储器
FLASH_AR 0x4002 2014 - 0x4002 2017 4
接口寄存器
0x4002 2018 - 0x4002 201B 4
保留
0x4002 201C - 0x4002 201F FLASH_OBR 4
0x4002 2020 - 0x4002 2023
FLASH_WRPR 4
注:
有关闪存寄存器的详细信息,请参考《
STM32F10xxx
闪存编程手册
闪存读取
闪存的指令和数据访问是通过AHB总线完成的。预取模块是用于通过ICode总线读取指令的。仲
裁是作用在闪存接口,并且DCode总线上的数据访问优先。
读访问可以有以下配置选项:
等待时间:可以随时更改的用于读取操作的等待状态的数量。
预取缓冲区(264):在每一次复位以后被自动打开,由于每个缓冲区的大小(64)与闪
存的带宽相同,因此只通过需一次读闪存的操作即可更新整个缓冲区的内容。由于预取缓
冲区的存在,CPU可以工作在更高的主频。CPU每次取指最多为32位的字,取一条指令
时,下一条指令已经在缓冲区中等待。
半周期:用于功耗优化。
注:
1.
这些选项应与闪存存储器的访问时间一起使用。等待周期体现了系统时钟
(SYSCLK)
频率与闪
存访问时间的关系:
0
等待周期,当
0 < SYSCLK < 24MHz
1
等待周期,当
24MHz < SYSCLK
48MHz
2
等待周期,当
48MHz < SYSCLK
72MHz
2 .
半周期配置不能与使用了预分频器的
AHB
一起使用,时钟系统应该等于
HCLK
时钟。该特性
只能用在时钟频率为
8MHz
或低于
8MHz
时,可以直接使用的内部
RC
振荡器
(HSI)
,或者是主振
荡器
(HSE)
,但不能用
PLL
3.
AHB
预分频系数不为
1
时,必须置预取缓冲区处于开启状态。
4.
只有在系统时钟
(SYSCLK)
小于
24MHz
并且没有打开
AHB
的预分频器
(
HCLK
必须等于
SYSHCLK)
时,才能执行预取缓冲器的打开和关闭操作。一般而言,在初始化过程中执行预取
缓冲器的打开和关闭操作,这时微控制器的时钟由
8MHz
的内部
RC
振荡器
(HSI)
提供。
5.
使用
DMA
DMA
DCode
总线上访问闪存存储器,它的优先级比
ICode
上的取指高。
DMA
每次传送完成后具有一个空余的周期。有些指令可以和
DMA
传输一起执行。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
存储器和总线架构 STM32F10xxx参考手册
33/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
编程和擦除闪存
闪存编程一次可以写入16(半字)
闪存擦除操作可以按页面擦除或完全擦除(全擦除)。全擦除不影响信息块。
为了确保不发生过度编程, 闪存编程和擦除控制器块是由一个固定的时钟控制的。
写操作(编程或擦除)结束时可以触发中断。仅当闪存控制器接口时钟开启时,此中断可以用来
WFI模式退出。
注:
有关闪存存储器的操作和寄存器配置,请参考
STM32F10xxx
闪存编程手册。
2.4 启动配置
STM32F10xxx里,可以通过BOOT[1:0]引脚选择三种不同启动模式。
6 启动模式
启动模式选择引脚
BOOT1 BOOT0 启动模式 说明
X 0 主闪存存储器 主闪存存储器被选为启动区域
0 1 系统存储器 系统存储器被选为启动区域
1 1 内置SRAM 内置SRAM被选为启动区域
在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1
BOOT0引脚的状态,来选择在复位后的启动模式。
在从待机模式退出时,BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持
为需要的启动配置。在启动延迟之后,CPU从地址0x0000 0000获取堆栈顶的地址,并从启动
存储器的0x0000 0004指示的地址开始执行代码。
因为固定的存储器映像,代码区始终从地址0x0000 0000开始(通过ICodeDCode总线访问)
而数据区(SRAM)始终从地址0x2000 0000开始(通过系统总线访问)Cortex-M3CPU始终从
ICode总线获取复位向量,即启动仅适合于从代码区开始(典型地从Flash启动)STM32F10xxx
微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从
内置SRAM启动。
根据选定的启动模式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问:
从主闪存存储器启动:主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原
有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问,0x0000
00000x0800 0000
从系统存储器启动:系统存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的
地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为0x1FFF F000)访问它。
从内置SRAM启动:只能在0x2000 0000开始的地址区访问SRAM
注意: 当从内置
SRAM
启动,在应用程序的初始化代码中,必须使用
NVIC
的异常表和偏移寄存器,从
新映射向量表之
SRAM
中。
内嵌的自举程序
内嵌的自举程序存放在系统存储区,由ST在生产线上写入,用于通过可用的串行接口对闪存
储器进行重新编程:
对于小容量、中容量和大容量的产品而言,可以通过USART1接口启用自举程序。进一步的
细节请查询AN2606
对于互联型产品而言,可以通过以下某个接口启用自举程序:USART1USART2(重映像
)CAN2(重映像的)USB OTG全速接口的设备模式(通过设备固件更新DFU协议)
USART接口依靠内部8MHz振荡器(HSI)运行。CANUSB OTG接口只能当外部有一个
8MHz14.7456MHz25MHz时钟(HSE)时运行。进一步的细节请查询AN2606
CRC计算单元(CRC) STM32F10xxx参考手册
3 CRC计算单元(CRC)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
3.1 CRC简介
循环冗余校验(CRC)计算单元是根据固定的生成多项式得到任一32位全字的CRC算结果。
在其他的应用中, CRC技术主要应用于核实数据传输或者数据存储的正确性和完整性。标准
EN/IEC 60335-1即提供了一种核实闪存存储器完整性的方法。CRC算单元可以在程序运行时
计算出软件的标识,之后与在连接时生成的参考标识比较,然后存放在指定的存储器空间。
3.2 CRC主要特性
使用CRC-32(以太网)多项式:0x4C11DB7
X
32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 + X8 + X7 + X4 + X2 + X +1
一个32位数据寄存器用于输入 / 输出
CRC计算时间:4AHB时钟周期(HCLK)
通用8位寄存器(可用于存放临时数据)
下图为CRC计算单元框图
3 CRC 计算单元框图
3.3 CRC功能描述
CRC计算单元含有132位数据寄存器:
对该寄存器进行写操作时,作为输入寄存器,可以输入要进行CRC计算的新数据。
对该寄存器进行读操作时,返回上一次CRC计算的结果。
每一次写入数据寄存器,其计算结果是前一次CRC计算结果和新计算结果的组合(对整个32位字
进行CRC计算,而不是逐字节地计算)
34/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
CRC计算单元(CRC) STM32F10xxx参考手册
CRC计算期间会暂停CPU的写操作,因此可以对寄存器CRC_DR进行背靠背写入或者连续地
-读操作。
可以通过设置寄存器CRC_CRRESET位来重置寄存器CRC_DR0xFFFF FFFF。该操作不
影响寄存器CRC_IDR内的数据。
3.4 CRC寄存器
CRC计算单元包括2个数据寄存器和1个控制寄存器
3.4.1 数据寄存器(CRC_DR)
地址偏移:0x00
复位值:0xFFFF FFFF
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
DR[31:16]
DR[15:0]
31: 0 数据寄存器位
写入CRC计算器的新数据时,作为输入寄存器
读取时返回CRC计算的结果
3.4.2 独立数据寄存器(CRC_IDR)
地址偏移:0x04
复位值:0x0000 0000
1514131211109876543210
rw rw rw rw rw rw rw rw
保留 IDR[7:0]
31:8 保留。
7:0 通用8位数据寄存器位
可用于临时存放1字节的数据。
寄存器CRC_CRRESET位产生的CRC复位对本寄存器没有影响
译注:此寄存器不参与CRC计算,可以存放任何数据。
35/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
CRC计算单元(CRC) STM32F10xxx参考手册
36/754
参照200912 RM0008 Reference Manual 英文第10
3.4.3 控制寄存器(CRC_CR)
地址偏移:0x08
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
RESET
保留
保留
w
31:1 保留。
0 RESET
复位CRC计算单元,设置数据寄存器为0xFFFF FFFF
只能对该位写’1’,它由硬件自动清’0’
3.4.4 CRC寄存器映像
下表列出了CRC的寄存器映像和复位值
7 CRC 计算单元寄存器映像和复位值
偏移 寄存器 31~24 23~16 15~8 76543210
CRC_DR
复位值
CRC_IDR
复位值
CRC_CR RESET
复位值 0
保留
0
0x00
0x08
0x04
数据寄存器
保留 独立的数据寄存
0xFFFF FFFF
0x00
保留
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
电源控制(PWR) STM32F10xxx参考手册
4 电源控制(PWR)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
4.1 电源
STM32的工作电压(VDD)2.03.6V。通过内置的电压调节器提供所需的1.8V电源。
当主电源VDD掉电后,通过VBAT脚为实时时钟(RTC)和备份寄存器提供电源。
4 电源框图
注:
V
DDA
VSSA
必须分别联到
VDD
VSS
4.1.1 独立的A/D转换器供电和参考电压
为了提高转换的精确度,ADC使用一个独立的电源供电,过滤和屏蔽来自印刷电路板上的毛
干扰。
ADC的电源引脚为VDDA
独立的电源地VSSA
如果有VREF-引脚(根据封装而定),它必须连接到VSSA
37/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
电源控制(PWR) STM32F10xxx参考手册
100脚和144脚封装:
为了确保输入为低压时获得更好精度,用户可以连接一个独立的外部参考电压ADCVREF+
VREF-脚上。在VREF+的电压范围为2.4VVDDA
64脚或更少封装:
没有VREF+VREF-引脚,他们在芯片内部与ADC的电源(VDDA)和地(VSSA)相联。
4.1.2 电池备份区域
使用电池或其他电源连接到VBAT脚上,当VDD断电时,可以保存备份寄存器的内容和维持RTC
功能。
VBAT脚也为RTCLSE振荡器和PC13PC15供电,这保证当主要电源被切断时RTC能继续工
作。切换到VBAT供电由复位模块中的掉电复位功能控制。
如果应用中没有使用外部电池,VBAT必须连接到VDD引脚上。
注意:
VDD上升阶段(tRSTTEMPO)或者探测到PVD之后,VBATVDD之间的电源开关仍会保持连接在
VBAT。在VDD上升阶段,如果VDD在小于tRSTTEMPO的时间内达到稳定状态(关于tRSTTEMPO可参考数
据手册中的相关部分),且VDD > VBAT + 0.6V时,电流可能通过VDDVBAT之间的内部二极管注
入到VBAT
如果与VBAT连接的电源或者电池不能承受这样的注入电流,强烈建议在外部VBAT和电源之间连
接一个低压降二极管。
如果在应用中没有外部电池,建议VBAT在外部通过一个100nF的陶瓷电容与VDD相连,更多细节
参阅AN2586
当备份区域由VDD(内部模拟开关连到VDD)供电时,下述功能可用:
PC14PC15可以用于GPIOLSE引脚
5 PC13可以作为通用I/O口、TAMPER引脚、RTC校准时钟、RTC闹钟或秒输出(参见第
38/754
章:备份寄存器(BKP))
注:
因为模拟开关只能通过少量的电流
(3mA)
,在输出模式下使用
PC13
PC15
I/O
口功能是有限
制的:速度必须限制在
2MHz
以下,最大负载为
30pF
,而且这些
I/O
口绝对不能当作电流源
(
如驱
LED)
当后备区域由VBAT供电时(VDD消失后模拟开关连到VBAT),可以使用下述功能:
PC14PC15只能用于LSE引脚
5.4.2 PC13可以作为TAMPER引脚、RTC闹钟或秒输出(参见第 节:RTC时钟校准寄存器
(BKP_RTCCR))
4.1.3 电压调节器
复位后调节器总是使能的。根据应用方式它以3种不同的模式工作。
运转模式:调节器以正常功耗模式提供1.8V电源(内核,内存和外设)
停止模式:调节器以低功耗模式提供1.8V电源,以保存寄存器和SRAM的内容。
待机模式:调节器停止供电。除了备用电路和备份域外,寄存器和SRAM的内容全部丢失。
4.2 电源管理器
4.2.1 上电复位(POR)和掉电复位(PDR)
STM32内部有一个完整的上电复位(POR)和掉电复位(PDR)电路,当供电电压达到2V时系统既
能正常工作。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
电源控制(PWR) STM32F10xxx参考手册
VDD/VDDA低于指定的限位电压VPOR/VPDR时,系统保持为复位状态,而无需外部复位电路。关
于上电复位和掉电复位的细节请参考数据手册的电气特性部分。
5 上电复位和掉电复位的波形图
4.2.2 可编程电压监测器(PVD)
用户可以利用PVDVDD电压与电源控制寄存(PWR_CR)中的PLS[2:0]位进行比较来监控电
源,这几位选择监控电压的阀值。
通过设置PVDE位来使能PVD
电源控制/状态寄存器(PWR_CSR)中的PVDO标志用来表明VDD是高于还是低于PVD的电压阀
值。该事件在内部连接到外部中断的第16线,如果该中断在外部中断寄存器中是使能的,该事
件就会产生中断。当VDD下降到PVD阀值以下和()VDD上升PVD阀值之上时,根据外部中
断第16线的上升/下降边沿触发设置,就会产生PVD中断。例如,这一特性可用于用于执行紧急
关闭任务。
6 PVD的门限
39/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
电源控制(PWR) STM32F10xxx参考手册
4.3 低功耗模式
在系统或电源复位以后,微控制器处于运行状态。当CPU不需继续运行时,可以利用多种低
耗模式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗、最快速启动时间
和可用的唤醒源等条件,选定一个最佳的低功耗模式。
STM32F10xxx有三种低功耗模式:
睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时
(SysTick)等仍在运行)
停止模式(所有的时钟都已停止)
待机模式(1.8V电源关闭)
此外,在运行模式下,可以通过以下方式中的一种降低功耗:
降低系统时钟
关闭APBAHB总线上未被使用的外设时钟。
8 低功耗模式一览
VDD区域
时钟的影响
1.8V区域
时钟的影响 电压调节器 模式 进入 唤醒
40/754
WFI 任一中断 CPU时钟关,对
其他时钟和ADC
时钟无影响
睡眠
(SLEEP-NOW
SLEEP-ON-EXIT)
WFE 唤醒事件
开启或处于低功耗
模式(依据电源控制
寄存器(PWR_CR)
的设定)
PDDSLPDS
+SLEEPDEEP
+WFIWFE
任一外部中断(在外
部中断寄存器中设
)
停机
HSI HSE
的振荡器关
关闭所有1.8V
域的时钟
WKUP引脚的上升
沿、RTC闹钟事件、
NRST引脚上的外部
复位、IWDG复位
PDDS
+SLEEPDEEP
+WFIWFE
待机
4.3.1 降低系统时钟
在运行模式下,通过对预分频寄存器进行编程,可以降低任意一个系统时钟(SYSCLK
HCLKPCLK1PCLK2)的速度。进入睡眠模式前,也可以利用预分频器来降低外设的时钟。
详见第6.3.2节:时钟配置寄存器(RCC_CFGR)
4.3.2 外部时钟的控制
在运行模式下,任何时候都可以通过停止为外设和内存提供时钟(HCLKPCLKx)来减少功耗。
为了在睡眠模式下更多地减少功耗,可在执行WFIWFE指令前关闭所有外设的时钟。
通过设置AHB 外设时钟使能寄存器 (RCC_AHBENR) APB2 外设时钟使能寄存器
(RCC_APB2ENR)APB1外设时钟使能寄存器(RCC_APB1ENR)来开关各个外设模块的时钟。
4.3.3 睡眠模式
进入睡眠模式
通过执行WFIWFE指令进入睡眠状态。根据Cortex™-M3系统控制寄存器中的SLEEPONEXIT
位的值,有两种选项可用于选择睡眠模式进入机制:
SLEEP-NOW:如果SLEEPONEXIT位被清除,当WRIWFE被执行时,微控制器立即进
入睡眠模式。
SLEEP-ON-EXIT:如果SLEEPONEXIT位被置位,系统从最低优先级的中断处理程序中退
出时,微控制器就立即进入睡眠模式。
在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
电源控制(PWR) STM32F10xxx参考手册
41/754
关于如何进入睡眠模式,更多的细节参考表9和表10
退出睡眠模式
如果执行WFI指令进入睡眠模式,任意一个被嵌套向量中断控制器响应的外设中断都能将系统从
睡眠模式唤醒。
如果执行WFE指令进入睡眠模式,则一旦发生唤醒事件时,微处理器都将从睡眠模式退出。唤
醒事件可以通过下述方式产生:
在外设控制寄存器中使能一个中断,而不是在NVIC(嵌套向量中断控制器)中使能,并且在
Cortex-M3系统控制寄存器中使能SEVONPEND位。当MCUWFE中唤醒后,外设的中断
挂起位和外设的NVIC中断通道挂起位(NVIC中断清除挂起寄存器中)必须被清除。
配置一个外部或内部的EXIT线为事件模式。当MCUWFE中唤醒后,因为与事件线对应的
挂起位未被设置,不必清除外设的中断挂起位或外设的NVIC中断通道挂起位。
该模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。
关于如何退出睡眠模式,更多的细节参考表9和表10
9 SLEEP-NOW模式
SLEEP-NOW模式 说明
在以下条件下执行WFI(等待中断)WFE(等待事件)指令:
SLEEPDEEP = 0
进入 SLEEPONEXIT = 0
参考Cortex-M3系统控制寄存器。
如果执行WFI进入睡眠模式:
中断:参考中断向量表(54)
退出 如果执行WFE进入睡眠模式:
唤醒事件:参考唤醒事件管理(9.2.3)
唤醒延时
10 SLEEP-ON-EXIT模式
SLEEP-ON_EXIT模式 说明
在以下条件下执行WFI指令:
SLEEPDEEP = 0
进入 SLEEPONEXIT = 1
参考Cortex™-M3系统控制寄存器
退出 中断:参考中断向量表(54)
唤醒延时
4.3.4 停止模式
停止模式是在Cortex™-M3的深睡眠模式基础上结合了外设的时钟控制机制,在停止模式下电压
调节器可运行在正常或低功耗模式。此时在1.8V供电区域的的所有时钟都被停止,PLLHSI
HSE RC振荡器的功能被禁止,SRAM和寄存器内容被保留下来。
在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态。
进入停止模式
关于如何进入停止模式,详见表11
电源控制寄存器(PWR_CR)在停止模式下,通过设置 LPDS位使内部调节器进入低功耗模式,
能够降低更多的功耗。
如果正在进行闪存编程,直到对内存访问完成,系统才进入停止模式。
如果正在进行对APB的访问,直到对APB访问完成,系统才进入停止模式。
可以通过对独立的控制位进行编程,可选择以下功能:
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
电源控制(PWR) STM32F10xxx参考手册
独立看门狗(IWDG):可通过写入看门狗的键寄存器或硬件选择来启动IWDG。一旦启动了
独立看门狗,除了系统复位,它不能再被停止。详见17.3节。
实时时钟(RTC):通过备份域控制寄存器 (RCC_BDCR)RTCEN位来设置。
内部RC振荡器(LSI RC):通过控制/状态寄存器 (RCC_CSR)LSION位来设置。
42/754
外部32.768kHz振荡器(LSE):通过备份域控制寄存器 (RCC_BDCR)LSEON位设置。
在停止模式下,如果在进入该模式前ADCDAC没有被关闭,那么这些外设仍然消耗电流。通
过设置寄存器ADC_CR2ADON位和寄存器DAC_CRENx位为0可关闭这2个外设。
退出停止模式
关于如何退出停止模式,详见下表。
当一个中断或唤醒事件导致退出停止模式时,HSI RC振荡器被选为系统时钟。
当电压调节器处于低功耗模式下,当系统从停止模式退出时,将会有一段额外的启动延时。如
果在停止模式期间保持内部调节器开启,则退出启动时间会缩短,但相应的功耗会增加。
11 停止模式
停止模式 说明
在以下条件下执行WFI(等待中断)WFE(等待事件)指令:
设置Cortex-M3系统控制寄存器中的SLEEPDEEP
清除电源控制寄存器(PWR_CR)中的PDDS
进入 通过设置PWR_CRLPDS位选择电压调节器的模式
注:为了进入停止模式,所有的外部中断的请求位(挂起寄存器(EXTI_PR))RTC的闹钟标志
都必须被清除,否则停止模式的进入流程将会被跳过,程序继续运行。
如果执行WFI进入停止模式:
设置任一外部中断线为中断模式(NVIC中必须使能相应的外部中断向量)。参见中断向量
(54)
退出
如果执行WFE进入停止模式:
设置任一外部中断线为事件模式。参见唤醒事件管理(9.2.3)
唤醒延时 HSI RC唤醒时间 + 电压调节器从低功耗唤醒的时间。
4.3.5 待机模式
待机模式可实现系统的最低功耗。该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个
1.8V供电区域被断电。PLLHSIHSE振荡器也被断电。SRAM和寄存器内容丢失。只有备份
的寄存器和待机电路维持供电(见图4)
进入待机模式
关于如何进入待机模式,详见表12
可以通过设置独立的控制位,选择以下待机模式的功能:
独立看门狗(IWDG):可通过写入看门狗的键寄存器或硬件选择来启动IWDG。一旦启动了
独立看门狗,除了系统复位,它不能再被停止。详见17.3节。
实时时钟(RTC):通过备用区域控制寄存器(RCC_BDCR)RTCEN位来设置。
内部RC振荡器(LSI RC):通过控制/状态寄存器(RCC_CSR)LSION位来设置。
外部32.768kHz振荡器(LSE):通过备用区域控制寄存器(RCC_BDCR)LSEON位设置。
退出待机模式
当一个外部复位(NRST引脚)IWDG复位、WKUP引脚上的上升沿或RTC闹钟事件的上升沿发
生时(见图154 简化的RTC框图),微控制器从待机模式退出。从待机唤醒后,除了电源控制/
态寄存器(PWR_CSR)(见第4.4.2),所有寄存器被复位。
从待机模式唤醒后的代码执行等同于复位后的执行(采样启动模式引脚、读取复位向量等)电源
控制/状态寄存器(PWR_CSR)(见第4.4.2)将会指示内核由待机状态退出。
关于如何退出待机模式,详见下表。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
电源控制(PWR) STM32F10xxx参考手册
12 待机模式
待机模式 说明
在以下条件下执行WFI(等待中断)WFE(等待事件)指令:
设置Cortex™-M3系统控制寄存器中的SLEEPDEEP
进入 设置电源控制寄存器(PWR_CR)中的PDDS
清除电源控制/状态寄存器(PWR_CSR)中的WUF
退出 WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位。
唤醒延时 复位阶段时电压调节器的启动。
待机模式下的输入/输出端口状态
在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚:
复位引脚(始终有效)
当被设置为防侵入或校准输出时的TAMPER引脚
被使能的唤醒引脚
调试模式
默认情况下,如果在进行调试微处理器时,使微处理器进入停止或待机模式,将失去调试
接。这是因为Cortex™-M3的内核失去了时钟。
然而,通过设置DBGMCU_CR寄存器中的某些配置位,可以在使用低功耗模式下调试软件。更
多的细节请参考第29.16.1
43/754
节:低功耗模式的调试支持。
4.3.6 低功耗模式下的自动唤醒(AWU)
RTC可以在不需要依赖外部中断的情况下唤醒低功耗模式下的微控制器(自动唤醒模式)RTC
供一个可编程的时间基数,用于周期性从停止或待机模式下唤醒。通过对备份区域控制寄存器
(RCC_BDCR)RTCSEL[1:0]位的编程,三RTC时钟源中的二个时钟源可以选作实现此功
能。
低功耗32.768kHz外部晶振(LSE)
该时钟源提供了一个低功耗且精确的时间基准。(在典型情形下消耗小于1µA)
低功耗内部RC振荡器(LSI RC)
使用该时钟源,节省了一个32.768kHz晶振的成本。但是RC振荡器将少许增加电源消耗。
为了用RTC闹钟事件将系统从停止模式下唤醒,必须进行如下操作:
配置外部中断线17为上升沿触发。
配置RTC使其可产生RTC闹钟事件。
如果要从待机模式中唤醒,不必配置外部中断线17
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
电源控制(PWR) STM32F10xxx参考手册
4.4 电源控制寄存器
可以用半字(16)或字(32)的方式操作这些外设寄存器。
4.4.1 电源控制寄存器(PWR_CR)
地址偏移:0x00
复位值:0x0000 0000 (从待机模式唤醒时清除)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
DBP PVDE CSBF CWUF PDDS LPDS
rw rw rw rw rw rc_w1 rc_w1 rw rw
保留
保留
PLS[2:0]
31:9 保留。始终读为0
DBP:取消后备区域的写保护 8
在复位后,RTC和后备寄存器处于被保护状态以防意外写入。设置这位允许写入这些寄存器。
0:禁止写入RTC和后备寄存器
1:允许写入RTC和后备寄存器
注:如果RTC的时钟是HSE/128,该位必须保持为’1’
PLS[2:0]PVD电平选择 7:5
这些位用于选择电源电压监测器的电压阀值
0002.2V 1002.6V
0012.3V 1012.7V
0102.4V 1102.8V
0112.5V 1112.9V
注:详细说明参见数据手册中的电气特性部分。
PVDE:电源电压监测器(PVD)使能 4
0:禁止PVD
1:开启PVD
CSBF:清除待机位 3
始终读出为0
0:无功效
1:清除SBF待机位()
CWUF:清除唤醒位 2
始终读出为0
0:无功效
12个系统时钟周期后清除WUF唤醒位()
PDDS:掉电深睡眠 1
LPDS位协同操作
0:当CPU进入深睡眠时进入停机模式,调压器的状态由LPDS位控制。
1CPU进入深睡眠时进入待机模式。
LPDS:深睡眠下的低功耗 0
PDDS=0时,与PDDS位协同操作
0:在停机模式下电压调压器开启
1:在停机模式下电压调压器处于低功耗模式
44/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
电源控制(PWR) STM32F10xxx参考手册
4.4.2 电源控制/状态寄存器(PWR_CSR)
地址偏移:0x04
复位值:0x0000 0000 (从待机模式唤醒时不被清除)
与标准的APB读相比,读此寄存器需要额外的APB周期
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
EWUP PVDO SBF WUF
rw rrr
保留
保留 保留
31:9 保留。始终读为0
EWUP:使能WKUP引脚 8
0WKUP引脚为通用I/OWKUP引脚上的事件不能将CPU从待机模式唤醒
1WKUP引脚用于将CPU从待机模式唤醒WKUP引脚被强置为输入下拉的配置(WKUP引脚
上的上升沿将系统从待机模式唤醒)
注:在系统复位时清除这一位。
7:3 保留。始终读为0
PVDOPVD输出 2
PVDPVDE位使能后该位才有效
0:VDD/VDDA高于由PLS[2:0]选定的PVD阀值
1:VDD/VDDA低于由PLS[2:0]选定的PVD阀值
注:在待机模式下PVD被停止。因此,待机模式后或复位后,直到设置PVDE位之前,该位为
0
SBF:待机标志 1
该位由硬件设置,并只能由POR/PDR(上电/掉电复位)或设置电源控制寄存器(PWR_CR)
CSBF位清除。
0:系统不在待机模式
1:系统进入待机模式
WUF:唤醒标志 0
该位由硬件设置,并只能由POR/PDR(上电/掉电复位)或设置电源控制寄存器(PWR_CR)
CWUF位清除。
0:没有发生唤醒事件
1:在WKUP引脚上发生唤醒事件或出现RTC闹钟事件。
注:当WKUP引脚已经是高电平时,在(通过设置EWUP)使能WKUP引脚时,会检测到一个额外的
事件。
45/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
电源控制(PWR) STM32F10xxx参考手册
46/754
参照200912 RM0008 Reference Manual 英文第10
4.4.3 PWR寄存器地址映像
以下表格列出所有PWR寄存器。
13 PWR寄存器地址映像和复位值
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
PWR_CR
DBP
PVDE
CSBF
CWUF
PDDS
LPDS
PLS
[2:0]
000h 保留
值 000000000
PWR_CSR
EWUP
PVDO
SBF
WUF
复位值 0 0 0 0
004h 保留 保留
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
关于寄存器的起始地址,参见表1
备份寄存器(BKP) STM32F10xxx参考手册
5 备份寄存器(BKP)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
5.1 BKP简介
备份寄存器是4216位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域
里,当VDD电源被切断,他们仍然由VBAT维持供电。当系统在待机模式下被唤醒,或系统复位或
电源复位时,他们也不会被复位。
此外,BKP控制寄存器用来管理侵入检测和RTC校准功能。
复位后,对备份寄存器RTC的访问被禁止,并且备份域被保护以防止可能存在的意外的写
作。执行以下操作可以使能对备份寄存器和RTC的访问。
通过设置寄存器RCC_APB1ENRPWRENBKPEN位来打开电源和后备接口的时钟
电源控制寄存器(PWR_CR)DBP位来使能对后备寄存器和RTC的访问。
5.2 BKP特性
20字节数据后备寄存器(中容量和小容量产品),或84字节数据后备寄存器(大容量和互联型
产品)
用来管理防侵入检测并具有中断功能的状态/控制寄存器
用来存储RTC校验值的校验寄存器。
PC13引脚(当该引脚不用于侵入检测时)上输出RTC校准时钟,RTC闹钟脉冲或者秒脉冲
5.3 BKP功能描述
5.3.1 侵入检测
TAMPER引脚上的信号从0变成1或者从1变成0(取决于备份控制寄存器BKP_CRTPAL)
会产生一个侵入检测事件。侵入检测事件将所有数据备份寄存器内容清除。
然而为了避免丢失侵入事件,侵入检测信号是边沿检测的信号与侵入检测允许位的逻辑与,从
而在侵入检测引脚被允许前发生的侵入事件也可以被检测到。
TPAL=0时:如果在启动侵入检测TAMPER引脚前(通过设置TPE)该引脚已经为高电
平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出
现上升沿)
TPAL=1时:如果在启动侵入检测引脚TAMPER(通过设置TPE)该引脚已经为低电
平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出
现下降沿)
设置BKP_CSR寄存器的TPIE位为’1’,当检测到侵入事件时就会产生一个中断。
在一个侵入事件被检测到并被清除后,侵入检测引脚TAMPER应该被禁止。然后,在再次写入
备份数据寄存器前重新用TPE位启动侵入检测功能。这样,可以阻止软件在侵入检测引脚上仍
然有侵入事件时对备份数据寄存器进行写操作。这相当于对侵入引脚TAMPER进行电平检测。
注:
VDD
电源断开时,侵入检测功能仍然有效。为了避免不必要的复位数据备份寄存器,
TAMPER
引脚应该在片外连接到正确的电平。
47/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
备份寄存器(BKP) STM32F10xxx参考手册
5.3.2 RTC校准
为方便测量,RTC时钟可以经64分频输出到侵入检测引脚TAMPER上。通过设置RTC校验寄存
(BKP_RTCCR)CCO位来开启这一功能。
通过配置CAL[6:0]位,此时钟可以最多减慢121ppm
关于RTC校准和如何提高精度,请看AN2604STM32F101xxSTM32F103xxRTC校准”
5.4 BKP寄存器描述
48/754
关于在寄存器描述里面所用到的缩写,可参考1.1节。
可以用半字(16)或字(32)的方式操作这些外设寄存器。
5.4.1 备份数据寄存器x(BKP_DRx) (x = 1 … 10)
地址偏移:0x04 0x280x400xBC
复位值:0x0000 0000
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
D[15:0]
D[15:0]:备份数据 15:0
这些位可以被用来写入用户数据。
注意:BKP_DRx寄存器不会被系统复位、电源复位、从待机模式唤醒所复位。
它们可以由备份域复位来复位或(如果侵入检测引脚TAMPER功能被开启时)由侵入引脚事件复
位。
5.4.2 RTC时钟校准寄存器(BKP_RTCCR)
地址偏移:0x2C
复位值:0x0000 0000
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ASOS ASOE CCO
rw rw rw rw rw rw rw rw rw rw
CAL[6:0]保留
15:8 保留,始终读为0
ASOS:闹钟或秒输出选择(Alarm or second output selection) 9
当设置了ASOE位,ASOS可用于选择在TAMPER引脚上输出的是RTC秒脉冲还是闹钟脉冲
信号。
0:输出RTC闹钟脉冲
1:输出秒脉冲
注:该位只能被后备区的复位所清除
ASOE:允许输出闹钟或秒脉冲(Alarm or second output enable) 8
根据ASOS位的设置,该位允许RTC闹钟或秒脉冲输出到TAMPER引脚上。
输出脉冲的宽度为一个RTC时钟的周期。设置了ASOE位时不能开启TAMPER的功能。
注:该位只能被后备区的复位所清除
CCO:校准时钟输出(Calibration clock output) 7
0:无影响
1:此位置1可以在侵入检测引脚输出64分频后的RTC时钟。当CCO位置1时,必须关闭侵入
检测功能以避免检测到无用的侵入信号。
注:当VDD供电断开时,该位被清除。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
备份寄存器(BKP) STM32F10xxx参考手册
CAL[6:0]:校准值(Calibration value) 6:0
校准值表示在每220个时钟脉冲内将有多少个时钟脉冲被跳过。这可以用来对RTC进行校准,以
1000000/220ppm的比例减慢时钟。
RTC时钟可以被减慢0~121ppm
5.4.3 备份控制寄存器(BKP_CR)
偏移地址:0x30
复位值:0x0000 0000
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TPAL TPE
rw rw
保留
15:2 保留,始终读为0
TPAL:侵入检测TAMPER引脚有效电平(TAMPER pin active level) 1
0:侵入检测TAMPER引脚上的高电平会清除所有数据备份寄存器(如果TPE位为1)
1:侵入检测TAMPER引脚上的低电平会清除所有数据备份寄存器(如果TPE位为1)
TPE:启动侵入检测TAMPER引脚(TAMPER pin enable) 0
0:侵入检测TAMPER引脚作为通用IO口使用
1:开启侵入检测引脚作为侵入检测使用
注:
同时设置
TPAL
TPE
位总是安全的。然而,同时清除两者会产生一个假的侵入事件
因此,
推荐只在
TPE
0
时才改变
TPAL
位的状态。
5.4.4 备份控制/状态寄存器(BKP_CSR)
偏移地址:0x34
复位值:0x0000 0000
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TIF TEF TPIE CTI CTE
r r rw rw rw
保留 保留
15:10 保留,始终读为0
TIF:侵入中断标志(Tamper interrupt flag) 9
当检测到有侵入事件TPIE位为1时,此位由硬件置1。通过向CTI位写1来清除此标志位(同时
也清除了中断)。如果TPIE位被清除,则此位也会被清除。
0:无侵入中断
1:产生侵入中断
注意:仅当系统复位或由待机模式唤醒后才复位该位
TEF:侵入事件标志(Tamper event flag) 8
当检测到侵入事件时此位由硬件置1。通过向CTE位写1可清除此标志位
0:无侵入事件
1:检测到侵入事件
注:侵入事件会复位所有的BKP_DRx寄存器。只要TEF1,所有的BKP_DRx寄存器就一直保
持复位状态。当此位被置1时,若对BKP_DRx进行写操作,写入的值不会被保存。
7:3 保留,始终读为0
TPIE:允许侵入TAMPER引脚中断(TAMPER pin interrupt enable) 2
0:禁止侵入检测中断
1:允许侵入检测中断(BKP_CR寄存器的TPE位也必须被置1)
1:侵入中断无法将系统内核从低功耗模式唤醒。
2:仅当系统复位或由待机模式唤醒后才复位该位。
49/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
备份寄存器(BKP) STM32F10xxx参考手册
CTI:清除侵入检测中断(Clear tamper interrupt) 1
此位只能写入,读出值为0
0:无效
1:清除侵入检测中断和TIF侵入检测中断标志
CTE:清除侵入检测事件(Clear tamper event) 0
此位只能写入,读出值为0
0:无效
1:清除TEF侵入检测事件标志(并复位侵入检测器)
50/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
备份寄存器(BKP) STM32F10xxx参考手册
5.4.5 BKP寄存器映像
BKP寄存器是16位的可寻址寄存器。
14 BKP寄存器映像和复位值
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
BKP_DR1
复位值
0000000000000000
BKP_DR2
复位值
0000000000000000
BKP_DR3
复位值
0000000000000000
BKP_DR4
复位值
0000000000000000
BKP_DR5
复位值
0000000000000000
BKP_DR6
复位值
0000000000000000
BKP_DR7
复位值
0000000000000000
BKP_DR8
复位值
0000000000000000
BKP_DR9
复位值
0000000000000000
BKP_DR10
复位值
0000000000000000
BKP_RTCCR
ASOS
ASOE
CCO
复位值
0000000000
RTC_CR
TPAL
TPE
复位值
00
RTC_CSR
TIF
TFE
TPIE
CTI
CTE
复位值
00 000
038h
保留保留
034h
00Ch
保留 D[15:0]
010h
保留 D[15:0]
018h
01Ch
保留
CAL[6:0]
020h
024h
028h
02Ch
D[15:0]
保留
保留
保留 D[15:0]
保留 D[15:0]
D[15:0]
保留 D[15:0]
保留 D[15:0]
D[15:0]
D[15:0]
保留
030h
保留
保留
保留
保留
008h
004h
000h
014h
51/754
BKP_DR11
复位值
0000000000000000
03Ch 保留
040h
保留 D[15:0]
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
备份寄存器(BKP) STM32F10xxx参考手册
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
BKP_DR12
复位值
0000000000000000
BKP_DR13
复位值
0000000000000000
BKP_DR14
复位值
0000000000000000
BKP_DR15
复位值
0000000000000000
BKP_DR16
复位值
0000000000000000
BKP_DR17
复位值
0000000000000000
BKP_DR18
复位值
0000000000000000
BKP_DR19
复位值
0000000000000000
BKP_DR20
复位值
0000000000000000
BKP_DR21
复位值
0000000000000000
BKP_DR22
复位值
0000000000000000
BKP_DR23
复位值
0000000000000000
BKP_DR24
复位值
0000000000000000
BKP_DR25
复位值
0000000000000000
BKP_DR26
复位值
0000000000000000
BKP_DR27
复位值
0000000000000000
BKP_DR28
复位值
0000000000000000
044h
保留 D[15:0]
D[15:0]
D[15:0]
D[15:0]
D[15:0]
07Ch
080h
084h
068h
06Ch
070h
074h
078h
D[15:0]
D[15:0]
D[15:0]
04Ch
050h
054h
058h
05Ch
060h
064h
D[15:0]
D[15:0]
保留
保留
保留
保留
保留
保留 D[15:0]
D[15:0]
保留
保留
保留
保留
保留
048h
保留
保留
保留
保留
保留
D[15:0]
D[15:0]
D[15:0]
D[15:0]
D[15:0]
52/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
备份寄存器(BKP) STM32F10xxx参考手册
53/754
参照200912 RM0008 Reference Manual 英文第10
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
BKP_DR29
复位值 0000000000000000
BKP_DR30
复位值 0000000000000000
BKP_DR31
复位值 0000000000000000
BKP_DR32
复位值 0000000000000000
BKP_DR33
复位值 0000000000000000
BKP_DR34
复位值 0000000000000000
BKP_DR35
复位值 0000000000000000
BKP_DR36
复位值 0000000000000000
BKP_DR37
复位值 0000000000000000
BKP_DR38
复位值 0000000000000000
BKP_DR39
复位值 0000000000000000
BKP_DR40
复位值 0000000000000000
BKP_DR41
复位值 0000000000000000
BKP_DR42
复位值 0000000000000000
保留
D[15:0]
D[15:0]
D[15:0]
09Ch
保留
D[15:0]
D[15:0]
D[15:0]
保留
保留
08Ch
保留
保留
090h
保留
保留
保留
098h
D[15:0]
D[15:0]
保留
D[15:0]
D[15:0]
D[15:0]
D[15:0]
保留
保留
保留
0A0h
0A4h
0A8h
0ACh
0B0h
0B4h
0B8h
0BCh
D[15:0]
094h
088h
保留 D[15:0]
有关寄存器的起始地址,请参考表1。
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
6 小容量、中容量和大容量产品的复位和时钟控制(RCC)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
本章内容适用于小容量、中容量和大容量产品,互联型产品的相关内容在下一章讨论。
6.1 复位
STM32F10xxx支持三种复位形式,分别为系统复位、上电复位和备份区域复位。
6.1.1 系统复位
除了时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器(4)以外,系统
复位将复位所有寄存器至它们的复位状态。
当发生以下任一事件时,产生一个系统复位:
1. NRST引脚上的低电平(外部复位)
2. 窗口看门狗计数终止(WWDG复位)
3. 独立看门狗计数终止(IWDG复位)
4. 软件复位(SW复位)
5. 低功耗管理复位
可通过查看RCC_CSR控制状态寄存器中的复位状态标志位识别复位事件来源。
软件复位
通过将Cortex™-M3中断应用和复位控制寄存器中的SYSRESETREQ位置’1’,可实现软件复
位。请参考Cortex™-M3技术参考手册获得进一步信息。
低功耗管理复位
在以下两种情况下可产生低功耗管理复位:
1. 在进入待机模式时产生低功耗管理复位:
通过将用户选择字节中的nRST_STDBY位置’1’将使能该复位。这时,即使执行了进入待
机模式的过程,系统将被复位而不是进入待机模式。
2. 在进入停止模式时产生低功耗管理复位:
通过将用户选择字节中的nRST_STOP位置’1’将使能该复位。这时,即使执行了进入停机
模式的过程,系统将被复位而不是进入停机模式。
54/754
关于用户选择字节的进一步信息,请参考STM32F10xxx闪存编程手册
6.1.2 电源复位
当以下事件中之一发生时,产生电源复位:
1. 上电/掉电复位(POR/PDR复位)
2. 从待机模式中返回
4) 电源复位将复位除了备份区域外的所有寄存器。(
图中复位源将最终作用RESET引脚,并在复位过程中保持低电平。复位入口矢量被固定在地
0x0000_0004。更多细节,参阅55其它STM32F10xxx产品(小容量、中容量和大容量)
向量表。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
芯片内部的复位信号会在NRST引脚上输出,脉冲发生器保证每一个(外部或内部)复位源都能有
至少20μs的脉冲延时;当NRST引脚被拉低产生外部复位时,它将产生复位脉冲。
7 复位电路
6.1.3 备份域复位
备份区域拥有两个专门的复位,它们只影响备份区域(见图4)
当以下事件中之一发生时,产生备份区域复位。
55/754
1. 软件复位,备份区域复位可由设置备份域控制寄存器 (RCC_BDCR)(6.3.9)中的
BDRST位产生。
2. VDDVBAT两者掉电的前提下,VDDVBAT上电将引发备份区域复位。
6.2 时钟
三种不同的时钟源可被用来驱动系统时钟(SYSCLK)
HSI振荡器时钟
HSE振荡器时钟
PLL时钟
这些设备有以下2种二级时钟源:
40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTCRTC用于从停机/
待机模式下自动唤醒系统。
32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)
当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
8 时钟树
1.当HSI被用于作为PLL时钟的输入时,系统时钟能得到的最大频率是64MHz
2.对于内部和外部时钟源的特性,请参考相应产品数据手册中“电气特性”章节。
用户可通过多个预分频器配置AHB、高速APB(APB2)和低速APB(APB1)域的频率AHB
APB2域的最大频率是72MHzAPB1域的最大允许频率是36MHzSDIO接口的时钟频率固定
HCLK/2
RCC通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。通过对SysTick
控制与状态寄存器的设置,可选择上述时钟或Cortex(HCLK)时钟作为SysTick时钟。ADC时钟
由高速APB2时钟经2468分频后获得。
定时器时钟频率分配由硬件按以下2种情况自动设置:
1. 如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。
2. 否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。
56/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
FCLKCortex™-M3的自由运行时钟。详情见ARMCortex™-M3技术参考手册。
6.2.1 HSE时钟
高速外部时钟信号(HSE)由以下两种时钟源产生:
HSE外部晶体/陶瓷谐振器
HSE用户外部时钟
为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容器必须尽可能地靠
近振荡器引脚。负载电容值必须根据所选择的振荡器来调整。
HSE/LSE时钟源 9
硬件配置
外部时钟
晶体/陶瓷谐振器
外部时钟源(HSE旁路)
在这个模式里,必须提供外部时钟。它的频率最高可达25MHz。用户可通过设置在时钟控制寄
存器中的HSEBYPHSEON位来选择这一模式。外部时钟信号(50%占空比的方波、正弦波或
三角波)必须连到SOC_IN引脚,同时保证OSC_OUT引脚悬空。见图9
外部晶体/陶瓷谐振器(HSE晶体)
4~16Mz外部振荡器可为系统提供更为精确的主时钟。相关的硬件配置可参考9进一步信息
可参考数据手册的电气特性部分。
在时钟控制寄存器RCC_CR中的HSERDY位用来指示高速外部振荡器是否稳定。在启动时,直
到这一位被硬件置’1’,时钟才被释放出来。如果在时钟中断寄存器RCC_CIR中允许产生中断,
将会产生相应中断。
HSE晶体可以通过设置时钟控制寄存器里RCC_CR中的HSEON位被启动和关闭。
6.2.2 HSI时钟
HSI时钟信号由内部8MHzRC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。
HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振
荡器短。然而,即使在校准之后它的时钟频率精度仍较差。
校准
制造工艺决定了不同芯片的RC振荡器频率会不同,这就是为什么每个芯片的HSI时钟频率在出
厂前已经被ST校准到1%(25°C)的原因。系统复位时,工厂校准值被装载到时钟控制寄存器的
HSICAL[7:0]位。
如果用户的应用基于不同的电压或环境温度,这将会影响RC振荡器的精度。可以通过时钟控制
寄存器里的HSITRIM[4:0]位来调整HSI频率。
57/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
时钟控制寄存器中的HSIRDY位用来指示HSI RC振荡器是否稳定。在时钟启动过程中,直到这
一位被硬件置’1’HSI RC输出时钟才被释放。HSI RC可由时钟控制寄存器中的HSION位来启
动和关闭。
如果HSE晶体振荡器失效,HSI时钟会被作为备用时钟源。参考6.2.7
58/754
节时钟安全系统。
6.2.3 PLL
内部PLL可以用来倍频HSI RC的输出时钟或HSE晶体输出时钟。参考图8和时钟控制寄存器。
PLL的设置(选择HIS振荡器2HSE振荡器为PLL的输入时钟,和选择倍频因子)必须在其被激
活前完成。一旦PLL被激活,这些参数就不能被改动。
如果PLL中断在时钟中断寄存器里被允许,当PLL准备就绪时,可产生中断申请。
如果需要在应用中使用USB接口,PLL必须被设置为输出4872MHZ时钟,用于提供48MHz
USBCLK时钟。
6.2.4 LSE时钟
LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供
一个低功耗且精确的时钟源。
LSE晶体通过在备份域控制寄存器(RCC_BDCR)里的LSEON位启动和关闭。
在备份域控制寄存器(RCC_BDCR)里的LSERDY指示LSE晶体振荡是否稳定。在启动阶段,直
到这个位被硬件置’1’后,LSE时钟信号才被释放出来。如果在时钟中断寄存器里被允许,可产
生中断申请。
外部时钟源(LSE旁路)
在这个模式里必须提供一个32.768kHz频率的外部时钟源。你可以通过设置在备份域控制寄存器
(RCC_BDCR)里的LSEBYPLSEON位来选择这个模式。具有50%占空比的外部时钟信号(
波、正弦波或三角波)必须连到OSC32_IN引脚,同时保证OSC32_OUT脚悬空,见图9
6.2.5 LSI时钟
LSI RC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和
自动唤醒单元提供时钟。LSI时钟频率大约40kHz(30kHz60kHz之间)。进一步信息请参考数
据手册中有关电气特性部分。
LSI RC可以通过控制/状态寄存器(RCC_CSR)里的LSION位来启动或关闭。
在控制/状态寄存器(RCC_CSR)里的LSIRDY位指示低速内部振荡器是否稳定。在启动阶段,直
到这个位被硬件设置为’1’后,此时钟才被释放。如果在时钟中断寄存器(RCC_CIR)里被允许,
将产生LSI中断申请。
注意:
只有大容量和互联型产品可以进行
LSI
校准
LSI校准
可以通过校准内部低速振荡器LSI来补偿其频率偏移,从而获得精度可接受的RTC时间基数,以
及独立看门狗(IWDG)的超时时间(当这些外设以LSI为时钟源)
校准可以通过使用TIM5的输入时钟(TIM5_CLK)测量LSI时钟频率实现。测量以HSE的精度为保
证,软件可以通过调整RTC20位预分频器来获得精确的RTC时钟基数,以及通过计算得到精
确的独立看门狗(IWDG)的超时时间。
LSI校准步骤如下:
1. 打开TIM5,设置通道4为输入捕获模式;
2. 设置AFIO_MAPRTIM5_CH4_IREMAP位为’1’,在内部把LSI连接到TIM5的通道4
3. 通过TIM5的捕获/比较4事件或者中断来测量LSI时钟频率;
4. 根据测量结果和期望的RTC时间基数和独立看门狗的超时时间,设置20位预分频器。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
6.2.6 系统时钟(SYSCLK)选择
系统复位后,HSI振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它
将不能被停止。
只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时
钟源的切换才会发生。在被选择时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟
源就绪,才发生切换。
在时钟控制寄存器(RCC_CR)的状态位指示哪个时钟已经准备好了,哪个时钟目前被用作系统
时钟。
6.2.7 时钟安全系统(CSS)
时钟安全系统可以通过软件被激活。一旦其被激活,时钟监测器将在HSE振荡器启动延迟后被
使能,并在HSE时钟关闭后关闭。
如果HSE时钟发生故障HSE振荡器被自动关闭,时钟失效事件将被送到高级定时器(TIM1
TIM8)的刹车输入端,并产生时钟安全中断CSSI,允许软件完成营救操作。此CSSI中断连接到
Cortex™-M3NMI中断(不可屏蔽中断)
注意:
一旦
CSS
被激活,并且
HSE
时钟出现故障,
CSS
中断就产生,并且
NMI
也自动产生。
NMI
将被不
断执行,直到
CSS
中断挂起位被清除。因此,在
NMI
的处理程序中必须通过设置时钟中断寄存器
(RCC_CIR)
里的
CSSC
位来清除
CSS
中断。
如果HSE振荡器被直接或间接地作为系统时钟,(间接的意思是:它被作为PLL输入时钟,并且
PLL时钟被作为系统时钟),时钟故障将导致系统时钟自动切换到HSI振荡器,同时外部HSE振荡
器被关闭。在时钟失效时,如果HSE振荡器时(被分频或未被分频)是用作系统时钟PLL的输
入时钟,PLL也将被关闭。
6.2.8 RTC时钟
通过设置备份域控制寄存器(RCC_BDCR) 里的RTCSEL[1:0] 位,RTCCLK 时钟源可以由
HSE/128LSELSI时钟提供。除非备份域复位,此选择不能被改变。
LSE时钟在备份域里,但HSELSI时钟不是。因此:
如果LSE被选为RTC时钟:
只要VBAT维持供电,尽管VDD供电被切断,RTC仍继续工作。
如果LSI被选为自动唤醒单元(AWU)时钟:
如果VDD供电被切断, AWU状态不能被保证。有关LSI校准,详见6.2.5
59/754
LSI时钟。
如果HSE时钟128分频后作为RTC时钟:
如果VDD供电被切断或内部电压调压器被关闭(1.8V域的供电被切断),则RTC状态不确
定。
必须设置电源控制寄存器(4.4.1)DPB(取消后备区域的写保护)1
6.2.9 看门狗时钟
如果独立看门狗已经由硬件选项或软件启动,LSI振荡器将被强制在打开状态,并且不能被关
闭。在LSI振荡器稳定后,时钟供应给IWDG
6.2.10 时钟输出
微控制器允许输出时钟信号到外部MCO引脚。
相应的GPIO端口寄存器必须被配置为相应功能。以下四个时钟信号可被选作MCO时钟:
SYSCLK
HSI
HSE
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
2PLL时钟
时钟的选择由时钟配置寄存器(RCC_CFGR)中的MCO[2:0]位控制。
6.3 RCC寄存器描述
请参考第1章中有关寄存器描述中用到的缩写。
6.3.1 时钟控制寄存器(RCC_CR)
偏移地址: 0x00
复位值: 0x000 XX83X代表未定义
访问: 无等待状态, , 半字 和字节访问
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PLL
RDY PLLON CSS
ON
HSE
BYP
HSE
RDY
HSE
ON
rrw rwrwrrw
1514131211109876543210
保留 HSI
RDY HSION
rrrrrrrrrwrwrwrwrw rrw
保留 保留
HSICAL[7:0] HSITRIM[4:0]
31:26 保留,始终读为0
PLLRDYPLL时钟就绪标志 (PLL clock ready flag) 25
PLL锁定后由硬件置’1’
0PLL未锁定;
1PLL锁定。
PLLONPLL使能 (PLL enable) 24
由软件置’1’或清零。
当进入待机和停止模式时,该位由硬件清零。当PLL时钟被用作或被选择将要作为系统时钟
时,该位不能被清零。
0PLL关闭;
1PLL使能。
23:20 保留,始终读为0
CSSON:时钟安全系统使能 (Clock security system enable) 19
由软件置’1’或清零以使能时钟监测器。
0:时钟监测器关闭;
1:如果外部4-16MHz振荡器就绪,时钟监测器开启。
HSEBYP:外部高速时钟旁路 (External high-speed clock bypass) 18
在调试模式下由软件置’1’或清零来旁路外部晶体振荡器。只有在外部4-16MHz振荡器关闭的情
况下,才能写入该位。
0:外部4-16MHz振荡器没有旁路;
1:外部4-16MHz外部晶体振荡器被旁路。
HSERDY:外部高速时钟就绪标志 (External high-speed clock ready flag) 17
由硬件置’1’指示外部4-16MHz振荡器已经稳定。在HSEON位清零后,该位需要6个外部4-
25MHz振荡器周期清零。
0:外部4-16MHz振荡器没有就绪;
1:外部4-16MHz振荡器就绪。
60/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
HSEON:外部高速时钟使能 (External high-speed clock enable) 16
由软件置’1’或清零。
当进入待机和停止模式时,该位由硬件清零,关闭4-16MHz外部振荡器。当外部4-16MHz振荡
器被用作或被选择将要作为系统时钟时,该位不能被清零。
0HSE振荡器关闭;
1HSE振荡器开启。
HSICAL[7:0]:内部高速时钟校准 (Internal high-speed clock calibration) 15:8
在系统启动时,这些位被自动初始化
HSITRIM[4:0]:内部高速时钟调整 (Internal high-speed clock trimming) 7:3
由软件写入来调整内部高速时钟,它们被叠加在HSICAL[5:0]数值上。
这些位在HSICAL[7:0]的基础上,让用户可以输入一个调整数值,根据电压和温度的变化调整
内部HSI RC振荡器的频率。
默认数值为16,可以把HSI调整到8MHz±1%;每步HSICAL的变化调整约40kHz
2 保留,始终读为0
HSIRDY:内部高速时钟就绪标志 (Internal high-speed clock ready flag) 1
由硬件置’1’指示内部8MHz振荡器已经稳定。在HSION位清零后,该位需要6个内部8MHz
荡器周期清零。
0:内部8MHz振荡器没有就绪;
1:内部8MHz振荡器就绪。
HSION:内部高速时钟使能 (Internal high-speed clock enable) 0
由软件置’1’或清零。
当从待机和停止模式返回或用作系统时钟的外部4-16MHz振荡器发生故障时,该位由硬件置’1’
来启动内部8MHzRC振荡器。当内8MHz振荡器被直接或间接地用作或被选择将要作为系
统时钟时,该位不能被清零。
0:内部8MHz振荡器关闭;
1:内部8MHz振荡器开启。
6.3.2 时钟配置寄存器(RCC_CFGR)
偏移地址: 0x04
复位值: 0x0000 0000
访问: 02个等待周期,字,半字和字节访问
只有当访问发生在时钟切换时,才会插入12个等待周期。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
保留 USB
PRE
PLL
XTPRE
PLL
SRC
rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw r r rw rw
HPRE[3:0] SWS[1:0] SW[1:0]
保留 MCO[2:0] PLLMUL[3:0]
ADCPRE[1:0] PPRE2[2:0] PPRE1[2:0]
31:27 保留,始终读为0
61/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
MCO 微控制器时钟输出 (Microcontroller clock output) 26:24
由软件置’1’或清零。
0xx:没有时钟输出;
100:系统时钟(SYSCLK)输出;
101:内部RC振荡器时钟(HSI)输出;
110:外部振荡器时钟(HSE)输出;
111PLL时钟2分频后输出。
注意:- 该时钟输出在启动和切换MCO时钟源时可能会被截断。
- 在系统时钟作为输出至MCO引脚时,请保证输出时钟频率不超过50MHz (I/O口最高频率)
USBPREUSB预分频 (USB prescaler) 22
由软件置’1’或清’0’来产生48MHzUSB时钟。在RCC_APB1ENR寄存器中使能USB时钟之
前,必须保证该位已经有效。如果USB时钟被使能,该位不能被清零。
0PLL时钟1.5倍分频作为USB时钟
1PLL时钟直接作为USB时钟
PLLMULPLL倍频系数 (PLL multiplication factor) 21:18
由软件设置来确定PLL倍频系数。只有在PLL关闭的情况下才可被写入。
注意:PLL的输出频率不能超过72MHz
0000PLL 2倍频输出 1000PLL 10倍频输出
0001PLL 3倍频输出 1001PLL 11倍频输出
0010PLL 4倍频输出 1010PLL 12倍频输出
0011PLL 5倍频输出 1011PLL 13倍频输出
0100PLL 6倍频输出 1100PLL 14倍频输出
0101PLL 7倍频输出 1101PLL 15倍频输出
0110PLL 8倍频输出 1110PLL 16倍频输出
0111PLL 9倍频输出 1111PLL 16倍频输出
PLLXTPREHSE分频器作为PLL输入 (HSE divider for PLL entry) 17
由软件置’1’或清’0’来分频HSE后作为PLL输入时钟。只能在关闭PLL时才能写入此位。
0HSE不分频
1HSE 2分频
PLLSRCPLL输入时钟源 (PLL entry clock source) 16
由软件置’1’或清’0’来选择PLL输入时钟源。只能在关闭PLL时才能写入此位。
0HSI振荡器时钟经2分频后作为PLL输入时钟
1HSE时钟作为PLL输入时钟。
ADCPRE[1:0]ADC预分频 (ADC prescaler) 15:14
由软件置’1’或清’0’来确定ADC时钟频率
00PCLK2 2分频后作为ADC时钟
01PCLK2 4分频后作为ADC时钟
10PCLK2 6分频后作为ADC时钟
11PCLK2 8分频后作为ADC时钟
PPRE2[2:0]:高速APB预分频(APB2) (APB high-speed prescaler (APB2)) 13:11
由软件置’1’或清’0’来控制高速APB2时钟(PCLK2)的预分频系数。
0xxHCLK不分频
100HCLK 2分频
101HCLK 4分频
110HCLK 8分频
111HCLK 16分频
62/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
PPRE1[2:0]:低速APB预分频(APB1) (APB low-speed prescaler (APB1)) 10:8
由软件置’1’或清’0’来控制低速APB1时钟(PCLK1)的预分频系数。
警告:软件必须保证APB1时钟频率不超过36MHz
0xxHCLK不分频
100HCLK 2分频
101HCLK 4分频
110HCLK 8分频
111HCLK 16分频
HPRE[3:0] AHB预分频 (AHB Prescaler) 7:4
由软件置’1’或清’0’来控制AHB时钟的预分频系数。
0xxxSYSCLK不分频
1000SYSCLK 2分频 1100SYSCLK 64分频
1001SYSCLK 4分频 1101SYSCLK 128分频
1010SYSCLK 8分频 1110SYSCLK 256分频
1011SYSCLK 16分频 1111SYSCLK 512分频
2.3.3) 注意:当AHB时钟的预分频系数大于1时,必须开启预取缓冲器。详见闪存读取(
SWS[1:0]:系统时钟切换状态 (System clock switch status) 3:2
由硬件置’1’或清’0’来指示哪一个时钟源被作为系统时钟。
00HSI作为系统时钟;
01HSE作为系统时钟;
10PLL输出作为系统时钟;
11:不可用。
SW[1:0]:系统时钟切换 (System clock switch) 1:0
由软件置’1’或清’0’来选择系统时钟源。
在从停止或待机模式中返回时或直接或间接作为系统时钟的HSE出现故障时,由硬件强制选择
HSI作为系统时钟(如果时钟安全系统已经启动)
00HSI作为系统时钟;
01HSE作为系统时钟;
10PLL输出作为系统时钟;
11:不可用。
6.3.3 时钟中断寄存器 (RCC_CIR)
偏移地址: 0x08
复位值: 0x0000 0000
访问:无等待周期, , 半字 和字节访问
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
CSSC PLL
RDYC
HSE
RDYC
HIS
RDYC
LSE
RDYC
LSI
RDYC
w wwwww
1514131211109876543210
PLL
RDYIE
HSE
RDYIE
HSI
RDYIE
LSE
RDYIE
LSI
RDYIE CSSF PLL
RDYF
HSE
RDYF
HSI
RDYF
LSE
RDYF
LSI
RDYF
rw rw rw rw rw r r r r r r
保留 保留
保留 保留
31:24 保留,始终读为0
CSSC:清除时钟安全系统中断 (Clock security system interrupt clear) 23
由软件置’1’来清除CSSF安全系统中断标志位CSSF
0:无作用;
1:清除CSSF安全系统中断标志位。
63/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
22:21 保留,始终读为0
PLLRDYC:清除PLL就绪中断 (PLL ready interrupt clear) 20
由软件置’1’来清除PLL就绪中断标志位PLLRDYF
0:无作用;
1:清除PLL就绪中断标志位PLLRDYF
HSERDYC:清除HSE就绪中断 (HSE ready interrupt clear) 19
由软件置’1’来清除HSE就绪中断标志位HSERDYF
0:无作用;
1:清除HSE就绪中断标志位HSERDYF
HSIRDYC 清除HSI就绪中断 (HSI ready interrupt clear) 18
由软件置’1’来清除HSI就绪中断标志位HSIRDYF
0:无作用;
1:清除HSI就绪中断标志位HSIRDYF
LSERDYC:清除LSE就绪中断 (LSE ready interrupt clear) 17
由软件置’1’来清除LSE就绪中断标志位LSERDYF
0:无作用;
1:清除LSE就绪中断标志位LSERDYF
LSIRDYC:清除LSI就绪中断 (LSI ready interrupt clear) 16
由软件置’1’来清除LSI就绪中断标志位LSIRDYF
0:无作用;
1:清除LSI就绪中断标志位LSIRDYF
15:13 保留,始终读为0
PLLRDYIEPLL就绪中断使能 (PLL ready interrupt enable) 12
由软件置’1’或清’0’来使能或关闭PLL就绪中断。
0PLL就绪中断关闭;
1PLL就绪中断使能。
HSERDYIEHSE就绪中断使能 (HSE ready interrupt enable) 11
由软件置’1’或清’0’来使能或关闭外部4-16MHz振荡器就绪中断。
0HSE就绪中断关闭;
1HSE就绪中断使能。
HSIRDYIEHSI就绪中断使能 (HSI ready interrupt enable) 10
由软件置’1’或清’0’来使能或关闭内部8MHz RC振荡器就绪中断。
0HSI就绪中断关闭;
1HSI就绪中断使能。
LSERDYIELSE就绪中断使能 (LSE ready interrupt enable) 9
由软件置’1’或清’0’来使能或关闭外部32kHz RC振荡器就绪中断。
0LSE就绪中断关闭;
1LSE就绪中断使能。
LSIRDYIELSI就绪中断使能 (LSI ready interrupt enable) 8
由软件置’1’或清’0’来使能或关闭内部40kHz RC振荡器就绪中断。
0LSI就绪中断关闭;
1LSI就绪中断使能。
CSSF:时钟安全系统中断标志 (Clock security system interrupt flag) 7
在外部4-16MHz振荡器时钟出现故障时,由硬件置’1’
由软件通过置’1’ CSSC位来清除。
0:无HSE时钟失效产生的安全系统中断;
1HSE时钟失效导致了时钟安全系统中断。
6:5 保留,始终读为0
64/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
PLLRDYFPLL就绪中断标志 (PLL ready interrupt flag) 4
PLL就绪且PLLRDYIE位被置’1’时,由硬件置’1’
由软件通过置’1’ PLLRDYC位来清除。
0:无PLL上锁产生的时钟就绪中断;
1PLL上锁导致时钟就绪中断。
HSERDYFHSE就绪中断标志 (HSE ready interrupt flag) 3
在外部低速时钟就绪且HSERDYIE位被置’1’时,由硬件置’1’
由软件通过置’1’ HSERDYC位来清除。
0:无外部4-16MHz振荡器产生的时钟就绪中断;
1:外部4-16MHz振荡器导致时钟就绪中断。
HSIRDYFHSI就绪中断标志 (HSI ready interrupt flag) 2
在内部高速时钟就绪且HSIRDYIE位被置’1’时,由硬件置’1’
由软件通过置’1’ HSIRDYC位来清除。
0:无内部8MHz RC振荡器产生的时钟就绪中断;
1:内部8MHz RC振荡器导致时钟就绪中断。
LSERDYFLSE就绪中断标志 (LSE ready interrupt flag) 1
在外部低速时钟就绪且LSERDYIE位被置’1’时,由硬件置’1’
由软件通过置’1’ LSERDYC位来清除。
0:无外部32kHz振荡器产生的时钟就绪中断;
1:外部32kHz振荡器导致时钟就绪中断。
LSIRDYFLSI就绪中断标志 (LSI ready interrupt flag) 0
在内部低速时钟就绪且LSIRDYIE位被置’1’时,由硬件置’1’
由软件通过置’1’ LSIRDYC位来清除。
0:无内部40kHz RC振荡器产生的时钟就绪中断;
1:内部40kHz RC振荡器导致时钟就绪中断。
6.3.4 APB2 外设复位寄存器 (RCC_APB2RSTR)
偏移地址: 0x0C
复位值: 0x0000 0000
访问:无等待周期, , 半字 和字节访问
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
ADC3
RST
USART1
RST
TIM8
RST
SPI1
RST
TIM1
RST
ADC2
RST
ADC1
RST
IOPG
RST
IOPF
RST
IOPE
RST
IOPD
RST
IOPC
RST
IOPB
RST
IOPA
RST 保留 AFIO
RST
rw rw rw rw rw rw rw rw rw rw rw rw rw rw res rw
保留
31:16 保留,始终读为0
15 ADC3RSTADC3接口复位 (ADC3 interface reset)
由软件置’1’或清’0’
0:无作用;
1:复位ADC3接口。
USART1RSTUSART1复位 (USART1 reset) 14
由软件置’1’或清’0’
0:无作用;
1:复位USART1
65/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
TIM8RSTTIM8定时器复位 (TIM8 timer reset) 13
由软件置’1’或清’0’
0:无作用;
1:复位TIM8定时器。
SPI1RSTSPI1复位 (SPI 1 reset) 12
由软件置’1’或清’0’
0:无作用;
1:复位SPI1
TIM1RSTTIM1定时器复位 (TIM1 timer reset) 11
由软件置’1’或清’0’
0:无作用;
1:复位TIM1定时器。
ADC2RSTADC2接口复位 (ADC 2 interface reset) 10
由软件置’1’或清’0’
0:无作用;
1:复位ADC2接口。
ADC1RSTADC1接口复位 (ADC 1 interface reset) 9
由软件置’1’或清’0’
0:无作用;
1:复位ADC1接口。
IOPGRSTIO端口G复位 (IO port G reset) 8
由软件置’1’或清’0’
0:无作用;
1:复位IO端口G
7 IOPFRSTIO端口F复位 (IO port F reset)
由软件置’1’或清’0’
0:无作用;
1:复位IO端口F
IOPERSTIO端口E复位 (IO port E reset) 6
由软件置’1’或清’0’
0:无作用;
1:复位IO端口E
IOPDRSTIO端口D复位 (IO port D reset) 5
由软件置’1’或清’0’
0:无作用;
1:复位IO端口D
IOPCRSTIO端口C复位 (IO port C reset) 4
由软件置’1’或清’0’
0:无作用;
1:复位IO端口C
IOPBRSTIO端口B复位 (IO port B reset) 3
由软件置’1’或清’0’
0:无作用;
1:复位IO端口B
IOPARSTIO端口A复位 (IO port A reset) 2
由软件置’1’或清’0’
0:无作用;
1:复位IO端口A
1 保留,始终读为0
66/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
AFIORST辅助功能IO复位 (Alternate function I/O reset) 0
由软件置’1’或清’0’
0:无作用;
1:复位辅助功能。
6.3.5 APB1 外设复位寄存器 (RCC_APB1RSTR)
偏移地址:0x10
复位值:0x0000 0000
访问:无等待周期,字, 半字和字节访问
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DACRST PWR
RST
BKP
RST 保留 CAN
RST 保留 USB
RST
I2C2
RST
I2C1
RST
UART5R
ST
UART4R
ST
USART3
RST
USART2
RST 保留
rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SPI3
RST
SPI2
RST
WWDG
RST
TIM7
RST
TIM6
RST
TIM5
RST
TIM4
RST
TIM3
RST
TIM2
RST
rw rw rw rw rw rw rw rw rw
保留
保留
保留
31:30 保留,始终读为0
DACRSTDAC接口复位 (DAC interface reset) 29
由软件置’1’或清’0’
0:无作用;
1:复位DAC接口。
PWRRST:电源接口复位 (Power interface reset) 28
由软件置’1’或清’0’
0:无作用;
1:复位电源接口。
BKPRST:备份接口复位 (Backup interface reset) 27
由软件置’1’或清’0’
0:无作用;
1:复位备份接口。
26 保留,始终读为0
CANRSTCAN复位 (CAN reset) 25
由软件置’1’或清’0’
0:无作用;
1:复位CAN
24 保留,始终读为0
USBRSTUSB复位 (USB reset) 23
由软件置’1’或清’0’
0:无作用;
1:复位USB
I2C2RSTI2C 2复位 (I2C 2 reset) 22
由软件置’1’或清’0’
0:无作用;
1:复位I2C 2
I2C1RSTI2C 1复位 (I2C 1 reset) 21
由软件置’1’或清’0’
0:无作用;
1:复位I2C 1
67/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
UART5RSTUART5复位 (UART 5 reset) 20
由软件置’1’或清’0’
0:无作用;
1:复位UART5
UART4RSTUART4复位 (UART 4 reset) 19
由软件置’1’或清’0’
0:无作用;
1:复位UART4
USART3RSTUSART3复位 (USART 3 reset) 18
由软件置’1’或清’0’
0:无作用;
1:复位USART3
USART2RSTUSART2复位 (USART 2 reset) 17
由软件置’1’或清’0’
0:无作用;
1:复位USART2
16 保留,始终读为0
SPI3RST SPI3 复位 (SPI 3 reset) 15
由软件置’1’或清’0’
0:无作用;
1:复位SPI3
SPI2RSTSPI2复位 (SPI 2 reset) 14
由软件置’1’或清’0’
0:无作用;
1:复位SPI2
13:12 保留,始终读为0
WWDGRST:窗口看门狗复位 (Window watchdog reset) 11
由软件置’1’或清’0’
0:无作用;
1:复位窗口看门狗。
10:6 保留,始终读为0
TIM7RST:定时器7复位 (Timer 7 reset) 5
由软件置’1’或清’0’
0:无作用;
1:复位TIM7定时器。
TIM6RST:定时器6复位 (Timer 6 reset) 4
由软件置’1’或清’0’
0:无作用;
1:复位TIM6定时器。
TIM5RST:定时器5复位 (Timer 5 reset) 3
由软件置’1’或清’0’
0:无作用;
1:复位TIM5定时器。
TIM4RST:定时器4复位 (Timer 4 reset) 2
由软件置’1’或清’0’
0:无作用;
1:复位TIM4定时器。
68/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
TIM3RST:定时器3复位 (Timer 3 reset) 1
由软件置’1’或清’0’
0:无作用;
1:复位TIM3定时器。
TIM2RST:定时器2复位 (Timer 2 reset) 0
由软件置’1’或清’0’
0:无作用;
1:复位TIM2定时器。
6.3.6 AHB外设时钟使能寄存器 (RCC_AHBENR)
偏移地址:0x14
复位值:0x0000 0014
访问:无等待周期, , 半字 和字节访问
注:
当外设时钟没有启用时,软件不能读出外设寄存器的数值,返回的数值始终是
0x0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109 8 76543210
SDIOEN
保留
FSMCEN
保留
CRCEN 保留 FLITF
EN 保留 SRAM
EN
DMA2
EN
DMA1
EN
rw rw rw rw rw rw rw
保留
保留
31:11 保留,始终读为0
SDIOENSDIO时钟使能 (SDIO clock enable) 10
由软件置’1’或清’0’
0SDIO时钟关闭;
1SDIO时钟开启。
9 保留,始终读为0
FSMCENFSMC时钟使能 (FSMC clock enable) 8
由软件置’1’或清’0’
0FSMC时钟关闭;
1FSMC时钟开启。
7 保留,始终读为0
CRCENCRC时钟使能 (CRC clock enable) 6
由软件置’1’或清’0’
0CRC时钟关闭;
1CRC时钟开启。
5 保留,始终读为0
FLITFEN:闪存接口电路时钟使能 (FLITF clock enable) 4
由软件置’1’或清’0’来开启或关闭睡眠模式时闪存接口电路时钟。
0:睡眠模式时闪存接口电路时钟关闭;
1:睡眠模式时闪存接口电路时钟开启。
3 保留,始终读为0
SRAMENSRAM时钟使能 (SRAM interface clock enable) 2
由软件置’1’或清’0’来开启或关闭睡眠模式时SRAM时钟。
0:睡眠模式时SRAM时钟关闭;
1:睡眠模式时SRAM时钟开启。
69/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
DMA2ENDMA2时钟使能 (DMA2 clock enable) 1
由软件置’1’或清’0’
0DMA2时钟关闭;
1DMA2时钟开启。
DMA1ENDMA1时钟使能 (DMA1 clock enable) 0
由软件置’1’或清’0’
0DMA1时钟关闭;
1DMA1时钟开启。
6.3.7 APB2 外设时钟使能寄存器(RCC_APB2ENR)
偏移地址:0x18
复位值:0x0000 0000
访问:字,半字和字节访问
通常无访问等待周期。但在APB2总线上的外设被访问时,将插入等待状态直到APB2的外设访
问结束。
注:
当外设时钟没有启用时,软件不能读出外设寄存器的数值,返回的数值始终是
0x0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
ADC3
EN
USART1
EN
TIM8
EN
SPI1
EN
TIM1
EN
ADC2
EN
ADC1
EN
IOPG
EN
IOPF
EN
IOPE
EN
IOPD
EN
IOPC
EN
IOPB
EN
IOPA
EN 保留 AFIO
EN
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
31:16 保留,始终读为0
ADC3ENADC3接口时钟使能 (ADC 3 interface clock enable) 15
由软件置’1’或清’0’
0ADC3接口时钟关闭;
1ADC3接口时钟开启。
USART1ENUSART1时钟使能 (USART1 clock enable) 14
由软件置’1’或清’0’
0USART1时钟关闭;
1USART1时钟开启。
TIM8ENTIM8定时器时钟使能 (TIM8 Timer clock enable) 13
由软件置’1’或清’0’
0TIM8定时器时钟关闭;
1TIM8定时器时钟开启。
SPI1ENSPI1时钟使能 (SPI 1 clock enable) 12
由软件置’1’或清’0’
0SPI1时钟关闭;
1SPI1时钟开启。
TIM1ENTIM1定时器时钟使能 (TIM1 Timer clock enable) 11
由软件置’1’或清’0’
0TIM1定时器时钟关闭;
1TIM1定时器时钟开启。
ADC2ENADC2接口时钟使能 (ADC 2 interface clock enable) 10
由软件置’1’或清’0’
0ADC2接口时钟关闭;
1ADC2接口时钟开启。
70/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
ADC1ENADC1接口时钟使能 (ADC 1 interface clock enable) 9
由软件置’1’或清’0’
0ADC1接口时钟关闭;
1ADC1接口时钟开启。
IOPGENIO端口G时钟使能 (I/O port G clock enable) 8
由软件置’1’或清’0’
0IO端口G时钟关闭;
1IO端口G时钟开启。
IOPFENIO端口F时钟使能 (I/O port F clock enable) 7
由软件置’1’或清’0’
0IO端口F时钟关闭;
1IO端口F时钟开启。
IOPEENIO端口E时钟使能 (I/O port E clock enable) 6
由软件置’1’或清’0’
0IO端口E时钟关闭;
1IO端口E时钟开启。
IOPDENIO端口D时钟使能 (I/O port D clock enable) 5
由软件置’1’或清’0’
0IO端口D时钟关闭;
1IO端口D时钟开启。
IOPCENIO端口C时钟使能 (I/O port C clock enable) 4
由软件置’1’或清’0’
0IO端口C时钟关闭;
1IO端口C时钟开启。
IOPBENIO端口B时钟使能 (I/O port B clock enable) 3
由软件置’1’或清’0’
0IO端口B时钟关闭;
1IO端口B时钟开启。
IOPAENIO端口A时钟使能 (I/O port A clock enable) 2
由软件置’1’或清’0’
0IO端口A时钟关闭;
1IO端口A时钟开启。
1 保留,始终读为0
AFIOEN:辅助功能IO时钟使能 (Alternate function I/O clock enable) 0
由软件置’1’或清’0’
0:辅助功能IO时钟关闭;
1:辅助功能IO时钟开启。
6.3.8 APB1 外设时钟使能寄存器(RCC_APB1ENR)
偏移地址:0x1C
复位值:0x0000 0000
访问:字、半字和字节访问
通常无访问等待周期。但在APB1总线上的外设被访问时,将插入等待状态直到APB1外设访问
结束。
注:
当外设时钟没有启用时,软件不能读出外设寄存器的数值,返回的数值始终是
0x0
71/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
72/754
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DACEN PWR
EN
BKP
EN 保留 CAN
EN 保留 USB
EN
I2C2
EN
I2C1
EN
UART5
EN
UART4
EN
USART3
EN
USART2
EN 保留
rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543 2 1 0
SPI3
EN
SPI2
EN
WWDG
EN
TIM7
EN
TIM6
EN
TIM5
EN
TIM4
EN
TIM3
EN
TIM2
EN
rw rw rw rw rw rw rw rw rw
保留
保留
保留
31:30 保留,始终读为0
29 DACEN: DAC接口时钟使能 (DAC interface clock enable)
由软件置’1’或清’0’
0DAC接口时钟关闭;
1DAC接口时钟开启。
PWREN:电源接口时钟使能 (Power interface clock enable) 28
由软件置’1’或清’0’
0:电源接口时钟关闭;
1:电源接口时钟开启。
BKPEN:备份接口时钟使能 (Backup interface clock enable) 27
由软件置’1’或清’0’
0:备份接口时钟关闭;
1:备份接口时钟开启。
26 保留,始终读为0
CANENCAN时钟使能 (CAN clock enable) 25
由软件置’1’或清’0’
0CAN时钟关闭;
1CAN时钟开启。
24 保留,始终读为0
USBENUSB时钟使能 (USB clock enable) 23
由软件置’1’或清’0’
0USB时钟关闭;
1USB时钟开启。
I2C2ENI2C 2时钟使能 (I2C 2 clock enable) 22
由软件置’1’或清’0’
0I2C 2时钟关闭;
1I2C 2时钟开启。
I2C1ENI2C 1时钟使能 (I2C 1 clock enable) 21
由软件置’1’或清’0’
0I2C 1时钟关闭;
1I2C 1时钟开启。
UART5ENUART5时钟使能 (UART 5 clock enable) 20
由软件置’1’或清’0’
0UART5时钟关闭;
1UART5时钟开启。
UART4ENUART4时钟使能 (UART 4 clock enable) 19
由软件置’1’或清’0’
0UART4时钟关闭;
1UART4时钟开启。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
USART3ENUSART3时钟使能 (USART 3 clock enable) 18
由软件置’1’或清’0’
0USART3时钟关闭;
1USART3时钟开启。
USART2ENUSART2时钟使能 (USART 2 clock enable) 17
由软件置’1’或清’0’
0USART2时钟关闭;
1USART2时钟开启。
16 保留,始终读为0
SPI3ENSPI 3时钟使能 (SPI 3 clock enable) 15
由软件置’1’或清’0’
0SPI 3时钟关闭;
1SPI 3时钟开启。
SPI2ENSPI 2时钟使能 (SPI 2 clock enable) 14
由软件置’1’或清’0’
0SPI 2时钟关闭;
1SPI 2时钟开启。
13:12 保留,始终读为0
WWDGEN:窗口看门狗时钟使能 (Window watchdog clock enable) 11
由软件置’1’或清’0’
0:窗口看门狗时钟关闭;
1:窗口看门狗时钟开启。
10:6 保留,始终读为0
TIM7EN:定时器7时钟使能 (Timer 7 clock enable) 5
由软件置’1’或清’0’
0:定时器7时钟关闭;
1:定时器7时钟开启。
TIM6EN:定时器6时钟使能 (Timer 6 clock enable) 4
由软件置’1’或清’0’
0:定时器6时钟关闭;
1:定时器6时钟开启。
TIM5EN:定时器5时钟使能 (Timer 5 clock enable) 3
由软件置’1’或清’0’
0:定时器5时钟关闭;
1:定时器5时钟开启。
TIM4EN:定时器4时钟使能 (Timer 4 clock enable) 2
由软件置’1’或清’0’
0:定时器4时钟关闭;
1:定时器4时钟开启。
TIM3EN:定时器3时钟使能 (Timer 3 clock enable) 1
由软件置’1’或清’0’
0:定时器3时钟关闭;
1:定时器3时钟开启。
TIM2EN:定时器2时钟使能 (Timer 2 clock enable) 0
由软件置’1’或清’0’
0:定时器2时钟关闭;
1:定时器2时钟开启。
73/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
6.3.9 备份域控制寄存器 (RCC_BDCR)
偏移地址:0x20
复位值:0x0000 0000,只能由备份域复位有效复位
访问:03等待周期,字、半字和字节访问
当连续对该寄存器进行访问时,将插入等待状态。
注意:
备份域控制寄存器中
(RCC_BDCR)
LSEON
LSEBYP
RTCSEL
RTCEN
位处于备份域。因
此,这些位在复位后处于写保护状态,只有在电源控制寄存器
(PWR_CR)
中的
DBP
位置
’1’
后才
能对这些位进行改动。进一步信息请参考
5.1
节。这些位只能由备份域复位清除
(
6.1.3
)
。任
何内部或外部复位都不会影响这些位。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BDRST
rw
1514131211109876543210
RTC
EN
LSE
BYP
LSE
RDY LSEON
rw rw rw rw r rw
保留
保留 RTCSEL[1:0] 保留
31:17 保留,始终读为0
BDRST:备份域软件复位 (Backup domain software reset) 16
由软件置’1’或清’0’
0:复位未激活;
1:复位整个备份域。
RTCENRTC时钟使能 (RTC clock enable) 15
由软件置’1’或清’0’
0RTC时钟关闭;
1RTC时钟开启。
14:10 保留,始终读为0
RTCSEL[1:0]RTC时钟源选择 (RTC clock source selection) 9:8
由软件设置来选择RTC时钟源。一旦RTC时钟源被选定,直到下次后备域被复位,它不能在被
改变。可通过设置BDRST位来清除。
00:无时钟;
01LSE振荡器作为RTC时钟;
10LSI振荡器作为RTC时钟;
11HSE振荡器在128分频后作为RTC时钟。
7:3 保留,始终读为0
LSEBYP:外部低速时钟振荡器旁路 (External low-speed oscillator bypass) 2
在调试模式下由软件置’1’或清’0’来旁路LSE。只有在外部32kHz振荡器关闭时,才能写入该位
0LSE时钟未被旁路;
1LSE时钟被旁路。
LSERDY:外部低速LSE就绪 (External low-speed oscillator ready) 1
由硬件置’1’或清’0’来指示是否外部32kHz振荡器就绪。在LSEON被清零后,该位需要6个外部
低速振荡器的周期才被清零。
0:外部32kHz振荡器未就绪;
1:外部32kHz振荡器就绪。
LSEON:外部低速振荡器使能 (External low-speed oscillator enable) 0
由软件置’1’或清’0’
0:外部32kHz振荡器关闭;
1:外部32kHz振荡器开启。
74/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
6.3.10 控制/状态寄存器 (RCC_CSR)
偏移地址:0x24
复位值:0x0C00 0000,除复位标志外由系统复位清除,复位标志只能由电源复位清除。
访问:03等待周期,字、半字和字节访问
当连续对该寄存器进行访问时,将插入等待状态。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
LPWR
RSTF
WWDG
RSTF
IWDG
RSTF
SFT
RSTF
POR
RSTF
PIN
RSTF 保留 RMVF
rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
LSI
RDY LSION
rrw
保留
保留
LPWRRSTF:低功耗复位标志 (Low-power reset flag) 31
在低功耗管理复位发生时由硬件置’1’;由软件通过写RMVF位清除。
0:无低功耗管理复位发生;
1:发生低功耗管理复位.
6.1.1节的低功耗管理复位 关于低功耗管理复位的详细信息,请参考
WWDGRSTF:窗口看门狗复位标志 (Window watchdog reset flag) 30
在窗口看门狗复位发生时由硬件置’1’;由软件通过写RMVF位清除。
0:无窗口看门狗复位发生;
1:发生窗口看门狗复位。
IWDGRSTF:独立看门狗复位标志 (Independent watchdog reset flag) 29
在独立看门狗复位发生在VDD区域时由硬件置’1’;由软件通过写RMVF位清除。
0:无独立看门狗复位发生;
1:发生独立看门狗复位。
SFTRSTF:软件复位标志 (Software reset flag) 28
在软件复位发生时由硬件置’1’;由软件通过写RMVF位清除。
0:无软件复位发生;
1:发生软件复位。
PORRSTF:上电/掉电复位标志 (POR/PDR reset flag) 27
在上电/掉电复位发生时由硬件置’1’;由软件通过写RMVF位清除。
0:无上电/掉电复位发生;
1:发生上电/掉电复位。
PINRSTFNRST引脚复位标志 (PIN reset flag) 26
NRST引脚复位发生时由硬件置’1’;由软件通过写RMVF位清除。
0:无NRST引脚复位发生;
1:发生NRST引脚复位。
25 保留,读操作返回0
RMVF:清除复位标志 (Remove reset flag) 24
由软件置’1’来清除复位标志。
0:无作用;
1:清除复位标志。
23:2 保留,读操作返回0
LSIRDY:内部低速振荡器就绪 (Internal low-speed oscillator ready) 1
由硬件置’1或清’0’来指示内部40kHz RC振荡器是否就绪。在LSION清零后,3个内部40kHz RC
振荡器的周期后LSIRDY被清零。
0:内部40kHz RC振荡器时钟未就绪;
1:内部40kHz RC振荡器时钟就绪。
75/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
LSION:内部低速振荡器使能 (Internal low-speed oscillator enable) 0
由软件置’1或清’0’
0:内部40kHz RC振荡器关闭;
1:内部40kHz RC振荡器开启。
76/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册
77/754
参照200912 RM0008 Reference Manual 英文第10
6.3.11 RCC寄存器地址映像
下表列出了RCC寄存器的映像和复位值。
15 RCC寄存器地址映像和复位值
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
RCC_CR
PLLRDY
PLLON
CSSON
HSEBYP
HSERDY
HSEON
HSIRDY
HSION
复位值
00 00000000000010000 11
RCC_CFGR
USBPRE
PLLXTPRE
PLLSRC
复位值
000 00000000000000000000000
RCC_CIR
CSSC
PLLRDYC
HSERDYC
HSIRDYC
LSERDYC
LSIRDYC
PLLRDYIE
HSERDYIE
HSIRDYIE
LSERDYIE
LSIRDYIE
CSSF
PLLRDYF
HSERDYF
HSIRDYF
LSERDYF
LSIRDYF
复位值 0
00000 000000 00000
RCC_APB2RSTR
ADC3RST
USART1RST
TIM8RST
SPIRST
TIM1RST
ADC2RST
ADC1RST
IOPGRST
IOPFRST
IOPERST
IOPDRST
IOPCRST
IOPBRST
IOPARST
AFIORST
复位值
00000000000000 0
RCC_APB1RSTR
DACRST
PWRRST
BKPRST
CANRST
USBRST
I2C2RST
I2C1RST
UART5RST
UART4RST
USART3RST
USART2RST
SPI3RST
SPI2RST
WWDGRST
TIM7RST
TIM6RST
TIM5RST
TIM4RST
TIM3RST
TIM2RST
复位值
000 0 0000000 00 0 000000
RCC_AHBENR
SDIOEN
FSMCEN
CRCEN
FLITFEN
SRAMEN
DMA2EN
DMA1EN
复位值
0001100
RCC_APB2ENR
ADC3EN
USART1EN
TIM8RST
SPI1EN
TIM1EN
ADC2EN
ADC1EN
IOPGEN
IOPFEN
IOPEEN
IOPDEN
IOPCEN
IOPBEN
IOPAEN
AFIOEN
复位值
00000000000000 0
RCC_APB1ENR
DACRST
PWREN
BKPEN
CANEN
USBEN
I2C2EN
I2C1EN
UART5EN
UART4EN
USART3EN
USART2EN
SPI3EN
SPI2EN
WWDGEN
TIM7EN
TIM6EN
TIM5EN
TIM4EN
TIM3EN
TIM2EN
复位值
000 0 0000000 00 0 000000
RCC_BDCR
BDRST
RTCEN
LSEBYP
LSERDYF
LSEON
保留
00Ch
SWS[1:0
]
SW[1:0]
008h
ADC
PRE
[1:0]
PRRE2
[2:0]
PRRE1
[2:0] HPRE[3:0]
保留
保留保留 保留 保留
保留
保留保留000h HSITRIM[4:0]
004h
HSICAL[7:0]
014h
MCO[2:0]
保留
PLLMUL[3:0]
010h
保留
保留
保留
保留
保留
保留
保留
保留
保留
保留01Ch
保留
保留
保留 保留
018h
保留保留020h
保留
保留
保留
保留
保留
保留
保留
RTC
SEL
[1:0]
复位值
00 00 000
RCC_CSR
LPWRRSTF
WWDGRSTF
IWDGRSTF
SFTRSTF
PORRSTF
PINRSTF
RMVF
LSIRDY
LSION
复位值
00001
1
000
保留
保留024h
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
有关寄存器的起始地址,请参考表1
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
7 互联型产品的复位和时钟控制(RCC)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
本章内容适用于互联型产品,除非特别说明。
7.1 复位
有三种复位:系统复位、电源复位和后备域复位。
7.1.1 系统复位
系统复位将复位除时钟控制寄存器CSR中的复位标志和备份区域中的寄存器以外的所有寄存器
为它们的复位数值(见图4)
当以下事件中的一件发生时,产生一个系统复位:
1. NRST引脚上的低电平(外部复位)
2. 窗口看门狗计数终止(WWDG复位)
3. 独立看门狗计数终止(IWDG复位)
4. 软件复位(SW复位)
5. 低功耗管理复位
可通过查看RCC_CSR控制状态寄存器中的复位状态标志位识别复位事件来源。
软件复位
通过将Cortex™-M3中断应用和复位控制寄存器中的SYSRESETREQ位置’1’,可实现软件复
位。请参考Cortex™-M3技术参考手册获得进一步信息。
低功耗管理复位
在以下两种情况下可产生低功耗管理复位:
1. 在进入待机模式时产生低功耗管理复位:
通过将用户选择字节中的nRST_STDBY位置’1’将使能该复位。这时,即使执行了进入待
机模式的过程,系统将被复位而不是进入待机模式。
2. 在进入停止模式时产生低功耗管理复位:
通过将用户选择字节中的nRST_STOP位置’1’将使能该复位。这时,即使执行了进入停机
模式的过程,系统将被复位而不是进入停机模式。
78/754
关于用户选择字节的进一步信息,请参考STM32F10xxx闪存编程手册
7.1.2 电源复位
当以下事件中之一发生时,产生电源复位:
1. 上电/掉电复位(POR/PDR复位)
2. 从待机模式中返回
4) 电源复位将复位除了备份区域外的所有寄存器(
下图中复位源将最终作用于RESET引脚,并在复位过程中保持低电平。复位入口矢量被固定在
地址0x0000_0004。更多细节,参见表54 :互联型产品的向量表
芯片内部的复位信号会在NRST引脚上输出,脉冲发生器保证每一个(外部或内部)复位源都能有
至少20μs的脉冲延时;当NRST引脚被拉低产生外部复位时,它将产生复位脉冲。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
10 复位电路
7.1.3 备份域复位
备份区域拥有两个专门的复位,它们只影响备份区域(见图4)
当以下事件中之一发生时,产生备份区域复位。
79/754
1. 软件复位,备份区域复位可由设置备份域控制寄存器(RCC_BDCR)(7.3.9)中的
BDRST位产生。
2. VDDVBAT两者掉电的前提下,VDDVBAT上电将引发备份区域复位。
7.2 时钟
三种不同的时钟源可被用来驱动系统时钟(SYSCLK)
HSI振荡器时钟
HSE振荡器时钟
PLL时钟
这些设备有以下2种二级时钟源:
40kHz低速内部RC(LSI RC)振荡器,可以用于驱动独立看门狗,或通过程序选择驱动
RTC,用于从停机/待机模式下自动唤醒系统。
也可以通过程序选择32.768kHz低速外部晶体(LSE晶体)用来驱动RTC(RTCCLK)
当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
11 时钟树
1.当HSI被用于作为PLL时钟的输入时,系统时钟能得到的最大频率是36MHz
2.对于内部和外部时钟源的特性,请参考相应产品数据手册中“电气特性”章节。
高级时钟控制器拥有3PLL,为使用外部晶体或振荡器提供了高度的灵活性,使得核心和外设
能够工作在最高的频率,同时保证以太网和全速的USB OTG能够有合适的时钟。
一个单一的25MHz晶体可以为整个系统和所有包括以太网和全速USB OTG的外设提供时钟。为
了实现高质量的音频性能,可以使用一个音频晶体;这样,I2S的主时钟可以产生所有从8kHz
96kHz之间的标准采样频率,而误差小于0.5%
更多关于以太网、全速USB OTG/I2S(音频)时钟配置的需求,请参考互联型产品数据手册
的“附录A 应用框图”。
用户可通过多个预分频器配置AHB、高速APB(APB2)和低速APB(APB1)域的频率AHB
APB2域的最大频率是72MHzAPB1域的最大允许频率是36MHz
除去以下情况,所有外设的时钟都是从系统时钟(SYSCLK)得到:
Flash存储器编程接口时钟始终是HSI时钟。
80/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
全速USB OTG48MHz时钟是从PCC VCO时钟(2xPLLCLK),和随后可编程预分频器(3
或除2)得到,这是通过RCC_CFGR寄存器的OTGFSPRE位控制。为了正常地操作USB
OTG,应该配置PLL输出72MHz48MHz
I2S2I2S3的时钟还可以从PLL3 VCO时钟(2xPLL3CLK)得到,这是通过RCC_CFGR2
存器的I2SxSRC位控制。更多有关PLL3的内容和如何配置I2S时钟,以得到高质量的音频效
果,请参阅第23.4.3
81/754
节:时钟发生器。
以太网MAC的时钟(TXRXRMII)是由外部PHY提供。更多有关以太网配置的详情,请见
27.4.4 MII/RMII的选择节: 。
当使用以太网模块时,AHB时钟频率必须至少为25MHz
RCC通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。通过对SysTick
控制与状态寄存器的设置,可选择上述时钟或Cortex(HCLK)时钟作为SysTick时钟。ADC时钟
由高速APB2时钟经2468分频后获得。
定时器时钟频率分配由硬件按以下2种情况自动设置:
1. 如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。
2. 否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。
FCLKCortex™-M3的自由运行时钟。详情见ARMCortex™-M3 r1p1 技术参考手册(TRM)
7.2.1 HSE时钟
高速外部时钟信号(HSE)由以下两种时钟源产生:
HSE外部晶体/陶瓷谐振器
HSE用户外部时钟
为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容器必须尽可能地靠
近振荡器引脚。负载电容值必须根据所选择的振荡器来调整。
HSE/LSE时钟源 12
硬件配置
外部时钟
晶体/陶瓷谐振器
外部时钟源(HSE旁路)
在这个模式里,必须提供外部时钟。它的频率最高可达50MHz。用户可通过设置在时钟控制寄
存器中的HSEBYPHSEON位来选择这一模式。外部时钟信号(50%占空比的方波、正弦波或
三角波)必须连到SOC_IN引脚,同时保证OSC_OUT引脚悬空。见图12
外部晶体/陶瓷谐振器(HSE晶体)
3~25Mz外部振荡器可为系统提供非常精确的主时钟。相关的硬件配置可参考12,进一步信息
可参考数据手册的电气特性部分。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
时钟控制寄存器(RCC_CR)中的HSERDY位用来指示高速外部振荡器是否稳定。在启动时,
直到这一位被硬件置’1’,时钟才被释放出来。如果在时钟中断寄存器(RCC_CIR)中允许产生中
断,将会产生相应中断。
HSE晶体可以通过设置时钟控制寄存器(RCC_CR)中的HSEON位被启动和关闭。
7.2.2 HSI时钟
HSI时钟信号由内部8MHzRC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。
HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振
荡器短。然而,即使在校准之后它的时钟频率精度仍较差。
校准
制造工艺决定了不同芯片的RC振荡器频率会不同,这就是为什么每个芯片的HSI时钟频率在出
厂前已经被ST校准到1%(25°C)的原因。系统复位时,工厂校准值被装载到时钟控制寄存器的
HSICAL[7:0]位。
如果用户的应用基于不同的电压或环境温度,这将会影响RC振荡器的精度。可以通过时钟控制
寄存器里的HSITRIM[4:0]位来调整HSI频率。
时钟控制寄存器中的HSIRDY位用来指示HSI RC振荡器是否稳定。在时钟启动过程中,直到这
一位被硬件置’1’HSI RC输出时钟才被释放。HSI RC可由时钟控制寄存器中的HSION位来启
动和关闭。
如果HSE晶体振荡器失效,HSI时钟会被作为备用时钟源。参考7.2.7
82/754
节时钟安全系统(CSS)
7.2.3 PLL
PLL以下述时钟源之一为输入,产生倍频的输出:
HSI时钟除以2
HSE或通过一个可配置分频器的PLL2时钟
11 时钟控制寄存器(RCC_CR) 参见
11PLL2 PLL3 HSE 通过一个可配置的分频器提供时钟。参见 时钟配置寄存器
2(RCC_CFGR2)
必须在使能每个PLL之前完成PLL的配置(选择时钟源、预分频系数和倍频系数等),同时应该在
它们的输入时钟稳定(就绪位)后才能使能。一旦使能了PLL,这些参数将不能再被改变。
时钟配置寄存器(RCC_CFGR)当改变主PLL的输入时钟源时,必须在选中了新的时钟源(通过
PLLSRC)之后才能关闭原来的时钟源。
时钟中断寄存器(RCC_CIR),可以在PLL就绪时产生一个中断。 如果使能了
7.2.4 LSE时钟
LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供
一个低功耗且精确的时钟源。
LSE晶体通过在备份域控制寄存器(RCC_BDCR)里的LSEON位启动和关闭。
备份域控制寄存器(RCC_BDCR)里的LSERDY指示LSE晶体振荡是否稳定。在启动阶段,直
到这个位被硬件置’1’后,LSE时钟信号才被释放出来。如果在时钟中断寄存器(RCC_CIR)里被
允许,可产生中断申请。
外部时钟源(LSE旁路)
在这个模式里必须提供一个32.768kHz频率的外部时钟源。你可以通过设置在备份域控制寄存
(RCC_BDCR)里的LSEBYPLSEON位来选择这个模式。具有50%占空比的外部时钟信号(
波、正弦波或三角波)必须连到OSC32_IN引脚,同时保证OSC32_OUT脚悬空,见图12
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
7.2.5 LSI时钟
LSI RC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和
自动唤醒单元提供时钟。LSI时钟频率大约40kHz(30kHz60kHz之间)。进一步信息请参考数
据手册中有关电气特性部分。
LSI RC可以通过控制/状态寄存器(RCC_CSR)里的LSION位来启动或关闭。
在控制/状态寄存器(RCC_CSR)里的LSIRDY位指示低速内部振荡器是否稳定。在启动阶段,直
到这个位被硬件设置为’1’,此时钟才被释放。如果在时钟中断寄存器(RCC_CIR)里被允许,
将产生LSI中断申请。
LSI校准
可以通过校准内部低速振荡器LSI来补偿其频率偏移,从而获得精度可接受的RTC时间基数,以
及独立看门狗(IWDG)的超时时间(当这些外设以LSI为时钟源)
校准可以通过使用TIM5的输入时钟(TIM5_CLK)测量LSI时钟频率实现。测量以HSE的精度为保
证,软件可以通过调整RTC20位预分频器来获得精确的RTC时钟基数,以及通过计算得到精
确的独立看门狗(IWDG)的超时时间。
LSI校准步骤如下:
1. 打开TIM5,设置通道4为输入捕获模式;
2. 设置AFIO_MAPRTIM5_CH4_IREMAP位为’1’,在内部把LSI连接到TIM5的通道4
3. 通过TIM5的捕获/比较4事件或者中断来测量LSI时钟频率;
4. 根据测量结果和期望的RTC时间基数和独立看门狗的超时时间,设置20位预分频器。
7.2.6 系统时钟(SYSCLK)选择
系统复位后,HSI振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它
将不能被停止。
只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时
钟源的切换才会发生。在被选择时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟
源就绪,才发生切换。
在时钟控制寄存器(RCC_CR)的状态位指示哪个时钟已经准备好了,哪个时钟目前被用作系统
时钟。
7.2.7 时钟安全系统(CSS)
时钟安全系统可以通过软件被激活。一旦其被激活,时钟监测器将在HSE振荡器启动延迟后被
使能,并在HSE时钟关闭后关闭。
如果HSE时钟发生故障HSE振荡器被自动关闭,时钟失效事件将被送到高级定时器(TIM1
TIM8)的刹车输入端,并产生时钟安全中断CSSI,允许软件完成营救操作。此CSSI中断连接到
Cortex™-M3NMI中断(不可屏蔽中断)
注意:
一旦
CSS
被激活,并且
HSE
时钟出现故障,
CSS
中断就产生,并且
NMI
也自动产生。
NMI
将被不
断执行,直到
CSS
中断挂起位被清除。因此,在
NMI
的处理程序中必须通过设置时钟中断寄存器
(RCC_CIR)
里的
CSSC
位来清除
CSS
中断。
如果HSE振荡器被直接或间接地作为系统时钟,(间接的意思是:它被作为PLL输入时钟或通过
PLL2,并且PLL时钟被作为系统时钟)时钟故障将导致系统时钟自动切换到HSI振荡器,同时
外部HSE振荡器被关闭。在时钟失效时,如果HSE振荡器时钟(直接的或通过PLL2)是作为PLL
的输入时钟,PLL也将被关闭。
7.2.8 RTC时钟
备份域控制寄存器(RCC_BDCR)通过设置 里的RTCSEL[1:0] 位,RTCCLK 时钟源可以由
HSE/128LSELSI时钟提供。除非备份域复位,此选择不能被改变。
LSE时钟在备份域里,但HSELSI时钟不是。因此:
83/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
如果LSE被选为RTC时钟:
只要VBAT维持供电,尽管VDD供电被切断,RTC仍继续工作。
如果LSI被选为自动唤醒单元(AWU)时钟:
如果VDD供电被切断, AWU状态不能被保证。有关LSI校准,详见7.2.5
84/754
节:LSI时钟。
如果HSE时钟128分频后作为RTC时钟:
如果VDD供电被切断或内部电压调压器被关闭(1.8V域的供电被切断),则RTC状态不确
定。
必须设置电源控制寄存器(4.4.1节:电源控制寄存器(PWR_CR))DPB(取消后备区
域的写保护)1
7.2.9 看门狗时钟
如果独立看门狗已经由硬件选项或软件启动,LSI振荡器将被强制在打开状态,并且不能被关
闭。在LSI振荡器稳定后,时钟供应给IWDG
7.2.10 时钟输出
微控制器允许输出时钟信号到外部MCO引脚。
相应的GPIO端口寄存器必须被配置为相应功能。以下8个时钟信号可被选作MCO时钟:
SYSCLK
HSI
HSE
2PLL时钟
PLL2时钟
PLL3时钟除以2
XT1外部3~25MHz振荡器(用于以太网)
PLL3时钟(用于以太网)
MCO上输出的时钟必须小于50MHz(这是I/O端口的最大速度)
时钟配置寄存器(RCC_CFGR)中的MCO[3:0]位控制。 时钟的选择由
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
7.3 RCC寄存器
请参考第1章中有关寄存器描述中用到的缩写。
7.3.1 时钟控制寄存器(RCC_CR)
偏移地址: 0x00
复位值: 0x000 XX83X代表未定义
访问: 无等待状态, , 半字 和字节访问
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PLL3
RDY
PLL3
ON
PLL2
RDY
PLL2
ON
PLL
RDY PLLON CSS
ON
HSE
BYP
HSE
RDY
HSE
ON
rrwrrwrrw rwrwrrw
1514131211109876543210
保留 HSI
RDY HSION
rrrrrrrrrwrwrwrwrw rrw
保留
HSICAL[7:0] HSITRIM[4:0]
保留
31:30 保留,始终读为0
PLL3RDYPLL3时钟就绪标志 (PLL3 clock ready flag) 29
PLL3锁定后由硬件置’1’
0PLL3未锁定;
1PLL3锁定。
PLL3ONPLL3使能 (PLL3 enable) 28
由软件置’1’或清零以开启或关闭PLL3
当进入待机和停止模式时,该位由硬件清零。
0PLL3关闭;
1PLL3使能。
PLL2RDYPLL2时钟就绪标志 (PLL2 clock ready flag) 27
PLL2锁定后由硬件置’1’
0PLL2未锁定;
1PLL2锁定。
PLL2ONPLL2使能 (PLL2 enable) 26
由软件置’1’或清零以开启或关闭PLL2
当进入待机和停止模式时,该位由硬件清零。当PLL2时钟被间接地作为系统时钟时(即它被用
PLL时钟的输入,最终被用于系统时钟),该位不能被清零。
0PLL2关闭;
1PLL2使能。
PLLRDYPLL时钟就绪标志 (PLL clock ready flag) 25
PLL锁定后由硬件置’1’
0PLL未锁定;
1PLL锁定。
PLLONPLL使能 (PLL enable) 24
由软件置’1’或清零以开启或关闭PLL
当进入待机和停止模式时,该位由硬件清零。当PLL时钟被用作或被选择将要作为系统时钟
时,该位不能被清零。在清除这个位之前,软件必须先关闭全速USB OTG的时钟。
0PLL关闭;
1PLL使能。
23:20 保留,始终读为0
85/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
CSSON:时钟安全系统使能 (Clock security system enable) 19
由软件置’1’或清零以使能时钟监测器。
0:时钟监测器关闭;
1:如果外部3-25MHz振荡器就绪,时钟监测器开启。
HSEBYP:外部高速时钟旁路 (External high-speed clock bypass) 18
在调试模式下由软件置’1’或清零来旁路外部晶体振荡器。只有在外部3-25MHz振荡器关闭的情
况下,才能写入该位。
0:外部3-25MHz振荡器没有旁路;
1:外部3-25MHz外部晶体振荡器被旁路。
HSERDY:外部高速时钟就绪标志 (External high-speed clock ready flag) 17
由硬件置’1’指示外部3-25MHz振荡器已经稳定。在HSEON位清零后,该位需要6个外部3-
25MHz时钟周期清零。
0:外部3-25MHz时钟没有就绪;
1:外部3-25MHz时钟就绪。
HSEON:外部高速时钟使能 (External high-speed clock enable) 16
由软件置’1’或清零。
当进入待机和停止模式时,该位由硬件清零,关闭外部3-25MHz振荡器。当外部3-25MHz振荡
器被用作或被选择将要作为系统时钟时,该位不能被清零。
0HSE振荡器关闭;
1HSE振荡器开启。
HSICAL[7:0]:内部高速时钟校准 (Internal high-speed clock calibration) 15:8
在系统启动时,这些位被自动初始化
HSITRIM[4:0]:内部高速时钟调整 (Internal high-speed clock trimming) 7:3
由软件写入来调整内部高速时钟,它们被叠加在HSICAL[5:0]数值上。
这些位在HSICAL[7:0]的基础上,让用户可以输入一个调整数值,根据电压和温度的变化调整
内部HSI RC振荡器的频率。
默认数值为16,可以把HSI调整到8MHz±1%;每步HSICAL的变化调整约40kHz
2 保留,始终读为0
HSIRDY:内部高速时钟就绪标志 (Internal high-speed clock ready flag) 1
由硬件置’1’指示内部8MHz振荡器已经稳定。在HSION位清零后,该位需要6个内部8MHz
荡器周期清零。
0:内部8MHz振荡器没有就绪;
1:内部8MHz振荡器就绪。
HSION:内部高速时钟使能 (Internal high-speed clock enable) 0
由软件置’1’或清零。
当从待机和停止模式返回或用作系统时钟的外部3-25MHz振荡器发生故障时,该位由硬件置’1’
来启动内部8MHzRC振荡器。当内8MHz振荡器被直接或间接地用作或被选择将要作为系
统时钟时,该位不能被清零。
0:内部8MHz振荡器关闭;
1:内部8MHz振荡器开启。
7.3.2 时钟配置寄存器(RCC_CFGR)
偏移地址: 0x04
复位值: 0x0000 0000
访问: 02个等待周期,字,半字和字节访问
只有当访问发生在时钟切换时,才会插入12个等待周期。
86/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
保留 OTGFS
PRE
PLL
XTPRE
PLL
SRC
rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw r r rw rw
MCO[3:0]
HPRE[3:0] SWS[1:0] SW[1:0]
PLLMUL[3:0]
ADCPRE[1:0] PPRE2[2:0] PPRE1[2:0]
保留
31:28 保留,始终读为0
MCO 微控制器时钟输出 (Microcontroller clock output) 27:24
由软件置’1’或清零。
00xx:没有时钟输出;
0100:系统时钟(SYSCLK)输出;
0101:内部8MHzRC振荡器时钟输出;
0110:外部3-25MHz振荡器时钟输出;
0111PLL时钟2分频后输出。
1000PLL2时钟输出
1001PLL3时钟2分频后输出。
1010XT1外部3-25MHz振荡器时钟输出(为以太网)
1011PLL3时钟输出(为以太网)
注意:- 该时钟输出在启动和切换MCO时钟源时可能会被截断。
- 在系统时钟作为输出至MCO引脚时,请保证输出时钟频率不超过50MHz (I/O口最高频率)
OTGFSPRE:全速USB OTG预分频 (USB OTG FS prescaler) 22
由软件置’1’或清’0’来产生48MHz的全速USB OTG时钟。在RCC_APB1ENR存器中使能全速
OTG时钟之前,必须保证该位已经有效。如果全速OTG时钟被使能,该位不能被清’0
0PLL VCO时钟(2xPLLCLK)被除以3(必须配置PLL输出为72MHz)
1PLL VCO时钟(2xPLLCLK)被除以2(必须配置PLL输出为48MHz)
PLLMULPLL倍频系数 (PLL multiplication factor) 21:18
由软件设置来确定PLL倍频系数。只有在PLL关闭的情况下才可被写入。
000x:保留 10xx:保留
0010PLL 4倍频输出 1100:保留
0011PLL 5倍频输出 1101PLL 6.5倍频输出
0100PLL 6倍频输出 111x:保留
0101PLL 7倍频输出
0110PLL 8倍频输出
0111PLL 9倍频输出
警告:PLL的输出频率绝对不能超过72MHz
PLLXTPREPREDIV1分频因子的低位 (LSB of division factor PREDIV1) 17
由软件置’1’或清’0’来选择PREDIV1分频因子的最低位。这一位与RCC_CFGR2寄存器的位(0)
是同一位,因此修改RCC_CFGR2寄存器的位(0)同时会改变这一位。
如果RCC_CFGR2 寄存器的[3:1] ’000’ ,则该位控制PREDIV1 对输入时钟进行2分频
(PLLXPRE=1),或不对输入时钟分频(PLLXPRE=0)
只能在关闭PLL时才能写入此位。
PLLSRCPLL输入时钟源 (PLL entry clock source) 16
由软件置’1’或清’0’来选择PLL输入时钟源。只能在关闭PLL时才能写入此位。
0HSI振荡器时钟经2分频后作为PLL输入时钟
1PREDIV1输出作为PLL输入时钟。
注:当改变主PLL的输入时钟源时,必须在选定了新的时钟源后才能关闭原来的时钟源。
87/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
ADCPRE[1:0]ADC预分频 (ADC prescaler) 15:14
由软件置’1’或清’0’来确定ADC时钟频率
00PCLK2 2分频后作为ADC时钟
01PCLK2 4分频后作为ADC时钟
10PCLK2 6分频后作为ADC时钟
11PCLK2 8分频后作为ADC时钟
PPRE2[2:0]:高速APB预分频(APB2) (APB high-speed prescaler (APB2)) 13:11
由软件置’1’或清’0’来控制高速APB2时钟(PCLK2)的预分频系数。
0xxHCLK不分频
100HCLK 2分频
101HCLK 4分频
110HCLK 8分频
111HCLK 16分频
PPRE1[2:0]:低速APB预分频(APB1) (APB low-speed prescaler (APB1)) 10:8
由软件置’1’或清’0’来控制低速APB1时钟(PCLK1)的预分频系数。
0xxHCLK不分频
100HCLK 2分频
101HCLK 4分频
110HCLK 8分频
111HCLK 16分频
警告:软件必须保证APB1时钟频率不超过36MHz
HPRE[3:0] AHB预分频 (AHB Prescaler) 7:4
由软件置’1’或清’0’来控制AHB时钟的预分频系数。
0xxxSYSCLK不分频
1000SYSCLK 2分频 1100SYSCLK 64分频
1001SYSCLK 4分频 1101SYSCLK 128分频
1010SYSCLK 8分频 1110SYSCLK 256分频
1011SYSCLK 16分频 1111SYSCLK 512分频
2.3.3) 注意:当AHB时钟的预分频系数大于1时,必须开启预取缓冲器。详见闪存读取(
警告:当使用以太网模块时,AHB的时钟频率必须至少为25MHz
SWS[1:0]:系统时钟切换状态 (System clock switch status) 3:2
由硬件置’1’或清’0’来指示哪一个时钟源被作为系统时钟。
00HSI作为系统时钟;
01HSE作为系统时钟;
10PLL输出作为系统时钟;
11:不可用。
SW:系统时钟切换 (System clock switch) 1:0
由软件置’1’或清’0’来选择系统时钟源(SYSCLK)
在从停止或待机模式中返回时或直接或间接作为系统时钟的HSE出现故障时,由硬件强制选择
HSI作为系统时钟(如果时钟安全系统已经启动)
00HSI作为系统时钟;
01HSE作为系统时钟;
10PLL输出作为系统时钟;
11:不可用。
7.3.3 时钟中断寄存器(RCC_CIR)
偏移地址: 0x08
复位值: 0x0000 0000
访问:无等待周期, , 半字 和字节访问
88/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
CSSC PLL3
RDYC
PLL2
RDYC
PLL
RDYC
HSE
RDYC
HIS
RDYC
LSE
RDYC
LSI
RDYC
wwwwwwww
1514131211109876543210
保留 PLL3
RDYIE
PLL2
RDYIE
PLL
RDYIE
HSE
RDYIE
HSI
RDYIE
LSE
RDYIE
LSI
RDYIE CSSF PLL3
RDYF
PLL2
RDYF
PLL
RDYF
HSE
RDYF
HSI
RDYF
LSE
RDYF
LSI
RDYF
rwrwrwrwrwrwrwrrrrrrrr
保留
31:24 保留,始终读为0
CSSC:清除时钟安全系统中断 (Clock security system interrupt clear) 23
由软件置’1’来清除CSSF安全系统中断标志位CSSF
0:无作用;
1:清除CSSF安全系统中断标志位。
PLL3RDYC:清除PLL3就绪中断 (PLL3 ready interrupt clear) 22
由软件置’1’来清除PLL3就绪中断标志位PLL3RDYF
0:无作用;
1:清除PLL3就绪中断标志位PLL3RDYF
PLL2RDYC:清除PLL2就绪中断 (PLL2 ready interrupt clear) 21
由软件置’1’来清除PLL2就绪中断标志位PLL2RDYF
0:无作用;
1:清除PLL2就绪中断标志位PLL2RDYF
PLLRDYC:清除PLL就绪中断 (PLL ready interrupt clear) 20
由软件置’1’来清除PLL就绪中断标志位PLLRDYF
0:无作用;
1:清除PLL就绪中断标志位PLLRDYF
HSERDYC:清除HSE就绪中断 (HSE ready interrupt clear) 19
由软件置’1’来清除HSE就绪中断标志位HSERDYF
0:无作用;
1:清除HSE就绪中断标志位HSERDYF
HSIRDYC 清除HSI就绪中断 (HSI ready interrupt clear) 18
由软件置’1’来清除HSI就绪中断标志位HSIRDYF
0:无作用;
1:清除HSI就绪中断标志位HSIRDYF
LSERDYC:清除LSE就绪中断 (LSE ready interrupt clear) 17
由软件置’1’来清除LSE就绪中断标志位LSERDYF
0:无作用;
1:清除LSE就绪中断标志位LSERDYF
LSIRDYC:清除LSI就绪中断 (LSI ready interrupt clear) 16
由软件置’1’来清除LSI就绪中断标志位LSIRDYF
0:无作用;
1:清除LSI就绪中断标志位LSIRDYF
15 保留,始终读为0
PLL3RDYIEPLL3就绪中断使能 (PLL3 ready interrupt enable) 14
由软件置’1’或清’0’来使能或关闭PLL3就绪中断。
0PLL3就绪中断关闭;
1PLL3就绪中断使能。
89/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
PLL2RDYIEPLL2就绪中断使能 (PL2L ready interrupt enable) 13
由软件置’1’或清’0’来使能或关闭PLL2就绪中断。
0PLL2就绪中断关闭;
1PLL2就绪中断使能。
PLLRDYIEPLL就绪中断使能 (PLL ready interrupt enable) 12
由软件置’1’或清’0’来使能或关闭PLL就绪中断。
0PLL就绪中断关闭;
1PLL就绪中断使能。
HSERDYIEHSE就绪中断使能 (HSE ready interrupt enable) 11
由软件置’1’或清’0’来使能或关闭外部3-25MHz振荡器就绪中断。
0HSE就绪中断关闭;
1HSE就绪中断使能。
HSIRDYIEHSI就绪中断使能 (HSI ready interrupt enable) 10
由软件置’1’或清’0’来使能或关闭内部8MHz RC振荡器就绪中断。
0HSI就绪中断关闭;
1HSI就绪中断使能。
LSERDYIELSE就绪中断使能 (LSE ready interrupt enable) 9
由软件置’1’或清’0’来使能或关闭外部32kHz RC振荡器就绪中断。
0LSE就绪中断关闭;
1LSE就绪中断使能。
LSIRDYIELSI就绪中断使能 (LSI ready interrupt enable) 8
由软件置’1’或清’0’来使能或关闭内部40kHz RC振荡器就绪中断。
0LSI就绪中断关闭;
1LSI就绪中断使能。
CSSF:时钟安全系统中断标志 (Clock security system interrupt flag) 7
在外部4-25MHz振荡器时钟出现故障时,由硬件置’1’
由软件通过置’1’ CSSC位来清除。
0:无HSE时钟失效产生的安全系统中断;
1HSE时钟失效导致了时钟安全系统中断。
PLL3RDYFPLL3就绪中断标志 (PLL3 ready interrupt flag) 6
PLL3就绪且PLL3RDYIE位被置’1’时,由硬件置’1’
由软件通过置’1’ PLL3RDYC位来清除。
0:无PLL3上锁产生的时钟就绪中断;
1PLL3上锁导致时钟就绪中断。
PLL2RDYFPLL2就绪中断标志 (PLL2 ready interrupt flag) 5
PLL3就绪且PLL2RDYIE位被置’1’时,由硬件置’1’
由软件通过置’1’ PLL2RDYC位来清除。
0:无PLL2上锁产生的时钟就绪中断;
1PLL2上锁导致时钟就绪中断。
PLLRDYFPLL就绪中断标志 (PLL ready interrupt flag) 4
PLL就绪且PLLRDYIE位被置’1’时,由硬件置’1’
由软件通过置’1’ PLLRDYC位来清除。
0:无PLL上锁产生的时钟就绪中断;
1PLL上锁导致时钟就绪中断。
HSERDYFHSE就绪中断标志 (HSE ready interrupt flag) 3
在外部低速时钟就绪且HSERDYIE位被置’1’时,由硬件置’1’
由软件通过置’1’ HSERDYC位来清除。
0:无外部3-25MHz振荡器产生的时钟就绪中断;
1:外部3-25MHz振荡器导致时钟就绪中断。
90/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
HSIRDYFHSI就绪中断标志 (HSI ready interrupt flag) 2
在内部高速时钟就绪且HSIRDYIE位被置’1’时,由硬件置’1’
由软件通过置’1’ HSIRDYC位来清除。
0:无内部8MHz RC振荡器产生的时钟就绪中断;
1:内部8MHz RC振荡器导致时钟就绪中断。
LSERDYFLSE就绪中断标志 (LSE ready interrupt flag) 1
在外部低速时钟就绪且LSERDYIE位被置’1’时,由硬件置’1’
由软件通过置’1’ LSERDYC位来清除。
0:无外部32kHz振荡器产生的时钟就绪中断;
1:外部32kHz振荡器导致时钟就绪中断。
LSIRDYFLSI就绪中断标志 (LSI ready interrupt flag) 0
在内部低速时钟就绪且LSIRDYIE位被置’1’时,由硬件置’1’
由软件通过置’1’ LSIRDYC位来清除。
0:无内部40kHz RC振荡器产生的时钟就绪中断;
1:内部40kHz RC振荡器导致时钟就绪中断。
7.3.4 APB2 外设复位寄存器(RCC_APB2RSTR)
偏移地址: 0x0C
复位值: 0x0000 0000
访问:无等待周期, , 半字 和字节访问
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
保留 USART1
RST 保留 SPI1
RST
TIM1
RST
ADC2
RST
ADC1
RST
IOPE
RST
IOPD
RST
IOPC
RST
IOPB
RST
IOPA
RST 保留 AFIO
RST
rw rw rw rw rw rw rw rw rw rw rw
保留
保留
31:15 保留,始终读为0
USART1RSTUSART1复位 (USART1 reset) 14
由软件置’1’或清’0’
0:无作用;
1:复位USART1
13 保留,始终读为0
SPI1RSTSPI1复位 (SPI 1 reset) 12
由软件置’1’或清’0’
0:无作用;
1:复位SPI1
TIM1RSTTIM1定时器复位 (TIM1 timer reset) 11
由软件置’1’或清’0’
0:无作用;
1:复位TIM1定时器。
ADC2RSTADC2接口复位 (ADC 2 interface reset) 10
由软件置’1’或清’0’
0:无作用;
1:复位ADC2接口。
91/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
ADC1RSTADC1接口复位 (ADC 1 interface reset) 9
由软件置’1’或清’0’
0:无作用;
1:复位ADC1接口。
8:7 保留,始终读为0
IOPERSTIO端口E复位 (IO port E reset) 6
由软件置’1’或清’0’
0:无作用;
1:复位IO端口E
IOPDRSTIO端口D复位 (IO port D reset) 5
由软件置’1’或清’0’
0:无作用;
1:复位IO端口D
IOPCRSTIO端口C复位 (IO port C reset) 4
由软件置’1’或清’0’
0:无作用;
1:复位IO端口C
IOPBRSTIO端口B复位 (IO port B reset) 3
由软件置’1’或清’0’
0:无作用;
1:复位IO端口B
IOPARSTIO端口A复位 (IO port A reset) 2
由软件置’1’或清’0’
0:无作用;
1:复位IO端口A
1 保留,始终读为0
AFIORST辅助功能IO复位 (Alternate function I/O reset) 0
由软件置’1’或清’0’
0:无作用;
1:复位辅助功能。
7.3.5 APB1 外设复位寄存器(RCC_APB1RSTR)
偏移地址:0x10
复位值:0x0000 0000
访问:无等待周期,字, 半字和字节访问
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DACRST PWR
RST
BKP
RST
CAN2
RST
CAN1
RST
I2C2
RST
I2C1
RST
UART5R
ST
UART4R
ST
USART3
RST
USART2
RST 保留
rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SPI3
RST
SPI2
RST
WWDG
RST
TIM7
RST
TIM6
RST
TIM5
RST
TIM4
RST
TIM3
RST
TIM2
RST
rw rw rw rw rw rw rw rw rw
保留
保留
保留
保留
31:30 保留,始终读为0
DACRSTDAC接口复位 (DAC interface reset) 29
由软件置’1’或清’0’
0:无作用;
1:复位DAC接口。
92/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
PWRRST:电源接口复位 (Power interface reset) 28
由软件置’1’或清’0’
0:无作用;
1:复位电源接口。
BKPRST:备份接口复位 (Backup interface reset) 27
由软件置’1’或清’0’
0:无作用;
1:复位备份接口。
CAN2RSTCAN2复位 (CAN2 reset) 26
由软件置’1’或清’0’
0:无作用;
1:复位CAN2
CAN1RSTCAN1复位 (CAN1 reset) 25
由软件置’1’或清’0’
0:无作用;
1:复位CAN1
24:23 保留,始终读为0
I2C2RSTI2C 2复位 (I2C 2 reset) 22
由软件置’1’或清’0’
0:无作用;
1:复位I2C 2
I2C1RSTI2C 1复位 (I2C 1 reset) 21
由软件置’1’或清’0’
0:无作用;
1:复位I2C 1
UART5RSTUART5复位 (UART 5 reset) 20
由软件置’1’或清’0’
0:无作用;
1:复位UART5
UART4RSTUART4复位 (UART 4 reset) 19
由软件置’1’或清’0’
0:无作用;
1:复位UART4
USART3RSTUSART3复位 (USART 3 reset) 18
由软件置’1’或清’0’
0:无作用;
1:复位USART3
USART2RSTUSART2复位 (USART 2 reset) 17
由软件置’1’或清’0’
0:无作用;
1:复位USART2
16 保留,始终读为0
SPI3RST SPI3 复位 (SPI 3 reset) 15
由软件置’1’或清’0’
0:无作用;
1:复位SPI3
93/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
SPI2RSTSPI2复位 (SPI 2 reset) 14
由软件置’1’或清’0’
0:无作用;
1:复位SPI2
13:12 保留,始终读为0
WWDGRST:窗口看门狗复位 (Window watchdog reset) 11
由软件置’1’或清’0’
0:无作用;
1:复位窗口看门狗。
10:6 保留,始终读为0
TIM7RST:定时器7复位 (Timer 7 reset) 5
由软件置’1’或清’0’
0:无作用;
1:复位TIM7定时器。
TIM6RST:定时器6复位 (Timer 6 reset) 4
由软件置’1’或清’0’
0:无作用;
1:复位TIM6定时器。
TIM5RST:定时器5复位 (Timer 5 reset) 3
由软件置’1’或清’0’
0:无作用;
1:复位TIM5定时器。
TIM4RST:定时器4复位 (Timer 4 reset) 2
由软件置’1’或清’0’
0:无作用;
1:复位TIM4定时器。
TIM3RST:定时器3复位 (Timer 3 reset) 1
由软件置’1’或清’0’
0:无作用;
1:复位TIM3定时器。
TIM2RST:定时器2复位 (Timer 2 reset) 0
由软件置’1’或清’0’
0:无作用;
1:复位TIM2定时器。
7.3.6 AHB外设时钟使能寄存器(RCC_AHBENR)
偏移地址:0x14
复位值:0x0000 0014
访问:无等待周期, , 半字 和字节访问
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
ETHMAC
RXEN
rw
1514131211109 8 76543210
ETHMAC
TXEN
ETH
MACEN 保留 OTG
FSEN CRCEN 保留 FLITF
EN 保留 SRAM
EN
DMA2
EN
DMA1
EN
rw rw rw rw rw rw rw rw
保留
保留
31:17 保留,始终读为0
94/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
ETHMACRXEN:以太网MAC接收时钟使能 (Ethernet MAC RX clock enable) 16
由软件置’1’或清’0’
0:以太网MAC接收时钟关闭;
1:以太网MAC接收时钟开启。
注:在RMII模式下,如果使能了这个时钟,MACRMII时钟也被使能。
ETHMACTXEN:以太网MAC发送时钟使能 (Ethernet MAC TX clock enable) 15
由软件置’1’或清’0’
0:以太网MAC发送时钟关闭;
1:以太网MAC发送时钟开启。
注:在RMII模式下,如果使能了这个时钟,MACRMII时钟也被使能。
ETHMACEN:以太网MAC时钟使能 (Ethernet MAC TX clock enable) 14
由软件置’1’或清’0’。在使能MAC时钟之前必须先选定PHY接口(MII/RMII)
0:以太网MAC时钟关闭;
1:以太网MAC时钟开启。
13 保留,始终读为0
OTGFSEN:全速USB OTG时钟使能 (USB OTG FS clock enable) 12
由软件置’1’或清’0’
0:全速USB OTG时钟关闭;
1:全速USB OTG时钟开启。
11:7 保留,始终读为0
CRCENCRC时钟使能 (CRC clock enable) 6
由软件置’1’或清’0’
0CRC时钟关闭;
1CRC时钟开启。
5 保留,始终读为0
FLITFEN:闪存接口电路时钟使能 (FLITF clock enable) 4
由软件置’1’或清’0’来开启或关闭睡眠模式时闪存接口电路时钟。
0:睡眠模式时闪存接口电路时钟关闭;
1:睡眠模式时闪存接口电路时钟开启。
3 保留,始终读为0
SRAMENSRAM时钟使能 (SRAM interface clock enable) 2
由软件置’1’或清’0’来开启或关闭睡眠模式时SRAM时钟。
0:睡眠模式时SRAM时钟关闭;
1:睡眠模式时SRAM时钟开启。
DMA2ENDMA2时钟使能 (DMA2 clock enable) 1
由软件置’1’或清’0’
0DMA2时钟关闭;
1DMA2时钟开启。
DMA1ENDMA1时钟使能 (DMA1 clock enable) 0
由软件置’1’或清’0’
0DMA1时钟关闭;
1DMA1时钟开启。
7.3.7 APB2 外设时钟使能寄存器(RCC_APB2ENR)
偏移地址:0x18
复位值:0x0000 0000
访问:字,半字和字节访问
95/754
通常无访问等待周期。但在APB2总线上的外设被访问时,将插入等待状态直到APB2的外设访
问结束。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
保留
USART1
EN
保留 SPI1
EN
TIM1
EN
ADC2
EN
ADC1
EN
IOPE
EN
IOPD
EN
IOPC
EN
IOPB
EN
IOPA
EN 保留 AFIO
EN
rw rw rw rw rw rw rw rw rw rw rw
保留
保留
31:15 保留,始终读为0
USART1ENUSART1时钟使能 (USART1 clock enable) 14
由软件置’1’或清’0’
0USART1时钟关闭;
1USART1时钟开启。
13 保留,始终读为0
SPI1ENSPI1时钟使能 (SPI 1 clock enable) 12
由软件置’1’或清’0’
0SPI1时钟关闭;
1SPI1时钟开启。
TIM1ENTIM1定时器时钟使能 (TIM1 Timer clock enable) 11
由软件置’1’或清’0’
0TIM1定时器时钟关闭;
1TIM1定时器时钟开启。
ADC2ENADC2接口时钟使能 (ADC 2 interface clock enable) 10
由软件置’1’或清’0’
0ADC2接口时钟关闭;
1ADC2接口时钟开启。
ADC1ENADC1接口时钟使能 (ADC 1 interface clock enable) 9
由软件置’1’或清’0’
0ADC1接口时钟关闭;
1ADC1接口时钟开启。
8:7 保留,始终读为0
IOPEENIO端口E时钟使能 (I/O port E clock enable) 6
由软件置’1’或清’0’
0IO端口E时钟关闭;
1IO端口E时钟开启。
IOPDENIO端口D时钟使能 (I/O port D clock enable) 5
由软件置’1’或清’0’
0IO端口D时钟关闭;
1IO端口D时钟开启。
IOPCENIO端口C时钟使能 (I/O port C clock enable) 4
由软件置’1’或清’0’
0IO端口C时钟关闭;
1IO端口C时钟开启。
IOPBENIO端口B时钟使能 (I/O port B clock enable) 3
由软件置’1’或清’0’
0IO端口B时钟关闭;
1IO端口B时钟开启。
96/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
IOPAENIO端口A时钟使能 (I/O port A clock enable) 2
由软件置’1’或清’0’
0IO端口A时钟关闭;
1IO端口A时钟开启。
1 保留,始终读为0
AFIOEN:辅助功能IO时钟使能 (Alternate function I/O clock enable) 0
由软件置’1’或清’0’
0:辅助功能IO时钟关闭;
1:辅助功能IO时钟开启。
7.3.8 APB1 外设时钟使能寄存器(RCC_APB1ENR)
偏移地址:0x1C
复位值:0x0000 0000
访问:字、半字和字节访问
通常无访问等待周期。但在APB1总线上的外设被访问时,将插入等待状态直到APB1外设访问
结束。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DACEN PWR
EN
BKP
EN
CAN2
EN
CAN1
EN
I2C2
EN
I2C1
EN
UART5
EN
UART4
EN
USART3
EN
USART2
EN 保留
rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SPI3
EN
SPI2
EN
WWDG
EN
TIM7
EN
TIM6
EN
TIM5
EN
TIM4
EN
TIM3
EN
TIM2
EN
rw rw rw rw rw rw rw rw rw
保留
保留
保留
保留
31:30 保留,始终读为0
DACEN: DAC接口时钟使能 (DAC interface clock enable) 29
由软件置’1’或清’0’
0DAC接口时钟关闭;
1DAC接口时钟开启。
PWREN:电源接口时钟使能 (Power interface clock enable) 28
由软件置’1’或清’0’
0:电源接口时钟关闭;
1:电源接口时钟开启。
BKPEN:备份接口时钟使能 (Backup interface clock enable) 27
由软件置’1’或清’0’
0:备份接口时钟关闭;
1:备份接口时钟开启。
CAN2ENCAN2时钟使能 (CAN2 clock enable) 26
由软件置’1’或清’0’
0CAN2时钟关闭;
1CAN2时钟开启。
CAN1ENCAN1时钟使能 (CAN1 clock enable) 25
由软件置’1’或清’0’
0CAN1时钟关闭;
1CAN1时钟开启。
24:23 保留,始终读为0
97/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
I2C2ENI2C 2时钟使能 (I2C 2 clock enable) 22
由软件置’1’或清’0’
0I2C 2时钟关闭;
1I2C 2时钟开启。
I2C1ENI2C 1时钟使能 (I2C 1 clock enable) 21
由软件置’1’或清’0’
0I2C 1时钟关闭;
1I2C 1时钟开启。
UART5ENUART5时钟使能 (UART 5 clock enable) 20
由软件置’1’或清’0’
0UART5时钟关闭;
1UART5时钟开启。
UART4ENUART4时钟使能 (UART 4 clock enable) 19
由软件置’1’或清’0’
0UART4时钟关闭;
1UART4时钟开启。
USART3ENUSART3时钟使能 (USART 3 clock enable) 18
由软件置’1’或清’0’
0USART3时钟关闭;
1USART3时钟开启。
USART2ENUSART2时钟使能 (USART 2 clock enable) 17
由软件置’1’或清’0’
0USART2时钟关闭;
1USART2时钟开启。
16 保留,始终读为0
SPI3ENSPI 3时钟使能 (SPI 3 clock enable) 15
由软件置’1’或清’0’
0SPI 3时钟关闭;
1SPI 3时钟开启。
SPI2ENSPI 2时钟使能 (SPI 2 clock enable) 14
由软件置’1’或清’0’
0SPI 2时钟关闭;
1SPI 2时钟开启。
13:12 保留,始终读为0
WWDGEN:窗口看门狗时钟使能 (Window watchdog clock enable) 11
由软件置’1’或清’0’
0:窗口看门狗时钟关闭;
1:窗口看门狗时钟开启。
10:6 保留,始终读为0
TIM7EN:定时器7时钟使能 (Timer 7 clock enable) 5
由软件置’1’或清’0’
0:定时器7时钟关闭;
1:定时器7时钟开启。
TIM6EN:定时器6时钟使能 (Timer 6 clock enable) 4
由软件置’1’或清’0’
0:定时器6时钟关闭;
1:定时器6时钟开启。
98/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
TIM5EN:定时器5时钟使能 (Timer 5 clock enable) 3
由软件置’1’或清’0’
0:定时器5时钟关闭;
1:定时器5时钟开启。
TIM4EN:定时器4时钟使能 (Timer 4 clock enable) 2
由软件置’1’或清’0’
0:定时器4时钟关闭;
1:定时器4时钟开启。
TIM3EN:定时器3时钟使能 (Timer 3 clock enable) 1
由软件置’1’或清’0’
0:定时器3时钟关闭;
1:定时器3时钟开启。
TIM2EN:定时器2时钟使能 (Timer 2 clock enable) 0
由软件置’1’或清’0’
0:定时器2时钟关闭;
1:定时器2时钟开启。
7.3.9 备份域控制寄存器(RCC_BDCR)
偏移地址:0x20
复位值:0x0000 0000,只能由备份域复位有效复位
访问:03等待周期,字、半字和字节访问
当连续对该寄存器进行访问时,将插入等待状态。
注意:
备份域控制寄存器中
(RCC_BDCR)
LSEON
LSEBYP
RTCSEL
RTCEN
位处于备份域。因
此,这些位在复位后处于写保护状态,只有在电源控制寄存器
(PWR_CR)
中的
DBP
位置
’1’
后才
能对这些位进行改动。进一步信息请参考
5.1
节。这些位只能由备份域复位清除
(
7.1.3
)
。任
何内部或外部复位都不会影响这些位。
31:17 保留,始终读为0
BDRST:备份域软件复位 (Backup domain software reset) 16
由软件置’1’或清’0’
0:复位未激活;
1:复位整个备份域。
RTCENRTC时钟使能 (RTC clock enable) 15
由软件置’1’或清’0’
0RTC时钟关闭;
1RTC时钟开启。
14:10 保留,始终读为0
RTCSEL[1:0]RTC时钟源选择 (RTC clock source selection) 9:8
由软件设置来选择RTC时钟源。一旦RTC时钟源被选定,直到下次后备域被复位,它不能在被
改变。可通过设置BDRST位来清除。
00:无时钟;
01LSE振荡器作为RTC时钟;
10LSI振荡器作为RTC时钟;
11HSE振荡器在128分频后作为RTC时钟。
7:3 保留,始终读为0
LSEBYP:外部低速时钟振荡器旁路 (External low-speed oscillator bypass) 2
在调试模式下由软件置’1’或清’0’来旁路LSE。只有在外部32kHz振荡器关闭时,才能写入该位
0LSE时钟未被旁路;
1LSE时钟被旁路。
99/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
LSERDY:外部低速LSE就绪 (External low-speed oscillator ready) 1
由硬件置’1’或清’0’来指示是否外部32kHz振荡器就绪。在LSEON被清零后,该位需要6个外部
低速振荡器的周期才被清零。
0:外部32kHz振荡器未就绪;
1:外部32kHz振荡器就绪。
LSEON:外部低速振荡器使能 (External low-speed oscillator enable) 0
由软件置’1’或清’0’
0:外部32kHz振荡器关闭;
1:外部32kHz振荡器开启。
7.3.10 控制/状态寄存器(RCC_CSR)
偏移地址:0x24
复位值:0x0C00 0000,除复位标志外由系统复位清除,复位标志只能由电源复位清除。
访问:03等待周期,字、半字和字节访问
当连续对该寄存器进行访问时,将插入等待状态。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
LPWR
RSTF
WWDG
RSTF
IWDG
RSTF
SFT
RSTF
POR
RSTF
PIN
RSTF 保留 RMVF
rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
LSI
RDY LSION
rrw
保留
保留
LPWRRSTF:低功耗复位标志 (Low-power reset flag) 31
在低功耗管理复位发生时由硬件置’1’;由软件通过写RMVF位清除。
0:无低功耗管理复位发生;
1:发生低功耗管理复位.
7.1.1节的
100/754
关于低功耗管理复位的详细信息,请参考 低功耗管理复位
WWDGRSTF:窗口看门狗复位标志 (Window watchdog reset flag) 30
在窗口看门狗复位发生时由硬件置’1’;由软件通过写RMVF位清除。
0:无窗口看门狗复位发生;
1:发生窗口看门狗复位。
IWDGRSTF:独立看门狗复位标志 (Independent watchdog reset flag) 29
在独立看门狗复位发生在VDD区域时由硬件置’1’;由软件通过写RMVF位清除。
0:无独立看门狗复位发生;
1:发生独立看门狗复位。
SFTRSTF:软件复位标志 (Software reset flag) 28
在软件复位发生时由硬件置’1’;由软件通过写RMVF位清除。
0:无软件复位发生;
1:发生软件复位。
PORRSTF:上电/掉电复位标志 (POR/PDR reset flag) 27
在上电/掉电复位发生时由硬件置’1’;由软件通过写RMVF位清除。
0:无上电/掉电复位发生;
1:发生上电/掉电复位。
PINRSTFNRST引脚复位标志 (PIN reset flag) 26
NRST引脚复位发生时由硬件置’1’;由软件通过写RMVF位清除。
0:无NRST引脚复位发生;
1:发生NRST引脚复位。
25 保留,读操作返回0
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
RMVF:清除复位标志 (Remove reset flag) 24
由软件置’1’来清除复位标志。
0:无作用;
1:清除复位标志。
23:2 保留,读操作返回0
LSIRDY:内部低速振荡器就绪 (Internal low-speed oscillator ready) 1
由硬件置’1’或清’0’来指示内部40kHz RC振荡器是否就绪。在LSION清零后,3个内部40kHz
RC振荡器的周期后LSIRDY被清零。
0:内部40kHz RC振荡器时钟未就绪;
1:内部40kHz RC振荡器时钟就绪。
LSION:内部低速振荡器使能 (Internal low-speed oscillator enable) 0
由软件置’1’或清’0’
0:内部40kHz RC振荡器关闭;
1:内部40kHz RC振荡器开启。
7.3.11 AHB外设时钟复位寄存器(RCC_AHBRSTR)
偏移地址:0x28
复位值:0x0000 0000
访问:无等待周期,字、半字和字节访问
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
保留
ETHMAC
RST
保留 OTGFS
RST
rw rw
保留
保留
31:15 保留,读操作返回0
ETHMACRST:以太网MAC复位 (Ethernet MAC reset) 14
由软件置’1’或清’0’
0:无作用;
1:复位以太网MAC模块。
13 保留,读操作返回0
OTGFSRST:全速USB OTG复位 (USB OTG FS reset) 12
由软件置’1’或清’0’
0:无作用;
1:复位全速USB OTG模块。
11:0 保留,读操作返回0
7.3.12 时钟配置寄存器 2(RCC_CFGR2)
偏移地址:0x2C
复位值:0x0000 0000
访问:无等待周期,字、半字和字节访问
101/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
I2S3
SRC
I2S2
SRC
PREDI
V1SRC
rw rw rw
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
PLL3MUL[3:0] PLL2MUL[3:0] PREDIV2[3:0] PREDIV1[3:0]
31:19 保留,读操作返回0
I2S3SRCI2S3时钟源 (I2S3 clock source) 18
由软件置’1’或清’0’以选择I2S3的时钟源。在使能I2S3的时钟之前必须先选择好这一位。
0:系统时钟(SYSCLK)作为I2S3的时钟;
1PLL3 VCO时钟作为I2S3的时钟。
I2S2SRCI2S2时钟源 (I2S2 clock source) 17
由软件置’1’或清’0’以选择I2S2的时钟源。在使能I2S2的时钟之前必须先选择好这一位。
0:系统时钟(SYSCLK)作为I2S2的时钟;
1PLL3 VCO时钟作为I2S2的时钟。
PREDIV1SRCPREDIV1输入时钟源 (PREDIV1 entry clock source) 16
由软件置’1’或清’0’以选择PREDIV1的时钟源。只有在关闭PLL时,才能写这一位。
0HSE振荡器时钟作为PREDIV1的时钟源;
1PLL2作为PREDIV1的时钟源。
PLL3MUL[3:0]PLL3倍频因子 (PLL3 Multiplication Factor) 15:12
这些位由软件设置以选择PLL3的倍频因子。只有在关闭PLL3时,才能写这些位。
00xx:保留 1010PLL3 12倍频输出
010x:保留 1011PLL3 13倍频输出
0110PLL3 8倍频输出 1100PLL3 14倍频输出
0111PLL3 9倍频输出 1101:保留
1000PLL3 10倍频输出 1110PLL3 16倍频输出
1001PLL3 11倍频输出 1111PLL3 20倍频输出
PLL2MUL[3:0]PLL2倍频因子 (PLL2 Multiplication Factor) 11:8
这些位由软件设置以选择PLL2的倍频因子。只有在关闭PLL2时,才能写这些位。
00xx:保留 1010PLL2 12倍频输出
010x:保留 1011PLL2 13倍频输出
0110PLL2 8倍频输出 1100PLL2 14倍频输出
0111PLL2 9倍频输出 1101:保留
1000PLL2 10倍频输出 1110PLL2 16倍频输出
1001PLL2 11倍频输出 1111PLL2 20倍频输出
PREDIV2[3:0]PREDIV2分频因子 (PREDIV2 division factor) 7:4
这些位由软件设置以选择PREDIV2的分频因子。只有在关闭PLL2PLL3时,才能写这些位。
0000PREDIV2不对输入时钟分频 1000PREDIV2对输入时钟9分频
0001PREDIV2对输入时钟2分频 1001PREDIV2对输入时钟10分频
0010PREDIV2对输入时钟3分频 1010PREDIV2对输入时钟11分频
0011PREDIV2对输入时钟4分频 1011PREDIV2对输入时钟12分频
0100PREDIV2对输入时钟5分频 1100PREDIV2对输入时钟13分频
0101PREDIV2对输入时钟6分频 1101PREDIV2对输入时钟14分频
0110PREDIV2对输入时钟7分频 1110PREDIV2对输入时钟15分频
0111PREDIV2对输入时钟8分频 1111PREDIV2对输入时钟16分频
102/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
PREDIV1[3:0]PREDIV1分频因子 (PREDIV1 division factor) 3:0
这些位由软件设置以选择PREDIV1的分频因子。只有在关闭PLL时,才能写这些位。
注:位(0)RCC_CFGR寄存器的位(17)相同,修改RCC_CFGR寄存器的位(17)会同时改变这
里的位(0)
0000PREDIV1不对输入时钟分频 1000PREDIV1对输入时钟9分频
0001PREDIV1对输入时钟2分频 1001PREDIV1对输入时钟10分频
0010PREDIV1对输入时钟3分频 1010PREDIV1对输入时钟11分频
0011PREDIV1对输入时钟4分频 1011PREDIV1对输入时钟12分频
0100PREDIV1对输入时钟5分频 1100PREDIV1对输入时钟13分频
0101PREDIV1对输入时钟6分频 1101PREDIV1对输入时钟14分频
0110PREDIV1对输入时钟7分频 1110PREDIV1对输入时钟15分频
0111PREDIV1对输入时钟8分频 1111PREDIV1对输入时钟16分频
7.3.13 RCC寄存器地址映像
下表列出了RCC寄存器的映像和复位值。
16 RCC寄存器地址映像和复位值
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
RCC_CR
PLL3RDY
PLL3ON
PLL2RDY
PLL2ON
PLLRDY
PLLON
CSSON
HSEBYP
HSERDY
HSEON
HSIRDY
HSION
复位值
000000 0000xxxxxxxx10000 11
RCC_CFGR
OTGFSPRE
PLLXTPRE
PLLSRC
复位值
0000 00000000000000000000000
RCC_CIR
CSSC
PLL3RDYC
PLL2RDYC
PLLRDYC
HSERDYC
HSIRDYC
LSERDYC
LSIRDYC
PLL3RDYIE
PLL2RDYIE
PLLRDYIE
HSERDYIE
HSIRDYIE
LSERDYIE
LSIRDYIE
CSSF
PLL3RDYF
PLL2RDYF
PLLRDYF
HSERDYF
HSIRDYF
LSERDYF
LSIRDYF
复位值 0
0000000 000000000000000
RCC_APB2RSTR
USART1RST
SPIRST
TIM1RST
ADC2RST
ADC1RST
IOPERST
IOPDRST
IOPCRST
IOPBRST
IOPARST
AFIORST
复位值
0 0000 00000 0
RCC_APB1RSTR
DACRST
PWRRST
BKPRST
CAN2RST
CAN1RST
I2C2RST
I2C1RST
UART5RST
UART4RST
USART3RST
USART2RST
SPI3RST
SPI2RST
WWDGRST
TIM7RST
TIM6RST
TIM5RST
TIM4RST
TIM3RST
TIM2RST
复位值
00000 000000 00 0 000000
RCC_AHBENR
ETHMACRXEN
ETHMACTXEN
ETHMACEN
OTGFSEN
CRCEN
FLITFEN
SRAMEN
DMA2EN
DMA1EN
复位值
000 0 0 1 100
RCC_APB2ENR
USART1EN
SPI1EN
TIM1EN
ADC2EN
ADC1EN
IOPEEN
IOPDEN
IOPCEN
IOPBEN
IOPAEN
AFIOEN
复位值
0 0000 00000 0
保留
保留
保留 MCO[2:0]
保留
保留
保留
保留保留
保留
保留
018h
保留
保留
保留
保留
保留
保留
保留
014h
保留
PLLMUL[3:0]
010h
保留
保留
保留000h HSITRIM[4:0]
保留 HSICAL[7:0]
保留
00Ch
SWS[1:0]
SW[1:0]
008h
ADC
PRE
[1:0]
PRRE2
[2:0]
PRRE1
[2:0] HPRE[3:0]
004h
103/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册
104/754
参照200912 RM0008 Reference Manual 英文第10
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
RCC_APB1ENR
DACRST
PWREN
BKPEN
CAN2EN
CAN1EN
I2C2EN
I2C1EN
UART5EN
UART4EN
USART3EN
USART2EN
SPI3EN
SPI2EN
WWDGEN
TIM7EN
TIM6EN
TIM5EN
TIM4EN
TIM3EN
TIM2EN
复位值
00000 000000 00 0 000000
RCC_BDCR
BDRST
RTCEN
LSEBYP
LSERDYF
LSEON
复位值
00 00 000
RCC_CSR
LPWRRSTF
WWDGRSTF
IWDGRSTF
SFTRSTF
PORRSTF
PINRSTF
RMVF
LSIRDY
LSION
复位值
00001100
RCC_AHBRSTR
ETHMACRST
OTGFSRST
复位值
00
RCC_AHBRSTR 保留
I2S3SRC
I2S2SRC
PREDIV1SRC
复位值
0000000000000000000
028h 保留
024h
020h 保留
RTC
SEL
[1:0]
保留
保留
保留
保留
保留
保留01Ch 保留 保留保留
保留
保留
028h
PREDIV1
[3:0]
PREDIV2
[3:0]
PLL2MUL
[3:0]
PLL3MUL
[3:0]
0
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
有关寄存器的起始地址,请参考表1
通用和复用功能I/O STM32F10xxx参考手册
8 通用和复用功能I/O(GPIOAFIO)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
8.1 GPIO功能描述
每个GPI/O端口有两个32位配置寄存器(GPIOx_CRLGPIOx_CRH),两个32位数据寄存器
(GPIOx_IDRGPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存
(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)
根据数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置
成多种模式。
输入浮空
输入上拉
输入下拉
模拟输入
开漏输出
推挽式输出
推挽式复用功能
开漏复用功能
每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访
)GPIOx_BSRRGPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这
样,在读和更改访问之间产生IRQ时不会发生危险。
下图给出了一个I/O端口位的基本结构。
13 I/O端口位的基本结构
105/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
14 5伏兼容I/O端口位的基本结构
(1) VDD_FT 5伏容忍I/O脚是特殊的,它与VDD不同
17 端口位配置表
CNF1 CNF0 MODE1 MODE0
配置模式 PxODR寄存器
0
推挽(Push-Pull) 0 1
106/754
通用输出 开漏(Open-Drain) 0 1 0 1
01
10
推挽(Push-Pull) 0 不使用
11
复用功能
输出 1 见表18
1
开漏(Open-Drain) 不使用
0
模拟输入 不使用
0 1
浮空输入 不使用
下拉输入 0
输入 00
1 0 1
上拉输入
18 输出模式位
MODE[1:0] 意义
00 保留
01 最大输出速度为10MHz
10 最大输出速度为2MHz
11 最大输出速度为50MHz
8.1.1 通用I/O(GPIO)
复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式(CNFx[1:0]=01b
MODEx[1:0]=00b)
复位后,JTAG引脚被置于输入上拉或下拉模式:
PA15JTDI置于上拉模式
PA14JTCK置于下拉模式
PA13JTMS置于上拉模式
PB4 JNTRST置于上拉模式
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
当作为输出配置时,写到输出数据寄存器上的值(GPIOx_ODR)输出到相应的I/O引脚。可以以推
挽模式或开漏模式(当输出0时,只有N-MOS被打开)使用输出驱动器。
输入数据寄存器(GPIOx_IDR)在每个APB2时钟周期捕捉I/O引脚上的数据。
所有GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时,它们可以被激活也可以被断开。
8.1.2 单独的位设置或位清除
当对GPIOx_ODR的个别位编程时,软件不需要禁止中断:在单次APB2写操作里,可以只更改
一个或多个位。
这是通过对“置位/复位寄存器”(GPIOx_BSRR,复位是 GPIOx_BRR)中想要更改的位写’1’
实现的。没被选择的位将不被更改。
8.1.3 外部中断/唤醒线
所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。更多的关于外
部中断的信息,参考:
9.2
107/754
节:外部中断/事件控制器(EXTI)
9.2.3 节:唤醒事件管理。
8.1.4 复用功能(AF)
使用默认复用功能前必须对端口位配置寄存器编程。
对于复用的输入功能,端口必须配置成输入模式(浮空、上拉或下拉)且输入引脚必须由外部
驱动
注意:
也可以通过软件来模拟复用功能输入引脚,这种模拟可以通过对
GPIO
控制器编程来实现。此
时,端口应当被设置为复用功能输出模式。显然,这时相应的引脚不再由外部驱动,而是通过
GPIO
控制器由软件来驱动。
对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)
对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开漏)。这时,输入驱动器被
配置成浮空输入模式。
如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。
如果软件把一个GPIO脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。
8.1.5 软件重新映射I/O复用功能
为了使不同器件封装的外设I/O功能的数量达到最优,可以把一些复用功能重新映射到其他一
脚上。这可以通过软件配置相应的寄存器来完(参考AFIO寄存器描述)。这时,复用功能就不
再映射到它们的原始引脚上了。
8.1.6 GPIO锁定机制
锁定机制允许冻结IO配置。当在一个端口位上执行了锁定(LOCK)程序,在下一次复位之前,将
不能再更改端口位的配置。
8.1.7 输入配置
I/O端口配置为输入时:
输出缓冲器被禁止
施密特触发输入被激活
根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接
出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
对输入数据寄存器的读访问可得到I/O状态
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
下图给出了I/O端口位的输入配置
15 输入浮空/上拉/下拉配置
(1) VDD_FT 5伏容忍I/O脚是特殊的,它与VDD不同
8.1.8 输出配置
I/O端口被配置为输出时
输出缓冲器被激活
开漏模式:输出寄存器上的0激活N-MOS,而输出寄存器上的1将端口置于高阻状态(P-
MOS从不被激活)
推挽模式:输出寄存器上的0激活N-MOS,而输出寄存器上的1将激活P-MOS
施密特触发输入被激活
弱上拉和下拉电阻被禁止
出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
在开漏模式时,对输入数据寄存器的读访问可得到I/O状态
在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。
下图给出了I/O端口位的输出配置。
16 输出配置
(1) VDD_FT 5伏兼容 I/O 脚是特殊的,它与 VDD 不同
108/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
8.1.9 复用功能配置
I/O端口被配置为复用功能时:
在开漏或推挽式配置中,输出缓冲器被打开
内置外设的信号驱动输出缓冲器(复用功能输出)
施密特触发输入被激活
弱上拉和下拉电阻被禁止
在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器
开漏模式时,读输入数据寄存器时可得到I/O口状态
在推挽模式时,读输出数据寄存器时可得到最后一次写的值
8.4-AFIO寄存器描述。 下图示出了I/O端口位的复用功能配置。详见
一组复用功能I/O寄存器允许用户把一些复用功能重新映象到不同的引脚。
17 复用功能配置
(1) VDD_FT 5伏兼容I/O脚是特殊的,它与VDD不同
8.1.10 模拟输入配置
I/O端口被配置为模拟输入配置时:
输出缓冲器被禁止;
禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置
’0’
弱上拉和下拉电阻被禁止;
读取输入数据寄存器时数值为’0’
下图示出了I/O端口位的高阻抗模拟输入配置:
109/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
18 高阻抗的模拟输入配置
(1) VDD_FT 5伏兼容I/O脚是特殊的,它与VDD不同
8.1.11 外设的GPIO配置
下列表格列出了各个外设的引脚配置。
19 高级定时器TIM1/TIM8
TIM1/TIM8引脚 配置 GPIO配置
输入捕获通道x 浮空输入
TIM1/8_CHx 输出比较通道x 推挽复用输出
TIM1/8_CHxN 互补输出通道x 推挽复用输出
TIM1/8_BKIN 刹车输入 浮空输入
TIM1/8_ETR 外部触发时钟输入 浮空输入
20 通用定时器TIM2/3/4/5
TIM2/3/4/5引脚 配置 GPIO配置
输入捕获通道x 浮空输入
TIM2/3/4/5_CHx 输出比较通道x 推挽复用输出
TIM2/3/4/5_ETR 外部触发时钟输入 浮空输入
21 USART
USART引脚 配置 GPIO配置
全双工模式 推挽复用输出
USARTx_TX 半双工同步模式 推挽复用输出
全双工模式 浮空输入或带上拉输入
USARTx_RX 半双工同步模式 未用,可作为通用I/O
USARTx_CK 同步模式 推挽复用输出
USARTx_RTS 硬件流量控制 推挽复用输出
USARTx_CTS 硬件流量控制 浮空输入或带上拉输入
110/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
22 SPI
SPI引脚 配置 GPIO配置
主模式 推挽复用输出
SPIx_SCK 从模式 浮空输入
全双工模式/主模式 推挽复用输出
全双工模式/从模式 浮空输入或带上拉输入
111/754
简单的双向数据线/主模式 推挽复用输出
SPIx_MOSI
简单的双向数据线/从模式 未用,可作为通用I/O
全双工模式/主模式 浮空输入或带上拉输入
全双工模式/从模式 推挽复用输出
简单的双向数据线/主模式 未用,可作为通用I/O
SPIx_MISO
简单的双向数据线/从模式 推挽复用输出
硬件主/从模式 浮空输入或带上拉输入或带下拉输入
硬件主模式/NSS输出使能 推挽复用输出
SPIx_NSS
软件模式 未用,可作为通用I/O
23 I2S
I2S引脚 配置 GPIO配置
主模式 推挽复用输出
I2Sx_WS 从模式 浮空输入
主模式 推挽复用输出
I2Sx_CK 从模式 浮空输入
发送器 推挽复用输出
I2Sx_SD 接收器 浮空输入或带上拉输入或带下拉输入
主模式 推挽复用输出
I2Sx_MCK 从模式 未用,可作为通用I/O
24 I2C接口
I2C引脚 配置 GPIO配置
I2Cx_SCL I2C时钟 开漏复用输出
I2Cx_SDA I2C数据 开漏复用输出
25 BxCAN
BxCAN引脚 GPIO配置
CAN_TX 推挽复用输出
CAN_RX 浮空输入或带上拉输入
26 USB(1)
USB引脚 GPIO配置
USB_DM / USB_DP 一旦使能了USB模块,这些引脚会自动连接到内部USB收发器
1.本表内容只适用于小容量、中容量和大容量产品。
27USB OTG引脚配置(1)
OTG_FS引脚 配置 GPIO配置
主机 如果使用此引脚,则为推挽复用输出
设备 如果使用此引脚,则为推挽复用输出
OTG_FS_SOF
OTG 如果使用此引脚,则为推挽复用输出
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
主机 浮空输入
112/754
设备 浮空输入
OTG_FS_VBUS(2)
OTG 浮空输入
如果软件选择了强置主机模式(OTG_FS_GUSBCFG寄存
器的FHMOD),则不需要此引脚。
主机
设备 如果软件选择了强置设备模式(OTG_FS_GUSBCFG寄存
器的FHMOD),则不需要此引脚。
OTG_FS_ID
OTG 上拉输入
主机 USB断电自动控制
设备 USB断电自动控制
OTG_FS_DM
OTG USB断电自动控制
主机 USB断电自动控制
设备 USB断电自动控制
OTG_FS_DP
OTG USB断电自动控制
1.本表内容只适用于互联型产品。
2.如果另一个共享的外设要使用OTG_FS_VBUS引脚(PA9)或把它作为通用I/O口,必须激活PHY的断电模式
(清除OTG_FS_GCCFG寄存器的位16)
28 SDIO
SDIO引脚 GPIO配置
SDIO_CK 推挽复用输出
SDIO_CMD 推挽复用输出
SDIO[D7:D0] 推挽复用输出
ADC输入引脚必须配置为模拟输入
29 ADC/DAC
ADC/DAC引脚 GPIO配置
ADC/DAC 模拟输入
30 FSMC
FSMC引脚 GPIO配置
FSMC_A[25:0] 推挽复用输出
FSMC_D[15:0]
FSMC_CK 推挽复用输出
FSMC_NOE 推挽复用输出
FSMC_NWE
FSMC_NE[4:1]
FSMC_NCE[3:2] 推挽复用输出
FSMC_NCE4_1
FSMC_NCE4_2
FSMC_NWAIT 浮空输入或带上拉输入
FSMC_CD
FSMC_NIOS16
FSMC_INTR 浮空输入
FSMC_INT[3:2]
FSMC_NL 推挽复用输出
FSMC_NBL[1:0]
FSMC_NIORD
FSMC_NIOWR 推挽复用输出
FSMC_NREG
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
31I/O功能
引脚 复用功能 GPIO配置
RTC输出 当配置BKP_CR BKP_RTCCR 寄存
器时,由硬件强制设置
TAMPER-RTC 侵入事件输入
MCO 时钟输出 推挽复用输出
EXTI输入线 外部中断输入 浮空输入或带上拉输入或带下拉输入
8.2 GPIO寄存器描述
请参考第1章中有关寄存器描述中用到的缩写。
必须以字(32)的方式操作这些外设寄存器。
8.2.1 端口配置低寄存器(GPIOx_CRL) (x=A..E)
偏移地址:0x00
复位值:0x4444 4444
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CNF5[1:0] MODE5[1:0]CNF7[1:0] MODE7[1:0] CNF6[1:0] MODE6[1:0] CNF4[1:0] MODE4[1:0]
CNF3[1:0] MODE3[1:0] CNF2[1:0] MODE2[1:0] CNF1[1:0] MODE1[1:0] CNF0[1:0] MODE0[1:0]
CNFy[1:0]:端口x配置位(y = 0…7) (Port x configuration bits) 31:30
27:26 软件通过这些位配置相应的I/O端口,请参考表17端口位配置表。
23:22 在输入模式(MODE[1:0]=00)
19:18 00:模拟输入模式
15:14 01:浮空输入模式(复位后的状态)
11:10 10:上拉/下拉输入模式
7:6 11:保留
3:2 在输出模式(MODE[1:0]>00)
00:通用推挽输出模式
01:通用开漏输出模式
10:复用功能推挽输出模式
11:复用功能开漏输出模式
MODEy[1:0]:端口x的模式位(y = 0…7) (Port x mode bits) 29:28
25:24 软件通过这些位配置相应的I/O端口,请参考表17端口位配置表。
21:20 00:输入模式(复位后的状态)
17:16 01:输出模式,最大速度10MHz
13:12 10:输出模式,最大速度2MHz
9:8, 5:4 11:输出模式,最大速度50MHz
1:0
113/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
8.2.2 端口配置高寄存器(GPIOx_CRH) (x=A..E)
偏移地址:0x04
复位值:0x4444 4444
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CNF12[1:0] MODE12[1:0]
CNF11[1:0] MODE11[1:0] CNF10[1:0] MODE10[1:0] CNF9[1:0] MODE9[1:0] CNF8[1:0] MODE8[1:0]
CNF13[1:0] MODE13[1:0]CNF15[1:0] MODE15[1:0] CNF14[1:0] MODE14[1:0]
CNFy[1:0]:端口x配置位(y = 8…15) (Port x configuration bits) 31:30
27:26 软件通过这些位配置相应的I/O端口,请参考表17端口位配置表。
23:22 在输入模式(MODE[1:0]=00)
19:18 00:模拟输入模式
15:14 01:浮空输入模式(复位后的状态)
11:10 10:上拉/下拉输入模式
7:6 11:保留
3:2 在输出模式(MODE[1:0]>00)
00:通用推挽输出模式
01:通用开漏输出模式
10:复用功能推挽输出模式
11:复用功能开漏输出模式
MODEy[1:0]:端口x的模式位(y = 8…15) (Port x mode bits) 9:28
25:24 软件通过这些位配置相应的I/O端口,请参考表17端口位配置表。
21:20 00:输入模式(复位后的状态)
17:16 01:输出模式,最大速度10MHz
13:12 10:输出模式,最大速度2MHz
9:8, 5:4 11:输出模式,最大速度50MHz
1:0
8.2.3 端口输入数据寄存器(GPIOx_IDR) (x=A..E)
地址偏移:0x08
复位值:0x0000 XXXX
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
IDR15 IDR14 IDR13 IDR12 IDR11 IDR10 IDR9 IDR8 IDR7 IDR6 IDR5 IDR4 IDR3 IDR2 IDR1 IDR0
rrrrrrrrrrrrrrrr
保留
31:16 保留,始终读为0
IDRy[15:0]:端口输入数据(y = 0…15) (Port input data) 15:0
这些位为只读并只能以字(16)的形式读出。读出的值为对应I/O口的状态。
114/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
8.2.4 端口输出数据寄存器(GPIOx_ODR) (x=A..E)
地址偏移:0Ch
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
保留
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ODR15 ODR14 ODR13 ODR12 ODR11 ODR10 ODR9 ODR8 ODR7 ODR6 ODR5 ODR4 ODR3 ODR2 ODR1 ODR0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31:16 保留,始终读为0
ODRy[15:0]:端口输出数据(y = 0…15) (Port output data) 15:0
这些位可读可写并只能以字(16)的形式操作。
注:对GPIOx_BSRR(x = A…E),可以分别地对各个ODR位进行独立的设置/清除。
8.2.5 端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E)
地址偏移:0x10
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BR15 BR14 BR13 BR12 BR11 BR10 BR9 BR8 BR7 BR6 BR5 BR4 BR3 BR2 BR1 BR0
wwwwwwwwwwwwwwww
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BS15 BS14 BS13 BS12 BS11 BS10 BS9 BS8 BS7 BS6 BS5 BS4 BS3 BS2 BS1 BS0
wwwwwwwwwwwwwwww
BRy: 清除端口x的位y (y = 0…15) (Port x Reset bit y) 31:16
这些位只能写入并只能以字(16)的形式操作。
0:对对应的ODRy位不产生影响
1:清除对应的ODRy位为0
注:如果同时设置了BSyBRy的对应位,BSy位起作用。
BSy: 设置端口x的位y (y = 0…15) (Port x Set bit y) 15:0
这些位只能写入并只能以字(16)的形式操作。
0:对对应的ODRy位不产生影响
1:设置对应的ODRy位为1
8.2.6 端口位清除寄存器(GPIOx_BRR) (x=A..E)
地址偏移:0x14
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BR15 BR14 BR13 BR12 BR11 BR10 BR9 BR8 BR7 BR6 BR5 BR4 BR3 BR2 BR1 BR0
wwwwwwwwwwwwwwww
保留
115/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
31:16 保留。
BRy: 清除端口x的位y (y = 0…15) (Port x Reset bit y) 15:0
这些位只能写入并只能以字(16)的形式操作。
0:对对应的ODRy位不产生影响
1:清除对应的ODRy位为0
8.2.7 端口配置锁定寄存器(GPIOx_LCKR) (x=A..E)
当执行正确的写序列设置了位16(LCKK)时,该寄存器用来锁定端口位的配置。位[15:0]用于锁
GPIO端口的配置。在规定的写入操作期间,不能改变LCKP[15:0]。当对相应的端口位执行了
LOCK序列后,在下次系统复位之前将不能再更改端口位的配置。
每个锁定位锁定控制寄存器(CRL, CRH)中相应的4个位。
地址偏移:0x18
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
LCKK
rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
LCK15 LCK14 LCK13 LCK12 LCK11 LCK10 LCK9 LCK8 LCK7 LCK6 LCK5 LCK4 LCK3 LCK2 LCK1 LCK0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
31:17 保留。
16 LCKK:锁键 (Lock key)
该位可随时读出,它只可通过锁键写入序列修改。
0:端口配置锁键位激活
1:端口配置锁键位被激活,下次系统复位前GPIOx_LCKR寄存器被锁住。
锁键的写入序列:
1 -> 0 -> 1 -> 0 -> 1
最后一个读可省略,但可以用来确认锁键已被激活。
注:在操作锁键的写入序列时,不能改变LCK[15:0]的值。
操作锁键写入序列中的任何错误将不能激活锁键。
15:0 LCKy: 端口x的锁位y (y = 0…15) (Port x Lock bit y)
这些位可读可写但只能在LCKK位为0时写入。
0:不锁定端口的配置
1:锁定端口的配置
8.3 复用功能I/O和调试配置(AFIO)
为了优化64脚或100脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。设置复用
重映射和调试I/O配置寄存器(AFIO_MAPR)实现引脚的重新映射。这时,复用功能不再映射到它
们的原始分配上。
8.3.1 OSC32_IN/OSC32_OUT作为GPIO 端口PC14/PC15
LSE 振荡器关闭时,LSE 振荡器引脚OSC32_IN/OSC32_OUT 可以分别用做GPIO
PC14/PC15LSE功能始终优先于通用I/O口的功能。
注:
1.
当关闭
1.8V
电压区
(
进入待机模式
)
或后备区域使用
VBAT
供电
(
不再有
VDD
供电
)
时,不能使用
PC14/PC15
GPIO
口功能;
116/754
2
.参见第
4.1.2
节有关
I/O
口使用的限制
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
8.3.2 OSC_IN/OSC_OUT引脚作为GPIO端口PD0/PD1
外部振荡器引脚OSC_IN/OSC_OUT可以用做GPIOPD0/PD1,通过设置复用重映射和调试I/O
配置寄存器(AFIO_MAPR)实现。
这个重映射只适用于364864脚的封装(100脚和144脚的封装上有单独的PD0PD1的引
脚,不必重映射)
注:
外部中断
/
事件功能没有被重映射。在
36
48
64
脚的封装上,
PD0
PD1
不能用来产生外部中
/
事件。
8.3.3 CAN1 复用功能重映射
CAN信号可以被映射到端口A、端口B或端口D上,如下表所示。对于端口D,在364864
的封装上没有重映射功能。
32 CAN1复用功能重映射
CAN_REMAP[1:0]=”10”(2) CAN_REMAP[1:0]=”11”(3)
复用功能(1) CAN_REMAP[1:0]=”00”
PA11 PB8 PD0
CAN1_RX AN_RX
PA12 PB9 PD1
CAN1_TX AN_TX
1. 在互联型产品中是CAN1_RXCAN1_TX;在其它带有单个CAN接口的产品中是CAN_RXCAN_TX
2. 重映射不适用于36脚的封装
3. PD0PD1没有被重映射到OSC_INOSC_OUT时,重映射功能只适用于100脚和144脚的封装上。
8.3.4 CAN2 复用功能重映射
在互联型产品中还有CAN2接口,它的外部信号可以按下表重新映射:
33 CAN2复用功能重映射
复用功能(1) CAN2_REMAP=”0” CAN2_REMAP=”1”
CAN2_RX PB12 PB5
CAN2_TX PB13 PB6
8.3.5 JTAG/SWD复用功能重映射
调试接口信号被映射到GPIO端口上,如下表所示。
34 调试接口信号
GPIO端口 复用功能
JTMS/SWDIO PA13
JTCK/SWCLK PA14
JTDI PA15
JTDO/TRACESWO PB3
JNTRST PB4
TRACECK PE2
TRACED0 PE3
TRACED1 PE4
TRACED2 PE5
TRACED3 PE6
为了在调试期间可以使用更多GPIOs,通过设置复用重映射和调试I/O置寄存器(AFIO_MAPR)
SWJ_CFG[2:0]位,可以改变上述重映像配置。参见下表。
117/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
35 调试端口映像
SWJ I/O引脚分配
SWJ_CFG PB3/
JTDO/
TRACESWO
PA14/
JTCK/
SWCLK
PA13/
JTMS/
SWDIO
可能的调试端口 PB4/
NJTRST
PA15/
JTDI
[2:0]
000 完全SWJ(JTAG-DP + SW-DP) I/O不可用 I/O不可用 I/O不可用 I/O不可用 I/O不可用
(复位状态)
001 完全SWJ(JTAG-DP + SW-DP) I/O不可用 I/O不可用 I/O不可用 I/O不可用 I/O可用
但没有JNTRST
010 关闭JTAG-DP I/O可用(1) I/O不可用 I/O不可用 I/O可用 I/O可用
启用SW-DP
100 关闭JTAG-DP I/O可用 I/O可用 I/O可用 I/O可用 I/O可用
关闭SW-DP
其它 禁用
1. I/O 口只可在不使用异步跟踪时使用
8.3.6 ADC复用功能重映射
118/754
参阅复用重映射和调试I/O配置寄存器(AFIO_MAPR)
36 ADC1外部触发注入转换复用功能重映射(1)
ADC1_ETRGINJ_REMAP = 0 ADC1_ETRGINJ_REMAP = 1
复用功能
ADC1外部触发注入转换与
TIM8_CH4相连
ADC1外部触发注入转换 ADC1外部触发注入转换与EXTI15相连
1. 重映射仅存在于大容量产品
37 ADC1外部触发规则转换复用功能重映射(1)
ADC1_ETRGREG_REMAP = 0 ADC1_ETRGREG_REMAP = 1
复用功能
ADC1外部触发规则转换与
TIM8_TRGO相连
ADC1外部触发规则转换 ADC1外部触发规则转换与EXTI11相连
1. 重映射仅存在于大容量产品
38 ADC2外部触发注入转换复用功能重映射(1)
ADC2_ETRGINJ_REMAP = 0 ADC2_ETRGINJ_REMAP = 1
复用功能
ADC2外部触发注入转换与
TIM8_CH4相连
ADC2外部触发注入转换 ADC2外部触发注入转换与EXTI15相连
1. 重映射仅存在于大容量产品
39 ADC2外部触发规则转换复用功能重映射(1)
ADC2_ETRGREG_REMAP = 0 ADC2_ETRGREG_REMAP = 1
复用功能
ADC2外部触发规则转换与
TIM8_TRGO相连
ADC2外部触发规则转换 ADC2外部触发规则转换与EXTI11相连
1. 重映射仅存在于大容量产品
8.3.7 定时器复用功能重映射
定时器4的通道1到通道4可以从端口B重映射到端口D。其他定时器的重映射列在表42~44
复用重映射和调试I/O配置寄存器(AFIO_MAPR) 参见
40 TIM5复用功能重映像(1)
TIM5CH4_IREMAP = 0 TIM5CH4_IREMAP = 1
复用功能
TIM5_CH4 TIM5的通道4连至PA3 LSI内部时钟连至TIM5_CH4的输入作为校准使用
1.重映像只适用于大容量产品和互联型产品
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
41 TIM4复用功能重映像
TIM4_REMAP = 1(1)
TIM4_REMAP = 0
复用功能
TIM4_CH1 PB6 PD12
TIM4_CH2 PB7 PD13
TIM4_CH3 PB8 PD14
TIM4_CH4 PB9 PD15
1. 重映像只适用于 100 144 脚的封装
42 TIM3复用功能重映像
TIM3_REMAP[1:0] = 00 TIM3_REMAP[1:0] = 10 TIM3_REMAP[1:0] = 11
复用功能 (完全重映像)(1) (没有重映像) (部分重映像)
TIM3_CH1 PA6 PB4 PC6
TIM3_CH2 PA7 PB5 PC7
TIM3_CH3 PB0 PC8
TIM3_CH4 PB1 PC9
1. 重映像只适用于 64100 144 脚的封装
43 TIM2复用功能重映像
TIM2_REMAP[1:0]
=10
TIM2_REMAP[1:0]
=01
TIM2_REMAP[1:0]
=00 TIM2_REMAP[1:0]
=11
复用功能 (部分重映像)(1) (完全重映像)(1) (部分重映像) (没有重映像)
TIM2_CH1_ETR(2) PA0 PA15 PA0 PA15
TIM2_CH2 PA1 PB3 PA1 PB3
TIM2_CH3 PA2 PB10
TIM2_CH4 PA3 PB11
1. 重映像不适用于 36 脚的封装
2. TIM2_CH1 TIM2_ETR 共用一个引脚,但不能同时使用(因此在此使用这样的标记:TIM2_CH1_ETR)
44 TIM1复用功能重映像
TIM1_REMAP[1:0] = 00 TIM1_REMAP[1:0] = 01 TIM1_REMAP[1:0] = 11
复用功能映像 (完全重映像)(1) (没有重映像) (部分重映像)
TIM1_ETR PA12 PE7
TIM1_CH1 PA8 PE9
TIM1_CH2 PA9 PE11
TIM1_CH3 PA10 PE13
TIM1_CH4 PA11 PE14
TIM1_BKIN PB12(2) PA6 PE15
TIM1_CH1N PB13(2) PA7 PE8
TIM1_CH2N PB14(2) PB0 PE10
TIM1_CH3N PB15(2) PB1 PE12
1.重映像只适用于100144脚的封装
2.重映像不适用于36脚的封装
8.3.8 USART复用功能重映射
参见复用重映射和调试I/O配置寄存器(AFIO_MAPR)
45 USART3重映像
USART3_REMAP[1:0] =
01
USART3_REMAP[1:0] =
00 USART3_REMAP[1:0] =
11
复用功能 (部分重映像)(1) (完全重映像)(2) (没有重映像)
USART3_TX PB10 PC10 PD8
119/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
USART3_RX PB11 PC11 PD9
USART3_CK PB12 PC12 PD10
USART3_CTS PB13 PD11
USART3_RTS PB14 PD12
1.重映像只适用于64100144脚的封装
2.重映像只适用于100144脚的封装
46 USART2重映像
USART2_REMAP = 1(1) USART2_REMAP = 0
复用功能
USART2_CTS PA0 PD3
USART2_RTS PA1 PD4
USART2_TX PA2 PD5
USART2_RX PA3 PD6
USART2_CK PA4 PD7
1.重映像只适用于100144脚的封装
47 USART1重映像
USART1_REMAP = 0 USART1_REMAP = 1
复用功能
USART1_TX PA9 PB6
USART1_RX PA10 PB7
8.3.9 I2C1 复用功能重映射
120/754
参见复用重映射和调试I/O配置寄存器(AFIO_MAPR)
48 I2C 1重映像
I2C1_REMAP = 1(1) I2C1_REMAP = 0
复用功能
I2C1_SCL PB6 PB8
I2C1_SDA PB7 PB9
1. 重映像不适用于36脚封装
8.3.10 SPI 1 复用功能重映射
参见复用重映射和调试I/O配置寄存器(AFIO_MAPR)
49 SPI1重映像
SPI1_REMAP = 0 SPI1_REMAP = 1
复用功能
SPI1_NSS PA4 PA15
SPI1_SCK PA5 PB3
SPI1_MISO PA6 PB4
SPI1_MOSI PA7 PB5
8.3.11 SPI3 复用功能重映射
参见复用重映射和调试I/O配置寄存器(AFIO_MAPR),这个重映射只适用于互联型产品。
50 SPI3重映像
SPI3_REMAP = 0 SPI3_REMAP = 1
复用功能
SPI3_NSS PA15 PA4
SPI3_SCK PB3 PC10
SPI3_MISO PB4 PC11
SPI3_MOSI PB5 PC12
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
8.3.12 以太网复用功能重映射
121/754
参见复用重映射和调试I/O配置寄存器(AFIO_MAPR),以太网只出现在互联型产品。
51 ETH重映像
SPI3_REMAP = 0 SPI3_REMAP = 1
复用功能
RX_DV-CRS_DV PA7 PD8
RXD0 PC4 PD9
RXD1 PC5 PD10
RXD2 PB0 PD11
RXD3 PB1 PD12
8.4 AFIO寄存器描述
请参考第1章中有关寄存器描述中用到的缩写。
注意:
对寄存器
AFIO_EVCR
AFIO_MAPR
AFIO_EXTICRX
进行读写操作前,应当首先打开
AFIO
的时钟。参考第
6.3.7
APB2
外设时钟使能寄存器
(RCC_APB2ENR)
必须以字(32)的方式操作这些外设寄存器。
8.4.1 事件控制寄存器(AFIO_EVCR)
地址偏移:0x00
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EVOE
rw rw rw rw rw rw rw rw
保留
保留 PORT[2:0] PIN[3:0]
31:8 保留。
EVOE:允许事件输出 (Event output enable) 7
该位可由软件读写。当设置该位后,CortexEVENTOUT将连接到由PORT[2:0]PIN[3:0]选定
I/O口。
PORT[2:0]:端口选择 (Port selection) 6:4
选择用于输出CortexEVENTOUT信号的端口:
000:选择PA 001:选择PB 010:选择PC 011:选择PD
100:选择PE
PIN[3:0]:引脚选择(x=A…E) (Pin selection) 3:0
选择用于输出CortexEVENTOUT信号的引脚:
0000:选择Px0 0001:选择Px1 0010:选择Px2 0011:选择Px3
0100:选择Px4 0101:选择Px5 0110:选择Px6 0111:选择Px7
1000:选择Px8 1001:选择Px9 1010:选择Px10 1011:选择Px11
1100:选择Px12 1101:选择Px13 1110:选择Px14 1111:选择Px15
8.4.2 复用重映射和调试I/O配置寄存器(AFIO_MAPR)
地址偏移:0x04
复位值:0x0000 0000
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
小、中和大容量产品的寄存器映像和位定义
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
ADC2_E
TRGREG
_REMAP
ADC2_E
TRGINJ
_REMAP
ADC1_E
TRGREG
_REMAP
ADC1_E
TRGINJ
_REMAP
TIM5CH
4_IREM
AP
www
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PD01_
REMAP
TIM4_
REMAP
USART2
_REMAP
USART1
_REMAP
I2C1_
REMAP
SPI1_
REMAP
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
TIM1_REMAP
[1:0]
USART3_REMAP
[1:0]
保留保留 SWJ_CFG[2:0]
CAN_REMAP
[1:0]
TIM3_REMAP
[1:0]
TIM2_REMAP
[1:0]
31:27 保留。
SWJ_CFG[2:0]:串行线JTAG配置 (Serial wire JTAG configuration) 26:24
这些位只可由软件写(读这些位,将返回未定义的数值),用于配置SWJ和跟踪复用功能的I/O
口。SWJ(串行线JTAG)支持JTAGSWD访问Cortex的调试端口。系统复位后的默认状态是启
SWJ但没有跟踪功能,这种状态下可以通过JTMS/JTCK脚上的特定信号选择JTAGSW(
行线)模式。
000:完全SWJ(JTAG-DP + SW-DP):复位状态;
001:完全SWJ(JTAG-DP + SW-DP)但没有NJTRST
010:关闭JTAG-DP,启用SW-DP
100:关闭JTAG-DP,关闭SW-DP
其它组合:无作用。
23:21 保留。
ADC2_ETRGREG_REMAPADC2规则转换外部触发重映射 (ADC 2 external trigger regular
conversion remapping)
20
该位可由软件置’1’或置’0’它控制与ADC2规则转换外部触发相连的触发输入。当该位置’0’
时,ADC2规则转换外部触发与EXTI11相连;当该位置’1’时,ADC2规则转换外部触发与
TIM8_TRGO相连
ADC2_ETRGINJ_REMAPADC2注入转换外部触发重映射 (ADC 2 external trigger injected
conversion remapping)
19
该位可由软件置’1’或置’0’它控制与ADC2注入转换外部触发相连的触发输入。当该位置’0’
时,ADC2注入转换外部触发与EXTI15相连;当该位置’1’时,ADC2注入转换外部触发与TIM8
通道4相连。
ADC1_ETRGREG_REMAPADC1规则转换外部触发重映射 (ADC 1 external trigger regular
conversion remapping)
18
该位可由软件置’1’或置’0’它控制与ADC2规则转换外部触发相连的触发输入。当该位置’0’
时,ADC1规则转换外部触发与EXTI11相连;当该位置’1’时,ADC1规则转换外部触发与
TIM8_TRGO相连
ADC1_ETRGINJ_REMAPADC1注入转换外部触发重映射 (ADC 1 External trigger injected
conversion remapping)
17
该位可由软件置’1’或置’0’它控制与ADC2注入转换外部触发相连的触发输入。当该位置’0’
时,ADC2注入转换外部触发与EXTI15相连;当该位置’1’时,ADC1注入转换外部触发与TIM8
通道4相连。
TIM5CH4_IREMAPTIM5通道4内部重映射 (TIM5 channel4 internal remap) 16
该位可由软件置’1’或置’0’。它控制TIM5通道4内部映像。当该位置’0’时,TIM5_CH4PA3
连;当该位置’1’时,LSI内部振荡器与TIM5_CH4相连,目的是对LSI进行校准。
PD01_REMAP:端口D0/端口D1映像到OSC_IN/OSC_OUT (Port D0/Port D1 mapping on
OSC_IN/OSC_OUT)
15
该位可由软件置’1’或置’0’它控制PD0PD1GPIO功能映像。当不使用主振荡器HSE(
统运行于内部的8MHz阻容振荡器)PD0PD1可以映像OSC_INOSC_OUT引脚。此功能
只能适用于364864引脚的封装(PD0PD1出现在100脚和144脚的封装上,不必重映像)
0:不进行PD0PD1的重映像;
1PD0映像到OSC_INPD1映像到OSC_OUT
122/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
CAN_REMAP[1:0]CAN用功能重映像 (CAN alternate function remapping) 14:13
这些位可由软件置’1’或置’0’,在只有单个CAN接口的产品上控制复用功能CAN_RXCAN_TX
的重映像。
00CAN_RX映像到PA11CAN_TX映像到PA12
01:未用组合;
10CAN_RX映像到PB8CAN_TX映像到PB9(不能用于36脚的封装)
11CAN_RX映像到PD0CAN_TX映像到PD1
TIM4_REMAP:定时器4的重映像 (TIM4 remapping) 12
该位可由软件置’1’或置’0’,控制将TIM4的通道1-4映射到GPIO端口上。
0:没有重映像(TIM4_CH1/PB6TIM4_CH2/PB7TIM4_CH3/PB8TIM4_CH4/PB9)
1:完全映像(TIM4_CH1/PD12TIM4_CH2/PD13TIM4_CH3/PD14TIM4_CH4/PD15)
注:重映像不影响在PE0上的TIM4_ETR
TIM3_REMAP[1:0]:定时器3的重映像 (TIM3 remapping) 11:10
这些位可由软件置’1’或置’0’,控制定时器3的通道14GPIO端口的映像。
00:没有重映像(CH1/PA6CH2/PA7CH3/PB0CH4/PB1)
01:未用组合;
10:部分映像(CH1/PB4CH2/PB5CH3/PB0CH4/PB1)
11:完全映像(CH1/PC6CH2/PC7CH3/PC8CH4/PC9)
注:重映像不影响在PD2上的TIM3_ETR
TIM2_REMAP[1:0]:定时器2的重映像 (TIM2 remapping) 9:8
这些位可由软件置’1’或置’0’,控制定时器2的通道14和外部触发(ETR)GPIO端口的映像。
00:没有重映像(CH1/ETR/PA0CH2/PA1CH3/PA2CH4/PA3)
01:部分映像(CH1/ETR/PA15CH2/PB3CH3/PA2CH4/PA3)
10:部分映像(CH1/ETR/PA0CH2/PA1CH3/PB10CH4/PB11)
11:完全映像(CH1/ETR/PA15CH2/PB3CH3/PB10CH4/PB11)
TIM1_REMAP[1:0]:定时器1的重映像 (TIM1 remapping) 7:6
这些位可由软件置’1’或置’0’,控制定时器1的通道141N3N、外部触发(ETR)和刹车输入
(BKIN)GPIO端口的映像。
00:没有重映像(ETR/PA12CH1/PA8CH2/PA9CH3/PA10CH4/PA11BKIN/PB12
CH1N/PB13CH2N/PB14CH3N/PB15)
01:部分映像(ETR/PA12CH1/PA8CH2/PA9CH3/PA10CH4/PA11BKIN/PA6
CH1N/PA7CH2N/PB0CH3N/PB1)
10: 未用组合;
11: 完全映像(ETR/PE7CH1/PE9CH2/PE11CH3/PE13CH4/PE14BKIN/PE15
CH1N/PE8CH2N/PE10CH3N/PE12)
USART3_REMAP[1:0]USART3的重映像 (USART3 remapping) 5:4
这些位可由软件置’1’或置’0’,控制USART3CTSRTSCKTXRX复用功能在GPIO
口的映像。
00: 没有重映像(TX/PB10RX/PB11CK/PB12CTS/PB13RTS/PB14)
01: 部分映像(TX/PC10RX/PC11CK/PC12CTS/PB13RTS/PB14)
10: 未用组合;
11: 完全映像(TX/PD8RX/PD9CK/PD10CTS/PD11RTS/PD12)
USART2_REMAPUSART2的重映像 (USART2 remapping) 3
这些位可由软件置’1’或置’0’,控制USART2CTSRTSCKTXRX复用功能在GPIO
口的映像。
0: 没有重映像(CTS/PA0RTS/PA1TX/PA2RX/PA3CK/PA4)
1: 重映像(CTS/PD3RTS/PD4TX/PD5RX/PD6CK/PD7)
USART1_REMAPUSART1的重映像 (USART1 remapping) 2
该位可由软件置’1’或置’0’,控制USART1TXRX复用功能在GPIO端口的映像。
0: 没有重映像(TX/PA9RX/PA10)
1: 重映像(TX/PB6RX/PB7)
123/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
I2C1_REMAPI2C1的重映像 (I2C1 remapping) 1
该位可由软件置’1’或置’0’,控制I2C1SCLSDA复用功能在GPIO端口的映像。
0: 没有重映像(SCL/PB6SDA/PB7)
1: 重映像(SCL/PB8SDA/PB9)
SPI1_REMAPSPI1的重映像 0
该位可由软件置’1’或置’0’,控制SPI1NSSSCKMISOMOSI复用功能在GPIO端口的映
像。
0: 没有重映像(NSS/PA4SCK/PA5MISO/PA6MOSI/PA7)
1: 重映像(NSS/PA15SCK/PB3MISO/PB4MOSI/PB5)
互联型产品的寄存器映像和位定义
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
保留 PTP_PPS
_REMAP
TIM2ITR1
_IREMAP
SPI3_
REMAP 保留 MII_RM
II_SEL
CAN2_
REMAP
ETH_
REMAP
TIM5CH4
_IREMAP
rw rw rw w w w rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PD01_
REMAP
TIM4_
REMAP
USART2
_REMAP
USART1
_REMAP
I2C1_
REMAP
SPI1_
REMAP
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
TIM1_REMAP
[1:0]
USART3_REMAP
[1:0]
SWJ_CFG[2:0]
CAN1_REMAP
[1:0]
TIM3_REMAP
[1:0]
TIM2_REMAP
[1:0]
保留
31 保留。
PTP_PPS_REMAP:以太网PTP PPS重映射 (Ethernet PTP PPS remapping) 30
该位可由软件置’1’或置’0’。它允许以太网MACPPS_PTS输出到PB5引脚。
0PTP_PPS不输出到PB5引脚;
1PTP_PPS输出到PB5引脚。
注:该位只在互联型产品上有效,其它产品中为保留位。
TIM2ITR1_REMAPTIM2内部触发1重映射 (TIM2 internal trigger 1 remapping) 29
该位可由软件置’1’或置’0’。它控制TIM2_ITR1的内部重映射。
0:为了校准的需要,在内部连接TIM2_ITR1至以太网的PTP输出;
1:为了校准的需要,在内部连接TIM2_ITR1至全速USB OTGSOF(帧开始)输出。
注:该位只在互联型产品上有效,其它产品中为保留位。
SPI3_REMAPSPI3重映射 (SPI3 remapping) 28
该位可由软件置’1’或置’0’。它控制SPI3NSSSCKMISOMOSIGPIO端口的复用功
能。
0:没有重映射(NSS/PA15SCK/PB3MISO/PB4MOSI/PB5)
1:重映射(NSS/PA4SCK/PC10MISO/PC11MOSI/PC12)
注:该位只在互联型产品上有效,其它产品中为保留位。
27 保留。
SWJ_CFG[2:0]:串行线JTAG配置 (Serial wire JTAG configuration) 26:24
这些位只能由软件写(读这些位,将返回未定义的数值),用于配置SWJ和跟踪复用功能的I/O
口。SWJ(串行线JTAG)支持JTAGSWD访问Cortex的调试端口。系统复位后的默认状态是启
SWJ但没有跟踪功能,这种状态下可以通过JTMS/JTCK脚上的特定信号选择JTAGSW(
行线)模式。
000:完全SWJ(JTAG-DP + SW-DP):复位状态;
001:完全SWJ(JTAG-DP + SW-DP)但没有NJTRST
010:关闭JTAG-DP,启用SW-DP
100:关闭JTAG-DP,关闭SW-DP
其它组合:无作用。
124/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
MII_RMII_SELMIIRMII选择 (MII or RMII selection) 23
该位可由软件置’1’或置’0’。它配置内部的以太网MAC使用外部的MII接口还是RMII接口的收发
(PHY)
0:配置以太网的MAC使用外部MII接口的收发器(PHY)
1:配置以太网的MAC使用外部RMII接口的收发器(PHY)
注:该位只在互联型产品上有效,其它产品中为保留位。
CAN2_REMAPCAN2的重映射 (CAN2 I/O remapping) 22
该位可由软件置’1’或置’0’。它控制CAN2_TXCAN2_RX引脚的配置。
0:没有重映射(CAN2_RX/PB12CAN2_TX/PB13)
1:重映射(CAN2_RX/PB5CAN2_TX/PB6)
注:该位只在互联型产品上有效,其它产品中为保留位。
ETH_REMAP:以太网MAC的引脚配置 (Ethernet MAC I/O remapping) 21
该位可由软件置’1’或置’0’。它控制以太网MAC至外部收发器(PHY)的连接。
0:没有重映射(RX_DV-CRS_DV/PA7RXD0/PC4RXD1/PC5RXD2/PB0RXD3/PB1)
1:重映射(RX_DV-CRS_DV/PD8RXD0/PD9RXD1/PD10RXD2/PD11RXD3/PD12)
注:该位只在互联型产品上有效,其它产品中为保留位。
20:17 保留。
TIM5CH4_IREMAPTIM5通道4内部重映射 (TIM5 channel4 internal remap) 16
该位可由软件置’1’或置’0’。它控制TIM5通道4内部映像。当该位置’0’时,TIM5_CH4PA3
连;当该位置’1’时,LSI内部振荡器与TIM5_CH4相连,目的是对LSI进行校准。
PD01_REMAP:端口D0/端口D1映像到OSC_IN/OSC_OUT (Port D0/Port D1 mapping on
OSC_IN/OSC_OUT)
15
该位可由软件置’1’或置’0’它控制PD0PD1GPIO功能映像。当不使用主振荡器HSE(
统运行于内部的8MHz阻容振荡器)PD0PD1可以映像OSC_INOSC_OUT引脚。此功能
只能适用于364864引脚的封装(PD0PD1出现在100脚和144脚的封装上,不必重映像)
0:不进行PD0PD1的重映像;
1PD0映像到OSC_INPD1映像到OSC_OUT
CAN1_REMAP[1:0]CAN1复用功能重映像 (CAN1 alternate function remapping) 14:13
这些位可由软件置’1’或置’0’,它控制复用功能CAN1_RXCAN1_TX的重映像。
00CAN1_RX映像到PA11CAN1_TX映像到PA12
01:未用组合;
10CAN1_RX映像到PB8CAN1_TX映像到PB9
11CAN1_RX映像到PD0CAN1_TX映像到PD1
TIM4_REMAP:定时器4的重映像 (TIM4 remapping) 12
该位可由软件置’1’或置’0’,控制将TIM4的通道1-4映射到GPIO端口上。
0:没有重映像(TIM4_CH1/PB6TIM4_CH2/PB7TIM4_CH3/PB8TIM4_CH4/PB9)
1:完全映像(TIM4_CH1/PD12TIM4_CH2/PD13TIM4_CH3/PD14TIM4_CH4/PD15)
注:重映像不影响在PE0上的TIM4_ETR
TIM3_REMAP[1:0]TIM3的重映像 (TIM3 remapping) 11:10
这些位可由软件置’1’或置’0’,控制定时器3的通道14GPIO端口的映像。
00:没有重映像(CH1/PA6CH2/PA7CH3/PB0CH4/PB1)
01:未用组合;
10:部分映像(CH1/PB4CH2/PB5CH3/PB0CH4/PB1)
11:完全映像(CH1/PC6CH2/PC7CH3/PC8CH4/PC9)
注:重映像不影响在PD2上的TIM3_ETR
TIM2_REMAP[1:0]TIM2的重映像 (TIM2 remapping) 9:8
这些位可由软件置’1’或置’0’,控制定时器2的通道14和外部触发(ETR)GPIO端口的映像。
00:没有重映像(CH1/ETR/PA0CH2/PA1CH3/PA2CH4/PA3)
01:部分映像(CH1/ETR/PA15CH2/PB3CH3/PA2CH4/PA3)
10:部分映像(CH1/ETR/PA0CH2/PA1CH3/PB10CH4/PB11)
11:完全映像(CH1/ETR/PA15CH2/PB3CH3/PB10CH4/PB11)
125/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
TIM1_REMAP[1:0]TIM1的重映像 (TIM1 remapping) 7:6
这些位可由软件置’1’或置’0’,控制定时器1的通道141N3N、外部触发(ETR)和刹车输入
(BKIN)GPIO端口的映像。
00:没有重映像(ETR/PA12CH1/PA8CH2/PA9CH3/PA10CH4/PA11BKIN/PB12
CH1N/PB13CH2N/PB14CH3N/PB15)
01:部分映像(ETR/PA12CH1/PA8CH2/PA9CH3/PA10CH4/PA11BKIN/PA6
CH1N/PA7CH2N/PB0CH3N/PB1)
10: 未用组合;
11: 完全映像(ETR/PE7CH1/PE9CH2/PE11CH3/PE13CH4/PE14BKIN/PE15
CH1N/PE8CH2N/PE10CH3N/PE12)
USART3_REMAP[1:0]USART3的重映像 (USART3 remapping) 5:4
这些位可由软件置’1’或置’0’,控制USART3CTSRTSCKTXRX复用功能在GPIO
口的映像。
00: 没有重映像(TX/PB10RX/PB11CK/PB12CTS/PB13RTS/PB14)
01: 部分映像(TX/PC10RX/PC11CK/PC12CTS/PB13RTS/PB14)
10: 未用组合;
11: 完全映像(TX/PD8RX/PD9CK/PD10CTS/PD11RTS/PD12)
USART2_REMAPUSART2的重映像 (USART2 remapping) 3
这些位可由软件置’1’或置’0’,控制USART2CTSRTSCKTXRX复用功能在GPIO
口的映像。
0: 没有重映像(CTS/PA0RTS/PA1TX/PA2RX/PA3CK/PA4)
1: 重映像(CTS/PD3RTS/PD4TX/PD5RX/PD6CK/PD7)
USART1_REMAPUSART1的重映像 (USART1 remapping) 2
该位可由软件置’1’或置’0’,控制USART1TXRX复用功能在GPIO端口的映像。
0: 没有重映像(TX/PA9RX/PA10)
1: 重映像(TX/PB6RX/PB7)
I2C1_REMAPI2C1的重映像 (I2C1 remapping) 1
该位可由软件置’1’或置’0’,控制I2C1SCLSDA复用功能在GPIO端口的映像。
0: 没有重映像(SCL/PB6SDA/PB7)
1: 重映像(SCL/PB8SDA/PB9)
SPI1_REMAPSPI1的重映像 0
该位可由软件置’1’或置’0’,控制SPI1NSSSCKMISOMOSI复用功能在GPIO端口的映
像。
0: 没有重映像(NSS/PA4SCK/PA5MISO/PA6MOSI/PA7)
1: 重映像(NSS/PA15SCK/PB3MISO/PB4MOSI/PB5)
8.4.3 外部中断配置寄存器 1(AFIO_EXTICR1)
地址偏移:0x08
复位值:0x0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
EXTI2[3:0] EXTI1[3:0] EXTI0[3:0]
保留
EXTI3[3:0]
31:16 保留。
126/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
EXTIx[3:0]EXTIx配置(x = 0 … 3) (EXTI x configuration) 15:0
这些位可由软件读写,用于选择EXTIx外部中断的输入源。参看9.2.5节。
0000PA[x]引脚 0100PE[x]引脚
0001PB[x]引脚 0101PF[x]引脚
0010PC[x]引脚 0110PG[x]引脚
0011PD[x]引脚
8.4.4 外部中断配置寄存器 2(AFIO_EXTICR2)
地址偏移:0x0C
复位值:0x0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
EXTI6[3:0] EXTI5[3:0] EXTI4[3:0]
保留
EXTI7[3:0]
31:16 保留。
EXTIx[3:0]EXTIx配置(x = 4 … 7) (EXTI x configuration) 15:0
这些位可由软件读写,用于选择EXTIx外部中断的输入源。
0000PA[x]引脚 0100PE[x]引脚
0001PB[x]引脚 0101PF[x]引脚
0010PC[x]引脚 0110PG[x]引脚
0011PD[x]引脚
8.4.5 外部中断配置寄存器 3(AFIO_EXTICR3)
地址偏移:0x10
复位值:0x0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
EXTI10[3:0] EXTI9[3:0] EXTI8[3:0]
保留
EXTI11[3:0]
31:16 保留。
EXTIx[3:0]EXTIx配置(x = 8 … 11) (EXTI x configuration) 15:0
这些位可由软件读写,用于选择EXTIx外部中断的输入源。
0000PA[x]引脚 0100PE[x]引脚
0001PB[x]引脚 0101PF[x]引脚
0010PC[x]引脚 0110PG[x]引脚
0011PD[x]引脚
127/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
8.4.6 外部中断配置寄存器 4(AFIO_EXTICR4)
地址偏移:0x14
复位值:0x0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
EXTI14[3:0] EXTI13[3:0] EXTI12[3:0]
保留
EXTI15[3:0]
31:16 保留。
EXTIx[3:0]EXTIx配置(x = 12 … 15) (EXTI x configuration) 15:0
这些位可由软件读写,用于选择EXTIx外部中断的输入源。
0000PA[x]引脚 0100PE[x]引脚
0001PB[x]引脚 0101PF[x]引脚
0010PC[x]引脚 0110PG[x]引脚
0011PD[x]引脚
128/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用和复用功能I/O STM32F10xxx参考手册
129/754
参照200912 RM0008 Reference Manual 英文第10
8.5 GPIO AFIO寄存器地址映象
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
关于寄存器起始地址,请参考表1。下面列出了GPIOAFIO寄存器映象和复位数值。
52 GPIO寄存器地址映像和复位值
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
GPIOx_CRL
复位值
01010101010101010101010101010101
GPIOx_CRH
复位值
01010101010101010101010101010101
GPIOx_IDR
复位值
0000000000000000
GPIOx_ODR
复位值
0000000000000000
GPIOx_BSRR
复位值
00000000000000000000000000000000
GPIOx_BRR
复位值
0000000000000000
GPIOx_LCKR
LCKK
复位值
00000000000000000
MODE4
[1:0]
CNF3
[1:0]
MODE3
[1:0]
00Ch
008h
CNF11
[1:0]
IDR[15:0]
ODR[15:0]
MODE6
[1:0]
CNF5
[1:0]
MODE5
[1:0]
CNF4
[1:0]
CNF6
[1:0]
000h
CNF7
[1:0]
MODE7
[1:0]
004h
014h
010h
018h
保留
保留 LCK[15:0]
BR[15:0]
BR[15:0]
CNF2
[1:0]
MODE2
[1:0]
CNF1
[1:0]
MODE12
[1:0]
BSR[15:0]
MODE9
[1:0]
保留
保留
MODE11
[1:0]
MODE1
[1:0]
CNF0
[1:0]
MODE0
[1:0]
CNF15
[1:0]
MODE15
[1:0]
CNF14
[1:0]
MODE14
[1:0]
CNF13
[1:0]
MODE13
[1:0]
CNF12
[1:0]
MODE8
[1:0]
CNF10
[1:0]
MODE10
[1:0]
CNF9
[1:0]
CNF8
[1:0]
53 AFIO寄存器地址映像和复位值
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
AFIO_EVCR
EVOE
复位值 00000000
AFIO_MAPR
小容量、中容
量和大容量产
ADC2_ETRGREG_REMA
ADC2_ETRGINJ_REMA
ADC1_ETRGREG_REMA
ADC1_ETRGINJ_REMA
TIM5CH4_IREMAP
PD01_REMAP
TIM4_REMAP
USART2_REMAP
USART1_REMAP
I2C1_REMAP
SPI1_REMAP
复位值 000 000000000000000000000
TIM3_REMAP[1:0]
TIM2_REMAP[1:0]
TIM1_REMAP[1:0]
USART3_REMAP[1:0]
SWJ_CFG
[2:0]
CAN1_REMAP[1:0]
保留
保留
000h
004h
保留
004h
PORT
[2:0] PIN[3:0]
保留
SWJ_CFG
[2:0]
TIM3_REMAP[1:0]
TIM2_REMAP[1:0]
TIM1_REMAP[1:0]
CAN_REMAP[1:0]
USART3_REMAP[1:0]
保留
AFIO_MAPR
互联型产品
PTP_PPS_REMAP
TIM2ITR1_REMAP
SPI3_REMAP
MII_RMII_SEL
CAN2_REMAP
ETH_REMAP
TIM5CH4_IREMAP
PD01_REMAP
TIM4_REMAP
USART2_REMAP
USART1_REMAP
I2C1_REMAP
SPI1_REMAP
复位值 000 000000 00000000000000000
AFIO_EXTICR1
复位值 0000000000000000
AFIO_EXTICR2
复位值 0000000000000000
AFIO_EXTICR3
复位值 0000000000000000
AFIO_EXTICR4
复位值 0000000000000000
TIM3_REMAP[1:0]
TIM2_REMAP[1:0]
TIM1_REMAP[1:0]
USART3_REMAP[1:0]
SWJ_CFG
[2:0]
CAN1_REMAP[1:0]
保留
保留
00Ch
008h 保留
保留
EXTI3[3:0] EXTI2[3:0]
004h
014h
010h
保留
保留
EXTI1[3:0] EXTI0[3:0]
EXTI7[3:0] EXTI6[3:0] EXTI5[3:0] EXTI4[3:0]
EXTI11[3:0] EXTI10[3:0] EXTI9[3:0] EXTI8[3:0]
EXTI15[3:0] EXTI14[3:0] EXTI13[3:0] EXTI12[3:0]
中断和事件 STM32F10xxx参考手册
9 中断和事件
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
9.1 嵌套向量中断控制器
特性
68个可屏蔽中断通道(不包含16Cortex™-M3的中断线)
16个可编程的优先等级(使用了4位中断优先级)
低延迟的异常和中断处理;
电源管理控制;
系统控制寄存器的实现;
嵌套向量中断控制器(NVIC)和处理器核的接口紧密相连,可以实现低延迟的中断处理和高效地
处理晚到的中断。
嵌套向量中断控制器管理着包括内核异常等中断。更多关于异常和NVIC编程的说明请参考
STM32F10xxx Cortex-M3编程手册》。
9.1.1 系统嘀嗒(SysTick)校准值寄存器
系统嘀嗒校准值固定为9000,当系统嘀嗒时钟设定为9MHz(HCLK/8的最大值),产生1ms时间
基准。
9.1.2 中断和异常向量
下面两个表,分别列出了互联型产品和其它STM32F10xxx产品的向量表。
54 互联型产品的向量表
优先级
优先
名称 说明 地址
类型
- - - 保留 0x0000_0000
-3 Reset 复位 0x0000_0004固定
130/754
-2 不可屏蔽中断
NMI 0x0000_0008固定 RCC时钟安全系统(CSS)联接到NMI向量
-1 硬件失效(HardFault) 所有类型的失效 0x0000_000C固定
0 可设置 存储管理(MemManage) 存储器管理 0x0000_0010
1 可设置 总线错误(BusFault) 预取指失败,存储器访问失败 0x0000_0014
2 可设置 错误应用(UsageFault) 未定义的指令或非法状态 0x0000_0018
0x0000_001C
- - - 保留 ~0x0000_002B
3 可设置 SVCall 通过SWI指令的系统服务调用 0x0000_002C
4 可设置 调试监控(DebugMonitor) 调试监控器 0x0000_0030
- - - 保留 0x0000_0034
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
中断和事件 STM32F10xxx参考手册
131/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
5 可设置 PendSV 可挂起的系统服务 0x0000_0038
6 可设置 SysTick 系统嘀嗒定时器 0x0000_003C
0 7 可设置 WWDG 窗口定时器中断 0x0000_0040
1 8 可设置 PVD 连到EXTI的电源电压检测(PVD)中断 0x0000_0044
2 9 可设置 TAMPER 侵入检测中断 0x0000_0048
3 10 可设置 RTC 实时时钟(RTC)全局中断 0x0000_004C
4 11 可设置 FLASH 闪存全局中断 0x0000_0050
5 12 可设置 RCC 复位和时钟控制(RCC)中断 0x0000_0054
6 13 可设置 EXTI0 EXTI线0中断 0x0000_0058
7 14 可设置 EXTI1 EXTI线1中断 0x0000_005C
8 15 可设置 EXTI2 EXTI线2中断 0x0000_0060
9 16 可设置 EXTI3 EXTI线3中断 0x0000_0064
10 17 可设置 EXTI4 EXTI线4中断 0x0000_0068
11 18 可设置 DMA1通道1 DMA1通道1全局中断 0x0000_006C
12 19 可设置 DMA1通道2 DMA1通道2全局中断 0x0000_0070
13 20 可设置 DMA1通道3 DMA1通道3全局中断 0x0000_0074
14 21 可设置 DMA1通道4 DMA1通道4全局中断 0x0000_0078
15 22 可设置 DMA1通道5 DMA1通道5全局中断 0x0000_007C
16 23 可设置 DMA1通道6 DMA1通道6全局中断 0x0000_0080
17 24 可设置 DMA1通道7 DMA1通道7全局中断 0x0000_0084
18 25 可设置 ADC1_2 ADC1ADC2全局中断 0x0000_0088
19 26 可设置 CAN1_TX CAN1发送中断 0x0000_008C
20 27 可设置 CAN1_RX0 CAN1接收0中断 0x0000_0090
21 28 可设置 CAN1_RX1 CAN1接收1中断 0x0000_0094
22 29 可设置 CAN_SCE CAN1 SCE中断 0x0000_0098
23 30 可设置 EXTI9_5 EXTI线[9:5]中断 0x0000_009C
24 31 可设置 TIM1_BRK TIM1刹车中断 0x0000_00A0
25 32 可设置 TIM1_UP TIM1更新中断 0x0000_00A4
26 33 可设置 TIM1_TRG_COM TIM1触发和通信中断 0x0000_00A8
27 34 可设置 TIM1_CC TIM1捕获比较中断 0x0000_00AC
28 35 可设置 TIM2 TIM2全局中断 0x0000_00B0
29 36 可设置 TIM3 TIM3全局中断 0x0000_00B4
30 37 可设置 TIM4 TIM4全局中断 0x0000_00B8
31 38
可设置 I2C1_EV I2C1事件中断 0x0000_00BC
32 39
可设置 I2C1_ER I2C1错误中断 0x0000_00C0
33 40
可设置 I2C2_EV I2C2事件中断 0x0000_00C4
34 41
可设置 I2C2_ER I2C2错误中断 0x0000_00C8
35 42 可设置 SPI1 SPI1全局中断 0x0000_00CC
36 43 可设置 SPI2 SPI2全局中断 0x0000_00D0
37 44 可设置 USART1 USART1全局中断 0x0000_00D4
38 45 可设置 USART2 USART2全局中断 0x0000_00D8
39 46 可设置 USART3 USART3全局中断 0x0000_00DC
40 47 可设置 EXTI15_10 EXTI线[15:10]中断 0x0000_00E0
41 48 可设置 RTCAlarm 连到EXTIRTC闹钟中断 0x0000_00E4
中断和事件 STM32F10xxx参考手册
132/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
42 49 可设置 OTG_FS_WKUP唤醒 连到EXTI的全速USB OTG唤醒中断 0x0000_00E8
- - - - 保留 0x0000_00EC
~0x0000_0104
50 57 可设置 TIM5 TIM5全局中断 0x0000_0108
51 58 可设置 SPI3 SPI3全局中断 0x0000_010C
52 59 可设置 UART4 UART4全局中断 0x0000_0110
53 60 可设置 UART5 UART5全局中断 0x0000_0114
54 61 可设置 TIM6 TIM6全局中断 0x0000_0118
55 62 可设置 TIM7 TIM7全局中断 0x0000_011C
56 63 可设置 DMA2通道1 DMA2通道1全局中断 0x0000_0120
57 64 可设置 DMA2通道2 DMA2通道2全局中断 0x0000_0124
58 65 可设置 DMA2通道3 DMA2通道3全局中断 0x0000_0128
59 66 可设置 DMA2通道4 DMA2通道4全局中断 0x0000_012C
60 67 可设置 DMA2通道5 DMA2通道5全局中断 0x0000_0130
61 68 可设置 ETH 以太网全局中断 0x0000_0134
62 69 可设置 ETH_WKUP 连到EXTI的以太网唤醒中断 0x0000_0138
63 70 可设置 CAN2_TX CAN2发送中断 0x0000_013C
64 71 可设置 CAN2_RX0 CAN2接收0中断 0x0000_0140
65 72 可设置 CAN2_RX1 CAN2接收1中断 0x0000_0144
66 73 可设置 CAN2_SCE CAN2SCE中断 0x0000_0148
67 74 可设置 OTG_FS 全速的USB OTG全局中断 0x0000_014C
55STM32F10xxx产品(小容量、中容量和大容量)的向量表
优先
优先级
类型 名称 说明 地址
- - - 保留 0x0000_0000
-3 固定 Reset 复位 0x0000_0004
-2 固定 NMI 不可屏蔽中断
RCC时钟安全系统(CSS)联接到NMI向量 0x0000_0008
-1 固定 硬件失效(HardFault) 所有类型的失效 0x0000_000C
0 可设置 存储管理(MemManage) 存储器管理 0x0000_0010
1 可设置 总线错误(BusFault) 预取指失败,存储器访问失败 0x0000_0014
2 可设置 错误应用(UsageFault) 未定义的指令或非法状态 0x0000_0018
- - - 保留 0x0000_001C
~0x0000_002B
3 可设置 SVCall 通过SWI指令的系统服务调用 0x0000_002C
4 可设置 调试监控(DebugMonitor) 调试监控器 0x0000_0030
- - - 保留 0x0000_0034
5 可设置 PendSV 可挂起的系统服务 0x0000_0038
6 可设置 SysTick 系统嘀嗒定时器 0x0000_003C
0 7 可设置 WWDG 窗口定时器中断 0x0000_0040
1 8 可设置 PVD 连到EXTI的电源电压检测(PVD)中断 0x0000_0044
2 9 可设置 TAMPER 侵入检测中断 0x0000_0048
3 10 可设置 RTC 实时时钟(RTC)全局中断 0x0000_004C
4 11 可设置 FLASH 闪存全局中断 0x0000_0050
中断和事件 STM32F10xxx参考手册
133/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
5 12 可设置 RCC 复位和时钟控制(RCC)中断 0x0000_0054
6 13 可设置 EXTI0 EXTI线0中断 0x0000_0058
7 14 可设置 EXTI1 EXTI线1中断 0x0000_005C
8 15 可设置 EXTI2 EXTI线2中断 0x0000_0060
9 16 可设置 EXTI3 EXTI线3中断 0x0000_0064
10 17 可设置 EXTI4 EXTI线4中断 0x0000_0068
11 18 可设置 DMA1通道1 DMA1通道1全局中断 0x0000_006C
12 19 可设置 DMA1通道2 DMA1通道2全局中断 0x0000_0070
13 20 可设置 DMA1通道3 DMA1通道3全局中断 0x0000_0074
14 21 可设置 DMA1通道4 DMA1通道4全局中断 0x0000_0078
15 22 可设置 DMA1通道5 DMA1通道5全局中断 0x0000_007C
16 23 可设置 DMA1通道6 DMA1通道6全局中断 0x0000_0080
17 24 可设置 DMA1通道7 DMA1通道7全局中断 0x0000_0084
18 25 可设置 ADC1_2 ADC1ADC2的全局中断 0x0000_0088
19 26 可设置 USB_HP_CAN_TX USB高优先级或CAN发送中 0x0000_008C
20 27 可设置 USB_LP_CAN_RX0 USB低优先级或CAN接收0中断 0x0000_0090
21 28 可设置 CAN_RX1 CAN接收1中断 0x0000_0094
22 29 可设置 CAN_SCE CAN SCE中断 0x0000_0098
23 30 可设置 EXTI9_5 EXTI线[9:5]中断 0x0000_009C
24 31 可设置 TIM1_BRK TIM1刹车中断 0x0000_00A0
25 32 可设置 TIM1_UP TIM1更新中断 0x0000_00A4
26 33 可设置 TIM1_TRG_COM TIM1触发和通信中断 0x0000_00A8
27 34 可设置 TIM1_CC TIM1捕获比较中断 0x0000_00AC
28 35 可设置 TIM2 TIM2全局中断 0x0000_00B0
29 36 可设置 TIM3 TIM3全局中断 0x0000_00B4
30 37 可设置 TIM4 TIM4全局中断 0x0000_00B8
31 38
可设置 I2C1_EV I2C1事件中断 0x0000_00BC
32 39
可设置 I2C1_ER I2C1错误中断 0x0000_00C0
33 40
可设置 I2C2_EV I2C2事件中断 0x0000_00C4
34 41
可设置 I2C2_ER I2C2错误中断 0x0000_00C8
35 42 可设置 SPI1 SPI1全局中断 0x0000_00CC
36 43 可设置 SPI2 SPI2全局中断 0x0000_00D0
37 44 可设置 USART1 USART1全局中断 0x0000_00D4
38 45 可设置 USART2 USART2全局中断 0x0000_00D8
39 46 可设置 USART3 USART3全局中断 0x0000_00DC
40 47 可设置 EXTI15_10 EXTI线[15:10]中断 0x0000_00E0
41 48 可设置 RTCAlarm 连到EXTIRTC闹钟中断 0x0000_00E4
42 49 可设置 USB唤醒 连到EXTI的从USB待机唤醒中断 0x0000_00E8
43 50 可设置 TIM8_BRK TIM8刹车中断 0x0000_00EC
44 51 可设置 TIM8_UP TIM8更新中断 0x0000_00F0
45 52 可设置 TIM8_TRG_COM TIM8触发和通信中断 0x0000_00F4
46 53 可设置 TIM8_CC TIM8捕获比较中断 0x0000_00F8
47 54 可设置 ADC3 ADC3全局中断 0x0000_00FC
48 55 可设置 FSMC FSMC全局中断 0x0000_0100
中断和事件 STM32F10xxx参考手册
SDIO 0x0000_0104
49 56 可设置 SDIO全局中断
TIM5 0x0000_0108
50 57 可设置 TIM5全局中断
SPI3 0x0000_010C
51 58 可设置 SPI3全局中断
UART4 0x0000_0110
52 59 可设置 UART4全局中断
UART5 0x0000_0114
53 60 可设置 UART5全局中断
TIM6 0x0000_0118
54 61 可设置 TIM6全局中断
TIM7 0x0000_011C
55 62 可设置 TIM7全局中断
0x0000_0120
56 63 可设置 DMA2通道1 DMA2通道1全局中断
0x0000_0124
57 64 可设置 DMA2通道2 DMA2通道2全局中断
0x0000_0128
58 65 可设置 DMA2通道3 DMA2通道3全局中断
0x0000_012C
59 66 可设置 DMA2通道4_5 DMA2通道4DMA2通道5全局中断
9.2 外部中断/事件控制器(EXTI)
对于互联型产品,外部中断/事件控制器由20个产生事件/中断请求的边沿检测器组成,对于其它
产品,则有19个能产生事件/中断请求的边沿检测器。每个输入线可以独立地配置输入类型(脉冲
或挂起)和对应的触发事(上升沿或下降沿或者双边沿都触发)每个输入线都可以独立地被屏
蔽。挂起寄存器保持着状态线的中断请求。
9.2.1 主要特性
EXTI控制器的主要特性如下:
每个中断/事件都有独立的触发和屏蔽
每个中断线都有专用的状态位
支持多达20个软件的中断/事件请求
检测脉冲宽度低于APB2时钟宽度的外部信号。参见数据手册中电气特性部分的相关参数。
134/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
中断和事件 STM32F10xxx参考手册
9.2.2 框图
19 外部中断/事件控制器框图
9.2.3 唤醒事件管理
STM32F10xxx可以处理外部或内部事件来唤醒内核(WFE)。唤醒事件可以通过下述配置产生:
在外设的控制寄存器使能一个中断,但不在NVIC中使能,同时在Cortex-M3的系统控制寄
存器中使能SEVONPEND位。当CPUWFE恢复后,需要清除相应外设的中断挂起位和外
NVIC中断通道挂起位(NVIC中断清除挂起寄存器中)
配置一个外部或内部EXTI线为事件模式,当CPUWFE恢复后,因为对应事件线的挂起位
没有被置位,不必清除相应外设的中断挂起位或NVIC中断通道挂起位。
在互联型产品中,以太网唤醒事件同样具有WFE唤醒功能。
135/754
使用外部I/O端口作为唤醒事件,请参见9.2.4节的功能说明
9.2.4 功能说明
要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置2个触发寄存器,同时在中
断屏蔽寄存器的相应位’1’允许中断请求。当外部中断线上发生了期待的边沿时,将产生一个
中断请求,对应的挂起位也随之被置’1’。在挂起寄存器的对应位写’1’,将清除该中断请求。
如果需要产生事件,必须先配置好并使能事件线。根据需要的边沿检测通过设置2个触发寄存
器,同时在事件屏蔽寄存器的相应位写’1’允许事件请求。当事件线上发生了需要的边沿时,将
产生一个事件请求脉冲,对应的挂起位不被置’1’
通过在软件中断/事件寄存器写’1’,也可以通过软件产生中断/事件请求。
硬件中断选择
通过下面的过程来配置20个线路做为中断源:
配置20个中断线的屏蔽位(EXTI_IMR)
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
中断和事件 STM32F10xxx参考手册
配置所选中断线的触发选择位(EXTI_RTSREXTI_FTSR)
配置对应到外部中断控制器(EXTI)NVIC中断通道的使能和屏蔽位,使得20个中断线中的
请求可以被正确地响应。
硬件事件选择
通过下面的过程,可以配置20个线路为事件源
配置20个事件线的屏蔽位(EXTI_EMR)
配置事件线的触发选择位(EXTI_RTSREXTI_FTSR)
软件中断/事件的选择
20个线路可以被配置成软件中断/事件线。下面是产生软件中断的过程:
配置20个中断/事件线屏蔽位(EXTI_IMR, EXTI_EMR)
设置软件中断寄存器的请求位(EXTI_SWIER)
136/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
中断和事件 STM32F10xxx参考手册
9.2.5 外部中断/事件线路映像
112通用I/O端口以下图的方式连接到16个外部中断/事件线上:
20 外部中断通用I/O映像
1.通过AFIO_EXTICRx配置GPIO线上的外部中断/事件,必须先使能AFIO时钟。对于小容量、中容量和大容量
的产品,参见6.3.7
137/754
节;对于互联型产品,参见7.3.7节。
另外四个EXTI线的连接方式如下:
EXTI线16连接到PVD输出
EXTI线17连接到RTC闹钟事件
EXTI线18连接到USB唤醒事件
EXTI线19连接到以太网唤醒事件(只适用于互联型产品)
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
中断和事件 STM32F10xxx参考手册
9.3 EXTI 寄存器描述
138/754
关于寄存器描述中的缩略词,请参考1.1节。
必须以字(32)的方式操作这些外设寄存器。
9.3.1 中断屏蔽寄存器(EXTI_IMR)
偏移地址:0x00
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
MR19 MR18 MR17 MR16
rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MR15 MR14 MR13 MR12 MR11 MR10 MR9 MR8 MR7 MR6 MR4 MR4 MR3 MR2 MR1 MR0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
31:20 保留,必须始终保持为复位状态(0)
MRx: 线x上的中断屏蔽 (Interrupt Mask on line x) 19:0
0:屏蔽来自线x上的中断请求;
1:开放来自线x上的中断请求。
注:位19只适用于互联型产品,对于其它产品为保留位。
9.3.2 事件屏蔽寄存器(EXTI_EMR)
偏移地址:0x04
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
MR19 MR18 MR17 MR16
rw rw rw rw
1514131211109876543210
MR15 MR14 MR13 MR12 MR11 MR10 MR9 MR8 MR7 MR6 MR4 MR4 MR3 MR2 MR1 MR0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
31:20 保留,必须始终保持为复位状态(0)
MRx: 线x上的事件屏蔽 (Event Mask on line x) 19:0
0:屏蔽来自线x上的事件请求;
1:开放来自线x上的事件请求。
注:位19只适用于互联型产品,对于其它产品为保留位。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
中断和事件 STM32F10xxx参考手册
9.3.3 上升沿触发选择寄存器(EXTI_RTSR)
偏移地址:0x08
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
TR19 TR18 TR17 TR16
rw rw rw rw
保留
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TR15 TR14 TR13 TR12 TR11 TR10 TR9 TR8 TR7 TR6 TR5 TR4 TR3 TR2 TR1 TR0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31:19 保留,必须始终保持为复位状态(0)
TRx: 线x上的上升沿触发事件配置位 (Rising trigger event configuration bit of line x) 18:0
0:禁止输入线x上的上升沿触发(中断和事件)
1:允许输入线x上的上升沿触发(中断和事件)
注:位19只适用于互联型产品,对于其它产品为保留位。
注意
:
外部唤醒线是边沿触发的,这些线上不能出现毛刺信号。
在写
EXTI_RTSR
寄存器时,在外部中断线上的上升沿信号不能被识别,挂起位也不会被置位。
在同一中断线上,可以同时设置上升沿和下降沿触发。即任一边沿都可触发中断。
9.3.4 下降沿触发选择寄存器(EXTI_FTSR)
偏移地址:0x0C
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
TR19 TR18 TR17 TR16
rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TR15 TR14 TR13 TR12 TR11 TR10 TR9 TR8 TR7 TR6 TR5 TR4 TR3 TR2 TR1 TR0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
31:19 保留,必须始终保持为复位状态(0)
TRx: 线x上的下降沿触发事件配置位 (Falling trigger event configuration bit of line x) 18:0
0:禁止输入线x上的下降沿触发(中断和事件)
1:允许输入线x上的下降沿触发(中断和事件)
注:位19只适用于互联型产品,对于其它产品为保留位。
注意
:
外部唤醒线是边沿触发的,这些线上不能出现毛刺信号。
在写
EXTI_FTSR
寄存器时,在外部中断线上的下降沿信号不能被识别,挂起位不会被置位。
在同一中断线上,可以同时设置上升沿和下降沿触发。即任一边沿都可触发中断。
139/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
中断和事件 STM32F10xxx参考手册
9.3.5 软件中断事件寄存器(EXTI_SWIER)
偏移地址:0x10
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SWIER
19
SWIER
18
SWIER
17
SWIER
16
rw rw rw rw
保留
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SWIER
15
SWIER
14
SWIER
13
SWIER
12
SWIER
11
SWIER
10
SWIER
9
SWIER
8
SWIER
7
SWIER
6
SWIER
5
SWIER
4
SWIER
3
SWIER
2
SWIER
1
SWIER
0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31:19 保留,必须始终保持为复位状态(0)
SWIERx: 线x上的软件中断 (Software interrupt on line x) 18:0
当该位为’0’时,’1’将设置EXTI_PR中相应的挂起位。如果在EXTI_IMREXTI_EMR中允许
产生该中断,则此时将产生一个中断。
注:通过清除EXTI_PR的对应位(写入’1’),可以清除该位为’0’
注:位19只适用于互联型产品,对于其它产品为保留位。
9.3.6 挂起寄存器(EXTI_PR)
偏移地址:0x14
复位值:0xXXXX XXXX
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PR19 PR18 PR17 PR16
rc w1 rc w1 rc w1 rc w1
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PR15 PR14 PR13 PR12 PR11 PR10 PR9 PR8 PR7 PR6 PR5 PR4 PR3 PR2 PR1 PR0
rc w1 rc w1 rc w1 rc w1 rc w1 rc w1 rc w1 rc w1 rc w1 rc w1 rc w1 rc w1 rc w1 rc w1 rc w1 rc w1
保留
31:19 保留,必须始终保持为复位状态(0)
PRx: 挂起位 (Pending bit) 18:0
0:没有发生触发请求
1:发生了选择的触发请求
当在外部中断线上发生了选择的边沿事件,该位被置’1’。在该位中写入’1’可以清除它,也可以
通过改变边沿检测的极性清除。
注:位19只适用于互联型产品,对于其它产品为保留位。
140/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
中断和事件 STM32F10xxx参考手册
141/754
参照200912 RM0008 Reference Manual 英文第10
9.3.7 外部中断/事件寄存器映像
下表列出了EXTI寄存器的映像和复位值。所有寄存器中的位19只适用于互联型产品,在其它产
品中为保留位。
56 外部中断/事件控制器寄存器映像和复位值
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
EXTI_IMR
复位值
000000000000000000000
EXTI_EMR
复位值
000000000000000000000
EXTI_RTSR
复位值
000000000000000000000
EXTI_FTSR
保留 TR[19:0]
保留 MR[19:0]
保留 MR[19:0]
000h
00Ch
008h
004h
保留 TR[19:0]
复位值
000000000000000000000
EXTI_SWIER
复位值
000000000000000000000
EXTI_PR
复位值
000000000000000000000
014h
保留 PR[19:0]
010h
保留 SWIER[19:0]
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
关于寄存器的起始地址,参见表1。
DMA控制器(DMA) STM32F10xxx参考手册
10 DMA控制器(DMA)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
10.1 DMA简介
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传
输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。
两个DMA控制器有12个通道(DMA17个通道,DMA25个通道),每个通道专门用来管理来自
于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。
10.2 DMA主要特性
12个独立的可配置的通道(请求)DMA17个通道,DMA25个通道
每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过
软件来配置。
在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、
中等和低),优先权设置相等时由硬件决定(请求0优先于请求1,依此类推)
独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目
标地址必须按数据传输宽度对齐。
支持循环的缓冲器管理
每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这3个事件标志
逻辑或成为一个单独的中断请求。
存储器和存储器间的传输
外设和存储器、存储器和外设之间的传输
闪存、SRAM、外设的SRAMAPB1APB2AHB外设均可作为访问的源和目标。
可编程的数据传输数目:最大为65535
下面为功能框图:
142/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
DMA控制器(DMA) STM32F10xxx参考手册
21 DMA框图
1DMA2仅存在于大容量产品和互联型产品。
2SPI/I2S3UART4TIM5TIM6TIM7DACDMA请求仅存在于大容量产品和互联型产品。
3ADC3SDIOTIM8DMA请求仅存在于大容量产品。
10.3 功能描述
DMA控制器和Cortex™-M3核心共享系统数据总线,执行直接存储器数据传输。当CPUDMA
同时访问相同的目标(RAM或外设)时,DMA请求会暂停CPU访问系统总线达若干个周期,总线
仲裁器执行循环调度,以保证CPU至少可以得到一半的系统总线(存储器或外设)带宽。
10.3.1 DMA处理
在发生一个事件后,外设向DMA控制器发送一个请求信号。DMA控制器根据通道的优先权处理
请求。当DMA控制器开始访问发出请求的外设时,DMA控制器立即发送给它一个应答信号。当
DMA控制器得到应答信号时,外设立即释放它的请求。一旦外设释放了这个请求,DMA控制
器同时撤销应答信号。如果有更多的请求时,外设可以启动下一个周期。
总之,每次DMA传送由3个操作组成:
从外设数据寄存器或者从当前外设/存储器地址寄存器指示的存储器地址取数据,第一次传
输时的开始地址是DMA_CPARxDMA_CMARx寄存器指定的外设基地址或存储器单元。
存数据到外设数据寄存器或者当前外设/存储器地址寄存器指示的存储器地址,第一次传输
时的开始地址是DMA_CPARxDMA_CMARx寄存器指定的外设基地址或存储器单元。
执行一次DMA_CNDTRx寄存器的递减操作,该寄存器包含未完成的操作数目。
143/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
DMA控制器(DMA) STM32F10xxx参考手册
10.3.2 仲裁器
仲裁器根据通道请求的优先级来启动外设/存储器的访问。
优先权管理分2个阶段:
软件:每个通道的优先权可以在DMA_CCRx寄存器中设置,有4个等级:
最高优先级
高优先级
中等优先级
低优先级
硬件:如果2个请求有相同的软件优先级,则较低编号的通道比较高编号的通道有较高的优
先权。举个例子,通道2优先于通道4
注意:
在大容量产品和互联型产品中,
DMA1
控制器拥有高于
DMA2
控制器的优先级
10.3.3 DMA 通道
每个通道都可以在有固定地址的外设寄存器和存储器地址之间执行DMA传输。DMA传输的数据
量是可编程的,最大达到65535。包含要传输的数据项数量的寄存器,在每次传输后递减。
可编程的数据量
外设和存储器的传输数据量可以通过DMA_CCRx寄存器中的PSIZEMSIZE位编程。
指针增量
通过设置DMA_CCRx寄存器中的PINCMINC标志位,外设和存储器的指针在每次传输后可以
有选择地完成自动增量。当设置为增量模式时,下一个要传输的地址将是前一个地址加上增量
值,增量值取决与所选的数据宽度为124。第一个传输的地址是存放在DMA_CPARx
/DMA_CMARx寄存器中地址。在传输过程中,这些寄存器保持它们初始的数值,软件不能改变
和读出当前正在传输的地址(它在内部的当前外设/存储器地址寄存器中)
当通道配置为非循环模式时,传输结束后(即传输计数变为0)将不再产生DMA操作。要开始新的
DMA传输,需要在关闭DMA通道的情况下,在DMA_CNDTRx寄存器中重新写入传输数目。
在循环模式下,最后一次传输结束时,DMA_CNDTRx寄存器的内容会自动地被重新加载为其初
始数值,内部的当前外设/存储器地址寄存器也被重新加载为DMA_CPARx/DMA_CMARx寄存器
设定的初始基地址。
通道配置过程
下面是配置DMA通道x的过程(x代表通道号)
1. DMA_CPARx寄存器中设置外设寄存器的地址。发生外设数据传输请求时,这个地址将
是数据传输的源或目标。
2. DMA_CMARx寄存器中设置数据存储器的地址。发生外设数据传输请求时,传输的数
据将从这个地址读出或写入这个地址。
3. DMA_CNDTRx寄存器中设置要传输的数据量。在每个数据传输后,这个数值递减。
4. DMA_CCRx寄存器的PL[1:0]位中设置通道的优先级。
5. DMA_CCRx寄存器中设置数据传输的方向、循环模式、外设和存储器的增量模式、外
设和存储器的数据宽度、传输一半产生中断或传输完成产生中断。
6. 设置DMA_CCRx寄存器的ENABLE位,启动该通道。
一旦启动了DMA通道,它既可响应连到该通道上的外设的DMA请求。
当传输一半的数据后,半传输标志(HTIF)被置1,当设置了允许半传输中断位(HTIE)时,将产生
一个中断请求。在数据传输结束后,传输完成标志(TCIF)被置1,当设置了允许传输完成中断位
(TCIE)时,将产生一个中断请求。
144/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
DMA控制器(DMA) STM32F10xxx参考手册
循环模式
循环模式用于处理循环缓冲区和连续的数据传输(ADC的扫描模式)。在DMA_CCRx寄存器中
CIRC位用于开启这一功能。当启动了循环模式,数据传输的数目变为0时,将会自动地被恢
复成配置通道时设置的初值,DMA操作将会继续进行。
存储器到存储器模式
DMA通道的操作可以在没有外设请求的情况下进行,这种操作就是存储器到存储器模式。
当设置了DMA_CCRx寄存器中的MEM2MEM位之后,在软件设置了DMA_CCRx寄存器中的EN
位启动DMA通道时,DMA传输将马上开始。当DMA_CNDTRx寄存器变为0时,DMA传输结
束。存储器到存储器模式不能与循环模式同时使用。
10.3.4 可编程的数据传输宽度、对齐方式和数据大小端
PSIZEMSIZE不相同时,DMA模块按照下表进行数据对齐。
57 可编程的数据传输宽度和大小端操作(PINC = MINC = 1)
源端
宽度
目标
宽度
传输
数目 源:地址/数据 传输操作 目标:地址/数据
1: 0x0B0[7:0],在0x0B0[7:0]
2: 0x1B1[7:0],在0x1B1[7:0]
3: 0x2B2[7:0],在0x2B2[7:0]
4: 0x3B3[7:0],在0x3B3[7:0]
145/754
8 8 4
0x0 / B0
0x1 / B1
0x2 / B2
0x3 / B3
0x0 / B0
0x1 / B1
0x2 / B2
0x3 / B3
1: 0x0B0[7:0],在0x000B0[15:0]
2: 0x1B1[7:0],在0x200B1[15:0]
3: 0x2B2[7:0],在0x400B2[15:0]
4: 0x3B3[7:0],在0x600B3[15:0]
8 16 4
0x0 / B0
0x1 / B1
0x2 / B2
0x3 / B3
0x0 / 00B0
0x2 / 00B1
0x4 / 00B2
0x6 / 00B3
1: 0x0B0[7:0],在0x0000000B0[31:0]
2: 0x1B1[7:0],在0x4000000B1[31:0]
3: 0x2B2[7:0],在0x8000000B2[31:0]
4: 0x3B3[7:0],在0xC000000B3[31:0]
0x0 / 000000B0
0x4 / 000000B1
0x8 / 000000B2
0xC / 000000B3
8 32 4
0x0 / B0
0x1 / B1
0x2 / B2
0x3 / B3
1: 0x0B1B0[15:0],在0x0B0[7:0]
2: 0x2B3B2[15:0],在0x1B2[7:0]
3: 0x4B5B4[15:0],在0x2B4[7:0]
4: 0x6B7B6[15:0],在0x3B6[7:0]
16 8 4
0x0 / B1B0
0x2 / B3B2
0x4 / B5B4
0x6 / B7B6
0x0 / B0
0x1 / B2
0x2 / B4
0x3 / B6
1: 0x0B1B0[15:0],在0x0B1B0[15:0]
2: 0x2B3B2[15:0],在0x2B3B2[15:0]
3: 0x4B5B4[15:0],在0x4B5B4[15:0]
4: 0x6B7B6[15:0],在0x6B7B6[15:0]
0x0 / B1B0
0x2 / B3B2
0x4 / B5B4
0x6 / B7B6
16 16 4
0x0 / B1B0
0x2 / B3B2
0x4 / B5B4
0x6 / B7B6
1: 0x0B1B0[15:0],在0x00000B1B0[31:0]
2: 0x2B3B2[15:0],在0x40000B3B2[31:0]
3: 0x4B5B4[15:0],在0x80000B5B4[31:0]
4: 0x6B7B6[15:0],在0xC0000B7B6[31:0]
16 32 4
0x0 / B1B0
0x2 / B3B2
0x4 / B5B4
0x6 / B7B6
0x0 / 0000B1B0
0x4 / 0000B3B2
0x8 / 0000B5B4
0xC / 0000B7B6
1: 0x0B3B2B1B0[31:0],在0x0B0[7:0]
2: 0x4B7B6B5B4[31:0],在0x1B4[7:0]
3: 0x8BBBAB9B8[31:0],在0x2B8[7:0]
4: 0xCBFBEBDBC[31:0],在0x3BC[7:0]
0x0 / B0
0x1 / B4
0x2 / B8
0x3 / BC
32 8 4
0x0 / B3B2B1B0
0x4 / B7B6B5B4
0x8 / BBBAB9B8
0xC / BFBEBDBC
1: 0x0B3B2B1B0[31:0],在0x0B1B0[15:0]
2: 0x4B7B6B5B4[31:0],在0x2B5B4[15:0]
3: 0x8BBBAB9B8[31:0],在0x4B9B8[15:0]
4: 0xCBFBEBDBC[31:0],在0x6BDBC[15:0]
32 16 4
0x0 / B3B2B1B0
0x4 / B7B6B5B4
0x8 / BBBAB9B8
0xC / BFBEBDBC
0x0 / B1B0
0x2 / B5B4
0x4 / B9B8
0x6 / BDBC
1: 0x0B3B2B1B0[31:0],在0x0B3B2B1B0[31:0]
2: 0x4B7B6B5B4[31:0],在0x4B7B6B5B4[31:0]
3: 0x8BBBAB9B8[31:0],在0x8BBBAB9B8[31:0]
4: 0xCBFBEBDBC[31:0],在0xCBFBEBDBC[31:0]
0x0 / B3B2B1B0
0x4 / B7B6B5B4
0x8 / BBBAB9B8
0xC / BFBEBDBC
32 32 4
0x0 / B3B2B1B0
0x4 / B7B6B5B4
0x8 / BBBAB9B8
0xC / BFBEBDBC
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
DMA控制器(DMA) STM32F10xxx参考手册
操作一个不支持字节或半字写的AHB设备
DMA模块开始一个AHB的字节或半字写操作时,数据将在HWDATA[31:0]总线中未使用的部
分重复。因此,如果DMA以字节或半字写入不支持字节或半字写操作的AHB设备时(HSIZE
适于该模块),不会发生错误,DMA将按照下面两个例子写入32HWDATA数据:
HSIZE=半字时,写入半字’0xABCD’DMA将设置HWDATA总线为’0xABCDABCD’
HSIZE=字节时,写入字节’0xAB’DMA将设置HWDATA总线为’0xABABABAB’
假定AHB/APB桥是一个AHB32从设备,它不处理HSIZE参数,它将按照下述方式把任何
AHB上的字节或半字按32位传送到APB上:
一个AHB上对地址0x0(0x10x20x3)的写字节数据’0xB0’操作,将转换到APB上对地址
0x0的写字数据’0xB0B0B0B0’操作。
一个AHB上对地址0x0(0x2)的写半字数据’0xB1B0’操作,将转换到APB上对地址0x0的写
字数据’0xB1B0B1B0’操作。
例如,如果要写入APB后备寄存器(32位地址对齐的16位寄存器),需要配置存储器数据源宽
(MSIZE)’16,外设目标数据宽度(PSIZE)’32
10.3.5 错误管理
读写一个保留的地址区域,将会产生DMA传输错误。当在DMA读写操作时发生DMA传输错误
时,硬件会自动地清除发生错误的通道所对应的通道配置寄存器(DMA_CCRx)EN位,该通道
操作被停止。此时,在DMA_IFR寄存器中对应该通道的传输错误中断标志位(TEIF)将被置位,
如果在DMA_CCRx寄存器中设置了传输错误中断允许位,则将产生中断。
10.3.6 中断
每个DMA通道都可以在DMA传输过半、传输完成和传输错误时产生中断。为应用的灵活性考
虑,通过设置寄存器的不同位来打开这些中断。
58 DMA中断请求
中断事件 事件标志位 使能控制位
传输过半 HTIF HTIE
传输完成 TCIF TCIE
传输错误 TEIF TEIE
注意:
在大容量产品中,
DMA2
通道
4
DMA2
通道
5
的中断被映射在同一个中断向量上。在互联型产品
中,
DMA2
通道
4
DMA2
通道
5
的中断分别有独立的中断向量。所有其他的
DMA
通道都有自己的
中断向量。
146/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
DMA控制器(DMA) STM32F10xxx参考手册
10.3.7 DMA请求映像
DMA1控制器
从外设(TIMx[x=1234]ADC1SPI1SPI/I2S2I2Cx[x=12]USARTx[x=123])
产生的7个请求,通过逻辑或输入到DMA1控制器,这意味着同时只能有一个请求有效。参见下
图的DMA1请求映像。
外设的DMA请求,可以通过设置相应外设寄存器中的控制位,被独立地开启或关闭。
22 DMA1请求映像
147/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
DMA控制器(DMA) STM32F10xxx参考手册
59 各个通道的DMA1请求一览
外设 通道1 通道2 通道3 通道4 通道5 通道6 通道7
ADC1 ADC1
SPI/I2S SPI1_RX SPI1_TX SPI/I2S2_RX SPI/I2S2_TX
USART USART3_TX USART3_RX USART1_TX USART1_RX USART2_RX USART2_TX
I2C I2C2_TX I2C2_RX I2C1_TX I2C1_RX
TIM1_TX4
TIM1 TIM1_CH1 TIM1_CH2 TIM1_TRIG TIM1_UP TIM1_CH3
TIM1_COM
148/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
TIM2 TIM2_CH3 TIM2_UP TIM2_CH1 TIM2_CH2
TIM2_CH4
TIM3 TIM3_CH3
TIM3_CH4
TIM3_UP
TIM3_CH1
TIM3_TRIG
TIM4 TIM4_CH1 TIM4_CH2 TIM4_CH3 TIM4_UP
DMA2控制器
从外设(TIMx[5678]ADC3SPI/I2S3UART4DAC通道12SDIO)产生的5个请
求,经逻辑或输入到DMA2控制器,这意味着同时只能有一个请求有效。参见下图的DMA2请求
映像。
外设的DMA请求,可以通过设置相应外设寄存器中的DMA控制位,被独立地开启或关闭。
注意:
DMA2
控制器及相关请求仅存在于大容量产品和互联型产品中。
23 DMA2请求映像
DMA控制器(DMA) STM32F10xxx参考手册
60 各个通道的DMA2请求一览
外设 通道1 通道2 通道3 通道4 通道5
ADC3(1) ADC3
SPI/I2S3 SPI/I2S3_RX SPI/I2S3_TX
UART4 UART4_RX UART4_TX
SDIO(1) SDIO
TIM5_CH4 TIM5_CH3 TIM5_CH2 TIM5_CH1 TIM5 TIM5_TRIG TIM5_UP
TIM6/
149/754
DAC通道1
TIM6_UP/
DAC通道1
TIM7/
DAC通道2
TIM7_UP/
DAC通道2
TIM8_CH4
TIM8_CH3
TIM8(1) TIM8_TRIG TIM8_CH1 TIM8_CH2
TIM8_UP TIM8_COM
1 ADC3SDIOTIM8DMA请求只在大容量的产品中存在。
10.4 DMA寄存器
关于寄存器描述中用到的缩写,请参见第1章。
注意:
在以下列举的所有寄存器中,所有与通道
6
和通道
7
相关的位,对
DMA2
都不适用,因为
DMA2
5
个通道。
10.4.1 DMA中断状态寄存器(DMA_ISR)
偏移地址:0x00
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
TEIF7 HTIF7 TCIF7 GIF7 TEIF6 HTIF6 TCIF6 GIF6 TEIF5 HTIF5 TCIF5 GIF5
rrrrrrrrrrrr
1514131211109876543210
TEIF4 HTIF4 TCIF4 GIF4 TEIF3 HTIF3 TCIF3 GIF3 TEIF2 HTIF2 TCIF2 GIF2 TEIF1 HTIF1 TCIF1 GIF1
rrrrrrrrrrrrrrrr
保留
31:28 保留,始终读为0
2723
1915
1173
TEIFx:通道x的传输错误标志(x = 1 … 7) (Channel x transfer error flag)
硬件设置这些位。在DMA_IFCR寄存器的相应位写入’1’可以清除这里对应的标志位。
0:在通道x没有传输错误(TE)
1:在通道x发生了传输错误(TE)
2622
1814
1062
HTIFx:通道x的半传输标志(x = 1 … 7) (Channel x half transfer flag)
硬件设置这些位。在DMA_IFCR寄存器的相应位写入’1’可以清除这里对应的标志位。
0:在通道x没有半传输事件(HT)
1:在通道x产生了半传输事件(HT)
2521
1713
951
TCIFx:通道x的传输完成标志(x = 1 … 7) (Channel x transfer complete flag)
硬件设置这些位。在DMA_IFCR寄存器的相应位写入’1’可以清除这里对应的标志位。
0:在通道x没有传输完成事件(TC)
1:在通道x产生了传输完成事件(TC)
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
DMA控制器(DMA) STM32F10xxx参考手册
2420
1612
840
GIFx:通道x的全局中断标志(x = 1 … 7) (Channel x global interrupt flag)
硬件设置这些位。在DMA_IFCR寄存器的相应位写入’1’可以清除这里对应的标志位。
0:在通道x没有TEHTTC事件;
1:在通道x产生了TEHTTC事件。
10.4.2 DMA中断标志清除寄存器(DMA_IFCR)
偏移地址:0x04
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
CTEIF
7
CHTIF
7
CTCIF
7
CGIF
7
CTEIF
6
CHTIF
6
CTCIF
6
CGIF
6
CTEIF
5
CHTIF
5
CTCIF
5
CGIF
5
rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
CTEIF
4
CHTIF
4
CTCIF
4
CGIF
4
CTEIF
3
CHTIF
3
CTCIF
3
CGIF
3
CTEIF
2
CHTIF
2
CTCIF
2
CGIF
2
CTEIF
1
CHTIF
1
CTCIF
1
CGIF
1
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
31:28 保留,始终读为0
2723
1915
1173
CTEIFx:清除通道x的传输错误标志(x = 1 … 7) (Channel x transfer error clear)
这些位由软件设置和清除。
0:不起作用
1:清除DMA_ISR寄存器中的对应TEIF标志
2622
1814
1062
CHTIFx:清除通道x的半传输标志(x = 1 … 7) (Channel x half transfer clear)
这些位由软件设置和清除。
0:不起作用
0:清除DMA_ISR寄存器中的对应HTIF标志。
2521
17 13
951
CTCIFx:清除通道x的传输完成标志(x = 1 … 7) (Channel x transfer complete clear)
这些位由软件设置和清除。
0:不起作用
0:清除DMA_ISR寄存器中的对应TCIF标志
2420
1612
CGIFx:清除通道x的全局中断标志(x = 1 … 7) (Channel x global interrupt clear)
这些位由软件设置和清除。
840 0:不起作用
0:清除DMA_ISR寄存器中的对应的GIFTEIFHTIFTCIF标志。
10.4.3 DMA通道x配置寄存器(DMA_CCRx)(x = 1…7)
偏移地址:0x08 + 20 x (通道编号 – 1)
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
保留 MEM2
MEM MINC PINC CIRC DIR TEIE HTIE TCIE EN
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
PL[1:0] MSIZE[1:0] PSIZE[1:0]
31:15 保留,始终读为0
150/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
DMA控制器(DMA) STM32F10xxx参考手册
MEM2MEM:存储器到存储器模式 (Memory to memory mode) 14
该位由软件设置和清除。
0:非存储器到存储器模式;
1:启动存储器到存储器模式。
PL[1:0]:通道优先级 (Channel priority level) 13:12
这些位由软件设置和清除。
00:低
01:中
10:高
11:最高
MSIZE[1:0]:存储器数据宽度 (Memory size) 11:10
这些位由软件设置和清除。
008
0116
1032
11:保留
PSIZE[1:0]:外设数据宽度 (Peripheral size) 9:8
这些位由软件设置和清除。
008
0116
1032
11:保留
MINC:存储器地址增量模式 (Memory increment mode) 7
该位由软件设置和清除。
0:不执行存储器地址增量操作
1:执行存储器地址增量操作
PINC:外设地址增量模式 (Peripheral increment mode) 6
该位由软件设置和清除。
0:不执行外设地址增量操作
1:执行外设地址增量操作
CIRC:循环模式 (Circular mode) 5
该位由软件设置和清除。
0:不执行循环操作
1:执行循环操作
DIR:数据传输方向 (Data transfer direction) 4
该位由软件设置和清除。
0:从外设读
1:从存储器读
TEIE:允许传输错误中断 (Transfer error interrupt enable) 3
该位由软件设置和清除。
0:禁止TE中断
0:允许TE中断
HTIE:允许半传输中断 (Half transfer interrupt enable) 2
该位由软件设置和清除。
0:禁止HT中断
0:允许HT中断
TCIE:允许传输完成中断 (Transfer complete interrupt enable) 1
该位由软件设置和清除。
0:禁止TC中断
0:允许TC中断
151/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
DMA控制器(DMA) STM32F10xxx参考手册
EN:通道开启 (Channel enable) 0
该位由软件设置和清除。
0:通道不工作
1:通道开启
10.4.4 DMA通道x传输数量寄存器(DMA_CNDTRx)(x = 1…7)
偏移地址:0x0C + 20 x (通道编号 – 1)
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
NDT[15:0]
31:16 保留,始终读为0
NDT[15:0]:数据传输数量 (Number of data to transfer) 15:0
数据传输数量为065535。这个寄存器只能在通道不工作(DMA_CCRxEN=0)时写入。通
道开启后该寄存器变为只读,指示剩余的待传输字节数目。寄存器内容在每次DMA传输后递
减。
数据传输结束后,寄存器的内容或者变为0;或者当该通道配置为自动重加载模式时,寄存
器的内容将被自动重新加载为之前配置时的数值。
当寄存器的内容为0时,无论通道是否开启,都不会发生任何数据传输。
10.4.5 DMA通道x外设地址寄存器(DMA_CPARx)(x = 1…7)
偏移地址:0x10 + 20 x (通道编号 – 1)
复位值:0x0000 0000
当开启通道(DMA_CCRxEN=1)时不能写该寄存器。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
PA[31:0]
PA[31:0]:外设地址 (Peripheral address) 31:0
外设数据寄存器的基地址,作为数据传输的源或目标。
PSIZE=’01’(16),不使用PA[0]位。操作自动地与半字地址对齐。
PSIZE=’10’(32),不使用PA[1:0]位。操作自动地与字地址对齐。
10.4.6 DMA通道x存储器地址寄存器(DMA_CMARx)(x = 1…7)
偏移地址:0x14 + 20 x (通道编号 – 1)
复位值:0x0000 0000
当开启通道(DMA_CCRxEN=1)时不能写该寄存器。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
MA[31:0]
MA[31:0]:存储器地址 31:0
存储器地址作为数据传输的源或目标。
152/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
DMA控制器(DMA) STM32F10xxx参考手册
MSIZE=’01’(16),不使用MA[0]位。操作自动地与半字地址对齐。
MSIZE=’10’(32),不使用MA[1:0]位。操作自动地与字地址对齐。
10.4.7 DMA寄存器映像
153/754
关于寄存器的起始地址,参见表1。
61 DMA寄存器映像和复位
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
DMA_ISR
TEIF7
HTIF7
TCIF7
GIF7
TEIF6
HTIF6
TCIF6
GIF6
TEIF5
HTIF5
TCIF5
GIF5
TEIF4
HTIF4
TCIF4
GIF4
TEIF3
HTIF3
TCIF3
GIF3
TEIF2
HTIF2
TCIF2
GIF2
TEIF1
HTIF1
TCIF1
GIF1
复位值
0000000000000000000000000000
DMA_IFCR
CTEIF7
CHTIF7
CTCIF7
CGIF7
CTEIF6
CHTIF6
CTCIF6
CGIF6
CTEIF5
CHTIF5
CTCIF5
CGIF5
CTEIF4
CHTIF4
CTCIF4
CGIF4
CTEIF3
CHTIF3
CTCIF3
CGIF3
CTEIF2
CHTIF2
CTCIF2
CGIF2
CTEIF1
CHTIF1
CTCIF1
CGIF1
复位值
0000000000000000000000000000
DMA_CCR1
MEM2MEM
MINC
PINC
CIRC
DIR
TEIE
HTIE
TCIE
EN
复位值
000000000000000
DMA_CNDTR1
复位值
0000000000000000
DMA_CPAR1
复位值
00000000000000000000000000000000
DMA_CMAR1
复位值
00000000000000000000000000000000
018h
DMA_CCR2
MEM2MEM
MINC
PINC
CIRC
DIR
TEIE
HTIE
TCIE
EN
复位值
000000000000000
DMA_CNDTR2
复位值
0000000000000000
DMA_CPAR2
复位值
00000000000000000000000000000000
DMA_CMAR2
复位值
00000000000000000000000000000000
02Ch
DMA_CCR3
MEM2MEM
MINC
PINC
CIRC
DIR
TEIE
HTIE
TCIE
EN
复位值
000000000000000
DMA_CNDTR3
复位值
0000000000000000
DMA_CPAR3
复位值
00000000000000000000000000000000
DMA_CMAR3
复位值
00000000000000000000000000000000
040h
保留
004h
PA[31:0]
MSIZE
[1:0]
PSIZE
[1:0]
000h
014h
保留
保留
PL
[1:0]
保留
010h
00Ch
008h
MA[31:0]
NDT[15:0]
保留
01Ch 保留
PL
[1:0]
MSIZE
[1:0]
PSIZE
[1:0]
020h 保留 NDT[15:0]
024h PA[31:0]
028h MA[31:0]
保留
030h 保留
PL
[1:0]
MSIZE
[1:0]
PSIZE
[1:0]
03Ch MA[31:0]
保留
034h 保留 NDT[15:0]
038h PA[31:0]
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
DMA控制器(DMA) STM32F10xxx参考手册
154/754
参照200912 RM0008 Reference Manual 英文第10
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
DMA_CCR4
MEM2MEM
MINC
PINC
CIRC
DIR
TEIE
HTIE
TCIE
EN
复位值 000000000000000
DMA_CNDTR4
复位值 0000000000000000
DMA_CPAR4
复位值 00000000000000000000000000000000
DMA_CMAR4
复位值 00000000000000000000000000000000
054h
DMA_CCR5
MEM2MEM
MINC
PINC
CIRC
DIR
TEIE
HTIE
TCIE
EN
复位值 000000000000000
DMA_CNDTR5
复位值 0000000000000000
DMA_CPAR5
复位值 00000000000000000000000000000000
DMA_CMAR5
复位值 00000000000000000000000000000000
068h
DMA_CCR6
MEM2MEM
MINC
PINC
CIRC
DIR
TEIE
HTIE
TCIE
EN
复位值 000000000000000
DMA_CNDTR6
复位值 0000000000000000
DMA_CPAR6
复位值 00000000000000000000000000000000
DMA_CMAR6
复位值 00000000000000000000000000000000
07Ch
DMA_CCR7
MEM2MEM
MINC
PINC
CIRC
DIR
TEIE
HTIE
TCIE
EN
复位值 000000000000000
DMA_CNDTR7
复位值 0000000000000000
DMA_CPAR7
复位值 00000000000000000000000000000000
DMA_CMAR7
复位值 00000000000000000000000000000000
090h
078h MA[31:0]
保留
070h 保留 NDT[15:0]
074h PA[31:0]
保留
06Ch 保留
PL
[1:0]
MSIZE
[1:0]
PSIZE
[1:0]
060h PA[31:0]
064h MA[31:0]
PSIZE
[1:0]
05Ch 保留 NDT[15:0]
058h 保留
PL
[1:0]
MSIZE
[1:0]
044h
MA[31:0]
保留
保留
PL
[1:0]
MSIZE
[1:0]
PSIZE
[1:0]
NDT[15:0]
PSIZE
[1:0]
PA[31:0]
050h
保留
04Ch
080h 保留
PL
[1:0]
MSIZE
[1:0]
048h
08Ch MA[31:0]
保留
084h 保留 NDT[15:0]
088h PA[31:0]
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
11 模拟/数字转换(ADC)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
11.1 ADC介绍
12ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部
信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右
对齐方式存储在16位数据寄存器中。
模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。
ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。对于小容量、中容量和大容量产
品参见图8
155/754
,对于互联型产品参见图11
11.2 ADC主要特征
12位分辨率
转换结束、注入转换结束和发生模拟看门狗事件时产生中断
单次和连续转换模式
从通道0到通道n的自动扫描模式
自校准
带内嵌数据一致性的数据对齐
采样间隔可以按通道分别编程
规则转换和注入转换均有外部触发选项
间断模式
双重模式(2个或以上ADC的器件)
ADC转换时间:
STM32F103xx增强型产品:时钟为56MHz时为1μs(时钟为72MHz1.17μs)
STM32F101xx基本型产品:时钟为28MHz时为1μs(时钟为36MHz1.55μs)
STM32F102xxUSB型产品:时钟为48MHz时为1.2μs
STM32F105xxSTM32F107xx产品:时钟为56MHz时为1μs(时钟为72MHz1.17μs)
ADC供电要求:2.4V3.6V
ADC输入范围:VREF- VIN VREF+
规则通道转换期间有DMA请求产生。
下图是ADC模块的方框图。
注意:
如果有
VREF-
引脚
(
取决于封装
)
,必须和
VSSA
相连接
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
11.3 ADC功能描述
下图为一个ADC模块的框图,表62ADC引脚的说明。
24ADC框图
1ADC3的规则转换和注入转换触发与ADC1ADC2的不同。
2TIM8_CH4TIM8_TRGO及它们的重映射位只存在于大容量产品中。
156/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
62 ADC引脚
名称 信号类型 注解
ADC使用的高端/正极参考电压,2.4V VREF+ VDDA
VREF+ 输入,模拟参考正极
VDDA(1) 等效于VDD的模拟电源且:2.4V VDDA VDD(3.6V)
输入,模拟电源
VREF- ADC使用的低端/负极参考电压,VREF- = VSSA 输入,模拟参考负极
VSSA(1) 输入,模拟电源地 等效于VSS的模拟电源地
ADCx_IN[15:0] 模拟输入信号 16个模拟输入通道
1VDDAVSSA应该分别连接到VDDVSS
11.3.1 ADC开关控制
通过设置ADC_CR2寄存器的ADON位可给ADC上电。当第一次设置ADON位时,它将ADC从断
电状态下唤醒。
ADC上电延迟一段时间后(tSTAB),再次设置ADON位时开始进行转换。
通过清除ADON位可以停止转换,并将ADC置于断电模式。在这个模式中,ADC几乎不耗电(
几个μA)
11.3.2 ADC时钟
由时钟控制器提供的ADCCLK时钟和PCLK2(APB2时钟)同步。RCC控制器为ADC时钟提供一个
专用的可编程预分频器,详见小容量、中容量和大容量产品的复位和时钟控制(RCC)章节。
11.3.3 通道选择
16个多路通道。可以把转换组织成两组:规则组和注入组。在任意多个通道上以任意顺序进
行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道
2、通道0、通道2、通道2、通道15
规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。规
则组中转换的总数应写入ADC_SQR1寄存器的L[3:0]位中。
注入组由多达4个转换组成。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。注入
组里的转换总数目应写入ADC_JSQR寄存器的L[1:0]位中。
如果ADC_SQRxADC_JSQR寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉
冲将发送到ADC以转换新选择的组。
温度传感器/ VREFINT内部通道
温度传感器和通道ADC1_IN16相连接,内部参照电压VREFINTADC1_IN17相连接。可以按注入
或规则通道对这两个内部通道进行转换。
注意:
温度传感器和
VREFINT
只能出现在主
ADC1
中。
11.3.4 单次转换模式
单次转换模式下,ADC只执行一次转换。该模式既可通过设置ADC_CR2存器的ADON(
适用于规则通道)启动也可通过外部触发启动(适用于规则通道或注入通道),这时CONT位为0
一旦选择通道的转换完成:
如果一个规则通道被转换:
转换数据被储存在16ADC_DR寄存器中
EOC(转换结束)标志被设置
如果设置了EOCIE,则产生中断。
如果一个注入通道被转换:
转换数据被储存在16位的ADC_DRJ1寄存器中
JEOC(注入转换结束)标志被设置
如果设置了JEOCIE位,则产生中断。
157/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
然后ADC停止。
11.3.5 连续转换模式
在连续转换模式中,当前面ADC转换一结束马上就启动另一次转换。此模式可通过外部触发
动或通过设置ADC_CR2寄存器上的ADON位启动,此时CONT位是1
每个转换后:
如果一个规则通道被转换:
转换数据被储存在16位的ADC_DR寄存器中
EOC(转换结束)标志被设置
如果设置了EOCIE,则产生中断。
如果一个注入通道被转换:
转换数据被储存在16位的ADC_DRJ1寄存器中
JEOC(注入转换结束)标志被设置
如果设置了JEOCIE位,则产生中断。
11.3.6 时序图
如下图所示,ADC开始精确转换前需要一个稳定时间tSTAB。在开始ADC转换和14个时钟周期
后,EOC标志被设置,16ADC数据寄存器包含转换的结果。
25 时序图
11.3.7 模拟看门狗
如果被ADC转换的模拟电压低于低阀值或高于高阀值,AWD模拟看门狗状态位被设置。阀值位
ADC_HTRADC_LTR寄存器的最低12个有效位中。通过设置ADC_CR1寄存器的AWDIE
以允许产生相应中断。
阀值独立于由ADC_CR2寄存器上的ALIGN位选择的数据对齐模式。比较是在对齐之前完成的
(11.5)
158/754
通过配置ADC_CR1寄存器,模拟看门狗可以作用于1个或多个通道,如表63所示。
26 模拟看门狗警戒区
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
63 模拟看门狗通道选择
ADC_CR1寄存器控制位
模拟看门狗警戒的通道 AWDSGL AWDEN JAWDEN
任意值 0 0
所有注入通道 0 0 1
所有规则通道 0 1 0
所有注入和规则通道 0 1 1
单一的(1)注入通道 1 0 1
单一的(1)规则通道 1 1 0
单一的(1)注入或规则通道 1 1 1
(1) AWDCH[4:0]位选择
11.3.8 扫描模式
此模式用来扫描一组模拟通道。
扫描模式可通过设置ADC_CR1寄存器的SCAN位来选择。一旦这个位被设置,ADC扫描所有被
ADC_SQRX寄存器(对规则通道)ADC_JSQR(对注入通道)选中的所有通道。在每个组的每个
通道上执行单次转换。在每个转换结束时,同一组的下一个通道被自动转换。如果设置了CONT
位,转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。
如果设置了DMA位,在每次EOC后,DMA控制器把规则组通道的转换数据传输到SRAM中。而
注入通道转换的数据总是存储在ADC_JDRx寄存器中。
11.3.9 注入通道管理
触发注入
清除ADC_CR1寄存器的JAUTO位,并且设置SCAN位,即可使用触发注入功能。
1. 利用外部触发或通过设置ADC_CR2寄存器的ADON位,启动一组规则通道的转换。
2. 如果在规则通道转换期间产生一外部注入触发,当前转换被复位,注入通道序列被以单次
扫描方式进行转换。
3. 然后,恢复上次被中断的规则组通道转换。如果在注入转换期间产生一规则事件,注入转
换不会被中断,但是规则序列将在注入序列结束后被执行。图27是其定时图。
注:
当使用触发的注入转换时,必须保证触发事件的间隔长于注入序列。例如:序列长度为
28
ADC
时钟周期
(
2
个具有
1.5
个时钟间隔采样时间的转换
)
,触发之间最小的间隔必须是
29
ADC
时钟周期。
自动注入
如果设置了JAUTO位,在规则组通道之后,注入组通道被自动转换。这可以用来转换在
ADC_SQRxADC_JSQR寄存器中设置的多至20个转换序列。
在此模式里,必须禁止注入通道的外部触发。
如果除JAUTO位外还设置了CONT位,规则通道至注入通道的转换序列被连续执行。
对于ADC时钟预分频系数为48时,当从规则转换切换到注入序列或从注入转换切换到规则序
列时,会自动插入1ADC时钟间隔;当ADC时钟预分频系数为2时,则有2ADC时钟间隔的
延迟。
注意:
不可能同时使用自动注入和间断模式。
159/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
27 注入转换延时
(1) 最大延迟数值请参考STM32F101xxSTM32F103xx数据手册中有关电气特性部分。
11.3.10 间断模式
规则组
此模式通过设置ADC_CR1寄存器上DISCEN位激活。它可以用来执行一个短序列的n次转换
(n<=8),此转换是ADC_SQRx寄存器所选择的转换序列的一部分。数值nADC_CR1寄存器的
DISCNUM[2:0]位给出。
一个外部触发信号可以启动ADC_SQRx寄存器中描述的下一轮n次转换,直到此序列所有的转
换完成为止。总的序列长度由ADC_SQR1寄存器的L[3:0]定义。
举例:
n=3,被转换的通道 = 012367910
第一次触发:转换的序列为 012
第二次触发:转换的序列为 367
第三次触发:转换的序列为 910,并产生EOC事件
第四次触发:转换的序列 012
注意:
当以间断模式转换一个规则组时,转换序列结束后不自动从头开始。
当所有子组被转换完成,下一次触发启动第一个子组的转换。在上面的例子中,第四次触发重
新转换第一子组的通道
0
1
2
注入组
此模式通过设置ADC_CR1寄存器的JDISCEN位激活。在一个外部触发事件后,该模式按通道
顺序逐个转换ADC_JSQR寄存器中选择的序列。
一个外部触发信号可以启动ADC_JSQR寄存器选择的下一个通道序列的转换,直到序列中所有
的转换完成为止。总的序列长度由ADC_JSQR寄存器的JL[1:0]位定义。
例子:
n=1,被转换的通道 = 123
第一次触发:通道1被转换
第二次触发:通道2被转换
第三次触发:通道3被转换,并且产生EOCJEOC事件
第四次触发:通道1被转换
注意:
1
当完成所有注入通道转换,下个触发启动第
1
个注入通道的转换。在上述例子中,第四个
触发重新转换第
1
个注入通道
1
2
不能同时使用自动注入和间断模式。
160/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
3
必须避免同时为规则和注入组设置间断模式。间断模式只能作用于一组转换。
11.4 校准
ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。
校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换
中每个电容器上产生的误差。
通过设置ADC_CR2寄存器的CAL启动校准。一旦校准结束,CAL位被硬件复位,可以开始正
常转换。建议在上电时执行一次ADC校准。校准阶段结束后,校准码储存在ADC_DR中。
注意:
1
建议在每次上电后执行一次校准。
2
启动校准前,
ADC
必须处于关电状态
(ADON=’0’)
超过至少两个
ADC
时钟周期。
28 校准时序图
11.5 数据对齐
ADC_CR2寄存器中的ALIGN位选择转换后数据储存的对齐方式。数据可以左对齐或右对齐,如
29
161/754
和图30所示。
注入组通道转换的数据值已经减去了在ADC_JOFRx寄存器中定义的偏移量,因此结果可以是一
个负值。SEXT位是扩展的符号值。
对于规则组通道,不需减去偏移值,因此只有12个位有效。
29 数据右对齐
注入组
SEXT SEXT SEXT SEXT D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
规则组
0 0 0 0D11D10D9D8D7D6D5D4D3D2D1D0
30 数据左对齐
注入组
SEXT D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0
规则组
D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0
11.6 可编程的通道采样时间
ADC使用若干个ADC_CLK 周期对输入电压采样,采样周期数目可以通过ADC_SMPR1
ADC_SMPR2寄存器中的SMP[2:0]位更改。每个通道可以分别用不同的时间采样。
总转换时间如下计算:
T
CONV = 采样时间+ 12.5个周期
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
例如:
ADCCLK=14MHz,采样时间为1.5周期
T
CONV = 1.5 + 12.5 = 14周期 = 1μs
11.7 外部触发转换
转换可以由外部事件触发(例如定时器捕获,EXTI线)。如果设置了EXTTRIG控制位,则外部事
件就能够触发转换。EXTSEL[2:0]JEXTSEL2:0]控制位允许应用程序选择8个可能的事件中的
某一个,可以触发规则和注入组的采样。
注意:
当外部触发信号被选为
ADC
规则或注入转换时,只有它的上升沿可以启动转换。
64 ADC1ADC2用于规则通道的外部触发
EXTSEL[2:0]
触发源 类型
TIM1_CC1事件 000
TIM1_CC2事件 001
TIM1_CC3事件 010
162/754
TIM2_CC2事件 011
来自片上定时器的内部信号
TIM3_TRGO事件 100
TIM4_CC4事件 101
EXTI线11/TIM8_TRGO事件(1)(2) 外部引脚/来自片上定时器的内部信号 110
SWSTART 软件控制位 111
1TIM8_TRGO事件只存在于大容量产品
2.对于规则通道,选中EXTI线路11TIM8_TRGO作为外部触发事件,可以分别通过设置ADC1ADC2
ADC1_ETRGREG_REMAP位和ADC2_ETRGREG_REMAP位实现。
65 ADC1ADC2用于注入通道的外部触发
JEXTSEL[2:0]
触发源 连接类型
TIM1_TRGO事件 000
TIM1_CC4事件 001
TIM2_TRGO事件 010
TIM2_CC1事件 011
来自片上定时器的内部信号
TIM3_CC4事件 100
TIM4_TRGO事件 101
EXTI线15/TIM8_CC4事件(1)(2) 外部引脚/来自片上定时器的内部信号 110
JSWSTART 软件控制位 111
1TIM8_CC4事件只存在于大容量产品
2.对于注入通道,选中EXTI线路15TIM8_CC4作为外部触发事件,可以分别通过设置ADC1ADC2
ADC1_ETRGINJ_REMAP位和ADC2_ ETRGINJ_REMAP位实现。
66 ADC3用于规则通道的外部触发
EXTSEL[2:0]
触发源 连接类型
TIM3_CC1事件 000
TIM2_CC3事件 001
TIM1_CC3事件 010
TIM8_CC1事件 011
来自片上定时器的内部信号
TIM8_TRGO事件 100
TIM5_CC1事件 101
TIM5_CC3事件 110
SWSTART 软件控制位 111
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
67 ADC3用于注入通道的外部触发
EXTSEL[2:0]
触发源 连接类型
TIM1_TRGO事件 000
TIM1_CC4事件 001
TIM4_CC3事件 010
163/754
TIM8_CC2事件 011
来自片上定时器的内部信号
TIM8_CC4事件 100
TIM5_TRGO事件 101
TIM5_CC4事件 110
JSWSTART 软件控制位 111
软件触发事件可以通过对寄存器ADC_CR2SWSTARTJSWSTART位置’1’产生。
规则组的转换可以被注入触发打断。
11.8 DMA请求
因为规则通道转换的值储存在一个仅有的数据寄存器中,所以当转换多个规则通道时需要使用
DMA,这可以避免丢失已经存储在ADC_DR寄存器中的数据。
只有在规则通道的转换结束时才产生DMA求,并将转换的数据从ADC_DR寄存器传输到用户
指定的目的地址。
注:
只有
ADC1
ADC3
拥有
DMA
功能。由
ADC2
转化的数据可以通过双
ADC
模式,利用
ADC1
DMA
功能传输。
11.9 ADC模式
在有2个或以上ADC模块的产品中,可以使用双ADC模式(见图31ADC框图)
在双ADC模式里,根据ADC1_CR1寄存器中DUALMOD[2:0]位所选的模式,转换的启动可以是
ADC1主和ADC2从的交替触发或同步触发。
注意:
在双
ADC
模式里,当转换配置成由外部事件触发时,用户必须将其设置成仅触发主
ADC
,从
ADC
设置成软件触发,这样可以防止意外的触发从转换。但是,主和从
ADC
的外部触发必须同
时被激活。
共有6种可能的模式:
同步注入模式
同步规则模式
快速交叉模式
慢速交叉模式
交替触发模式
独立模式
还有可以用下列方式组合使用上面的模式:
同步注入模式 + 同步规则模式
同步规则模式 + 交替触发模式
同步注入模式 + 交叉模式
注意:
在双
ADC
模式里,为了在主数据寄存器上读取从转换数据,必须使能
DMA
位,即使不使用
DMA
传输规则通道数据。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
31ADC框图(1)
1.外部触发信号作用于ADC2,但在本图中没有显示。
2.在某些双ADC模式中,在完整的ADC1数据寄存器(ADC1_DR)中包含了ADC1ADC2的规则转换数据。
11.9.1 同步注入模式
此模式转换一个注入通道组。外部触发来自ADC1的注入组多路开关(ADC1_CR2寄存器的
JEXTSEL[2:0]选择),它同时给ADC2提供同步触发。
注意:
不要在
2
ADC
上转换相同的通道
(
两个
ADC
在同一个通道上的采样时间不能重叠
)
ADC1ADC2的转换结束时:
转换的数据存储在每个ADC接口的ADC_JDRx寄存器中。
164/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
当所有ADC1/ADC2注入通道都被转换时,产生JEOC中断(若任一ADC接口开放了中断)
注:
在同步模式中,必须转换具有相同时间长度的序列,或保证触发的间隔比
2
个序列中较长的序列
长,否则当较长序列的转换还未完成时,具有较短序列的
ADC
转换可能会被重启。
324个通道上的同步注入模式
11.9.2 同步规则模式
此模式在规则通道组上执行。外部触发来自ADC1的规则组多路开关(ADC1_CR2寄存器的
EXTSEL[2:0]选择)它同时给ADC2提供同步触发。
注意:
不要在
2
ADC
上转换相同的通道
((
两个
ADC
在同一个通道上的采样时间不能重叠
)
ADC1ADC2的转换结束时:
产生一个32DMA传输请求(如果设置了DMA)32位的ADC1_DR寄存器内容传输到
SRAM中,它上半个字包含ADC2的转换数据,低半个字包含ADC1的转换数据。
当所有ADC1/ADC2规则通道都被转换完时,产生EOC中断(若任一ADC接口开放了中断)
注:
在同步规则模式中,必须转换具有相同时间长度的序列,或保证触发的间隔比
2
个序列中较长的
序列长,否则当较长序列的转换还未完成时,具有较短序列的
ADC
转换可能会被重启。
3316个通道上的同步规则模式
11.9.3 快速交叉模式
此模式只适用于规则通道组(通常为一个通道)。外部触发来自ADC1的规则通道多路开关。外部
触发产生后:
ADC2立即启动并且
ADC1在延迟7ADC时钟周期后启动
如果同时设置了ADC1ADC2CONT位,所选的两个ADC规则通道将被连续地转换。
ADC1产生一个EOC中断后(EOCIE使能),产生一个32位的DMA传输请求(如果设置了DMA
)ADC1_DR寄存器的32位数据被传输到SRAMADC1_DR的上半个字包含ADC2转换数
据,低半个字包含ADC1的转换数据。
注意:
最大允许采样时间
<7
ADCCLK
周期,避免
ADC1
ADC2
转换相同通道时发生两个采样周期的
重叠。
165/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
341个通道上连续转换模式下的快速交叉模式
11.9.4 慢速交叉模式
此模式只适用于规则通道组(只能为一个通道)。外部触发来自ADC1的规则通道多路开关。外部
触发产生后:
ADC2立即启动并且
ADC1在延迟14ADC时钟周期后启动
在延迟第二次14ADC周期后ADC2再次启动,如此循环。
注意:
最大允许采样时间
<14
ADCCLK
周期,以避免和下个转换重叠。
ADC1产生一个EOC中断后(EOCIE使能),产生一个32位的DMA传输请求(如果设置了DMA
)ADC1_DR寄存器的32位数据被传输到SRAMADC1_DR的上半个字包含ADC2转换数
据,低半个字包含ADC1的转换数据。
28ADC时钟周期后自动启动新的ADC2转换。
在这个模式下不能设置CONT位,因为它将连续转换所选择的规则通道。
注意:
应用程序必须确保当使用交叉模式时,不能有注入通道的外部触发产生。
351个通道上的慢速交叉模式
11.9.5 交替触发模式
此模式只适用于注入通道组。外部触发源来自ADC1的注入通道多路开关。
当第一个触发产生时,ADC1上的所有注入组通道被转换。
当第二个触发到达时,ADC2上的所有注入组通道被转换。
如此循环……
如果允许产生JEOC中断,在所有ADC1注入组通道转换后产生一个JEOC中断。
如果允许产生JEOC中断,在所有ADC2注入组通道转换后产生一个JEOC中断。
当所有注入组通道都转换完后,如果又有另一个外部触发,交替触发处理从转换ADC1注入组通
道重新开始。
166/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
36 交替触发:每个ADC1的注入通道组
如果ADC1ADC2上同时使用了注入间断模式:
当第一个触发产生时,ADC1上的第一个注入通道被转换。
当第二个触发到达时,ADC2上的第一个注入通道被转换。
如此循环……
如果允许产生JEOC中断,在所有ADC1注入组通道转换后产生一个JEOC中断。
如果允许产生JEOC中断,在所有ADC2注入组通道转换后产生一个JEOC中断。
当所有注入组通道都转换完后,如果又有另一个外部触发,则重新开始交替触发过程。
37 交替触发:在间断模式下每个ADC上的4个注入通道
11.9.6 独立模式
此模式里,双ADC同步不工作,每个ADC接口独立工作。
11.9.7 混合的规则/注入同步模式
规则组同步转换可以被中断,以启动注入组的同步转换。
注:
在混合的规则
/
注入同步模式中,必须转换具有相同时间长度的序列,或保证触发的间隔比
2
个序
列中较长的序列长,否则当较长序列的转换还未完成时,具有较短序列的
ADC
转换可能会被重
启。
11.9.8 混合的同步规则+交替触发模式
38规则组同步转换可以被中断,以启动注入组交替触发转换。 显示了一个规则同步转换被交
替触发所中断。
注入交替转换在注入事件到达后立即启动。如果规则转换已经在运行,为了在注入转换后确保
同步,所有的ADC(主和从)的规则转换被停止,并在注入转换结束时同步恢复。
注:
在混合的同步规则
+
交替触发模式中,必须转换具有相同时间长度的序列,或保证触发的间隔比
2
个序列中较长的序列长,否则当较长序列的转换还未完成时,具有较短序列的
ADC
转换可能会
被重启。
167/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
38+规则同步
如果触发事件发生在一个中断了规则转换的注入转换期间,这个触发事件将被忽略。下图示出
了这种情况的操作(2个触发被忽略)
39 触发事件发生在注入转换期间
11.9.9 混合同步注入 + 交叉模式
一个注入事件可以中断一个交叉转换。这种情况下,交叉转换被中断,注入转换被启动,在注
入序列转换结束时,交叉转换被恢复。下图是这种情况的一个例子。
注:
ADC
时钟预分频系数设置为
4
时,交叉模式恢复后不会均匀地分配采样时间,采样间隔是
8
ADC
时钟周期与
6
ADC
时钟周期轮替,而不是均匀的
7
ADC
时钟周期。
40 交叉的单通道转换被注入序列CH11CH12中断
11.10 温度传感器
温度传感器可以用来测量器件周围的温度(TA)
温度传感器在内部和ADC1_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值
温度传感器模拟输入推荐采样时间是17.1μs
41是温度传感器的方框图。
当没有被使用时,传感器可以置于关电模式。
注意:
必须设置
TSVREFE
位激活内部通道:
ADC1_IN16(
温度传感器
)
ADC1_IN17(VREFINT)
的转换。
168/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
温度传感器输出电压随温度线性变化,由于生产过程的变化,温度变化曲线的偏移在不同芯片
上会有不同(最多相差45°C)
内部温度传感器更适合于检测温度的变化,而不是测量绝对的温度。如果需要测量精确的
度,应该使用一个外置的温度传感器。
41 温度传感器和VREFINT通道框图
读温度
为使用传感器:
1. 选择ADC1_IN16输入通道
2. 选择采样时间为17.1 μs
3. 设置ADC控制寄存器2(ADC_CR2)TSVREFE位,以唤醒关电模式下的温度传感器
4. 通过设置ADON位启动ADC转换(或用外部触发)
5. ADC数据寄存器上的VSENSE 数据结果
6. 利用下列公式得出温度
温度(°C) = {(V25 - VSENSE) / Avg_Slope} + 25
这里:
V25 = VSENSE25°C时的数值
Avg_Slope 温度与VSENSE曲线的平均斜率(单位为mV/ °C μV/ °C)
参考数据手册的电气特性章节中V25 Avg_Slope的实际值。
注意:
传感器从关电模式唤醒后到可以输出正确水平的
VSENSE
前,有一个建立时间。
ADC
在上电后也
有一个建立时间,因此为了缩短延时,应该同时设置
ADON
TSVREFE
位。
11.11 ADC中断
规则和注入组转换结束时能产生中断,当模拟看门狗状态位被设置时也能产生中断。它们都有
独立的中断使能位。
注:
ADC1
ADC2
的中断映射在同一个中断向量上,而
ADC3
的中断有自己的中断向量。
ADC_SR寄存器中有2个其他标志,但是它们没有相关联的中断:
JSTRT(注入组通道转换的启动)
STRT(规则组通道转换的启动)
169/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
68 ADC中断
中断事件 事件标志 使能控制位
规则组转换结束 EOC EOCIE
注入组转换结束 JEOC JEOCIE
设置了模拟看门狗状态位 AWD AWDIE
11.12 ADC寄存器
170/754
寄存器描述中使用的一些缩略语请参考1.1节。
必须以字(32)的方式操作这些外设寄存器。
11.12.1 ADC状态寄存器(ADC_SR)
地址偏移:0x00
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
STRT JSTRT JEOC EOC AWD
rc w0 rc w0 rc w0 rc w0 rc w0
保留
保留
31:15 保留。必须保持为0
STRT:规则通道开始位 (Regular channel Start flag) 4
该位由硬件在规则通道转换开始时设置,由软件清除。
0:规则通道转换未开始;
1:规则通道转换已开始。
JSTRT:注入通道开始位 (Injected channel Start flag) 3
该位由硬件在注入通道组转换开始时设置,由软件清除。
0:注入通道组转换未开始;
1:注入通道组转换已开始。
JEOC:注入通道转换结束位 (Injected channel end of conversion) 2
该位由硬件在所有注入通道组转换结束时设置,由软件清除
0:转换未完成;
1:转换完成。
EOC:转换结束位 (End of conversion) 1
该位由硬件在(规则或注入)通道组转换结束时设置,由软件清除或由读取ADC_DR时清除
0:转换未完成;
1:转换完成。
AWD:模拟看门狗标志位 (Analog watchdog flag) 0
该位由硬件在转换的电压值超出了ADC_LTRADC_HTR寄存器定义的范围时设置,由软件清
0:没有发生模拟看门狗事件;
1:发生模拟看门狗事件。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
11.12.2 ADC控制寄存器 1(ADC_CR1)
地址偏移:0x04
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
AWDEN JAWD
EN
rw rw rw rw rw rw
保留 保留 DUALMOD[3:0]
1514131211109876543210
JDISC
EN
DISC
EN
JAUTO
AWD
SGL SCAN JEOC
IE
AWDIE EOCIE
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
DISCNUM[2:0]
AWDCH[4:0]
31:24 保留。必须保持为0
AWDEN:在规则通道上开启模拟看门狗 (Analog watchdog enable on regular channels) 23
该位由软件设置和清除。
0:在规则通道上禁用模拟看门狗;
1:在规则通道上使用模拟看门狗。
JAWDEN:在注入通道上开启模拟看门狗 (Analog watchdog enable on injected channels) 22
该位由软件设置和清除。
0:在注入通道上禁用模拟看门狗;
1:在注入通道上使用模拟看门狗。
21:20 保留。必须保持为0
DUALMOD[3:0]:双模式选择 (Dual mode selection) 19:16
软件使用这些位选择操作模式。
0000:独立模式
0001:混合的同步规则+注入同步模式
0010:混合的同步规则+交替触发模式
0011:混合同步注入+快速交叉模式
0100:混合同步注入+慢速交叉模式
0101:注入同步模式
0110:规则同步模式
0111:快速交叉模式
1000:慢速交叉模式
1001:交替触发模式
注: ADC2ADC3中这些位为保留位
在双模式中,改变通道的配置会产生一个重新开始的条件,这将导致同步丢失。建议在进行任
何配置改变前关闭双模式。
DISCNUM[2:0]:间断模式通道计数 (Discontinuous mode channel count) 15:13
软件通过这些位定义在间断模式下,收到外部触发后转换规则通道的数目
0001个通道
0012个通道
……
1118个通道
JDISCEN:在注入通道上的间断模式 (Discontinuous mode on injected channels) 12
该位由软件设置和清除,用于开启或关闭注入通道组上的间断模式
0:注入通道组上禁用间断模式;
1:注入通道组上使用间断模式。
171/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
DISCEN:在规则通道上的间断模式 (Discontinuous mode on regular channels) 11
该位由软件设置和清除,用于开启或关闭规则通道组上的间断模式
0:规则通道组上禁用间断模式;
1:规则通道组上使用间断模式。
JAUTO:自动的注入通道组转换 (Automatic Injected Group conversion) 10
该位由软件设置和清除,用于开启或关闭规则通道组转换结束后自动的注入通道组转换
0:关闭自动的注入通道组转换;
1:开启自动的注入通道组转换。
AWDSGL:扫描模式中在一个单一的通道上使用看门 (Enable the watchdog on a single
channel in scan mode)
9
该位由软件设置和清除,用于开启或关闭由AWDCH[4:0]位指定的通道上的模拟看门狗功能
0:在所有的通道上使用模拟看门狗;
1:在单一通道上使用模拟看门狗。
SCAN:扫描模式 (Scan mode) 8
该位由软件设置和清除,用于开启或关闭扫描模式。在扫描模式中,转换由ADC_SQRx
ADC_JSQRx寄存器选中的通道。
0:关闭扫描模式;
1:使用扫描模式。
注:如果分别设置了EOCIEJEOCIE位,只在最后一个通道转换完毕后才会产生EOC
JEOC中断。
JEOCIE:允许产生注入通道转换结束中断 (Interrupt enable for injected channels) 7
该位由软件设置和清除,用于禁止或允许所有注入通道转换结束后产生中断。
0:禁止JEOC中断;
1:允许JEOC中断。当硬件设置JEOC位时产生中断。
AWDIE:允许产生模拟看门狗中断 (Analog watchdog interrupt enable) 6
该位由软件设置和清除,用于禁止或允许模拟看门狗产生中断。在扫描模式下,如果看门狗检
测到超范围的数值时,只有在设置了该位时扫描才会中止。
0:禁止模拟看门狗中断;
1:允许模拟看门狗中断。
EOCIE:允许产生EOC中断 (Interrupt enable for EOC) 5
该位由软件设置和清除,用于禁止或允许转换结束后产生中断。
0:禁止EOC中断;
1:允许EOC中断。当硬件设置EOC位时产生中断。
AWDCH[4:0]:模拟看门狗通道选择位 (Analog watchdog channel select bits) 4:0
这些位由软件设置和清除,用于选择模拟看门狗保护的输入通道。
00000ADC模拟输入通道0
00001ADC模拟输入通道1
……
01111ADC模拟输入通道15
10000ADC模拟输入通道16
10001ADC模拟输入通道17
保留所有其他数值。
注:ADC1的模拟输入通道16和通道17在芯片内部分别连到了温度传感器和VREFINT
ADC2的模拟输入通道16和通道17在芯片内部连到了VSS
ADC3模拟输入通道914151617Vss相连。
172/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
11.12.3 ADC控制寄存器 2(ADC_CR2)
地址偏移:0x08
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
TS
VREFE
SW
START
JSW
START
EXT
TRIG 保留
rw rw rw rw rw rw rw
保留 EXTSEL[2:0]
1514131211109876543210
JEXT
TRIG
ALIGN
DMA RST
CAL CAL CONT ADON
rw rw rw rw rw rw rw rw rw rw
JEXTSEL[2:0] 保留 保留
31:24 保留。必须保持为0
TSVREFE:温度传感器和VREFINT使能 (Temperature sensor and VREFINT enable) 23
该位由软件设置和清除,用于开启或禁止温度传感器和VREFINT通道。在多于1ADC的器件
中,该位仅出现在ADC1中。
0:禁止温度传感器和VREFINT
1:启用温度传感器和VREFINT
SWSTART:开始转换规则通道 (Start conversion of regular channels) 22
由软件设置该位以启动转换,转换开始后硬件马上清除此位。如果在EXTSEL[2:0]位中选择了
SWSTART为触发事件,该位用于启动一组规则通道的转换,
0:复位状态;
1:开始转换规则通道。
JSWSTART:开始转换注入通道 (Start conversion of injected channels) 21
由软件设置该位以启动转换,软件可清除此位或在转换开始后硬件马上清除此位。如果在
JEXTSEL[2:0]位中选择了JSWSTART为触发事件,该位用于启动一组注入通道的转换,
0:复位状态;
1:开始转换注入通道。
EXTTRIG:规则通道的外部触发转换模式 (External trigger conversion mode for regular
channels)
20
该位由软件设置和清除,用于开启或禁止可以启动规则通道组转换的外部触发事件。
0:不用外部事件启动转换;
1:使用外部事件启动转换。
EXTSEL[2:0]:选择启动规则通道组转换的外部事件 (External event select for regular group) 19:17
这些位选择用于启动规则通道组转换的外部事件
ADC1ADC2的触发配置如下
000:定时器1CC1事件 100:定时器3TRGO事件
001:定时器1CC2事件 101:定时器4CC4事件
110EXTI线11/ TIM8_TRGO事件,仅大容量产
品具有TIM8_TRGO功能
010:定时器1CC3事件
011:定时器2CC2事件 111SWSTART
ADC3的触发配置如下
000:定时器3CC1事件 100:定时器8TRGO事件
001:定时器2CC3事件 101:定时器5CC1事件
010:定时器1CC3事件 110:定时器5CC3事件
011:定时器8CC1事件 111SWSTART
16 保留。必须保持为0
173/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
JEXTTRIG:注入通道的外部触发转换模式 (External trigger conversion mode for injected
channels)
15
该位由软件设置和清除,用于开启或禁止可以启动注入通道组转换的外部触发事件。
0:不用外部事件启动转换;
1:使用外部事件启动转换。
JEXTSEL[2:0]:选择启动注入通道组转换的外部事件 (External event select for injected
group)
14:12
这些位选择用于启动注入通道组转换的外部事件。
ADC1ADC2的触发配置如下
000:定时器1TRGO事件 100:定时器3CC4事件
001:定时器1CC4事件 101:定时器4TRGO事件
110EXTI线15/TIM8_CC4事件(仅大容量产品具
TIM8_CC4)
010:定时器2TRGO事件
011:定时器2CC1事件 111JSWSTART
ADC3的触发配置如下
000:定时器1TRGO事件 100:定时器8CC4事件
001:定时器1CC4事件 101:定时器5TRGO事件
010:定时器4CC3事件 110:定时器5CC4事件
011:定时器8CC2事件 111JSWSTART
ALIGN:数据对齐 (Data alignment) 11
174/754
该位由软件设置和清除。参考图29和图30
0:右对齐;
1:左对齐。
10:9 保留。必须保持为0
DMA:直接存储器访问模式 (Direct memory access mode) 8
该位由软件设置和清除。详见DMA控制器章节。
0:不使用DMA模式;
1:使用DMA模式。
注:只有ADC1ADC3能产生DMA请求。
7:4 保留。必须保持为0
RSTCAL:复位校准 (Reset calibration) 3
该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。
0:校准寄存器已初始化;
1:初始化校准寄存器。
注:如果正在进行转换时设置RSTCAL,清除校准寄存器需要额外的周期。
CALA/D校准 (A/D Calibration) 2
该位由软件设置以开始校准,并在校准结束时由硬件清除。
0:校准完成;
1:开始校准。
CONT:连续转换 (Continuous conversion) 1
该位由软件设置和清除。如果设置了此位,则转换将连续进行直到该位被清除。
0:单次转换模式;
1:连续转换模式。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
175/754
0 ADON:开/A/D转换器 (A/D converter ON / OFF)
该位由软件设置和清除。当该位为’0’时,写入’1’将把ADC从断电模式下唤醒。
当该位为’1’时,写入’1’将启动转换。应用程序需注意,在转换器上电至转换开始有一个延迟
tSTAB,参见图25
0:关闭ADC转换/校准,并进入断电模式;
1:开启ADC并启动转换。
注:如果在这个寄存器中与ADON一起还有其他位被改变,则转换不被触发。这是为了防止触
发错误的转换。
11.12.4 ADC采样时间寄存器 1(ADC_SMPR1)
地址偏移:0x0C
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
SMP
15 0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
SMP14[2:0]
SMP17[2:0]保留 SMP15[2:1]
SMP13[2:0] SMP12[2:0] SMP11[2:0] SMP10[2:0]
SMP16[2:0]
31:24 保留。必须保持为0
SMPx[2:0]:选择通道x的采样时间 (Channel x Sample time selection) 23:0
这些位用于独立地选择每个通道的采样时间。在采样周期中通道选择位必须保持不变。
0001.5周期 10041.5周期
0017.5周期 10155.5周期
01013.5周期 11071.5周期
01128.5周期 111239.5周期
注:ADC1的模拟输入通道16和通道17在芯片内部分别连到了温度传感器和VREFINT
ADC2的模拟输入通道16和通道17在芯片内部连到了Vss
ADC3模拟输入通道14151617Vss相连
11.12.5 ADC采样时间寄存器 2(ADC_SMPR2)
地址偏移:0x10
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
SMP
50
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
SMP4[2:0]
SMP8[2:0] SMP7[2:0]SMP9[2:0]保留 SMP5[2:1]
SMP3[2:0] SMP2[2:0] SMP1[2:0] SMP0[2:0]
SMP6[2:0]
31:30 保留。必须保持为0
SMPx[2:0]:选择通道x的采样时间 (Channel x Sample time selection) 29:0
这些位用于独立地选择每个通道的采样时间。在采样周期中通道选择位必须保持不变。
0001.5周期 10041.5周期
0017.5周期 10155.5周期
01013.5周期 11071.5周期
01128.5周期 111239.5周期
注:ADC3模拟输入通道9与Vss相连
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
11.12.6 ADC注入通道数据偏移寄存器x (ADC_JOFRx)(x=1..4)
地址偏移:0x14-0x20
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
保留
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw
保留 JOFFSETx[11:0]
31:12 保留。必须保持为0
JOFFSETx[11:0]:注入通道x的数据偏移 (Data offset for injected channel x) 11:0
当转换注入通道时,这些位定义了用于从原始转换数据中减去的数值。转换的结果可以在
ADC_JDRx寄存器中读出。
11.12.7 ADC看门狗高阀值寄存器(ADC_HTR)
地址偏移:0x24
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw
保留
保留 HT[11:0]
31:12 保留。必须保持为0
HT[11:0]:模拟看门狗高阀值 (Analog watchdog high threshold) 11:0
这些位定义了模拟看门狗的阀值高限。
11.12.8 ADC看门狗低阀值寄存器(ADC_LRT)
地址偏移:0x28
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw
保留
保留 LT[11:0]
31:12 保留。必须保持为0
LT[11:0]:模拟看门狗低阀值 (Analog watchdog low threshold) 11:0
这些位定义了模拟看门狗的阀值低限。
176/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
11.12.9 ADC规则序列寄存器 1(ADC_SQR1)
地址偏移:0x2C
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw
保留 L[3:0] SQ16[4:1]
1514131211109876543210
SQ16
_0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
SQ15[4:0] SQ14[4:0] SQ13[4:0]
31:24 保留。必须保持为0
L[3:0]:规则通道序列长度 (Regular channel sequence length) 23:20
这些位由软件定义在规则通道转换序列中的通道数目。
00001个转换
00012个转换
……
111116个转换
SQ16[4:0]:规则序列中的第16个转换 (16th conversion in regular sequence) 19:15
这些位由软件定义转换序列中的第16个转换通道的编号(0~17)
SQ15[4:0]:规则序列中的第15个转换 (15th conversion in regular sequence) 14:10
SQ14[4:0]:规则序列中的第14个转换 (14th conversion in regular sequence) 9:5
SQ13[4:0]:规则序列中的第13个转换 (13th conversion in regular sequence) 4:0
11.12.10 ADC规则序列寄存器 2(ADC_SQR2)
地址偏移:0x30
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
SQ10
_0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
SQ10[4:1]
SQ9[4:0] SQ8[4:0] SQ7[4:0]
保留 SQ12[4:0] SQ11[4:0]
31:30 保留。必须保持为0
SQ12[4:0]:规则序列中的第12个转换 (12th conversion in regular sequence) 29:25
这些位由软件定义转换序列中的第12个转换通道的编号(0~17)
SQ11[4:0]:规则序列中的第11个转换 (11th conversion in regular sequence) 24:20
SQ10[4:0]:规则序列中的第10个转换 (10th conversion in regular sequence) 19:15
SQ9[4:0]:规则序列中的第9个转换 (9th conversion in regular sequence) 14:10
SQ8[4:0]:规则序列中的第8个转换 (82th conversion in regular sequence) 9:5
SQ7[4:0]:规则序列中的第7个转换 (7th conversion in regular sequence) 4:0
177/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
11.12.11 ADC规则序列寄存器 3(ADC_SQR3)
地址偏移:0x34
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SQ4[4:1]保留 SQ6[4:0] SQ5[4:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
SQ4_0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
SQ3[4:0] SQ2[4:0] SQ1[4:0]
31:30 保留。必须保持为0
SQ6[4:0]:规则序列中的第6个转换 (6th conversion in regular sequence) 29:25
这些位由软件定义转换序列中的第6个转换通道的编号(0~17)
SQ5[4:0]:规则序列中的第5个转换 (5th conversion in regular sequence) 24:20
SQ4[4:0]:规则序列中的第4个转换 (4th conversion in regular sequence) 19:15
SQ3[4:0]:规则序列中的第3个转换 (3rd conversion in regular sequence) 14:10
SQ2[4:0]:规则序列中的第2个转换 (2nd conversion in regular sequence) 9:5
SQ1[4:0]:规则序列中的第1个转换 (1st conversion in regular sequence) 4:0
11.12.12 ADC注入序列寄存器(ADC_JSQR)
地址偏移:0x38
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw
1514131211109876543210
JSQ4_0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
JSQ4[4:1]
JSQ3[4:0] JSQ2[4:0] JSQ1[4:0]
JL[3:0]保留
31:22 保留。必须保持为0
JL[1:0]:注入通道序列长度 (Injected sequence length) 21:20
这些位由软件定义在规则通道转换序列中的通道数目。
001个转换
012个转换
103个转换
114个转换
JSQ4[4:0]:注入序列中的第4个转换 (4th conversion in injected sequence) 19:15
这些位由软件定义转换序列中的第4个转换通道的编号(0~17)
注:不同于规则转换序列,如果JL[1:0]的长度小于4,则转换的序列顺序是从(4-JL)开始。例
如:ADC_JSQR[21:0] = 10 00011 00011 00111 00010,意味着扫描转换将按下列通道顺序转
换:733,而不是273
JSQ3[4:0]:注入序列中的第3个转换 (3rd conversion in injected sequence) 14:10
JSQ2[4:0]:注入序列中的第2个转换 (2nd conversion in injected sequence) 9:5
JSQ1[4:0]:注入序列中的第1个转换 (1st conversion in injected sequence) 4:0
178/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
11.12.13 ADC 注入数据寄存器x (ADC_JDRx) (x= 1..4)
地址偏移:0x3C – 0x48
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
保留
1514131211109876543210
rrrrrrrrrrrrrrrr
JDATA[15:0]
31:16 保留。必须保持为0
JDATA[15:0]:注入转换的数据 (Injected data) 21:20
179/754
这些位为只读,包含了注入通道的转换结果。数据是左对齐或右对齐,如图29和图30所示。
11.12.14 ADC规则数据寄存器(ADC_DR)
地址偏移:0x4C
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rrrrrrrrrrrrrrrr
1514131211109876543210
rrrrrrrrrrrrrrrr
ADC2DATA[15:0]
DATA[15:0]
ADC2DATA[15:0]ADC2转换的数据 (ADC2 data) 31:16
- ADC1中:双模式下,这些位包含了ADC2转换的规则通道数据。见11.9:双ADC模式
- ADC2ADC3中:不使用这些位。
DATA[15:0]规则转换的数据 (Regular data) 15:0
这些位为只读,包含了规则通道的转换结果。数据是左对齐或右对齐,如图29和图30所示。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
11.12.15 ADC寄存器地址映像
下表列出了所有的ADC寄存器。
69 ADC寄存器映像和复位值
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
ADC_SR
STRT
JSTRT
JEOC
EOC
AWD
复位值
00000
ADC_CR1
AWDEN
JAWDEN
JDISCEN
DISCEN
JAUTO
AWDSGL
SCAN
JEOCIE
AWDIE
EOCIE
复位值
00 00000000000000000000
ADC_CR2
TSVREFE
SWSTART
JSWSTART
EXTTRIG
JEXTTRIG
ALIGN
DMA
RSTCAL
CAL
CONT
ADON
复位值
0000000 00000 0 0000
ADC_SMPR1
复位值
00000000000000000000000000000000
ADC_SMPR2
复位值
00000000000000000000000000000000
ADC_JOFR1
复位值
000000000000
ADC_JOFR2
复位值
000000000000
ADC_JOFR3
复位值
000000000000
ADC_JOFR4
复位值
000000000000
ADC_HTR
复位值
000000000000
ADC_LTR
复位值
000000000000
ADC_SQR1
复位值
000000000000000000000000
ADC_SQR2
复位值
000000000000000000000000000000
30h
AWDCH[4:0]
保留 保留
保留
规则通道序列SQx_x位
采样时间位SMPx_x
采样时间位SMPx_x
保留
EXTSEL
[2:0]
保留
保留
保留
保留
DUALMOD
[3:0]
DISC
NUM
[2:0]
00h
04h
14h
10h
0Ch
08h
JEXTSEL
[2:0]
保留
JOFFSET1[11:0]
1Ch
保留
JOFFSET2[11:0]
保留
JOFFSET3[11:0]
18h
保留
JOFFSET4[11:0]
1Ch
保留
HT[11:0]
20h
20h
保留
LT[11:0]
保留
L[3:0] 规则通道序列SQx_x位
2Ch
ADC_SQR3
复位值
000000000000000000000000000000
ADC_JSQR
复位值
0000000000000000000000
34h
38h
保留
规则通道序列SQx_x位
注入通道序列JSQx_x
JL
[1:0]
保留
180/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
模拟/数字转换(ADC) STM32F10xxx参考手册
181/754
参照200912 RM0008 Reference Manual 英文第10
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
ADC_JDR1
复位值
0000000000000000
ADC_JDR2
复位值
0000000000000000
ADC_JDR3
复位值
0000000000000000
ADC_JDR4
复位值
0000000000000000
ADC_DR
JDATA[15:0]
规则 DATA[15:0]
JDATA[15:0]
JDATA[15:0]
JDATA[15:0]
3Ch 保留
40h 保留
44h 保留
4Ch
48h 保留
ADC2DATA[15:0]
复位值
00000000000000000000000000000000
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
关于寄存器的起始地址,请参见表1
数字/模拟转换(DAC) STM32F10xxx参考手册
12 数字/模拟转换(DAC)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
本章内容只适用于大容量的STM32F101xxSTM32F103xx产品。
12.1 DAC简介
数字/模拟转换模块(DAC)12位数字输入,电压输出的数字/模拟转换器。DAC可以配置为8
12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐
或右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道
可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输
入参考电压VREF+以获得更精确的转换结果。
12.2 DAC主要特征
2DAC转换器:每个转换器对应1个输出通道
8位或者12位单调输出
12位模式下数据左对齐或者右对齐
同步更新功能
噪声波形生成
三角波形生成
DAC通道同时或者分别转换
每个通道都有DMA功能
外部触发转换
输入参考电压VREF+
182/754
单个DAC通道的框图如下图,表70给出了引脚的说明。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
42 DAC 通道模块框图
70 DAC 引脚
名称 型号类型 注释
DAC使用的高端/正极参考电压,
VREF+ 输入,正模拟参考电压 2.4V VREF+ VDDA (3.3V)
VDDA 输入,模拟电源 模拟电源
VSSA 输入,模拟电源地 模拟电源的地线
DAC_OUTx 模拟输出信号 DAC通道x的模拟输出
注意:
一旦使能
DACx
通道,相应的
GPIO
引脚
(PA4
或者
PA5)
就会自动与
DAC
的模拟输出相连
(DAC_OUTx)
。为了避免寄生的干扰和额外的功耗,引脚
PA4
或者
PA5
在之前应当设置成模拟输
(AIN)
12.3 DAC功能描述
12.3.1 使能DAC通道
DAC_CR寄存器的ENx位置’1’可打开对DAC通道x的供电。经过一段启动时间tWAKEUP
DAC通道x即被使能。
注意:
ENx
位只会使能
DAC
通道
x
的模拟部分,即便该位被置
’0’
DAC
通道
x
的数字部分仍然工作。
183/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
12.3.2 使能DAC输出缓存
DAC集成了2个输出缓存,可以用来减少输出阻抗,无需外部运放即可直接驱动外部负载。每个
DAC通道输出缓存可以通过设置DAC_CR寄存器的BOFFx位来使能或者关闭。
12.3.3 DAC数据格式
根据选择的配置模式,数据按照下文所述写入指定的寄存器:
DAC通道x,有3种情况:
8位数据右对齐:用户须将数据写入寄存器DAC_DHR8Rx[7:0](实际是存入寄存器
DHRx[11:4])
12位数据左对齐:用户须将数据写入寄存器DAC_DHR12Lx[15:4](实际是存入寄存器
DHRx[11:0])
12位数据右对齐:用户须将数据写入寄存器DAC_DHR12Rx[11:0](实际是存入寄存器
DHRx[11:0])
根据对DAC_DHRyyyx寄存器的操作,经过相应的移位后,写入的数据被转存到DHRx寄存器中
(DHRx是内部的数据保存寄存器x)。随后,DHRx寄存器的内容或被自动地传送到DORx寄存
器,或通过软件触发或外部事件触发被传送到DORx寄存器。
43DAC 通道模式的数据寄存器
DAC通道,有3种情况:
8位数据右对齐:用户须将DAC通道1数据写入寄存器DAC_DHR8RD[7:0](实际是存入
寄存器DHR1[11:4]),将DAC通道2数据写入寄存器DAC_DHR8RD[15:8](实际是存入
寄存器DHR2[11:4])
12位数据左对齐:用户须将DAC通道1数据写入寄存器DAC_DHR12LD[15:4](实际是存
入寄存器DHR1[11:0]),将DAC通道2数据写入寄存器DAC_DHR12LD[31:20](实际是
存入寄存器DHR2[11:0])
12位数据右对齐:用户须将DAC通道1数据写入寄存器DAC_DHR12RD[11:0](实际是存
入寄存器DHR1[11:0]),将DAC通道2数据写入寄存器DAC_DHR12RD[27:16](实际是
存入寄存器DHR2[11:0])
根据对DAC_DHRyyyD寄存器的操作,经过相应的移位后,写入的数据被转存到DHR1DHR2
寄存器中(DHR1DHR2是内部的数据保存寄存器x)。随后,DHR1DHR2的内容或被自动地
传送到DORx寄存器,或通过软件触发或外部事件触发被传送到DORx寄存器。
44DAC 通道模式的数据寄存器
184/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
12.3.4 DAC转换
不能直接对寄存器DAC_DORx写入数据,任何输出到DAC通道x的数据都必须写入DAC_DHRx
寄存器(数据实际写入DAC_DHR8RxDAC_DHR12LxDAC_DHR12RxDAC_DHR8RD
DAC_DHR12LD、或者DAC_DHR12RD寄存器)
如果没有选中硬件触发(寄存器DAC_CR1TENx位置’0’),存入寄存器DAC_DHRx的数据会在
一个APB1时钟周期后自动传至寄存器DAC_DORx。如果选中硬件触发(寄存器DAC_CR1
TENx位置’1’),数据传输在触发发生以后3APB1时钟周期后完成。
一旦数据从DAC_DHRx寄存器装入DAC_DORx寄存器,在经过时间tSETTLING之后,输出即有
效,这段时间的长短依电源电压和模拟输出负载的不同会有所变化。
45 TEN=0 触发失能时转换的时间框图
12.3.5 DAC输出电压
数字输入经过DAC被线性地转换为模拟电压输出,其范围为0VREF+
任一DAC通道引脚上的输出电压满足下面的关系:
DAC输出 = VREF x (DOR / 4095)
12.3.6 选择DAC触发
如果TENx位被置1DAC转换可以由某外部事件触发(定时器计数器、外部中断线)。配置控制位
TSELx[2:0]可以选择8个触发事件之一触发DAC转换。
71 外部触发
触发源 类型 TSELx[2:0]
定时器6 TRGO事件 000
互联型产品为定时器3 TRGO事件 001
或大容量产品为定时器8 TRGO事件
定时器7 TRGO事件 010
来自片上定时器的内部信号
定时器5 TRGO事件 011
定时器2 TRGO事件 100
定时器4 TRGO事件 101
EXTI线路9 外部引脚 110
SWTRIG(软件触发) 软件控制位 111
每次DAC接口侦测到来自选中的定时器TRGO输出,或者外部中断线9的上升沿,最近存放在寄
存器DAC_DHRx中的数据会被传送到寄存器DAC_DORx中。在3APB1时钟周期后,寄存器
DAC_DORx更新为新值。
如果选择软件触发,一旦SWTRIG位置’1’,转换即开始。在数据从DAC_DHRx寄存器传送
DAC_DORx寄存器后,SWTRIG位由硬件自动清’0’
185/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
注意:
1.
不能在
ENx
’1’
时改变
TSELx[2:0]
位。
2.
如果选择软件触发,数据从寄存器
DAC_DHRx
传送到寄存器
DAC_DORx
只需要一个
APB1
钟周期。
12.3.7 DMA请求
任一DAC通道都具有DMA功能。2DMA通道可分别用于2DAC通道的DMA请求。
如果DMAENx位置’1’,一旦有外部触发(而不是软件触发)发生,则产生一个DMA请求,然后
DAC_DHRx寄存器的数据被传送到DAC_DORx寄存器。
在双DAC模式下,如果2个通道的DMAENx位都为’1’,则会产生2DMA请求。如果实际只需要
一个DMA传输,则应只选择其中一个DMAENx位置’1’。这样,程序可以在只使用一个DMA
求,一个DMA通道的情况下,处理工作在双DAC模式的2DAC通道。
DACDMA请求不会累计,因此如果第2个外部触发发生在响应第1个外部触发之前,则不能处
理第2DMA请求,也不会报告错误。
12.3.8 噪声生成
可以利用线性反馈移位寄存器(Linear Feedback Shift Register LFSR)产生幅度变化的伪噪声。
设置WAVE[1:0]位为’01’选择DAC噪声生成功能。寄存器LFSR的预装入值为0xAAA。按照特定
算法,在每次触发事件后3APB1时钟周期之后更新该寄存器的值。
46 DAC LFSR 寄存器算法
设置DAC_CR寄存器的MAMPx[3:0]位可以屏蔽部分或者全部LFSR的数据,这样的得到的LSFR
值与DAC_DHRx的数值相加,去掉溢出位之后即被写入DAC_DORx存器。
如果寄存器LFSR值为0x000,则会注入’1’(防锁定机制)
WAVEx[1:0]位置’0’可以复位LFSR波形的生成算法。
47LFSR 波形生成的 DAC 转换(使能软件触发)
注意:
为了产生噪声,必须使能
DAC
触发,即设
DAC_CR
寄存器的
TENx
位为
’1’
186/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
12.3.9 三角波生成
可以在DC或者缓慢变化的信号上加上一个小幅度的三角波。设置WAVEx[1:0]位为’10’选择DAC
的三角波生成功能。设DAC_CR寄存器的MAMPx[3:0]位来选择三角波的幅度。内部的三角波
计数器每次触发事件之后3APB1时钟周期后累加1。计数器的值与DAC_DHRx寄存器的数值
相加并丢弃溢出位后写入DAC_DORx寄存器。在传入DAC_DORx寄存器的数值小于MAMP[3:0]
位定义的最大幅度时,三角波计数器逐步累加。一旦达到设置的最大幅度,则计数器开始
减,达到0后再开始累加,周而复始。
WAVEx[1:0]位置’0’可以复位三角波的生成。
48 DAC 三角波生成
49 带三角生成的 DAC 转换(使能软件触发)
注意:
1.
为了产生三角波,必须使能
DAC
触发,即设
DAC_CR
寄存器的
TENx
位为
’1’
2. MAMP[3:0]
位必须在使能
DAC
之前设置,否则其值不能修改。
12.4 DAC通道转换
在需要2DAC同时工作的情况下,为了更有效地利用总线带宽,DAC集成了3个供双DAC模式
使用的寄存器:DHR8RDDHR12RDDHR12LD,只需要访问一个寄存器即可完成同时驱动
2DAC通道的操作。
对于双DAC通道转换和这些专用寄存器,共有11种转换模式可用。这些转换模式在只使用一个
DAC通道的情况下,仍然可通过独立的DHRx寄存器操作。
所有模式详述于以下章节。
12.4.1 不使用波形发生器的独立触发
按照下列顺序设置DAC工作在此转换模式:
分别设置2DAC通道的触发使能位TEN1TEN2’1’
通过设置TSEL1[2:0] TSEL2[2:0]位为不同值,分别配置2DAC通道的不同触发源;
将双DAC通道转换数据装入所需的DHR寄存器(DHR12RDDHR12LD DHR8RD)
187/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
当发生DAC通道1触发事件时,(延迟3APB1时钟周期后)寄存器DHR1 的值传入寄存器
DAC_DOR1
当发生DAC通道2触发事件时,(延迟3APB1时钟周期后)寄存器DHR2 的值传入寄存器
DAC_DOR2
12.4.2 使用相同LFSR的独立触发
按照下列顺序设置DAC工作在此转换模式:
分别设置2DAC通道的触发使能位TEN1TEN2’1’
通过设置TSEL1[2:0] TSEL2[2:0]位为不同值,分别配置2DAC通道的不同触发源;
设置2DAC通道的WAVEx[1:0]位为”01”,并设置MAMPx[3:0]为相同的LFSR屏蔽值;
将双DAC通道转换数据装入所需的DHR寄存器(DHR12RDDHR12LD DHR8RD)
当发生DAC通道1触发事件时,具有相同屏蔽的LFSR1计数器值与DHR1寄存器数值相加,(延迟
3APB1时钟周期后)结果传入寄存器DAC_DOR1,然后更新LFSR1计数器。
当发生DAC通道2触发事件时,具有相同屏蔽的LFSR2计数器值与DHR2寄存器数值相加,(延迟
3APB1时钟周期后)结果传入寄存器DAC_DOR2,然后更新LFSR2计数器。
12.4.3 使用不同LFSR的独立触发
按照下列顺序设置DAC工作在此转换模式:
分别设置2DAC通道的触发使能位TEN1TEN2’1’
通过设置TSEL1[2:0] TSEL2[2:0]位为不同值,分别配置2DAC通道的不同触发源;
设置2DAC通道的WAVEx[1:0]位为”01”,并设MAMPx[3:0]为不同的LFSR屏蔽值;
将双DAC通道转换数据装入所需的DHR寄存器(DHR12RDDHR12LD 或者DHR8RD)
当发生DAC通道1触发事件时,按照MAMP1[3:0]所设屏蔽的LFSR1计数器值与DHR1寄存器数
值相加,(延迟3APB1时钟周期后)结果传入寄存器DAC_DOR1,然后更新LFSR1计数器。
当发生DAC通道2触发事件时,按照MAMP2[3:0]所设屏蔽的LFSR2计数器值与DHR2寄存器数
值相加,(延迟3APB1时钟周期后)结果传入寄存器DAC_DOR2,然后更新LFSR2计数器。
12.4.4 产生相同三角波的独立触发
按照下列顺序设置DAC工作在此转换模式:
分别设置2DAC通道的触发使能位TEN1TEN2’1’
通过设置TSEL1[2:0] TSEL2[2:0]位为不同值,分别配置2DAC通道的不同触发源;
设置2DAC通道的WAVEx[1:0]位为”1x”,并设MAMPx[3:0]为相同的三角波幅值;
将双DAC通道转换数据装入所需的DHR寄存器(DHR12RDDHR12LD DHR8RD)
当发生DAC通道1触发事件时,相同的三角波幅值加上DHR1寄存器的值,(延迟3APB1时钟周
期后)结果传入寄存器DAC_DOR1,然后更新DAC通道1三角波计数器。
当发生DAC通道2触发事件时,相同的三角波幅值加上DHR2寄存器的值,(延迟3APB1时钟周
期后)结果传入寄存器DAC_DOR2,然后更新DAC通道2三角波计数器。
12.4.5 产生不同三角波的独立触发
按照下列顺序设置DAC工作在此转换模式:
分别设置2DAC通道的触发使能位TEN1TEN2’1’
通过设置TSEL1[2:0] TSEL2[2:0]位为不同值,分别配置2DAC通道的不同触发源;
设置2DAC通道的WAVEx[1:0]位为’1x’,并设MAMPx[3:0]为不同的三角波幅值。
将双DAC通道转换数据装入所需的DHR寄存器(DHR12RDDHR12LD DHR8RD)
188/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
当发生DAC通道1触发事件时,MAMP1[3:0]所设的三角波幅值加上DHR1寄存器数值,(延迟3
APB1时钟周期后)结果传入寄存器DAC_DOR1,然后更新DAC通道1三角波计数器。
当发生DAC通道2触发事件时,MAMP2[3:0]所设的三角波幅值加上DHR2寄存器数值,(延迟3
APB1时钟周期后)结果传入寄存器DAC_DOR2,然后更新DAC通道2三角波计数器。
12.4.6 同时软件启动
按照下列过程设置DAC工作在此转换模式:
将双DAC通道转换数据装入所需的DHR寄存器(DHR12RDDHR12LD DHR8RD)
在此配置下,一个APB1时钟周期后,DHR1DHR2寄存器的数值即被分别传入DAC_DOR1
DAC_DOR2寄存器。
12.4.7 不使用波形发生器的同时触发
按照下列顺序设置DAC工作在此转换模式:
分别设置2DAC通道的触发使能位TEN1TEN2’1’
通过设置TSEL1[2:0] TSEL2[2:0]位为相同值,分别配置2DAC通道使用相同触发源;
将双DAC通道转换数据装入所需的DHR寄存器(DHR12RDDHR12LD DHR8RD)
当发生触发事件时,(延迟3APB1 时钟周期后)DHR1 DHR2 寄存器的数值分别传入
DAC_DOR1DAC_DOR2寄存器。
12.4.8 使用相同LFSR的同时触发
按照下列顺序设置DAC工作在此转换模式:
分别设置2DAC通道的触发使能位TEN1TEN2’1’
通过设置TSEL1[2:0] TSEL2[2:0]位为相同值,分别配置2DAC通道使用相同触发源;
设置2DAC通道的WAVEx[1:0]位为”01”,并设MAMPx[3:0]为相同的LFSR屏蔽值;
将双DAC通道转换数据装入所需的DHR寄存器(DHR12RDDHR12LD DHR8RD)
当发生触发事件时,MAMP1[3:0]所设屏蔽的LFSR1计数器值与DHR1寄存器的数值相加,(延迟
3APB1时钟周期后)结果传入DAC_DOR1寄存器,然后更新LFSR1计数器。
同样,MAMP1[3:0]所设屏蔽的LFSR2计数器值与DHR2寄存器的数值相加,(延迟3APB1时钟
周期后)结果传入寄存器DAC_DOR2,然后更新LFSR2计数器。
12.4.9 使用不同LFSR的同时触发
按照下列顺序设置DAC工作在此转换模式:
分别设置2DAC通道的触发使能位TEN1TEN2’1’
通过设置TSEL1[2:0] TSEL2[2:0]位为相同值,分别配置2DAC通道使用相同触发源;
设置2DAC通道的WAVEx[1:0]位为’01’,并设MAMPx[3:0]为不同的LFSR屏蔽值;
将双DAC通道转换数据装入所需的DHR寄存器(DHR12RDDHR12LD DHR8RD)
当发生触发事件时,具有相同屏蔽的LFSR1计数器值与DHR1寄存器数值相加,(延迟3APB1
时钟周期后)结果传入寄存器DAC_DOR1,然后更新LFSR1计数器。
同时,具有相同屏蔽的LFSR2计数器值与DHR2寄存器数值相加,(延迟3APB1时钟周期后)
果传入寄存器DAC_DOR2,然后更新LFSR2计数器。
12.4.10 使用相同三角波发生器的同时触发
按照下列顺序设置DAC工作在此转换模式:
分别设置2DAC通道的触发使能位TEN1TEN2’1’
189/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
通过设置TSEL1[2:0] TSEL2[2:0]位为相同值,分别配置2DAC通道使用相同触发源。
设置2DAC通道的WAVEx[1:0]位为’1x’,并设MAMPx[3:0]为相同的三角波幅值。
将双DAC通道转换数据装入所需的DHR寄存器(DHR12RDDHR12LD DHR8RD)
当发生触发事件时,相同的三角波幅值与DHR1寄存器数值相加,(延迟3APB1时钟周期后)
果传入寄存器DAC_DOR1,然后更新LFSR1计数器。
同时,相同的三角波幅值与DHR2寄存器数值相加,(延迟3APB1时钟周期后)结果传入寄存
DAC_DOR2,然后更新LFSR2计数器。
12.4.11 使用不同三角波发生器的同时触发
按照下列顺序设置DAC工作在此转换模式:
分别设置2DAC通道的触发使能位TEN1TEN2’1’
通过设置TSEL1[2:0] TSEL2[2:0]位为相同值,分别配置2DAC通道使用相同触发源。
设置2DAC通道的WAVEx[1:0]位为’1x’,并设MAMPx[3:0]为不同的三角波幅值。
将双DAC通道转换数据装入所需的DHR寄存器(DHR12RDDHR12LD DHR8RD)
当发生触发事件时,MAMP1[3:0]所设的三角波幅值与DHR1寄存器数值相加,(延迟3APB1
钟周期后)结果传入寄存器DAC_DOR1,然后更新LFSR1计数器。
同时,MAMP2[3:0]所设的三角波幅值与DHR2寄存器数值相加(延迟3APB1时钟周期后)
果传入寄存器DAC_DOR2,然后更新LFSR2计数器。
190/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
12.5 DAC寄存器
必须以字(32)的方式操作这些外设寄存器。
12.5.1 DAC控制寄存器(DAC_CR)
地址偏移:0x00
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DMAEN2 TEN2 BOFF2 EN2
rw rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
DMAEN1 TEN1 BOFF1 EN1
rw rw rw rw rw rw rw rw rw rw rw rw rw
MAMP13:0] WAVE1[2:0] TSEL1[2:0]
保留 MAMP2[3:0] WAVE2[2:0] TSEL2[2:0]
保留
31:29 保留。
DMAEN2DAC通道2 DMA使能 (DAC channel2 DMA enable) 28
该位由软件设置和清除。
0:关闭DAC通道2 DMA模式;
1:使能DAC通道2 DMA模式。
MAMP2[3:0]DAC通道2屏蔽/幅值选择器 (DAC channel2 mask/amplitude selector) 27:24
由软件设置这些位,用来在噪声生成模式下选择屏蔽位,在三角波生成模式下选择波形的幅
值。
0000:不屏蔽LSFR0 / 三角波幅值等于1
0001:不屏蔽LSFR[1:0] / 三角波幅值等于3
0010:不屏蔽LSFR[2:0] / 三角波幅值等于7
0011:不屏蔽LSFR[3:0] / 三角波幅值等于15
0100:不屏蔽LSFR[4:0] / 三角波幅值等于31
0101:不屏蔽LSFR[5:0] / 三角波幅值等于63
0110:不屏蔽LSFR[6:0] / 三角波幅值等于127
0111:不屏蔽LSFR[7:0] / 三角波幅值等于255
1000:不屏蔽LSFR[8:0] / 三角波幅值等于511
1001:不屏蔽LSFR[9:0] / 三角波幅值等于1023
1010:不屏蔽LSFR[10:0] / 三角波幅值等于2047
1011:不屏蔽LSFR[11:0] / 三角波幅值等于4095
WAVE2[1:0]DAC通道2噪声/三角波生成使能 (DAC channel2 noise/triangle wave generation
enable)
23:22
2位由软件设置和清除。
00:关闭波形发生器;
10:使能噪声波形发生器;
1x:使能三角波发生器。
191/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
TSEL2[2:0]DAC通道2触发选择 (DAC channel2 trigger selection) 21:19
3位用于选择DAC通道2的外部触发事件。
000TIM6 TRGO事件;
001:对于互联型产品是TIM3 TRGO事件,对于大容量产品是TIM8 TRGO事件;
010TIM7 TRGO事件;
011TIM5 TRGO事件;
100TIM2 TRGO事件;
101TIM4 TRGO事件;
110:外部中断线9
111:软件触发。
注意:该3位只能在TEN2 = 1(DAC通道2触发使能)时设置。
TEN2DAC通道2触发使能 (DAC channel2 trigger enable) 18
该位由软件设置和清除,用来使能/关闭DAC通道2的触发。
0:关闭DAC 通道2触发,写入DAC_DHRx 寄存器的数据在1APB1 时钟周期后传入
DAC_DOR2寄存器;
1:使能DAC 通道2触发,写入DAC_DHRx 寄存器的数据在3APB1 时钟周期后传入
DAC_DOR2寄存器。
注意:如果选择软件触发,写入寄存器DAC_DHRx的数据只需要1APB1时钟周期就可以传入
寄存器DAC_DOR2
BOFF2:关闭DAC通道2输出缓存 (DAC channel2 output buffer disable) 17
该位由软件设置和清除,用来使能/关闭DAC通道2的输出缓存。
0:使能DAC通道2输出缓存;
1:关闭DAC通道2输出缓存。
EN2DAC通道2使能 (DAC channel2 enable) 16
该位由软件设置和清除,用来使能/关闭DAC通道2
0:关闭DAC通道2
1:使能DAC通道2
15:13 保留。
DMAEN1DAC通道1 DMA使能 (DAC channel1 DMA enable) 12
该位由软件设置和清除。
0:关闭DAC通道1 DMA模式;
1:使能DAC通道1 DMA模式。
MAMP1[3:0]DAC通道1屏蔽/幅值选择器 (DAC channel1 mask/amplitude selector) 11:8
由软件设置这些位,用来在噪声生成模式下选择屏蔽位,在三角波生成模式下选择波形的幅
值。
0000:不屏蔽LSFR0 / 三角波幅值等于1
0001:不屏蔽LSFR[1:0] / 三角波幅值等于3
0010:不屏蔽LSFR[2:0] / 三角波幅值等于7
0011:不屏蔽LSFR[3:0] / 三角波幅值等于15
0100:不屏蔽LSFR[4:0] / 三角波幅值等于31
0101:不屏蔽LSFR[5:0] / 三角波幅值等于63
0110:不屏蔽LSFR[6:0] / 三角波幅值等于127
0111:不屏蔽LSFR[7:0] / 三角波幅值等于255
1000:不屏蔽LSFR[8:0] / 三角波幅值等于511
1001:不屏蔽LSFR[9:0] / 三角波幅值等于1023
1010:不屏蔽LSFR[10:0] / 三角波幅值等于2047
1011:不屏蔽LSFR[11:0] / 三角波幅值等于4095
192/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
WAVE1[1:0]DAC通道1噪声/三角波生成使能 (DAC channel1 noise/triangle wave generation
enable)
7:6
2位由软件设置和清除。
00:关闭波形生成;
10:使能噪声波形发生器;
1x:使能三角波发生器。
TSEL1[2:0]DAC通道1触发选择 (DAC channel1 trigger selection) 5:3
该位用于选择DAC通道1的外部触发事件。
000TIM6 TRGO事件;
001:对于互联型产品是TIM3 TRGO事件,对于大容量产品是TIM8 TRGO事件;
010TIM7 TRGO事件;
011TIM5 TRGO事件;
100TIM2 TRGO事件;
101TIM4 TRGO事件;
110:外部中断线9
111:软件触发。
注意:该位只能在TEN1= 1(DAC通道1触发使能)时设置。
TEN1DAC通道1触发使能 (DAC channel1 trigger enable) 2
该位由软件设置和清除,用来使能/关闭DAC通道1的触发。
0:关闭DAC通道1触发,写入寄存器DAC_DHRx的数据在1APB1时钟周期后传入寄存器
DAC_DOR1
1:使能DAC通道1触发,写入寄存器DAC_DHRx的数据在3APB1时钟周期后传入寄存器
DAC_DOR1
注意:如果选择软件触发,写入寄存器DAC_DHRx的数据只需要1APB1时钟周期就可以传入
寄存器DAC_DOR1
BOFF1:关闭DAC通道1输出缓存 (DAC channel1 output buffer disable) 1
该位由软件设置和清除,用来使能/关闭DAC通道1的输出缓存。
0:使能DAC通道1输出缓存;
1:关闭DAC通道1输出缓存。
EN1DAC通道1使能 (DAC channel1 enable) 0
该位由软件设置和清除,用来使能/失能DAC通道1
0:关闭DAC通道1
1:使能DAC通道1
12.5.2 DAC软件触发寄存器(DAC_SWTRIGR)
地址偏移:0x04
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
SW
TRIG2
SW
TRIG1
ww
保留
保留
31:2 保留。
SWTRIG2DAC通道2软件触发 (DAC channel2 software trigger) 1
该位由软件设置和清除,用来使能/关闭软件触发。
0:关闭DAC通道2软件触发;
1:使能DAC通道2软件触发。
注意:一旦寄存器DAC_DHR2的数据传入寄存器DAC_DOR2(1APB1时钟周期后)该位由
硬件置’0’
193/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
SWTRIG1DAC通道1软件触发 (DAC channel1 software trigger) 0
该位由软件设置和清除,用来使能/关闭软件触发。
0:关闭DAC通道1软件触发;
1:使能DAC通道1软件触发。
注意:一旦寄存器DAC_DHR1的数据传入寄存器DAC_DOR1(1APB1时钟周期后)该位由
硬件置’0’
12.5.3 DAC通道 112 位右对齐数据保持寄存器(DAC_DHR12R1)
地址偏移:0x08
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw
DACC1DHR[11:0]
保留
保留
31:12 保留。
DACC1DHR[11:0]DAC通道112位右对齐数据 (DAC channel1 12-bit right-aligned data) 11:0
该位由软件写入,表示DAC通道112位数据。
12.5.4 DAC通道 112 位左对齐数据保持寄存器(DAC_DHR12L1)
地址偏移:0x0C
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw
保留
保留
DACC1DHR[11:0]
31:16 保留。
DACC1DHR[11:0]DAC通道112位左对齐数据 (DAC channel1 12-bit left-aligned data) 15:4
该位由软件写入,表示DAC通道1的的12位数据.
3:0 保留。
12.5.5 DAC通道 18位右对齐数据保持寄存器(DAC_DHR8R1)
地址偏移:0x10
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw
DACC1DHR[7:0]
保留
保留
194/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
31:18 保留。
DACC1DHR[7:0]DAC通道18位右对齐数据 (DAC channel1 8-bit right-aligned data) 7:0
该位由软件写入,表示DAC通道1的的8位数据。
12.5.6 DAC通道 212 位右对齐数据保持寄存器(DAC_DHR12R2)
地址偏移:0x14
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw
DACC2DHR[11:0]
保留
保留
31:12 保留。
DACC2DHR[11:0]DAC通道212位右对齐数据 (DAC channel2 12-bit right-aligned data) 11:0
该位由软件写入,表示DAC通道212位数据。
12.5.7 DAC通道 212 位左对齐数据保持寄存器(DAC_DHR12L2)
地址偏移:0x18
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw
保留
保留
DACC2DHR[11:0]
31:16 保留。
DAC2DHR[11:0]DAC通道212位左对齐数据 (DAC channel2 12-bit left-aligned data) 15:4
该位由软件写入,表示DAC通道2的的12位数据。
3:0 保留。
12.5.8 DAC通道 28位右对齐数据保持寄存器(DAC_DHR8R2)
地址偏移:0x1C
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw
DACC2DHR[7:0]
保留
保留
31:18 保留。
DACC2DHR[7:0]DAC通道28位右对齐数据 (DAC channel2 8-bit right-aligned data) 7:0
该位由软件写入,表示DAC通道2的的8位数据。
195/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
12.5.9 DAC12 位右对齐数据保持寄存器(DAC_DHR12RD)
地址偏移:0x20
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw
保留 DACC1DHR[11:0]
保留 DACC2DHR[11:0]
31:28 保留。
DACC2DHR[11:0]DAC通道212位右对齐数据 (DAC channel2 12-bit right-aligned data) 27:16
该位由软件写入,表示DAC通道212位数据。
15:12 保留。
DACC1DHR[11:0]DAC通道112位右对齐数据 (DAC channel1 12-bit right-aligned data) 11:0
该位由软件写入,表示DAC通道212位数据。
12.5.10 DAC12 位左对齐数据保持寄存器(DAC_DHR12LD)
地址偏移:0x24
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw
DACC1DHR[11:0] 保留
DACC2DHR[11:0] 保留
DACC2DHR[11:0]DAC通道212位左对齐数据 (DAC channel2 12-bit left-aligned data) 31:20
该位由软件写入,表示DAC通道212位数据。
19:16 保留。
DACC1DHR[11:0]DAC通道112位左对齐数据 (DAC channel1 12-bit left-aligned data) 15:4
该位由软件写入,表示DAC通道112位数据。
3:0 保留。
12.5.11 DAC8位右对齐数据保持寄存器(DAC_DHR8RD)
地址偏移:0x28
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
DACC1DHR[7:0]
保留
DACC2DHR[7:0]
31:16 保留。
196/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
DACC2DHR[7:0]DAC通道28位右对齐数据 (DAC channel2 8-bit right-aligned data) 15:8
该位由软件写入,表示DAC通道2的的8位数据。
DACC1DHR[7:0]DAC通道18位右对齐数据 (DAC channel1 8-bit right-aligned data) 7:0
该位由软件写入,表示DAC通道1的的8位数据。
12.5.12 DAC通道 1数据输出寄存器(DAC_DOR1)
地址偏移:0x2C
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw
DACC1DOR[11:0]
保留
保留
31:12 保留。
DACC1DOR[11:0]DAC通道1 输出数据 (DAC channel1 data output) 11:0
该位由软件写入,表示DAC通道1的输出数据。
12.5.13 DAC通道 2数据输出寄存器(DAC_DOR2)
地址偏移:0x30
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw
DACC2DOR[11:0]
保留
保留
31:12 保留。
DACC2DOR[11:0]DAC通道2 输出数据 (DAC channel2 data output) 11:0
该位由软件写入,表示DAC通道2的输出数据。
197/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
数字/模拟转换(DAC) STM32F10xxx参考手册
12.5.14 DAC寄存器映像
下表列出了所有DAC寄存器。
72 DAC 寄存器映像
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
DAC_CR
DMAEN2
TEN2
BOFF2
EN2
DMAEN1
TEN1
BOFF1
EN1
复位值
0000000000000 0000000000000
DAC_SWTRIGR
SWTRIG2
SWTRIG1
复位值
00
DAC_DHR12R1
复位值
000000000000
DAC_DHR12L1
复位值
000000000000
DAC_DHR8R1
复位值
00000000
DAC_DHR12R2
复位值
000000000000
DAC_DHR12L2
复位值
000000000000
DAC_DHR8R2
复位值
00000000
DAC_DHR12RD
复位值
000000000000 000000000000
DAC_DHR12LD
复位值
000000000000 000000000000
DAC_DHR8RD
复位值
0000000000000000
DAC_DOR1
复位值
000000000000
DAC_DOR2
复位值
000000000000
0x2C
0x30
保留
DACC2DOR[11:0]
保留
0x28
保留
DACC2DHR[7:0] DACC1DHR[7:0]
保留
保留
MAMP1
[3:0]
WAVE1[1:0]
TSEL1[2:0]
保留
MAMP2
[3:0]
WAVE2[1:0]
TSEL2[2:0]
0x24
0x20
0x1C
0x18
0x14
0x10
保留
DACC1DHR[7:0]
保留
保留
DACC2DHR[11:0]
保留
DACC1DHR[11:0]
保留
DACC1DHR[11:0]
0x00
0x0C
0x08
0x04
保留
DACC2DHR[11:0]
保留 保留
DACC2DHR[11:0] DACC1DHR[11:0]
保留
保留
DACC2DHR[7:0]
DACC1DHR[11:0]DACC2DHR[11:0]
保留
保留
DACC1DOR[11:0]
198/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
关于寄存器的起始地址,请参见表1
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
13 高级控制定时器(TIM1TIM8)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
小容量、中容量产品和STM32F105xx/STM32F107xx的互联型产品,包含一个高级控制定时器
(TIM1),而大容量产品的STM32F103xx包含有二个高级控制定时器(TIM1TIM8)
13.1 TIM1TIM8简介
高级控制定时器(TIM1TIM8)由一个16位的自动装载计数器组成,它由一个可编程的预分频器
驱动。
它适合多种用途,包含测量输入信号的脉冲宽(输入捕获),或者产生输出波形(输出比较、
PWM、嵌入死区时间的互补PWM)
使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几
个毫秒的调节。
高级控制定时器(TIM1TIM8)和通用定时器(TIMx)是完全独立的,它们不共享任何资源。它们
可以同步操作,具体描述参看13.3.20节。
13.2 TIM1TIM8主要特性
TIM1TIM8定时器的功能包括:
16位向上、向下、向上/下自动装载计数器
16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为165535之间的任意
数值
多达4个独立通道:
输入捕获
输出比较
PWM生成(边缘或中间对齐模式)
单脉冲模式输出
死区时间可编程的互补输出
使用外部信号控制定时器和定时器互联的同步电路
允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器
刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态
如下事件发生时产生中断/DMA
更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
输入捕获
输出比较
刹车信号输入
支持针对定位的增量(正交)编码器和霍尔传感器电路
触发输入作为外部时钟或者按周期的电流管理
199/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
50 高级控制定时器框图
注:
根据控制位的设定,在
U(
更新
)
事件时传送预加载寄存器的内容至工作寄存器
事件
中断和
DMA
输出
13.3 TIM1TIM8功能描述
13.3.1 时基单元
可编程高级控制定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。这个计数
器可以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。
计数器、自动装载寄存器和预分频器寄存器可以由软件读写,即使计数器还在运行读写仍然有
效。
时基单元包含:
计数器寄存器(TIMx_CNT)
预分频器寄存器 (TIMx_PSC)
自动装载寄存器 (TIMx_ARR)
重复次数寄存器 (TIMx_RCR)
200/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
自动装载寄存器是预先装载的,写或读自动重装载寄存器将访问预装载寄存器。根据在
TIMx_CR1寄存器中的自动装载预装载使能位(ARPE)的设置,预装载寄存器的内容被立即或
每次的更新事件UEV时传送到影子寄存器。当计数器达到溢出条(向下计数时的下溢条)并当
TIMx_CR1寄存器中的UDIS位等于0时,产生更新事件。更新事件也可以由软件产生。随后会详
细描述每一种配置下更新事件的产生。
计数器由预分频器的时钟输出CK_CNT驱动,仅当设置了计数器TIMx_CR1寄存器中的计数器使
能位(CEN)时,CK_CNT才有效。(更多有关使能计数器的细节,请参见控制器的从模式描述)
注意,在设置了TIMx_CR寄存器的CEN位的一个时钟周期后,计数器开始计数。
预分频器描述
预分频器可以将计数器的时钟频率按165536之间的任意值分频。它是基于一个(TIMx_PSC
寄存器中的)16位寄存器控制的16位计数器。因为这个控制寄存器带有缓冲器,它能够在运行时
被改变。新的预分频器的参数在下一次更新事件到来时被采用。
51
201/754
和图52给出了在预分频器运行时,更改计数器参数的例子。
51 当预分频器的参数从1变到2时,计数器的时序图
52 当预分频器的参数从1变到4时,计数器的时序图
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
13.3.2 计数器模式
向上计数模式
在向上计数模式中,计数器从0计数到自动加载(TIMx_ARR计数器的内容),然后重新从0开始
计数并且产生一个计数器溢出事件。
如果使用了重复计数器功能,在向上计数达到设置的重复计数次数(TIMx_RCR)时,产生更新
(UEV);否则每次计数器溢出时才产生更新事件。
TIMx_EGR寄存器中(通过软件方式或者使用从模式控制器)设置UG位也同样可以产生一个更
新事件。
设置TIMx_CR1寄存器中的UDIS位,可以禁止更新事件;这样可以避免在向预装载寄存器中写
入新值时更新影子寄存器。在UDIS位被清’0’之前,将不产生更新事件。但是在应该产生更新事
件时,计数器仍会被清’0’,同时预分频器的计数也被请0(但预分频器的数值不变)。此外,如
设置了TIMx_CR1寄存器中的URS(选择更新请求),设置UG位将产生一个更新事件UEV,但
硬件不设置UIF标志(即不产生中断或DMA请求)。这是为了避免在捕获模式下清除计数器时,同
时产生更新和捕获中断。
当发生一个更新事件时,所有的寄存器都被更新,硬件同时(依据URS)设置更新标志位
(TIMx_SR寄存器中的UIF)
重复计数器被重新加载为TIMx_RCR寄存器的内容。
自动装载影子寄存器被重新置入预装载寄存器的值(TIMx_ARR)
预分频器的缓冲区被置入预装载寄存器的值(TIMx_PSC寄存器的内容)
下图给出一些例子,当TIMx_ARR=0x36时计数器在不同时钟频率下的动作。
53 计数器时序图,内部时钟分频因子为1
54 计数器时序图,内部时钟分频因子为2
202/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
55 计数器时序图,内部时钟分频因子为4
56 计数器时序图,内部时钟分频因子为N
57 计数器时序图,当ARPE=0时的更新事件(TIMx_ARR没有预装入)
203/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
58 计数器时序图,当ARPE=1时的更新事件(预装入了TIMx_ARR)
向下计数模式
在向下模式中,计数器从自动装入的值(TIMx_ARR计数器的值)开始向下计数到0,然后从自动
装入的值重新开始并且产生一个计数器向下溢出事件。
如果使用了重复计数器,当向下计数重复了重复计数寄存器(TIMx_RCR)中设定的次数后,将
生更新事件(UEV),否则每次计数器下溢时才产生更新事件。
TIMx_EGR寄存器中(通过软件方式或者使用从模式控制器)设置UG位,也同样可以产生一个
更新事件。
设置TIMx_CR1寄存器的UDIS位可以禁止UEV件。这样可以避免向预装载寄存器中写入新值
时更新影子寄存器。因此UDIS位被清为0之前不会产生更新事件。然而,计数器仍会从当前自
动加载值重新开始计数,并且预分频器的计数器重新从0开始(但预分频系数不变)
此外,如果设置了TIMx_CR1寄存器中的URS(选择更新请求) ,设置UG位将产生一个更新事
UEV但不设置UIF标志(因此不产生中断和DMA请求)这是为了避免在发生捕获事件并清除计
数器时,同时产生更新和捕获中断。
当发生更新事件时,所有的寄存器都被更新,并且(根据URS位的设置)更新标志位(TIMx_SR
存器中的UIF)也被设置。
重复计数器被重置为TIMx_RCR寄存器中的内容
预分频器的缓存器被加载为预装载的值(TIMx_PSC寄存器的值)
当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)。注:自动装载在计
数器重载入之前被更新,因此下一个周期将是预期的值。
以下是一些当TIMx_ARR=0x36时,计数器在不同时钟频率下的操作例子。
204/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
59 计数器时序图,内部时钟分频因子为1
60 计数器时序图,内部时钟分频因子为2
61 计数器时序图,内部时钟分频因子为4
205/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
62 计数器时序图,内部时钟分频因子为N
63 计数器时序图,当没有使用重复计数器时的更新事件
中央对齐模式(向上/向下计数)
在中央对齐模式,计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)1,产生一个计数器
溢出事件,然后向下计数到1并且产生一个计数器下溢事件;然后再从0开始重新计数。
在此模式下,不能写入TIMx_CR1中的DIR方向位。它由硬件更新并指示当前的计数方向。
可以在每次计数上溢和每次计数下溢时产生更新事件;也可以通过(软件或者使用从模式控制)
设置TIMx_EGR寄存器中UG位产生更新事件。然后,计数器重新从0开始计数,预分频器也
重新从0开始计数。
设置TIMx_CR1寄存器中的UDIS位可以禁止UEV事件。这样可以避免在向预装载寄存器中写入
新值时更新影子寄存器。因此UDIS位被清为0之前不会产生更新事件。然而,计数器仍会根据
当前自动重加载的值,继续向上或向下计数。
此外,如果设置了TIMx_CR1寄存器中的URS(选择更新请求) ,设置UG位将产生一个更新事
UEV但不设置UIF标志(因此不产生中断和DMA请求)这是为了避免在发生捕获事件并清除计
数器时,同时产生更新和捕获中断。
当发生更新事件时,所有的寄存器都被更新,并且(根据URS位的设置)更新标志位(TIMx_SR
存器中的UIF)也被设置。
重复计数器被重置为TIMx_RCR寄存器中的内容
预分频器的缓存器被加载为预装载(TIMx_PSC寄存器)的值。
206/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)。注:如果因为计数
器溢出而产生更新,自动重装载将在计数器重载入之前被更新,因此下一个周期将是预期
的值(计数器被装载为新的值)
以下是一些计数器在不同时钟频率下的操作的例子:
64 计数器时序图,内部时钟分频因子为1TIMx_ARR=0x6
1.这里使用了中心对齐模式1(详见13.4.1)
65 计数器时序图,内部时钟分频因子为2
66 计数器时序图,内部时钟分频因子为4TIMx_ARR=0x36
207/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
67 计数器时序图,内部时钟分频因子为N
68 计数器时序图,ARPE=1时的更新事件(计数器下溢)
208/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
69 计数器时序图,ARPE=1时的更新事件(计数器溢出)
13.3.3 重复计数器
13.3.1节“时基单元”解释了计数器上溢/下溢时更新事件(UEV)是如何产生的,然而事实上它只
能在重复计数达到0的时候产生。这个特性对产生PWM信号非常有用。
这意味着在每N次计数上溢或下溢时,数据从预装载寄存器传输到影子寄存器(TIMx_ARR自动
重载入寄存器,TIMx_PSC 预装载寄存器,还有在比较模式下的捕获/比较寄存器
TIMx_CCRx)NTIMx_RCR重复计数寄存器中的值。
重复计数器在下述任一条件成立时递减:
向上计数模式下每次计数器溢出时,
向下计数模式下每次计数器下溢时,
中央对齐模式下每次上溢和每次下溢时。虽然这样限制了PWM的最大循环周期为128,但
它能够在每个PWM周期2次更新占空比。在中央对齐模式下,因为波形是对称的,如果每
PWM周期中仅刷新一次比较寄存器,则最大的分辨率为2xTck
70重复计数器是自动加载的,重复速率是由TIMx_RCR寄存器的值定义(参看 )。当更新事件由
软件产生(通过设置TIMx_EGR 中的UG)或者通过硬件的从模式控制器产生,则无论重复计数
器的值是多少,立即发生更新事件,并且TIMx_RCR寄存器中的内容被重载入到重复计数器。
209/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
70 不同模式下更新速率的例子,及TIMx_RCR的寄存器设置
13.3.4 时钟选择
计数器时钟可由下列时钟源提供:
内部时钟(CK_INT)
外部时钟模式1:外部输入引脚
外部时钟模式2:外部触发输入ETR
内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器。如可以配置一个定时
Timer1而作为另一个定时器Timer2的预分频器。详见下一章。
内部时钟源(CK_INT)
如果禁止了从模式控制器(SMS=000),则CENDIR(TIMx_CR1寄存器)UG(TIMx_EGR
存器)是事实上的控制位,并且只能被软件修改(UG位仍被自动清除)。只要CEN位被写成’1’,预
分频器的时钟就由内部时钟CK_INT提供。
下图显示控制电路和向上计数器在一般模式下,不带预分频器时的操作。
210/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
71 一般模式下的控制电路,内部时钟分频因子为1
外部时钟源模式1
TIMx_SMCR寄存器的SMS=111时,此模式被选中。计数器可以在选定输入端的每个上升沿
或下降沿计数。
72 TI2外部时钟连接例子
例如,要配置向上计数器在T12输入端的上升沿计数,使用下列步骤:
配置TIMx_CCMR1寄存器CC2S=01,配置通道2检测TI2输入的上升沿
配置TIMx_CCMR1 寄存器的IC2F[3:0] ,选择输入滤波器带宽(如果不需要滤波器,保持
IC2F=0000)
配置TIMx_CCER寄存器的CC2P=0,选定上升沿极性
配置TIMx_SMCR寄存器的SMS=111,选择定时器外部时钟模式1
配置TIMx_SMCR寄存器中的TS=110,选定TI2作为触发输入源
设置TIMx_CR1寄存器的CEN=1,启动计数器
注:
捕获预分频器不用作触发,所以不需要对它进行配置
当上升沿出现在TI2,计数器计数一次,且TIF标志被设置。
TI2的上升沿和计数器实际时钟之间的延时,取决于在TI2输入端的重新同步电路。
211/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
73 外部时钟模式1下的控制电路
外部时钟源模式2
选定此模式的方法为:令TIMx_SMCR寄存器中的ECE=1
计数器能够在外部触发ETR的每一个上升沿或下降沿计数。
下图是外部触发输入的框图
74 外部触发输入框图
例如,要配置在ETR下每2个上升沿计数一次的向上计数器,使用下列步骤:
4. 本例中不需要滤波器,置TIMx_SMCR寄存器中的ETF[3:0]=0000
设置预分频器,置TIMx_SMCR寄存器中的ETPS[1:0]=01
选择ETR的上升沿检测,置TIMx_SMCR寄存器中的ETP=0
开启外部时钟模式2,写TIMx_SMCR寄存器中的ECE=1
启动计数器,写TIMx_CR1寄存器中的CEN=1
计数器在每2ETR上升沿计数一次。
ETR的上升沿和计数器实际时钟之间的延时取决于在ETRP信号端的重新同步电路。
212/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
75 外部时钟模式2下的控制电路
13.3.5 捕获/比较通道
每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器),包括捕获的输入部分
(数字滤波、多路复用和预分频器),和输出部分(比较器和输出控制)
76
213/754
至图79是一个捕获/比较通道概览。
输入部分对相应的TIx输入信号采样,并产生一个滤波后的信号TIxF。然后,一个带极性选择
边缘监测器产生一个信号(TIxFPx),它可以作为从模式控制器的输入触发或者作为捕获控制。该
信号通过预分频进入捕获寄存器(ICxPS)
76/比较通道(如:通道1输入部分)
输出部分产生一个中间波形OCxRef(高有效)作为基准,链的末端决定最终输出信号的极性。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
77/比较通道1的主电路
78/比较通道的输出部分(通道13)
214/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
79/比较通道的输出部分(通道4)
捕获/比较模块由一个预装载寄存器和一个影子寄存器组成。读写过程仅操作预装载寄存器。
在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。
在比较模式下,预装载寄存器的内容被复制到影子寄存器中,然后影子寄存器的内容和计数器
进行比较。
13.3.6 输入捕获模式
在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄
(TIMx_CCRx)中。当发生捕获事件时,相应的CCxIF标志(TIMx_SR寄存器)被置1,如果开放
了中断或者DMA操作,则将产生中断或者DMA请求。如果发生捕获事件时CCxIF标志已经为
高,那么重复捕获标志CCxOF(TIMx_SR寄存器)被置1。写CCxIF=0可清除CCxIF,或读取存储
TIMx_CCRx寄存器中的捕获数据也可清除CCxIF。写CCxOF=0可清除CCxOF
以下例子说明如何在TI1输入的上升沿时捕获计数器的值到TIMx_CCR1寄存器中,步骤如下:
选择有效输入端:TIMx_CCR1必须连接到TI1输入,所以写入TIMx_CCR1寄存器中的
CC1S=01,只要CC1S不为’00’,通道被配置为输入,并且TIMx_CCR1寄存器变为只读。
根据输入信号的特点,配置输入滤波器为所需的带宽(即输入为TIx时,输入滤波器控制位是
TIMx_CCMRx寄存器中的ICxF)。假设输入信号在最多5个内部时钟周期的时间内抖动,
我们须配置滤波器的带宽长于5个时钟周期;因此我们可以(fDTS频率)连续采样8次,以确
认在TI1上一次真实的边沿变换,即在TIMx_CCMR1寄存器中写入IC1F=0011
选择TI1通道的有效转换边沿,在TIMx_CCER寄存器中写入CC1P=0(上升沿)
配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预
分频器被禁止(TIMx_CCMR1寄存器的IC1PS=00)
设置TIMx_CCER寄存器的CC1E=1,允许捕获计数器的值到捕获寄存器中。
如果需要,通过设置TIMx_DIER寄存器中的CC1IE位允许相关中断请求,通过设置
TIMx_DIER寄存器中的CC1DE位允许DMA请求。
当发生一个输入捕获时:
产生有效的电平转换时,计数器的值被传送到TIMx_CCR1寄存器。
CC1IF标志被设置(中断标志)。当发生至少2个连续的捕获时,而CC1IF未曾被清除,
CC1OF也被置1
如设置了CC1IE位,则会产生一个中断。
如设置了CC1DE位,则还会产生一个DMA请求。
为了处理捕获溢出,建议在读出捕获溢出标志之前读取数据,这是为了避免丢失在读出捕获溢
出标志之后和读取数据之前可能产生的捕获溢出信息。
注:
设置
TIMx_EGR
寄存器中相应的
CCxG
位,可以通过软件产生输入捕获中断和
/
DMA
请求。
215/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
13.3.7 PWM输入模式
该模式是输入捕获模式的一个特例,除下列区别外,操作与输入捕获模式相同:
两个ICx信号被映射至同一个TIx输入。
2ICx信号为边沿有效,但是极性相反。
其中一个TIxFP信号被作为触发输入信号,而从模式控制器被配置成复位模式。
例如,你需要测量输入到TI1上的PWM信号的长度(TIMx_CCR1寄存器)和占空比(TIMx_CCR2
寄存器),具体步骤如下(取决于CK_INT的频率和预分频器的值)
选择TIMx_CCR1的有效输入:置TIMx_CCMR1寄存器的CC1S=01(选中TI1)
选择TI1FP1的有效极性(用来捕获数据到TIMx_CCR1中和清除计数器):置CC1P=0(上升沿
有效)
选择TIMx_CCR2的有效输入:置TIMx_CCMR1寄存器的CC2S=10(选中TI1)
选择TI1FP2的有效极性(捕获数据到TIMx_CCR2):置CC2P=1(下降沿有效)
选择有效的触发输入信号:置TIMx_SMCR寄存器中的TS=101(选择TI1FP1)
配置从模式控制器为复位模式:置TIMx_SMCR中的SMS=100
使能捕获:置TIMx_CCER寄存器中CC1E=1CC2E=1
80 PWM输入模式时序
因为只有TI1FP1TI2FP2连到了从模式控制器,所以PWM输入模式只能使用TIMx_CH1
/TIMx_CH2信号。
13.3.8 强置输出模式
在输出模式(TIMx_CCMRx寄存器中CCxS=00)下,输出比较信号(OCxREF和相应的OCx/OCxN)
能够直接由软件强置为有效或无效状态,而不依赖于输出比较寄存器和计数器间的比较结果。
TIMx_CCMRx寄存器中相应的OCxM=101,即可强置输出比较信号(OCxREF/OCx)为有效状
态。这样OCxREF被强置为高电平(OCxREF始终为高电平有效),同时OCx得到CCxP极性相反
的信号。
例如:CCxP=0(OCx高电平有效),则OCx被强置为高电平。
TIMx_CCMRx寄存器中的OCxM=100,可强置OCxREF信号为低。
该模式下,在TIMx_CCRx影子寄存器和计数器之间的比较仍然在进行,相应的标志也会被修
改。因此仍然会产生相应的中断和DMA请求。这将会在下面的输出比较模式一节中介绍。
216/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
13.3.9 输出比较模式
此项功能是用来控制一个输出波形,或者指示一段给定的的时间已经到时。
当计数器与捕获/比较寄存器的内容相同时,输出比较功能做如下操作:
将输出比较模式(TIMx_CCMRx寄存器中的OCxM)和输出极性(TIMx_CCER寄存器中的
CCxP)定义的值输出到对应的引脚上。在比较匹配时,输出引脚可以保持它的电平
(OCxM=000)、被设置成有效电平(OCxM=001)被设置成无效电平(OCxM=010)或进行翻
(OCxM=011)
设置中断状态寄存器中的标志位(TIMx_SR寄存器中的CCxIF)
若设置了相应的中断屏蔽(TIMx_DIER寄存器中的CCxIE),则产生一个中断。
若设置了相应的使能位(TIMx_DIER寄存器中的CCxDE位,TIMx_CR2寄存器中的CCDS
选择DMA请求功能),则产生一个DMA请求。
TIMx_CCMRx中的OCxPE位选择TIMx_CCRx寄存器是否需要使用预装载寄存器。
在输出比较模式下,更新事件UEVOCxREFOCx输出没有影响。
同步的精度可以达到计数器的一个计数周期。输出比较模式(在单脉冲模式下)也能用来输出一
单脉冲。
输出比较模式的配置步骤:
1. 选择计数器时钟(内部,外部,预分频器)
2. 将相应的数据写入TIMx_ARRTIMx_CCRx寄存器中。
3. 如果要产生一个中断请求,设置CCxIE位。
4. 选择输出模式,例如:
要求计数器与CCRx匹配时翻转OCx的输出引脚,设置OCxM=011
OCxPE = 0禁用预装载寄存器
CCxP = 0选择极性为高电平有效
CCxE = 1使能输出
5. 设置TIMx_CR1寄存器的CEN位启动计数器
TIMx_CCRx寄存器能够在任何时候通过软件进行更新以控制输出波形,条件是未使用预装载寄
存器(OCxPE=’0’,否则TIMx_CCRx的影子寄存器只能在发生下一次更新事件时被更)。下图
给出了一个例子。
81 输出比较模式,翻转OC1
217/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
13.3.10 PWM模式
脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空
比的信号。
TIMx_CCMRx寄存器中的OCxM位写入’110’(PWM模式1)’111’(PWM模式2),能够独立地设
置每个OCx输出通道产生一路PWM。必须通过设置TIMx_CCMRx寄存器的OCxPE位使能相应
的预装载寄存器,最后还要设置TIMx_CR1寄存器的ARPE位,(在向上计数或中心对称模式中)
使能自动重装载的预装载寄存器。
仅当发生一个更新事件的时候,预装载寄存器才能被传送到影子寄存器,因此在计数器开始计
数之前,必须通过设置TIMx_EGR寄存器中的UG位来初始化所有的寄存器。
OCx的极性可以通过软件在TIMx_CCER寄存器中的CCxP位设置,它可以设置为高电平有效或
低电平有效。OCx的输出使能通过(TIMx_CCERTIMx_BDTR寄存器中)CCxECCxNE
MOEOSSIOSSR位的组合控制。详见TIMx_CCER寄存器的描述。
PWM模式(模式1或模式2)下,TIMx_CNTTIMx_CCRx始终在进行比较,(依据计数器的计数
方向)以确定是否符合TIMx_CCRxTIMx_CNT或者TIMx_CNTTIMx_CCRx
根据TIMx_CR1寄存器CMS位的状态,定时器能够产生边沿对齐的PWM信号或中央对齐的
PWM信号。
PWM 边沿对齐模式
向上计数配置
13.3.2节。 TIMx_CR1寄存器中的DIR位为低的时候执行向上计数。参看
下面是一个PWM模式1的例子。当TIMx_CNT<TIMx_CCRx时,PWM参考信号OCxREF
高,否则为低。如果TIMx_CCRx中的比较值大于自动重装载值(TIMx_ARR),则OCxREF
持为’1’。如果比较值为0,则OCxREF保持为’0’ 下图为TIMx_ARR=8时边沿对齐的PWM
波形实例。
82 边沿对齐的PWM波形(ARR=8)
向下计数的配置
13.3.2节。 TIMx_CR1寄存器的DIR位为高时执行向下计数。参看
PWM模式1,当TIMx_CNT>TIMx_CCRx时参考信号OCxREF为低,否则为高。如果
TIMx_CCRx中的比较值大于TIMx_ARR中的自动重装载值,则OCxREF保持为’1’。该模式
下不能产生0%的PWM波形。
218/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
PWM 中央对齐模式
TIMx_CR1寄存器中的CMS位不为’00’时为中央对齐模式(所有其他的配置对OCxREF/OCx
号都有相同的作用)。根据不同的CMS位设置,比较标志可以在计数器向上计数时被置1、在计
数器向下计数时被置1或在计数器向上和向下计数时被置1TIMx_CR1寄存器中的计数方向
(DIR)由硬件更新,不要用软件修改它。参看13.3.2节的中央对齐模式。
下图给出了一些中央对齐的PWM波形的例子
TIMx_ARR=8
PWM模式1
TIMx_CR1寄存器的CMS=01,在中央对齐模式1下,当计数器向下计数时设置比较标志。
83 中央对齐的PWM波形(APR=8)
使用中央对齐模式的提示:
进入中央对齐模式时,使用当前的向上/向下计数配置;这就意味着计数器向上还是向下计
数取决于TIMx_CR1寄存器中DIR位的当前值。此外,软件不能同时修改DIRCMS位。
不推荐当运行在中央对齐模式时改写计数器,因为这会产生不可预知的结果。特别地:
如果写入计数器的值大于自动重加载的值(TIMx_CNT>TIMx_ARR),则方向不会被更新。
例如,如果计数器正在向上计数,它就会继续向上计数。
如果将0或者TIMx_ARR的值写入计数器,方向被更新,但不产生更新事件UEV
219/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
使用中央对齐模式最保险的方法,就是在启动计数器之前产生一个软件更新(设置
TIMx_EGR位中的UG),并且不要在计数进行过程中修改计数器的值。
13.3.11 互补输出和死区插入
高级控制定时器(TIM1TIM8)能够输出两路互补信号,并且能够管理输出的瞬时关断和接通。
这段时间通常被称为死区,用户应该根据连接的输出器件和它们的特性(电平转换的延时、电源
开关的延时等)来调整死区时间。
配置TIMx_CCER寄存器中的CCxPCCxNP位,可以为每一个输出独立地选择极性(主输出
OCx或互补输出OCxN)
互补信号OCxOCxN通过下列控制位的组合进行控制:TIMx_CCER寄存器的CCxECCxNE
位,TIMx_BDTRTIMx_CR2寄存器中的MOEOISxOISxNOSSIOSSR位,详75
带刹车功能的互补输出通道OCxOCxN的控制位。特别的是,在转换到IDLE状态时(MOE下降
0)死区被激活。
同时设置CCxECCxNE位将插入死区,如果存在刹车电路,则还要设置MOE位。每一个通道
都有一个10位的死区发生器。参考信号OCxREF可以产生2路输出OCxOCxN。如果OCx
OCxN为高有效:
OCx输出信号与参考信号相同,只是它的上升沿相对于参考信号的上升沿有一个延迟。
OCxN输出信号与参考信号相反,只是它的上升沿相对于参考信号的下降沿有一个延迟。
如果延迟大于当前有效的输出宽度(OCx或者OCxN),则不会产生相应的脉冲。
下列几张图显示了死区发生器的输出信号和当前参考信号OCxREF 之间的关系。(假设
CCxP=0CCxNP=0MOE=1CCxE=1并且CCxNE=1)
84 带死区插入的互补输出
85 死区波形延迟大于负脉冲
86 死区波形延迟大于正脉冲
220/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
每一个通道的死区延时都是相同的,是由TIMx_BDTR寄存器中的DTG位编程配置。详见
13.4.18
221/754
TIM1TIM8刹车和死区寄存器(TIMx_BDTR)中的延时计算。
重定向OCxREFOCxOCxN
在输出模式下(强置、输出比较或PWM),通过配置TIMx_CCER寄存器的CCxECCxNE位,
OCxREF可以被重定向到OCx或者OCxN的输出。
这个功能可以在互补输出处于无效电平时,在某个输出上送出一个特殊的波形(例如PWM或者静
态有效电平)。另一个作用是,让两个输出同时处于无效电平,或处于有效电平和带死区的互补
输出。
注:
当只使能
OCxN(CCxE=0, CCxNE=1)
时,它不会反相,当
OCxREF
有效时立即变高。例如,如
CCxNP=0
,则
OCxN=OCxREF
。另一方面,当
OCx
OCxN
都被使能时
(CCxE=CCxNE=1)
OCxREF
为高时
OCx
有效;而
OCxN
相反,当
OCxREF
低时
OCxN
变为有效。
13.3.12 使用刹车功能
当使用刹车功能时,依据相应的控制位(TIMx_BDTR寄存器中的MOEOSSIOSSR位,
TIMx_CR2存器中的OISxOISxN),输出使能信号和无效电平都会被修改。但无论何时,
OCxOCxN输出不能在同一时间同时处于有效电平上。详见75带刹车功能的互补输出通道
OCxOCxN的控制位。
刹车源既可以是刹车输入引脚又可以是一个时钟失败事件。时钟失败事件由复位时钟控制器中
的时钟安全系统产生,详见6.2.7节时钟安全系统(CSS)
系统复位后,刹车电路被禁止,MOE位为低。设置TIMx_BDTR寄存器中的BKE位可以使能刹车
功能,刹车输入信号的极性可以通过配置同一个寄存器中的BKP位选择。BKEBKP可以同时
被修改。当写入BKEBKP位时,在真正写入之前会有1APB时钟周期的延迟,因此需要等待
一个APB时钟周期之后,才能正确地读回写入的位。
因为MOE下降沿可以是异步的,在实际信号(作用在输出端)和同步控制(TIMx_BDTR寄存器
)之间设置了一个再同步电路。这个再同步电路会在异步信号和同步信号之间产生延迟。特别
的,如果当它为低时写MOE=1,则读出它之前必须先插入一个延时(空指令)才能读到正确的
值。这是因为写入的是异步信号而读的是同步信号。
当发生刹车时(在刹车输入端出现选定的电平),有下述动作:
MOE位被异步地清除,将输出置于无效状态、空闲状态或者复位状态(OSSI位选择)。这
个特性在MCU的振荡器关闭时依然有效。
一旦MOE=0,每一个输出通道输出由TIMx_CR2寄存器中的OISx位设定的电平。如果
OSSI=0,则定时器释放使能输出,否则使能输出始终为高。
当使用互补输出时:
输出首先被置于复位状态即无效的状态(取决于极性)。这是异步操作,即使定时器没有时
钟时,此功能也有效。
如果定时器的时钟依然存在,死区生成器将会重新生效,在死区之后根据OISxOISxN
位指示的电平驱动输出端口。即使在这种情况下,OCxOCxN也不能被同时驱动到有效
的电平。注,因为重新同步MOE,死区时间比通常情况下长一些(大约2ck_tim的时钟周
)
如果OSSI=0,定时器释放使能输出,否则保持使能输出;或一旦CCxECCxNE之一变
高时,使能输出变为高。
如果设置了TIMx_DIER寄存器中的BIE位,当刹车状态标志(TIMx_SR寄存器中的BIF)
’1’时,则产生一个中断。如果设置了TIMx_DIER寄存器中的BDE位,则产生一个DMA
求。
如果设置了TIMx_BDTR寄存器中的AOE位,在下一个更新事件UEVMOE位被自动置位;
例如,这可以用来进行整形。否则,MOE始终保持低直到被再次置’1’;此时,这个特性可
以被用在安全方面,你可以把刹车输入连到电源驱动的报警输出、热敏传感器或者其他安
全器件上。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
注:
刹车输入为电平有效。所以,当刹车输入有效时,不能同时
(
自动地或者通过软件
)
设置
MOE
同时,状态标志
BIF
不能被清除。
刹车由BRK输入产生,它的有效极性是可编程的,且由TIMx_BDTR寄存器中的BKE位开启。
除了刹车输入和输出管理,刹车电路中还实现了写保护以保证应用程序的安全。它允许用户冻
结几个配置参数(死区长度,OCx/OCxN极性和被禁止的状态,OCxM配置,刹车使能和极性)
用户可以通过TIMx_BDTR寄存器中的LOCK位,从三级保护中选择一种,参看13.4.18TIM1
TIM8刹车和死区寄存器(TIMx_BDTR)。在MCU复位后LOCK位只能被修改一次。
下图显示响应刹车的输出实例。
87 响应刹车的输出
222/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
13.3.13 在外部事件时清除OCxREF信号
对于一个给定的通道,设置TIMx_CCMRx寄存器中对应的OCxCE位为’1’,能够用ETRF输入端
的高电平把OCxREF信号拉低,OCxREF信号将保持为低直到发生下一次的更新事件UEV
该功能只能用于输出比较和PWM模式,而不能用于强置模式。
例如,OCxREF信号可以联到一个比较器的输出,用于控制电流。这时,ETR必须配置如下:
1. 外部触发预分频器必须处于关闭:TIMx_SMCR寄存器中的ETPS[1:0]=00
2. 必须禁止外部时钟模式2TIMx_SMCR寄存器中的ECE=0
3. 外部触发极性(ETP)和外部触发滤波器(ETF)可以根据需要配置。
下图显示了当ETRF输入变为高时,对应不同OCxCE的值,OCxREF信号的动作。在这个例
中,定时器TIMx被置于PWM模式。
88TIMxOCxREF
13.3.14 产生六步PWM输出
当在一个通道上需要互补输出时,预装载位有OCxMCCxECCxNE。在发生COM换相事件
时,这些预装载位被传送到影子寄存器位。这样你就可以预先设置好下一步骤配置,并在同一
个时刻同时修更改所有通道的配置。COM可以通过设置TIMx_EGR寄存器的COM位由软件产
生,或在TRGI上升沿由硬件产生。
当发生COM事件时会设置一个标志位(TIMx_SR寄存器中的COMIF),这时如果已设置了
TIMx_DIER寄存器的COMIE位,则产生一个中断;如果已设置了TIMx_DIER寄存器的COMDE
位,则产生一个DMA请求。
下图显示当发生COM事件时,三种不同配置下OCxOCxN输出。
223/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
89 产生六步PWM,使用COM的例子(OSSR=1)
13.3.15 单脉冲模式
单脉冲模式(OPM)是前述众多模式的一个特例。这种模式允许计数器响应一个激励,并在一个
程序可控的延时之后产生一个脉宽可程序控制的脉冲。
可以通过从模式控制器启动计数器,在输出比较模式或者PWM 模式下产生波形。设置
TIMx_CR1存器中的OPM位将选择单脉冲模式,这样可以让计数器自动地在产生下一个更新
事件UEV时停止。
仅当比较值与计数器的初始值不同时,才能产生一个脉冲。启动之前(当定时器正在等待触发)
必须如下配置:
向上计数方式:计数器CNT < CCRx ARR (特别地, 0 < CCRx)
向下计数方式:计数器CNT > CCRx
224/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
90 单脉冲模式的例子
例如,你需要在从TI2输入脚上检测到一个上升沿开始,延迟tDELAY之后,在OC1上产生一个长
度为tPULSE的正脉冲。
假定TI2FP2作为触发1:
TIMx_CCMR1寄存器中的CC2S=01,把TI2FP2映像到TI2
TIMx_CCER寄存器中的CC2P=0,使TI2FP2能够检测上升沿。
TIMx_SMCR寄存器中的TS=110TI2FP2作为从模式控制器的触发(TRGI)
TIMx_SMCR寄存器中的SMS=110(触发模式)TI2FP2被用来启动计数器。
OPM的波形由写入比较寄存器的数值决定(要考虑时钟频率和计数器预分频器)
tDELAYTIMx_CCR1寄存器中的值定义。
tPULSE由自动装载值和比较值之间的差值定义(TIMx_ARR - TIMx_CCR1)
假定当发生比较匹配时要产生从01的波形,当计数器达到预装载值时要产生一个从10
的波形;首先要置TIMx_CCMR1寄存器的OC1M=111,进入PWM模式2;根据需要有选择
地使能预装载寄存器:置TIMx_CCMR1中的OC1PE=1TIMx_CR1寄存器中的ARPE;然
后在TIMx_CCR1寄存器中填写比较值,在TIMx_ARR寄存器中填写自动装载值,设置UG
来产生一个更新事件,然后等待在TI2上的一个外部触发事件。本例中,CC1P=0
在这个例子中,TIMx_CR1寄存器中的DIRCMS位应该置低。
因为只需要一个脉冲,所以必须设置TIMx_CR1寄存器中的OPM=1,在下一个更新事件(当计数
器从自动装载值翻转到0)时停止计数。
特殊情况:OCx快速使能:
在单脉冲模式下,在TIx输入脚的边沿检测逻辑设置CEN位以启动计数器。然后计数器和比较
间的比较操作产生了输出的转换。但是这些操作需要一定的时钟周期,因此它限制了可得到的
最小延时tDELAY
如果要以最小延时输出波形,可以设置TIMx_CCMRx寄存器中的OCxFE位;此时OCxREF(
OCx)直接响应激励而不再依赖比较的结果,输出的波形与比较匹配时的波形一样OCxFE只在
通道配置为PWM1PWM2模式时起作用。
13.3.16 编码器接口模式
选择编码器接口模式的方法是:如果计数器只在TI2的边沿计数,则置TIMx_SMCR寄存器中的
SMS=001;如果只在TI1边沿计数,则置SMS=010;如果计数器同时在TI1TI2边沿计数,则
SMS=011
225/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
通过设置TIMx_CCER寄存器中的CC1PCC2P位,可以选择TI1TI2极性;如果需要,还可以
对输入滤波器编程。
两个输入TI1TI2被用来作为增量编码器的接口。参看73,假定计数器已经启动(TIMx_CR1
寄存器中的CEN=1),则计数器由每次在TI1FP1TI2FP2上的有效跳变驱动。TI1FP1TI2FP2
TI1TI2在通过输入滤波器和极性控制后的信号;如果没有滤波和变相,TI1FP1=TI1
TI2FP2=TI2。根据两个输入信号的跳变顺序,产生了计数脉冲和方向信号。依据两个输入信
的跳变顺序,计数器向上或向下计数,同时硬件对TIMx_CR1寄存器的DIR位进行相应的设置。
不管计数器是依靠TI1计数、依靠TI2计数或者同时依靠TI1TI2计数,在任一输入端(TI1或者
TI2)的跳变都会重新计算DIR位。
编码器接口模式基本上相当于使用了一个带有方向选择的外部时钟。这意味着计数器只在0
TIMx_ARR寄存器的自动装载值之间连续计数(根据方向,或是0ARR计数,或是ARR0
)。所以在开始计数之前必须配置TIMx_ARR;同样,捕获器、比较器、预分频器、重复计数
器、触发输出特性等仍工作如常。编码器模式和外部时钟模式2不兼容,因此不能同时操作。
在这个模式下,计数器依照增量编码器的速度和方向被自动的修改,因此计数器的内容始终指
示着编码器的位置。计数方向与相连的传感器旋转的方向对应。下表列出了所有可能的组合,
假设TI1TI2不同时变换。
73 计数方向与编码器信号的关系
226/754
TI1FP1信号 TI2FP2信号 相对信号的电平
有效边沿 (TI1FP1对应TI2,
TI2FP2对应TI1) 上升 下降 上升 下降
向下计数 向上计数 不计数 不计数
仅在TI1计数 向上计数 向下计数 不计数 不计数
不计数 不计数 向上计数 向下计数
仅在TI2计数 不计数 不计数 向下计数 向上计数
向下计数 向上计数 向上计数 向下计数
TI1TI2上计 向上计数 向下计数 向下计数 向上计数
一个外部的增量编码器可以直接与MCU连接而不需要外部接口逻辑。但是,一般会使用比较
将编码器的差动输出转换到数字信号,这大大增加了抗噪声干扰能力。编码器输出的第三个信
号表示机械零点,可以把它连接到一个外部中断输入并触发一个计数器复位。
下图是一个计数器操作的实例,显示了计数信号的产生和方向控制。它还显示了当选择了双边
沿时,输入抖动是如何被抑制的;抖动可能会在传感器的位置靠近一个转换点时产生。在这个
例子中,我们假定配置如下:
CC1S=’01’ (TIMx_CCMR1寄存器,IC1FP1映射到TI1)
CC2S=’01’ (TIMx_CCMR2寄存器,IC2FP2映射到TI2)
CC1P=’0’ (TIMx_CCER寄存器,IC1FP1不反相,IC1FP1=TI1)
CC2P=’0’ (TIMx_CCER寄存器,IC2FP2不反相,IC2FP2=TI2)
SMS=’011’ (TIMx_SMCR寄存器,所有的输入均在上升沿和下降沿有效).
CEN=’1’ (TIMx_CR1寄存器,计数器使能)
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
91 编码器模式下的计数器操作实例
下图为当IC1FP1极性反相时计数器的操作实例(CC1P=’1’,其他配置与上例相同)
92 IC1FP1反相的编码器接口模式实例
当定时器配置成编码器接口模式时,提供传感器当前位置的信息。使用第二个配置在捕获模式
的定时器,可以测量两个编码器事件的间隔,获得动态的信息(速度,加速度,减速度)。指示
械零点的编码器输出可被用做此目的。根据两个事件间的间隔,可以按照固定的时间读出计数
器。如果可能的话,你可以把计数器的值锁存到第三个输入捕获寄存器(捕获信号必须是周期的
并且可以由另一个定时器产生);也可以通过一个由实时时钟产生的DMA请求来读取它的值。
13.3.17 定时器输入异或功能
TIMx_CR2寄存器中的TI1S位,允许通道1的输入滤波器连接到一个异或门的输出端,异或门的
3个输入端为TIMx_CH1TIMx_CH2TIMx_CH3
13.3.18异或输出能够被用于所有定时器的输入功能,如触发或输入捕获。下节 给出了此特性用
于连接霍尔传感器的例子。
13.3.18 与霍尔传感器的接口
使用高级控制定时器(TIM1TIM8)产生PWM信号驱动马达时,可以用另一个通用TIMx(TIM2
TIM3TIM4TIM5)定时器作为“接口定时器”来连接霍尔传感器,见图933个定时器输入脚
(CC1CC2CC3)通过一个异或门连接到TI1输入通道(通过设置TIMx_CR2寄存器中的TI1S
来选择),“接口定时器”捕获这个信号。
227/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
从模式控制器被配置于复位模式,从输入是TI1F_ED。每当3个输入之一变化时,计数器从新从
0开始计数。这样产生一个由霍尔输入端的任何变化而触发的时间基准。
“接口定时器”上的捕获/比较通道1配置为捕获模式,捕获信号为TRC(76)。捕获值反映了
两个输入变化间的时间延迟,给出了马达速度的信息。
“接口定时器”可以用来在输出模式产生一个脉冲,这个脉冲可以(通过触发一个COM事件)
于改变高级定时器TIM1TIM8各个通道的属性,而高级控制定时器产生PWM信号驱动马达。
因此“接口定时器”通道必须编程为在一个指定的延时(输出比较或PWM模式)之后产生一个正
脉冲,这个脉冲通过TRGO输出被送到高级控制定时器TIM1TIM8
举例:霍尔输入连接到TIMx定时器,要求每次任一霍尔输入上发生变化之后的一个指定的时
刻,改变高级控制定时器TIMxPWM配置。
TIMx_CR2寄存器的TI1S位为’1’,配置三个定时器输入逻辑或到TI1输入,
时基编程:置TIMx_ARR为其最大值(计数器必须通过TI1的变化清零)。设置预分频器得到
一个最大的计数器周期,它长于传感器上的两次变化的时间间隔。
设置通道1为捕获模式(选中TRC):置TIMx_CCMR1寄存器中CC1S=01,如果需要,还可
以设置数字滤波器。
设置通道2PWM2模式,并具有要求的延时:置TIMx_CCMR1寄存器中的OC2M=111
CC2S=00
选择OC2REF作为TRGO上的触发输出:置TIMx_CR2寄存器中的MMS=101
在高级控制寄存器TIM1中,正确的ITR输入必须是触发器输入,定时器被编程为产生PWM
号,捕获/比较控制信号为预装载的(TIMx_CR2寄存器中CCPC=1),同时触发输入控制COM
(TIMx_CR2寄存器中CCUS=1)。在一次COM事件后,写入下一步的PWM控制位(CCxE
OCxM),这可以在处理OC2REF上升沿的中断子程序里实现。
下图显示了这个实例
228/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
93 霍尔传感器接口的实例
13.3.19 TIMx定时器和外部触发的同步
TIMx定时器能够在多种模式下和一个外部的触发同步:复位模式、门控模式和触发模式。
从模式:复位模式
在发生一个触发输入事件时,计数器和它的预分频器能够重新被初始化;同时,如果TIMx_CR1
寄存器的URS位为低,还产生一个更新事UEV;然后所有的预装载寄存器(TIMx_ARR
TIMx_CCRx)都被更新了。
在以下的例子中,TI1输入端的上升沿导致向上计数器被清零:
配置通道1以检测TI1的上升沿。配置输入滤波器的带宽(在本例中,不需要任何滤波器,因
此保持IC1F=0000)。触发操作中不使用捕获预分频器,所以不需要配置。CC1S位只选择
输入捕获源,即TIMx_CCMR1寄存器中CC1S=01。置TIMx_CCER寄存器中CC1P=0以确
定极性(只检测上升沿)
TIMx_SMCR寄存器中SMS=100,配置定时器为复位模式;置TIMx_SMCR寄存器中
TS=101,选择TI1作为输入源。
TIMx_CR1寄存器中CEN=1,启动计数器。
229/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
计数器开始依据内部时钟计数,然后正常运转直到TI1出现一个上升沿;此时,计数器被清零然
后从0重新开始计数。同时,触发标志(TIMx_SR寄存器中的TIF)被设置,根据TIMx_DIER
存器中TIE(中断使能)位和TDE(DMA使能)位的设置,产生一个中断请求或一个DMA请求。
下图显示当自动重装载寄存器TIMx_ARR=0x36时的动作。在TI1上升沿和计数器的实际复位之
间的延时取决于TI1输入端的重同步电路。
94 复位模式下的控制电路
从模式:门控模式
按照选中的输入端电平使能计数器。
在如下的例子中,计数器只在TI1为低时向上计数:
配置通道1以检测TI1上的低电平。配置输入滤波器带宽(本例中,不需要滤波,所以保持
IC1F=0000)。触发操作中不使用捕获预分频器,所以不需要配置。CC1S位用于选择输入
捕获源,置TIMx_CCMR1寄存器中CC1S=01。置TIMx_CCER寄存器中CC1P=1以确定极
(只检测低电平)
TIMx_SMCR寄存器中SMS=101,配置定时器为门控模式;置TIMx_SMCR寄存器中
TS=101,选择TI1作为输入源。
TIMx_CR1寄存器中CEN=1,启动计数器。在门控模式下,如果CEN=0,则计数器不能
启动,不论触发输入电平如何。
只要TI1为低,计数器开始依据内部时钟计数,一旦TI1变高则停止计数。当计数器开始或停止
时都设置TIMx_SR中的TIF标置。
TI1上升沿和计数器实际停止之间的延时取决于TI1输入端的重同步电路。
95 门控模式下的控制电路
从模式:触发模式
输入端上选中的事件使能计数器。
在下面的例子中,计数器在TI2输入的上升沿开始向上计数:
230/754
配置通道2检测TI2的上升沿。配置输入滤波器带宽(本例中,不需要任何滤波器,保持
IC2F=0000)。触发操作中不使用捕获预分频器,不需要配置。CC2S位只用于选择输入捕
获源,置TIMx_CCMR1寄存器中CC2S=01。置TIMx_CCER寄存器中CC2P=1以确定极性
(只检测低电平)
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
TIMx_SMCR寄存器中SMS=110,配置定时器为触发模式;置TIMx_SMCR寄存器中
TS=110,选择TI2作为输入源。
TI2出现一个上升沿时,计数器开始在内部时钟驱动下计数,同时设置TIF标志。
TI2上升沿和计数器启动计数之间的延时,取决于TI2输入端的重同步电路。
96 触发器模式下的控制电路
从模式:外部时钟模式2 触发模式
外部时钟模式2可以与另一种从模式(外部时钟模1和编码器模式除外)一起使用。这时,ETR
号被用作外部时钟的输入,在复位模式、门控模式或触发模式可以选择另一个输入作为触发输
入。不建议使用TIMx_SMCR寄存器的TS位选择ETR作为TRGI
在下面的例子中,一旦TI1上出现一个上升沿,计数器即在ETR的每一个上升沿向上计数一
次:
1. 通过TIMx_SMCR寄存器配置外部触发输入电路:
ETF=0000:没有滤波
ETPS=00:不用预分频器
ETP=0:检测ETR的上升沿,置ECE=1使能外部时钟模式2
2. 按如下配置通道1,检测TI的上升沿:
IC1F=0000:没有滤波
触发操作中不使用捕获预分频器,不需要配置
TIMx_CCMR1寄存器中CC1S=01,选择输入捕获源
TIMx_CCER寄存器中CC1P=0以确定极性(只检测上升沿)
3. TIMx_SMCR寄存器中SMS=110,配置定时器为触发模式。置TIMx_SMCR寄存器中
TS=101,选择TI1作为输入源。
TI1上出现一个上升沿时,TIF标志被设置,计数器开始在ETR的上升沿计数。
ETR信号的上升沿和计数器实际复位间的延时,取决于ETRP输入端的重同步电路。
97 外部时钟模式2+触发模式下的控制电路
231/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
13.3.20 定时器同步
所有TIM定时器在内部相连,用于定时器同步或链接。详见下一章14.3.15节。
13.3.21 调试模式
当微控制器进入调试模式时(Cortex-M3核心停止),根据DBG模块中DBG_TIMx_STOP的设置,
TIMx计数器可以或者继续正常操作,或者停止。详见随后的29.16.2节。
232/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
13.4 TIM1TIM8寄存器描述
关于在寄存器描述里面所用到的缩写,详见第1章。
可以用半字(16)或字(32)的方式操作这些外设寄存器。
13.4.1 TIM1 TIM8 控制寄存器 1(TIMx_CR1)
偏移地址:0x00
复位值:0x0000
1514131211109876543210
ARPE DIR OPM URS UDIS CEN
rw rw rw rw rw rw rw rw rw rw
保留 CKD[1:0] CMS[1:0]
15:10 保留,始终读为0
CKD[1:0]时钟分频因子 (Clock division) 9:8
2位定义在定时器时钟(CK_INT)频率、死区时间和由死区发生器与数字滤波器(ETR,TIx)所用
的采样时钟之间的分频比例。
00tDTS = tCK_INT
01tDTS = 2 x tCK_INT
10tDTS = 4 x tCK_INT
11:保留,不要使用这个配置
ARPE:自动重装载预装载允许位 (Auto-reload preload enable) 7
0TIMx_ARR寄存器没有缓冲;
1TIMx_ARR寄存器被装入缓冲器。
CMS[1:0]:选择中央对齐模式 (Center-aligned mode selection) 6:5
00:边沿对齐模式。计数器依据方向位(DIR)向上或向下计数。
01:中央对齐模式1。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器
CCxS=00)的输出比较中断标志位,只在计数器向下计数时被设置。
10:中央对齐模式2。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器
CCxS=00)的输出比较中断标志位,只在计数器向上计数时被设置。
11:中央对齐模式3。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器
CCxS=00)的输出比较中断标志位,在计数器向上和向下计数时均被设置。
注:在计数器开启时(CEN=1),不允许从边沿对齐模式转换到中央对齐模式。
DIR:方向 (Direction) 4
0:计数器向上计数;
1:计数器向下计数。
注:当计数器配置为中央对齐模式或编码器模式时,该位为只读。
OPM:单脉冲模式 (One pulse mode) 3
0:在发生更新事件时,计数器不停止;
1:在发生下一次更新事件(清除CEN)时,计数器停止。
URS:更新请求源 (Update request source) 2
软件通过该位选择UEV事件的源
0:如果使能了更新中断或DMA请求,则下述任一事件产生更新中断或DMA请求:
计数器溢出/下溢
设置UG
从模式控制器产生的更新
1:如果使能了更新中断或DMA请求,则只有计数器溢出/下溢才产生更新中断或DMA请求。
233/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
UDIS:禁止更新 (Update disable) 1
软件通过该位允许/禁止UEV事件的产生
0:允许UEV。更新(UEV)事件由下述任一事件产生:
计数器溢出/下溢
设置UG
从模式控制器产生的更新
具有缓存的寄存器被装入它们的预装载值。(译注:更新影子寄存器)
1:禁止UEV。不产生更新事件,影子寄存器(ARRPSCCCRx)保持它们的值。如果设置了
UG位或从模式控制器发出了一个硬件复位,则计数器和预分频器被重新初始化。
CEN:使能计数器 (Counter enable) 0
0:禁止计数器;
1:使能计数器。
注:在软件设置了CEN位后,外部时钟、门控模式和编码器模式才能工作。触发模式可以自动
地通过硬件设置CEN位。
13.4.2 TIM1 TIM8 控制寄存器 2(TIMx_CR2)
偏移地址:0x04
复位值:0x0000
1514131211109876543210
保留 OIS4 OIS3N OIS3 OIS2N OIS2 OIS1N OIS1 TI1S CCDS CCUS 保留 CCPC
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
MMS[2:0]
15 保留,始终读为0
OIS4:输出空闲状态4(OC4输出)。参见OIS1位。 14
OIS3N:输出空闲状态3(OC3N输出)。参见OIS1N位。 13
OIS3:输出空闲状态3(OC3输出)。参见OIS1位。 12
OIS2N:输出空闲状态2(OC2N输出)。参见OIS1N位。 11
OIS2:输出空闲状态2(OC2输出)。参见OIS1位。 10
OIS1N:输出空闲状态1(OC1N输出) (Output Idle state 1) 9
0:当MOE=0时,死区后OC1N=0
1:当MOE=0时,死区后OC1N=1
注:已经设置了LOCK(TIMx_BKR寄存器)级别123后,该位不能被修改。
OIS1:输出空闲状态1(OC1输出) (Output Idle state 1) 8
0:当MOE=0时,如果实现了OC1N,则死区后OC1=0
1:当MOE=0时,如果实现了OC1N,则死区后OC1=1
注:已经设置了LOCK(TIMx_BKR寄存器)级别123后,该位不能被修改。
TI1STI1选择 (TI1 selection) 7
0TIMx_CH1引脚连到TI1输入;
1TIMx_CH1TIMx_CH2TIMx_CH3引脚经异或后连到TI1输入。
234/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
MMS[2:0]:主模式选择 (Master mode selection) 6:4
3位用于选择在主模式下送到从定时器的同步信息(TRGO)。可能的组合如下:
000复位 – TIMx_EGR寄存器的UG位被用于作为触发输出(TRGO)。如果是触发输入产生
复位(从模式控制器处于复位模式),则TRGO上的信号相对实际的复位会有一个延迟。
001使能 计数器使能信号CNT_EN被用于作为触发输出(TRGO)。有时需要在同一时间启动
多个定时器或控制在一段时间内使能从定时器。计数器使能信号是通过CEN控制位和门控模式
下的触发输入信号的逻辑或产生。当计数器使能信号受控于触发输入时,TRGO上会有一个延
迟,除非选择了主/从模式(TIMx_SMCR寄存器中MSM位的描述)
010更新更新事件被选为触发输入(TRGO)。例如,一个主定时器的时钟可以被用作一个从
定时器的预分频器。
011比较脉冲在发生一次捕获或一次比较成功时,当要设置CC1IF标志时(即使它已经为
),触发输出送出一个正脉冲(TRGO)
100比较 – OC1REF信号被用于作为触发输出(TRGO)
101比较 – OC2REF信号被用于作为触发输出(TRGO)
110比较 – OC3REF信号被用于作为触发输出(TRGO)
111比较 – OC4REF信号被用于作为触发输出(TRGO)
CCDS:捕获/比较的DMA选择 (Capture/compare DMA selection) 3
0:当发生CCx事件时,送出CCxDMA请求;
1:当发生更新事件时,送出CCxDMA请求。
CCUS:捕获/比较控制更新选择 (Capture/compare control update selection) 2
0:如果捕获/比较控制位是预装载的(CCPC=1),只能通过设置COM位更新它们;
1:如果捕获/比较控制位是预装载的(CCPC=1),可以通过设置COM位或TRGI上的一个上升沿
更新它们。
注:该位只对具有互补输出的通道起作用。
1 保留,始终读为0
CCPC:捕获/比较预装载控制位 (Capture/compare preloaded control) 0
0CCxECCxNEOCxM位不是预装载的;
1CCxECCxNEOCxM位是预装载的;设置该位后,它们只在设置了COM位后被更新。
注:该位只对具有互补输出的通道起作用。
13.4.3 TIM1 TIM8 从模式控制寄存器(TIMx_SMCR)
偏移地址:0x08
复位值:0x0000
1514131211109876543210
ETP ECE MSM 保留
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
TS[2:0]ETPS[1:0] ETF[3:0] SMS[2:0]
ETP:外部触发极性 (External trigger polarity) 15
该位选择是用ETR还是ETR的反相来作为触发操作
0ETR不反相,高电平或上升沿有效;
1ETR被反相,低电平或下降沿有效。
ECE:外部时钟使能位 (External clock enable) 14
该位启用外部时钟模式2
0:禁止外部时钟模式2
1:使能外部时钟模式2。计数器由ETRF信号上的任意有效边沿驱动。
1:设置ECE位与选择外部时钟模式1并将TRGI连到ETRF(SMS=111TS=111)具有相同功
效。
2:下述从模式可以与外部时钟模式2同时使用:复位模式,门控模式和触发模式;但是,这
TRGI不能连到ETRF(TS位不能是’111’)
3:外部时钟模式1和外部时钟模式2同时被使能时,外部时钟的输入是ETRF
235/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
ETPS[1:0]:外部触发预分频 (External trigger prescaler) 位13:12
外部触发信号ETRP的频率必须最多是TIMxCLK频率的1/4。当输入较快的外部时钟时,可以使
用预分频降低ETRP的频率。
00:关闭预分频;
01ETRP频率除以2
10ETRP频率除以4
11ETRP频率除以8
ETF[3:0]:外部触发滤波 (External trigger filter) 位11:8
这些位定义了对ETRP信号采样的频率和对ETRP数字滤波的带宽。实际上,数字滤波器是一个
事件计数器,它记录到N个事件后会产生一个输出的跳变。
0000:无滤波器,以fDTS采样 1000:采样频fSAMPLING=fDTS/8N=6
0001:采样频率fSAMPLING=fCK_INTN=2 1001:采样频fSAMPLING=fDTS/8N=8
0010:采样频率fSAMPLING=fCK_INTN=4 1010:采样频fSAMPLING=fDTS/16N=5
0011:采样频率fSAMPLING=fCK_INTN=8 1011:采样频fSAMPLING=fDTS/16N=6
0100:采样频率fSAMPLING=fDTS/2N=6 1100:采样频fSAMPLING=fDTS/16N=8
0101:采样频率fSAMPLING=fDTS/2N=8 1101:采样频fSAMPLING=fDTS/32N=5
0110:采样频率fSAMPLING=fDTS/4N=6 1110:采样频fSAMPLING=fDTS/32N=6
0111:采样频率fSAMPLING=fDTS/4N=8 1111:采样频fSAMPLING=fDTS/32N=8
MSM:主/从模式 (Master/slave mode) 位7
0:无作用;
1:触发输入(TRGI)上的事件被延迟了,以允许在当前定时器(通过TRGO)与它的从定时器间的
完美同步。这对要求把几个定时器同步到一个单一的外部事件时是非常有用的。
TS[2:0]:触发选择 (Trigger selection) 6:4
3位选择用于同步计数器的触发输入。
000:内部触发0(ITR0) 100TI1的边沿检测器(TI1F_ED)
001:内部触发1(ITR1) 101:滤波后的定时器输入1(TI1FP1)
010:内部触发2(ITR2) 110:滤波后的定时器输入2(TI2FP2)
011:内部触发3(ITR3) 111:外部触发输入(ETRF)
236/754
更多有关ITRx的细节,参见表74
注:这些位只能在未用到(SMS=000)时被改变,以避免在改变时产生错误的边沿检测。
3 保留,始终读为0
SMS[2:0]:从模式选择 (Slave mode selection) 2:0
当选择了外部信号,触发信(TRGI)的有效边沿与选中的外部输入极性相关(见输入控制寄存器
和控制寄存器的说明)
000:关闭从模式如果CEN=1,则预分频器直接由内部时钟驱动。
001:编码器模式1 – 根据TI1FP1的电平,计数器在TI2FP2的边沿向上/下计数。
010:编码器模式2 – 根据TI2FP2的电平,计数器在TI1FP1的边沿向上/下计数。
011:编码器模3 – 根据另一个信号的输入电平,计数器在TI1FP1TI2FP2的边沿向上/下计
数。
100:复位模式选中的触发输入(TRGI)的上升沿重新初始化计数器,并且产生一个更新寄存
器的信号。
101:门控模式当触发输入(TRGI)为高时,计数器的时钟开启。一旦触发输入变为低,则计
数器停止(但不复位)。计数器的启动和停止都是受控的。
110:触发模式计数器在触发输入TRGI的上升沿启动(不复位),只有计数器的启动是受控
的。
111:外部时钟模式1 – 选中的触发输入(TRGI)的上升沿驱动计数器。
注:如果TI1F_EN被选为触发输入(TS=100)时,不要使用门控模式。这是因为,TI1F_ED在每
TI1F变化时输出一个脉冲,然而门控模式是要检查触发输入的电平。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
74 TIMx内部触发连接
ITR0 (TS=000) ITR1 (TS=001) ITR2 (TS=010) ITR3 (TS=011)
从定时器
TIM1 TIM5 TIM2 TIM3 TIM4
TIM8 TIM1 TIM2 TIM4 TIM5
13.4.4 TIM1 TIM8 DMA/中断使能寄存器(TIMx_DIER)
偏移地址:0x0C
复位值:0x0000
1514131211109876543210
保留 TDE COMDE CC4DE CC3DE CC2DE CC1DE UDE BIE TIE COMIE CC4IE CC3IE CC2IE CC1IE UIE
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 保留,始终读为0
TDE:允许触发DMA请求 (Trigger DMA request enable) 14
0:禁止触发DMA请求;
1:允许触发DMA请求。
COMDE:允许COMDMA请求 (COM DMA request enable) 13
0:禁止COMDMA请求;
1:允许COMDMA请求。
CC4DE:允许捕获/比较4DMA请求 (Capture/Compare 4 DMA request enable) 12
0:禁止捕获/比较4DMA请求;
1:允许捕获/比较4DMA请求。
CC3DE:允许捕获/比较3DMA请求 (Capture/Compare 3 DMA request enable) 11
0:禁止捕获/比较3DMA请求;
1:允许捕获/比较3DMA请求。
CC2DE:允许捕获/比较2DMA请求 (Capture/Compare 2 DMA request enable) 10
0:禁止捕获/比较2DMA请求;
1:允许捕获/比较2DMA请求。
CC1DE:允许捕获/比较1DMA请求 (Capture/Compare 1 DMA request enable) 9
0:禁止捕获/比较1DMA请求;
1:允许捕获/比较1DMA请求。
UDE:允许更新的DMA请求 (Update DMA request enable) 8
0:禁止更新的DMA请求;
1:允许更新的DMA请求。
BIE:允许刹车中断 (Break interrupt enable) 7
0:禁止刹车中断;
1:允许刹车中断。
TIE:触发中断使能 (Trigger interrupt enable) 6
0:禁止触发中断;
1:使能触发中断。
COMIE:允许COM中断 (COM interrupt enable) 5
0:禁止COM中断;
1:允许COM中断。
CC4IE:允许捕获/比较4中断 (Capture/Compare 4 interrupt enable) 4
0:禁止捕获/比较4中断;
1:允许捕获/比较4中断。
237/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
CC3IE:允许捕获/比较3中断 (Capture/Compare 3 interrupt enable) 3
0:禁止捕获/比较3中断;
1:允许捕获/比较3中断。
CC2IE:允许捕获/比较2中断 (Capture/Compare 2 interrupt enable) 2
0:禁止捕获/比较2中断;
1:允许捕获/比较2中断。
CC1IE:允许捕获/比较1中断 (Capture/Compare 1 interrupt enable) 1
0:禁止捕获/比较1中断;
1:允许捕获/比较1中断。
UIE:允许更新中断 (Update interrupt enable) 0
0:禁止更新中断;
1:允许更新中断。
13.4.5 TIM1 TIM8 状态寄存器(TIMx_SR)
偏移地址:0x10
复位值:0x0000
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CC4OF CC3OF CC2OF CC1OF 保留 BIF TIF COMIF CC4IF
CC3IF
CC2IF CC1IF UIF
rc w0 rc w0 rc w0 rc w0 rc w0 rc w0 rc w0 rc w0 rc w0 rc w0 rc w0 rc w0
保留
15:13 保留,始终读为0
CC4OF捕获/比较4重复捕获标记 (Capture/Compare 4 overcapture flag) 12
参见CC1OF描述。
CC3OF捕获/比较3重复捕获标记 (Capture/Compare 3 overcapture flag) 11
参见CC1OF描述。
CC2OF捕获/比较2重复捕获标记 (Capture/Compare 2 overcapture flag) 10
参见CC1OF描述。
CC1OF捕获/比较1重复捕获标记 (Capture/Compare 1 overcapture flag) 9
仅当相应的通道被配置为输入捕获时,该标记可由硬件置1。写0可清除该位。
0:无重复捕获产生;
1:计数器的值被捕获到TIMx_CCR1寄存器时,CC1IF的状态已经为’1’
8 保留,始终读为0
BIF刹车中断标记 (Break interrupt flag) 7
一旦刹车输入有效,由硬件对该位置’1’。如果刹车输入无效,则该位可由软件清’0’
0:无刹车事件产生;
1:刹车输入上检测到有效电平。
TIF触发器中断标记 (Trigger interrupt flag) 6
当发生触发事件(当从模式控制器处于除门控模式外的其它模式时,在TRGI输入端检测到有效
边沿,或门控模式下的任一边沿)时由硬件对该位置’1’。它由软件清’0’
0:无触发器事件产生;
1:触发中断等待响应。
COMIFCOM中断标记 (COM interrupt flag) 5
一旦产生COM事件(当捕获/比较控制位:CCxECCxNEOCxM已被更新)该位由硬件置’1’
它由软件清’0’
0:无COM事件产生;
1COM中断等待响应。
CC4IF捕获/比较4中断标记 (Capture/Compare 4 interrupt flag) 4
参考CC1IF描述。
238/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
CC3IF捕获/比较3中断标记 (Capture/Compare 3 interrupt flag) 3
参考CC1IF描述。
CC2IF捕获/比较2中断标记 (Capture/Compare 2 interrupt flag) 2
参考CC1IF描述。
CC1IF捕获/比较1中断标记 (Capture/Compare 1 interrupt flag) 1
如果通道CC1配置为输出模式:
当计数器值与比较值匹配时该位由硬件置1,但在中心对称模式下除外(参考TIMx_CR1寄存器
CMS)。它由软件清’0’
0:无匹配发生;
1TIMx_CNT的值与TIMx_CCR1的值匹配
TIMx_CCR1的内容大于TIMx_APR的内容时,在向上或向上/下计数模式时计数器溢出,或
向下计数模式时的计数器下溢条件下,CC1IF位变高
如果通道CC1配置为输入模式:
当捕获事件发生时该位由硬件置’1’,它由软件清’0’或通过读TIMx_CCR1’0’
0:无输入捕获产生;
1:计数器值已被捕获(拷贝)TIMx_CCR1(IC1上检测到与所选极性相同的边沿)
UIF更新中断标记 (Update interrupt flag) 0
当产生更新事件时该位由硬件置’1’。它由软件清’0’
0:无更新事件产生;
1:更新中断等待响应。当寄存器被更新时该位由硬件置’1’
TIMx_CR1寄存器的UDIS=0,当重复计数器数值上溢或下溢时(重复计数器=0时产生更
新事件)
TIMx_CR1寄存器的URS=0UDIS=0,当设置TIMx_EGR寄存器的UG=1时产生更新
件,通过软件对计数器CNT重新初始化时。
TIMx_CR1寄存器的URS=0UDIS=0,当计数器CNT被触发事件重新初始化时。(参考
13.4.3: TIM1TIM8从模式控制寄存器(TIMx_SMCR))
13.4.6 TIM1 TIM8 事件产生寄存器(TIMx_EGR)
偏移地址:0x14
复位值:0x0000
1514131211109876543210
BG TG COMG CC4G CC3G CC2G CC1G UG
wwwwwwww
保留
15:8 保留,始终读为0
BG产生刹车事件 (Break generation) 7
该位由软件置’1’,用于产生一个刹车事件,由硬件自动清’0’
0:无动作;
1:产生一个刹车事件。此时MOE=0BIF=1,若开启对应的中断和DMA,则产生相应的中断
DMA
TG产生触发事件 (Trigger generation) 6
该位由软件置’1’,用于产生一个触发事件,由硬件自动清’0’
0:无动作;
1TIMx_SR寄存器的TIF=1,若开启对应的中断和DMA,则产生相应的中断和DMA
COMG捕获/比较事件,产生控制更新 (Capture/Compare control update generation) 5
该位由软件置’1’,由硬件自动清’0’
0:无动作;
1:当CCPC=1,允许更新CCxECCxNEOCxM位。
注:该位只对拥有互补输出的通道有效。
CC4G产生捕获/比较4事件 (Capture/Compare 4 generation) 4
参考CC1G描述。
239/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
CC3G产生捕获/比较3事件 (Capture/Compare 3 generation) 3
参考CC1G描述。
CC2G产生捕获/比较2事件 (Capture/Compare 2 generation) 2
参考CC1G描述。
CC1G产生捕获/比较1事件 (Capture/Compare 1 generation) 1
该位由软件置’1’,用于产生一个捕获/比较事件,由硬件自动清’0’
0:无动作;
1:在通道CC1上产生一个捕获/比较事件:
若通道CC1配置为输出:
设置CC1IF=1,若开启对应的中断和DMA,则产生相应的中断和DMA
若通道CC1配置为输入:
当前的计数器值被捕获至TIMx_CCR1寄存器;设置CC1IF=1,若开启对应的中断和DMA,则
产生相应的中断和DMA。若CC1IF已经为1,则设置CC1OF=1
UG产生更新事件 (Update generation) 0
该位由软件置’1’,由硬件自动清’0’
0:无动作;
1:重新初始化计数器,并产生一个更新事件。注意预分频器的计数器也被清’0’(但是预分频系
数不变)。若在中心对称模式下或DIR=0(向上计数)则计数器被清’0’;若DIR=1(向下计数)则计数
器取TIMx_ARR的值。
13.4.7 TIM1 TIM8 捕获/比较模式寄存器 1(TIMx_CCMR1)
偏移地址:0x18
复位值:0x0000
通道可用于输入(捕获模式)或输出(比较模式),通道的方向由相应的CCxS位定义。该寄存器其
它位的作用在输入和输出模式下不同。OCxx描述了通道在输出模式下的功能ICxx描述了通道
在输入模式下的功能。因此必须注意,同一个位在输出模式和输入模式下的功能是不同的。
1514131211109876543210
OC2CE OC2PE OC2FE OC1CE OC1PE OC1FE
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CC1S[1:0]
IC2F[3:0] IC2PSC[1:0] IC1F[3:0] IC1PSC[1:0]
OC2M[2:0]
CC2S[1:0]
OC1M[2:0]
输出比较模式:
OC2CE:输出比较20使能 (Output Compare 2 clear enable) 15
OC2M[2:0]:输出比较2模式 (Output Compare 2 mode) 14:12
OC2PE:输出比较2预装载使能 (Output Compare 2 preload enable) 11
OC2FE:输出比较2快速使能 (Output Compare 2 fast enable) 10
CC2S[1:0]:捕获/比较2选择。(Capture/Compare 2 selection) 9:8
该位定义通道的方向(输入/输出),及输入脚的选择:
00CC2通道被配置为输出;
01CC2通道被配置为输入,IC2映射在TI2上;
10CC2通道被配置为输入,IC2映射在TI1上;
11CC2通道被配置为输入,IC2映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC2S仅在通道关闭时(TIMx_CCER寄存器的CC2E=0)才是可写的。
OC1CE:输出比较1’0’使能 (Output Compare 1 clear enable) 7
0OC1REF 不受ETRF输入的影响;
1:一旦检测到ETRF输入高电平,清除OC1REF=0
240/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
OC1M[2:0]:输出比较1模式 (Output Compare 1 mode) 6:4
3位定义了输出参考信号OC1REF的动作,而OC1REF决定了OC1OC1N的值。OC1REF
是高电平有效,而OC1OC1N的有效电平取决于CC1PCC1NP位。
000:冻结。输出比较寄存器TIMx_CCR1与计数器TIMx_CNT间的比较对OC1REF不起作用;
001 :匹配时设置通道1有效电平。当计数器TIMx_CNT 的值与捕获/比较寄存器1
(TIMx_CCR1)相同时,强制OC1REF为高。
010 :匹配时设置通道1无效电平。当计数器TIMx_CNT 的值与捕获/比较寄存器1
(TIMx_CCR1)相同时,强制OC1REF为低。
011:翻转。当TIMx_CCR1=TIMx_CNT时,翻转OC1REF的电平。
100:强制为无效电平。强制OC1REF为低。
101:强制为有效电平。强制OC1REF为高。
110PWM模式1 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为
无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否
则为有效电平(OC1REF=1)
111PWM模式2 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为
有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电
平。
1:一旦LOCK级别设为3(TIMx_BDTR寄存器中的LOCK)并且CC1S=00(该通道配置成输
)则该位不能被修改。
2:在PWM模式1PWM模式2中,只有当比较结果改变了或在输出比较模式中从冻结模式
切换到PWM模式时,OC1REF电平才改变。
OC1PE输出比较1预装载使能 (Output Compare 1 preload enable) 3
0:禁止TIMx_CCR1寄存器的预装载功能,可随时写入TIMx_CCR1寄存器,并且新写入的数
值立即起作用。
1:开启TIMx_CCR1寄存器的预装载功能,读写操作仅对预装载寄存器操作,TIMx_CCR1
预装载值在更新事件到来时被加载至当前寄存器中。
1:一旦LOCK级别设为3(TIMx_BDTR寄存器中的LOCK)并且CC1S=00(该通道配置成输
)则该位不能被修改。
2:仅在单脉冲模式下(TIMx_CR1寄存器的OPM=1),可以在未确认预装载寄存器情况下使用
PWM模式,否则其动作不确定。
OC1FE输出比较1 快速使能 (Output Compare 1 fast enable) 2
该位用于加快CC输出对触发输入事件的响应。
0:根据计数器与CCR1的值,CC1正常操作,即使触发器是打开的。当触发器的输入有一个有
效沿时,激活CC1输出的最小延时为5个时钟周期。
1:输入到触发器的有效沿的作用就象发生了一次比较匹配。因此,OC被设置为比较电平而与
比较结果无关。采样触发器的有效沿和CC1输出间的延时被缩短为3个时钟周期。
OCFE只在通道被配置成PWM1PWM2模式时起作用。
CC1S[1:0]:捕获/比较1 选择。(Capture/Compare 1 selection) 1:0
2位定义通道的方向(输入/输出),及输入脚的选择:
00CC1通道被配置为输出;
01CC1通道被配置为输入,IC1映射在TI1上;
10CC1通道被配置为输入,IC1映射在TI2上;
11CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=0)才是可写的。
241/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
输入捕获模式:
IC2F[3:0]:输入捕获2滤波器 (Input capture 2 filter) 15:12
IC2PSC[1:0]:输入/捕获2预分频器 (Input capture 2 prescaler) 11:10
CC2S[1:0]:捕获/比较2选择 (Capture/Compare 2 selection) 9:8
2位定义通道的方向(输入/输出),及输入脚的选择:
00CC2通道被配置为输出;
01CC2通道被配置为输入,IC2映射在TI2上;
10CC2通道被配置为输入,IC2映射在TI1上;
11CC2通道被配置为输入,IC2映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC2S仅在通道关闭时(TIMx_CCER寄存器的CC2E=0)才是可写的。
IC1F[3:0]:输入捕获1滤波器 (Input capture 1 filter) 7:4
这几位定义了TI1输入的采样频率及数字滤波器长度。数字滤波器由一个事件计数器组成,它记
录到N个事件后会产生一个输出的跳变:
0000:无滤波器,以fDTS采样 1000:采样频fSAMPLING=fDTS/8N=6
0001:采样频率fSAMPLING=fCK_INTN=2 1001:采样频fSAMPLING=fDTS/8N=8
0010:采样频率fSAMPLING=fCK_INTN=4 1010:采样频fSAMPLING=fDTS/16N=5
0011:采样频率fSAMPLING=fCK_INTN=8 1011:采样频fSAMPLING=fDTS/16N=6
0100:采样频率fSAMPLING=fDTS/2N=6 1100:采样频fSAMPLING=fDTS/16N=8
0101:采样频率fSAMPLING=fDTS/2N=8 1101:采样频fSAMPLING=fDTS/32N=5
0110:采样频率fSAMPLING=fDTS/4N=6 1110:采样频fSAMPLING=fDTS/32N=6
0111:采样频率fSAMPLING=fDTS/4N=8 1111:采样频fSAMPLING=fDTS/32N=8
IC1PSC[1:0]:输入/捕获1预分频器 (Input capture 1 prescaler) 3:2
2位定义了CC1输入(IC1)的预分频系数。
一旦CC1E=0(TIMx_CCER存器中),则预分频器复位。
00:无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获;
01:每2个事件触发一次捕获;
10:每4个事件触发一次捕获;
11:每8个事件触发一次捕获。
CC1S[1:0]捕获/比较1选择 (Capture/Compare 1 Selection) 1:0
2位定义通道的方向(输入/输出),及输入脚的选择:
00CC1通道被配置为输出;
01CC1通道被配置为输入,IC1映射在TI1上;
10CC1通道被配置为输入,IC1映射在TI2上;
11CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=0)才是可写的。
13.4.8 TIM1 TIM8 捕获/比较模式寄存器 2(TIMx_CCMR2)
偏移地址:0x1C
复位值:0x0000
参看以上CCMR1寄存器的描述
1514131211109876543210
OC4CE OC4PE OC4FE OC3CE OC3PE OC3FE
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CC3S[1:0]
IC4F[3:0] IC4PSC[1:0] IC3F[3:0] IC3PSC[1:0]
OC4M[2:0]
CC4S[1:0]
OC3M[2:0]
242/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
输出比较模式:
OC4CE:输出比较40使能 (Output compare 4 clear enable) 15
OC4M[2:0]:输出比较4模式 (Output compare 4 mode) 14:12
OC4PE:输出比较4预装载使能 (Output compare 4 preload enable) 11
OC4FE:输出比较4快速使能 (Output compare 4 fast enable) 10
CC4S[1:0]:捕获/比较4选择 (Capture/Compare 4 selection) 9:8
2位定义通道的方向(输入/输出),及输入脚的选择:
00CC4通道被配置为输出;
01CC4通道被配置为输入,IC4映射在TI4上;
10CC4通道被配置为输入,IC4映射在TI3上;
11CC4通道被配置为输入,IC4映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC4S仅在通道关闭时(TIMx_CCER寄存器的CC4E=0)才是可写的。
OC3CE:输出比较30使能 (Output compare 3 clear enable) 7
OC3M[2:0]:输出比较3模式 (Output compare 3 mode) 6:4
OC3PE:输出比较3预装载使能 (Output compare 3 preload enable) 3
OC3FE:输出比较3快速使能 (Output compare 3 fast enable) 2
CC3S[1:0]:捕获/比较3选择 (Capture/Compare 3 selection) 1:0
2位定义通道的方向(输入/输出),及输入脚的选择:
00CC3通道被配置为输出;
01CC3通道被配置为输入,IC3映射在TI3上;
10CC3通道被配置为输入,IC3映射在TI4上;
11CC3通道被配置为输入,IC3映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC3S仅在通道关闭时(TIMx_CCER寄存器的CC3E=0)才是可写的。
输入捕获模式:
IC4F[3:0]:输入捕获4滤波器 (Input capture 4 filter) 15:12
IC4PSC[1:0]:输入/捕获4预分频器 (Input capture 4 prescaler) 11:10
CC4S[1:0]:捕获/比较4选择 (Capture/Compare 4 selection) 9:8
2位定义通道的方向(输入/输出),及输入脚的选择:
00CC4通道被配置为输出;
01CC4通道被配置为输入,IC4映射在TI4上;
10CC4通道被配置为输入,IC4映射在TI3上;
11CC4通道被配置为输入,IC4映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC4S仅在通道关闭时(TIMx_CCER寄存器的CC4E=0)才是可写的。
IC3F[3:0]:输入捕获3滤波器 (Input capture 3 filter) 7:4
IC3PSC[1:0]:输入/捕获3预分频器 (Input capture 3 prescaler) 3:2
CC3S[1:0]:捕获/比较3选择 (Capture/compare 3 selection) 1:0
2位定义通道的方向(输入/输出),及输入脚的选择:
00CC3通道被配置为输出;
01CC3通道被配置为输入,IC3映射在TI3上;
10CC3通道被配置为输入,IC3映射在TI4上;
11CC3通道被配置为输入,IC3映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC3S仅在通道关闭时(TIMx_CCER寄存器的CC3E=0)才是可写的。
243/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
13.4.9 TIM1 TIM8 捕获/比较使能寄存器(TIMx_CCER)
偏移地址:0x20
复位值:0x0000
1514131211109876543210
CC4P CC4E CC3NP CC3NE CC3P CC3E CC2NP CC2NE CC2P CC2E CC1NP CC1NE CC1P CC1E
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
15:14 保留,始终读为0
CC4P:输入/捕获4输出极性 (Capture/Compare 4 output polarity) 13
参考CC1P的描述。
CC4E:输入/捕获4输出使能 (Capture/Compare 4 output enable) 12
参考CC1E 的描述。
CC3NP:输入/捕获3互补输出极性 (Capture/Compare 3 complementary output polarity) 11
参考CC1NP的描述。
CC3NE:输入/捕获3互补输出使能 (Capture/Compare 3 complementary output enable) 10
参考CC1NE的描述。
CC3P:输入/捕获3输出极性 (Capture/Compare 3 output polarity) 9
参考CC1P的描述。
CC3E:输入/捕获3输出使能 (Capture/Compare 3 output enable) 8
参考CC1E 的描述。
CC2NP:输入/捕获2互补输出极性 (Capture/Compare 2 complementary output polarity) 7
参考CC1NP的描述。
CC2NE:输入/捕获2互补输出使能 (Capture/Compare 2 complementary output enable) 6
参考CC1NE的描述。
CC2P:输入/捕获2输出极性 (Capture/Compare 2 output polarity) 5
参考CC1P的描述。
CC2E:输入/捕获2输出使能 (Capture/Compare 2 output enable) 4
参考CC1E的描述。
CC1NP:输入/捕获1互补输出极性 (Capture/Compare 1 complementary output polarity) 3
0OC1N高电平有效;
1OC1N低电平有效。
注:一旦LOCK级别(TIMx_BDTR寄存器中的LOCK)设为32CC1S=00(通道配置为输出)
则该位不能被修改。
CC1NE:输入/捕获1互补输出使能 (Capture/Compare 1 complementary output enable) 2
0:关闭- OC1N禁止输出,因此OC1N的电平依赖于MOEOSSIOSSROIS1OIS1N
CC1E位的值。
1:开启- OC1N信号输出到对应的输出引脚,其输出电平依赖于MOEOSSIOSSR
OIS1OIS1NCC1E位的值。
CC1P:输入/捕获1输出极性 (Capture/Compare 1 output polarity) 1
CC1通道配置为输出
0OC1高电平有效;
1OC1低电平有效。
CC1通道配置为输入
该位选择是IC1还是IC1的反相信号作为触发或捕获信号。
0:不反相:捕获发生在IC1的上升沿;当用作外部触发器时,IC1不反相。
1:反相:捕获发生在IC1的下降沿;当用作外部触发器时,IC1反相。
注:一旦LOCK级别(TIMx_BDTR寄存器中的LOCK)设为32,则该位不能被修改。
244/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
CC1E输入/捕获1输出使能 (Capture/Compare 1 output enable) 0
CC1通道配置为输出:
0 关闭- OC1禁止输出,因此OC1的输出电平依赖于MOEOSSIOSSROIS1OIS1N
CC1NE位的值。
1 开启- OC1信号输出到对应的输出引脚,其输出电平依赖于MOEOSSIOSSR
OIS1OIS1NCC1NE位的值。
CC1通道配置为输入:
该位决定了计数器的值是否能捕获入TIMx_CCR1寄存器。
0:捕获禁止;
0:捕获使能。
75 带刹车功能的互补输出通道OCxOCxN的控制位
输出状态(1) 控制位
MOE OSSI OSSR CCxE CCxNE OCx 输出状态 OCxN 输出状态
245/754
0 0 0
输出禁止(与定时器断开) 输出禁止(与定时器断开)
OCx=0OCx_EN=0 OCxN=0OCxN_EN=0
OCxREF + 极性,
0 0 1
输出禁止(与定时器断开) OCxN= OCxREF xor CCxNP
OCx=0OCx_EN=0 OCxN_EN=1
OCxREF + 极性, 输出禁止(与定时器断开)
0 1 0
OCx= OCxREF xor CCxPOCxN=0OCxN_EN=0
OCx_EN=1
0 1 1
OCxREF + 极性 + 死区, OCxREF反相 + 极性 + 死区
OCx_EN=1 OCxN_EN=1
1 0 0
输出禁止(与定时器断开)
OCx=CCxPOCx_EN=0
输出禁止(与定时器断开)
OCxN=CCxNPOCxN_EN=0
1 X
OCxREF + 极性,
1 0 1
关闭状态(输出使能且为无效
电平) OCxN= OCxREF xor CCxNP
OCx=CCxPOCx_EN=1 OCxN_EN=1
OCxREF + 极性, 关闭状态(输出使能且为无效电
)
1 1 0
OCx= OCxREF xor CCxP
OCxN=CCxNPOCxN_EN=1
OCx_EN=1
1 1 1
OCxREF + 极性 + 死区, OCxREF反相 + 极性 + 死区
OCx_EN=1 OCxN_EN=1
0 0 0
输出禁止(与定时器断开)
0 0 1
0 1 0
异步地:OCx=CCxP OCx_EN=0 OCxN=CCxNP
OCxN_EN=0
0 1 1
若时钟存在:经过一个死区时间后OCx=OISx
OCxN=OISxN,假设OISxOISxN并不都对应OCxOCxN
有效电平。
1 0 0
0 X 关闭状态(输出使能且为无效电平)
1 0 1
1 1 0
异步地:OCx=CCxP OCx_EN=1 OCxN=CCxNP
OCxN_EN=1
1 1 1
若时钟存在:经过一个死区时间后OCx=OISx
OCxN=OISxN,假设OISxOISxN并不都对应OCxOCxN
有效电平。
1. 如果一个通道的2个输出都没有使用(CCxE = CCxNE = 0),那么OISx, OISxN, CCxPCCxNP都必须清零。
注:
引脚连接到互补的
OCx
OCxN
通道的外部
I/O
引脚的状态,取决于
OCx
OCxN
通道状态和
GPIO
以及
AFIO
寄存器。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
13.4.10 TIM1 TIM8 计数器(TIMx_CNT)
偏移地址:0x24
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CNT[15:0]
CNT[15:0]:计数器的值 (Counter value) 15:0
13.4.11 TIM1 TIM8 预分频器(TIMx_PSC)
偏移地址:0x28
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
PSC[15:0]
PSC[15:0]:预分频器的值 (Prescaler value) 15:0
计数器的时钟频率(CK_CNT)等于fCK_PSC/( PSC[15:0]+1)
PSC包含了每次当更新事件产生时,装入当前预分频器寄存器的值;更新事件包括计数器被
TIM_EGRUG位清’0’或被工作在复位模式的从控制器清’0’
13.4.12 TIM1 TIM8 自动重装载寄存器(TIMx_ARR)
偏移地址:0x2C
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
ARR[15:0]
ARR[15:0]: 自动重装载的值 (Prescaler value) 15:0
ARR包含了将要装载入实际的自动重装载寄存器的值。
246/754
详细参考13.3.1节:有关ARR的更新和动作。
当自动重装载的值为空时,计数器不工作。
13.4.13 TIM1 TIM8 重复计数寄存器(TIMx_RCR)
偏移地址:0x30
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw
保留 REP[7:0]
15:8 保留,始终读为0
REP[7:0]: 重复计数器的值 (Repetition counter value) 7:0
开启了预装载功能后,这些位允许用户设置比较寄存器的更新速率(即周期性地从预装载寄存器
传输到当前寄存器);如果允许产生更新中断,则会同时影响产生更新中断的速率。
每次向下计数器REP_CNT达到0,会产生一个更新事件并且计数REP_CNT重新从REP值开
始计数。由于REP_CNT只有在周期更新事件U_RC发生时才重载REP值,因此对TIMx_RCR
存器写入的新值只在下次周期更新事件发生时才起作用。
这意味着在PWM模式中,(REP+1)对应着:
- 在边沿对齐模式下,PWM周期的数目;
- 在中心对称模式下,PWM半周期的数目;
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
13.4.14 TIM1 TIM8 捕获/比较寄存器 1(TIMx_CCR1)
偏移地址:0x34
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CCR1[15:0]
CCR1[15:0]: 捕获/比较通道1的值 (Capture/Compare 1 value) 15:0
CC1通道配置为输出:
CCR1包含了装入当前捕获/比较1寄存器的值(预装载值)
如果在TIMx_CCMR1寄存器(OC1PE)中未选择预装载功能,写入的数值会立即传输至当前寄
存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较1寄存器中。
当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC1端口上产生输出信号。
CC1通道配置为输入:
CCR1包含了由上一次输入捕获1事件(IC1)传输的计数器值。
13.4.15 TIM1 TIM8 捕获/比较寄存器 2(TIMx_CCR2)
偏移地址:0x38
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CCR2[15:0]
CCR2[15:0]: 捕获/比较通道2的值 (Capture/Compare 2 value) 15:0
CC2通道配置为输出:
CCR2包含了装入当前捕获/比较2寄存器的值(预装载值)
如果在TIMx_CCMR2寄存器(OC2PE)中未选择预装载特性,写入的数值会立即传输至当前寄
存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较2寄存器中。
当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC2端口上产生输出信号。
CC2通道配置为输入:
CCR2包含了由上一次输入捕获2事件(IC2)传输的计数器值。
13.4.16 TIM1 TIM8 捕获/比较寄存器 3(TIMx_CCR3)
偏移地址:0x3C
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CCR3[15:0]
CCR3[15:0]: 捕获/比较通道3的值 (Capture/Compare 3 value) 15:0
CC3通道配置为输出:
CCR3包含了装入当前捕获/比较3寄存器的值(预装载值)
如果在TIMx_CCMR3寄存器(OC3PE)中未选择预装载特性,写入的数值会立即传输至当前寄
存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较3寄存器中。
当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC3端口上产生输出信号。
CC3通道配置为输入:
CCR3包含了由上一次输入捕获3事件(IC3)传输的计数器值。
247/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
13.4.17 TIM1 TIM8 捕获/比较寄存器(TIMx_CCR4)
偏移地址:0x40
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CCR4[15:0]
CCR4[15:0]: 捕获/比较通道4的值 (Capture/Compare 4 value) 15:0
CC4通道配置为输出:
CCR4包含了装入当前捕获/比较4寄存器的值(预装载值)
如果在TIMx_CCMR4寄存器(OC4PE)中未选择预装载特性,写入的数值会立即传输至当前寄
存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较4寄存器中。
当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC4端口上产生输出信号。
CC4通道配置为输入:
CCR4包含了由上一次输入捕获4事件(IC4)传输的计数器值。
13.4.18 TIM1 TIM8 刹车和死区寄存器(TIMx_BDTR)
偏移地址:0x44
复位值:0x0000
1514131211109876543210
MOE AOE BKP BKE OSSR OSSI
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
LOCK[1:0] DTG[7:0]
注释:
根据锁定设置,
AOE
BKP
BKE
OSSI
OSSR
DTG[7:0]
位均可被写保护,有必要在第一
次写入
TIMx_BDTR
寄存器时对它们进行配置。
MOE: 主输出使能 (Main output enable) 15
一旦刹车输入有效,该位被硬件异步清’0’。根据AOE的设置值,该位可以由软件清’0’或被自
动置1。它仅对配置为输出的通道有效。
0:禁止OCOCN输出或强制为空闲状态;
1:如果设置了相应的使能位(TIMx_CCER寄存器的CCxECCxNE),则开启OCOCN
出。
有关OC/OCN使能的细节,参见13.4.9 TIM1TIM8捕获/比较使能寄存器(TIMx_CCER) 节,
AOE: 自动输出使能 (Automatic output enable) 14
0MOE只能被软件置’1’
1MOE能被软件置’1’或在下一个更新事件被自动置’1’(如果刹车输入无效)
注:一旦LOCK级别(TIMx_BDTR寄存器中的LOCK)设为’1’,则该位不能被修改。
BKP: 刹车输入极性 (Break polarity) 13
0:刹车输入低电平有效;
1:刹车输入高电平有效。
注:一旦LOCK级别(TIMx_BDTR寄存器中的LOCK)设为’1’,则该位不能被修改。
注:任何对该位的写操作都需要一个APB时钟的延迟以后才能起作用。
BKE: 刹车功能使能 (Break enable) 12
0:禁止刹车输入(BRKCCS时钟失效事件)
1:开启刹车输入(BRKCCS时钟失效事件)
注:当设置了LOCK级别1(TIMx_BDTR寄存器中的LOCK),该位不能被修改。
注:任何对该位的写操作都需要一个APB时钟的延迟以后才能起作用。
248/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
OSSR: 运行模式下“关闭状态”选择 (Off-state selection for Run mode) 11
该位用于当MOE=1且通道为互补输出时。没有互补输出的定时器中不存在OSSR位。
参考OC/OCN使能的详细说明(13.4.9
249/754
节,TIM1TIM8捕获/比较使能寄存器(TIMx_CCER))
0:当定时器不工作时,禁止OC/OCN输出(OC/OCN使能输出信号=0)
1:当定时器不工作时,一旦CCxE=1CCxNE=1,首先开启OC/OCN并输出无效电平,然后
OC/OCN使能输出信号=1
注:一旦LOCK级别(TIMx_BDTR寄存器中的LOCK)设为2,则该位不能被修改。
OSSI: 空闲模式下“关闭状态”选择 (Off-state selection for Idle mode) 10
该位用于当MOE=0且通道设为输出时。
参考OC/OCN使能的详细说明(13.4.9节,TIM1TIM8捕获/比较使能寄存器(TIMx_CCER))
0:当定时器不工作时,禁止OC/OCN输出(OC/OCN使能输出信号=0)
1:当定时器不工作时,一旦CCxE=1CCxNE=1OC/OCN首先输出其空闲电平,然后
OC/OCN使能输出信号=1
注:一旦LOCK级别(TIMx_BDTR寄存器中的LOCK)设为2,则该位不能被修改。
LOOK[1:0]: 锁定设置 (Lock configuration) 9:8
该位为防止软件错误而提供写保护。
00:锁定关闭,寄存器无写保护;
01:锁定级别1,不能写入TIMx_BDTR寄存器的DTGBKEBKPAOE位和TIMx_CR2寄存
器的OISx/OISxN位;
10:锁定级别2,不能写入锁定级1中的各位,也不能写入CC极性位(一旦相关通道通过
CCxS位设为输出,CC极性位TIMx_CCER寄存器的CCxP/CCNxP)以及OSSR/OSSI位;
11:锁定级别3,不能写入锁定级2中的各位,也不能写入CC控制位(一旦相关通道通过
CCxS位设为输出,CC控制位TIMx_CCMRx寄存器的OCxM/OCxPE)
注:在系统复位后,只能写一次LOCK位,一旦写入TIMx_BDTR寄存器,则其内容冻结直至复
位。
UTG[7:0]: 死区发生器设置 (Dead-time generator setup) 7:0
这些位定义了插入互补输出之间的死区持续时间。假设DT表示其持续时间:
DTG[7:5]=0xx => DT=DTG[7:0] × TdtgTdtg = TDTS
DTG[7:5]=10x => DT=(64+DTG[5:0]) × TdtgTdtg = 2 × TDTS
DTG[7:5]=110 => DT=(32+DTG[4:0]) × TdtgTdtg = 8 × TDTS
DTG[7:5]=111 => DT=(32+DTG[4:0])× TdtgTdtg = 16 × TDTS
例:若TDTS = 125ns(8MHZ),可能的死区时间为:
015875ns,若步长时间为125ns
16us31750ns,若步长时间为250ns
32us63us,若步长时间为1us
64us126us,若步长时间为2us
注:一旦LOCK级别(TIMx_BDTR寄存器中的LOCK)设为123,则不能修改这些位。
13.4.19 TIM1 TIM8 DMA控制寄存器(TIMx_DCR)
偏移地址:0x48
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw
保留 DBL[4:0] 保留 DBA[4:0]
15:13 保留,始终读为0
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
DBL[4:0]: DMA连续传送长度 (DMA burst length) 12:8
这些位定义了DMA在连续模式下的传送长度(当对TIMx_DMAR寄存器进行读或写时,定时器则
进行一次连续传送),即:定义传输的次数,传输可以是半字(双字节)或字节:
000001次传输 000012次传输
......
000103次传输
...... 1000118次传输
例:我们考虑这样的传输:DBL=7DBA=TIM2_CR1
- 如果DBL=7DBA=TIM2_CR1表示待传输数据的地址,那么传输的地址由下式给出:
(TIMx_CR1的地址) + DBA + (DMA索引), 其中 DMA索引 = DBL
其中(TIMx_CR1的地址) + DBA再加上7,给出了将要写入或者读出数据的地址,这样数据的传
输将发生在从地址(TIMx_CR1的地址) + DBA开始的7个寄存器。
根据DMA数据长度的设置,可能发生以下情况:
- 如果设置数据为半字(16),那么数据就会传输给全部7个寄存器。
- 如果设置数据为字节,数据仍然会传输给全部7个寄存器:第一个寄存器包含第一个MSB
节,第二个寄存器包含第一个LSB字节,以此类推。因此对于定时器,用户必须指定由DMA
输的数据宽度。
7:5 保留,始终读为0
DBA[4:0]: DMA基地址 (DMA base address) 4:0
这些位定义了DMA在连续模式下的基地址(当对TIMx_DMAR寄存器进行读或写时)DBA定义
为从TIMx_CR1寄存器所在地址开始的偏移量:
00000TIMx_CR1
00001TIMx_CR2
00010TIMx_SMCR
......
13.4.20 TIM1 TIM8 连续模式的DMA地址(TIMx_DMAR)
偏移地址:0x4C
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
DMAB[15:0]
DMAB[15:0]: DMA连续传送寄存器 (DMA register for burst accesses) 15:0
TIMx_DMAR寄存器的读或写会导致对以下地址所在寄存器的存取操作:
TIMx_CR1地址 + DBA + DMA索引,其中:
TIMx_CR1地址”是控制寄存器1(TIMx_CR1)所在的地址;
DBA”是TIMx_DCR寄存器中定义的基地址;
DMA索引”是由DMA自动控制的偏移量,它取决于TIMx_DCR寄存器中定义的DBL
250/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
13.4.21 TIM1 TIM8 寄存器图
下表中将TIM1TIM8的所有寄存器映射到一个16位可寻址(编址)空间。
76 TIM1TIM8 – 寄存器图和复位值
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
TIMx_CR1
ARPE
DIR
OPM
URS
UDIS
CEN
复位值
0000000000
TIMx_CR2
OIS4
OIS3N
OIS3
OIS2N
OIS2
OIS1N
OIS1
TI1S
CCDS
CCUS
CCPC
复位值
0000000000000 0
TIMx_SMCR
ETP
ECE
MSM
复位值
000000000000 000
TIMx_DIER
TDE
COMDE
CC4DE
CC3DE
CC2DE
CC1DE
UDE
BIE
TIE
COMIE
CC4IE
CC3IE
CC2IE
CC1IE
UIE
复位值
000000000000000
TIMx_SR
CC4OF
CC3OF
CC2OF
CC1OF
BIF
TIF
COMIF
CC4IF
CC3IF
CC2IF
CC1IF
UIF
复位值
0000 00000000
TIMx_EGR
BG
TG
COM
CC4G
CC3G
CC2G
CC1G
UG
复位值
00000000
TIMx_CCMR1
输出比较模式
OC2CE
OC2PE
OC2FE
OC1CE
OC1PE
OC1FE
复位值
0000000000000000
TIMx_CCMR1
输入捕获模式
复位值
0000000000000000
TIMx_CCMR2
输出比较模式
OC4CE
OC4PE
OC4FE
OC3CE
OC3PE
OC3FE
复位值
0000000000000000
TIMx_CCMR2
输入捕获模式
复位值
0000000000000000
TIMx_CCER
CC4P
CC4E
CC3NP
CC3NE
CC3P
CC3E
CC2NP
CC2NE
CC2P
CC2E
CC1NP
CC1NE
CC1P
CC1E
020h
保留
000h
保留
004h
014h
010h
保留
CKD
[1:0]
00Ch
008h
IC3
PSC
[1:0]
保留
保留
保留
ETPS
[1:0]
EFT[3:0] TS
[2:0]
CC3S
[1:0]
018h
CC4S
[1:0]
CMS
[1:0]
保留
MMS
[2:0]
CC3S
[1:0]
保留
IC3F
[3:0]
SMS
[2:0]
01Ch
保留
OC4M
[2:0]
OC3M
[2:0]
保留
IC4F
[3:0]
IC4
PSC
[1:0]
保留
保留
CC2S
[1:0]
OC1M
[2:0]
保留
OC2M
[2:0]
CC4S
[1:0]
CC1S
[1:0]
保留
IC2F
[3:0]
IC2
PSC
[1:0]
CC2S
[1:0]
IC1F
[3:0]
IC1
PSC
[1:0]
CC1S
[1:0]
复位值
00000000000000
TIMx_CNT
复位值
0000000000000000
TIMx_PSC
复位值
0000000000000000
028h
保留
保留
CNT[15:0]
PSC[15:0]
024h
251/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
高级控制定时器(TIM1TIM8) STM32F10xxx参考手册
252/754
参照200912 RM0008 Reference Manual 英文第10
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
TIMx_ARR
复位值
0000000000000000
TIMx_RCR
复位值
00000000
TIMx_CCR1
复位值
0000000000000000
TIMx_CCR2
复位值
0000000000000000
TIMx_CCR3
复位值
0000000000000000
TIMx_CCR4
复位值
0000000000000000
038h
034h
02Ch
030h
CCR1[15:0]
保留
保留
保留
CCR2[15:0]
保留
保留
ARR[15:0]
保留
REP[7:0]
CCR3[15:0]
CCR4[15:0]
044h
DT[7:0]
保留
LOCK
[1:0]
040h
03Ch
TIMx_BDTR
MOE
AOE
BKP
BKE
OSSR
OSSI
复位值
0000000000000000
TIMx_DCR
复位值
00000 00000
TIMx_DMAR
复位值
0000000000000000
044h
048h DBA[4:0]
DT[7:0]
保留
LOCK
[1:0]
04Ch
保留
DBL[4:0] 保留
DMAB[15:0]
保留
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
关于寄存器的起始地址,请参见表1
通用定时器(TIMx) STM32F10xxx参考手册
14 通用定时器(TIMx)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
14.1 TIMx简介
通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。
它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和
PWM)
使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个
毫秒间调整。
14.3.15每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作,参见
节。
14.2 TIMx主要功能
通用TIMx (TIM2TIM3TIM4TIM5)定时器功能包括:
16位向上、向下、向上/向下自动装载计数器
16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为165536之间的任意
数值
4个独立通道:
输入捕获
输出比较
PWM生成(边缘或中间对齐模式)
单脉冲模式输出
使用外部信号控制定时器和定时器互连的同步电路
如下事件发生时产生中断/DMA
更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
输入捕获
输出比较
支持针对定位的增量(正交)编码器和霍尔传感器电路
触发输入作为外部时钟或者按周期的电流管理
253/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
98 通用定时器框图
注:
根据控制位的设定,在
U
事件时传送预加载寄存器的内容至工作寄存器
事件
中断和
DMA
输出
14.3 TIMx功能描述
14.3.1 时基单元
可编程通用定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。这个计数器可
以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。
计数器、自动装载寄存器和预分频器寄存器可以由软件读写,在计数器运行时仍可以读写。
时基单元包含:
计数器寄存器(TIMx_CNT)
预分频器寄存器 (TIMx_PSC)
自动装载寄存器 (TIMx_ARR)
自动装载寄存器是预先装载的,写或读自动重装载寄存器将访问预装载寄存器。根据在
TIMx_CR1寄存器中的自动装载预装载使能位(ARPE)的设置,预装载寄存器的内容被立即或
每次的更新事件UEV时传送到影子寄存器。当计数器达到溢出条(向下计数时的下溢条)并当
TIMx_CR1寄存器中UDIS位等于’0’时,产生更新事件。更新事件也可以由软件产生。随后会
详细描述每一种配置下更新事件的产生。
254/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
计数器由预分频器的时钟输出CK_CNT驱动,仅当设置了计数器TIMx_CR1寄存器中的计数器使
能位(CEN)时,CK_CNT才有效。(有关计数器使能的细节,请参见控制器的从模式描述)
注:真正的计数器使能信号CNT_EN是在CEN的一个时钟周期后被设置。
预分频器描述
预分频器可以将计数器的时钟频率按165536之间的任意值分频。它是基于一个(TIMx_PSC
寄存器中的)16位寄存器控制的16位计数器。这个控制寄存器带有缓冲器,它能够在工作时被改
变。新的预分频器参数在下一次更新事件到来时被采用。
99
255/754
和图100给出了在预分频器运行时,更改计数器参数的例子。
99 当预分频器的参数从1变到2时,计数器的时序图
100 当预分频器的参数从1变到4时,计数器的时序图
14.3.2 计数器模式
向上计数模式
在向上计数模式中,计数器从0计数到自动加载(TIMx_ARR计数器的内容),然后重新从0开始
计数并且产生一个计数器溢出事件。
每次计数器溢出时可以产生更新事件,在TIMx_EGR寄存器中(通过软件方式或者使用从模式控
制器)设置UG位也同样可以产生一个更新事件。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
设置TIMx_CR1寄存器中的UDIS位,可以禁止更新事件;这样可以避免在向预装载寄存器中写
入新值时更新影子寄存器。在UDIS位被清’0’之前,将不产生更新事件。但是在应该产生更新事
件时,计数器仍会被清’0’,同时预分频器的计数也被请0(但预分频系数不变)。此外,如果设置
TIMx_CR1寄存器中的URS(选择更新请求),设置UG位将产生一个更新事件UEV,但硬件
不设置UIF标志(即不产生中断或DMA请求);这是为了避免在捕获模式下清除计数器时,同时产
生更新和捕获中断。
当发生一个更新事件时,所有的寄存器都被更新,硬件同时(依据URS)设置更新标志位
(TIMx_SR寄存器中的UIF)
预分频器的缓冲区被置入预装载寄存器的值(TIMx_PSC寄存器的内容)
自动装载影子寄存器被重新置入预装载寄存器的值(TIMx_ARR)
下图给出一些例子,当TIMx_ARR=0x36时计数器在不同时钟频率下的动作。
101 计数器时序图,内部时钟分频因子为1
102 计数器时序图,内部时钟分频因子为2
256/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
103 计数器时序图,内部时钟分频因子为4
104 计数器时序图,内部时钟分频因子为N
105 计数器时序图,当ARPE=0时的更新事件(TIMx_ARR没有预装入)
257/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
106 计数器时序图,当ARPE=1时的更新事件(预装入了TIMx_ARR)
向下计数模式
数器从自动装入的值(TIMx_ARR计数器的)开始向下计数到0,然后从自动
器中(通过软件方式或者使用从模式控
。这样可以避免向预装载寄存器中写入新值
一个更新事
更新,并且(根据URS位的设置)更新标志位(TIMx_SR
预装载寄存器的值(TIMx_PSC寄存器的值)
注:自动装载在计
以下 操作例子。
在向下模式中,计
装入的值重新开始并且产生一个计数器向下溢出事件。
每次计数器溢出时可以产生更新事件,在TIMx_EGR寄存
制器)设置UG位,也同样可以产生一个更新事件。
设置TIMx_CR1寄存器的UDIS位可以禁止UEV
时更新影子寄存器。因此UDIS位被清为’0’之前不会产生更新事件。然而,计数器仍会从当前自
动加载值重新开始计数,同时预分频器的计数器重新从0开始(但预分频系数不变)
此外,如果设置了TIMx_CR1寄存器中的URS(选择更新请求) ,设置UG位将产生
UEV但不设置UIF标志(因此不产生中断和DMA请求)这是为了避免在发生捕获事件并清除计
数器时,同时产生更新和捕获中断。
当发生更新事件时,所有的寄存器都被
存器中的UIF)也被设置。
预分频器的缓存器被置入
当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)
数器重载入之前被更新,因此下一个周期将是预期的值。
是一些当TIMx_ARR=0x36时,计数器在不同时钟频率下的
258/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
107 计数器时序图,内部时钟分频因子为1
108 计数器时序图,内部时钟分频因子为2
109 计数器时序图,内部时钟分频因子为4
259/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
110 计数器时序图,内部时钟分频因子为N
111 计数器时序图,当没有使用重复计数器时的更新事件
中央对齐模式(向上/向下计数)
在中央对齐模式,计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)1,产生一个计数器
溢出事件,然后向下计数到1并且产生一个计数器下溢事件;然后再从0开始重新计数。
在这个模式,不能写入TIMx_CR1中的DIR方向位。它由硬件更新并指示当前的计数方向。
可以在每次计数上溢和每次计数下溢时产生更新事件;也可以通过(软件或者使用从模式控制)
设置TIMx_EGR寄存器中UG位产生更新事件。然后,计数器重新从0开始计数,预分频器也
重新从0开始计数。
设置TIMx_CR1寄存器中的UDIS位可以禁止UEV事件。这样可以避免在向预装载寄存器中写入
新值时更新影子寄存器。因此UDIS位被清为’0’之前不会产生更新事件。然而,计数器仍会根据
当前自动重加载的值,继续向上或向下计数。
此外,如果设置了TIMx_CR1寄存器中的URS(选择更新请求) ,设置UG位将产生一个更新事
UEV但不设置UIF标志(因此不产生中断和DMA请求)这是为了避免在发生捕获事件并清除计
数器时,同时产生更新和捕获中断。
当发生更新事件时,所有的寄存器都被更新,并且(根据URS位的设置)更新标志位(TIMx_SR
存器中的UIF)也被设置。
预分频器的缓存器被加载为预装载(TIMx_PSC寄存器)的值。
260/754
当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)。注:如果因为计数
器溢出而产生更新,自动重装载将在计数器重载入之前被更新,因此下一个周期将是预期
的值(计数器被装载为新的值)
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
以下是一些计数器在不同时钟频率下的操作的例子:
112 计数器时序图,内部时钟分频因子为1TIMx_ARR=0x6
261/754
1.这里使用了中心对齐模式1(详见14.4.1)
113 计数器时序图,内部时钟分频因子为2
114 计数器时序图,内部时钟分频因子为4TIMx_ARR=0x36
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
115 计数器时序图,内部时钟分频因子为N
116 计数器时序图,ARPE=1时的更新事件(计数器下溢)
262/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
117 计数器时序图,ARPE=1时的更新事件(计数器溢出)
14.3.3 时钟选择
计数器时钟可由下列时钟源提供:
内部时钟(CK_INT)
外部时钟模式1:外部输入脚(TIx)
外部时钟模式2:外部触发输入(ETR)
内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时
Timer1而作为另一个定时器Timer2的预分频器。参见14.3.15
内部时钟源(CK_INT)
如果禁止了从模式控制(TIMx_SMCR寄存器的SMS=000),则CENDIR(TIMx_CR1寄存器)
UG(TIMx_EGR寄存器)是事实上的控制位,并且只能被软件修改(UG位仍被自动清除)。只
CEN位被写成’1’,预分频器的时钟就由内部时钟CK_INT提供。
下图显示了控制电路和向上计数器在一般模式下,不带预分频器时的操作。
118 一般模式下的控制电路,内部时钟分频因子为1
外部时钟源模式1
TIMx_SMCR寄存器的SMS=111时,此模式被选中。计数器可以在选定输入端的每个上升沿
或下降沿计数。
263/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
119 TI2外部时钟连接例子
例如,要配置向上计数器在T12输入端的上升沿计数,使用下列步骤:
1. 配置TIMx_CCMR1寄存器CC2S=’01’,配置通道2检测TI2输入的上升沿
2. 配置TIMx_CCMR1寄存器的IC2F[3:0],选择输入滤波器带宽(如果不需要滤波器,保持
IC2F=0000)
注:
捕获预分频器不用作触发,所以不需要对它进行配置
3. 配置TIMx_CCER寄存器的CC2P=’0’,选定上升沿极性
4. 配置TIMx_SMCR寄存器的SMS=’111’,选择定时器外部时钟模式1
5. 配置TIMx_SMCR寄存器中的TS=’110’,选定TI2作为触发输入源
6. 设置TIMx_CR1寄存器的CEN=’1’,启动计数器
当上升沿出现在TI2,计数器计数一次,且TIF标志被设置。
TI2的上升沿和计数器实际时钟之间的延时,取决于在TI2输入端的重新同步电路。
120 外部时钟模式1下的控制电路
外部时钟源模式2
选定此模式的方法为:令TIMx_SMCR寄存器中的ECE=1
计数器能够在外部触发ETR的每一个上升沿或下降沿计数。
下图是外部触发输入的框图
264/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
121 外部触发输入框图
例如,要配置在ETR下每2个上升沿计数一次的向上计数器,使用下列步骤:
1. 本例中不需要滤波器,置TIMx_SMCR寄存器中的ETF[3:0]=0000
2. 设置预分频器,置TIMx_SMCR寄存器中的ETPS[1:0]=01
3. 设置在ETR的上升沿检测,置TIMx_SMCR寄存器中的ETP=0
4. 开启外部时钟模式2,置TIMx_SMCR寄存器中的ECE=1
5. 启动计数器,置TIMx_CR1寄存器中的CEN=1
计数器在每2ETR上升沿计数一次。
ETR的上升沿和计数器实际时钟之间的延时取决于在ETRP信号端的重新同步电路。
122 外部时钟模式2下的控制电路
14.3.4 捕获/比较通道
每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器),包括捕获的输入部分
(数字滤波、多路复用和预分频器),和输出部分(比较器和输出控制)
下面几张图是一个捕获/比较通道概览。
输入部分对相应的TIx输入信号采样,并产生一个滤波后的信号TIxF。然后,一个带极性选择
边缘检测器产生一个信号(TIxFPx),它可以作为从模式控制器的输入触发或者作为捕获控制。该
信号通过预分频进入捕获寄存器(ICxPS)
265/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
123/比较通道(如:通道1输入部分)
输出部分产生一个中间波形OCxRef(高有效)作为基准,链的末端决定最终输出信号的极性。
124/比较通道1的主电路
125/比较通道的输出部分(通道1)
捕获/比较模块由一个预装载寄存器和一个影子寄存器组成。读写过程仅操作预装载寄存器。
266/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。
在比较模式下,预装载寄存器的内容被复制到影子寄存器中,然后影子寄存器的内容和计数器
进行比较。
14.3.5 输入捕获模式
在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄
(TIMx_CCRx)中。当捕获事件发生时,相应的CCxIF标志(TIMx_SR寄存器)被置’1’,如果使能
了中断或者DMA操作,则将产生中断或者DMA操作。如果捕获事件发生时CCxIF标志已经为
高,那么重复捕获标志CCxOF(TIMx_SR寄存器)被置’1’。写CCxIF=0可清除CCxIF,或读取存
储在TIMx_CCRx寄存器中的捕获数据也可清除CCxIF。写CCxOF=0可清除CCxOF
以下例子说明如何在TI1输入的上升沿时捕获计数器的值到TIMx_CCR1寄存器中,步骤如下:
选择有效输入端:TIMx_CCR1必须连接到TI1输入,所以写入TIMx_CCR1寄存器中的
CC1S=01,只要CC1S不为’00’,通道被配置为输入,并且TM1_CCR1寄存器变为只读。
根据输入信号的特点,配置输入滤波器为所需的带宽(即输入为TIx时,输入滤波器控制位是
TIMx_CCMRx寄存器中的ICxF)。假设输入信号在最多5个内部时钟周期的时间内抖动,
我们须配置滤波器的带宽长于5个时钟周期。因此我们可以(fDTS频率)连续采样8次,以确
认在TI1上一次真实的边沿变换,即在TIMx_CCMR1寄存器中写入IC1F=0011
选择TI1通道的有效转换边沿,在TIMx_CCER寄存器中写入CC1P=0(上升沿)
配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预
分频器被禁止(TIMx_CCMR1寄存器的IC1PS=00)
设置TIMx_CCER寄存器的CC1E=1,允许捕获计数器的值到捕获寄存器中。
如果需要,通过设置TIMx_DIER寄存器中的CC1IE位允许相关中断请求,通过设置
TIMx_DIER寄存器中的CC1DE位允许DMA请求。
当发生一个输入捕获时:
产生有效的电平转换时,计数器的值被传送到TIMx_CCR1寄存器。
CC1IF标志被设置(中断标志)。当发生至少2个连续的捕获时,而CC1IF未曾被清除,
CC1OF也被置’1’
如设置了CC1IE位,则会产生一个中断。
如设置了CC1DE位,则还会产生一个DMA请求。
为了处理捕获溢出,建议在读出捕获溢出标志之前读取数据,这是为了避免丢失在读出捕获溢
出标志之后和读取数据之前可能产生的捕获溢出信息。
注:
设置
TIMx_EGR
寄存器中相应的
CCxG
位,可以通过软件产生输入捕获中断和
/
DMA
请求。
14.3.6 PWM输入模式
该模式是输入捕获模式的一个特例,除下列区别外,操作与输入捕获模式相同:
两个ICx信号被映射至同一个TIx输入。
2ICx信号为边沿有效,但是极性相反。
其中一个TIxFP信号被作为触发输入信号,而从模式控制器被配置成复位模式。
例如,你需要测量输入到TI1上的PWM信号的长度(TIMx_CCR1寄存器)和占空比(TIMx_CCR2
寄存器),具体步骤如下(取决于CK_INT的频率和预分频器的值)
选择TIMx_CCR1的有效输入:置TIMx_CCMR1寄存器的CC1S=01(选择TI1)
选择TI1FP1的有效极性(用来捕获数据到TIMx_CCR1中和清除计数器):置CC1P=0(上升沿
有效)
选择TIMx_CCR2的有效输入:置TIMx_CCMR1寄存器的CC2S=10(选择TI1)
选择TI1FP2的有效极性(捕获数据到TIMx_CCR2):置CC2P=1(下降沿有效)
选择有效的触发输入信号:置TIMx_SMCR寄存器中的TS=101(选择TI1FP1)
267/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
配置从模式控制器为复位模式:置TIMx_SMCR中的SMS=100
使能捕获:置TIMx_CCER寄存器中CC1E=1CC2E=1
126 PWM输入模式时序
由于只有TI1FP1TI2FP2连到了从模式控制器,所以PWM输入模式只能使用TIMx_CH1
/TIMx_CH2信号。
14.3.7 强置输出模式
在输出模式(TIMx_CCMRx寄存器中CCxS=00)下,输出比较信号(OCxREF和相应的OCx)能够
直接由软件强置为有效或无效状态,而不依赖于输出比较寄存器和计数器间的比较结果。
TIMx_CCMRx寄存器中相应的OCxM=101,即可强置输出比较信号(OCxREF/OCx)为有效状
态。这样OCxREF被强置为高电平(OCxREF始终为高电平有效),同时OCx得到CCxP极性位相
反的值。
例如:CCxP=0(OCx高电平有效),则OCx被强置为高电平。
TIMx_CCMRx寄存器中的OCxM=100,可强置OCxREF信号为低。
该模式下,在TIMx_CCRx影子寄存器和计数器之间的比较仍然在进行,相应的标志也会被修
改。因此仍然会产生相应的中断和DMA请求。这将会在下面的输出比较模式一节中介绍。
14.3.8 输出比较模式
此项功能是用来控制一个输出波形,或者指示一段给定的的时间已经到时。
当计数器与捕获/比较寄存器的内容相同时,输出比较功能做如下操作:
将输出比较模式(TIMx_CCMRx寄存器中的OCxM)和输出极性(TIMx_CCER寄存器中的
CCxP)定义的值输出到对应的引脚上。在比较匹配时,输出引脚可以保持它的电平
(OCxM=000)、被设置成有效电平(OCxM=001)被设置成无效电平(OCxM=010)或进行翻
(OCxM=011)
设置中断状态寄存器中的标志位(TIMx_SR寄存器中的CCxIF)
若设置了相应的中断屏蔽(TIMx_DIER寄存器中的CCxIE),则产生一个中断。
若设置了相应的使能位(TIMx_DIER寄存器中的CCxDE位,TIMx_CR2寄存器中的CCDS
选择DMA请求功能),则产生一个DMA请求。
TIMx_CCMRx中的OCxPE位选择TIMx_CCRx寄存器是否需要使用预装载寄存器。
在输出比较模式下,更新事件UEVOCxREFOCx输出没有影响。
同步的精度可以达到计数器的一个计数周期。输出比较模式(在单脉冲模式下)也能用来输出一
单脉冲。
268/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
输出比较模式的配置步骤:
1. 选择计数器时钟(内部,外部,预分频器)
2. 将相应的数据写入TIMx_ARRTIMx_CCRx寄存器中
3. 如果要产生一个中断请求和/或一个DMA请求,设置CCxIE位和/CCxDE位。
4. 选择输出模式,例如当计数器CNTCCRx匹配时翻转OCx的输出引脚,CCRx预装载未
用,开启OCx输出且高电平有效,则必须设置OCxM=’011’OCxPE=’0’CCxP=’0’
CCxE=’1’
5. 设置TIMx_CR1寄存器的CEN位启动计数器
TIMx_CCRx寄存器能够在任何时候通过软件进行更新以控制输出波形,条件是未使用预装载寄
存器(OCxPE=’0’,否则TIMx_CCRx影子寄存器只能在发生下一次更新事件时被更新)。下图给
出了一个例子。
127 输出比较模式,翻转OC1
14.3.9 PWM 模式
脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空
比的信号。
TIMx_CCMRx寄存器中的OCxM位写入’110’(PWM模式1)’111’(PWM模式2),能够独立地设
置每个OCx输出通道产生一路PWM。必须设置TIMx_CCMRx寄存器OCxPE位以使能相应的预
装载寄存器,最后还要设置TIMx_CR1寄存器的ARPE位,(在向上计数或中心对称模式中)使能
自动重装载的预装载寄存器。
仅当发生一个更新事件的时候,预装载寄存器才能被传送到影子寄存器,因此在计数器开始计
数之前,必须通过设置TIMx_EGR寄存器中的UG位来初始化所有的寄存器。
OCx的极性可以通过软件在TIMx_CCER寄存器中的CCxP位设置,它可以设置为高电平有效或
低电平有效。TIMx_CCER寄存器中CCxE位控制OCx输出使能。详见TIMx_CCERx寄存器的
描述。
PWM模式(模式1或模式2)下,TIMx_CNTTIMx_CCRx始终在进行比较,(依据计数器的计数
方向)以确定是否符合TIMx_CCRx TIMx_CNT 或者TIMx_CNT TIMx_CCRx 。然而为了与
OCREF_CLR的功能(在下一个PWM周期之前,ETR信号上的一个外部事件能够清除OCxREF)
一致,OCxREF信号只能在下述条件下产生:
当比较的结果改变,或
269/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
当输出比较模式(TIMx_CCMRx寄存器中的OCxM)从“冻结”(无比较,OCxM=’000’)
换到某个PWM模式(OCxM=’110’’111’)
这样在运行中可以通过软件强置PWM输出。
根据TIMx_CR1寄存器CMS位的状态,定时器能够产生边沿对齐的PWM信号或中央对齐的
PWM信号。
PWM 边沿对齐模式
向上计数配置
TIMx_CR1寄存器中的DIR位为低的时候执行向上计数。参看14.3.2节。
下面是一个PWM模式1的例子。当TIMx_CNT<TIMx_CCRxPWM信号参考OCxREF为高,否
则为低。如果TIMx_CCRx中的比较值大于自动重装载值(TIMx_ARR),则OCxREF保持为’1’
如果比较值为0,则OCxREF保持为’0’ 下图为TIMx_ARR=8时边沿对齐的PWM波形实例。
128 边沿对齐的PWM波形(ARR=8)
向下计数的配置
TIMx_CR1寄存器的DIR位为高时执行向下计数。参看14.3.2节。
PWM 模式1,当TIMx_CNT>TIMx_CCRx 时参考信号OCxREF 为低,否则为高。如果
TIMx_CCRx中的比较值大于TIMx_ARR中的自动重装载值,则OCxREF保持为’1’。该模式下不
能产生0%的PWM波形。
PWM 中央对齐模式
TIMx_CR1寄存器中的CMS位不为’00’时,为中央对齐模式(所有其他的配置对OCxREF/OCx
信号都有相同的作用)。根据不同的CMS位设置,比较标志可以在计数器向上计数时被置’1’、在
计数器向下计数时被置’1’、或在计数器向上和向下计数时被’1’TIMx_CR1寄存器中的计数方
向位(DIR)由硬件更新,不要用软件修改它。参看14.3.2节的中央对齐模式。
下图给出了一些中央对齐的PWM波形的例子
TIMx_ARR=8
PWM模式1
TIMx_CR1寄存器中的CMS=01,在中央对齐模式1时,当计数器向下计数时设置比较标
志。
270/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
129 中央对齐的PWM波形(APR=8)
使用中央对齐模式的提示:
进入中央对齐模式时,使用当前的向上/向下计数配置;这就意味着计数器向上还是向下计
数取决于TIMx_CR1寄存器中DIR位的当前值。此外,软件不能同时修改DIRCMS位。
不推荐当运行在中央对齐模式时改写计数器,因为这会产生不可预知的结果。特别地:
如果写入计数器的值大于自动重加载的值(TIMx_CNT>TIMx_ARR),则方向不会被更新。
例如,如果计数器正在向上计数,它就会继续向上计数。
如果将0或者TIMx_ARR的值写入计数器,方向被更新,但不产生更新事件UEV
使用中央对齐模式最保险的方法,就是在启动计数器之前产生一个软件更新(设置
TIMx_EGR 位中的UG),不要在计数进行过程中修改计数器的值。
14.3.10 单脉冲模式
单脉冲模式(OPM)是前述众多模式的一个特例。这种模式允许计数器响应一个激励,并在一个
程序可控的延时之后,产生一个脉宽可程序控制的脉冲。
可以通过从模式控制器启动计数器,在输出比较模式或者PWM 模式下产生波形。设置
TIMx_CR1存器中的OPM位将选择单脉冲模式,这样可以让计数器自动地在产生下一个更新
事件UEV时停止。
仅当比较值与计数器的初始值不同时,才能产生一个脉冲。启动之前(当定时器正在等待触发)
必须如下配置:
271/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
向上计数方式:CNT < CCRx ARR (特别地,0 < CCRx)
向下计数方式:CNT > CCRx
130 单脉冲模式的例子
例如,你需要在从TI2输入脚上检测到一个上升沿开始,延迟tDELAY之后,在OC1上产生一个长
度为tPULSE的正脉冲。
假定TI2FP2作为触发1:
TIMx_CCMR1寄存器中的CC2S=’01’,把TI2FP2映像到TI2
TIMx_CCER寄存器中的CC2P=’0’,使TI2FP2能够检测上升沿。
TIMx_SMCR寄存器中的TS=’110’TI2FP2作为从模式控制器的触发(TRGI)
TIMx_SMCR寄存器中的SMS=’110’(触发模式)TI2FP2被用来启动计数器。
OPM波形由写入比较寄存器的数值决定(要考虑时钟频率和计数器预分频器)
tDELAY由写入TIMx_CCR1寄存器中的值定义。
tPULSE由自动装载值和比较值之间的差值定义(TIMx_ARR - TIMx_CCR1)
假定当发生比较匹配时要产生从’0’’1’的波形,当计数器到达预装载值时要产生一个从’1’
’0’的波形;首先要置TIMx_CCMR1寄存器的OC1M=’111’,进入PWM模式2;根据需要有
选择地使能预装载寄存器:置TIMx_CCMR1中的OC1PE=’1’TIMx_CR1寄存器中的
ARPE;然后在TIMx_CCR1寄存器中填写比较值,在TIMx_ARR寄存器中填写自动装载
值,修改UG位来产生一个更新事件,然后等待在TI2上的一个外部触发事件。本例中,
CC1P=’0’
在这个例子中,TIMx_CR1寄存器中的DIRCMS位应该置低。
因为只需一个脉冲,所以必须设置TIMx_CR1寄存器中的OPM=’1’,在下一个更新事(当计数
器从自动装载值翻转到0)时停止计数。
特殊情况:OCx快速使能:
在单脉冲模式下,在TIx输入脚的边沿检测逻辑设置CEN位以启动计数器。然后计数器和比较
间的比较操作产生了输出的转换。但是这些操作需要一定的时钟周期,因此它限制了可得到的
最小延时tDELAY
如果要以最小延时输出波形,可以设置TIMx_CCMRx寄存器中的OCxFE位;此时OCxREF(
OCx)被强制响应激励而不再依赖比较的结果,输出的波形与比较匹配时的波形一样。OCxFE
在通道配置为PWM1PWM2模式时起作用。
272/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
14.3.11 在外部事件时清除OCxREF信号
对于一个给定的通道,设置TIMx_CCMRx寄存器中对应的OCxCE位为’1’,能够用ETRF输入端
的高电平把OCxREF信号拉低,OCxREF信号将保持为低直到发生下一次的更新事件UEV
该功能只能用于输出比较和PWM模式,而不能用于强置模式。
例如,OCxREF信号可以联到一个比较器的输出,用于控制电流。这时,ETR必须配置如下:
1. 外部触发预分频器必须处于关闭:TIMx_SMCR寄存器中的ETPS[1:0]=’00’
2. 必须禁止外部时钟模式2TIMx_SMCR寄存器中的ECE=’0’
3. 外部触发极性(ETP)和外部触发滤波器(ETF)可以根据需要配置。
下图显示了当ETRF输入变为高时,对应不同OCxCE的值,OCxREF信号的动作。在这个例
中,定时器TIMx被置于PWM模式。
131TIMxOCxREF
14.3.12 编码器接口模式
选择编码器接口模式的方法是:如果计数器只在TI2的边沿计数,则置TIMx_SMCR寄存器中的
SMS=001;如果只在TI1边沿计数,则置SMS=010;如果计数器同时在TI1TI2边沿计数,则
SMS=011
通过设置TIMx_CCER寄存器中的CC1PCC2P位,可以选择TI1TI2极性;如果需要,还可以
对输入滤波器编程。
两个输入TI1TI2被用来作为增量编码器的接口。参看77,假定计数器已经启动(TIMx_CR1
寄存器中的CEN=’1’),计数器由每次在TI1FP1TI2FP2上的有效跳变驱动。TI1FP1TI2FP2
TI1TI2在通过输入滤波器和极性控制后的信号;如果没有滤波和变相,TI1FP1=TI1
TI2FP2=TI2。根据两个输入信号的跳变顺序,产生了计数脉冲和方向信号。依据两个输入信
的跳变顺序,计数器向上或向下计数,同时硬件对TIMx_CR1寄存器的DIR位进行相应的设置。
不管计数器是依靠TI1计数、依靠TI2计数或者同时依靠TI1TI2计数。在任一输入端(TI1或者
TI2)的跳变都会重新计算DIR位。
编码器接口模式基本上相当于使用了一个带有方向选择的外部时钟。这意味着计数器只在0
TIMx_ARR寄存器的自动装载值之间连续计数(根据方向,或是0ARR计数,或是ARR0
)。所以在开始计数之前必须配置TIMx_ARR;同样,捕获器、比较器、预分频器、触发输出
特性等仍工作如常。
在这个模式下,计数器依照增量编码器的速度和方向被自动的修改,因此计数器的内容始终指
示着编码器的位置。计数方向与相连的传感器旋转的方向对应。下表列出了所有可能的组合,
假设TI1TI2不同时变换。
273/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
77 计数方向与编码器信号的关系
274/754
TI1FP1信号 TI2FP2信号 相对信号的电平
有效边沿 (TI1FP1对应TI2,
TI2FP2对应TI1) 上升 下降 上升 下降
向下计数 向上计数 不计数 不计数
仅在TI1计数 向上计数 向下计数 不计数 不计数
不计数 不计数 向上计数 向下计数
仅在TI2计数 不计数 不计数 向下计数 向上计数
向下计数 向上计数 向上计数 向下计数
TI1TI2上计 向上计数 向下计数 向下计数 向上计数
一个外部的增量编码器可以直接与MCU连接而不需要外部接口逻辑。但是,一般会使用比较
将编码器的差动输出转换到数字信号,这大大增加了抗噪声干扰能力。编码器输出的第三个信
号表示机械零点,可以把它连接到一个外部中断输入并触发一个计数器复位。
下图是一个计数器操作的实例,显示了计数信号的产生和方向控制。它还显示了当选择了双边
沿时,输入抖动是如何被抑制的;抖动可能会在传感器的位置靠近一个转换点时产生。在这个
例子中,我们假定配置如下:
CC1S=’01’ (TIMx_CCMR1寄存器,IC1FP1映射到TI1)
CC2S=’01’ (TIMx_CCMR2寄存器,IC2FP2映射到TI2)
CC1P=’0’ (TIMx_CCER寄存器,IC1FP1不反相,IC1FP1=TI1)
CC2P=’0’ (TIMx_CCER寄存器,IC2FP2不反相,IC2FP2=TI2)
SMS=’011’ (TIMx_SMCR寄存器,所有的输入均在上升沿和下降沿有效).
CEN=’1’ (TIMx_CR1寄存器,计数器使能)
132 编码器模式下的计数器操作实例
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
下图为当IC1FP1极性反相时计数器的操作实例(CC1P=’1’,其他配置与上例相同)
133 IC1FP1反相的编码器接口模式实例
当定时器配置成编码器接口模式时,提供传感器当前位置的信息。使用第二个配置在捕获模式
的定时器,可以测量两个编码器事件的间隔,获得动态的信息(速度,加速度,减速度)。指示
械零点的编码器输出可被用做此目的。根据两个事件间的间隔,可以按照固定的时间读出计数
器。如果可能的话,你可以把计数器的值锁存到第三个输入捕获寄存器(捕获信号必须是周期的
并且可以由另一个定时器产生);也可以通过一个由实时时钟产生的DMA请求来读取它的值。
14.3.13 定时器输入异或功能
TIMx_CR2寄存器中的TI1S位,允许通道1的输入滤波器连接到一个异或门的输出端,异或门的
3个输入端为TIMx_CH1TIMx_CH2TIMx_CH3
13.3.18异或输出能够被用于所有定时器的输入功能,如触发或输入捕获。上一章 节给出了此特
性用于连接霍尔传感器的例子。
14.3.14 定时器和外部触发的同步
TIMx定时器能够在多种模式下和一个外部的触发同步:复位模式、门控模式和触发模式。
从模式:复位模式
在发生一个触发输入事件时,计数器和它的预分频器能够重新被初始化;同时,如果TIMx_CR1
寄存器的URS位为低,还会产生一个更新事件UEV;然后所有的预装载寄存器(TIMx_ARR
TIMx_CCRx)都会被更新。
在下面的例子中,TI1输入端的上升沿导致向上计数器被清零:
配置通道1以检测TI1的上升沿。配置输入滤波器的带宽(在本例中,不需要任何滤波器,因
此保持IC1F=0000)。触发操作中不使用捕获预分频器,所以不需要配置它。CC1S位只选
择输入捕获源,即TIMx_CCMR1寄存器中CC1S=01。置TIMx_CCER寄存器中CC1P=0
确定极性(只检测上升沿)
TIMx_SMCR寄存器中SMS=100,配置定时器为复位模式;置TIMx_SMCR寄存器中
TS=101,选择TI1作为输入源。
TIMx_CR1寄存器中CEN=1,启动计数器。
计数器开始依据内部时钟计数,然后正常运转直到TI1出现一个上升沿;此时,计数器被清零然
后从0重新开始计数。同时,触发标志(TIMx_SR寄存器中的TIF)被设置,根据TIMx_DIER
存器中TIE(中断使能)位和TDE(DMA使能)位的设置,产生一个中断请求或一个DMA请求。
下图显示当自动重装载寄存器TIMx_ARR=0x36时的动作。在TI1上升沿和计数器的实际复位之
间的延时,取决于TI1输入端的重同步电路。
275/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
134 复位模式下的控制电路
从模式:门控模式
按照选中的输入端电平使能计数器。
在如下的例子中,计数器只在TI1为低时向上计数:
配置通道1以检测TI1上的低电平。配置输入滤波器带宽(本例中,不需要滤波,所以保持
IC1F=0000)。触发操作中不使用捕获预分频器,所以不需要配置。CC1S位用于选择输入
捕获源,置TIMx_CCMR1寄存器中CC1S=01。置TIMx_CCER寄存器中CC1P=1以确定极
(只检测低电平)
TIMx_SMCR寄存器中SMS=101,配置定时器为门控模式;置TIMx_SMCR寄存器中
TS=101,选择TI1作为输入源。
TIMx_CR1寄存器中CEN=1,启动计数器。在门控模式下,如果CEN=0,则计数器不能
启动,不论触发输入电平如何。
只要TI1为低,计数器开始依据内部时钟计数,在TI1变高时停止计数。当计数器开始或停止时
都设置TIMx_SR中的TIF标置。
TI1上升沿和计数器实际停止之间的延时,取决于TI1输入端的重同步电路。
135 门控模式下的控制电路
从模式:触发模式
输入端上选中的事件使能计数器。
在下面的例子中,计数器在TI2输入的上升沿开始向上计数:
配置通道2检测TI2的上升沿。配置输入滤波器带宽(本例中,不需要任何滤波器,保持
IC2F=0000)。触发操作中不使用捕获预分频器,不需要配置。CC2S位只用于选择输入捕
获源,置TIMx_CCMR1寄存器中CC2S=01。置TIMx_CCER寄存器中CC2P=1以确定极性
(只检测低电平)
TIMx_SMCR寄存器中SMS=110,配置定时器为触发模式;置TIMx_SMCR寄存器中
TS=110,选择TI2作为输入源。
TI2出现一个上升沿时,计数器开始在内部时钟驱动下计数,同时设置TIF标志。
276/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
TI2上升沿和计数器启动计数之间的延时,取决于TI2输入端的重同步电路。
136 触发器模式下的控制电路
从模式:外部时钟模式2 触发模式
外部时钟模式2可以与另一种从模式(外部时钟模1和编码器模式除外)一起使用。这时,ETR
号被用作外部时钟的输入,在复位模式、门控模式或触发模式时可以选择另一个输入作为触发
输入。不建议使用TIMx_SMCR寄存器的TS位选择ETR作为TRGI
下面的例子中,TI1上出现一个上升沿之后,计数器即在ETR的每一个上升沿向上计数一次:
1. 通过TIMx_SMCR寄存器配置外部触发输入电路:
ETF=0000:没有滤波
ETPS=00:不用预分频器
ETP=0:检测ETR的上升沿,置ECE=1使能外部时钟模式2
2. 按如下配置通道1,检测TI的上升沿:
IC1F=0000:没有滤波
触发操作中不使用捕获预分频器,不需要配置
TIMx_CCMR1寄存器中CC1S=01,选择输入捕获源
TIMx_CCER寄存器中CC1P=0以确定极性(只检测上升沿)
3. TIMx_SMCR寄存器中SMS=110,配置定时器为触发模式。置TIMx_SMCR寄存器中
TS=101,选择TI1作为输入源。
TI1上出现一个上升沿时,TIF标志被设置,计数器开始在ETR的上升沿计数。
ETR信号的上升沿和计数器实际复位间的延时,取决于ETRP输入端的重同步电路。
137 外部时钟模式2+触发模式下的控制电路
14.3.15 定时器同步
所有TIMx定时器在内部相连,用于定时器同步或链接。当一个定时器处于主模式时,它可以对
另一个处于从模式的定时器的计数器进行复位、启动、停止或提供时钟等操作。
下图显示了触发选择和主模式选择模块的概况。
277/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
使用一个定时器作为另一个定时器的预分频器
138/从定时器的例子
如:可以配置定时器1作为定时器2的预分频器。参考图138,进行下述操作:
配置定时器1为主模式,它可以在每一个更新事件UEV时输出一个周期性的触发信号。在
TIM1_CR2寄存器的MMS=’010’时,每当产生一个更新事件时在TRGO1上输出一个上升沿
信号。
连接定时器1TRGO1输出至定时器2,设置TIM2_SMCR寄存器的TS=’000’,配置定时器2
为使用ITR1作为内部触发的从模式。
然后把从模式控制器置于外部时钟模式1(TIM2_SMCR寄存器的SMS=111);这样定时器2
即可由定时器1周期性的上升沿(即定时器1的计数器溢出)信号驱动。
最后,必须设置相应(TIMx_CR1寄存器)CEN位分别启动两个定时器。
注:
如果
OCx
已被选中为定时器
1
的触发输出
(MMS=1xx)
,它的上升沿用于驱动定时器
2
的计数器。
使用一个定时器使能另一个定时器
在这个例子中,定时器2的使能由定时器1的输出比较控制。参考138的连接。只当定时器1
OC1REF为高时,定时器2才对分频后的内部时钟计数。两个定时器的时钟频率都是由预分频器
CK_INT除以3(fCK_CNT=fCK_INT/3)得到。
配置定时器1为主模式,送出它的输出比较参考信号(OC1REF)为触发输出(TIM1_CR2寄存
器的MMS=100)
配置定时器1OC1REF波形(TIM1_CCMR1寄存器)
配置定时器2从定时器1获得输入触发(TIM2_SMCR寄存器的TS=000)
配置定时器2为门控模式(TIM2_SMCR寄存器的SMS=101)
TIM2_CR1寄存器的CEN=1以使能定时器2
TIM1_CR1寄存器的CEN=1以启动定时器1
注:
定时器
2
的时钟不与定时器
1
的时钟同步,这个模式只影响定时器
2
计数器的使能信号。
139 定时器1OC1REF控制定时器2
278/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
139的例子中,在定时器2启动之前,它们的计数器和预分频器未被初始化,因此它们从当
前的数值开始计数。可以在启动定时器1之前复2个定时器,使它们从给定的数值开始,即在
定时器计数器中写入需要的任意数值。写TIMx_EGR寄存器的UG位即可复位定时器。
在下一个例子中,需要同步定时器1和定时器2定时器1是主模式并从0开始,定时器2是从模式
并从0xE7开始;2个定时器的预分频器系数相同。写’0’TIM1_CR1CEN位将禁止定时器1
定时器2随即停止。
配置定时器1为主模式,送出输出比较1参考信号(OC1REF)做为触发输出(TIM1_CR2寄存
器的MMS=100)
配置定时器1OC1REF波形(TIM1_CCMR1寄存器)
配置定时器2从定时器1获得输入触发(TIM2_SMCR寄存器的TS=000)
配置定时器2为门控模式(TIM2_SMCR寄存器的SMS=101)
TIM1_EGR寄存器的UG=’1’,复位定时器1
TIM2_EGR寄存器的UG=’1’,复位定时器2
’0xE7’至定时器2的计数器(TIM2_CNTL),初始化它为0xE7
TIM2_CR1寄存器的CEN=’1’以使能定时器2
TIM1_CR1寄存器的CEN=’1’以启动定时器1
TIM1_CR1寄存器的CEN=’0’以停止定时器1
140 通过使能定时器1可以控制定时器2
使用一个定时器去启动另一个定时器
在这个例子中,使用定时器1的更新事件使能定时器2。参考138的连接。一旦定时器1产生更
新事件,定时器2即从它当前的数值(可以是非0)按照分频的内部时钟开始计数。在收到触发信号
时,定时器2CEN位被自动地置’1’,同时计数器开始计数直到写’0’TIM2_CR1寄存器的CEN
位。两个定时器的时钟频率都是由预分频器对CK_INT除以3(fCK_CNT=fCK_INT/3)
配置定时器1为主模式,送出它的更新事件(UEV)做为触发输出(TIM1_CR2寄存器的
MMS=010)
配置定时器1的周期(TIM1_ARR寄存器)
配置定时器2从定时器1获得输入触发(TIM2_SMCR寄存器的TS=000)
配置定时器2为触发模式(TIM2_SMCR寄存器的SMS=110)
TIM1_CR1寄存器的CEN=1以启动定时器1
279/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
141 使用定时器1的更新触发定时器2
142
280/754
在上一个例子中,可以在启动计数之前初始化两个计数器。 显示在与0相同配置情况下,
使用触发模式而不是门控模式(TIM2_SMCR寄存器的SMS=110)的动作。
142 利用定时器1的使能触发定时器2
使用一个定时器作为另一个的预分频器
这个例子使用定时器1作为定时器2的预分频器。参考图138的连接,配置如下:
配置定时器1为主模式,送出它的更新事件UEV做为触发输出(TIM1_CR2寄存器的
MMS=’010’)。然后每次计数器溢出时输出一个周期信号。
配置定时器1的周期(TIM1_ARR寄存器)
配置定时器2从定时器1获得输入触发(TIM2_SMCR寄存器的TS=000)
配置定时器2使用外部时钟模式(TIM2_SMCR寄存器的SMS=111)
TIM1_CR2寄存器的CEN=1以启动定时器2
TIM1_CR1寄存器的CEN=1以启动定时器1
使用一个外部触发同步地启动2个定时器
这个例子中当定时器1TI1输入上升时使能定时器1,使能定时器1的同时使能定时器2,参见
138。为保证计数器的对齐,定时器1必须配置为主/从模式(对应TI1为从,对应定时器2为主)
配置定时器1为主模式,送出它的使能做为触发输出(TIM1_CR2寄存器的MMS=’001’)
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
配置定时器1为从模式,从TI1获得输入触发(TIM1_SMCR寄存器的TS=’100’)
配置定时器1为触发模式(TIM1_SMCR寄存器的SMS=’110’)
配置定时器1为主/从模式,TIM1_SMCR寄存器的MSM=’1’
配置定时器2从定时器1获得输入触发(TIM2_SMCR寄存器的TS=000)
配置定时器2为触发模式(TIM2_SMCR寄存器的SMS=’110’)
当定时器1TI1上出现一个上升沿时,两个定时器同步地按照内部时钟开始计数,两个TIF标志
也同时被设置。
注:
在这个例子中,在启动之前两个定时器都被初始化
(
设置相应的
UG
)
,两个计数器都从
0
开始,
但可以通过写入任意一个计数器寄存器
(TIMx_CNT)
在定时器间插入一个偏移。下图中能看到主
/
从模式下在定时器
1
CNT_EN
CK_PSC
之间有个延迟。
143 使用定时器1TI1输入触发定时器1和定时器2
14.3.16 调试模式
当微控制器进入调试模式(Cortex-M3核心停止),根据DBG模块中DBG_TIMx_STOP的设置,
TIMx计数器或者继续正常操作,或者停止。详见随后第29.16.2节:持定时器、看门狗、
bxCANI2C的调试。
281/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
14.4 TIMx寄存器描述
282/754
关于在寄存器描述里面所用到的缩写,详见第1.1节。
可以用半字(16)或字(32)的方式操作这些外设寄存器。
14.4.1 控制寄存器 1(TIMx_CR1)
偏移地址:0x00
复位值:0x0000
1514131211109876543210
ARPE DIR OPM URS UDIS CEN
rw rw rw rw rw rw rw rw rw rw
保留 CKD[1:0] CMS[1:0]
15:10 保留,始终读为0
CKD[1:0]: 时钟分频因子 (Clock division) 9:8
定义在定时器时钟(CK_INT)频率与数字滤波器(ETRTIx)使用的采样频率之间的分频比例。
00tDTS = tCK_INT
01tDTS = 2 x tCK_INT
10tDTS = 4 x tCK_INT
11:保留
ARPE:自动重装载预装载允许位 (Auto-reload preload enable) 7
0TIMx_ARR寄存器没有缓冲;
1TIMx_ARR寄存器被装入缓冲器。
CMS[1:0]:选择中央对齐模式 (Center-aligned mode selection) 6:5
00:边沿对齐模式。计数器依据方向位(DIR)向上或向下计数。
01:中央对齐模式1。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器
CCxS=00)的输出比较中断标志位,只在计数器向下计数时被设置。
10:中央对齐模式2。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器
CCxS=00)的输出比较中断标志位,只在计数器向上计数时被设置。
11:中央对齐模式3。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器
CCxS=00)的输出比较中断标志位,在计数器向上和向下计数时均被设置。
注:在计数器开启时(CEN=1),不允许从边沿对齐模式转换到中央对齐模式。
DIR:方向 (Direction) 4
0:计数器向上计数;
1:计数器向下计数。
注:当计数器配置为中央对齐模式或编码器模式时,该位为只读。
OPM:单脉冲模式 (One pulse mode) 3
0:在发生更新事件时,计数器不停止;
1:在发生下一次更新事件(清除CEN)时,计数器停止。
URS:更新请求源 (Update request source) 2
软件通过该位选择UEV事件的源
0:如果使能了更新中断或DMA请求,则下述任一事件产生更新中断或DMA请求:
计数器溢出/下溢
设置UG
从模式控制器产生的更新
1:如果使能了更新中断或DMA请求,则只有计数器溢出/下溢才产生更新中断或DMA请求。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
UDIS:禁止更新 (Update disable) 1
软件通过该位允许/禁止UEV事件的产生
0:允许UEV。更新(UEV)事件由下述任一事件产生:
计数器溢出/下溢
设置UG
从模式控制器产生的更新
具有缓存的寄存器被装入它们的预装载值。(译注:更新影子寄存器)
1:禁止UEV。不产生更新事件,影子寄存器(ARRPSCCCRx)保持它们的值。如果设置了
UG位或从模式控制器发出了一个硬件复位,则计数器和预分频器被重新初始化。
CEN:使能计数器 0
0:禁止计数器;
1:使能计数器。
注:在软件设置了CEN位后,外部时钟、门控模式和编码器模式才能工作。触发模式可以自动
地通过硬件设置CEN位。
在单脉冲模式下,当发生更新事件时,CEN被自动清除。
14.4.2 控制寄存器 2(TIMx_CR2)
偏移地址:0x04
复位值:0x0000
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TI1S CCDS
rw rw rw rw rw
MMS[2:0]保留 保留
15:8 保留,始终读为0
TI1STI1选择 (TI1 selection) 7
0TIMx_CH1引脚连到TI1输入;
1TIMx_CH1TIMx_CH2TIMx_CH3引脚经异或后连到TI1输入。
283/754
见上一章13.3.18的与霍尔传感器的接口一节。
MMS[2:0]:主模式选择 (Master mode selection) 6:4
3位用于选择在主模式下送到从定时器的同步信息(TRGO)。可能的组合如下:
000复位 – TIMx_EGR寄存器的UG位被用于作为触发输出(TRGO)。如果是触发输入产生
复位(从模式控制器处于复位模式),则TRGO上的信号相对实际的复位会有一个延迟。
001使能 计数器使能信号CNT_EN被用于作为触发输出(TRGO)。有时需要在同一时间启动
多个定时器或控制在一段时间内使能从定时器。计数器使能信号是通过CEN控制位和门控模式
下的触发输入信号的逻辑或产生。
当计数器使能信号受控于触发输入时,TRGO上会有一个延迟,除非选择了主/从模式(
TIMx_SMCR寄存器中MSM位的描述)
010更新更新事件被选为触发输入(TRGO)。例如,一个主定时器的时钟可以被用作一个从
定时器的预分频器。
011比较脉冲在发生一次捕获或一次比较成功时,当要设置CC1IF标志时(即使它已经为
),触发输出送出一个正脉冲(TRGO)
100比较 – OC1REF信号被用于作为触发输出(TRGO)
101比较 – OC2REF信号被用于作为触发输出(TRGO)
110比较 – OC3REF信号被用于作为触发输出(TRGO)
111比较 – OC4REF信号被用于作为触发输出(TRGO)
CCDS:捕获/比较的DMA选择 3
0:当发生CCx事件时,送出CCxDMA请求;
1:当发生更新事件时,送出CCxDMA请求。
2:0 保留,始终读为0
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
14.4.3 从模式控制寄存器(TIMx_SMCR)
偏移地址:0x08
复位值:0x0000
1514131211109876543210
ETP ECE MSM 保留
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
TS[2:0]ETPS[1:0] ETF[3:0] SMS[2:0]
ETP:外部触发极性 (External trigger polarity) 15
该位选择是用ETR还是ETR的反相来作为触发操作
0ETR不反相,高电平或上升沿有效;
1ETR被反相,低电平或下降沿有效。
ECE:外部时钟使能位 (External clock enable) 14
该位启用外部时钟模式2
0:禁止外部时钟模式2
1:使能外部时钟模式2。计数器由ETRF信号上的任意有效边沿驱动。
1:设置ECE位与选择外部时钟模式1并将TRGI连到ETRF(SMS=111TS=111)具有相同功
效。
2:下述从模式可以与外部时钟模式2同时使用:复位模式、门控模式和触发模式;但是,这
TRGI不能连到ETRF(TS位不能是’111’)
3:外部时钟模式1和外部时钟模式2同时被使能时,外部时钟的输入是ETRF
ETPS[1:0]:外部触发预分频 (External trigger prescaler) 位13:12
外部触发信号ETRP的频率必须最多是CK_INT频率的1/4。当输入较快的外部时钟时,可以使
用预分频降低ETRP的频率。
00:关闭预分频;
01ETRP频率除以2
10ETRP频率除以4
11ETRP频率除以8
ETF[3:0]:外部触发滤波 (External trigger filter) 位11:8
这些位定义了对ETRP信号采样的频率和对ETRP数字滤波的带宽。实际上,数字滤波器是一个
事件计数器,它记录到N个事件后会产生一个输出的跳变。
0000:无滤波器,以fDTS采样 1000:采样频fSAMPLING=fDTS/8N=6
0001:采样频率fSAMPLING=fCK_INTN=2 1001:采样频fSAMPLING=fDTS/8N=8
0010:采样频率fSAMPLING=fCK_INTN=4 1010:采样频fSAMPLING=fDTS/16N=5
0011:采样频率fSAMPLING=fCK_INTN=8 1011:采样频fSAMPLING=fDTS/16N=6
0100:采样频率fSAMPLING=fDTS/2N=6 1100:采样频fSAMPLING=fDTS/16N=8
0101:采样频率fSAMPLING=fDTS/2N=8 1101:采样频fSAMPLING=fDTS/32N=5
0110:采样频率fSAMPLING=fDTS/4N=6 1110:采样频fSAMPLING=fDTS/32N=6
0111:采样频率fSAMPLING=fDTS/4N=8 1111:采样频fSAMPLING=fDTS/32N=8
MSM:主/从模式 (Master/slave mode) 位7
0:无作用;
1:触发输入(TRGI)上的事件被延迟了,以允许在当前定时器(通过TRGO)与它的从定时器间的
完美同步。这对要求把几个定时器同步到一个单一的外部事件时是非常有用的。
284/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
TS[2:0]:触发选择 (Trigger selection) 6:4
3位选择用于同步计数器的触发输入。
000:内部触发0(ITR0)TIM1 100TI1的边沿检测器(TI1F_ED)
001:内部触发1(ITR1)TIM2 101:滤波后的定时器输入1(TI1FP1)
010:内部触发2(ITR2)TIM3 110:滤波后的定时器输入2(TI2FP2)
011:内部触发3(ITR3)TIM4 111:外部触发输入(ETRF)
关于每个定时器中ITRx的细节,参见表78。
注:这些位只能在未用到(SMS=000)时被改变,以避免在改变时产生错误的边沿检测。
3 保留,始终读为0
SMS[2:0]:从模式选择 (Slave mode selection) 2:0
当选择了外部信号,触发信(TRGI)的有效边沿与选中的外部输入极性相关(输入控制寄存器
和控制寄存器的说明)
000:关闭从模式如果CEN=1,则预分频器直接由内部时钟驱动。
001:编码器模式1 – 根据TI1FP1的电平,计数器在TI2FP2的边沿向上/下计数。
010:编码器模式2 – 根据TI2FP2的电平,计数器在TI1FP1的边沿向上/下计数。
011:编码器模式3 – 根据另一个信号的输入电平,计数器在TI1FP1TI2FP2的边沿向上/下计
数。
100:复位模式选中的触发输入(TRGI)的上升沿重新初始化计数器,并且产生一个更新寄存
器的信号。
101:门控模式当触发输入(TRGI)为高时,计数器的时钟开启。一旦触发输入变为低,则计
数器停止(但不复位)。计数器的启动和停止都是受控的。
110:触发模式计数器在触发输入TRGI的上升沿启动(但不复位),只有计数器的启动是受控
的。
111:外部时钟模式1 – 选中的触发输入(TRGI)的上升沿驱动计数器。
注:如果TI1F_EN被选为触发输入(TS=100)时,不要使用门控模式。这是因为,TI1F_ED在每
TI1F变化时输出一个脉冲,然而门控模式是要检查触发输入的电平。
78 TIMx内部触发连接(1)
ITR0 (TS = 000) ITR1 (TS = 001) ITR2 (TS = 010) ITR3 (TS = 011)
从定时器
TIM2 TIM1 TIM8 TIM3 TIM4
TIM3 TIM1 TIM2 TIM5 TIM4
TIM4 TIM1 TIM2 TIM3 TIM8
TIM5 TIM2 TIM3 TIM4 TIM8
1. 如果某个产品中没有相应的定时器,则对应的触发信号ITRx也不存在。
14.4.4 DMA/中断使能寄存器(TIMx_DIER)
偏移地址:0x0C
复位值:0x0000
1514131211109876543210
保留 TDE 保留 CC4DE CC3DE CC2DE CC1DE UDE 保留 TIE 保留 CC4IE CC3IE CC2IE CC1IE UIE
rw rw rw rw rw rw rw rw rw rw rw rw
15 保留,始终读为0
TDE:允许触发DMA请求 (Trigger DMA request enable) 14
0:禁止触发DMA请求;
1:允许触发DMA请求。
13 保留,始终读为0
CC4DE:允许捕获/比较4DMA请求 (Capture/Compare 4 DMA request enable) 12
0:禁止捕获/比较4DMA请求;
1:允许捕获/比较4DMA请求。
285/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
CC3DE:允许捕获/比较3DMA请求 (Capture/Compare 3 DMA request enable) 11
0:禁止捕获/比较3DMA请求;
1:允许捕获/比较3DMA请求。
CC2DE:允许捕获/比较2DMA请求 (Capture/Compare 2 DMA request enable) 10
0:禁止捕获/比较2DMA请求;
1:允许捕获/比较2DMA请求。
CC1DE:允许捕获/比较1DMA请求 (Capture/Compare 1 DMA request enable) 9
0:禁止捕获/比较1DMA请求;
1:允许捕获/比较1DMA请求。
UDE:允许更新的DMA请求 (Update DMA request enable) 8
0:禁止更新的DMA请求;
1:允许更新的DMA请求。
7 保留,始终读为0
TIE:触发中断使能 (Trigger interrupt enable) 6
0:禁止触发中断;
1:使能触发中断。
5 保留,始终读为0
CC4IE:允许捕获/比较4中断 (Capture/Compare 4 interrupt enable) 4
0:禁止捕获/比较4中断;
1:允许捕获/比较4中断。
CC3IE:允许捕获/比较3中断 (Capture/Compare 3 interrupt enable) 3
0:禁止捕获/比较3中断;
1:允许捕获/比较3中断。
CC2IE:允许捕获/比较2中断 (Capture/Compare 2 interrupt enable) 2
0:禁止捕获/比较2中断;
1:允许捕获/比较2中断。
CC1IE:允许捕获/比较1中断 (Capture/Compare 1 interrupt enable) 1
0:禁止捕获/比较1中断;
1:允许捕获/比较1中断。
UIE:允许更新中断 (Update interrupt enable) 0
0:禁止更新中断;
1:允许更新中断。
14.4.5 状态寄存器(TIMx_SR)
偏移地址:0x10
复位值:0x0000
1514131211109876543210
CC4OF CC3OF CC2OF CC1OF TIF 保留 CC4IF
CC3IF
CC2IF CC1IF UIF
rc w0 rc w0 rc w0 rc w0 rc w0 rc w0 rc w0 rc w0 rc w0 rc w0
保留 保留
15:13 保留,始终读为0
CC4OF捕获/比较4重复捕获标记 (Capture/Compare 4 overcapture flag) 12
参见CC1OF描述。
CC3OF捕获/比较3重复捕获标记 (Capture/Compare 3 overcapture flag) 11
参见CC1OF描述。
CC2OF捕获/比较2重复捕获标记 (Capture/Compare 2 overcapture flag) 10
参见CC1OF描述。
286/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
CC1OF捕获/比较1重复捕获标记 (Capture/Compare 1 overcapture flag) 9
仅当相应的通道被配置为输入捕获时,该标记可由硬件置’1’。写’0’可清除该位。
0:无重复捕获产生;
1:当计数器的值被捕获到TIMx_CCR1寄存器时,CC1IF的状态已经为’1’
8:7 保留,始终读为0
TIF触发器中断标记 (Trigger interrupt flag) 6
当发生触发事件(当从模式控制器处于除门控模式外的其它模式时,在TRGI输入端检测到有效
边沿,或门控模式下的任一边沿)时由硬件对该位置’1’。它由软件清’0’
0:无触发器事件产生;
1:触发器中断等待响应。
5 保留,始终读为0
CC4IF捕获/比较4 中断标记 (Capture/Compare 4 interrupt flag) 4
参考CC1IF描述。
CC3IF捕获/比较3 中断标记 (Capture/Compare 3 interrupt flag) 3
参考CC1IF描述。
CC2IF捕获/比较2 中断标记 (Capture/Compare 2 interrupt flag) 2
参考CC1IF描述。
CC1IF捕获/比较1 中断标记 (Capture/Compare 1 interrupt flag) 1
如果通道CC1配置为输出模式:
当计数器值与比较值匹配时该位由硬件’1’,但在中心对称模式下除外(参考TIMx_CR1寄存器
CMS)。它由软件清’0’
0:无匹配发生;
1TIMx_CNT的值与TIMx_CCR1的值匹配
如果通道CC1配置为输入模式:
当捕获事件发生时该位由硬件置’1’,它由软件清’0’或通过读TIMx_CCR1’0’
0:无输入捕获产生;
1:计数器值已被捕获(拷贝)TIMx_CCR1(IC1上检测到与所选极性相同的边沿)
UIF更新中断标记 (Update interrupt flag) 0
当产生更新事件时该位由硬件置’1’。它由软件清’0’
0:无更新事件产生;
1:更新中断等待响应。当寄存器被更新时该位由硬件置’1’
TIMx_CR1寄存器UDIS=0URS=0,当TIMx_EGR寄存器的UG=1时产生更新事件
(软件对计数器CNT重新初始化)
TIMx_CR1寄存器的UDIS=0URS=0,当计数器CNT被触发事件重初始化时产生更新
事件。(参考同步控制寄存器的说明)
14.4.6 事件产生寄存器(TIMx_EGR)
偏移地址:0x14
复位值:0x0000
1514131211109876543210
TG 保留 CC4G
CC3G
CC2G CC1G UG
w wwwww
保留
15:7 保留,始终读为0
TG产生触发事件 (Trigger generation) 6
该位由软件置’1’,用于产生一个触发事件,由硬件自动清’0’
0:无动作;
1TIMx_SR寄存器的TIF=1,若开启对应的中断和DMA,则产生相应的中断和DMA
5 保留,始终读为0
287/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
CC4G产生捕获/比较4事件 (Capture/compare 4 generation) 4
参考CC1G描述。
CC3G产生捕获/比较3事件 (Capture/compare 3 generation) 3
参考CC1G描述。
CC2G产生捕获/比较2事件 (Capture/compare 2 generation) 2
参考CC1G描述。
CC1G产生捕获/比较1事件 (Capture/compare 1 generation) 1
该位由软件置’1’,用于产生一个捕获/比较事件,由硬件自动清’0’
0:无动作;
1:在通道CC1上产生一个捕获/比较事件:
若通道CC1配置为输出:
设置CC1IF=1,若开启对应的中断和DMA,则产生相应的中断和DMA
若通道CC1配置为输入:
当前的计数器值捕获至TIMx_CCR1寄存器;设置CC1IF=1,若开启对应的中断和DMA,则产
生相应的中断和DMA。若CC1IF已经为1,则设置CC1OF=1
UG产生更新事件 (Update generation) 0
该位由软件置’1’,由硬件自动清’0’
0:无动作;
1:重新初始化计数器,并产生一个更新事件。注意预分频器的计数器也被清’0’(但是预分频系
数不变)。若在中心对称模式下或DIR=0(向上计数)则计数器被清’0’,若DIR=1(向下计数)则计数
器取TIMx_ARR的值。
14.4.7 捕获/比较模式寄存器 1(TIMx_CCMR1)
偏移地址:0x18
复位值:0x0000
通道可用于输入(捕获模式)或输出(比较模式),通道的方向由相应的CCxS定义。该寄存器其它
位的作用在输入和输出模式下不同。OCxx描述了通道在输出模式下的功能,ICxx描述了通道在
输出模式下的功能。因此必须注意,同一个位在输出模式和输入模式下的功能是不同的。
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OC2CE OC2PE OC2FE OC1CE OC1PE OC1FE
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CC1S[1:0]
IC2F[3:0] IC2PSC[1:0] IC1F[3:0] IC1PSC[1:0]
OC2M[2:0]
CC2S[1:0]
OC1M[2:0]
输出比较模式:
OC2CE:输出比较20使能 (Output compare 2 clear enable) 15
OC2M[2:0]:输出比较2模式 (Output compare 2 mode) 14:12
OC2PE:输出比较2预装载使能 (Output compare 2 preload enable) 11
OC2FE:输出比较2快速使能 (Output compare 2 fast enable) 10
CC2S[1:0]:捕获/比较2选择 (Capture/Compare 2 selection) 9:8
该位定义通道的方向(输入/输出),及输入脚的选择:
00CC2通道被配置为输出;
01CC2通道被配置为输入,IC2映射在TI2上;
10CC2通道被配置为输入,IC2映射在TI1上;
11CC2通道被配置为输入,IC2映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC2S仅在通道关闭时(TIMx_CCER寄存器的CC2E=’0’)才是可写的。
288/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
OC1CE:输出比较10使能 (Output compare 1 clear enable) 7
0OC1REF 不受ETRF输入的影响;
1:一旦检测到ETRF输入高电平,清除OC1REF=0
OC1M[2:0]:输出比较1模式 (Output compare 1 enable) 6:4
3位定义了输出参考信号OC1REF动作,而OC1REF决定了OC1的值。OC1REF是高电平
有效,而OC1的有效电平取决于CC1P位。
000:冻结。输出比较寄存器TIMx_CCR1与计数器TIMx_CNT间的比较对OC1REF不起作用;
001 :匹配时设置通道1有效电平。当计数器TIMx_CNT 的值与捕获/比较寄存器1
(TIMx_CCR1)相同时,强制OC1REF为高。
010 :匹配时设置通道1无效电平。当计数器TIMx_CNT 的值与捕获/比较寄存器1
(TIMx_CCR1)相同时,强制OC1REF为低。
011:翻转。当TIMx_CCR1=TIMx_CNT时,翻转OC1REF的电平。
100:强制为无效电平。强制OC1REF为低。
101:强制为有效电平。强制OC1REF为高。
110PWM模式1 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为
无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否
则为有效电平(OC1REF=1)
111PWM模式2 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为
有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电
平。
1:一旦LOCK级别设为3(TIMx_BDTR寄存器中的LOCK)并且CC1S=’00’(通道配置成输
)则该位不能被修改。
2:在PWM模式1PWM模式2中,只有当比较结果改变了或在输出比较模式中从冻结模式
切换到PWM模式时,OC1REF电平才改变。
OC1PE输出比较1预装载使能 (Output compare 1 preload enable) 3
0:禁止TIMx_CCR1寄存器的预装载功能,可随时写入TIMx_CCR1寄存器,并且新写入的数
值立即起作用。
1:开启TIMx_CCR1寄存器的预装载功能,读写操作仅对预装载寄存器操作,TIMx_CCR1
预装载值在更新事件到来时被传送至当前寄存器中。
1:一旦LOCK级别设为3(TIMx_BDTR寄存器中的LOCK)并且CC1S=’00’(通道配置成输
)则该位不能被修改。
2:仅在单脉冲模式下(TIMx_CR1寄存器的OPM=’1’),可以在未确认预装载寄存器情况下使
PWM模式,否则其动作不确定。
OC1FE输出比较1 快速使能 (Output compare 1 fast enable) 2
该位用于加快CC输出对触发器输入事件的响应。
0:根据计数器与CCR1的值,CC1正常操作,即使触发器是打开的。当触发器的输入出现一个
有效沿时,激活CC1输出的最小延时为5个时钟周期。
1:输入到触发器的有效沿的作用就象发生了一次比较匹配。因此,OC被设置为比较电平而与
比较结果无关。采样触发器的有效沿和CC1输出间的延时被缩短为3个时钟周期。
该位只在通道被配置成PWM1PWM2模式时起作用。
CC1S[1:0]:捕获/比较1 选择 (Capture/Compare 1 selection) 1:0
2位定义通道的方向(输入/输出),及输入脚的选择:
00CC1通道被配置为输出;
01CC1通道被配置为输入,IC1映射在TI1上;
10CC1通道被配置为输入,IC1映射在TI2上;
11CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=’0’)才是可写的。
输入捕获模式:
IC2F[3:0]:输入捕获2滤波器 (Input capture 2 filter) 15:12
IC2PSC[1:0]:输入/捕获2预分频器 (input capture 2 prescaler) 11:10
289/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
CC2S[1:0]:捕获/比较2选择 (Capture/compare 2 selection) 9:8
2位定义通道的方向(输入/输出),及输入脚的选择:
00CC2通道被配置为输出;
01CC2通道被配置为输入,IC2映射在TI2上;
10CC2通道被配置为输入,IC2映射在TI1上;
11CC2通道被配置为输入,IC2映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC2S仅在通道关闭时(TIMx_CCER寄存器的CC2E=’0’)才是可写的。
IC1F[3:0]:输入捕获1滤波器 (Input capture 1 filter) 7:4
这几位定义了TI1输入的采样频率及数字滤波器长度。数字滤波器由一个事件计数器组成,它记
录到N个事件后会产生一个输出的跳变:
0000:无滤波器,以fDTS采样 1000:采样频fSAMPLING=fDTS/8N=6
0001:采样频率fSAMPLING=fCK_INTN=2 1001:采样频fSAMPLING=fDTS/8N=8
0010:采样频率fSAMPLING=fCK_INTN=4 1010:采样频fSAMPLING=fDTS/16N=5
0011:采样频率fSAMPLING=fCK_INTN=8 1011:采样频fSAMPLING=fDTS/16N=6
0100:采样频率fSAMPLING=fDTS/2N=6 1100:采样频fSAMPLING=fDTS/16N=8
0101:采样频率fSAMPLING=fDTS/2N=8 1101:采样频fSAMPLING=fDTS/32N=5
0110:采样频率fSAMPLING=fDTS/4N=6 1110:采样频fSAMPLING=fDTS/32N=6
0111:采样频率fSAMPLING=fDTS/4N=8 1111:采样频fSAMPLING=fDTS/32N=8
注:在现在的芯片版本中,当ICxF[3:0]=123时,公式中的fDTSCK_INT替代。
IC1PSC[1:0]:输入/捕获1预分频器 (Input capture 1 prescaler) 3:2
2位定义了CC1输入(IC1)的预分频系数。
一旦CC1E=’0’(TIMx_CCER存器中),则预分频器复位。
00:无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获;
01:每2个事件触发一次捕获;
10:每4个事件触发一次捕获;
11:每8个事件触发一次捕获。
CC1S[1:0]捕获/比较1选择 (Capture/Compare 1 selection) 1:0
2位定义通道的方向(输入/输出),及输入脚的选择:
00CC1通道被配置为输出;
01CC1通道被配置为输入,IC1映射在TI1上;
10CC1通道被配置为输入,IC1映射在TI2上;
11CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=’0’)才是可写的。
14.4.8 捕获/比较模式寄存器 2(TIMx_CCMR2)
偏移地址:0x1C
复位值:0x0000
参看以上CCMR1寄存器的描述
1514131211109876543210
OC4CE OC4PE OC4FE OC3CE OC3PE OC3FE
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CC3S[1:0]
IC4F[3:0] IC4PSC[1:0] IC3F[3:0] IC3PSC[1:0]
OC4M[2:0]
CC4S[1:0]
OC3M[2:0]
输出比较模式:
OC4CE:输出比较40使能 (Output compare 4 clear enable) 15
OC4M[2:0]:输出比较4模式 (Output compare 4 mode) 14:12
290/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
OC4PE:输出比较4预装载使能 (Output compare 4 preload enable) 11
OC4FE:输出比较4快速使能 (Output compare 4 fast enable) 10
CC4S[1:0]:捕获/比较4选择 (Capture/Compare 4 selection) 9:8
2位定义通道的方向(输入/输出),及输入脚的选择:
00CC4通道被配置为输出;
01CC4通道被配置为输入,IC4映射在TI4上;
10CC4通道被配置为输入,IC4映射在TI3上;
11CC4通道被配置为输入,IC4映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC4S仅在通道关闭时(TIMx_CCER寄存器的CC4E=’0’)才是可写的。
OC3CE:输出比较30使能 (Output compare 3 clear enable) 7
OC3M[2:0]:输出比较3模式 (Output compare 3 mode) 6:4
OC3PE:输出比较3预装载使能 (Output compare 3 preload enable) 3
OC3FE:输出比较3快速使能 (Output compare 3 fast enable) 2
CC3S[1:0]:捕获/比较3选择 (Capture/Compare 3 selection) 1:0
2位定义通道的方向(输入/输出),及输入脚的选择:
00CC3通道被配置为输出;
01CC3通道被配置为输入,IC3映射在TI3上;
10CC3通道被配置为输入,IC3映射在TI4上;
11CC3通道被配置为输入,IC3映射在TRGI上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC3S仅在通道关闭时(TIMx_CCER寄存器的CC3E=’0’)才是可写的。
输入捕获模式:
IC4F[3:0]:输入捕获4滤波器 (Input capture 4 filter) 15:12
IC4PSC[1:0]:输入/捕获4预分频器 (input capture 4 prescaler) 11:10
CC4S[1:0]:捕获/比较4选择 (Capture/compare 4 selection) 9:8
2位定义通道的方向(输入/输出),及输入脚的选择:
00CC4通道被配置为输出;
01CC4通道被配置为输入,IC4映射在TI4上;
10CC4通道被配置为输入,IC4映射在TI3上;
11CC4通道被配置为输入,IC4映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC4S仅在通道关闭时(TIMx_CCER寄存器的CC4E=’0’)才是可写的。
IC3F[3:0]:输入捕获3滤波器 (Input capture 3 filter) 7:4
IC3PSC[1:0]:输入/捕获3预分频器 (Input capture 3 prescaler) 3:2
CC3S[1:0]:捕获/比较3选择 (Capture/Compare 3 selection) 1:0
2位定义通道的方向(输入/输出),及输入脚的选择:
00CC3通道被配置为输出;
01CC3通道被配置为输入,IC3映射在TI3上;
10CC3通道被配置为输入,IC3映射在TI4上;
11CC3通道被配置为输入,IC3映射在TRC上。此模式仅工作在内部触发器输入被选中时(
TIMx_SMCR寄存器的TS位选择)
注:CC3S仅在通道关闭时(TIMx_CCER寄存器的CC3E=’0’)才是可写的。
291/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
14.4.9 捕获/比较使能寄存器(TIMx_CCER)
偏移地址:0x20
复位值:0x0000
1514131211109876543210
CC4P CC4E CC3P CC3E CC2P CC2E CC1P CC1E
rw rw rw rw rw rw rw rw
保留 保留 保留 保留
15:14 保留,始终读为0
CC4P:输入/捕获4输出极性 (Capture/Compare 4 output polarity) 13
参考CC1P的描述。
CC4E:输入/捕获4输出使能 (Capture/Compare 4 output enable) 12
参考CC1E 的描述。
11:10 保留,始终读为0
CC3P:输入/捕获3输出极性 (Capture/Compare 3 output polarity) 9
参考CC1P的描述。
CC3E:输入/捕获3输出使能 (Capture/Compare 3 output enable) 8
参考CC1E 的描述。
7:6 保留,始终读为0
CC2P:输入/捕获2输出极性 (Capture/Compare 2 output polarity) 5
参考CC1P的描述。
CC2E:输入/捕获2输出使能 (Capture/Compare 2 output enable) 4
参考CC1E的描述。
3:2 保留,始终读为0
CC1P:输入/捕获1输出极性 (Capture/Compare 1 output polarity) 1
CC1通道配置为输出:
0OC1高电平有效
1OC1低电平有效
CC1通道配置为输入:
该位选择是IC1还是IC1的反相信号作为触发或捕获信号。
0:不反相:捕获发生在IC1的上升沿;当用作外部触发器时,IC1不反相。
1:反相:捕获发生在IC1的下降沿;当用作外部触发器时,IC1反相。
CC1E:输入/捕获1输出使能 (Capture/Compare 1 output enable) 0
CC1通道配置为输出:
0 关闭- OC1禁止输出。
1 开启- OC1信号输出到对应的输出引脚。
CC1通道配置为输入:
该位决定了计数器的值是否能捕获入TIMx_CCR1寄存器。
0:捕获禁止;
0:捕获使能。
79OCx通道的输出控制位
CCxE OCx输出状态
0 禁止输出(OCx=0OCx_EN=0)
1 OCx = OCxREF + 极性,OCx_EN=1
注:
连接到标准
OCx
通道的外部
I/O
引脚状态,取决于
OCx
通道状态和
GPIO
以及
AFIO
寄存器。
292/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
14.4.10 计数器(TIMx_CNT)
偏移地址:0x24
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CNT[15:0]
CNT[15:0]:计数器的值 (Counter value) 15:0
14.4.11 预分频器(TIMx_PSC)
偏移地址:0x28
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
PSC[15:0]
PSC[15:0]:预分频器的值 (Prescaler value) 15:0
计数器的时钟频率CK_CNT等于fCK_PSC/(PSC[15:0]+1)
PSC包含了当更新事件产生时装入当前预分频器寄存器的值。
14.4.12 自动重装载寄存器(TIMx_ARR)
偏移地址:0x2C
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
ARR[15:0]
ARR[15:0]: 自动重装载的值 (Auto reload value) 15:0
ARR包含了将要传送至实际的自动重装载寄存器的数值。
293/754
详细参考14.3.1节:有关ARR的更新和动作。
当自动重装载的值为空时,计数器不工作。
14.4.13 捕获/比较寄存器 1(TIMx_CCR1)
偏移地址:0x34
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CCR1[15:0]
CCR1[15:0]: 捕获/比较1的值 (Capture/Compare 1 value) 15:0
CC1通道配置为输出:
CCR1包含了装入当前捕获/比较1寄存器的值(预装载值)
如果在TIMx_CCMR1寄存器(OC1PE)中未选择预装载特性,写入的数值会被立即传输至当前
寄存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较1寄存器中。
当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC1端口上产生输出信号。
CC1通道配置为输入:
CCR1包含了由上一次输入捕获1事件(IC1)传输的计数器值。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
14.4.14 捕获/比较寄存器 2(TIMx_CCR2)
偏移地址:0x38
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CCR2[15:0]
CCR2[15:0]: 捕获/比较2的值 (Capture/Compare 2 value) 15:0
CC2通道配置为输出:
CCR2包含了装入当前捕获/比较2寄存器的值(预装载值)
如果在TIMx_CCMR2寄存器(OC2PE)中未选择预装载特性,写入的数值会被立即传输至当前
寄存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较2寄存器中。
当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC2端口上产生输出信号。
CC2通道配置为输入:
CCR2包含了由上一次输入捕获2事件(IC2)传输的计数器值。
14.4.15 捕获/比较寄存器 3(TIMx_CCR3)
偏移地址:0x3C
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CCR3[15:0]
CCR3[15:0]: 捕获/比较3的值 (Capture/Compare 3 value) 15:0
CC3通道配置为输出:
CCR3包含了装入当前捕获/比较3寄存器的值(预装载值)
如果在TIMx_CCMR3寄存器(OC3PE)中未选择预装载特性,写入的数值会被立即传输至当前
寄存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较3寄存器中。
当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC3端口上产生输出信号。
CC3通道配置为输入:
CCR3包含了由上一次输入捕获3事件(IC3)传输的计数器值。
14.4.16 捕获/比较寄存器 4(TIMx_CCR4)
偏移地址:0x40
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CCR4[15:0]
CCR4[15:0]: 捕获/比较4的值 (Capture/Compare 4 value) 15:0
CC4通道配置为输出:
CCR4包含了装入当前捕获/比较4寄存器的值(预装载值)
如果在TIMx_CCMR4寄存器(OC4PE)中未选择预装载特性,写入的数值会被立即传输至当前
寄存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较4寄存器中。
当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC4端口上产生输出信号。
CC4通道配置为输入:
CCR4包含了由上一次输入捕获4事件(IC4)传输的计数器值。
294/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
14.4.17 DMA控制寄存器(TIMx_DCR)
偏移地址:0x48
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw
保留 DBL[4:0] 保留 DBA[4:0]
15:13 保留,始终读为0
DBL[4:0]: DMA连续传送长度 (DMA burst length) 12:8
这些位定义了DMA在连续模式下的传送长度(当对TIMx_DMAR寄存器进行读或写时,定时器则
进行一次连续传送),即:定义传输的字节数目:
000001个字节 000012个字节
......
000103个字节
...... 1000118个字节
7:5 保留,始终读为0
DBA[4:0]: DMA基地址 (DMA base address) 4:0
这些位定义了DMA在连续模式下的基地址(当对TIMx_DMAR寄存器进行读或写时)DBA定义
为从TIMx_CR1寄存器所在地址开始的偏移量:
00000TIMx_CR1
00001TIMx_CR2
00010TIMx_SMCR
......
14.4.18 连续模式的DMA地址(TIMx_DMAR)
偏移地址:0x4C
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
DMAB[15:0]
DMAB[15:0]: DMA连续传送寄存器 (DMA register for burst accesses) 15:0
TIMx_DMAR寄存器的读或写会导致对以下地址所在寄存器的存取操作:
TIMx_CR1地址 + DBA + DMA索引,其中:
TIMx_CR1地址”是控制寄存器1(TIMx_CR1)所在的地址;
DBA”是TIMx_DCR寄存器中定义的基地址;
DMA索引”是由DMA自动控制的偏移量,它取决于TIMx_DCR寄存器中定义的DBL
295/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
14.4.19 TIMx寄存器图
下表中将TIMx的所有寄存器映射到一个16位可寻址(编址)空间。
80 TIMx – 寄存器图和复位值
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
TIMx_CR1
ARPE
DIR
OPM
URS
UDIS
CEN
复位值
0000000000
TIMx_CR2
TI1S
CCDS
复位值
00000
TIMx_SMCR
ETP
ECE
MSM
复位值
000000000000 000
TIMx_DIER
TDE
CC4DE
CC3DE
CC2DE
CC1DE
UDE
TIE
CC4IE
CC3IE
CC2IE
CC1IE
UIE
复位值
0 00000 0 00000
TIMx_SR
CC4OF
CC3OF
CC2OF
CC1OF
TIF
CC4IF
CC3IF
CC2IF
CC1IF
UIF
复位值
0000 0 00000
TIMx_EGR
TG
CC4G
CC3G
CC2G
CC1G
UG
复位值
0 00000
TIMx_CCMR1
输出比较模式
OC2CE
OC2PE
OC2FE
OC1CE
OC1PE
OC1FE
复位值
0000000000000000
TIMx_CCMR1
输入捕获模式
复位值
0000000000000000
TIMx_CCMR2
输出比较模式
OC4CE
OC4PE
OC4FE
OC3CE
OC3PE
OC3FE
复位值
0000000000000000
TIMx_CCMR2
输入捕获模式
复位值
0000000000000000
TIMx_CCER
CC4P
CC4E
CC3P
CC3E
CC2P
CC2E
CC1P
CC1E
复位值
00 00 00 00
IC1F
[3:0]
IC1
PSC
[1:0]
保留 保留 保留
CC4S
[1:0]
保留
保留
保留
CC1S
[1:0]
保留
保留
保留
保留
保留
保留
CC1S
[1:0]
保留
保留
CC2S
[1:0]
OC1M
[2:0]
保留
IC2F
[3:0]
IC2
PSC
[1:0]
CC2S
[1:0]
OC2M
[2:0]
OC3M
[2:0]
保留
IC4F
[3:0]
IC4
PSC
[1:0]
CC3S
[1:0]
018h
CC4S
[1:0]
CMS
[1:0]
MMS
[2:0]
CC3S
[1:0]
IC3F
[3:0]
SMS
[2:0]
保留
00Ch
008h
IC3
PSC
[1:0]
保留
保留
ETPS
[1:0]
EFT[3:0] TS
[2:0]
01Ch
保留
OC4M
[2:0]
020h
保留
000h
保留
004h
014h
010h
保留
CKD
[1:0]
TIMx_CNT
复位值
0000000000000000
TIMx_PSC
复位值
0000000000000000
024h
028h
保留
保留
CNT[15:0]
PSC[15:0]
296/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用定时器(TIMx) STM32F10xxx参考手册
297/754
参照200912 RM0008 Reference Manual 英文第10
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
TIMx_ARR
复位值
0000000000000000
TIMx_CCR1
复位值
0000000000000000
TIMx_CCR2
复位值
0000000000000000
TIMx_CCR3
复位值
0000000000000000
TIMx_CCR4
复位值
0000000000000000
TIMx_DCR
复位值
00000 00000
TIMx_DMAR
复位值
0000000000000000
保留
038h
034h
02Ch
030h
CCR1[15:0]
保留
保留
ARR[15:0]
CCR2[15:0]
保留
CCR3[15:0]
CCR4[15:0]
DBL[4:0] 保留
保留
保留
040h
03Ch
04Ch
保留
DMAB[15:0]
保留
保留
044h
048h DBA[4:0]
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
有关寄存器的起始地址,参见表1
基本定时器(TIM6TIM7) STM32F10xxx参考手册
15 基本定时器(TIM6TIM7)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
本章描述的模块仅适用于大容量的STM32F101xxSTM32F103xx系列,和互联型产品。
15.1 TIM6TIM7简介
基本定时器TIM6TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。
它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它
们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC
2个定时器是互相独立的,不共享任何资源。
15.2 TIM6TIM7的主要特性
TIM6TIM7定时器的主要功能包括:
16位自动重装载累加计数器
16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为165536之间的任意数值
分频
触发DAC的同步电路
在更新事件(计数器溢出)时产生中断/DMA请求
144 基本定时器框图
298/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
基本定时器(TIM6TIM7) STM32F10xxx参考手册
15.3 TIM6TIM7的功能
15.3.1 时基单元
这个可编程定时器的主要部分是一个带有自动重装载的16位累加计数器,计数器的时钟通过一
个预分频器得到。
软件可以读写计数器、自动重装载寄存器和预分频寄存器,即使计数器运行时也可以操作。
时基单元包含:
计数器寄存器(TIMx_CNT)
预分频寄存器(TIMx_PSC)
自动重装载寄存器(TIMx_ARR)
自动重装载寄存器是预加载的,每次读写自动重装载寄存器时,实际上是通过读写预加载寄存
器实现。根据TIMx_CR1寄存器中的自动重装载预加载使能位(ARPE),写入预加载寄存器的内
容能够立即或在每次更新事件时,传送到它的影子寄存器。当TIMx_CR1寄存器的UDIS
’0’,则每当计数器达到溢出值时,硬件发出更新事件;软件也可以产生更新事件;关于更新
事件的产生,随后会有详细的介绍。
计数器由预分频输出CK_CNT驱动,设置TIMx_CR1寄存器中的计数器使能位(CEN)使能计数器
计数。
注意:实际的设置计数器使能信号CNT_EN相对于CEN滞后一个时钟周期。
预分频器
预分频可以以系数介于165536之间的任意数值对计数器时钟分频。它是通过一个16位寄存器
(TIMx_PSC)的计数实现分频。因为TIMx_PSC控制寄存器具有缓冲,可以在运行过程中改变它
的数值,新的预分频数值将在下一个更新事件时起作用。
以下两图是在运行过程中改变预分频系数的例子。
145 预分频系数从1变到2的计数器时序图
299/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
基本定时器(TIM6TIM7) STM32F10xxx参考手册
146 预分频系数从1变到4的计数器时序图
15.3.2 计数模式
计数器从0累加计数到自动重装载数值(TIMx_ARR寄存器),然后重新从0开始计数并产生一个计
数器溢出事件。
每次计数器溢出时可以产生更新事件;(通过软件或使用从模式控制器)设置TIMx_EGR寄存器的
UG位也可以产生更新事件。
设置TIMx_CR1中的UDIS位可以禁止产生UEV件,这可以避免在写入预加载寄存器时更改影
子寄存器。在清除UDIS位为’0’之前,将不再产生更新事件,但计数器和预分频器依然会在应产
生更新事件时重新从0开始计数(但预分频系数不变)。另外,如果设置了TIMx_CR1寄存器中的
URS(选择更新请求),设置UG位可以产生一次更新事件UEV,但不设置UIF标志(即没有中断或
DMA请求)
当发生一次更新事件时,所有寄存器会被更新(根据URS)置更新标志(TIMx_SR寄存器的
UIF)
传送预装载值(TIMx_PSC寄存器的内容)至预分频器的缓冲区。
自动重装载影子寄存器被更新为预装载值(TIMx_ARR)
以下是一些在TIMx_ARR=0x36时不同时钟频率下计数器工作的图示例子。
147 计数器时序图,内部时钟分频系数为1
300/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
基本定时器(TIM6TIM7) STM32F10xxx参考手册
148 计数器时序图,内部时钟分频系数为2
149 计数器时序图,内部时钟分频系数为4
150 计数器时序图,内部时钟分频系数为N
301/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
基本定时器(TIM6TIM7) STM32F10xxx参考手册
151 计数器时序图,当ARPE=0时的更新事件(TIMx_ARR没有预装载)
152 计数器时序图,当ARPE=1时的更新事件(预装载TIMx_ARR)
15.3.3 时钟源
计数器的时钟由内部时钟(CK_INT)提供。
TIMx_CR1存器的CEN位和TIMx_EGR寄存器的UG位是实际的控制位,(除了UG位被自动清
除外)只能通过软件改变它们。一旦置CEN位为’1’,内部时钟即向预分频器提供时钟。
下图示出控制电路和向上计数器在普通模式下,没有预分频器时的操作。
302/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
基本定时器(TIM6TIM7) STM32F10xxx参考手册
153 普通模式时序图,内部时钟分频系数为1
15.3.4 调试模式
当微控制器进入调试模式(Cortex-M3核心停止)时,根据DBG模块中的配置位DBG_TIMx_STOP
的设置,TIMx计数器或者继续计数或者停止工作。详见第29.16.2节。
15.4 TIM6TIM7寄存器
303/754
有关寄存器描述中用到的缩写,请参考第1.1节。
可以用半字(16)或字(32)的方式操作这些外设寄存器。
15.4.1 TIM6 TIM7 控制寄存器 1(TIMx_CR1)
偏移地址:0x00
复位值:0x0000
1514131211109876543210
ARPE OPM URS UDIS CEN
rw rw rw rw rw
保留 保留
res res
15:8 保留,始终读为0
ARPE:自动重装载预装载使能 (Auto-reload preload enable) 位7
0TIMx_ARR寄存器没有缓冲
1TIMx_ARR寄存器具有缓冲
保留,始终读为0 位6:4
OPM:单脉冲模式 (One-pulse mode) 位3
0:在发生更新事件时,计数器不停止
1:在发生下次更新事件时,计数器停止计数(清除CEN)
URS:更新请求源 (Update request source) 位2
该位由软件设置和清除,以选择UEV事件的请求源。
0:如果使能了中断或DMA,以下任一事件可以产生一个更新中断或DMA请求:
- 计数器上溢或下溢
- 设置UG
- 通过从模式控制器产生的更新
1:如果使能了中断或DMA,只有计数器上溢或下溢可以产生更新中断或DMA请求。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
基本定时器(TIM6TIM7) STM32F10xxx参考手册
UDIS:禁止更新 (Update disable) 位1
该位由软件设置和清除,以使能或禁止UEV事件的产生。
0UEV使能。更新事件(UEV)可以由下列事件产生:
- 计数器上溢或下溢
- 设置UG
- 通过从模式控制器产生的更新
产生更新事件后,带缓冲的寄存器被加载为预加载数值。
1:禁止UEV。不产生更新事件(UEV),影子寄存器保持它的内容(ARRPSC)。但是如果设置
UG位或从模式控制器产生了一个硬件复位,则计数器和预分频器将被重新初始化。
CEN:计数器使能 (Counter enable) 位0
0:关闭计数器
1:使能计数器
注:门控模式只能在软件已经设置了CEN位时有效,而触发模式可以自动地由硬件设置CEN
位。
在单脉冲模式下,当产生更新事件时CEN被自动清除。
15.4.2 TIM6 TIM7 控制寄存器 2(TIMx_CR2)
偏移地址:0x04
复位值:0x0000
1514131211109876543210
保留
res
保留
res
MMS[2:0]
rw
15:7 保留,始终读为0
MMS:主模式选择 (Master mode selection) 位6:4
这些位用于选择在主模式下向从定时器发送的同步信息(TRGO),有以下几种组合:
000复位使用TIMx_EGR寄存器的UG位作为触发输出(TRGO)。如果触发输入产生了复位
(从模式控制器配置为复位模式),则相对于实际的复位信号,TRGO上的信号有一定的延迟。
001使能计数器使能信号CNT_EN被用作为触发输出(TRGO)。它可用于在同一时刻启动多
个定时器,或控制使能从定时器的时机。计数器使能信号是通过CEN控制位和配置为门控模式
时的触发输入的逻辑或产生。
当计数器使能信号是通过触发输入控制时,在TRGO输出上会有一些延迟,除非选择了主/从模
(TIMx_SMCR寄存器的MSM)
010:更新更新事件被用作为触发输出(TRGO)。例如一个主定时器可以作为从定时器的预分
频器使用。
保留,始终读为0 位3:0
15.4.3 TIM6 TIM7 DMA/中断使能寄存器(TIMx_DIER)
偏移地址:0x0C
复位值:0x0000
1514131211109876543210
UDE UIE
rw rw
保留
res
保留
res
15:9 保留,始终读为0
UDE:更新DMA请求使能 (Update DMA request enable) 位8
0:禁止更新DMA请求
1:使能更新DMA请求
7:1 保留,始终读为0
304/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
基本定时器(TIM6TIM7) STM32F10xxx参考手册
UIE:更新中断使能 (Update interrupt enable) 位0
0:禁止更新中断
1:使能更新中断
15.4.4 TIM6 TIM7 状态寄存器(TIMx_SR)
偏移地址:0x10
复位值:0x0000
1514131211109876543210
UIF
rc w0
保留
res
15:1 保留,始终读为0
UIF:更新中断标志 (Update interrupt flag) 位0
硬件在更新中断时设置该位,它由软件清除。
0:没有产生更新。
1:产生了更新中断。下述情况下由硬件设置该位:
计数器产生上溢或下溢并且TIMx_CR1中的UDIS=0
如果TIMx_CR1中的URS=0并且UDIS=0,当使用TIMx_EGR寄存器的UG位重新初始化计数
CNT时。
15.4.5 TIM6 TIM7 事件产生寄存器(TIMx_EGR)
偏移地址:0x14
复位值:0x0000
1514131211109876543210
UG
w
保留
res
15:1 保留,始终读为0
UG:产生更新事件 (Update generation) 位0
该位由软件设置,由硬件自动清除。
0:无作用
1:重新初始化定时器的计数器并产生对寄存器的更新。注意:预分频器也被清除(但预分频系
数不变)
15.4.6 TIM6 TIM7 计数器(TIMx_CNT)
偏移地址:0x24
复位值:0x0000
1514131211109876543210
CNT[15:0]
rw
CNT[15:0]:计数器数值 (Counter value) 15:0
305/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
基本定时器(TIM6TIM7) STM32F10xxx参考手册
15.4.7 TIM6 TIM7 预分频器(TIMx_PSC)
偏移地址:0x28
复位值:0x0000
1514131211109876543210
PSC[15:0]
rw
PSC[15:0]:预分频器数值 (Prescaler value) 15:0
计数器的时钟频率CK_CNT等于fCK_PSC/(PSC[15:0]+1)
在每一次更新事件时,PSC的数值被传送到实际的预分频寄存器中。
15.4.8 TIM6 TIM7 自动重装载寄存器(TIMx_ARR)
偏移地址:0x2C
复位值:0x0000
1514131211109876543210
ARR[15:0]
rw
ARR[15:0]:自动重装载数值 (Prescaler value) 15:0
ARR的数值将传送到实际的自动重装载寄存器中。
关于ARR的更新和作用,详见15.3.1
如果自动重装载数值为0,则计数器停止。
306/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
基本定时器(TIM6TIM7) STM32F10xxx参考手册
307/754
参照200912 RM0008 Reference Manual 英文第10
15.4.9 TIM6 TIM7 寄存器图
下表中将TIMx的所有寄存器映射到一个16位可寻址(编址)空间。
81 TIM6TIM7– 寄存器图和复位值
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
TIMx_CR1
ARPE
OPM
URS
UDIS
CEN
复位值
0 0000
TIMx_CR2
复位值
000
008h
TIMx_DIER
UDE
UIE
复位值
00
TIMx_SR
UIF
复位值
0
TIMx_EGR
UG
复位值
0
018h
01Ch
020h
TIMx_CNT
复位值
0000000000000000
保留 CNT[15:0]
000h
004h
014h
010h
保留
MMS
[2:0]
00Ch
024h
保留
保留
保留
保留
保留 保留
保留 保留
保留
保留
保留
TIMx_PSC
复位值
0000000000000000
TIMx_ARR
复位值
0000000000000000
028h 保留 PSC[15:0]
02Ch 保留 ARR[15:0]
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
有关寄存器的起始地址,参见表1
实时时钟(RTC) STM32F10xxx参考手册
16 实时时钟(RTC)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
16.1 RTC简介
实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可
提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。
RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒
后,RTC的设置和时间维持不变。
系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操
作。执行以下操作将使能对后备寄存器和RTC的访问:
设置寄存器RCC_APB1ENRPWRENBKPEN位,使能电源和后备接口时钟
设置寄存器PWR_CRDBP位,使能对后备寄存器和RTC的访问。
16.2 主要特性
可编程的预分频系数:分频系数最高为220
32位的可编程计数器,可用于较长时间段的测量。
2个分离的时钟:用于APB1接口的PCLK1RTC时钟(RTC时钟的频率必须小于PCLK1时钟
频率的四分之一以上)
可以选择以下三种RTC的时钟源:
HSE时钟除以128
LSE振荡器时钟;
LSI振荡器时钟(详见6.2.8
308/754
RTC时钟)
2个独立的复位类型:
APB1接口由系统复位;
RTC核心(预分频器、闹钟、计数器和分频器)只能由后备域复位(详见6.1.3)
3个专门的可屏蔽中断:
闹钟中断,用来产生一个软件可编程的闹钟中断。
秒中断,用来产生一个可编程的周期性中断信号(最长可达1)
溢出中断,指示内部可编程计数器溢出并回转为0的状态。
16.3 功能描述
16.3.1 概述
RTC由两个主要部分组成(参见下图)。第一部分(APB1接口)用来和APB1总线相连。此单元还包
含一组16位寄存器,可通过APB1总线对其进行读写操作(参见16.4)APB1接口由APB1总线
时钟驱动,用来与APB1总线接口。
另一部分(RTC核心)由一组可编程计数器组成,分成两个主要模块。第一个模块RTC的预分频
模块,它可编程产生最长为1秒的RTC时间基准TR_CLKRTC的预分频模块包含了一个20位的
可编程分频器(RTC预分频器)。如果在RTC_CR寄存器中设置了相应的允许位,则在每个
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
实时时钟(RTC) STM32F10xxx参考手册
TR_CLK周期中RTC产生一个中断(秒中断)。第二个模块是一个32位的可编程计数器,可被初始
化为当前的系统时间。系统时间按TR_CLK周期累加并与存储在RTC_ALR寄存器中的可编程时
间相比较,如果RTC_CR控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。
154 简化的RTC框图
16.3.2 复位过程
除了RTC_PRLRTC_ALRRTC_CNTRTC_DIV寄存器外,所有的系统寄存器都由系统复
位或电源复位进行异步复位。
RTC_PRLRTC_ALRRTC_CNTRTC_DIV寄存器仅能通过备份域复位信号复位,详见第
6.1.3节。
16.3.3 RTC寄存器
RTC核完全独立于RTC APB1接口。
软件通过APB1接口访问RTC的预分频值计数器值和闹钟值。但是,相关的可读寄存器只在与
RTC APB1时钟进行重新同步的RTC时钟的上升沿被更新。RTC标志也是如此的。
这意味着,如果APB1接口曾经被关闭,而读操作又是在刚刚重新开启APB1之后,则在第一次
的内部寄存器更新之前,从APB1上读出的RTC寄存器数值可能被破坏了(通常读到0)。下述几种
情况下能够发生这种情形:
发生系统复位或电源复位
系统刚从待机模式唤醒(参见第4.3
309/754
节:低功耗模式)
4.3 系统刚从停机模式唤醒(参见第 节:低功耗模式)
所有以上情况中,APB1接口被禁止时(复位、无时钟或断电)RTC核仍保持运行状态。
因此,若在读取RTC寄存器时,RTCAPB1接口曾经处于禁止状态,则软件首先必须等待
RTC_CRL寄存器中的RSF(寄存器同步标志)被硬件置’1’
注:
RTC
APB1
接口不受
WFI
WFE
等低功耗模式的影响。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
实时时钟(RTC) STM32F10xxx参考手册
16.3.4 配置RTC寄存器
必须设置RTC_CRL 寄存器中的CNF 位,使RTC 进入配置模式后,才能写入RTC_PRL
RTC_CNTRTC_ALR寄存器。
另外,对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。可以通过查询
RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。仅当RTOFF状态位是’1’
时,才可以写入RTC寄存器。
配置过程:
1. 查询RTOFF位,直到RTOFF的值变为’1’
2. CNF值为1,进入配置模式
3. 对一个或多个RTC寄存器进行写操作
4. 清除CNF标志位,退出配置模式
5. 查询RTOFF,直至RTOFF位变为’1’以确认写操作已经完成。
仅当CNF标志位被清除时,写操作才能进行,这个过程至少需要3RTCCLK周期
16.3.5 RTC标志的设置
在每一个RTC核心的时钟周期中,更改RTC计数器之前设置RTC秒标志(SECF)
在计数器到达0x0000之前的最后一个RTC时钟周期中,设置RTC溢出标志(OWF)
在计数器的值到达闹钟寄存器的值加1(RTC_ALR+1)之前的RTC时钟周期中,设置RTC_Alarm
RTC闹钟标志(ALRF)。对RTC闹钟的写操作必须使用下述过程之一与RTC秒标志同步:
使用RTC闹钟中断,并在中断处理程序中修改RTC闹钟和/RTC计数器。
等待RTC控制寄存器中的SECF位被设置,再更改RTC闹钟和/RTC计数器。
155 RTC秒和闹钟波形图示例,PR=0003ALARM=00004
156 RTC溢出波形图示例,PR=0003
310/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
实时时钟(RTC) STM32F10xxx参考手册
16.4 RTC寄存器描述
311/754
关于寄存器描述中的缩略词,请参考1.1节。
可以用半字(16)或字(32)的方式操作这些外设寄存器。
16.4.1 RTC控制寄存器高位(RTC_CRH)
地址偏移量:0x00
复位值:0x0000
1514131211109876543210
OWIE ALRIE SECIE
rw rw rw
保留
15:3 保留,被硬件强制为0
OWIE:允许溢出中断位 (Overflow interrupt enable) 2
0:屏蔽(不允许)溢出中断
1:允许溢出中断
ALRIE:允许闹钟中断 (Alarm interrupt enable) 1
0:屏蔽(不允许)闹钟中断
1:允许闹钟中断
SECIE:允许秒中断 (Second interrupt enable) 0
0:屏蔽(不允许)秒中断
1:允许秒中断
这些位用来屏蔽中断请求。注意:系统复位后所有的中断被屏蔽,因此可通过写RTC寄存器来
确保在初始化后没有挂起的中断请求。当外设正在完成前一次写操作时(标志位RTOFF=0),不
能对RTC_CRH寄存器进行写操作。
RTC功能由这个控制寄存器控制。一些位的写操作必须经过一个特殊的配置过程来完成(
16.3.4)
16.4.2 RTC控制寄存器低位(RTC_CRL)
偏移地址:0x04
复位值:0x0020
1514131211109876543210
RTOFF CNF RSF OWF ALRF SECF
r rw rcw0 rcw0 rcw0 rcw0
保留
15:6 保留,被硬件强制为0
RTOFFRTC操作关闭 (RTC operation OFF) 5
RTC模块利用这位来指示对其寄存器进行的最后一次操作的状态,指示操作是否完成。若此位
’0’,则表示无法对任何的RTC寄存器进行写操作。此位为只读位。
0:上一次对RTC寄存器的写操作仍在进行;
1:上一次对RTC寄存器的写操作已经完成。
CNF:配置标志 (Configuration flag) 4
此位必须由软件置’1’以进入配置模式,从而允许向RTC_CNTRTC_ALRRTC_PRL寄存器
写入数据。只有当此位在被置’1’并重新由软件清’0’后,才会执行写操作。
0:退出配置模式(开始更新RTC寄存器)
1:进入配置模式。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
实时时钟(RTC) STM32F10xxx参考手册
RSF:寄存器同步标志 (Registers synchronized flag) 3
每当RTC_CNT寄存器和RTC_DIV寄存器由软件更新或清’0’时,此位由硬件置’1’。在APB1复位
后,或APB1时钟停止后,此位必须由软件清’0’。要进行任何的读操作之前,用户程序必须等待
这位被硬件置’1’,以确保RTC_CNTRTC_ALRRTC_PRL已经被同步
0:寄存器尚未被同步;
1:寄存器已经被同步。
OWF:溢出标志 (Overflow flag) 2
32位可编程计数器溢出时,此位由硬件置’1’。如果RTC_CRH寄存器中OWIE=1,则产生中
断。此位只能由软件清’0’。对此位写’1’是无效的。
0:无溢出;
132位可编程计数器溢出。
ALRF:闹钟标 (Alarm flag) 1
32位可编程计数器达到RTC_ALR寄存器所设置的预定值,此位由硬件置’1’。如果RTC_CRH
寄存器中ALRIE=1,则产生中断。此位只能由软件清’0’。对此位写’1’是无效的。
0:无闹钟;
1:有闹钟。
SECF:秒标志 (Second flag) 0
32位可编程预分频器溢出时,此位由硬件置’1’同时RTC计数器加1。因此,此标志为分辨率可
编程的RTC计数器提供一个周期性的信号(通常为1)。如果RTC_CRH寄存器中SECIE=1,则
产生中断。此位只能由软件清除。对此位写’1’是无效的。
0:秒标志条件不成立;
1:秒标志条件成立。
RTC的功能由这个控制寄存器控制。当前一个写操作还未完成时(RTOFF=0时,详见16.3.4
),不能写RTC_CR寄存器。
注:
1
任何标志位都将保持挂起状态,直到适当的
RTC_CR
请求位被软件复位,表示所请求的中断已
经被接受。
2
在复位时禁止所有中断,无挂起的中断请求,可以对
RTC
寄存器进行写操作。
3
APB1
时钟不运行时,
OWF
ALRF
SECF
RSF
位不被更新。
4 OWF
ALRF
SECF
RSF
位只能由硬件置位,由软件来清零。
5
ALRF=1
ALRIE=1
,则允许产生
RTC
全局中断。如果在
EXTI
控制器中允许产生
EXTI
线
17
中断,则允许产生
RTC
全局中断和
RTC
闹钟中断。
6
ALRF=1
,如果在
EXTI
控制器中设置了
EXTI
线
17
的中断模式,则允许产生
RTC
闹钟中断;
如果在
EXTI
控制器中设置了
EXTI
线
17
的事件模式,则这条线上会产生一个脉冲
(
不会产生
RTC
闹钟中断
)
16.4.3 RTC预分频装载寄存器(RTC_PRLH/RTC_PRLL)
预分频装载寄存器用来保存RTC预分频器的周期计数值。它们受RTC_CR寄存器的RTOFF位保
护,仅当RTOFF值为’1’时允许进行写操作。
RTC预分频装载寄存器高位(RTC_PRLH)
偏移地址:0x08
16.3.4) 只写(参见
复位值:0x0000
1514131211109876543210
wwww
保留 PRL[19:16]
15:6 保留,被硬件强制为0
312/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
实时时钟(RTC) STM32F10xxx参考手册
PRL[19:16]RTC预分频装载值高位 (RTC prescaler reload value high) 3:0
根据以下公式,这些位用来定义计数器的时钟频率:
fTR_CLK = fRTCCLK/(PRL[19:0]+1)
注:不推荐使用0值,否则无法正确的产生RTC中断和标志位。
RTC预分频装载寄存器低位(RTC_PRLL)
偏移地址:0x0C
16.3.4) 只写(参见
复位值:0x8000
1514131211109876543210
wwwwwwwwwwwwwwww
PRL[15:0]
PRL[15:0]RTC预分频装载值低位 15:0
根据以下公式,这些位用来定义计数器的时钟频率:
fTR_CLK = fRTCCLK/(PRL[19:0]+1)
注:
如果输入时钟频率是
32.768kHz(fRTCCLK)
,这个寄存器中写入
7FFFh
可获得周期为
1
秒钟的信号。
16.4.4 RTC预分频器余数寄存器(RTC_DIVH / RTC_DIVL)
TR_CLK的每个周期里,RTC预分频器中计数器的值都会被重新设置为RTC_PRL寄存器的
值。用户可通过读取RTC_DIV寄存器,以获得预分频计数器的当前值,而不停止分频计数器的
工作,从而获得精确的时间测量。此寄存器是只读寄存器,其值在RTC_PRLRTC_CNT寄存
器中的值发生改变后,由硬件重新装载。
RTC预分频器余数寄存器高位(RTC_DIVH)
偏移地址:0x10
复位值:0x0000
1514131211109876543210
rrrr
保留 RTC_DIV[19:16]
15:4 保留
RTC_DIV[19:16]RTC时钟分频器余数高位 (RTC clock divider high) 3:0
RTC预分频器余数寄存器低位(RTC_DIVL)
偏移地址:0x14
复位值:0x8000
1514131211109876543210
rrrrrrrrrrrrrrrr
RTC_DIV[15:0]
RTC_DIV[15:0]RTC时钟器余数低位 (RTC clock divider low) 15:0
16.4.5 RTC计数器寄存器 (RTC_CNTH / RTC_CNTL)
RTC核有一个32位可编程的计数器,可通过两个16位的寄存器访问。计数器以预分频器产生的
TR_CLK间基准为参考进行计数。RTC_CNT寄存器用来存放计数器的计数值。他们受
RTC_CR 的位RTOFF 写保护,仅当RTOFF 值为’1’ 时,允许写操作。在高或低寄存器
(RTC_CNTHRTC_CNTL)上的写操作,能够直接装载到相应的可编程计数器,并且重新装载
RTC预分频器。当进行读操作时,直接返回计数器内的计数值(系统时间)
313/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
实时时钟(RTC) STM32F10xxx参考手册
RTC计数器寄存器高位(RTC_CNTH)
偏移地址:0x18
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
RTC_CNT[31:16]
RTC_CNT[31:16]RTC计数器高位 (RTC counter high) 15:0
可通过读RTC_CNTH寄存器来获RTC计数器当前值的高位部分。要对此寄存器进行写操作
前,必须先进入配置模式(参见16.3.4)
RTC计数器寄存器低位(RTC_CNTL)
偏移地址:0x1C
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
RTC_CNT[15:0]
RTC_CNT[15:0]RTC计数器低位。 15:0
可通过读RTC_CNTL寄存器来获得RTC计数器当前值的低位部分。要对此寄存器进行写操作,
必须先进入配置模式(参见16.3.4)
16.4.6 RTC闹钟寄存器(RTC_ALRH/RTC_ALRL)
当可编程计数器的值与RTC_ALR中的32位值相等时,即触发一个闹钟事件,并且产生RTC闹钟
中断。此寄存器受RTC_CR寄存器里的RTOFF位写保护,仅当RTOFF值为’1’时,允许写操作。
RTC闹钟寄存器高位(RTC_ALRH)
偏移地址:0x20
16.3.4) 只写(参见
复位值:0xFFFF
1514131211109876543210
wwwwwwwwwwwwwwww
RTC_ALR[31:16]
RTC_ALR[31:16]RTC闹钟值高位 (RTC alarm high) 15:0
此寄存器用来保存由软件写入的闹钟时间的高位部分。要对此寄存器进行写操作,必须先进入
配置模式(参见16.3.4)
RTC闹钟寄存器低位(RTC_ALRL)
偏移地址:0x24
16.3.4) 只写(参见
复位值:0xFFFF
1514131211109876543210
wwwwwwwwwwwwwwww
RTC_ALR[15:0]
RTC_ALR[15:0]RTC闹钟值低位 (RTC alarm low) 15:0
此寄存器用来保存由软件写入的闹钟时间的低位部分。要对此寄存器进行写操作,必须先进入
配置模式(参见16.3.4)
314/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
实时时钟(RTC) STM32F10xxx参考手册
315/754
参照200912 RM0008 Reference Manual 英文第10
16.4.7 RTC寄存器映像
RTC寄存器是16位可寻址寄存器,具体描述如下:
82 RTC-寄存器映像和复位值
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
RTC_CRH
OWIE
ALRIE
SECIE
复位值
000
RTC_CRL
RTOFF
CNF
RSF
OWF
ALRF
SECF
复位值
000000
RTC_PRLH
复位值
0000
RTC_PRLL
复位值
1000000000000000
RTC_DIVH
复位值
0000000000000000
RTC_DIVL
复位值
1000000000000000
RTC_CNTH
复位值
0000000000000000
RTC_CNTL
复位值
0000000000000000
00Ch 保留 PRL[15:0]
010h 保留 DIV[31:16]
保留
CNT[15:0]
008h
保留
保留
保留
PRL[19:16]
004h
000h
014h
018h
01Ch
DIV[15:0]
保留 CNT[31:16]
保留
RTC_ALRH
复位值
1111111111111111
RTC_ALRL
复位值
1111111111111111
024h 保留 ALR[15:0]
保留 ALR[31:16]
020h
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
有关寄存器的起始地址,参见表1
独立看门狗(IWDG) STM32F10xxx参考手册
17 独立看门狗(IWDG)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
17.1 简介
STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看
门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给
定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。
独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门
狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过
或过早的操作。
IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精
度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。
18章。 关于窗口看门狗的详情,请参看第
17.2 IWDG主要性能
自由运行的递减计数器
时钟由独立的RC振荡器提供(可在停止和待机模式下工作)
看门狗被激活后,则在计数器计数至0x000时产生复位
17.3 IWDG功能描述
157为独立看门狗模块的功能框图。
在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值
0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)
无论何时,只要在键寄存器IWDG_KR中写入0xAAAA IWDG_RLR中的值就会被重新加载到
计数器,从而避免产生看门狗复位
17.3.1 硬件看门狗
如果用户在选择字节中启用了“硬件看门狗”功能,在系统上电复位后,看门狗会自动开始运
行;如果在计数器计数结束前,若软件没有向键寄存器写入相应的值,则系统会产生复位。
17.3.2 寄存器访问保护
IWDG_PR IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向
IWDG_KR寄存器中写入0x5555。以不同的值写入这个寄存器将会打乱操作顺序,寄存器将重
新被保护。重装载操作(即写入0xAAAA)也会启动写保护功能。
状态寄存器指示预分频值和递减计数器是否正在被更新。
17.3.3 调试模式
当微控制器进入调试模式时(Cortex-M3核心停止),根据调试模块中的DBG_IWDG_STOP 配置
位的状态,IWDG的计数器能够继续工作或停止。详见有关调试模块的章节。
316/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
独立看门狗(IWDG) STM32F10xxx参考手册
157 独立看门狗框图
注:
看门狗功能处于
VDD
供电区,即在停机和待机模式时仍能正常工作。
83 看门狗超时时间(40kHz的输入时钟(LSI))(1)
最短时间(ms) 最长时间(ms)
预分频系数 PR[2:0] RL[11:0] = 0x000 RL[11:0] = 0xFFF
/4 0 0.1 409.6
/8 1 0.2 819.2
/16 2 0.4 1638.4
/32 3 0.8 3276.8
/64 4 1.6 6553.6
/128 5 3.2 13107.2
/256 (67) 6.4 26214.4
注:
这些时间是按照
40kHz
时钟给出。实际上,
MCU
内部的
RC
频率会在
30kHz
60kHz
之间变化。
此外,即使
RC
振荡器的频率是精确的,确切的时序仍然依赖于
APB
接口时钟与
RC
振荡器时钟
之间的相位差,因此总会有一个完整的
RC
周期是不确定的。
通过对LSI进行校准可获得相对精确的看门狗超时时间。有关LSI校准的问题,详见6.2.5节。
17.4 IWDG寄存器描述
317/754
关于在寄存器描述里面所用到的缩写,详见第1.1节。
可以用半字(16)或字(32)的方式操作这些外设寄存器。
17.4.1 键寄存器(IWDG_KR)
地址偏移:0x00
复位值:0x0000 0000 (在待机模式复位)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
15
保留
14131211109876543210
wwwwwwwwwwwwwwww
KEY[15:0]
31:16 保留,始终读为0
KEY[15:0]: 键值(只写寄存器,读出值为0x0000) (Key value) 15:0
软件必须以一定的间隔写入0xAAAA,否则,当计数器为0时,看门狗会产生复位。
写入0x5555表示允许访问IWDG_PRIWDG_RLR寄存器。(17.3.2)
写入0xCCCC,启动看门狗工作(若选择了硬件看门狗则不受此命令字限制)
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
独立看门狗(IWDG) STM32F10xxx参考手册
17.4.2 预分频寄存器(IWDG_PR)
地址偏移:0x04
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw
保留
保留 PR[2:0]
31:3 保留,始终读为0
PR[2:0]: 预分频因子 (Prescaler divider) 2:0
17.3.2这些位具有写保护设置,参见 节。通过设置这些位来选择计数器时钟的预分频因子。要
改变预分频因子,IWDG_SR寄存器的PVU位必须为0
000: 预分频因子=4 100: 预分频因子=64
001: 预分频因子=8 101: 预分频因子=128
010: 预分频因子=16 110: 预分频因子=256
011: 预分频因子=32 111: 预分频因子=256
注意:对此寄存器进行读操作,将从VDD电压域返回预分频值。如果写操作正在进行,则读回
的值可能是无效的。因此,只有当IWDG_SR寄存器的PVU位为0时,读出的值才有效。
17.4.3 重装载寄存器(IWDG_RLR)
地址偏移:0x08
复位值:0x0000 0FFF(待机模式时复位)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw
保留
RL[11:0]保留
31:12 保留,始终读为0
RL[11:0]: 看门狗计数器重装载值 (Watchdog counter reload value) 11:0
这些位具有写保护功能,参看17.3.2节。用于定义看门狗计数器的重装载值,每当向IWDG_KR
寄存器写入0xAAAA时,重装载值会被传送到计数器中。随后计数器从这个值开始递减计数。
看门狗超时周期可通过此重装载值和时钟预分频值来计算,参照表83
只有当IWDG_SR寄存器中的RVU位为0时,才能对此寄存器进行修改。
注:对此寄存器进行读操作,将从VDD电压域返回预分频值。如果写操作正在进行,则读回的
值可能是无效的。因此,只有当IWDG_SR寄存器的RVU位为0时,读出的值才有效。
318/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
独立看门狗(IWDG) STM32F10xxx参考手册
319/754
参照200912 RM0008 Reference Manual 英文第10
17.4.4 状态寄存器(IWDG_SR)
地址偏移:0x0C
复位值:0x0000 0000 (待机模式时不复位)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
RVU PVU
rr
保留
保留
31:2 保留。
RVU: 看门狗计数器重装载值更新 (Watchdog counter reload value update) 1
此位由硬件置’1’用来指示重装载值的更新正在进行中。当在VDD域中的重装载更新结束后,此
位由硬件清’0’(最多需540kHzRC周期)。重装载值只有在RVU位被清’0’后才可更新。
PVU: 看门狗预分频值更新 (Watchdog prescaler value update) 0
此位由硬件置’1’用来指示预分频值的更新正在进行中。当在VDD域中的预分频值更新结束后,
此位由硬件清’0’(最多需540kHzRC周期)。预分频值只有在PVU位被清’0’后才可更新。
注:
如果在应用程序中使用了多个重装载值或预分频值,则必须在
RVU
位被清除后才能重新改变预
装载值,在
PVU
位被清除后才能重新改变预分频值。然而,在预分频和
/
或重装值更新后,不
必等待
RVU
PVU
复位,可继续执行下面的代码。
(
即是在低功耗模式下,此写操作仍会被继
续执行完成。
)
17.4.5 IWDG寄存器映像
84 IWDG寄存器映像和复位值
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
IWDG_KR
复位值 0000000000000000
IWDG_PR
复位值 000
IWDG_RLR
复位值 111111111111
IWDG_SR
RVU
PVU
复位值 00
RL[11:0]
保留
004h
000h 保留 KEY[15:0]
008h
00Ch
PR[2:0]
保留
保留
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
有关寄存器的起始地址,参见表1
窗口看门狗(WWDG) STM32F10xxx参考手册
18 窗口看门狗(WWDG)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
18.1 WWDG简介
窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运
行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置
的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减
计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在
一个有限的时间窗口中被刷新。
18.2 WWDG主要特性
可编程的自由运行递减计数器
条件复位
当递减计数器的值小于0x40(若看门狗被启动)则产生复位。
当递减计数器在窗口外被重新装载,(若看门狗被启动)则产生复位。见0
如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可
以被用于重装载计数器以避免WWDG复位。
18.3 WWDG功能描述
如果看门狗被启动(WWDG_CR寄存器中的WDGA位被置’1’) 并且当7(T[6:0])递减计数器从
0x40翻转到0x3F(T6位清零)时,则产生一个复位。如果软件在计数器值大于窗口寄存器中的数
值时重新装载计数器,将产生一个复位。
158 看门狗框图
320/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
窗口看门狗(WWDG) STM32F10xxx参考手册
应用程序在正常运行过程中必须定期地写入WWDG_CR寄存器以防止MCU发生复位。只有当计
数器值小于窗口寄存器的值时,才能进行写操作。储存在WWDG_CR寄存器中的数值必须在
0xFF0xC0之间:
启动看门狗
在系统复位后,看门狗总是处于关闭状态,设置WWDG_CR寄存器的WDGA位能够开启看
门狗,随后它不能再被关闭,除非发生复位。
控制递减计数器
递减计数器处于自由运行状态,即使看门狗被禁止,递减计数器仍继续递减计数。当看门
狗被启用时,T6位必须被设置,以防止立即产生一个复位。
T[5:0]位包含了看门狗产生复位之前的计时数目;复位前的延时时间在一个最小值和一个最
大值之间变化,这是因为写入WWDG_CR寄存器时,预分频值是未知的。
配置寄存器(WWDG_CFR) 中包含窗口的上限值:要避免产生复位,递减计数器必须在其值
小于窗口寄存器的数值并且大于0x3F时被重新装载,0描述了窗口寄存器的工作过程。
另一个重装载计数器的方法是利用早期唤醒中断(EWI)。设置WWDG_CFR寄存器中的WEI
位开启该中断。当递减计数器到达0x40时,则产生此中断,相应的中断服务程序(ISR)可以
用来加载计数器以防止WWDG复位。在WWDG_SR寄存器中写’0’可以清除该中断。
注:
可以用
T6
位产生一个软件复位
(
设置
WDGA
位为
’1’
T6
位为
’0’)
18.4 如何编写看门狗超时程序
321/754
可以使用0提供的公式计算窗口看门狗的超时时间。
警告:当写入 WWDG_CR 寄存器时,始终置 T6 位为’1’以避免立即产生一个复位。
159 窗口看门狗时序图
计算超时的公式如下:
T
WWDG = TPCLK1 x 4096 x 2WDGTB x (T[5:0] + 1); (ms)
其中:
T
WWDGWWDG超时时间
T
PCLK1APB1ms为单位的时钟间隔
PCLK1 = 36MHz时的最小-最大超时值
WDGTB 最小超时值 最大超时值
0 113µs 7.28ms
1 227µs 14.56ms
2 455µs 29.12ms
3 910µs 58.25ms
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
窗口看门狗(WWDG) STM32F10xxx参考手册
18.5 调试模式
当微控制器进入调试模式时(Cortex-M3核心停止),根据调试模块中的DBG_WWDG_STOP
置位的状态,WWDG的计数器能够继续工作或停止。详见第29.16.2节。
18.6 寄存器描述
322/754
关于在寄存器描述里面所用到的缩写,详见第1.1节。
可以用半字(16)或字(32)的方式操作这些外设寄存器。
18.6.1 控制寄存器(WWDG_CR)
地址偏移量:0x00
复位值:0x7F
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
WDGA T6 T5 T4 T3 T2 T1 T0
rs rw rw rw rw rw rw rw
保留
保留
31:8 保留。
WDGA: 激活位 (Activation bit) 7
此位由软件置’1’,但仅能由硬件在复位后清’0’。当WDGA=1时,看门狗可以产生复位。
0:禁止看门狗
1:启用看门狗
T[6:0]: 7位计数器(MSBLSB) (7-bit counter) 6:0
这些位用来存储看门狗的计数器值。每(4096x2WDGTB)PCLK1周期减1。当计数器值40h
3Fh(T6变成0),产生看门狗复位。
18.6.2 配置寄存器(WWDG_CFR)
地址偏移量:0x04
复位值:0x7F
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
EWI WDG
TB1
WDG
TB0 W6 W5 W4 W3 W2 W1 W0
rs rw rw rw rw rw rw rw rw rw
保留
保留
31:8 保留。
EWI: 提前唤醒中断 (Early wakeup interrupt) 9
此位若置’1’,则当计数器值达到40h,即产生中断。
此中断只能由硬件在复位后清除。
WDGTB[1:0]: 时基 (Timer base) 8:7
预分频器的时基可以设置如下:
00: CK计时器时钟(PCLK1除以4096)除以1
01: CK计时器时钟(PCLK1除以4096)除以2
10: CK计时器时钟(PCLK1除以4096)除以4
11: CK计时器时钟(PCLK1除以4096)除以8
W[6:0]: 7位窗口值 (7-bit window value) 6:0
这些位包含了用来与递减计数器进行比较用的窗口值。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
窗口看门狗(WWDG) STM32F10xxx参考手册
323/754
参照200912 RM0008 Reference Manual 英文第10
18.6.3 状态寄存器(WWDG_SR)
地址偏移量:0x08
复位值:0x00
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
EWIF
rc w0
保留
保留
31:1 保留。
EWIF: 提前唤醒中断标志 (Early wakeup interrupt flag) 0
当计数器值达到40h时,此位由硬件置’1’。它必须通过软件写’0’来清除。对此位写’1’无效。若
中断未被使能,此位也会被置’1’
18.6.4 WWDG寄存器映像
85 WWDG寄存器映像和复位值
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
WWDG_CR
WDGA
复位值
01111111
WWDG_CFR
EWI
WDGTB1
WDGTB0
复位值
0001111111
WWDG_SR
EWIF
复位值
0
T[6:0]
保留 W[6:0]
保留
004h
000h
008h
保留
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
有关寄存器的起始地址,参见表1
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
19 灵活的静态存储器控制器(FSMC)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
本章内容只适用于大容量产品。
19.1 FSMC功能描述
FSMC模块能够与同步或异步存储器和16PC存储器卡接口,它的主要作用是:
AHB传输信号转换到适当的外部设备协议
满足访问外部设备的时序要求
所有的外部存储器共享控制器输出的地址、数据和控制信号,每个外部设备可以通过一个唯一
的片选信号加以区分。FSMC在任一时刻只访问一个外部设备。
FSMC具有下列主要功能:
具有静态存储器接口的器件包括:
静态随机存储器(SRAM)
只读存储器(ROM)
NOR闪存
PSRAM(4个存储器块)
两个NAND闪存块,支持硬件ECC并可检测多达8K字节数据
16位的PC卡兼容设备
支持对同步器件的成组(Burst)访问模式,如NOR闪存和PSRAM
816位数据总线
每一个存储器块都有独立的片选控制
每一个存储器块都可以独立配置
时序可编程以支持各种不同的器件:
等待周期可编程(多达15个周期)
总线恢复周期可编程(多达15个周期)
输出使能和写使能延迟可编程(多达15周期)
独立的读写时序和协议,可支持宽范围的存储器和时序
PSRAMSRAM器件使用的写使能和字节选择输出
32位的AHB访问请求,转换到连续的16位或8位的,对外部16位或8位器件的访问
具有16个字,每个字32位宽的写入FIFO,允许在写入较慢存储器时释放AHB进行其它操
作。在开始一次新的FSMC操作前,FIFO要先被清空。
通常在系统复位或上电时,应该设置好所有定义外部存储器类型和特性的FSMC寄存器,并保持
它们的内容不变;当然,也可以在任何时候改变这些设置。
19.2 框图
FSMC包含四个主要模块:
AHB接口(包含FSMC配置寄存器)
NOR闪存和PSRAM控制器
324/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
NAND闪存和PC卡控制器
外部设备接口
FSMC框图如下:
160 FSMC框图
19.3 AHB接口
AHB接口为内部CPU和其它总线控制设备访问外部静态存储器提供了通道。
AHB操作被转换到外部设备的操作。当选择的外部存储器的数据通道是168位时,在AHB上的
32位数据会被分割成连续的168位的操作。
AHB时钟(HCLK)FSMC的参考时钟。
19.3.1 支持的存储器和操作
一般的操作规则
请求AHB操作的数据宽度可以是8位、16位或32位,而外部设备则是固定的数据宽度,此时需要
保障实现数据传输的一致性。
因此,FSMC执行下述操作规则:
AHB操作的数据宽度与存储器数据宽度相同:无数据传输一致性的问题。
AHB操作的数据宽度大于存储器的数据宽度:此时FSMCAHB操作分割成几个连续的较小
数据宽度的存储器操作,以适应外部设备的数据宽度。
325/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
AHB操作的数据宽度小于存储器的数据宽度:
依据外部设备的类型,异步的数据传输有可能不一致。
与具有字节选择功能的存储器(SRAMROMPSRAM)进行异步传输时,FSMC执行
读写操作并通过它的字节通道BL[1:0]访问正确的数据。
与不具有字节选择功能的存储器(NOR16NAND)进行异步传输时,即需要对16位宽
的闪存存储器进行字节访问;显然不能对存储器进行字节模式访问(只允许16位的数据传
),因此:
a. 不允许进行写操作
b. 可以进行读操作(控制器读出完整的16位存储器数据,只使用需要的字节)
配置寄存器
FSMC由一组寄存器进行配置。19.5.6节详细描述了NOR闪存和PSRAM控制器寄存器。19.6.7
节详细描述了NAND闪存和PC卡寄存器。
19.4 外部设备地址映像
FSMC的角度看,可以把外部存储器划分为固定大小为256M字节的四个存储块,见下图。
存储块1用于访问最多4NOR闪存或PSRAM存储设备。这个存储区被划分为4
NOR/PSRAM区并有4个专用的片选。
存储块23用于访问NAND闪存设备,每个存储块连接一个NAND闪存。
存储块4用于访问PC卡设备
每一个存储块上的存储器类型是由用户在配置寄存器中定义的。
161 FSMC存储块
326/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
19.4.1 NORPSRAM地址映像
HADDR[27:26]位用于选择四个存储块之一:
86 NOR/PSRAM存储块选择
HADDR[27:26](1) 选择的存储块
00 存储块1 NOR/PSRAM 1
01 存储块1 NOR/PSRAM 2
10 存储块1 NOR/PSRAM 3
11 存储块1 NOR/PSRAM 4
(1) HADDR是需要转换到外部存储器的内部AHB地址线。
HADDR[25:0]包含外部存储器地址。HADDR是字节地址,而存储器访问不都是按字节访问,因
此接到存储器的地址线依存储器的数据宽度有所不同,如下表:
87 外部存储器地址
数据宽度(1) 连到存储器的地址线 最大访问存储器空间()
8 HADDR[25:0]FSMC_A[25:0]对应相连 64M字节 x 8 = 512 M
16 HADDR[25:1]FSMC_A[24:0]对应相连,HADDR[0]未接 64M字节/2 x 16 = 512 M
(1) 对于16位宽度的外部存储器,FSMC将在内部使用HADDR[25:1]产生外部存储器的地址FSMC_A[24:0]。不
论外部存储器的宽度是多少(16位或8)FSMC_A[0]始终应该连到外部存储器的地址线A[0]
NOR闪存和PSRAM的非对齐访问支持
每个NOR闪存或PSRAM存储器块都可以配置成支持非对齐的数据访问。
在存储器一侧,依据访问的方式是异步或同步,需要考虑两种情况:
异步模式:这种情况下,只要每次访问都有准确的地址,完全支持非对齐的数据访问。
同步模式:这种情况下,FSMC只发出一次地址信号,然后成组的数据传输通过时钟CLK
序进行。
某些NOR存储器支持线性的非对齐成组访问,固定数目的数据字可以从连续的以N为模的地
址读取(典型的N816,可以通过NOR闪存的配置寄存器设置)。此种情况下,可以把存
储器的非对齐访问模式设置为与AHB相同的模式。
如果存储器的非对齐访问模式不能设置为与AHB相同的模式,应该通FSMC配置寄存器的相
应位禁止非对齐访问,并把非对齐的访问请求分开成两个连续的访问操作。
19.4.2 NANDPC卡地址映像
三个存储块可以用于NANDPC卡的操作,每个存储块被划分为下述访问空间:
88 存储器映像和时序寄存器
起始地址 结束地址 FSMC存储块 时序寄存器 存储空间
0x9C00 0000 0x9FFF FFFF I/O FSMC_PIO4(0xB0)
0x9800 0000 0x9BFF FFFF FSMC_PATT4(0xAC)
属性
4 – PC
0x9000 0000 0x93FF FFFF FSMC_PMEM4(0xA8)
通用
0x8800 0000 0x8BFF FFFF FSMC_PATT3(0x8C)
属性
3 – NAND闪存
0x8000 0000 0x83FF FFFF FSMC_PMEM3(0x88)
通用
0x7800 0000 0x7BFF FFFF FSMC_PATT2(0x6C)
属性
2 – NAND闪存
0x7000 0000 0x73FF FFFF FSMC_PMEM2(0x68)
通用
对于NAND闪存存储器,通用和属性空间又可以在低256K字节部分划分为3个区(见表89)
数据区(通用/属性空间的前64K字节区域)
命令区(通用/属性空间的第264K字节区域)
地址区(通用/属性空间的第2128K字节区域)
327/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
89 NAND存储块选择
HADDR[17:16]
区域名称 地址范围
1X 0x020000~0x03FFFF
地址区
01 0x010000~0x01FFFF
命令区
00 0x000000~0x00FFFF
数据区
应用软件使用这3个区访问NAND闪存存储器:
发送命令到NAND闪存存储器:软件只需对命令区的任意一个地址写入命令即可。
指定操作NAND闪存存储器的地址:软件只需对地址区的任意一个地址写入命令即可。因为
一个NAND地址可以有45个字节(依实际的存储器容量而定),需要连续地执行对地址区的
写才能输出完整的操作地址。
读写数据:软件只需对数据区的任意一个地址写入或读出数据即可。
因为NAND闪存存储器自动地累加其内部的操作地址,读写数据时没有必要变换数据区的地址,
即不必对连续的地址区操作。
19.5 NOR闪存和PSRAM控制器
FSMC可以产生适当的信号时序,驱动下述类型的存储器:
异步SRAMROM
8
16
32
PSRAM(Cellular RAM)
异步模式
突发模式
NOR闪存
异步模式或突发模式
复用模式或非复用模式
FSMC对每个存储块输出一个唯一的片选信号NE[4:1],所有其它的(地址、数据和控制)信号则是
共享的。
在同步方式中,FSMC向选中的外部设备产生时钟(CLK),该时钟的频率是HCLK时钟的整除因
子。每个存储块的大小固定为64M字节。
每个存储块都有专门的寄存器控制(19.6.7)
可编程的存储器参数包括访问时序(见下表)、是否支持非对齐数据存取和等待周期管理(只针对
突发模式下访问PSRAMNOR闪存)
90 可编程的NOR/PSRAM访问参数
参数 功能 访问方式 单位 最小 最大
地址建立时间 地址建立阶段的时间 异步 AHB时钟周期(HCLK) 1 16
地址保持时间 地址保持阶段的时间 异步,复用I/O AHB时钟周期(HCLK) 2 16
数据建立时间 数据建立阶段的时间 异步 AHB时钟周期(HCLK) 2 256
总线恢复时间 总线恢复阶段的时间 异步或同步读 AHB时钟周期(HCLK) 1 16
存储器访问的时钟周期(CLK)
AHB时钟周期的比例
时钟分频因子 同步 AHB时钟周期(HCLK) 1 16
突发模式下产生第一个数据所
需的时钟数目
数据产生时间 同步 存储器时钟周期(CLK) 2 17
328/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
19.5.1 外部存储器接口信号
91
329/754
、表92、表93列出了与NOR闪存和PSRAM接口的典型信号。
注:
具有前缀“
N
”的信号表示低有效信号
NOR闪存,非复用接口
91 非复用信号的NOR闪存接口
FSMC信号名称 信号方向 功能
CLK 输出 时钟(同步突发模式使用)
A[25:0] 输出 地址总线
D[15:0] 输入/输出 双向数据总线
NE[x] 输出 片选,x = 1...4
NOE 输出 输出使能
NWE 输出 写使能
NWAIT 输入 NOR闪存要求FSMC等待的信号
NOR闪存存储器是按16位的字寻址,最大容量达64M字节(26条地址线)
NOR闪存,复用接口
92NOR闪存接口
FSMC信号名称 信号方向 功能
CLK 输出 时钟(同步突发模式使用)
A[25:16] 输出 地址总线
AD[15:0] 输入/输出 16位复用的,双向地址/数据总线
NE[x] 输出 片选,x = 1...4
NOE 输出 输出使能
NWE 输出 写使能
NL(=NADV) 输出 锁存使能(某些NOR闪存器件命名该信号为地址有效,NADV)
NWAIT 输入 NOR闪存要求FSMC等待的信号
NOR闪存存储器是按16位的字寻址,最大容量达64M字节(26条地址线)
PSRAM
93 非复用信号的PSRAM接口
FSMC信号名称 信号方向 功能
CLK 输出 时钟(同步突发模式使用)
A[25:0] 输出 地址总线
D[15:0] 输入/输出 双向数据总线
NE[x] 输出 片选,x = 1...4 (PSRAM称其为NCE(Cellular RAMCRAM))
NOE 输出 输出使能
NWE 输出 写使能
NL(=NADV) 输出 地址有效(存储器信号名称为:NADV)
NWAIT 输入 PSRAM要求FSMC等待的信号
NBL[1] 输出 高字节使能(存储器信号名称为:NUB)
NBL[0] 输出 低字节使能(存储器信号名称为:NLB)
PSRAM存储器是按16位的字寻址,最大容量达64M字节(26条地址线)
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
19.5.2 支持的存储器及其操作
下表列出了支持的存储器、访问模式和操作方式,FSMC不支持阴影部分的操作方式。
94 FSMC支持的NOR闪存/PSRAM存储器和操作方式
AHB数据
宽度
存储器数据
宽度
存储器 模式 / 是否支持 注释
8 16
异步 支持
8 16
异步 不支持
16 16
异步 支持
16 16
异步 支持
330/754
异步 32 16 支持 分成2FSMC访问
异步 32 16 支持 分成2FSMC访问
异步页 读 - 16 不支持 不支持这种模式
NOR闪存
(总线复用
和非总线
复用)
8 16
同步 不支持
16 16
同步 支持
32 16
同步 支持
8 16
异步 支持
8 16
异步 支持 使用字节信号NBL[1:0]
16 16
异步 支持
16 16
异步 支持
32 16
异步 支持 分成2FSMC访问
异步 32 16 支持 分成2FSMC访问
PSRAM
异步页 读 - 16 不支持 不支持这种模式
同步 8 16 不支持
(总线复用
和非总线
复用)
16 16
同步 支持
32 16
同步 支持
8 16
同步 支持 使用字节信号NBL[1:0]
16/32 16
同步 支持
8/16/32 8/16
异步 支持 使用字节信号NBL[1:0]
SRAM
ROM 8/16/32 8/16
异步 支持 使用字节信号NBL[1:0]
19.5.3 时序规则
信号同步
所有的控制器输出信号在内部时钟(HCLK)的上升沿变化
在同步写模式(PSRAM)下,输出的数据在存储器时钟(CLK)的下降沿变化。
19.5.4 NOR闪存和PSRAM控制器时序图
异步静态存储器(NOR闪存和PSRAM)
所有信号由内部时钟HCLK保持同步,但该时钟不会输出到存储器;
FSMC始终在片选信号NE失效前对数据线采样,这样能够保证符合存储器的数据保持时序
(片选失效至数据失效的间隔,通常最小为0ns)
当设置了扩展模式,可以在读和写时混合使用模式ABCD(例如,允许以模式A进行
读,而以模式B进行写)
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
模式1 —— SRAM/CRAM
1621读操作
1631写操作
在写操作的最后一个HCLK周期可以保证NWE上升沿后地址和数据的保持时间,因为存在这个
HCLK周期,DATAST的数值必须大于0(DATAST > 0)
331/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
95 FSMC_BCRx位域(模式1)
位编号 位名称 设置的数值
31-15 0x0000
14-10 0x0
9 WAITPOL
仅当位15’1’时有意义。
8 BURSTEN 0x0
7 -
6 FACCEN -
5-4 MWID 需要时设置
3-2 MTYP 需要时设置,不包含10(NOR闪存)
1 MUXEN 0x0
0 MBKEN 0x1
96 FSMC_BTRx位域(模式1)
位编号 位名称 设置的数值
31-16 0x0000
15-8 DATAST
操作的第2个阶段的长度,写操作为(DATAST+1HCLK周期),读操作为
(DATAST+3HCLK周期)。这个域不能为0,至少为1
7-4 0x0
3-0 ADDSET
操作的第1个阶段的长度(ADDSET+1HCLK周期)
模式A —— SRAM/PSRAM(CRAM) OE翻转
164A读操作
332/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
165A写操作
模式A与模式1的区别是NOE的变化和相互独立的读写时序。
97 FSMC_BCRx位域(模式A)
位编号 位名称 设置的数值
31-16 0x0000
15 0x0
14 EXTMOD 0x1
13-10 0x0
9 WAITPOL
仅当位15’1’时有意义。
8 BURSTEN 0x0
7 -
6 FACCEN -
5-4 MWID
需要时设置
3-2 MTYP
需要时设置,不包含10(NOR闪存)
1 MUXEN 0x0
0 MBKEN 0x1
98 FSMC_BTRx位域(模式A)
位编号 位名称 设置的数值
31-30 0x0
29-28 ACCMOD 0x0
27-16 0x000
15-8 DATAST
读操作的第2个阶段的长度(DATAST+3HCLK周期)。这个域不能为0(至少为1)
7-4 0x0
3-0 ADDSET
读操作的第1个阶段的长度(ADDSET+1HCLK周期)
333/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
99 FSMC_BWTRx位域(模式A)
位编号 位名称 设置的数值
31-30 0x0
29-28 ACCMOD 0x0
27-16 0x000
15-8 DATAST
写操作的第2个阶段的长度(DATAST+1HCLK周期)。这个域不能为0(至少为1)
7-4 0x0
3-0 ADDSET
写操作的第1个阶段的长度(ADDSET+1HCLK周期)
334/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
模式2/B —— NOR闪存
1662/B读操作
1672写操作
335/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
168B写操作
模式2/B与模式1相比较,不同的是NADV的变化,且在扩展模式下(模式B)读写时序相互独立。
100 FSMC_BCRx位域(模式2/B )
位编号 位名称 设置的数值
31-15 0x0000
14 EXTMOD
模式B0x1;模式20x0
13-10 0x0
9 WAITPOL
仅当位15’1’时有意义。
8 BURSTEN 0x0
7 -
6 FACCEN 0x1
5-4 MWID
需要时设置
3-2 MTYP
10(NOR闪存)
1 MUXEN 0x0
0 MBKEN 0x1
101 FSMC_BTRx位域(模式2/B)
位编号 位名称 设置的数值
31-30 0x0
29-28 ACCMOD
如果使用了扩展模式,设置为0x1
27-16 0x000
15-8 DATAST
读操作的第2个阶段的长度(DATAST+3HCLK周期)。这个域不能为0(至少为1)
7-4 0x0
3-0 ADDSET
读操作的第1个阶段的长度(ADDSET+1HCLK周期)
336/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
102 FSMC_BWTRx位域(模式2/B )
位编号 位名称 设置的数值
31-30 0x0
29-28 ACCMOD
如果使用了扩展模式,设置为0x1
27-16 0x000
15-8 DATAST
写操作的第2个阶段的长度(DATAST+1HCLK周期)。这个域不能为0(至少为1)
7-4 0x0
3-0 ADDSET
写操作的第1个阶段的长度(ADDSET+1HCLK周期)
:
只有当设置了扩展模式时
(
模式
B)
FSMC_BWTRx
才有效,否则该寄存器的内容不起作用。
337/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
模式C —— NOR闪存 - OE翻转
169C读操作
170C写操作
模式C与模式1不同的是,NOENADV的翻转变化,以及独立的读写时序。
338/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
103 FSMC_BCRx位域(模式C)
位编号 位名称 设置的数值
31-15 0x0000
14 EXTMOD 0x1
13-10 0x0
9 WAITPOL
仅当位15’1’时有意义。
8 BURSTEN 0x0
7 -
6 FACCEN 0x1
5-4 MWID
需要时设置
3-2 MTYP
0x2(NOR闪存)
1 MUXEN 0x0
0 MBKEN 0x1
104 FSMC_BTRx位域(模式C)
位编号 位名称 设置的数值
31-30 0x0
29-28 ACCMOD 0x2
27-16 0x000
15-8 DATAST
读操作的第2个阶段的长度(DATAST+3HCLK周期)。这个域不能为0(至少为1)
7-4 0x0
3-0 ADDSET
读操作的第1个阶段的长度(ADDSET+1HCLK周期)
105 FSMC_BWTRx位域(模式C)
位编号 位名称 设置的数值
31-30 0x0
29-28 ACCMOD 0x2
27-16 0x000
15-8 DATAST
写操作的第2个阶段的长度(DATAST+1HCLK周期)。这个域不能为0(至少为1)
7-4 0x0
3-0 ADDSET
写操作的第1个阶段的长度(ADDSET+1HCLK周期)
339/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
模式D —— 带地址扩展的异步操作
171D读操作
172D写操作
模式D与模式1不同的是NADV的翻转变化,NOE的翻转出现在NADV转之后,并且具有独立
的读写时序。
340/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
106 FSMC_BCRx位域(模式D)
位编号 位名称 设置的数值
31-15 0x0000
14 EXTMOD 0x1
13-10 0x0
9 WAITPOL
仅当位15’1’时有意义。
8 BURSTEN 0x0
7 -
6 FACCEN
根据存储器设置
5-4 MWID
需要时设置
3-2 MTYP
需要时设置
1 MUXEN 0x0
0 MBKEN 0x1
107 FSMC_BTRx位域(模式D)
位编号 位名称 设置的数值
31-30 0x0
29-28 ACCMOD 0x2
27-16 0x000
15-8 DATAST
读操作的第2个阶段的长度(DATAST+3HCLK周期)。这个域不能为0(至少为1)
7-4 ADDHLD
读操作的中间阶段的长度(ADDHLD+1HCLK周期)
3-0 ADDSET
读操作的第1个阶段的长度(ADDSET+1HCLK周期)
108 FSMC_BWTRx位域(模式D)
位编号 位名称 设置的数值
31-30 0x0
29-28 ACCMOD 0x2
27-16 0x000
15-8 DATAST
写操作的第2个阶段的长度(DATAST+1HCLK周期)。这个域不能为0(至少为1)
7-4 ADDHLD
写操作的中间阶段的长度(ADDHLD+1HCLK周期)
3-0 ADDSET
写操作的第1个阶段的长度(ADDSET+1HCLK周期)
341/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
复用模式 —— 地址/数据复用的NOR闪存异步操作
173 复用读操作
(1) 总线恢复延迟(BUSTURN+1)与连续 2次读操作之间在内部产生的延迟有部分重叠,因此 BUSTURN5时将不影响输出时序。
174 复用写操作
复用模式与模式D不同的是地址的低16位出现在数据总线上。
342/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
109 FSMC_BCRx位域(复用模式)
位编号 位名称 设置的数值
31-15 0x0000
14 EXTMOD 0x0
13-10 0x0
9 WAITPOL
仅当位15’1’时有意义。
8 BURSTEN 0x0
7 -
6 FACCEN 0x1
5-4 MWID
需要时设置
3-2 MTYP
0x2(NOR闪存)
1 MUXEN 0x1
0 MBKEN 0x1
110 FSMC_BTRx位域(复用模式)
位编号 位名称 设置的数值
31-30 0x0
29-20
19-16 BUSTURN
操作的最后阶段的长度(BUSTURN+1HCLK周期)
15-8 DATAST
操作的第2个阶段的长度,读操作为(DATAST+3HCLK周期),写操作为
(DATAST+1HCLK周期)。这个域不能为0(至少为1)
7-4 ADDHLD
操作的中间阶段的长度(ADDHLD+1HCLK周期)。这个域不能为0(至少为1)
3-0 ADDSET
操作的第1个阶段的长度(ADDSET+1HCLK周期)
19.5.5 同步的成组读
根据参数CLKDIV的不同数值,存储器时钟CLK的周期是HCLK的整数倍。
NOR闪存存储器有一个从NADV有效至CLK变高的最小时间限制,为了满足这个限制,在同步
访问(NADV有效之前)的第一个内部时钟周期中,FSMC不会输出时钟到存储器。这样可以保证
存储器时钟的上升沿产生于NADV低脉冲的中间。
数据延时与NOR闪存的延时
数据延时是指在采样数据之前需等待的周期数目,DATLAT数值必须与NOR闪存配置寄存器中
定义的数值相符合。FSMC不把NADV为低时的时钟周期包含在数据延时这个参数中。
注意:
有些
NOR
闪存把
NADV
为低时的时钟周期包含在数据延时这个参数中,因此
NOR
闪存延时与
FSMC
DATLAT
参数的关系可以是:
NOR闪存延时 = DATLAT + 2;或
NOR闪存延时 = DATLAT + 3
有些新出的存储器会在数据保持阶段产生一个NWAIT信号,这种情况下可以设置DATLAT为其
最小值。FSMC会对NWAIT信号采样并等待足够长的时间直到数据有效,在FSMC检测到存储
器结束了保持阶段后,读取正确的数据。
另外一些存储器不在数据保持阶段输出NWAIT信号,这时FSMC和存储器端的数据保持时间必
须设置为相同的数值,否则将得不到正确的数据,或在存储器访问的初始阶段会有数据丢失。
单次成组传输
当选中的存储器块配置为同步成组模式,如果仅需要进行一次AHB次成组传输,如果AHB
要传输16位数据,则FSMC会执行一次长度为1的成组传输;如果AHB需要传输32位数据,则
FSMC会分成216位传输,执行一次长度为2的成组传输;最后一个数据传输完毕时撤消片选
信号。
343/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
显然,从效率上讲这种传输方式(与异步读相比)不是最有效的;但是一次随机的异步访问需要
新配置存储器访问模式,这同样需要较长时间。
等待管理
对于同步的NOR闪存成组访问,在预置的保持时间(DATLAT+1CLK钟周期)之后,需检测
NWAIT信号。
如果检测到NWAIT为有效电平时(WAITPOL=0时有效电平为低,WAITPOL=1时有效电平为
)FSMC将插入等待周期直到NWAIT 变为无效电平(WAITPOL=0 时无效电平为高,
WAITPOL=1时无效电平为低)
NWAIT变为无效时,FSMC认为数据已经有效(WAITCFG=1),或数据将在下一个时钟边沿有
(WAITCFG=0)
NWAIT信号控制的等待状态插入期间,控制器会连续地向存储器发送时钟脉冲、保持片选信
号和输出有效信号,同时忽略无效的数据信号。
在成组传输模式下,NOR闪存的NWAIT信号有2种时序配置:
闪存存储器在等待状态之前的一个数据周期插入NWAIT信号(复位后的默认设置)
闪存存储器在等待状态期间插入NWAIT信号。
通过配置FSMC_BCRx存器中的WAITCFG位,FSMC在每个片选上都支持这2NOR闪存的
等待状态配置。
175 同步的总线复用读模式 – NOR, PSRAM(CRAM)
BL信号没有显示在图中,对于NOR闪存BL应该为高;对于PSRAM(CRAM)BL应该为低。
344/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
111 FSMC_BCRx位域(同步模式)
位编号 位名称 设置的数值
31-20 0x0000
19 CBURSTRW
对同步读模式不起作用
18-15 0x0
14 EXTMOD 0x0
13 WAITEN
当此位为高时,不管存储器的等待数值是多少,FSMC视数据保
持阶段结束后的第一个数据有效。
12 WREN
对同步读模式不起作用
11 WAITCFG
根据存储器特性设置
10 WRAPMOD
根据存储器特性设置
9 WAITPOL
根据存储器特性设置
8 BURSTEN 0x1
7 FWPRLVL
设置此位防止存储器被意外写
6 FACCEN
根据存储器设置
5-4 MWID
根据需要设置
3-2 MTYP
0x1 0x2
1 MUXEN
根据需要设置
0 MBKEN 0x1
112 FSMC_BTRx位域(同步模式)
位编号 位名称 设置的数值
27-24 DATLAT
数据保持时间
23-20 CLKDIV
0x0 – 得到CLK = HCLK(不支持)
0x1 – 得到CLK = 2 x HCLK
19-16 BUSTURN
不起作用
15-8 DATAST
不起作用
7-4 ADDHLD
不起作用
3-0 ADDSET
不起作用
345/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
176 同步写模式 – PSRAM(CRAM)
1.存储器必须提前一个周期产生NWAIT信号,同时WAITCFG应配置为0
2.字节选择BL输出没有显示在图中,当NEx为有效时它们为低。
113 FSMC_BCRx位域(同步模式)
位编号 位名称 设置的数值
31-20 0x0000
19 CBURSTRW 0x1
18-15 0x0
14 EXTMOD 0x0
13 WAITEN
当此位为高时,不管存储器的等待数值是多少,FSMC视数据保持阶段结束
后的第一个数据有效。
12 WREN
对同步读模式不起作用
11 WAITCFG 0x0
10 WRAPMOD
根据存储器特性设置
9 WAITPOL
根据存储器特性设置
8 BURSTEN
对同步写模式不起作用
7 FWPRLVL
设置此位防止存储器被意外写
6 FACCEN
根据存储器设置
5-4 MWID
根据需要设置
3-2 MTYP 0x1
1 MUXEN
根据需要设置
0 MBKEN 0x1
346/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
114 FSMC_BTRx位域(同步模式)
位编号 位名称 设置的数值
31-30 - 0x0
27-24 DATLAT
数据保持时间
23-20 CLKDIV
0x0 – 得到CLK = HCLK(不支持)
0x1 – 得到CLK = 2 x HCLK
19-16 BUSTURN
不起作用
15-8 DATAST
不起作用
7-4 ADDHLD
不起作用
3-0 ADDSET
不起作用
19.5.6 NOR闪存和PSRAM控制器寄存器
必须以字(32)的方式操作这些外设寄存器。
SRAM/NOR闪存片选控制寄存器 1…4 (FSMC_BCR1…4)
地址偏移:0xA000 0000 + 8 * (x-1), x=1…4
复位值:0x0000 30DX
这个寄存器包含了每个存储器块的控制信息,可以用于SRAMROM、异步或成组传输的NOR
闪存存储器。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CBURSTRW
EXTMOD
WAITEN
WREN
WAITCFG
WRAPMOD
WAITPOL
BURSTEN
保留
FACCEN
MUXEN
MBKEN
rw rw rw rw rw rw rw rw res rw rw rw
MWID保留 MTYP保留
res rw rwres
CBURSTRW:成组写使能位 (Write burst enable) 19
对于Cellular RAM,该位使能写操作的同步成组传输协议。
对于处于成组传输模式的闪存存储器,这一位允许/禁止通过NWAIT信号插入等待状态。读操作的
同步成组传输协议使能位是FSMC_BCRx寄存器的BURSTEN位。
0:写操作始终处于异步模式
1:写操作为同步模式
EXTMOD扩展模式使能 (Extended mode enable) 14
该位允许FSMC使用FSMC_BWTR寄存器,即允许读和写使用不同的时序。
0:不使用FSMC_BWTR寄存器,这是复位后的默认状态。
1FSMC使用FSMC_BWTR寄存器。
WAITEN等待使能位 (Wait enable bit) 13
当闪存存储器处于成组传输模式时,这一位允许/禁止通过NWAIT信号插入等待状态。
0:禁用NWAIT信号,在设置的闪存保持周期之后不会检测NWAIT信号插入等待状态。
1:使用NWAIT信号,在设置的闪存保持周期之后根据NWAIT信号插入等待状态;这是复位后的默
认状态。
WREN写使能位 (Write enable bit) 12
该位指示FSMC是否允许/禁止对存储器的写操作。
0:禁止FSMC对存储器的写操作,否则产生一个AHB错误。
1:允许FSMC对存储器的写操作;这是复位后的默认状态。
347/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
WAITCFG配置等待时序 (Wait timing configuration) 11
当闪存存储器处于成组传输模式时,NWAIT信号指示从闪存存储器出来的数据是否有效或是否需
要插入等待周期。该位决定存储器是在等待状态之前的一个时钟周期产生NWAIT信号,还是在等
待状态期间产生NWAIT信号。
0NWAIT信号在等待状态前的一个数据周期有效;这是复位后的默认状态。
1NWAIT信号在等待状态期间有效(不适用于Cellular RAM)
WRAPMOD支持非对齐的成组模式 (Wrapped burst mode support) 10
该位决定控制器是否支持把非对齐的AHB成组操作分割成2次线性操作;该位仅在存储器的成组模
式下有效。
0:不允许直接的非对齐成组操作;这是复位后的默认状态。
1:允许直接的非对齐成组操作。
WAITPOL等待信号极性 (Wait signal polarity bit) 9
设置存储器产生的等待信号的极性;该位仅在存储器的成组模式下有效。
0NWAIT等待信号为低时有效;这是复位后的默认状态。
1NWAIT等待信号为高时有效。
BURSTEN成组模式使能 (Burst enable bit) 8
允许对闪存存储器进行成组模式访问;该位仅在闪存存储器的同步成组模式下有效。
0:禁用成组访问模式;这是复位后的默认状态。
1:使用成组访问模式。
7 保留。
FACCEN闪存访问使能 (Flash access enable) 6
允许对NOR闪存存储器的访问操作。
0:禁止对NOR闪存存储器的访问操作.
1:允许对NOR闪存存储器的访问操作。
MWID存储器数据总线宽度 (Memory databus width) 5:4
定义外部存储器总线的宽度,适用于所有类型的存储器。
008位,
0116(复位后的默认状态)
10:保留,不能用
11:保留,不能用
MTYP存储器类型 (Memory type) 3:2
定义外部存储器的类型:
00SRAMROM(存储器块2...4在复位后的默认值)
01PSRAM(Cellular RAM: CRAM)
10NOR闪存(存储器块1在复位后的默认值)
11:保留
MUXEN地址/数据复用使能位 (Address/data multiplexing enable bit) 1
当设置了该位后,地址的低16位和数据将共用数据总线,该位仅对NORPSRM存储器有效。
0:地址/数据不复用。
1:地址/数据复用数据总线;这是复位后的默认状态。
MBKEN存储器块使能位 (Memory bank enable bit) 0
开启对应的存储器块。复位后存储器块1是开启的,其它所有存储器块为禁用。访问一个禁用的存
储器块将在AHB总线上产生一个错误。
0:禁用对应的存储器块。
1:启用对应的存储器块。
348/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
SRAM/NOR闪存片选时序寄存器 1…4 (FSMC_BTR1…4)
地址偏移:0xA000 0000 + 0x04 + 8 * (x-1), x=1…4
复位值:0x0FFF FFFF
这个寄存器包含了每个存储器块的控制信息,可以用于SRAMROMNOR闪存存储器。如果
FSMC_BCRx寄存器中设置了EXTMOD位,则有两个时序寄存器分别对应读(本寄存器)和写操
(FSMC_BWTRx寄存器)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw
保留
ACCMOD
DATLAT CLKDIV BUSTURN DATAST ADDHLD ADDSET
res rw rwrw rw rw rw
ACCMOD访问模式 (Access mode) 29:28
定义异步访问模式。这2位只在FSMC_BCRx寄存器的EXTMOD位为1时起作用。
00:访问模式A
01:访问模式B
10:访问模式C
11:访问模式D
27:24 DATLAT(见本表格下面的注释)(同步成组式NOR闪存的)数据保持时间 (Data latency (for
synchronous burst NOR Flash))
处于同步成组模式的NOR闪存,需要定义在读取第一个数据之前等待的存储器周期数目。
这个时间参数不是以HCLK表示,而是以闪存时钟(CLK)表示。在访问异步NOR闪存、SRAM
ROM时,这个参数不起作用。操作CRAM时,这个参数必须为0
0000:第一个数据的保持时间为2CLK时钟周期
……
1111:第一个数据的保持时间为17CLK时钟周期(这是复位后的默认数值)
CLKDIV时钟分频比(CLK信号) (Clock divide ratio (for CLK signal)) 23:20
定义CLK时钟输出信号的周期,以HCLK周期数表示:
0000:保留
00011CLK周期=2HCLK周期
00101CLK周期=3HCLK周期
……
11111CLK周期=16HCLK周期(这是复位后的默认数值)
在访问异步NOR闪存、SRAMROM时,这个参数不起作用。
BUSTURN总线恢复时间 (Bus turnaround phase duration) 19:16
这些位用于定义一次读操作之后在总线上的延迟(仅适用于总线复用模式的NOR闪存操作),一
次读操作之后控制器需要在数据总线上为下次操作送出地址,这个延迟就是为了防止总线冲
突。如果扩展的存储器系统不包含总线复用模式的存储器,或最慢的存储器可以在6HCLK
钟周期内将数据总线恢复到高阻状态,可以设置这个参数为其最小值。
0000:总线恢复时间=1HCLK时钟周期
……
1111:总线恢复时间=16HCLK时钟周期(这是复位后的默认数值)
DATAST数据保持时间 (Data-phase duration) 15:8
这些位定义数据的保持时间(162 174),适用于SRAMROM异步总线复用模式的
NOR闪存操作。
0000 0000:保留
0000 0001DATAST保持时间=2HCLK时钟周期
0000 0010DATAST保持时间=3HCLK时钟周期
……
1111 1111DATAST保持时间=256HCLK时钟周期(这是复位后的默认数值)
对于每一种存储器类型和访问方式的数据保持时间,请参考对应的图表(见图162 174)
例如:模式1、读操作、DATAST=1:数据保持时间=DATAST+3=4HCLK时钟周期。
349/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
ADDHLD地址保持时间 (Address-hold phase duration) 7:4
这些位定义地址的保持时间(171 174),适用于SRAMROM异步总线复用模式的
NOR闪存操作。
0000ADDHLD保持时间=1HCLK时钟周期
……
1111ADDHLD保持时间=16HCLK时钟周期(这是复位后的默认数值)
注:在同步操作中,这个参数不起作用,地址保持时间始终是1个存储器时钟周期。
ADDSET地址建立时间 (Address setup phase duration) 3:0
这些位定义地址的建立时间(162 174),适用于SRAMROM异步总线复用模式的
NOR闪存操作。
0000ADDSET建立时间=1HCLK时钟周期
……
1111ADDSET建立时间=16HCLK时钟周期(这是复位后的默认数值)
对于每一种存储器类型和访问方式的地址建立时间,请参考对应的图表(见图162 174)
例如:模式2、读操作、ADDSET=1:地址建立时间=ADDSET+1=2HCLK时钟周期
注:在同步操作中,这个参数不起作用,地址建立时间始终是1个存储器时钟周期。
注:
因为内部的刷新,
PSRAM(CRAM)
具有可变的保持延迟,因此这样的存储器会在数据保持期间
输出
NWAIT
信号以延长数据的保持时间。
使用
PSRAM(CRAM)
DATLAT
域应置为
0
,这样
FSMC
可以及时地退出自己的保持阶段并开始
对存储器发出的
NWAIT
信号进行采样,然后在存储器准备好时开始读或写操作。
这个操作方式还可以用于操作最新的能够输出
NWAIT
信号的同步闪存存储器,详细信息请参考
相应的闪存存储器手册。
SRAM/NOR闪存写时序寄存器 1…4 (FSMC_BWTR1…4)
地址偏移:0xA000 0000 + 0x104 + 8 * (x-1), x=1…4
复位值:0x0FFF FFFF
这个寄存器包含了每个存储器块的控制信息,可以用于SRAMROMNOR闪存存储器。如果
FSMC_BCRx寄存器中设置了EXTMOD位,则这个寄存器对应写操作。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw
保留
ACCMOD
DATLAT CLKDIV 保留 DATAST ADDHLD ADDSET
res rw rwrw rw rw res
ACCMOD访问模式 (Access mode) 29:28
定义异步访问模式。这2位只在FSMC_BCRx寄存器的EXTMOD位为1时起作用。
00:访问模式A
01:访问模式B
10:访问模式C
11:访问模式D
27:24 DATLAT(NOR闪存的同步成组模式)数据保持时间 (Data latency (for synchronous burst
NOR Flash))
处于同步成组模式的NOR闪存,需要定义在读取第一个数据之前等待的存储器周期数目。
0000:第一个数据的保持时间为2CLK时钟周期
……
1111:第一个数据的保持时间为17CLK时钟周期(这是复位后的默认数值)
注:这个时间参数不是以HCLK表示,而是以闪存时钟(CLK)表示。
注:在访问异步NOR闪存、SRAMROM时,这个参数不起作用。
注:操作CRAM时,这个参数必须为0
350/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
CLKDIV时钟分频比(CLK信号) (Clock divide ratio (for CLK signal)) 23:20
定义CLK时钟输出信号的周期,以HCLK周期数表示:
0000:保留
00011CLK周期=2HCLK周期
00101CLK周期=3HCLK周期
……
11111CLK周期=16HCLK周期(这是复位后的默认数值)
在访问异步NOR闪存、SRAMROM时,这个参数不起作用。
19:16 保留
DATAST数据保持时间 (Data-phase duration) 15:8
这些位定义数据的保持时间(162 174),适用于SRAMROM异步总线复用模式的
NOR闪存操作。
0000 0000:保留
0000 0001DATAST保持时间=2HCLK时钟周期
0000 0010DATAST保持时间=3HCLK时钟周期
……
1111 1111DATAST保持时间=256HCLK时钟周期(这是复位后的默认数值)
ADDHLD地址保持时间 (Address-hold phase duration) 7:4
这些位定义地址的保持时间(171 174),适用于SRAMROM异步总线复用模式的
NOR闪存操作。
0000:保留
0001ADDHLD保持时间=2HCLK时钟周期
0010ADDHLD保持时间=3HCLK时钟周期
……
1111ADDHLD保持时间=16HCLK时钟周期(这是复位后的默认数值)
注:在同步NOR闪存操作中,这个参数不起作用,地址保持时间始终是1个闪存时钟周期。
ADDSET地址建立时间 (Address setup phase duration) 3:0
这些位以HCLK周期数定义地址的建立时间(见图162 174),适用于SRAMROM和异步总
线复用模式的NOR闪存操作。
0000ADDSET建立时间=1HCLK时钟周期
……
1111ADDSET建立时间=16HCLK时钟周期(这是复位后的默认数值)
注:在同步NOR闪存操作中,这个参数不起作用,地址建立时间始终是1个闪存时钟周期。
351/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
19.6 NAND闪存和PC卡控制器
FSMC可以为下列类型的设备产生合适的信号时序:
NAND闪存
8
16
16PC卡兼容的设备
NAND/PC卡控制器能够控制3个外部存储块,存储块2和存储块3支持NAND闪存,存储块4支持
PC卡设备。
19.6.7),可编程的存储器参数包括操作时序和ECC配置。 每个存储块由专门的寄存器配置(
115 可编程NAND/PC卡操作参数
参数 功能 操作模式 单位 最小 最大
存储器建立时间 发出命令之前建立地址的(HCLK)时钟周期数目 / 1 256
存储器等待时间 发出命令的最短持续时间(HCLK周期数目) / 1 256
352/754
存储器保持时间 在发送命令结束后保持地址的(HCLK)时钟周期
数目,写操作时也是数据的保持时间 / 1 255
AHB
钟周期
(HCLK)
存储器数据总线
高阻时间 启动写操作之后保持数据总线为高阻态的时间 0 255
19.6.1 外部存储器接口信号
下表列出了用于接口NAND闪存和PC卡的典型信号线。
注意:
当在
I/O
模式下使用
PC
卡或
CF
卡,在整个操作期间
NIOS16
输入引脚必须保持接地电平,否则
FSMC
可能不能正常操作。即
NIOS16
输入引脚一定不能连接到卡上,但可以直接接地
(
仅允许
16
位访问
)
前缀’N’代表对应的信号线为低电平有效。
8NAND闪存
116 8NAND闪存
FSMC信号名称 输入/输出 功能
A[17] 输出 NAND闪存地址锁存允许信号(ALE)
A[16] 输出 NAND闪存命令锁存允许信号(CLE)
D[7:0] / 8位复用的、双向地址/数据总线
NCE[x] 输出 片选,x = 23
NOE(=NRE) 输出 输出使能(存储器端信号名称:读使能,NRE)
NWE 输出 写使能
NWAIT/INT[3:2] 输入 NAND闪存就绪/繁忙,输入至FSMC的信号
FSMC可以根据需要产生多个地址周期,理论上FSMC不限制可以访问的NAND容量。
16NAND闪存
117 16NAND闪存
FSMC信号名称 输入/输出 功能
A[17] 输出 NAND闪存地址锁存允许信号(ALE)
A[16] 输出 NAND闪存命令锁存允许信号(CLE)
D[15:0] / 16位复用的、双向地址/数据总线
NCE[x] 输出 片选,x = 23
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
NOE(=NRE) 输出 输出使能(存储器端信号名称:读使能,NRE)
NWE 输出 写使能
NWAIT/INT[3:2] 输入 NAND闪存就绪/繁忙,输入至FSMC的信号
FSMC可以根据需要产生多个地址周期,理论上FSMC不限制可以访问的NAND容量。
118 16PC
FSMC信号名称 输入/输出 功能
A[10:0] 输出 地址总线
NIOS16 输入 I/O空间的数据传输宽度(仅适合16位传输)
NIORD 输出 I/O空间的输出使能
NIOWR 输出 I/O空间的写使能
NREG 输出 指示操作是在通用或属性空间的寄存器信号
D[15:0] / 双向数据总线
NCE4_1 输出 片选1
NCE4_2 输出 片选2(指示操作是16位还是8)
NOE 输出 输出使能
NWE 输出 写使能
NWAIT 输入 进入FSMCPC卡等待信号(存储器信号为IORDY)
INTR 输入 进入FSMCPC卡中断信号(仅适合可以产生中断的PC)
CD 输入 PC卡存在的检测信号
19.6.2 NAND闪存/PC卡支持的存储器及其操作
下表列出了支持的设备、操作模式和操作方式。在表格中有阴影的部分表示NAND闪存/PC卡控
制器不支持对应的操作方式。
119 支持的存储器及其操作
存储器 模式 / AHB数据宽度 是否支持 注释 存储器数据宽度
8 8
异步 支持
8 8
异步 支持
16 8
异步 支持 分成2FSMC访问
353/754
异步 16 8
支持 分成2FSMC访问
8
NAND
32 8
异步 支持 分成4FSMC访问
32 8
异步 支持 分成4FSMC访问
8 16
异步 支持
8 16
异步 不支持
16 16
异步 支持
异步 16 16
支持
16
NAND
32 16
异步 支持 分成2FSMC访问
32 16
异步 支持 分成2FSMC访问
19.6.3 NAND闪存、ATAPC卡时序图
每个PC/CF卡和NAND闪存存储器块都是通过一组寄存器管理:
控制寄存器:FSMC_PCRx
中断状态寄存器:FSMC_SRx
ECC寄存器:FSMC_ECCRx
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
通用存储器空间的时序寄存器:FSMC_PMEMx
属性存储器空间的时序寄存器:FSMC_PATTx
I/O空间的时序寄存器:FSMC_PIOx
每一个时序控制寄存器都包含3个参数,用于定义PC/CFNAND闪存操作中三个阶段的
HCLK周期数目,还有一个定义了写操作中FSMC开始驱动数据总线时机的参数。下图给出了在
通用存储空间中操作的时序参数定义,属性存储空间I/O空间(只适用于PC)操作与此相
似。
177 NAND/PC卡控制器通用存储空间的访问时序
1.
在写操作时
NOE
始终保持高
(
无效状态
)
,在读操作时
NWE
始终保持高
(
无效状态
)
2.
只要请求
NAND
访问,
NCEx
信号就变低并在访问其它存储器块之前保持为低。
19.6.4 NAND闪存操作
正如前面所述,NAND闪存的命令锁存使能(CLE)和地址锁存使能(ALE)信号由FSMC的地址信号
线驱动。这意味着在向NAND闪存发送命令或地址时,CPU需要对存储空间中的特定地址执行
写操作。
一个典型的对NAND闪存的读操作有如下步骤:
1 根据NAND闪存的特性,通过FSMC_PCRxFSMC_PMEMx寄存器配置和使能相应的存
储器块,对于某些NAND闪存可能还要操作FSMC_PATTx寄存器(19.6.5节——NAND
闪存预等待功能)。需要配置的位包括:PWID指示NAND闪存的数据总线宽度,
PTYP=1PWAITEN=1PBKEN=1,参见FSMC_PMEM2..4寄存器的时序配置。
2 CPU在通用存储空间写入闪存命令字节(例如对于SamsungNAND闪存,该字节为
0x00),在写信号有效期间(NWE的低脉冲)NAND闪存的CLE输入变为有效(高电平),这时
CPU写的字节被NAND闪存识别为一个命令。一旦NAND闪存锁存了这个命令,随后的页
读操作不必再发送相同的命令。
3 CPU在通用存储器空间或属性空间写入四个字节(较小容量的NAND闪存可能只需要三个
字节)作为读操作的开始地址(STARTAD),以64Mbx8NAND闪存为例,按照
STARTAD[7:0]STARTAD[16:9]STARTAD[24:17]STARTAD[25] 的顺序写入。在写
信号有效期间(NWE的低脉冲)NAND闪存的ALE输入变为有效(高电平),这时CPU写的字
354/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
节被NAND闪存识别为读操作的开始地址。使用属性存储空间,可以使FSMC产生不同的
时序,实现某些NAND闪存所需的预等待功能(19.6.5 NAND闪存预等待功能) 节——
4 控制器在开始(对相同的或另一个存储器块)新的操作之前等待NAND闪存准备就绪(R/NB
信号变为高),在等待期间控制器保持NCE信号有效(低电平)
5 CPU可以在通用存储空间执行字节读操作,逐字节地读出NAND闪存的存储页(数据域和
后备域)
6 CPU不写入命令或地址的情况下,NAND闪存的下一个页可以以下述任一种方式读出:
按照步骤5进行操作
返回步骤3开始输入一个新的地址
返回步骤2开始输入一个新的命令
19.6.5 NAND闪存预等待功能
某些NAND闪存要求在输入最后一个地址字节后,控制器等待R/NB信号变低,如下图:
178CE敏感型NAND闪存
1. CPU写字节命令0x000x7001 0000
2. CPUNAND的地址A7~A00x7002 0000
3. CPUNAND的地址A16~A90x7002 0000
4. CPUNAND的地址A24~A170x7002 0000
5. CPUNAND的地址A250x7802 0000:这时FSMC使用FSMC_PATT2的时序定义执行写操作,此时
ATTHOLD7 (这里:(7+1)xHCLK=112ns > tWB的最大值)。这样可以保证R/NB变低再变高的过程中NCE
持为低,只有那些对CE敏感型的NAND闪存有此要求。
当需要这样的功能时,可以通过配置MEMHOLD的数值来保tWB的时序,但是任何随后的CPU
NAND存的读或写操作中,控制器都会在NWE信号的上升沿至下一次操作之间插入一个保
持延迟,延迟长度为(MEMHOLD+1)HCLK周期。
为了克服这个时序的限制,这里使用了属性存储空间配置ATTHOLD数值使之符合tWB的时
序,同时保持MEMHOLD为其最小值。此时,CPU必须在所NAND闪存的读写操作时使用通
用存储空间,只有在写入NAND闪存地址的最后一个字节时,CPU需要写入属性存储空间。
355/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
19.6.6 NAND闪存的纠错码ECC计算(NAND闪存)
FSMCPC卡控制器包含了2纠错码计算的硬件模块,存储块23各有一个。该模块可以用
于减小CPU在处理纠错码时的软件工作量。
有两个相同的寄存器分别对应存储块2和存储块3,存储块4没有包含硬件的ECC计算模块。
FSMC中实现的纠错码(ECC)算法可以在读或写NAND闪存时,在每25651210242048
40968192个字节中,矫正1个比特位的错误并且检测出2个比特位的错误。
每当NAND闪存存储器卡被激活时,ECC模块监测NAND闪存的数据总线和读/写信(NCE
NWE)
该功能的操作如下:
当在存储器块2或存储器块3访问NAND闪存时,出现在D[15:0]总线上的数据被锁存并用于
ECC计算。
当对NAND闪存的操作发生在其它地址时,ECC电路不进行任何操作。因此输出NAND闪存
命令和地址的写操作不会参与ECC计算。
当规定数目的字节已经写入NAND闪存或从NAND闪存读出,软件必须读出FSMC_ECCR2/3
存器以获得计算的ECC数值。读出ECC数值后,再次计算ECC时需要通过先置ECCEN’0’清除
这个寄存器,再在FSMC_PCR2/3寄存器的ECCEN位写’1’重新使能ECC计算。
19.6.7 NAND闪存和PC卡控制器寄存器
必须以字(32)的方式操作这些外设寄存器。
PC/NAND闪存控制寄存器 2..4 (FSMC_PCR2..4)
地址偏移:0xA000 0000 + 0x40 + 0x20 * (x-1), x=2..4
复位值:0x0000 0018
313029282726252423222120191817161514131211109876543210
ECCEN
PTYP
PBKEN
PWAITEN
保留
rw rw rw rw res
保留 ECCPS TAR TCLR
res rw rw rw
PWID
rw
保留
res
ECCPSECC页面大小 (ECC page size) 19:17
定义扩展的ECC页面大小:
000256字节;
001512字节;
0101024字节;
0112048字节;
1004096字节;
1018192字节。
16:13 TARALERE的延迟 (ALE to RE delay)
AHB时钟周期(HCLK)为单位设置从ALE变低至RE变低的时间。
时间计算:t_ar = (TAR + SET + 4) x THCLK,这里THCLK表示HCLK周期长度
00001HCLK周期(默认值)
……
1111: 16HCLK周期。
注:根据不同的地址空间,SETMEMSET或是ATTSET
356/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
TCLRCLERE的延迟 (CLE to RE delay) 12:9
AHB时钟周期(HCLK)为单位设置从CLE变低至RE变低的时间。
时间计算:t_clr = (TCLR + SET + 4) x THCLK,这里THCLK表示HCLK周期长度
00001HCLK周期(默认值)
……
1111: 16HCLK周期。
注:根据不同的地址空间,SETMEMSET或是ATTSET
8:7 保留
ECCENECC计算电路使能位 (ECC computation logic enable bit) 6
0:关闭并复位ECC电路(复位后的默认值)
1:使能ECC电路。
PWID:数据总线宽度 (Databus width) 5:4
定义外部NAND闪存数据总线的宽度。
008(复位后的默认值)
0116(PC卡必须使用此设置)
10:保留,不要使用;
11:保留,不要使用。
PTYP存储器类型 (Memory type) 3
定义对应的存储器块上连接的存储器类型。
0PC卡、CF卡、CF+卡或PCMCIA
1NAND闪存(复位后的默认值)
PBKENPC/NAND存储器块使能位 (PC Card/NAND Flash memory bank enable bit) 2
使能存储器块。访问一个未使能的存储器块会产生一个AHB总线错误。
0:关闭对应的存储器块(复位后的默认值)
1:使能对应的存储器块。
PWAITEN等待功能使能位 (Wait feature enable bit) 1
使能PC/NAND闪存存储器块的等待功能
0:关闭(复位后的默认值)
1:使能。
注:对于PC卡,如果使能了等待功能,MEMWAITx/ATTWAITx/IOWAITx位的值必须高于
tv(IORDY-NOE)/THCLK+4,其中tv(IORDY-NOE)是一旦NOE为低时NWAIT变低所需的最长时间。
0 保留
FIFO状态和中断寄存器 2..4 (FSMC_SR2..4)
地址偏移:0xA000 0000 + 0x44 + 0x20 * (x-1), x=2..4
复位值:0x0000 0040
该寄存器包含FIFO状态和中断的信息。FSMC有一个FIFO,在写存储器时用于保存从AHB送来
的多达16个字的数据。
这个功能可以在操作FSMC时不过多地占用AHB,在FSMCFIFO传送数据到存储器时施放
AHB的带宽并操作其他外设。
为了计算ECC的需要,该寄存器有一个指示位反映了FIFO的状态。数据写到存储器时同时进行
ECC计算,因此软件必须等待FIFO变空后才能读到正确的ECC数值。
313029282726252423222120191817161514131211109876543210
FEMPT
IFEN
ILEN
IREN
IFS
ILS
IRS
r rwrwrwrwrwrw
保留
res
357/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
FEMPTFIFO空标志 (FIFO empty) 6
只读位,指示FIFO状态
0FIFO不空;
1FIFO空。
IFEN中断下降沿检测使能 (Interrupt falling edge detection enable bit) 5
0:关闭中断下降沿检测请求;
1:使能中断下降沿检测请求。
ILEN中断高电平检测使能 (Interrupt high-level detection enable bit) 4
0:关闭中断高电平检测请求;
1:使能中断高电平检测请求。
IREN上升沿中断检测使能 (Interrupt rising edge detection enable bit) 3
0:关闭中断上升沿检测请求;
1:使能中断上升沿检测请求。
IFS中断下降沿状态 (Interrupt falling edge status) 2
该位由硬件设置,软件清除。
0:没有产生中断下降沿;
1:产生了中断下降沿。
IRS中断高电平状态 (Interrupt high-level status) 1
该位由硬件设置,软件清除。
0:没有产生中断高电平;
1:产生了中断高电平。
IRS中断上升沿状态 (Interrupt rising edge status) 0
该位由硬件设置,软件清除。
0:没有产生中断上升沿;
1:产生了中断上升沿。
通用存储空间时序寄存器 2..4 (FSMC_PMEM2..4)
地址偏移:0xA000 0000 + 0x48 + 0x20 * (x-1), x=2..4
复位值:0xFCFC FCFC
每个FSMC_PMEMx(x=2..4)寄存器都包含操作PC卡或NAND闪存存储块x的时序参数,这些参
数适用于在通用存储空间操作16PC/CF卡,或发送NAND闪存的命令、地址和进行数据的
读写操作。
313029282726252423222120191817161514131211109876543210
MEMHIZx MEMHOLDx MEMWAITx MEMSETx
rw rw rw rw
MEMHIZx在通用空间x数据总线的高阻时间 (Common memory x databus HiZ time) 31:24
当在通用存储空间x开始执行对PC/NAND闪存的写操作后,数据总线需要保持一段时间的高
阻状态,该参数以HCLK时钟周期数目(NAND类型时+1)定义数据总线高阻态的时间。这个参数
仅对写操作有效。
0000 0000(0x00)PC卡为0HCLK周期 / NAND闪存为1HCLK周期;
……
1111 1111(0xFF)PC卡为255HCLK周期 / NAND闪存为256HCLK周期,这是复位后的默
认值。
MEMHOLDx在通用空间x的保持时间 (Common memory x hold time) 23:16
当在通用存储空间xPC/NAND闪存进行读或写操作时,该参数以HCLK时钟周期数目定义
了发送命令(NWENOE变高)后,地址信号(对于写操作则是数据信号)保持的时间。
0000 0000:保留;
0000 00011HCLK周期;
……
1111 1111255HCLK周期(复位后的默认值)
358/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
MEMWAITx在通用空间x的等待时间 (Common memory x wait time) 15:8
当在通用存储空间xPC/NAND闪存进行读或写操作时,该参数以HCLK(+1)时钟周期数目定
义了保持命令(NWENOE为低)的最小时间。当该参数定义的时间结束时,如果等待信号
(NWAIT)有效(),则命令的保持时间会被拉长。
0000 0000:保留;
0000 00012HCLK周期(加上由NWAIT信号变低引入的等待周期)
……
1111 1111256HCLK周期(加上由卡的NWAIT信号变低引入的等待周期),这是复位后的默
认值。
MEMSETx在通用空间x的建立时间 (Common memory x setup time) 7:0
当在通用存储空间xPC/NAND闪存进行读或写操作时,该参数以HCLK(操作PC卡时+1
操作NAND闪存时+2)时钟周期数目定义了发送命令(NWENOE变低)之前建立地址信号的时
间。
0000 0000PC卡为1HCLK周期 / NAND闪存为2HCLK周期;
……
1111 1111PC卡为256HCLK周期 / NAND闪存为257HCLK周期,这是复位后的默认值。
属性存储空间时序寄存器 2..4 (FSMC_PATT2..4)
地址偏移:0xA000 0000 + 0x4C + 0x20 * (x-1), x=2..4
复位值:0xFCFC FCFC
每个FSMC_PATTx(x=2..4)/写寄存器都包含操作PC/CF卡或NAND闪存存储块x的时序参
数,这些参数适用于在属性存储空间操作8PC/CF(每个AHB操作被分解为一系列的8位操
),或在NAND闪存的最后一个地址写操作的时序与其它操作不同的时候(关于就绪/繁忙的管
理,参见19.6.5)
313029282726252423222120191817161514131211109876543210
rw rw rw rw
ATTHIZx ATTHOLDx ATTWAITx ATTSETx
ATTHIZx在属性空间x数据总线的高阻时间 (Attribute memory x databus HiZ time) 31:24
当在属性存储空间x开始执行对PC/NAND闪存的写操作后,数据总线需要保持一段时间的高
阻状态,该参数以HCLK时钟周期数目定义数据总线高阻态的时间。这个参数仅对写操作有
效。
0000 00000HCLK周期;
……
1111 1111255HCLK周期(复位后的默认值)
ATTHOLDx在属性空间x的保持时间 (Attribute memory x hold time) 23:16
当在属性存储空间xPC/NAND闪存进行读或写操作时,该参数以HCLK时钟周期数目定义
了发送命令(NWENOE变高)后,地址信号(对于写操作则是数据信号)保持的时间。
0000 0000:保留;
0000 00011HCLK周期;
……
1111 1111255HCLK周期(复位后的默认值)
ATTWAITx在属性空间x的等待时间 (Attribute memory x wait time) 15:8
当在属性存储空间xPC/NAND闪存进行读或写操作时,该参数以HCLK(+1)时钟周期数目定
义了保持命令(NWENOE为低)的最小时间。当该参数定义的时间结束时如果等待信号
(NWAIT)有效(),则命令的保持时间会被拉长。
0000 00001HCLK周期(加上由NWAIT信号变低引入的等待周期)
……
1111 1111256HCLK周期(加上由卡的NWAIT信号变低引入的等待周期)(复位后的默认
)
359/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
ATTSETx在属性空间x的建立时间 (Attribute memory x setup time) 7:0
当在属性存储空间xPC/NAND闪存进行读或写操作时,该参数以HCLK(+1)时钟周期数目定
义了发送命令(NWENOE变低)之前建立地址信号的时间。
0000 00001HCLK周期;
……
1111 1111256HCLK周期(复位后的默认值)
I/O空间时序寄存器4 (FSMC_PIO4)
地址偏移:0xA000 0000 + 0xB0
复位值:0xFCFC FCFC
FSMC_PIO4寄存器包含了在I/O空间操作16PC/CF卡的时序参数。
313029282726252423222120191817161514131211109876543210
rw rw rw rw
IOHIZx IOHOLDx IOWAITx IOSETx
IOHIZxI/O空间x数据总线的高阻时间 (I/O x databus HiZ time) 31:24
当在I/O空间x开始执行对PC卡的写操作后,数据总线需要保持一段时间的高阻状态,该参数以
HCLK时钟周期数目定义数据总线高阻态的时间。这个参数仅对写操作有效。
0000 00000HCLK周期;
……
1111 1111255HCLK周期(复位后的默认值)
IOHOLDxI/O空间x的保持时间 (I/O x hold time) 23:16
当在I/O空间xPC卡进行读或写操作时,该参数以HCLK时钟周期数目定义了发送命令
(NWENOE变高)后,地址信号(对于写操作则是数据信号)保持的时间。
0000 0000:保留
0000 00011HCLK周期;
……
1111 1111255HCLK周期(复位后的默认值)
IOWAITxI/O空间x的等待时间 (I/O x wait time) 15:8
当在I/O空间xPC卡进行读或写操作时,该参数以HCLK(+1)时钟周期数目定义了保持命令
(SMNWESMNOE为低)的最小时间。当该参数定义的时间结束时,如果等待信号(NWAIT)
(),则命令的保持时间会被拉长。
0000 0000:保留,不要使用这个数值;
0000 00012HCLK周期(加上由NWAIT信号变低引入的等待周期)
……
1111 1111256HCLK周期(加上由卡的NWAIT信号变低引入的等待周期)(复位后的默认
)
IOSETxI/O空间x的建立时间 (I/O x setup time) 7:0
当在I/O空间xPC卡进行读或写操作时,该参数以HCLK(+1)时钟周期数目定义了发送命令
(NWENOE变低)之前建立地址信号的时间。
0000 00001HCLK周期;
……
1111 1111256HCLK周期(复位后的默认值)
ECC结果寄存器2/3 (FSMC_ECCR2/3)
地址偏移:0xA000 0000 + 0x54 + 0x20 * (x-1), x=23
复位值:0x0000 0000
2个寄存器包含了由FSMC控制器的ECC计算模块得到的纠错码的当前数值,每个NAND闪存
存储器块有一个ECC计算模块。当CPU在正确的地址(19.6.6)/NAND闪存的数据时,
ECC模块会自动地处理写入或读出的数据。根据FSMC_PCRxECCPS域的设置,在读出了每
页的最后一个字节后,CPU必须读出FSMC_ECCx寄存器中的ECC数值,并与记录在NAND
存后备区域的数据进行比较,据此判断该页的数据是否正确并在可能的情况下,实行矫正。在
360/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
读出FSMC_ECCRx寄存器的数值后应设置ECCEN位为’0’清除它的内容。需要计算一个新的数
据页时,再次设置ECCEN’1’
313029282726252423222120191817161514131211109876543210
ECCx
r
ECCxECC结果 31:0
ECC计算电路产生的计算结果。下表显示了这些位的内容。
120 ECC结果有效位
ECCPS[2:0] 页大小(字节) ECC有效位
000 256 ECC[21:0]
001 512 ECC[23:0]
010 1024 ECC[25:0]
011 2048 ECC[27:0]
100 4096 ECC[29:0]
101 8192 ECC[31:0]
361/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册
362/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
19.7 FSMC寄存器地址映象
注:
本节为译者整理所得,原英文版本没有这一节。
2-1 FSMC寄存器地址映象
偏移 寄存器名称 复位值 说明
000h FSMC_BCR1 0x0000 30DB
SRAM/NOR闪存片选控制寄存器 1
004h FSMC_BTR1 0x0FFF FFFF
SRAM/NOR闪存片选时序寄存器 1
008h FSMC_BCR2 0x0000 30D2
SRAM/NOR闪存片选控制寄存器 2
00Ch FSMC_BTR2 0x0FFF FFFF
SRAM/NOR闪存片选时序寄存器 2
010h FSMC_BCR3 0x0000 30D2
SRAM/NOR闪存片选控制寄存器 3
014h FSMC_BTR3 0x0FFF FFFF
SRAM/NOR闪存片选时序寄存器 3
018h FSMC_BCR4 0x0000 30D2
SRAM/NOR闪存片选控制寄存器 4
01Ch FSMC_BTR4 0x0FFF FFFF
SRAM/NOR闪存片选时序寄存器 4
060h FSMC_PCR2 0x0000 0018
PC/NAND闪存控制寄存器 2
064h FSMC_SR2 0x0000 0040
FIFO状态和中断寄存器 2
068h FSMC_PMEM2 0xFCFC FCFC
通用存储空间时序寄存器 2
06Ch FSMC_PATT2 0xFCFC FCFC
属性存储空间时序寄存器 2
080h FSMC_PCR3 0x0000 0018
PC/NAND闪存控制寄存器 3
084h FSMC_SR3 0x0000 0040
FIFO状态和中断寄存器 3
088h FSMC_PMEM3 0xFCFC FCFC
通用存储空间时序寄存器 3
08Ch FSMC_PATT3 0xFCFC FCFC
属性存储空间时序寄存器 3
0A0h FSMC_PCR4 0x0000 0018
PC/NAND闪存控制寄存器 4
0A4h FSMC_SR4 0x0000 0040
FIFO状态和中断寄存器 4
0A8h FSMC_PMEM4 0xFCFC FCFC
通用存储空间时序寄存器 4
0ACh FSMC_PATT4 0xFCFC FCFC
属性存储空间时序寄存器 4
0B0h FSMC_PIO4 0xFCFC FCFC
I/O存储空间时序寄存器 4
104h FSMC_BWTR1 0x0FFF FFFF
SRAM/NOR闪存写时序寄存器 1
10Ch FSMC_BWTR2 0x0FFF FFFF
SRAM/NOR闪存写时序寄存器 2
114h FSMC_BWTR3 0x0FFF FFFF
SRAM/NOR闪存写时序寄存器 3
11Ch FSMC_BWTR4 0x0FFF FFFF
SRAM/NOR闪存写时序寄存器 4
SDIO接口(SDIO) STM32F10xxx参考手册
20 SDIO接口(SDIO)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
本章内容只适用于大容量产品。
20.1 SDIO主要功能
SD/SDIO MMC卡主机模块(SDIO)AHB外设总线和多媒体(MMC)SD存储卡、SDIO卡和
CE-ATA设备间提供了操作接口。
www.mmca.org多媒体卡系统规格书由MMCA技术委员会发布,可以在多媒体卡协会的网站上()
获得。
CE-ATA系统规格书可以在CE-ATA工作组的网站上(www.ce-ata.org)获得。
SDIO的主要功能如下:
与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1(默认)4位和8
位。
与较早的多媒体卡系统规格版本全兼容(向前兼容)
SD存储卡规格版本2.0全兼容。
SD I/O卡规格版本2.0全兼容:支持良种不同的数据总线模式:1(默认)4位。
完全支持CE-ATA功能(CE-ATA数字协议版本1.1全兼容)
8位总线模式下数据传输速率可达48MHz
数据和命令输出使能信号,用于控制外部双向驱动器。
注:
1
SDIO
没有
SPI
兼容的通信模式
2
.在多媒体卡系统规格书版本
2.11
中,定义
SD
存储卡协议是多媒体卡协议的超集。只支持
I/O
模式的
SD
卡或复合卡中的
I/O
部分不能支持
SD
存储设备中很多需要的命令,这里有些命令在
SD
I/O
设备中不起作用,如擦除命令,因此
SDIO
不支持这些命令。另外,
SD
存储卡和
SD I/O
卡中
有些命令是不同的,
SDIO
也不支持这些命令。细节可以参考
SD I/O
卡规格书版本
1.0
。使用现有
MMC
命令机制,在
MMC
接口上可以实现
CE-ATA
的支持
SDIO
接口的电气和信号定义详见
MMC
参考资料。
多媒体卡/SD总线将所有卡与控制器相连。
当前版本的SDIO在同一时间里只能支持一个SD/SDIO/MMC 4.2卡,但可以支持多个MMC版本
4.1或以前版本的卡。
20.2 SDIO总线拓扑
总线上的通信是通过传送命令和数据实现。
在多媒体卡/SD/SD I/O总线上的基本操作是命令/响应结构,这样的总线操作在命令或总线机制
下实现信息交换;另外,某些操作还具有数据令牌。
SD/SDIO存储器卡上传送的数据是以数据块的形式传输;在MMC上传送的数据是以数据块或
数据流的形式传输;在CE-ATA设备上传送的数据也是以数据块的形式传输。
363/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
179 SDIO“无响应”和“无数据”操作
180 SDIO()数据块读操作
181 SDIO()数据块写操作
注:
当有
Busy(
繁忙
)
信号时,
SDIO(SDIO_D0
被拉低
)
将不会发送任何数据。
364/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
182 SDIO连续读操作
183 SDIO连续写操作
365/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
20.3 SDIO功能描述
SDIO包含2个部分:
SDIO适配器模块:实现所有MMC/SD/SD I/O卡的相关功能,如时钟的产生、命令和数据的
传送。
AHB总线接口:操作SDIO适配器模块中的寄存器,并产生中断和DMA请求信号。
184 SDIO框图
复位后默认情况下SDIO_D0用于数据传输。初始化后主机可以改变数据总线的宽度。
如果一个多媒体卡接到了总线上,则SDIO_D0SDIO_D[3:0]SDIO_D[7:0]可以用于数据传
输。MMC版本V3.31和之前版本的协议只支持1位数据线,所以只能用SDIO_D0
如果一个SD SD I/O 卡接到了总线上,可以通过主机配置数据传输使用SDIO_D0
SDIO_D[3:0]。所有的数据线都工作在推挽模式。
SDIO_CMD有两种操作模式:
用于初始化时的开路模式(仅用于MMC版本V3.31或之前版本)
用于命令传输的推挽模式(SD/SD I/O卡和MMC V4.2在初始化时也使用推挽驱动)
SDIO_CK是卡的时钟:每个时钟周期在命令和数据线上传1位命令或数据。对于多媒体卡
V3.31协议,时钟频率可以在0MHz20MHz间变化;对于多媒体卡V4.0/4.2协议,时钟频率可
以在0MHz48MHz间变化;对于SDSD I/O卡,时钟频率可以在0MHz25MHz间变化。
SDIO使用两个时钟信号:
SDIO适配器时钟(SDIOCLK=HCLK)
AHB总线时钟(HCLK/2)
下表适用于多媒体卡/SD/SD I/O卡总线:
121 SDIO引脚定义
引脚 方向 说明
SDIO_CK 输出 多媒体卡/SD/SDIO卡时钟。这是从主机至卡的时钟线。
SDIO_CMD 双向 多媒体卡/SD/SDIO卡命令。这是双向的命令/响应信号线。
SDIO_D[7:0] 双向 多媒体卡/SD/SDIO卡数据。这些是双向的数据总线。
366/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
20.3.1 SDIO适配器
下图是简化的SDIO适配器框图:
185 SDIO适配器
SDIO适配器是多媒体/加密数字存储卡总线的主设备(主机),用于连接一组多媒体卡或加密数字
存储卡,它包含以下5个部分:
适配器寄存器模块
控制单元
命令通道
数据通道
数据FIFO
注:
适配器寄存器和
FIFO
使用
AHB
总线一侧的时钟
(HCLK/2)
,控制单元、命令通道和数据通道使用
SDIO
适配器一侧的时钟
(SDIOCLK)
适配器寄存器模块
适配器寄存器模块包含所有系统寄存器。该模块还产生清除多媒体卡中静态标记的信号,当在
SDIO清除寄存器中的相应位写’1’时会产生清除信号。
控制单元
控制单元包含电源管理功能和为存储器卡提供的时钟分频。
共有三种电源阶段:
电源关闭
电源启动
电源开
367/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
186 控制单元
上图为控制单元的框图,有电源管理和时钟管理子单元。
在电源关闭和电源启动阶段,电源管理子单元会关闭卡总线上的输出信号。
时钟管理子单元产生和控制SDIO_CK信号。SDIO_CK输出可以使用时钟分频或时钟旁路模式。
下述情况下没有时钟输出:
复位后
在电源关闭和电源启动阶段
当启动了省电模式并且卡总线处于空闲状态(命令通道和数据通道子单元进入空闲阶段后的8
个时钟周期)
命令通道
命令通道单元向卡发送命令并从卡接收响应。
187 SDIO适配器命令通道
命令通道状态机(CPSM)
当写入命令寄存器并设置了使能位,开始发送命令。命令发送完成时,命令通道状态机
(CPSM)设置状态标志并在不需要响应时进入空闲状态(见下图)。当收到响应后,接收到
CRC码将会与内部产生的CRC码比较,然后设置相应的状态标志。
368/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
188 命令通道状态机(CPSM)
当进入等待(Wait)状态时,命令定时器开始运行;当CPSM进入接收(Receive)状态之前,产生了
超时,则设置超时标志并进入空闲(Idle)状态。
注:
命令超时固定为
64
SDIO_CK
时钟周期。
如果在命令寄存器设置了中断位,则关闭定时器,CPSM等待某一个卡发出的中断请求。如
命令寄存器中设置挂起位,CPSM进入挂起(Pend)状态并等待数据通道子单元发出的CmdPend
信号,在检测到CmdPend信号时,CPSM进入发送(Send)状态,这将触发数据计数器发送停止
命令的功能。
注:
CPSM
保持在空闲状态至少
8
SDIO_CK
周期,以满足
NCC
NRC
时序限制。
NCC
是两个主机命令
间的最小间隔;
NRC
是主机命令与卡响应之间的最小间隔。
189 SDIO命令传输
命令格式
369/754
命令:命令是用于开始一项操作。主机向一个指定的卡或所有的卡发出带地址的命令或广
播命令(广播命令只适合于MMC V3.31或之前的版本)。命令在CMD线上串行传送。所有
命令的长度固定为48位,下表给出了多媒体卡、SD存储卡和SDIO卡上一般的命令格式。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
CE-ATA命令是MMC V4.2命令的扩充,所以具有相同的格式。
命令通道操作于半双工模式,这样命令和响应可以分别发送和接收。如果CPSM不处在发
送状态,SDIO_CMD输出处于高阻状态,如图189所示。SDIO_CMD上的数据与
SDIO_CK的上升沿同步。
122 命令格式
宽度 数值 说明
47 1 0
开始位
46 1 1
传输位
[45:40] 6 -
命令索引
[39:8] 32 -
参数
[7:1] 7 - CRC7
0 1 1
结束位
响应:响应是由一个被指定地址的卡发送到主机,对于MMC V3.31或以前版本所有的卡
同时发送响应;响应是对先前接收到命令的一个应答。响应在CMD线上串行传送。
SDIO支持2种响应类型,2种类型都有CRC错误检测:
48位短响应
136位长响应
注:
如果响应不包含
CRC(
CMD1
的响应
)
,设备驱动应该忽略
CRC
失败状态。
123 短响应格式
宽度 数值 说明
47 1 0
开始位
46 1 0
传输位
[45:40] 6 -
命令索引
[39:8] 32 -
参数
[7:1] 7 -
CRC7(1111111)
0 1 1
结束位
124 长响应格式
宽度 数值 说明
135 1 0
开始位
134 1 0
传输位
[133:128] 6 111111
保留
[127:1] 127 - CIDCSD(包含内部CRC7)
0 1 1
结束位
命令寄存器包含命令索(发至卡的6)和命令类型;命令本身决定了是否需要响应和响应的类
型、48位还是136(20.9.4)。命令通道中的状态标志示于下表:
125 命令通道状态标志
标志 说明
CMDREND 响应的CRC正确
CCRCFAIL 响应的CRC错误
CMDSENT 命令(不需要响应的命令)已经送出
CTIMEOUT 响应超时
CMDACT 正在发送命令
370/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
CRC发生器计算CRC码之前所有位的CRC校验和,包括开始位、发送位、命令索引和命令参数
(或卡状态)。对于长响应格式,CRC校验和计算的是CIDCSD的前120位;注意,长响应格式
中的开始位、传输位和6个保留位不参与CRC计算。
CRC校验和是一个7位的数值:
CRC[6:0] = 余数[(M(x) * x7) / G(x)]
G(x) = x7 + x3 + 1
M(x) = (开始位) * x39 + … + (CRC前的最后一位) * x0,
M(x) = (开始位) * x119 + … + (CRC前的最后一位) * x0,
数据通道
数据通道子单元在主机与卡之间传输数据。下图是数据通道的框图。
190 数据通道
在时钟控制寄存器中可以配置卡的数据总线宽度。如果选择了4位总线模式,则每个时钟周期
条数据信号线(SDIO_D[3:0])上将传输4位数据;如果选择了8位总线模式,则每个时钟周期八条
数据信号线(SDIO_D[7:0])上将传输8位数据;如果没有选择宽总线模式,则每个时钟周期只在
SDIO_D0上传输1位数据。
根据传输的方向(发送或接收),使能时数据通道状态机(DPSM)将进入Wait_SWait_R状态:
发送:DPSM进入Wait_S状态。如果发送FIFO中有数据,则DPSM进入发送状态,同时数
据通道子单元开始向卡发送数据。
接收:DPSM进入Wait_R状态并等待开始位;当收到开始位时,DPSM进入接收状态,同
时数据通道子单元开始从卡接收数据。
数据通道状态机(DPSM)
DPSM工作在SDIO_CK频率,卡总线信号与SDIO_CK的上升沿同步。DPSM6个状态,如下
图所示:
371/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
191 数据通道状态机(DPSM)
空闲(Idle):数据通道不工作,SDIO_D[7:0]输出处于高阻状态。当写入数据控制寄存器并设
置使能位时,DPSM为数据计数器加载新的数值,并依据数据方向位进入Wait_SWait_R
状态。
Wait_R:如果数据计数器等于0,当接收FIFO为空时DPSM进入到空闲(Idle)状态。如果数
据计数器不等于0DPSM等待SDIO_D上的开始位。如果DPSM在超时之前接收到一个开
始位,它会进入接收(Receive)状态并加载数据块计数器。如果DPSM在检测到一个开始位
前出现超时,或发生开始位错误,DPSM将进入空闲状态并设置超时状态标志。
接收(Receive):接收到的串行数据被组合为字节并写入数据FIFO。根据数据控制寄存器中
传输模式位的设置,数据传输模式可以是块传输或流传输:
在块模式下,当数据块计数器达到0时,DPSM等待接收CRC码,如果接收到的代码与内
部产生的CRC码匹配,则DPSM进入Wait_R状态,否则设置CRC失败状态标志同时
DPSM进入到空闲状态。
在流模式下,当数据计数器不为0时,DPSM接收数据;当计数器为0时,将移位寄存器中
的剩余数据写入数据FIFO,同时DPSM进入Wait_R状态。
如果产生了FIFO上溢错误,DPSM设置FIFO的错误标志并进入空闲状态。
Wait_S:如果数据计数器为0DPSM进入空闲状态;否则DPSM等待数据FIFO空标志消失
后,进入发送状态。
注:
DPSM
会在
Wait_S
状态保持至少
2
个时钟周期,以满足
NWR
的时序要求,
NWR
是接收到卡的响应
至主机开始数据传输的间隔。
发送(Send)DPSM开始发送数据到卡设备。根据数据控制寄存器中传输模式位的设置,数
据传输模式可以是块传输或流传输:
在块模式下,当数据块计数器达到0时,DPSM发送内部产生的CRC码,然后是结束位,
并进入繁忙状态。
372/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
在流模式下,当使能位为高同时数据计数器不为0时,DPSM向卡设备发送数据,然后进
入空闲状态。
如果产生了FIFO下溢错误,DPSM设置FIFO的错误标志并进入空闲状态。
繁忙(Busy)DPSM等待CRC状态标志:
如果没有接收到正确的CRC状态,则DPSM进入空闲状态并设置CRC失败状态标志。
如果接收到正确的CRC状态,则当SDIO_D0不为低时(卡不繁忙)DPSM进入Wait_S
态。
DPSM处于繁忙状态时发生了超时,DPSM则设置数据超时标志并进入空闲状态。
DPSM处于Wait_R或繁忙状态时,数据定时器被使能,并能够产生数据超时错误:
发送数据时,如果DPSM处于繁忙状态超过程序设置的超时间隔,则产生超时。
接收数据时,如果未收完所有数据,并且DPSM处于Wait_R状态超过程序设置的超时间
隔,则产生超时。
数据:数据可以从主机传送到卡,也可以反向传输。数据在数据线上传输。数据存储在一
32字的FIFO中,每个字为32位宽。
126 数据令牌格式
CRC16
说明 开始位 数据 结束位
0 - 1
块数据
0 - 1
流数据
数据FIFO
数据FIFO(先进先出)子单元是一个具有发送和接收单元的数据缓冲区。
FIFO包含一个每字32位宽、共32个字的数据缓冲区,和发送与接收电路。因为数FIFO工作在
AHB时钟区域(HCLK/2),所有与SDIO时钟区域(SDIOCLK)连接的信号都进行了重新同步。
依据TXACTRXACT标志,可以关闭FIFO、使能发送或使能接收。TXACTRXACT由数据通
道子单元设置而且是互斥的:
TXACT有效时,发送FIFO代表发送电路和数据缓冲区
RXACT有效时,接收FIFO代表接收电路和数据缓冲区
发送FIFO:当使能了SDIO的发送功能,数据可以通过AHB接口写入发送FIFO
发送FIFO32个连续的地址。发送FIFO中有一个数据输出寄存器,包含读指针指向的数据
字。当数据通道子单元装填了移位寄存器后,它移动读指针至下个数据并传输出数据。
如果未使能发送FIFO,所有的状态标志均处于无效状态。当发送数据时,数据通道子单元
设置TXACT为有效。
127FIFO状态标志
标志 说明
TXFIFOF 当所有32个发送FIFO字都有有效的数据时,该标志为高。
TXFIFOE 当所有32个发送FIFO字都没有有效的数据时,该标志为高。
TXFIFOHE 8个或更多发送FIFO字为空时,该标志为高。该标志可以作为DMA请求。
TXDAVL 当发送FIFO包含有效数据时,该标志为高。该标志的意思刚好与TXFIFOE相反。
TXUNDERR 当发生下溢错误时,该标志为高。写入SDIO清除寄存器时清除该标志。
接收FIFO:当数据通道子单元接收到一个数据字,它会把数据写入FIFO,写操作结束后,
写指针自动加一;在另一端,有一个读指针始终指向FIFO中的当前数据。如果关闭了接收
FIFO,所有的状态标志会被清除,读写指针也被复位。在接收到数据时数据通道子单元设
RXACT。下表列出了接收FIFO的状态标志。通过32个连续的地址可以访问接收FIFO
128FIFO状态标志
标志 说明
RXFIFOF 当所有32个接收FIFO字都有有效的数据时,该标志为高。
373/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
RXFIFOE 当所有32个接FIFO字都没有有效的数据时,该标志为高。
RXFIFOHF 8个或更多接收FIFO字有有效的数据时,该标志为高。该标志可以作为DMA请求。
RXDAVL 当接收FIFO包含有效数据时,该标志为高。该标志的意思刚好与RTXFIFOE相反。
RXOVERR 当发生上溢错误时,该标志为高。写入SDIO清除寄存器时清除该标志。
20.3.2 SDIO AHB接口
AHB接口产生中断和DMA请求,并访问SDIO接口寄存器和数据FIFO。它包含一个数据通道、
寄存器译码器和中断/DMA控制逻辑。
SDIO中断
当至少有一个选中的状态标志为高时,中断控制逻辑产生中断请求。有一个屏蔽寄存器用于选
择可以产生中断的条件,如果设置了相应的屏蔽标志,则对应的状态标志可以产生中断。
SDIO/DMA接口:在SDIO和存储器之间数据传输的过程
在下面的例子中,主机控制器使用CMD24(WRITE_BLOCK)从主机传送512字节到MMC卡,
DMA控制器用于从存储器向SDIOFIFO填充数据。
1. 执行卡识别过程
2. 提高SDIO_CK频率
3. 发送CMD7命令选择卡
4. 按下述步骤配置DMA2:
a) 使能DMA2控制器并清除所有的中断标志位
b) 设置DMA2通道4的源地址寄存器为存储器缓冲区的基地址,DMA2通道4的目标地址寄
存器为SDIO_FIFO寄存器的地址
c) 设置DMA2通道4控制寄存器(存储器递增,非外设递增,外设和源的数据宽度为字宽度)
d) 使能DMA2通道4
5. 发送CMD24(WRITE_BLOCK),操作如下:
a) 设置SDIO数据长度寄存器(SDIO数据时钟寄存器应该在执行卡识别过程之前设置好)
b) 设置SDIO参数寄存器为卡中需要传送数据的地址
c) 设置SDIO命令寄存器:CmdIndex置为24(WRITE_BLOCK)WaitRest置为1(SDIO
主机等待响应)CPSMEN置为1(使能SDIO卡主机发送命令),保持其它域为他们的复
位值。
d) 等待SDIO_STA[6]=CMDREND中断,然后设置SDIO数据寄存器:DTEN置为1(使能
SDIO卡主机发送数据)DTDIR置为0(控制器至卡方向)DTMODE置为0(块数据传
)DMAEN置为1(使能DMA)DBLOCKSIZE置为9(512字节);其它域不用设置。
e) 等待SDIO_STA[10]=DBCKEND
6. 查询DMA通道的使能状态寄存器,确认没有通道仍处于使能状态。
20.4 卡功能描述
20.4.1 卡识别模式
在卡识别模式,主机复位所有的卡、检测操作电压范围、识别卡并为总线上每个卡设置相对地
(RCA)。在卡识别模式下,所有数据通信只使用命令信号线(CMD)
20.4.2 卡复位
GO_IDLE_STATE命令(CMD0)是一个软件复位命令,它把多媒体卡和SD存储器置于空闲状
态。IO_RW_DIRECT命令(CMD52)复位SD I/O卡。上电后或执行CMD0后,所有卡的输出端都
处于高阻状态,同时所有卡都被初始化至一个默认的相对卡地址(RCA=0x0001)和默认的驱动器
寄存器设置(最低的速度,最大的电流驱动能力)
374/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
20.4.3 操作电压范围确认
所有的卡都可以使用任何规定范围内的电压与SDIO卡主机通信,可支持的最小和最大电压VDD
数值由卡上的操作条件寄存器(OCR)定义。
内部存储器存储了卡识别号(CID)和卡特定数据(CSD)的卡,仅能在数据传输VDD条件下传送这些
信息。当SDIO卡主机模块与卡的VDD范围不一致时,卡将不能完成识别周期,也不能发送CSD
数据;因此,在VDD范围不匹配时SDIO卡主机可以用下面几个特殊命令去识别和拒绝卡:
SEND_OP_COND(CMD1) SD_APP_OP_COND(SD 存储卡的ACMD41)
IO_SEND_OP_COND(SD I/O卡的CMD5)SDIO卡主机在执行这几个命令时会产生需要的VDD
电压。不能在指定的电压范围进行数据传输的卡,将从总线断开并进入非激活状态。
使用这些不包含电压范围作为操作数的命令,SDIO卡主机能够查询每个卡并在确定公共的电压
范围前,把不在此范围内的卡置于非激活状态。当SDIO卡主机能够选择公共的电压范围或用户
需要知道卡是否能用时,SDIO卡主机可以进行这样的查询。
20.4.4 卡识别过程
多媒体卡和SD卡的卡识别过程是有区别的;对于多媒体卡,卡识别过程以时钟频率Fod开始,所
SDIO_CMD输出为开路驱动,允许在这个过程中的卡的并行连接,识别过程如下:
1. 总线被激活
2. SDIO卡主机广播发送SEND_OP_COND(CMD1)命令,并接收操作条件
3. 得到的响应是所有卡的操作条件寄存器内容的“线与”
4. 不兼容的卡会被置于非激活状态
5. SDIO卡主机广播发送ALL_SEND_CID(CMD2)至所有激活的卡
6. 所有激活的卡同时串行地发送他们的CID号,那些检测到输出的CID位与命令线上的数据
不相符的卡必须停止发送,并等待下一个识别周期。最终只有一个卡能够成功地传送完整
CIDSDIO卡主机并进入识别状态。
7. SDIO卡主机发送SET_RELATIVE_ADDR(CMD3)命令至这个卡,这个新的地址被称为相
对卡地址(RCA),它比CID短,用于对卡寻址。至此,这个卡转入待机状态,并不再响应
新的识别过程,同时它的输出驱动从开路转变为推挽模式。
8. SDIO卡主机重复上述步骤57,直到收到超时条件。
对于SD卡而言,卡识别过程以时钟频率Fod开始,所有SDIO_CMD输出为推挽驱动而不是开路
驱动,识别过程如下:
1. 总线被激活
2. SDIO卡主机广播发送SEND_APP_OP_COND(ACMD41)命令
3. 得到的响应是所有卡的操作条件寄存器的内容
4. 不兼容的卡会被置于非激活状态
5. SDIO卡主机广播发送ALL_SEND_CID(CMD2)至所有激活的卡
6. 所有激活的卡发送回他们唯一卡识别号(CID)并进入识别状态。
7. SDIO卡主机发送SET_RELATIVE_ADDR(CMD3)命令和一个地址到一个激活的卡,这个
新的地址被称为相对卡地址(RCA),它比CID短,用于对卡寻址。至此,这个卡转入待机
状态。SDIO卡主机可以再次发送该命令更改RCA,卡的RCA将是最后一次的赋值。
8. SDIO卡主机对所有激活的卡重复上述步骤57
对于SD I/O卡而言,卡识别过程如下:
1. 总线被激活
2. SDIO卡主机发送IO_SEND_OP_COND(CMD5)命令
3. 得到的响应是卡的操作条件寄存器的内容
4. 不兼容的卡会被置于非激活状态
375/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
5. SDIO卡主机发送SET_RELATIVE_ADDR(CMD3)命令和一个地址到一个激活的卡,这个
新的地址被称为相对卡地址(RCA),它比CID短,用于对卡寻址。至此,这个卡转入待机
状态。SDIO卡主机可以再次发送该命令更改RCA,卡的RCA将是最后一次的赋值。
20.4.5 写数据块
执行写数据块命令(CMD24-27)时,主机把一个或多个数据块从主机传送到卡中,同时在每个数
据块的末尾传送一个CRC码。一个支持写数据块命令的卡应该始终能够接收由WRITE_BL_LEN
定义的数据块。如果CRC校验错误,卡通过SDIO_D信号线指示错误,传送的数据被丢弃而不
被写入,所有后续(在多块写模式下)传送的数据块将被忽略。
如果主机传送部分数据,而累计的数据长度未与数据块对齐,当不允许块错位(未设置CSD的参
WRITE_BLK_MISALIGN),卡将在第一个错位的块之前检测到块错位错误(设置状态寄存器中
ADDRESS_ERROR错误位)。当主机试图写一个写保护区域时,写操作也会被中止,此时
会设置WP_VIOLATION位。
设置CIDCSD寄存器不需要事先设置块长度,传送的数据也是通CRC保护的。如果CSD
CID寄存器的部分是存储在ROM中,则这个不能更改的部分必须与接收缓冲区的对应部分相一
致,如果有不一致之处,卡将报告一个错误同时不修改任何寄存器的内容。有些卡需要长的甚
至不可预计的时间完成写一个数据块,在接收一个数据块并完成CRC检验后,卡开始写操作,
如果它的写缓冲区已经满并且不能再从新的WRITE_BLOCK命令接受新的数据时,它会把
SDIO_D信号线拉低。主机可以在任何时候使用SEND_STATUS(CMD13)查询卡的状态,卡将
返回当前状态。READY_FOR_DATA状态位指示卡是否可以接受新的数据或写操作是否还在进
行。主机可以使用CMD7(选择另一个卡)不选中某个卡,而把这个卡置于断开状态,这样可以释
SDIO_D信号线而不中断未完成的写操作;当重新选择了一个卡,如果写操作仍然在进行并且
写缓冲区仍不能使用,它会重新通过拉低SDIO_D信号线指示忙的状态。
20.4.6 读数据块
在读数据块模式下,数据传输的基本单元是数据块,它的大小在CSD(READ_BL_LEN)定义。
如果设置了READ_BL_PARTIAL,同样可以传送较小的数据块,较小数据块是指开始和结束地
址完全包含在一个物理块中,READ_BL_LEN义了物理块的大小。为保证数据传输的正确,
每个数据块后都有一个CRC校验码。CMD17(READ_SINGLE_BLOCK)启动一次读数据块操
作,在传输结束后卡返回到发送状态。
CMD18(READ_MULTIPLE_BLOCK)启动一次连续多个数据块的读操作。
主机可以在多数据块读操作的任何时候中止操作,而不管操作的类型。发送停止传输命令即可
中止操作。
如果在多数据块读操作中(任一种类型)卡检测到错误(例如:越界、地址错位或内部错误),它将
停止数据传输并仍处于数据状态;此时主机必须发送停止传输命令中止操作。在停止传输命令
的响应中报告读错误。
如果主机发送停止传输命令时,卡已经传输完一个确定数目的多个数据块操作中的最后一个数
据块,因为此时卡已经不在数据状态,主机会得到一个非法命令的响应。如果主机传输部分数
据块,而累计的数据长度不能与物理块对齐同时不允许块错位,卡会在出现第一个未对齐的块
时检测出一个块对齐错误,并在状态寄存器中设置ADDRESS_ERROR错误标志。
20.4.7 数据流操作,数据流写入和数据流读出(只适用于多媒体卡)
在数据流模式,数据按字节传输,同时每个数据块后没有CRC
数据流写(只适用于多媒体卡)
WRITE_DAT_UNTIL_STOP(CMD20)开始从SDIO卡主机至卡的数据传输,从指定的地址开始
连续传输直到SDIO卡主机发出一个停止命令。如果允许部分数据块传输(设置了CSD参数
WRITE_BL_PARTIAL)则数据流可以在卡的地址空间中的任意地址开始和停止,否则数据流
只能在数据块的边界开始和停止。因为传输的数据数目没有事先设定,不能使用CRC校验。如
376/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
果发送数据时达到了存储器的最大地址,即使SDIO卡主机没有发送停止命令,随后传输的数据
也会被丢弃。
数据流写操作的最大时钟频率可以通过下式计算
(8 x 2writebllen)(-NSAC)
Maximumspeed = Min(TRANSPEED, )
TAAC x R2WFACTOR
Maximumspeed = 最大写频率
TRANSPEED = 最大数据传输率
writebllen = 最大写数据块长度
NSAC = CLK周期计算的数据读操作时间2
TAAC = 数据读操作时间1
R2WFACTOR = 写速度因子
如果主机试图使用更高的频率,卡可能不能处理数据并停止编程,同时在状态寄存器中设
OVERRUN错误位,丢弃所有随后传输的数据并(在接收数据状态)等待停止命令。如果主机试
写入一个写保护区域,写操作将被中止,同时卡将设置WP_VIOLATION位。
数据流读(只适用于多媒体卡)
READ_DAT_UNTIL_STOP(CMD11)控制数据流数据传输。
这个命令要求卡从指定的地址读出数据,直到SDIO 卡主机发送STOP_TRANSMISSION
(CMD12)。因为串行命令传输的延迟,停止命令的执行会有延迟,数据传送会在停止命令的结
束位后停止。如果发送数据时达到了存储器的最大地址,SDIO卡主机没有发送停止命令,随后
传输的数据将是无效数据。
数据流读操作的最大时钟频率可以通过下式计算
(8 x 2readbllen)(-NSAC)
Maximumspeed = Min(TRANSPEED, )
TAAC x R2WFACTOR
Maximumspeed = 最大写频率
TRANSPEED = 最大数据传输率
readbllen = 最大读数据块长度
NSAC = CLK周期计算的数据读操作时间2
TAAC = 数据读操作时间1
R2WFACTOR = 写速度因子
如果主机试图使用更高的频率,卡将不能处理数据传输,此时卡在状态寄存器中设置
UNDERRUN错误位,中止数据传输并在数据状态等待停止命令。
20.4.8 擦除:成组擦除和扇区擦除
多媒体卡的擦除单位是擦除组,擦除组是以写数据块计算,写数据块是卡的基本写入单位。擦
除组的大小是卡的特定参数,在CSD中定义。
主机可以擦除一个连续范围的擦除组,开始擦除操作有三个步骤。
首先,主机使用ERASE_GROUP_START(CMD35)令定义连续范围的开始地址,然后使用
ERASE_GROUP_END(CMD36) 命令定义连续范围的结束地址,最后发送擦除命令
ERASE(CMD38)开始擦除操作。擦除命令的地址域是以字节为单位的擦除组地址。卡会舍弃未
与擦除组大小对齐的部分,把地址边界对齐到擦除组的边界。
如果未按照上述步骤收到了擦除命令,卡在状态寄存器中设置ERASE_SEQ_ERROR位,并重
新等待第一个步骤。
如果收到了除SEND_STATUS 和擦除命令之外的其它命令,卡在状态寄存器中设置
ERASE_RESET位,解除擦除序列并执行新的命令。
377/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
如果擦除范围包含了写保护数据块,这些块不被擦除,只有未保护的块被擦除,同时卡在状态
寄存器中设置WP_ERASE_SKIP状态位。
在擦除过程中,卡拉低SDIO_D信号。实际的擦除时间可能很长,主机可以使用CMD7解除卡的
选择。
20.4.9 宽总线选择和解除选择
可以通过SET_BUS_WIDTH(ACMD6)命令选择或不选择宽总线(4位总线宽度)操作模式,上电后
GO_IDLE_STATE(CMD0)命令后默认的总线宽度为1位。SET_BUS_WIDTH(ACMD6)命令仅
在传输状态时有效,即只有在使用SELECT/DESELECT_CARD(CMD7)命令选择了卡后才能改
变总线宽度。
20.4.10 保护管理
SDIO卡主机模块支持三种保护方式:
1. 内部卡保护(卡内管理)
2. 机械写保护开关(仅由SDIO卡主机模块管理)
3. 密码管理的卡锁操作
内部卡的写保护
卡的数据可以被保护不被覆盖或擦除。在CSD中永久地或临时地设置写保护位,生产厂商或
容提供商可以永久地对整个卡施行写保护。对于支持在CSD中设置WP_GRP_ENABLE位从而
提供一组扇区写保护的卡,部分数据可以被保护,写保护可以通过程序改变。写保护的基本单
位是CSD参数WP_GRP_SIZE个扇区。SET_WRITE_PROTCLR_WRITE_PROT命令控制指
定组的保护,SEND_WRITE_PROT命令与单数据块读命令类似,卡送出一个包含32个写保护
(代表从指定地址开始32个写保护组)的数据块,跟着一个16位的CRC码。写保护命令的地
址域是一个以字节为单位的组地址。
卡将截断所有组大小以下的地址。
机械写保护开关
在卡的侧面有一个机械的滑动开关,允许用户设置或清除卡的写保护。当滑动开关置于小窗口
打开的位置时,卡处于写保护状态,当滑动开关置于小窗口关闭的位置时,可以更改卡中
容。在卡的插槽上的对应部位也有一个开关指SDIO卡主机模块,卡是否处于写保护状态。卡
的内部电路不知道写保护开关的位置。
密码保护
密码保护功能允许SDIO卡主机模块使用密码对卡实行上锁或解锁。密码存储在128位的PWD
存器中,它的长度设置在8位的PWD_LEN寄存器中。这些寄存器是不可挥发的,即掉电后它们
的内容不丢失。已上锁的卡能够响应和执行相应的命令,即允许SDIO卡主机模块执行复位、初
始化和查询状态等操作,但不允许操作卡中的数据。当设置了密码后(PWD_LEN的数值不为
0),上电后卡自动处于上锁状态。正如CSDCID寄存器写命令,上锁/解锁命令仅在传输状态
下有效,在这个状态下,命令中没有地址参数,但卡已经被选中。卡的上锁/解锁命令具有单数
据块写命令的结构和总线操作类型,传输的数据块包含所有命令所需要的信息(密码设置模式、
PWD内容和上锁/解锁指示)。在发送卡的上锁/解锁命令之前,命令数据块的长度由SDIO卡主机
模块定义,,命令结构示于表142
位的设置如下:
ERASE:设置该位将执行强制擦除,所有其它位必须为0,只发送命令字节。
LOCK_UNLOCK:设置该位锁住卡,LOCK_UNLOCKSET_PWD可以同时设置,但不能
CLR_PWD同时设置。
CLR_PWD:设置该位清除密码数据。
SET_PWD:设置该位将密码数据保存至存储器。
PWD_LEN:以字节为单位定义密码的长度。
378/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
PWD:密码(依不同的命令,新的密码或正在使用的密码)
以下几节列出了设置/清除密码、上锁/解锁和强制擦除的命令序列。
设置密码
1. 选择一个卡(SELECT/DESELECT_CARDCMD7)
2. 定义要在8位的卡上锁/解锁模式下发送的数据块长度(SET_BLOCKLENCMD16)8
PWD_LEN,新密码的字节数目。当更换了密码后,发送命令的数据块长度必须同时考
虑新旧密码的长度。
3. 以合适的数据块长度在数据线上发送LOCK/UNLOCK(CMD42)命令,并包含16位的CRC
码。数据块包含了操作模式(SET_PWD=1)、长度(PWD_LEN)和密码(PWD)。当更换了密
码后,长度数值(PWD_LEN)包含了新旧两个密码的长度,PWD域包含了旧的密码(正在
使用的)和新的密码。
4. 当旧的密码匹配后,新的密码和它的长度被分别存储在PWDPWD_LEN域。如果送出
的旧密码与期望的密码(长度或内容)不吻合,则设置状态寄存器中的
LOCK_UNLOCK_FAILED错误位,同时密码不变。
密码长度域(PWD_LEN)指示当前是否设置了密码,如果该域为非零,则表示使用了密码,卡在
上电时自动上锁。在不断电的情况下,如果设置了密码,可以通过设置LOCK_UNLOCK位或发
送一个额外的上锁命令,立即锁住卡。
清除密码
1. 选择一个卡(SELECT/DESELECT_CARDCMD7)
2. 定义要在8位的卡上锁/解锁模式下发送的数据块长度(SET_BLOCKLENCMD16)8
PWD_LEN,当前使用密码的字节数目。
3. 当密码匹配后,PWD域被清除同时PWD_LEN被设为0。如果送出的密码与期望的密码(
度或内容)不吻合,则设置状态寄存器中的LOCK_UNLOCK_FAILED错误位,同时密码不
变。
卡上锁
1. 选择一个卡(SELECT/DESELECT_CARDCMD7)
2. 定义要在8位的卡上锁/解锁模式(见表142的字节0)下发送的数据块长度
(SET_BLOCKLENCMD16)8位的PWD_LEN,和当前密码的字节数目。
3. 以合适的数据块长度在数据线上发送LOCK/UNLOCK(CMD42)命令,并包含16位的CRC
码。数据块包含了操作模式(LOCK_UNLOCK=1)、长度(PWD_LEN)和密码(PWD)
4. 当密码匹配后,卡被上锁并则设置状态寄存器中的CARD_IS_LOCKED状态位。如果送出
的密码与期望的密码(长度或内容)不吻合,则设置状态寄存器中的
LOCK_UNLOCK_FAILED错误位,同时上锁操作失败。
设置密码和为卡上锁可以在同一个操作序列中进行,此时SDIO卡主机模块按照前述的步骤设置
密码,但在发送新密码命令的第3步需要设置LOCK_UNLOCK位。
如果曾经设置过密码(PWD_LEN不为0),卡会在上电复位时自动地上锁。对已经上锁的卡执行
上锁操作或对没有密码的卡执行上锁操作会导致失败,并设置状态寄存器中的
LOCK_UNLOCK_FAILED错误位。
卡解锁
1. 选择一个卡(SELECT/DESELECT_CARDCMD7)
2. 定义要在8位的卡上锁/解锁模式(见表142的字节0)下发送的数据块长度
(SET_BLOCKLENCMD16)8位的PWD_LEN,和当前密码的字节数目。
3. 以合适的数据块长度在数据线上发送LOCK/UNLOCK(CMD42)命令,并包含16位的CRC
码。数据块包含了操作模式(LOCK_UNLOCK=0)、长度(PWD_LEN)和密码(PWD)
4. 当密码匹配后,卡锁被解除,同时状态寄存器中的CARD_IS_LOCKED位被清除。如果送
出的密码与期望的密码(长度或内容)不吻合,则设置状态寄存器中的
LOCK_UNLOCK_FAILED错误位,同时卡仍保持上锁状态。
379/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
解锁状态只在当前的供电过程中有效,只要不清除PWD域,下次上电后卡会被自动上锁。
试图对已经解了锁的卡执行解锁操作会导致操作失败,并设置状态寄存器中的
LOCK_UNLOCK_FAILED错误位。
强制擦除
如果用户忘记了密码(PWD的内容),可以在清除卡中的所有内容后使用卡。强制擦除操作擦除
所有卡中的数据和密码。
1. 选择一个卡(SELECT/DESELECT_CARDCMD7)
2. 设置发送的数据块长度(SET_BLOCKLENCMD16)1,仅发送8位的卡上锁/解锁字节
(见表142的字节0)
3. 以合适的数据块长度在数据线上发送LOCK/UNLOCK(CMD42)命令,并包含16位的CRC
码。数据块包含了操作模式(ERASE=1)所有其它位为0
4. ERASE位是数据域中仅有的位时,卡中的所有内容将被擦除,包括PWDPWD_LEN
域,同时卡不再被上锁。如果有任何其它位不为0,则设置状态寄存器中的
LOCK_UNLOCK_FAILED错误位,卡中的数据保持不变,同时卡仍保持上锁状态。
试图对已经解了锁的卡执行擦除操作会导致操作失败,并设置状态寄存器中的
LOCK_UNLOCK_FAILED错误位。
20.4.11 卡状态寄存器
响应格式R1包含了一个32位的卡状态域,这个域是用于向卡主机发送卡的状态信息(这些信息有
可能存在本地的状态寄存器中)。除非特别说明,卡返回的状态始终是与之前的命令相关的。
129定义了不同的状态信息。表中有关类型和清除条件域的缩写定义如下:
类型:
E: 错误位
S: 状态位
R: 检测位,并依据实际的命令响应而设置
X: 检测位,在命令的执行中设置。SDIO卡主机通过发送状态命令读出这些位而查询卡的状
态。
清除条件:
A: 依据卡的当前状态
B: 始终与之前的命令相关。接收到正确的命令即可清除(具有一个命令的延迟)
C: 读即可清除
129 卡状态
清除
条件
名称 类型 数值 说明
C 31 ADDRESS_OUT_OF_RANGE E R X ‘0’= 无错误 命令中的地址参数超出了卡的允许范围。
‘1’= 错误 一个多数据块或数据流读/写操作(即使从一个合法的
地址开始)试图读或写超出卡的容量的部分。
C 30 ADDRESS_MISALIGN 命令中的地址参数(与当前的数据块长度对照)定义的
第一个数据块未与卡的物理块对齐。
‘0’= 无错误
‘1’= 错误
一个多数据块或数据流读/写操作(即使从一个合法的
地址开始)试图读或写未与物理块对齐的数据块。
C 29 BLOCK_LEN_ERROR SET_BLOCKLEN命令的参数超出了卡的最大允许范
围,或先前定义的数据块长度对于当前命令来说是非
法的(例如:主机发出一个写命令,当前的块长度小
于卡所允许的最小长度,同时又不允许写入部分数据
)
‘0’= 无错误
‘1’= 错误
380/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
28 ERASE_SEQ_ERROR C
‘0’= 无错误 发送擦除命令的顺序错误。
‘1’= 错误
27 ERASE_PARAM E X C
‘0’= 无错误 擦除时选择了非法的擦除组。
‘1’= 错误
26 WP_VIOLATION E X C
‘0’= 无错误 试图对一个写保护的数据块编程。
‘1’= 错误
25 CARD_IS_LOCKED S R A
‘0’= 卡未锁 当设置了该位,表示卡已经被锁住。
‘1’= 卡已锁
C 24 LOCK_UNLOCK_FAILED E X 在上锁/解锁中有命令的顺序错误或检测到密码错
误。
‘0’= 无错误
‘1’= 错误
23 COM_CRC_ERROR E R B
‘0’= 无错误 之前的命令中CRC校验错误。
‘1’= 错误
22 ILLEGAL_COMMAND E R B
‘0’= 无错误 对于当前的卡状态,命令非法。
‘1’= 错误
21 CARD_ECC_FAILED E X C
‘0’= 成功 卡的内部实施了ECC校验,但在更正数据时失败。
‘1’= 失败
C 20 CC_ERROR E R (标准中未定)卡内部发生错误,与主机的命令无
关。
‘0’= 无错误
‘1’= 错误
C 19 ERROR E X 产生了与执行上一个主机命令相关的(标准中未定义)
卡内部的错误(例如:读或写错误)
‘0’= 无错误
‘1’= 错误
18
保留
17
保留
C 16 CID/CSD_OVERWRITE E X
‘0’= 无错误 可以是任何一个下述的错误:
‘1’= 错误 已经写入了CID寄存器,不能覆盖
CSD的只读部分与卡的内容不匹配
试图进行拷贝或永久写保护的反向操作,即恢
复原状或解除写保护。
C 15 WP_ERASE_SKIP E X
‘0’= 未保护 遇到已经存在的写保护数据块,仅有部分地址空间被
擦除。
‘1’= 已保护
14 CARD_ECC_DISABLED S X A
‘0’= 允许 执行命令时没有使用内部的ECC
‘1’= 不允许
C 13 ERASE_RESET 因为收到一个擦除顺序之外的命令(CMD35
CMD36CMD38CMD13命令),进入擦除过程的
序列被中止。
‘0’= 清除
‘1’= 设置
B 12:9 CURRENT_STATE S R 0 = 空闲 当收到命令时卡内状态机的状态。如果命令的执行导
致状态的变化,这个变化将会在下个命令的响应中反
映出来。这四个位按十进制数015解释。
1 = 就绪
2 = 识别
3 = 待机
4 = 发送
5 = 数据
6 = 接收
7 = 编程
8 = 断开
9 = 忙测试
10~15 = 保留
8 READY_FOR_DATA S R
‘0’= 未就绪 与总线上的缓冲器空的信号相对应。
‘1’= 就绪
7 SWITCH_ERROR E X B
‘0’= 无错误 卡没有按照SWITCH命令的要求转换到希望的模式。
‘1’= 转换错
381/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
6
保留
C 5 APP_CMD S R 卡期望ACMD,或指示命令已经被解释为ACMD
令。
‘0’= 不允许
‘1’= 允许
4 保留给SD I/O
3 AKE_SEQ_ERROR E R C
‘0’= 无错误 验证的顺序有错误。
‘1’= 错误
2 保留给与应用相关的命令。
1,0 保留给生产厂家的测试模式。
20.4.12 SD状态寄存器
SD状态包含与SD存储器卡特定功能相关的状态位和一些与未来应用相关的状态位,SD状态的
长度是一个512位的数据块。收到ACMD13命令(CMD55,然后是CMD13),这个寄存器的内
容被传送到SDIO卡主机。只有卡处于传输状态时(卡已被选择)才能发送ACMD13命令。
130定义了不同的SD状态寄存器信息。表中有关类型和清除条件域的缩写定义如下:
类型:
E: 错误位
S: 状态位
R: 检测位,并依据实际的命令响应而设置
X: 检测位,在命令的执行中设置。SDIO卡主机通过发送状态命令读出这些位而查询卡的状
态。
清除条件:
A: 依据卡的当前状态
B: 始终与之前的命令相关。接收到正确的命令即可清除(具有一个命令的延迟)
C: 读即可清除
130 SD状态
清除
条件
名称 数值 说明 类型
A 511:510 DAT_BUS_WIDTH S R SET_BUS_WIDTH 命令定义
的当前数据总线宽度。
‘00’= 1(默认)
‘01’= 保留
‘10’= 4位宽
‘11’= 保留
A 509 SECURED_MODE S R 卡处于保密操作模式(详见“SD
保密规范”)
‘0’= 未处于保密模式
‘1’= 处于保密模式
508:496
保留
495:480 SD_CARD_TYPE S R A
‘00xxh’= 在物理规范版本1.01
~2.00SD存储器卡('x'表示任
意值)。已定义的卡有:
这个域的低8位可以在未来定义
SD存储卡的不同变种(每个位可
以用于定义不同的SD类型)。高8
位可以用于定义那些不遵守当前
SD物理层规范的SD卡。
'0000'= 通用SD读写卡
'0001'= SD ROM
479:448 SIZE_OF_PROTECTED_AREA S R A
受保护的区域大小(见以下说明)(见以下说明)
447:440 SPEED_CLASS S R A
卡的速度类型(见以下说明) (见以下说明)
439:432 PERFORMANCE_MOVE S R A
1MB/秒为单位的传输性能(
以下说明)
(见以下说明)
431:428 AU_SIZE S R A
AU的大小(见以下说明) (见以下说明)
427:424
保留
423:408 ERASE_SIZE S R A
一次可以擦除的AU数目 (见以下说明)
382/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
407:402 ERASE_TIMEOUT S R A
擦除UNIT_OF_ERASE_AU
定的范围的超时数值
(见以下说明)
401:400 ERASE_OFFSET S R A
在擦除时增加的固定偏移数值 (见以下说明)
399:312 保留
311:0 保留给生产厂商
SIZE_OF_PROTECTED_AREA
标准容量卡和高容量卡设置该位的方式不同。对于标准容量卡,受保护区域的容量由下式
算:
受保护区域 = SIZE_OF_PROTECTED_AREA * MULT * BLOCK_LEN
SIZE_OF_PROTECTED_AREA的单位是MULT * BLOCK_LEN
对于高容量卡,受保护区域的容量由下式计算:
受保护区域 = SIZE_OF_PROTECTED_AREA
SIZE_OF_PROTECTED_AREA的单位是字节。
SPEED_CLASS
8位指示速度的类型和可以通过计算PW/2的数值(PW是写的性能)
131 速度类型代码
SPEED_CLASS 数值定义
00h 类型0
01h 类型2
02h 类型4
03h 类型6
04h~FFh 保留
PERFORMANCE_MOVE
8位以1MB/秒为单位指示移动性能(Pm)。如果卡不用RU(纪录单位)移动数据,应该认为Pm
无穷大。设置这个域为FFh表示无穷大。
132 移动性能代码
PERFORMANCE_MOVE 数值定义
00h 未定义
01h 1MB/
02h 2MB/
…… ……
FEh 254MB/
FFh 无穷大
AU_SIZE
4位指示AU的长度,数值是16K字节为单位2的幂次的倍数。
133 AU_SIZE代码
AU_SIZE 数值定义
00h 未定义
01h 16KB
02h 32KB
03h 64KB
04h 128KB
05h 256KB
383/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
06h 512KB
07h 1MB
08h 2MB
09h 4MB
Ah~Fh 保留
依据卡的容量,最大的AU长度由下表定义。卡可以在RU长度和最大的AU长度之间设置任意的
AU长度。
134 最大的AU长度
16MB~64MB 128MB~256MB 512MB 1GB~32GB
容量
512KB 1MB 2MB 4MB
最大的AU长度
ERASE_SIZE
这个16位域给出了NERASE,当NERASEAU被擦除时,ERASE_TIMEOUT定义了超时时间。主
机应该确定适当的一次操作中擦除的AU数目,这样主机可以显示擦除操作的进度。如果该域为
0,则不支持擦除的超时计算。
135 ERASE_SIZE代码
ERASE_SIZE 数值定
0000h 不支持擦除的超时计算
0001h 1AU
0002h 2AU
0003h 3AU
…… ……
FFFFh 65535AU
ERASE_TIMEOUT
6位给出了TERASE,当ERASE_SIZE指示的多个AU被擦除时,这个数值给出了从偏移量算起
的擦除超时。ERASE_TIMEOUT的范围可以定义到最多63秒,卡的生产商可以根据具体实现选
择合适的ERASE_SIZE ERASE_TIMEOUT 的组合,先确定ERASE_TIMEOUT 再确定
ERASE_SIZE
136 擦除超时代码
ERASE_TIMEOUT 数值定义
00 不支持擦除的超时计算
01 1
02 2
03 3
…… ……
63 63
ERASE_OFFSET
2位给出了TOFFSET,当ERASE_SIZEERASE_TIMEOUT同为0时这个数值没有意义。
137 擦除偏移代码
ERASE_OFFSET 数值定义
0 0
1 1
2 2
3 3
384/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
20.4.13 SDI/O模式
SDI/O中断
为了让SD I/O卡能够中断多媒体卡/SD模块,在SD接口上有一个具有中断功能的引脚——第8
脚,在4SD模式下这个脚是SDIO_D1,卡用它向多媒体卡/SD模块提出中断申请。对于每一
个卡或卡内的功能,中断功能是可选的。SD I/O的中断是电平有效,即在被识别并得到多媒体
/SD模块的响应之前,中断信号线必须保持有效电平(),在中断过程结束后保持无效电平
()。在多媒体卡/SD模块服务了中断请求后,通过一个I/O写操作,写入适当的位到SD I/O卡的
内部寄存器,即可清除中断状态位。所有SD I/O卡的中断输出是低电平有效,多媒体卡/SD模块
在所有数据线(SDIO/D[3:0]) 上提供上拉电阻。多媒体卡/SD 模块在中断阶段对8
(SDIO_D/IRQ)采样并进行中断检测,其它时间该信号线上的数值将被忽略。
存储器操作和I/O操作都具有中断阶段,单个数据块操作的中断阶段定义与多个数据块传输操
的中断阶段定义不同。
SDI/O暂停和恢复
在一个多功能的SD I/O卡或同时具有I/O和存储器功能的卡中,多个设(I/O和存储器)共用
MMC/SD总线。为了使MMC/SD模块中的多个设备能够共用总线,SD I/O卡和复合卡可以有选
择地实现暂停/恢复的概念;如果一个卡支持暂停/恢复,MMC/SD模块能够暂时地停止一个功能
或存储器的数据传输操作(暂停),借此让出总线给具有更高优先级的其它功能或存储器,在这
具有更高优先级的传输完成后,再恢复原先暂停的传输。支持暂停/恢复的操作是可选的。在
MMC/SD总线上执行暂停/恢复操作有下述步骤:
1. 确定SDIO_D[3:0]信号线的当前功能
2. 请求低优先级或慢的操作暂停
3. 等待暂停操作完成,确认设备已暂停
4. 开始高优先级的传输
5. 等待高优先级的传输结束
6. 恢复暂停的操作
SD I/O读等待(ReadWait)
可选的读等待(RW)操作只适用于SD卡的1位或4位模式。读等待操作允许MMC/SD模块在一个
卡正在读多个寄存器(IO_RW_EXTENDED, CMD53)时,要求它暂时停止数据传输,同时允许
MMC/SD模块发送命令到SD I/O 设备中的其他功能。判断一个卡是否支持读等待协议,
MMC/SD模块应该检测卡的内部寄存器。读等待的时间与中断阶段相关。
20.4.14 命令与响应
应用相关命令和通用命令
SD卡主机模块系统是用于提供一个适用于多种应用类型的标准接口,但同时又要兼顾特定用户
和应用的功能,因此标准中定义了两类通用命令:应用相关命令(ACMD) 和通用命令
(GEN_CMD)
当卡收到APP_CMD(CMD55)命令时,卡期待下一个命令是应用相关命令。应用相关命令
(ACMD)具有普通多媒体卡相同的格式结构,并可以使用相同的CMD号码,因为它是出现在
APP_CMD(CMD55)后面,所以卡把它识别为ACMD命令。如果跟随APP_CMD(CMD55)之后不
是一个已经定义的应用相关命令,则认为它是一个标准命令;例如:有一个SD_STATUS
(ACMD13)应用相关命令,如果在紧随APP_CMD(CMD55)之后收到CMD13,它将被解释为
SD_STATUS(ACMD13);但是如果卡在紧随APP_CMD(CMD55)之后收到CMD7,而这个卡没
有定义ACMD7,则它将被解释为一个标准的CMD7(SELECT/DESELECT_CARD)命令。
如果要使用生产厂商自定义的ACMDSD卡主机需要做以下操作:
1. 发送APP_CMD(CMD55)命令
卡送回响应给多媒体/SD卡模块,指示设置了APP_CMD位并等待ACMD命令。
385/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
2. 发送指定的ACMD
卡送回响应给多媒体/SD卡模块,指示设置了APP_CMD位,收到的命令已经正确地按照
ACMD命令解析;如果发送了一个非ACMD命令,卡将按照普通的多媒体卡命令处理同时
清除卡中状态寄存器的APP_CMD位。
如果发送了一个非法的命令(不管是ACMD还是CMD),将被按照标准的非法多媒体卡命令进行
错误处理。
GEN_CMD 命令的总线操作过程,与单数据块读写命令(WRITE_BLOCK CMD24
READ_SINGLE_BLOCKCMD17)相同;这时命令的参数表示数据传输的方向而不是地址,数
据块具有用户自定义的格式和意义。
发送GEN_CMD(CMD56)命令之前,卡必须被选中(状态机处于传输状态),数据块的长度由
SET_BLOCKLEN(CMD16)定义。GEN_CMD(CMD56)命令的响应是R1b格式。
命令类型
应用相关命令和通用命令有四种不同的类型:
1. 广播命令(BC):发送到所有卡,没有响应返回。
2. 带响应的广播命令(BCR):发送到所有卡,同时收到从所有卡返回的响应。
3. 带寻址(点对点)的命令(AC):发送到选中的卡,在SDIO_D信号线上不包括数据传输。
4. 带寻址(点对点)的数据传输命令(AC):发送到选中的卡,在SDIO_D信号线上包含数据传
输。
命令格式
386/754
命令格式参见表122
多媒体卡/SD卡模块的命令
138 基于块传输的写命令
CMD
响应
格式
类型 参数 缩写 说明
[31:16] = 0 定义在随后的多块读或写命令中需要传输
块的数目。
CMD23 ac R1 SET_BLOCK_COUNT
[15:0] = 数据块数目
按照SET_BLOCKLEN命令选择的长度写
一个块。
CMD24 adtc [31:0] = 数据地址 R1 WRITE_BLOCK
收到一个STOP_TRANSMISSION命令或
达到了指定的块数目之前,连续地写数据
块。
CMD25 adtc [31:0] = 数据地址 R1 WRITE_MULTIPLE_BLOCK
对卡的识别寄存器编程。对于每个卡只能
发送一次这个命令。卡中有硬件机制防止
多次的编程操作。通常该命令保留给生产
厂商。
CMD26 adtc [31:0] = 填充位 R1 PROGRAM_CID
CMD27 adtc [31:0] = 填充位 R1 PROGRAM_CSD 对卡的CSD中可编程的位编程。
CMD28 ac [31:0] = 数据地 R1b SET_WRITE_PROT
如果卡有写保护功能,该命令设置指定组
的写保护位。写保护特性设置在卡的特殊
数据区(WP_GRP_SIZE)
CMD29 ac [31:0] = 数据地 R1b CLR_WRITE_PROT
如果卡有写保护功能,该命令清除指定组
的写保护位。
如果卡有写保护功能,该命令要求卡发送
写保护位的状态。
CMD30 adtc [31:0] = 写保护数据地址 R1 SEND_WRITE_PROT
CMD31 保留
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
139 基于块传输的写保护命令
响应
格式
CMD索引 类型 参数 缩写 说明
387/754
CMD28 ac [31:0] = 数据地址 R1b SET_WRITE_PROT
如果卡具有写保护的功能,该命令设置指定
组的写保护位。写保护的属性设置在卡的特
定数据域(WP_GRP_SIZE)
CMD29 ac [31:0] = 数据地址 R1b CLR_WRITE_PROT
如果卡具有写保护的功能,该命令清除指定
组的写保护位。
如果卡具有写保护的功能,该命令要求卡发
送写保护位的状态。
CMD30 adtc [31:0] = 写保护数据地址 R1 SEND_WRITE_PROT
CMD31 保留
140 擦除命令
响应
格式
CMD索引 类型 参数 缩写 说明
CMD32
保留。为了与旧版本的对媒体卡协议向后兼容,不能使用这些命令代码。
CMD34
在选择的擦除范围内,设置第一个擦除组
的地址。
CMD35 ac [31:0] = 数据地址 R1 ERASE_GROUP_START
CMD36 ac [31:0] = 数据地址 R1 ERASE_GROUP_END
在选择的连续擦除范围内,设置最后一个
擦除组的地址。
CMD37 保留。为了与旧版本的对媒体卡协议向后兼容,不能使用这个命令代码。
CMD38 ac [31:0] = 填充位 R1 ERASE 擦除之前选择的数据块。
141 I/O模式命令
响应
格式
CMD索引 类型 参数 缩写 说明
用于写和读8(寄存器)数据域。该命令指
一个卡和寄存器,如果设置了写标志还提
写入的数据。R4响应包含从指定寄存器读出
的数据。该命令访问未在多媒体卡标准中
义的与应用相关的寄存器。
[31:16] = RCA
CMD39 ac
[15] = 寄存器写标志 R4 FAST_IO
[14:8] = 寄存器地址
[7:0] = 寄存器数据
CMD40 bcr [31:0] = 填充位 R5 GO_IRQ_STATE 置系统于中断模式。
CMD41 保留。
142 上锁命令
响应
格式
CMD索引 类型 参数 缩写 说明
CMD42 adtc [31:0] = 填充位 R1b LOCK_UNLOCK
设置/清除密码或对卡上锁/解锁。数据块
的长度由SET_BLOCKLEN命令设置。
CMD43
保留。
CMD54
143 应用相关命令
响应
格式
CMD索引 类型 参数 缩写 说明
CMD55 ac
[31:16] = RCA 指示卡下一个命令是应用相关命令而不是
一个标准命令。
R1 APP_CMD
[15:0] = 填充位
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
在通用或应用相关命令中,或者用于向卡
中传输一个数据块,或者用于从卡中读取
一个数据块。数据块的长度由
SET_BLOCKLEN命令设置。
388/754
CMD56 adtc
[31:1] = 填充位
[0] = RD/WR
CMD57
保留。
CMD59
CMD60
保留给生产厂商。
CMD63
20.5 响应格式
所有的响应是通过MCCMD命令在SDIO_CMD信号线上传输。响应的传输总是从对应响应字的
位串的最左面开始,响应字的长度与响应的类型相关。
一个响应总是有一个起始位(始终为0),跟随着传输的方向位(=0)。下表中标示为x的数值表示
一个可变的部分。除了R3响应类型,所有的响应都有CRC保护。每一个命令码字都有一个结束
(始终为1)
共有5种响应类型,它们的格式定义如下:
20.5.1 R1(普通响应命令)
代码长度=48位。位45:40指示要响应的命令索引,它的数值介于063之间。卡的状态由32
进行编码。
144 R1响应
域宽度 数值 说明
47 1 0
开始位
46 1 0
传输位
[45:40] 6 X
命令索引
[39:8] 32 X
卡状态
[7:1] 7 X CRC7
0 1 1
结束位
20.5.2 R1b
R1格式相同,但可以选择在数据线上发送一个繁忙信号。收到这些命令后,依据收到命令
前的状态,卡可能变为繁忙。
20.5.3 R2(CIDCSD寄存器)
代码长度=136位。CID寄存器的内容将作为CMD2CMD10的响应发出。CSD寄存器的内容将
作为CMD9的响应发出。卡只送出CIDCSD的位[127…1],在接收端这些寄存器的位0被响应
的结束位所取代。卡通过拉低MCDAT指示它正在进行擦除操作;实际擦除操作的时间可能非常
长,主机可以发送CMD7命令不选中这个卡。
145 R2响应
域宽度 数值 说明
135 1 0
开始位
134 1 0
传输位
[133:128] 6 ‘111111’
命令索引
[127:1] 127 X
卡状态
0 1 1
结束位
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
20.5.4 R3(OCR寄存器)
代码长度=48位。OCR寄存器的内容将作为CMD1的响应发出。电平代码的定义是:限制的电压
窗口 = 低,卡繁忙 = 低。
146 R3响应
域宽度 数值 说明
47 1 0
开始位
46 1 0
传输位
[45:40] 6 ‘111111’
保留
[39:8] 32 X
OCR寄存器
[7:1] 7 ‘1111111’
保留
0 1 1
结束位
20.5.5 R4(快速I/O)
代码长度=48位。参数域包含指定卡的RCA、需要读出或写入寄存器的地址、和它的内容。
147 R4响应
域宽度 数值 说明
47 1 0
开始位
46 1 0
传输位
[45:40] 6 ‘111111’
保留
[31:16] 16 X RCA
[15:8] 8 X
寄存器地址
[39:8]参数域
[7:0] 8 X
读寄存器的内容
[7:1] 7 ‘1111111’ CRC7
0 1 1
结束位
20.5.6 R4b
仅适合SD I/O卡:一个SDIO卡收到CMD5后将返回一个唯一的SDIO响应R4
148 R4b响应
域宽度 数值 说明
47 1 0
开始位
46 1 0
传输位
[45:40] 6 X
保留
39 1 X
卡已就绪
[38:36] 3 X
I/O功能数目
389/754
35 1 X
当前存储器
[39:8]参数域
[34:32] 3 X
填充位
[31:8] 24 X I/O ORC
[7:1] 7 X
保留
0 1 1
结束位
当一个SD I/O卡收到命令CMD5,卡的I/O部分被使能并能够正常地响应所有后续的命令。I/O
的使能状态将保持到下一次复位、断电或收到I/O复位的CMD52命令。注意,一个只包含存储器
功能的SD卡可以响应CMD5命令,它的正确响应可以是:当前存储器=1I/O功能数目=0。按照
SD存储器卡规范版本1.0设计的只包含存储器功能的SD卡,可以检测到CMD5命令为一个非法
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
命令并不响应它。可以处理I/O卡的主机将发送CMD5命令,如果卡返回响应R4,则主机会依据
R4响应中的数据确定卡的配置。
20.5.7 R5(中断请求)
仅适用于多媒体卡。代码长度=48位。如果这个响应由主机产生,则参数中的RCA域为0x0
149 R5响应
域宽度 数值 说明
47 1 0
开始位
46 1 0
传输位
[45:40] 6 ‘111111’ CMD40
[31:16] 16 X
成功的卡或主机的RCA[31:16]
[39:8]
数域 [15:0] 16 X
未定义。可以作为中断数据。
[7:1] 7 X CRC7
0 1 1
结束位
20.5.8 R6(中断请求)
仅适用于SD I/O卡。这是一个存储器设备对CMD3命令的正常响应。
150 R6响应
域宽度 数值 说明
47 1 0
开始位
46 1 0
传输位
[45:40] 6 ‘101000’ CMD40
[31:16] 16 X
成功的卡或主机的RCA[31:16]
[39:8]
数域 [15:0] 16 X
未定义。可以作为中断数据。
[7:1] 7 X CRC7
0 1 1
结束位
当发送CMD3命令到只有I/O功能的卡时,卡的状态位[23:8]会改变;此时,响应中的16位将是只
I/O功能的SD卡中的数值:
15 = COM_CRC_ERROR
14 = ILLEGAL_COMMAND
13 = ERROR
[12:0] = 保留
20.6 SDIO I/O卡特定的操作
下述功能是SD I/O卡特定的操作:
SDIO_D2信号线实现的SDIO读等待操作。
通过停止时钟实现的SDIO读等待操作。
SDIO暂停/恢复操作(写和读暂停)
SDIO中断
只有设置了SDIO_DCTRL[11]位时,SDIO才支持这些操作;但读暂停除外,因为它不需要特殊
的硬件操作。
20.6.1 使用SDIO_D2 信号线的SDIO I/O读等待操作
在收到第一个数据块之前即可以开始读等待过程,使能数据通道(设置SDIO_DCTRL[0])、使
SDIO 特定操作(设置SDIO_DCTRL[11] )、开始读等待(SDIO_DCTRL[10]=0 并且
390/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
SDIO_DCTRL[8]=1),同时数据传输方向是从卡至SDIO主机(SDIO_DCTRL[1]=1)DPSM将直
接从空闲进入读等待状态。在读等待状态时,2SDIO_CK时钟周期后,DPSM驱动SDIO_D2
’0’,在此状态,如果设置RWSTOP(SDIO_DCTRL[9]),则DPSM会在等待状态多停留2
SDIO_CK时钟周期,(根据SDIO规范)并在一个时钟周期中驱动SDIO_D2’1’。然后DPSM开始
等待从卡里接收数据。在接收数据块时,即使设置了开始读等待,DPSM也不会进入读等待,
读等待过程将在收到CRC后开始。必须清除RWSTOP才能开始新的读等待操作。在读等待期
间,SDIO主机可以在SDIO_D1上监测SDIO中断。
20.6.2 使用停止SDIO_CKSDIO读等待操作
如果SDIO卡不能支持前述的读等待操作,SDIO可以停SDIO_CK进入读等待(按照20.6.1节介
绍的方式设置SDIO_DCTRL,但置SDIO_DCTRL[10]=1),在接收当前数据块结束位之后的2
SDIO_CK周期后,DSPM停止时钟,在设置了读等待开始位后恢复时钟。
因为SDIO_CK停止了,可以向卡发送任何命令。在读等待期间,SDIO主机可以在SDIO_D1
监测SDIO中断。
20.6.3 SDIO暂停/恢复操作
在向卡发送数据时,SDIO可以暂停写操作。设置SDIO_CMD[11]位,这指示CPSM当前的命令
是一个暂停命令。CPSM分析响应,在从卡收到ACK(暂停被接受),它确认在收到当前数据块
CRC后进入空闲状态。
硬件不会保存结束暂停操作之后,剩余的发送数据块数目。
可以通过软件暂停写操作:在收到卡对暂停命令的ACK时,停止DPSM(SDIO_DCTRL[0]=0)
DPSM即可进入空闲状态。
暂停读操作:DPSMWait_r状态等待,在停止数据传输进入暂停之前,已经发送完成完整的数
据包。随后应用程序继续读出RxFIFO直到FIFO变空,最后DPSM自动地进入空闲状态。
20.6.4 SDIO中断
当设置了SDIO_DCTRL[11]位,SDIO主机在SDIO_D1信号线上监测SDIO中断。
20.7 CE-ATA特定操作
下面是CE-ATA的特定操作:
送出命令完成信号能够关闭CE-ATA设备
CE-ATA设备接收命令完成信号
使用状态位和/或中断,向CPU发送CE-ATA命令完成信号
仅当设置了SDIO_CMD[14]位时,即SDIO主机只对CE-ATACMD61命令支持这些操作。
20.7.1 命令完成指示关闭
如果未设置SDIO_CMD[12]中的“允许CMD结束位”并且设置了SDIO_CMD[13]中的“非中断
使能位”,则在收到一个短响应后的8个位周期之后,发出命令完成关闭信号。
在命令移位寄存器中写入关闭序列“00001”并且在命令计数器中写入43,则CPSM进入暂停状
态。8个周期后,一个触发将CPSM移至发送状态。当命令计数器达到48时,因为没有要等待
响应,CPSM变为空闲状态。
20.7.2 命令完成指示使能
如果设置SDIO_CMD[12]中的“允许CMD结束位”并且设置了SDIO_CMD[13]中的“非中断使
能位”,CPSMWaitcpl状态下等待命令完成信号。
当在CMD信号上收到’0’CPSM进入空闲状态。在个7位周期之内不能发送新命令。然后,在最
5个周期(上述7个周期之外),在推挽模式下CMD信号变为’1’
391/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
20.7.3 CE-ATA中断
命令完成是由状态位SDIO_STA[23]通知CPU,使用清除位SDIO_ICR[23]可以清除该位。
根据屏蔽位SDIO_MASKx[23]的设置,SDIO_STA[23]状态位可以在每一个中断线上产生中断。
20.7.4 中止CMD61
如果还未发送命令完成指示关闭信号,但需要中止CMD61命令,命令状态机必须被关闭。然
后它变成空闲,并且可以发送CMD12命令。在此操作期间,不传送命令完成指示关闭信号。
20.8 硬件流控制
使用硬件流控制功能可以避免FIFO下溢(发送模式)和上溢(接收模式)错误。
操作过程是停止SDIO_CK并冻结SDIO状态机,在FIFO不能进行发送和接收数据时,数据传输
暂停。只有由SDIOCLK驱动的状态机被冻结,AHB接口还在工作。即使在流控制起作用时,仍
然可以读出或写入FIFO
必须设置SDIO_CLKCR[14]位为’1’,才能使能硬件流控制。复位后,硬件流控制功能关闭。
20.9 SDIO寄存器
设备通过可以在AHB上操作的32位控制寄存器与系统通信。
必须以字(32)的方式操作这些外设寄存器。
20.9.1 SDIO电源控制寄存器(SDIO_POWER)
地址偏移:0x00
复位值:0x0000 0000
3130292827262524232221201918171615141312111098765432 1 0
保留
res
PWRCTRL
rw
31:2 保留,始终读为0
PWRCTRL:电源控制位 (Power supply control bits) 1:0
这些位用于定义卡时钟的当前功能状态:
00:电源关闭,卡的时钟停止。
01:保留。
10:保留的上电状态。
11:上电状态,卡的时钟开启。
注意:
写数据后的
7
HCLK
时钟周期内,不能写入这个寄存器。
20.9.2 SDIO时钟控制寄存器(SDIO_CLKCR)
地址偏移:0x04
复位值:0x0000 0000
SDIO_CLKCR寄存器控制SDIO_CK输出时钟。
313029282726252423222120191817161514131211109876543210
HWFC_EN
NEGEDGE
BYPASS
PWRSAV
CLKEN
rw rw rw rw rw
保留
res
WIDBUS
CLKDIV
rw r/w
31:15 保留,始终读为0
392/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
HWFC_EN:硬件流控制使能 (HW Flow Control enable) 14
0:关闭硬件流控制
1:使能硬件流控制
当使能硬件流控制后,关于TXFIFOERXFIFOF中断信号的意义请参考20.9.11节的SDIO状态
寄存器的定义。
NEGEDGESDIO_CK相位选择位 (SDIO_CK dephasing selection bit) 13
0:在主时钟SDIOCLK的上升沿产生SDIO_CK
1:在主时钟SDIOCLK的下降沿产生SDIO_CK
WIDBUS:宽总线模式使能位 (Wide bus mode enable bit) 12:11
00:默认总线模式,使用SDIO_D0
014位总线模式,使用SDIO_D[3:0]
108位总线模式,使用SDIO_D[7:0]
BYPASS:旁路时钟分频器 (Clock divider bypass enable bit) 10
0:关闭旁路:驱动SDIO_CK输出信号之前,依据CLKDIV数值对SDIOCLK分频。
1:使能旁路:SDIOCLK直接驱动SDIO_CK输出信号。
PWRSAV:省电配置位 (Power saving configuration bit) 9
为了省电,当总线为空闲时,设置PWRSAV位可以关闭SDIO_CK时钟输出。
0:始终输出SDIO_CK
1:仅在有总线活动时才输出SDIO_CK
CLKEN:时钟使能位 (Clock enable bit) 8
0SDIO_CK关闭。
1SDIO_CK使能。
CLKDIV:时钟分频系数 (Clock divide factor) 7:1
这个域定义了输入时钟(SDIOCLK)与输出时钟(SDIO_CK)间的分频系数:
SDIO_CK频率 = SDIOCLK/[CLKDIV + 2]
注意:
1
SD/SDIO
卡或多媒体卡在识别模式,
SDIO_CK
的频率必须低于
400kHz
2
当所有卡都被赋予了相应的地址后,时钟频率可以改变到卡总线允许的最大频率。
3
写数据后的
7
HCLK
时钟周期内不能写入这个寄存器。对于
SD I/O
卡,在读等待期间可以停
SDIO_CK
,此时
SDIO_CLKCR
寄存器不控制
SDIO_CK
20.9.3 SDIO参数寄存器(SDIO_ARG)
地址偏移:0x08
复位值:0x0000 0000
SDIO_ARG寄存器包含32位命令参数,它将作为命令的一部分发送到卡中。
313029282726252423222120191817161514131211109876543210
CMDARG
rw
CMDARG:命令参数 (Command argument) 31:0
命令参数是发送到卡中命令的一部分,如果一个命令包含一个参数,必须在写命令到命令寄存
器之前加载这个寄存器。
20.9.4 SDIO命令寄存器(SDIO_CMD)
地址偏移:0x0C
复位值:0x0000 0000
SDIO_CMD寄存器包含命令索引和命令类型位。命令索引是作为命令的一部分发送到卡中。
令类型位控制命令通道状态机(CPSM)
393/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
313029282726252423222120191817161514131211109876543210
CE_ATACMD
nIEN
ENCMDcompl
SDIOSuspend
CPSMEN
WAITPEND
WAITINT
rw rw rw rw rw rw rw rw rw
保留
res
CMDINDEX
WAITRESP
rw
31:15 保留,始终读为0
ATACMDCE-ATA命令 (CE-ATA command) 14
如果设置该位,CPSM转至CMD61
nIEN:不使能中断 (not interrupt enable) 13
如果未设置该位,则使能CE-ATA设备的中断。
ENCMDcompl:使能CMD完成 (Enable CMD completion) 12
如果设置该位,则使能命令完成信号。
SDIOSuspendSD I/O暂停命令 (SD I/O suspend command) 11
如果设置该位,则将要发送的命令是一个暂停命令(只能用于SDIO)
CPSMEN:命令通道状态机(CPSM)使能位 (Command path state machine (CPSM) Enable
bit)
10
如果设置该位,则使能CPSM
WAITPENDCPSM等待数据传输结束(CmdPend内部信号) (CPSM Waits for ends of data
transfer (CmdPend internal signal))
9
如果设置该位,则CPSM在开始发送一个命令之前等待数据传输结束。
WAITINTCPSM等待中断请求 (CPSM waits for interrupt request) 8
如果设置该位,则CPSM关闭命令超时控制并等待中断请求。
WAITRESP:等待响应位 (Wait for response bits) 7:6
2位指示CPSM是否需要等待响应,如果需要等待响应,则指示响应类型。
00:无响应,期待CMDSENT标志
01:短响应,期待CMDRENDCCRCFAIL标志
10:无响应,期待CMDSENT标志
11:长响应,期待CMDRENDCCRCFAIL标志
CMDINDEX:命令索引 (Command index) 5:0
命令索引是作为命令的一部分发送到卡中。
注意:
1
写数据后的
7
HCLK
时钟周期内不能写入这个寄存器。
2
多媒体卡可以发送
2
种响应:
48
位长的短响应,或
136
位长的长响应。
SD
卡和
SD I/O
卡只能发
送短响应,参数可以根据响应的类型而变化,软件将根据发送的命令区分响应的类型。
CE-ATA
设备只发送短响应。
20.9.5 SDIO命令响应寄存器(SDIO_RESPCMD)
地址偏移:0x10
复位值:0x0000 0000
SDIO_RESPCMD存器包含最后收到的命令响应中的命令索引。如果传输的命令响应不包含
命令索引(长响应或OCR响应),尽管它应该包含111111b(响应中的保留域值),但RESPCMD
的内容未知。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RESPCMD
r
保留
res
31:6 保留,始终读为0
394/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
RESPCMD:响应的命令索引 (Response command index) 5:0
只读位,包含最后收到的命令响应中的命令索引。
20.9.6 SDIO响应 1..4 寄存器(SDIO_RESPx)
地址偏移:0x14 + 4*(x-1),其中 x = 1..4
复位值:0x0000 0000
SDIO_RESP1/2/3/4寄存器包含卡的状态,即收到响应的部分信息。
313029282726252423222120191817161514131211109876543210
CARDSTATUSx
r
CARDSTATUSx:见下表。 31:0
根据响应状态,卡的状态长度是32位或127位。
151 响应类型和SDIO_RESPx寄存器
寄存器 短响应 长响应
SDIO_RESP1 卡状态[31:0] 卡状态[127:96]
SDIO_RESP2 不用 卡状态[95:64]
SDIO_RESP3 不用 卡状态[63:32]
SDIO_RESP4 不用 卡状态[31:1]
总是先收到卡状态的最高位,SDIO_RESP3寄存器的最低位始终为0
20.9.7 SDIO数据定时器寄存器(SDIO_DTIMER)
地址偏移:0x24
复位值:0x0000 0000
SDIO_DTIMER寄存器包含以卡总线时钟周期为单位的数据超时时间。
一个计数器从SDIO_DTIMER寄存器加载数值,并在数据通道状态机(DPSM)进入Wait_R或繁忙
状态时进行递减计数,当DPSM处在这些状态时,如果计数器减为0,则设置超时标志。
313029282726252423222120191817161514131211109876543210
DATATIME
rw
DATATIME:数据超时时间 (Data timeout period) 31:0
以卡总线时钟周期为单位的数据超时时间。
注意
在写入数据控制寄存器进行数据传输之前,必须先写入数据定时器寄存器和数据长度寄存器。
20.9.8 SDIO数据长度寄存器(SDIO_DLEN)
地址偏移:0x28
复位值:0x0000 0000
SDIO_DLEN寄存器包含需要传输的数据字节长度。当数据传输开始时,这个数值被加载到数据
计数器中。
313029282726252423222120191817161514131211109876543210
保留 DATALENGTH
res rw
31:25 保留,始终读为0
395/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
DATALENGTH:数据长度 (Data length value) 24:0
要传输的数据字节数目。
注意
对于块数据传输,数据长度寄存器中的数值必须是数据块长度
(
SDIO_DCTRL)
的倍数。在写
入数据控制寄存器进行数据传输之前,必须先写入数据定时器寄存器和数据长度寄存器。
20.9.9 SDIO数据控制寄存器(SDIO_DCTRL)
地址偏移:0x2C
复位值:0x0000 0000
SDIO_DCTRL寄存器控制数据通道状态机(DPSM)
313029282726252423222120191817161514131211109876543210
SDIOEN
RWMOD
RWSTOP
RWSTART
DMAEN
DTMODE
DTDIR
DTEN
rw rw rw rw rw rw rw rw
保留
res
DBLOCKSIZE
rw
31:12 保留,始终读为0
SDIOENSD I/O使能功能 (SD I/O enable functions) 11
如果设置了该位,则DPSM执行SD I/O卡特定的操作。
RWMOD:读等待模式 (Read wait mode) 10
0:停止SDIO_CK控制读等待;
1:使用SDIO_D2控制读等待。
RWSTOP:读等待停止 (Read wait stop) 9
0:如果设置了RWSTART,执行读等待;
1:如果设置了RWSTART,停止读等待。
RWSTART:读等待开始 (Read wait start) 8
设置该位开始读等待操作。
DBLOCKSIZE:数据块长度 (Data block size) 7:4
当选择了块数据传输模式,该域定义数据块长度:
0000:块长度 = 20 = 1字节; 1000:块长度 = 28 = 256字节;
0001:块长度 = 21 = 2字节; 1001:块长度 = 29 = 512字节;
0010:块长度 = 22 = 4字节; 1010:块长度 = 210 = 1024字节;
0011:块长度 = 23 = 8字节; 1011:块长度 = 211 = 2048字节;
0100(十进制4)块长度 = 24 = 16字节; 1100:块长度 = 212 = 4096字节;
0101(十进制5)块长度 = 25 = 32字节; 1101:块长度 = 213 = 8192字节;
0110(十进制6)块长度 = 26 = 64字节; 1110:块长度 = 214 = 16384字节;
0111:块长度 = 27 = 128字节; 1111:保留。
DMAENDMA使能位 (DMA enable bit) 3
0:关闭DMA
1:使能DMA
DTMODE:数据传输模式 (Data transfer mode selection) 2
0:块数据传输;
1:流数据传输。
DTDIR:数据传输方向 (Data transfer direction selection) 1
0:控制器至卡;
1:卡至控制器。
396/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
DTEN数据传输使能位 (Data transfer enabled bit) 0
如果设置该位为1,则开始数据传输。根DTSIR方向位,DPSM进入Wait_SWait_R状态,
如果在传输的一开始就设置了RWSTART位,则DPSM进入读等待状态。不需要在数据传输结
束后清除使能位,但必须更改SDIO_DCTRL以允许新的数据传输。
注意
写数据后的
7
HCLK
时钟周期内不能写入这个寄存器。
20.9.10 SDIO数据计数器寄存器(SDIO_DCOUNT)
地址偏移:0x30
复位值:0x0000 0000
DPSM从空闲状态进入Wait_RWait_S状态时,SDIO_DCOUNT寄存器从数据长度寄存器加
载数值(SDIO_DLEN),在数据传输过程中,该计数器的数值递减直到减为0,然后DPSM进入
空闲状态并设置数据状态结束标志DATAEND
313029282726252423222120191817161514131211109876543210
保留 DATACOUNT
res r
31:25 保留,始终读为0
DATACOUNT:数据计数数值 (Data count value) 24:0
读这个寄存器时返回待传输的数据字节数,写这个寄存器无作用。
注意
只能在数据传输结束时读这个寄存器。
20.9.11 SDIO状态寄存器(SDIO_STA)
地址偏移:0x34
复位值:0x0000 0000
SDIO_STA是一个只读寄存器,它包含两类标志:
静态标志([23:2210:0]):写入SDIO中断清除寄存器(SDIO_ICR),可以清除这些位。
动态标志([21:11]):这些位的状态变化根据它们对应的那部分逻辑而变化(例如:FIFO
和空标志变高或变低随FIFO的数据写入变化)
313029282726252423222120191817161514131211109876543210
CEATAEND
SDIOIT
RXDAVL
TXDAVL
RXFIFOE
TXFIFOE
RXFIFOF
TXFIFOF
RXFIFOHF
TXFIFOHE
RXACT
TXACT
CMDACT
DBCKEND
STBITERR
DATAEND
CMDSENT
CMDREND
RXOVERR
TXUNDERR
DTMEOUT
CTIMEOUT
DCRCFAIL
CCRCFAIL
rrrrrrrrrrrrrrrrrrrrrrrr
保留
res
31:24 保留,始终读为0
CEATAEND:在CMD61接收到CE-ATA命令完成信号 (CE-ATA command completion signal
received for CMD61)
23
SDIOIT:收到SDIO中断 (SDIO interrupt received) 22
RXDVAL:在接收FIFO中的数据可用 (Data available in receive FIFO) 21
TXDVAL:在发送FIFO中的数据可用 (Data available in transmit FIFO) 20
RXFIFOE:接收FIFO (Receive FIFO empty) 19
TXFIFOE:发送FIFO (Transmit FIFO empty) 18
若使用了硬件流控制,当FIFO包含2个字时,TXFIFOE信号变为有效。
RXFIFOF:接收FIFO (Receive FIFO full) 17
若使用了硬件流控制,当FIFO还差2个字满时,RXFIFOF信号变为有效。
TXFIFOF:发送FIFO (Transmit FIFO full) 16
RXFIFOHF:接收FIFO半满 (Receive FIFO half full)FIFO中至少还有8个字。 15
397/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
TXFIFOHE:发送FIFO半空 (Transmit FIFO half empty)FIFO中至少还可以写入8个字。 14
RXACT:正在接收数据 (Data receive in progress) 13
TXACT:正在发送数据 (Data transmit in progress) 12
CMDACT:正在传输命令 (Command transfer in progress) 11
DBCKEND:已发送/接收数据块(CRC检测成功) (Data block sent/received (CRC check
passed))
10
STBITERR:在宽总线模式,没有在所有数据信号上检测到起始位 (Start bit not detected on
all data signals in wide bus mode)
9
DATAEND :数据结束(数据计数器,SDIO_DCOUNT = 0) (Data end (data counter,
SDIDCOUNT, is zero))
8
CMDSENT:命令已发送(不需要响应) (Command sent (no response required)) 7
CMDREND:已接收到响应(CRC检测成功) (Command response) 6
RXOVERR:接收FIFO上溢错误 (Received FIFO overrun error) 5
TXUNDERR:发送FIFO下溢错误 (Transmit FIFO underrun error) 4
DTIMEOUT:数据超时 (Data timeout) 3
CTIMEOUT:命令响应超时 (Command response timeout) 2
命令超时时间是一个固定的值,为64SDIO_CK时钟周期。
DCRCFAIL:已发送/接收数据块(CRC检测失败) (Data block sent/received) 1
CCRCFAIL:已收到命令响应(CRC检测失) (Command response received) 0
20.9.12 SDIO清除中断寄存器(SDIO_ICR)
地址偏移:0x38
复位值:0x0000 0000
SDIO_ICR是一个只写寄存器,在对应寄存器位写’1’将清除SDIO_STA状态寄存器中的对应位。
313029282726252423222120191817161514131211109876543210
CEATAENDC
SDIOITC
DBCKENDC
STBITERRC
DATAENDC
CMDSENTC
CMDRENDC
RXOVERRC
TXUNDERRC
DTMEOUTC
CTIMEOUTC
DCRCFAILC
CCRCFAILC
rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
res
保留
res
31:24 保留,始终读为0
CEATAENDCCEATAEND标志清除位 (CEATAEND flag clear bit) 23
软件设置该位以清除CEATAEND标志。
SDIOITCSDIOIT标志清除位 (SDIOIT flag clear bit) 22
软件设置该位以清除SDIOIT标志。
保留,始终读为0 21:11
DBCKENDCDBCKEND标志清除位 (DBCKEND flag clear bit) 10
软件设置该位以清除DBCKEND标志。
STBITERRCSTBITERR标志清除位 (STBITERR flag clear bit) 9
软件设置该位以清除STBITERR标志。
DATAENDCDATAEND标志清除位 (DATAEND flag clear bit) 8
软件设置该位以清除DATAEND标志。
CMDSENTCCMDSENT标志清除位 (CMDSENT flag clear bit) 7
软件设置该位以清除CMDSENT标志。
CMDRENDCCMDREND标志清除位 (CMDREND flag clear bit) 6
软件设置该位以清除CMDREND标志。
398/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
RXOVERRCRXOVERR标志清除位 (RXOVERR flag clear bit) 5
软件设置该位以清除RXOVERR标志。
TXUNDERRCTXUNDERR标志清除位 (TXUNDERR flag clear bit) 4
软件设置该位以清除TXUNDERR标志。
DTIMEOUTCDTIMEOUT标志清除位 (DTIMEOUT flag clear bit) 3
软件设置该位以清除DTIMEOUT标志。
CTIMEOUTCTIMEOUT标志清除位 (CTIMEOUT flag clear bit) 2
软件设置该位以清除CTIMEOUT标志。
DCRCFAILCDCRCFAIL标志清除位 (DCRCFAIL flag clear bit) 1
软件设置该位以清除DCRCFAIL标志。
CCRCFAILCCCRCFAIL标志清除位。(CCRCFAILflag clear bit) 0
软件设置该位以清除CCRCFAIL标志。
20.9.13 SDIO中断屏蔽寄存器(SDIO_MASK)
地址偏移:0x3C
复位值:0x0000 0000
在对应位置’1’SDIO_MASK中断屏蔽寄存器决定哪一个状态位产生中断。
313029282726252423222120191817161514131211109876543210
CEATAENDIE
SDIOITIE
RXDAVLIE
TXDAVLIE
RXFIFOEIE
TXFIFOEIE
RXFIFOFIE
TXFIFOFIE
RXFIFOHFIE
TXFIFOHEIE
RXACTIE
TXACTIE
CMDACTIE
DBCKENDIE
STBITERRIE
DATAENDIE
CMDSENTIE
CMDRENDIE
RXOVERRIE
TXUNDERRIE
DTMEOUTIE
CTIMEOUTIE
DCRCFAILIE
CCRCFAILIE
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
res
31:24 保留,始终读为0
CEATAENDIE:允许接收到CE-ATA命令完成信号产生中断 (CE-ATA command completion
signal received interrupt enable)
23
由软件设置/清除该位,允许/关闭在收到CE-ATA命令完成信号产生中断功能。
0:收到CE-ATA命令完成信号时不产生中断
1:收到CE-ATA命令完成信号时产生中断
SDIOITIE:允许SDIO模式中断已接收中断 (SDIO mode interrupt received interrupt enable) 22
由软件设置/清除该位,允许/关闭SDIO模式中断已接收中断功能。
1SDIO模式中断已接收不产生中断
0SDIO模式中断已接收产生中断
RXDVALIE:接收FIFO中的数据有效产生中断 (Data available in Rx FIFO interrupt enable) 21
由软件设置/清除该位,允许/关闭接收FIFO中的数据有效中断。
0:接收FIFO中的数据有效不产生中断
1:接收FIFO中的数据有效产生中断
TXDVALIE:发送FIFO中的数据有效产生中断 (Data available in Rx FIFO interrupt enable) 20
由软件设置/清除该位,允许/关闭发送FIFO中的数据有效中断。
0:发送FIFO中的数据有效不产生中断
1:发送FIFO中的数据有效产生中断
RXFIFOEIE:接收FIFO空产生中断 (Rx FIFO empty interrupt enable) 19
由软件设置/清除该位,允许/关闭接收FIFO空中断。
0:接收FIFO空不产生中断
1:接收FIFO空产生中断
399/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
TXFIFOEIE:发送FIFO空产生中断 (Tx FIFO empty interrupt enable) 18
由软件设置/清除该位,允许/关闭发送FIFO空中断。
0:发送FIFO空不产生中断
1:发送FIFO空产生中断
RXFIFOFIE:接收FIFO满产生中断 (Rx FIFO full interrupt enable) 17
由软件设置/清除该位,允许/关闭接收FIFO满中断。
0:接收FIFO满不产生中断
1:接收FIFO满产生中断
TXFIFOFIE:发送FIFO满产生中断 (Tx FIFO full interrupt enable) 16
由软件设置/清除该位,允许/关闭发送FIFO满中断。
0:发送FIFO满不产生中断
1:发送FIFO满产生中断
RXFIFOHFIE:接收FIFO半满产生中断 (Rx FIFO half full interrupt enable) 15
由软件设置/清除该位,允许/关闭接收FIFO半满中断。
0:接收FIFO半满不产生中断
1:接收FIFO半满产生中断
TXFIFOHE:发送FIFO半空产生中断 (Tx FIFO half empty interrupt enable) 14
由软件设置/清除该位,允许/关闭发送FIFO半空中断。
0:发送FIFO半空不产生中断
1:发送FIFO半空产生中断
RXACTIE:正在接收数据产生中断 (Data receive acting interrupt enable) 13
由软件设置/清除该位,允许/关闭正在接收数据中断。
0:正在接收数据不产生中断
1:正在接收数据产生中断
TXACTIE:正在发送数据产生中断 (Data transmit acting interrupt enable) 12
由软件设置/清除该位,允许/关闭正在发送数据中断。
0:正在发送数据不产生中断
1:正在发送数据产生中断
CMDACTIE:正在传输命令产生中断 (Command acting interrupt enable) 11
由软件设置/清除该位,允许/关闭正在传输命令中断。
0:正在传输命令不产生中断
1:正在传输命令产生中断
DBCKENDIE:数据块传输结束产生中断 (Data block end interrupt enable) 10
由软件设置/清除该位,允许/关闭数据块传输结束中断。
0:数据块传输结束不产生中断
1:数据块传输结束产生中断
STBITERRIE:起始位错误产生中断 (Start bit error interrupt enable) 9
由软件设置/清除该位,允许/关闭起始位错误中断。
0:起始位错误不产生中断
1:起始位错误产生中断
DATAENDIE:数据传输结束产生中断 (Data end interrupt enable) 8
由软件设置/清除该位,允许/关闭数据传输结束中断。
0:数据传输结束不产生中断
1:数据传输结束产生中断
CMDSENTIE:命令已发送产生中断 (Command sent interrupt enable) 7
由软件设置/清除该位,允许/关闭命令已发送中断。
0:命令已发送不产生中断
1:命令已发送产生中断
400/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
CMDRENDIE:接收到响应产生中断 (Command response received interrupt enable) 6
由软件设置/清除该位,允许/关闭接收到响应中断。
0:接收到响应不产生中断
1:接收到响应产生中断
RXOVERRIE:接收FIFO上溢错误产生中断 (Rx FIFO overrun error interrupt enable) 5
由软件设置/清除该位,允许/关闭接收FIFO上溢错误中断。
0:接收FIFO上溢错误不产生中断
1:接收FIFO上溢错误产生中断
TXUNDERRIE:发送FIFO下溢错误产生中断 (Tx FIFO underrun error interrupt enable) 4
由软件设置/清除该位,允许/关闭发送FIFO下溢错误中断。
0:发送FIFO下溢错误不产生中断
1:发送FIFO下溢错误产生中断
DTIMEOUTIE:数据超时产生中断 (Data timeout interrupt enable) 3
由软件设置/清除该位,允许/关闭数据超时中断。
0:数据超时不产生中断
1:数据超时产生中断
CTIMEOUTIE:命令超时产生中断 (Command timeout interrupt enable) 2
由软件设置/清除该位,允许/关闭命令超时中断。
0:命令超时不产生中断
1:命令超时产生中断
DCRCFAILIE:数据块CRC检测失败产生中断 (Data CRC fail interrupt enable) 1
由软件设置/清除该位,允许/关闭数据块CRC检测失败中断。
0:数据块CRC检测失败不产生中断
1:数据块CRC检测失败产生中断
CCRCFAILIE:命令CRC检测失败产生中断 (Command CRC fail interrupt enable) 0
由软件设置/清除该位,允许/关闭命令CRC检测失败中断。
0:命令CRC检测失败不产生中断
1:命令CRC检测失败产生中断
20.9.14 SDIO FIFO计数器寄存器(SDIO_FIFOCNT)
地址偏移:0x48
复位值:0x0000 0000
SDIO_FIFOCNT寄存器包含还未写FIFO或还未从FIFO读出的数据字数目。当在数据控制寄
存器(SDIO_DCTRL)中设置了数据传输使能位DTEN,并且DPSM处于空闲状态时,FIFO计数
器从数据长度寄存器(SDIO_DLEN)加载数值。如果数据长度未与字对齐(4的倍数),则最后剩
下的1~3个字节被当成一个字处理。
313029282726252423222120191817161514131211109876543210
保留
res
FIFOCOUNT
r
31:24 保留,始终读为0
FIFOCOUNT:将要写入FIFO或将要从FIFO读出数据字的数目。 23:0
20.9.15 SDIO数据FIFO寄存器(SDIO_FIFO)
地址偏移:0x80
复位值:0x0000 0000
接收和发送FIFO32位的宽度读或写一组寄存器,它在连续的32个地址上包含32个寄存器,
CPU可以使用FIFO读写多个操作数。
401/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SDIO接口(SDIO) STM32F10xxx参考手册
313029282726252423222120191817161514131211109876543210
FIFODATA
rw
FIFODATA接收或发送FIFO数据 (Receive and transmit FIFO data) 31:0
FIFO数据占据3232位的字,地址为:
(SDIO基址 + 0x80) (SDIO基址 + 0xFC)
20.9.16 SDIO寄存器映像
下表是SDIO寄存器的总结。
152 SDIO寄存器映像
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0x00
SDIO_POWER
0x04
SDIO_CLKCR
HWFC_EN
NEGEDGE
BYPASS
PWRSAV
CLKEN
0x08
SDIO_ARG
0x0C
SDIO_CMD
CE-ATACMD
nIEN
ENCMDcompl
SDIOsuspend
CPSMEN
WAITPEND
WAITINT
0x10
SDIO_RESPCMD
0x14
SDIO_RESP1
0x18
SDIO_RESP2
0x1C
SDIO_RESP3
0x20
SDIO_RESP4
0x24
SDIO_DTIMER
0x28
SDIO_DLEN
0x2C
SDIO_DCTRL
SDIOEN
RWMOD
RWSTOP
RWSTART
DMAEN
DTMODE
DTDIR
DTEN
0x30
SDIO_DCOUNT
0x34
SDIO_STA
CEATAEND
SDIOIT
RXDAVL
TXDAVL
RXFIFOE
TXFIFOE
RXFIFOF
TXFIFOF
RXFIFOHF
TXFIFOHE
RXACT
TXACT
CMDACT
DBCKEND
STBITERR
DATAEND
CMDSENT
CMDREND
RXOVERR
TXUNDERR
DTMEOUT
CTIMEOUT
DCRCFAIL
CCRCFAIL
0x38
SDIO_ICR
CEATAENDC
SDIOITC
DBCKENDC
STBITERRC
DATAENDC
CMDSENTC
CMDRENDC
RXOVERRC
TXUNDERRC
DTMEOUTC
CTIMEOUTC
DCRCFAILC
CCRCFAILC
0x3C
SDIO_MASK
CEATAENDIE
SDIOITIE
RXDAVLIE
TXDAVLIE
RXFIFOEIE
TXFIFOEIE
RXFIFOFIE
TXFIFOFIE
RXFIFOHFIE
TXFIFOHEIE
RXACTIE
TXACTIE
CMDACTIE
DBCKENDIE
STBITERRIE
DATAENDIE
CMDSENTIE
CMDRENDIE
RXOVERRIE
TXUNDERRIE
DTMEOUTIE
CTIMEOUTIE
DCRCFAILIE
CCRCFAILIE
0x48
SDIO_FIFOCNT
0x80
SDIO_FIFO
保留
保留 FIFOCOUNT
FIFODATA
保留
保留
保留 DATACOUNT
保留
CARDSTATUS3
CARDSTATUS4
DATATIME
保留 DATALENGTH
保留
PWRCTRL
保留
WIDBUS
CLKDIV
CMDARG
保留
DBLOCKSIZE
保留
WAITRESP
CMDINDEX
RESPCMD保留
CARDSTATUS1
CARDSTATUS2
402/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
有关寄存器的起始地址,参见表1
USB全速设备接口(USB) STM32F10xxx参考手册
21 USB全速设备接口(USB)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
本章描述的模块适用于增强型STM32F103xxUSBSTM32F102xx系列。
21.1 USB简介
USB外设实现了USB2.0全速总线和APB1总线间的接口。
USB外设支持USB挂起/恢复操作,可以停止设备时钟实现低功耗。
21.2 USB主要特征
符合USB2.0全速设备的技术规范
可配置18USB端点
CRC(循环冗余校验)生成/校验,反向不归零(NRZI)编码/解码和位填充
支持同步传输
支持批量/同步端点的双缓冲区机制
支持USB挂起/恢复操作
帧锁定时钟脉冲生成
注:
USB
CAN
共用一个专用的
512
字节的
SRAM
存储器用于数据的发送和接收,因此不能同时使用
USB
CAN(
共享的
SRAM
USB
CAN
模块互斥地访问
)
USB
CAN
可以同时用于一个应用
中但不能在同一个时间使用。
下图是USB外设的方框图
403/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
192 USB设备框图
21.3 USB功能描述
USB模块为PC主机和微控制器所实现的功能之间提供了符合USB规范的通信连接。PC主机和
微控制器之间的数据传输是通过共享一专用的数据缓冲区来完成的,该数据缓冲区能被USB
设直接访问。这块专用数据缓冲区的大小由所使用的端点数目和每个端点最大的数据分组大小
所决定,每个端点最大可使用512字节缓冲区,最多可用于16个单向或8个双向端点。USB模块
PC主机通信,根据USB规范实现令牌分组的检测,数据发送/接收的处理,和握手分组的处
理。整个传输的格式由硬件完成,其中包括CRC的生成和校验。
每个端点都有一个缓冲区描述块,描述该端点使用的缓冲区地址、大小和需要传输的字节数。
USB模块识别出一个有效的功能/端点的令牌分组时,(如果需要传输数据并且端点已配置)
之发生相关的数据传输。USB模块通过一个内部的16位寄存器实现端口与专用缓冲区的数据交
换。在所有的数据传输完成后,如果需要,则根据传输的方向,发送或接收适当的握手分组。
在数据传输结束时,USB模块将触发与端点相关的中断,通过读状态寄存器和/或者利用不同的
中断处理程序,微控制器可以确定:
哪个端点需要得到服务
404/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
产生如位填充、格式、CRC、协议、缺失ACK、缓冲区溢出/缓冲区未满等错误时,正在进
行的是哪种类型的传输。
USB模块对同步传输和高吞吐量的批量传输提供了特殊的双缓冲区机制,在微控制器使用一
缓冲区的时候,该机制保证了USB外设总是可以使用另一个缓冲区。
在任何不需要使用USB模块的时候,通过写控制寄存器总可以使USB模块置于低功耗模式
(SUSPEND模式)。在这种模式下,不产生任何静态电流消耗,同时USB时钟也会减慢或停止。
通过对USB线上数据传输的检测,可以在低功耗模式下唤醒USB模块。也可以将一特定的中断
输入源直接连接到唤醒引脚上,以使系统能立即恢复正常的时钟系统,并支持直接启动或停止
时钟系统。
21.3.1 USB功能模块描述
USB模块实现了标准USB接口的所有特性,它由以下部分组成:
串行接口控制器(SIE):该模块包括的功能有:帧头同步域的识别,位填充,CRC的产生和
校验,PID的验证/产生,和握手分组处理等。它与USB收发器交互,利用分组缓冲接口提
供的虚拟缓冲区存储局部数据。它也根据USB事件,和类似于传输结束或一个包正确接收
等与端点相关事件生成信号,例如帧首(Start of Frame)USB复位,数据错误等等,这些
信号用来产生中断。
定时器:本模块的功能是产生一个与帧开始报文同步的时钟脉冲,并在3ms内没有数据传输
的状态,检测出(主机的)全局挂起条件。
分组缓冲器接口:此模块管理那些用于发送和接收的临时本地内存单元。它根据SIE的要求
分配合适的缓冲区,并定位到端点寄存器所指向的存储区地址。它在每个字节传输后,自
动递增地址,直到数据分组传输结束。它记录传输的字节数并防止缓冲区溢出。
端点相关寄存器:每个端点都有一个与之相关的寄存器,用于描述端点类型和当前状态。
对于单向和单缓冲器端点,一个寄存器就可以用于实现两个不同的端点。一共8个寄存器,
可以用于实现最多16个单向/单缓冲的端点或者7个双缓冲的端点或者这些端点的组合。例
如,可以同时实现4个双缓冲端点和8个单缓冲/单向端点。
控制寄存器:这些寄存器包含整个USB模块的状态信息,用来触发诸如恢复,低功耗等
USB事件。
中断寄存器:这些寄存器包含中断屏蔽信息和中断事件的记录信息。配置和访问这些寄存
器可以获取中断源,中断状态等信息,并能清除待处理中断的状态标志。
注意:
端点
0
总是作为单缓冲模式下的控制端点。
USB模块通过APB1接口部件与APB1总线相连,APB1接口部件包括以下部分:
分组缓冲区:数据分组缓存在分组缓冲区中,它由分组缓冲接口控制并创建数据结构。应
用软件可以直接访问该缓冲区。它的大小为512字节,由25616位的字构成。
仲裁器:该部件负责处理来自APB1总线和USB接口的存储器请求。它通过向APB1提供较
高的访问优先权来解决总线的冲突,并且总是保留一半的存储器带宽供USB完成传输。它
采用时分复用的策略实现了虚拟的双端口SRAM,即在USB传输的同时,允许应用程序访问
存储器。此策略也允许任意长度的多字节APB1传输。
寄存器映射单元:此部件将USB模块的各种字节宽度和位宽度的寄存器映射成能被APB1
址的16位宽度的内存集合。
APB1封装:此部件为缓冲区和寄存器提供了到APB1的接口,并将整个USB模块映射到
APB1地址空间。
中断映射单元:将可能产生中断的USB事件映射到三个不同的NVIC请求线上:
USB低优先级中断(通道20):可由所有USB事件触发(正确传输,USB复位等)。固件在处
理中断前应当首先确定中断源。
USB高优先级中断(通道19):仅能由同步和双缓冲批量传输的正确传输事件触发,目的是
保证最大的传输速率。
USB唤醒中断(通道42):由USB挂起模式的唤醒事件触发。
405/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
21.4 编程中需要考虑的问题
在下面的章节中,将介绍USB模块和应用程序之间的交互过程,有利于简化应用程序的开发。
21.4.1 通用USB设备编程
这一部分描述了实现USB设备功能的应用程序需要完成的任务。除了介绍一般的USB事件中应
该采取的操作外,还着重介绍了双缓冲端点和同步传输的操作。这些相关的操作都是由USB
块初始化,并由以下几节所描述的USB事件所驱动。
21.4.2 系统复位和上电复位
发生系统复位或者上电复位时,应用程序首先需要做的是提供USB模块所需要的时钟信号,然
后清除复位信号,使程序可以访问USB模块的寄存器。复位之后的初始化流程如下所述:
首先,由应用程序激活寄存器单元的时钟,再配置设备时钟管理逻辑单元的相关控制位,清除
复位信号。
其次,必须配置CNTR寄存器的PDWN位用以开启USB收发器相关的模拟部分,这点需要特别
的处理。此位能打开为端点收发器供电的内部参照电压。由于打开内部电压需要一段启动时间
(数据手册中的tSTARTUP),在此期间内USB收发器处于不确定状态,所以在设置CNTR寄存器的
PDWN后必需等待一段时间之后,才能清除USB模块的复位信号(清除CNTR寄存器上的FRES
),和ISTR寄存器的内容,以便在使能其他任何单元的操作之前清除未处理的假中断标志。
最后,应用程序需要通过配置设备时钟管理逻辑的相应控制位来为USB模块提供标准所定义的
48MHz时钟。
当系统复位时,应用程序应该初始化所有需要的寄存器和分组缓冲区描述表,使USB模块能够
产生正常的中断和完成数据传输。所有与端点无关的寄存器需要根据应用的需求进行初始化(
如中断使能的选择,分组缓冲区地址的选择等)。接下来按照USB复位处理(参见下段)
USB复位(RESET中断)
发生USB位时,USB模块进入前面章节中描述过的系统复位状态:所有端点的通信都被禁止
(USB模块不会响应任何分组)。在USB复位后,USB模块被使能,同时地址为0的默认控制端点
(端点0)也需要被使能。这可以通过配置USB_DADDR寄存器的EF位,EP0R寄存器和相关的分
组缓冲区来实现。在USB设备的枚举阶段,主机将分配给设备一个唯一的地址,这个地址必须
写入USB_DADDR寄存器的ADD[6:0]位中,同时配置其他所需的端点。
当复位中断产生时,应用程序必需在中断产生后的10ms之内使能端点0的传输。
分组缓冲区的结构和用途
每个双向端点都可以接收或发送数据。接收到的数据存储在该端点指定的专用缓冲区内,而另
一个缓冲区则用于存放待发送的数据。对这些缓冲区的访问由分组缓冲区接口模块实现,它提
出缓冲区访问请求,并等待确认信息后返回。为防止产生微控制器与USB模块对缓冲区的访问
冲突,缓冲区接口模块使用仲裁机制,使APB1总线的一半周期用于微控制器的访问,另一半
USB模块的访问。这样,微控制器和USB模块对分组缓冲区的访问如同对一个双端口SRAM
的访问,即使微控制器连续访问缓冲区,也不会产生访问冲突。
USB模块使用固定的时钟,此时钟被USB标准定义为48MHzAPB1总线的时钟可以大于或者小
于这个频率。
注意:
为满足
USB
数据传输率和分组缓冲区接口的系统需求,
APB1
总线时钟的频率必须大于
8MHz
以避免数据缓冲区溢出或不满
每个端点对应于两个分组缓冲区(一般一个用于发送,另一个用于接收)。这些缓冲区可以位于整
个分组存储区的任意位置,因为它们的地址和长度都定义在缓冲区描述表中,而缓冲区描述表
也同样位于分组缓冲区中,其地址由寄存器确定。
缓冲区描述表的每个表项都关联到一个端点寄存器,它由416位的字组成,因此缓冲区描述表
的起始地址按8字节对齐(寄存器的最低3位总是’000’)。第21.5.3节详细介绍缓冲区描述表表项。
如果是非同步非双缓冲的单向端点,只需要一个分组缓冲区(即发送方向上的分组缓冲区)
406/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
其他未用到的端点或某个未使用的方向上的缓冲区描述表项可以用于其他用途。同步和双缓冲
批量端点有特殊的分组缓冲区处理方法(请分别参考第21.4.4
407/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
节:同步传输和第21.4.3节:双缓
冲端点)。下图描述了缓冲区描述表项和分组缓冲区区域的关系。
193 分组缓冲区对应的缓冲区描述表项定位
不管是接收还是发送,分组缓冲区都是从底部开始使用的。USB模块不会改变超出当前分配
的缓冲区区域以外的其他缓冲区的内容。如果缓冲区收到一个比自己大的数据分组,它只会接
收最大为自身大小的数据,其他的丢掉,即发生了所谓的缓冲区溢出异常。
端点初始化
初始化端点的第一步是把适当的值写到ADDRn_TXADDRn_RX寄存器中,以便USB模块能找
到要传输的数据或准备好接收数据的缓冲区。USB_EpnR存器的EP_TYPE位确定端点的基本
类型,EP_KIND位确定端点的特殊特性。作为发送方,需要设置USB_EpnR寄存器的STAT_TX
位来使能端点,并配置COUNTn_TX位决定发送长度。作为接收方,需要设置STAT_RX位来使
能端点,并且设置BL_SIZENUM_BLOCK位,确定接收缓冲区的大小,以检测缓冲区溢出的
异常。对于非同步非双缓冲批量传输的单向端点,只需要设置一个传输方向上的寄存器。一旦
端点被使能,应用程序就不能再修改USB_EpnR 寄存器的值和ADDRn_TX / ADDRn_RX,
COUNTn_TX / COUNTn_RX所在的位置,因为这些值会被硬件实时修改。当数据传输完成时,
CTR中断会产生,此时上述寄存器可以被访问,并重新使能新的传输。
IN分组(用于数据发送)
当接收到一IN令牌分组时,如果接收到的地址和一个配置好的端点地址相符合的话,USB模块
将会根据缓冲区描述表的表项,访问相应的ADDRn_TXCOUNTn_TX寄存器,并将这些寄存
器中的数值存储到内部的16位寄存器ADDRCOUNT(应用程序无法访问)中。此时,USB模块
开始根据DTOG_TX位发送DATA0DATA1分组,并访问缓冲区(请参考分组缓冲区的结构和用
段落)。在IN分组传输完毕之后,从缓冲区读到的第一个字节将被装载到输出移位寄存器中,
并开始发送。最后一个数据字节发送完成之后,计算好的CRC将被发送。如果收到的分组所对
USB全速设备接口(USB) STM32F10xxx参考手册
应的端点是无效的,将根据USB_EpnR寄存器上的STAT_TX位发送NAKSTALL握手分组而不
发送数据。
ADDR内部寄存器被用作当前缓冲区的指针,COUNT寄存器用于记录剩下未传输的字节数。
USB总线使用低字节在先的方式传输从缓冲区中读出的数据。数据从ADDRn_TX指向的数据分
组缓冲区开始读取,长度为COUNTn_TX/2个字。如果发送的数据分组为奇数个字节,则只使用
最后一个字的低8位。
在接收到主机响应的ACK后,USB_EpnR寄存器的值有以下更新:DTOG_TX位被翻转,
STAT_TX位为’10’,使端点无效,CTR_TX位被置位。应用程序需要通过USB_ISTR寄存器的
EP_IDDIR位识别产生中断的USB端点。CTR_TX事件的中断服务程序需要首先清除中断标志
位,然后准备好需要发送的数据缓冲区,更新COUNTn_TX为下次需要传输的字节数,最后
设置STAT_TX位为’11’(端点有效),再次使能数据传输。当STAT_TX位为’10’(端点为NAK
),任何发送到该端点IN请求都会被NAKUSB主机会重发IN请求直到该端点确认请求有
效。上述操作过程是必需遵守的,以避免丢失紧随上一次CTR中断请求的下一个IN传输请求。
OUT分组和SETUP分组(用于数据接收)
USB模块对这两种分组的处理方式基本相同;对SETUP分组的特殊处理将在下面关于控制传输
部分详细说明。当接收到一个OUTSETUP 分组时,如果地址和某个有效端点的地址相匹配,
USB模块将访问缓冲区描述表,找到与该端点相关的ADDRn_RXCOUNTn_RX寄存器,并将
ADDRn_RX 寄存器的值保存在内部ADDR 寄存器中。同时,COUNT 会被被复位,从
COUNTn_RX 中读出的BL_SIZE NUM_BLOCK 的值用于初始化内部16 位寄存器
BUF_COUNT,该寄存器用于检测缓冲区溢出(所有的内部寄存器都不能被应用程序访问)USB
模块将随后收到的数据按字方式组织(先收到的为低字节),并存储到ADDR指向的分组缓冲区
中。同时,BUF_COUNT值自动递减,COUNT值自动递增。当检测到数据分组的结束信号时,
USB模块校验收到CRC的正确性。如果传输中没有任何错误发生,则发送ACK握手分组到主
机。即使发生CRC错误或者其他类型的错误(位填充,帧错误等),数据还是会被保存到分组缓冲
区中,至少会保存到发生错误的数据点,只是不会发送ACK分组,并且USB_ISTR寄存器的
ERR位将会置位。在这种情况下,应用程序通常不需要干涉处理,USB模块将从传输错误中自
动恢复,并为下一次传输做好准备。如果收到的分组所对应的端点没有准备好,USB模块将根
USB_EpnR寄存器的STAT_RX位发送NAKSTALL分组,数据将不会被写入接收缓冲区。
ADDRn_RX的值决定接收缓冲区的起始地址,长度由包含CRC的数据分组的长度(即有效数据长
+2)决定,但不能超过BL_SIZENUM_BLOCK所定义的缓冲区的长度。如果接收到的数据分
组的长度超出了缓冲区的范围,超过范围的数据不会被写入缓冲区,USB模块将报告缓冲区发
生溢出,并向主机发送STALL握手分组,通知此次传输失败,也不产生中断。
如果传输正确完成,USB模块将发送ACK握手分组,内部的COUNT寄存器的值会被复制到相应
COUNTn_RX 寄存器中,BL_SIZE NUM_BLOCK 的值保持不变,也不需要重写。
USB_EpnR寄存器按下列方式更新:DTOG_RX位翻转,STAT_RX=10(NAK)使端点无效,
CTR_RX位置位(如果CTR中断已使能,将触发中断)。如果传输过程中发生了错误或者缓冲区溢
出,前面所列出的动作都不会发生。CRT中断发生时,应用程序需要首先根据USB_ISTR寄存
器的EP_IDDIR位识别是哪个端点的中断请求。在处理CTR_RX中断事件时,应用程序首先要
确定传输的类型(根据USB_EPnR寄存器的SETUP),同时清除中断标志位,然后读相关的缓
冲区描述表表项指向的COUNTn_RX寄存器,获得此次传输的总字节数。处理完接收到的数据
后,应用程序需要将USB_EpnR中的STAT_RX位置成’11’,使能下一次的的传输。当STAT_RX
位为’10’(NAK),任何一个发送到端点上的OUT请求都会被NAKPC主机将不断重发被NAK
的分组,直到收到端点ACK握手分组。以上描述的操作次序是必需遵守的,以避免丢失紧随
上一个CTR中断的另一个OUT分组请求。
控制传输
控制传输由3个阶段组成,首先是主机发送SETUP分组的SETUP阶段,然后是主机发送零个或
多个数据的数据阶段,最后是状态阶段,由与数据阶段方向相反的数据分组构成SETUP传输
只发生在控制端点,它非常类似于OUT分组的传输过程。使能SETUP传输除了需要分别初始化
DTOG_TX位为’1’DTOG_RX位为’0’外,还需要设置STAT_TX位和STAT_RX位为10(NAK)
由应用程序根据SETUP分组的相应字段决定后面的传输是IN还是OUT。控制端点在每次发生
408/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
CTR_RX断时,都必须检查USB_EpnR寄存器的SETUP位,以识别是普通的OUT分组还是
SETUP分组。USB设备应该能够通过SETUP分组中的相应数据决定数据阶段传输的字节数和
向,并且能在发生错误的情况下发送STALL分组,拒绝数据的传输。因此在数据阶段,未被使
用到的方向都应该被设置成STALL,并且在开始传输数据阶段的最后一个数据分组时,其反方
向的传输仍设成NAK状态,这样,即使主机立刻改变了传输方向(入状态阶段),仍然可以保持
为等待控制传输结束的状态。在控制传输成功结束后,应用程序可以把NAK变为VALD,如果控
制传输出错,就改为STALL。此时,如果状态分组是由主机发送给设备的,那么STATUS_OUT
(USB_EPnR寄存器中的EP_KIND)应该被置位,只有这样,在状态传输过程中收到了非零长
度的数据分组,才会产生传输错误。在完成状态传输阶段后,应用程序应该清除STATUS_OUT
位,并且将STAT_RX设为VALID表示已准备好接收一个新的命令请求,STAT_TX则设为NAK
表示在下一个SETUP分组传输完成前,不接受数据传输的请求。
USB规范定义SETUP分组不能以非ACK握手分组来响应,如果SETUP分组传输失败,则会引发
下一个SETUP分组。因此,以NAKSTALL分组响应主机的SETUP分组是被禁止的。
STAT_RX位被设置为’01’(STALL)’10’(NAK)时,如果收到SETUP分组USB模块会接收分
组,开始分组所要求的数据传输,并回送ACK握手分组。如果应用程序在处理前一个CTR_RX
事件时USB模块又收到了SETUP分组(CTR_RX仍然保持置位)USB模块会丢掉收到的
SETUP分组,并且不回答任何握手分组,以此来模拟一个接收错误,迫使主机再次发送SETUP
分组。这样做是为了避免丢失紧随一次CTR_RX中断之后的又一个SETUP分组传输。
21.4.3 双缓冲端点
USB标准不仅为不同的传输模式定义了不同的端点类型,而且对这些数据传输所需要的系统
求做了描述。其中,批量端点适用于在主机PCUSB设备之间传输大批量的数据,因为主机
以在一帧内利用尽可能多的带宽批量传输数据,使传输效率得到提高。然而,当USB设备处理
前一次的数据传输时,又收到新的数据分组,它将回应NAK分组,使PC主机不断重发同样的数
据分组,直到设备在可以处理数据时回应ACK分组。这样的重传占用了很多带宽,影响了批量
传输的速率,因此引入了批量端点的双缓冲机制,提高数据传输率。
使用双缓冲机制时,单向端点的数据传输将使用到该端点的接收和发送两块数据缓冲区。数据
翻转位用来选择当前使用到两块缓冲区中的哪一块,使应用程序可以USB模块访问其中一块
缓冲区的同时,对另一块缓冲区进行操作。例如,对一个双缓冲批量端点进行OUT分组传输
时,USB模块将来自PC主机的数据保存到一个缓冲区,同时应用程序可以对另一个缓冲区中
数据进行处理(对于IN分组来说,情况是一样的)
因为切换缓冲区的管理机制需要用到所有4个缓冲区描述表的表项,分别用来表示每个方向上的
两个缓冲区的地址指针和缓冲区大小,因此用来实现双缓冲批量端点USB_EpnR寄存器必需
配置为单向。所以只需要设定STAT_RX(作为双缓冲批量接收端点)或者STAT_TX(作为双
缓冲批量发送端点)。如果需要一个双向的双缓冲批量端点,则须使用两个USB_EpnR寄存器。
为尽可能利用双缓冲的优势,达到较高的传输速率,双缓冲批量端点的流量控制流程与其他端
点的稍有不同。它只在缓冲区发生访问冲突时才会设置端点为NAK状态,而不是在每次传输成
功后都将端点设为NAK状态。
DTOG位用来标识USB模块当前所使用的储存缓冲区。双缓冲批量端点接收方向的缓冲区由
DTOG_RX(USB_EpnR 寄存器的第14 )标识,而双缓冲批量端点发送方向的缓冲区由
DTOG_TX(USB_EpnR存器的第6)标识。同时,USB模块也需要知道当前哪个缓冲区正在
被应用程序使用,以避免发生冲突。由于USB_EpnR寄存器中有2DTOG位,而USB模块只使
用其中的一位来标识硬件所使用的缓冲区,因此,应用程序可使用另一位来标识当前正在使用
哪个缓冲区,这个新的标识被称为SW_BUF位。下表列出了双缓冲批量端点在实现发送和接收
操作时,USB_EPNR寄存器的DTOG位和SW_BUF位之间的关系。
153 双缓冲批量端点缓冲区标识定义
缓冲区标识位 作为发送端 作为接收端点
DTOG DTOG_TX(USB_EPnR寄存器的第6) DTOG_RX(USB_EPnR寄存器的第14)
SW_BUF USB_EPnR寄存器的第14 USB_EPnR存器的第6
409/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
USB模块当前使用的缓冲区由DTOG位标识,而应用程序所使用的缓冲区由SW_BUF位标识,
这两个位的标识方式相同,下表描述了这种标识方式。
154 双缓冲批量端点的缓冲区使用标识
DTOG
SW_BUF
端点类型 USB模块使用的缓冲区 应用程序使用的缓冲区
0 1 ADDRn_TX_0 / COUNTn_TX_0 ADDRn_TX_1 / COUNTn_TX_1
1 0 ADDRn_TX_1 / COUNTn_TX_1 ADDRn_TX_0 / COUNTn_TX_0
410/754
0 0 (1) ADDRn_TX_0 / COUNTn_TX_0
IN端点
(1) ADDRn_TX_0 / COUNTn_TX_0
1 1
0 1 ADDRn_RX_0 / COUNTn_RX_0 ADDRn_RX_1 / COUNTn_RX_1
1 0 ADDRn_RX_1 / COUNTn_RX_1 ADDRn_RX_0 / COUNTn_RX_0
0 0 (1) ADDRn_RX_0 / COUNTn_RX_0
OUT端点
(1) ADDRn_RX_0 / COUNTn_RX_0
1 1
1. 端点处于NAK状态
可以通过以下方式设置一个双缓冲批量端点:
USB_EPnR寄存器的EP_TYPE位设为’00’,定义端点为批量端点
USB_EPnR寄存器的EP_KIND位设为’1’,定义端点为双缓冲端点
应用程序根据传输开始时用到的缓冲区来初始化DTOGSW_BUF位;这需要考虑到这两位的
数据翻转特性。设置好DBL_BUF位之后,每完成一次传输后,USB模块将根据双缓冲批量端点
的流量控制操作,并且持续到DBL_BUF变为无效为止。每次传输结束,根据端点的传输方向,
CTR_RX位或CTR_TX位将会置为’1’。与此同时,硬件将设置相应的DTOG位,完全独立于软件
来实现缓冲区交换机制。DBL_BUF位设置后,每次传输结束时,双缓冲批量端点的STAT位的
取值不会像其他类型端点一样受到传输过程的影响,而是一直保持为’11’(有效)。但是,如果在
收到新的数据分组的传输请求时,USB模块和应用程序发生了缓冲区访问冲突(DTOG
SW_BUF为相同的值,见154),状态位将会被置为’10’(NAK)。应用程序响应CTR中断时,首
先要清除中断标志,然后再处理传输完成的数据。应用程序访问缓冲区之后,需要翻转
SW_BUF位,以通知USB模块该块缓冲区已变为可用状态。由此,双缓冲批量传输的NAK分组
的数目只由应用程序处理一次数据传输的快慢所决定:如果数据处理的时间小于USB总线上完
成一次数据传输的时间,则不会发生重传,此时,数据的传输率仅受限于USB主机。
应用程序也可以不考虑双缓冲批量端点的特殊控制流程,直接在相应USB_EPnR寄存器的STAT
位写入非’11’的任何状态,在这种情况下,USB模块将按照写入的状态执行流程而忽略缓冲器实
际的使用情况。
21.4.4 同步传输
USB标准定义了一种全速的需要保持固定和精确的数据传输率的传输方式:同步传输。同步
输一般用于传输音频流、压缩的视频流等对数据传输率有严格要求的数据。一个端点如果在枚
举时被定义为“同步端点”,USB主机则会为每个帧分配固定的带宽,并且保证每个帧正好传
送一个IN分组或者OUT分组(由端点传输方向确定分组类型)。为了满足带宽要求,同步传输中没
有出错重传;这也就意味着,同步传输在发送或接收数据分组之后,无握手协议,即不会发送
ACK分组。同样,同步传输只传送PID(分组ID)DATA0的数据包, 而不会用到数据翻转机制。
通过设置USB_EPnR寄存器EP_TYPE’10’,可以使其成为同步端点。同步端点没有握手机
制,根据USB标准中的说明,USB_EPnR寄存器的STAT_RX位和STAT_TX位分别只能设成’00’
(禁止)’11’(有效)。同步传输通过实现双缓冲机制来简化软件应用程序开发,它同样使用两个
缓冲区,以确保在USB模块使用其中一块缓冲区时,应用程序可以访问另外一块缓冲区。
USB模块使用的缓冲区根据不同的传输方向,由不同的DTOG位来标识。(同一寄存器中的
DTOG_RX位用来标识接收同步端点,DTOG_TX位用来标识发送同步端点),见下表。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
155 同步端点的缓冲区使用标识
端点类型 DTOG位值 USB模块使用的缓冲区 应用程序使用的缓冲区
0 ADDRn_TX_0 / COUNTn_TX_0 ADDRn_TX_1 / COUNTn_TX_1
IN端点 1 ADDRn_TX_1 / COUNTn_TX_1 ADDRn_TX_0 / COUNTn_TX_0
0 ADDRn_RX_0 / COUNTn_RX_0 ADDRn_RX_1 / COUNTn_RX_1
OUT端点 1 ADDRn_RX_1 / COUNTn_RX_1 ADDRn_RX_0 / COUNTn_RX_0
与双缓冲批量端点一样,一个USB_EPnR寄存器只能处理同步端点单方向的数据传输,如果要
求同步端点在两个传输方向上都有效,则需要使用两个USB_EPnR寄存器。
应用程序需要根据首次传输的数据分组来初始DTOG位;它的取值还需要考虑到DTOG_RX
DTOG_TX两位的数据翻转特性。每次传输完成时,USB_EPnR寄存器的CTR_RX位或CTR_TX
位置位。与此同时,相关的DTOG位由硬件翻转,从而使得交换缓冲区的操作完全独立于应用
程序。传输结束时,STAT_RXSTAT_TX位不会发生变化,因为同步传输没有握手机制,所
以不需要任何流量控制,而一直设为’11’(有效)。同步传输中,即使OUT分组发生CRC错误或者
缓冲区溢出,本次传输仍被看作是正确的,并且可以触CTR_RX中断事件;但是,发生CRC
错误时硬件会设置USB_ISTR寄存器的ERR位,提醒应用程序数据可能损坏。
21.4.5 挂起/恢复事件
USB标准中定义了一种特殊的设备状态,即挂起状态,在这种状态下USB总线上的平均电流消
耗不超过500uA。这种电流限制对于由总线供电USB设备至关重要,而自供电的设备则不需
要严格遵守这样的电流消耗限制。USB主机以3毫秒内不发送任何信号标志进入挂起状态。通常
情况下USB主机每毫秒会发送一SOF,当USB模块检测到3个连续的SOF分组丢失事件即可判
定主机发出了挂起请求,接着它会置位SB_ISTR寄存器的SUSP位,以触发挂起中断。USB
备进入挂起状态之后,将由“唤醒”序列唤醒。所谓的“唤醒”序列, 可以由USB主机发起,也
可以由USB设备本身触发;但是,只有USB主机可以结束“唤醒”序列。被挂起USB模块必
须至少还具备检测RESET信号的功能,它会将其当作一次正常的复位操作来执行。
实际的挂起操作过程对于不同的USB设备来说是不同的,因为需要不同的操作来降低电源消
耗。下面描述了一起典型的挂起操作,重点介绍应用程序如何响应USB模块的SUSP信号。
1. USB_CNTR寄存器的FSUSP置为’1’,这将使USB模块进入挂起状态。USB模块一旦
进入挂起状态,对SOF的检测立刻停止,以避免在USB挂起时又发生新的SUSP事件。
2. 消除或减少USB模块以外的其他模块的静态电流消耗。
3. USB_CNTR寄存器的LP_MODE位置为’1’,这将消除模拟USB收发器的静态电流消
耗,但仍能检测到唤醒信号。
4. 可以选择关闭外部振荡器和设备的PLL,以停止设备内部的任何活动。
当设备处于挂起状态时发生USB事件,该设备会被唤醒,并需要调用“唤醒”例程来恢复系统
时钟,和USB数据传输。如果唤醒设备的是USB复位操作,则应该保证唤醒的过程不要超过10
毫秒(参见“USB 协议规范”)USB 模块处于挂起状态时,唤醒或复位事件需要清除
USB_CNTR寄存器的LP_MODE位。即使唤醒事件可以立刻触发一个WKUP中断事件,但由于
恢复系统时钟需要比较长的延迟时间,处理WKUP中断的中断服务程序必须非常小心;为了减
短系统唤醒的时间,建议将唤醒代码直接写在挂起代码后面,这样就可以在系统时钟重启后迅
速进入唤醒代码中执行。为防止或减少ESD等干扰意外地唤醒系统(从挂起模式退出是一个异步
事件),在挂起过程中数据线被过滤,滤波宽度大约为70nS
下面是唤醒操作的过程:
启动外部振荡器和设备的PLL(此项可选)
1. 清零USB_CNTR寄存器的FSUSP位。
2. USB_FNR寄存器的RXDPRXDM位可以用来判断是什么触发了唤醒事件,如156
示,它还同时列出了各种情况软件应该采取的操作。如果需要的话,可以通过检测这两
位变成’10’(代表空闲总线状态)的时间来知道唤醒或复位事件的结束。此外,在复位事件
411/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
结束时,USB_ISTR寄存器的RESET位被置为’1’,如果RESET中断被使能,就会产生
断。此中断应该按正常的复位操作处理。
156 唤醒事件检测
[RXDPRXDM]的状态 唤醒事件 应用程序应执行的操作
00 复位
10 (总线干扰) 恢复到挂起状态
01 恢复挂起
11 未定义的值(总线干扰) 恢复到挂起状态
设备可能不是被与USB模块相关的事件唤醒的(例如一个鼠标的移动可唤醒整个系统)。在这种情
况下,先将USB_CNTR寄存器的RESUME位置为’1’,然后在1ms15ms之间再把它清为0可以
启动唤醒序列(这个间隔可以用ESOF中断来实现,该中断在内核正常运行时每1ms发生一次)
RESUME位被清零后,唤醒过程将由主机PC完成,可以利用USB_FNR寄存器的RXDP
RXDM位来判断唤醒是否完成。
注意:
只有在
USB
模块被设置为挂起状态时
(
设置
USB_CNTR
寄存器的
FSUSP
位为
’1’)
,才可以设置
RESUME
位。
21.5 USB寄存器描述
USB模块的寄存器有以下三类:
通用类寄存器:中断寄存器和控制寄存器
端点类寄存器:端点配置寄存器和状态寄存器
缓冲区描述表类寄存器:用来确定数据分组存放地址的寄存器
缓冲区描述表类寄存器的基地址由USB_BTABLE寄存器指定,所有其他寄存器的基地址则为
USB模块的基地址0x4000 5C00。由于APB1总线按32位寻址,因此所有的16位寄存器的地址都
是按32位字对齐的。同样的地址对齐方式也用于从0x4000 6000开始的分组缓冲存储区。
1.1节。 关于寄存器描述中使用的一些缩略语,请参考第
可以用半字(16)或字(32)的方式操作这些外设寄存器。
21.5.1 通用寄存器
这组寄存器用于定义USB模块的工作模式,中断的处理,设备的地址和读取当前帧的编号。
USB控制寄存器(USB_CNTR)
地址偏移:0x40
复位值:0x0003
1514131211109876543210
CTRM PMA
OVRM ERRM WKUPM SUSPM RESETM SOFM ESOFM RESUME FSUSP LP
MODE PDMN FRES
rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
CTRM:正确传输(CTR)中断屏蔽位 (Correct transfer interrupt mask) 15
0:正确传输(CTR)中断禁止
1:正确传输(CTR)中断使能,在中断寄存器的相应位被置1时产生中断。
PMAOVRM:分组缓冲区溢出中断屏蔽位 (Packet memory area over / underrun interrupt
mask)
14
0PMAOVR中断禁止
1PMAOVR中断使能,在中断寄存器的相应位被置1时产生中断。
ERRM:出错中断屏蔽位 (Error interrupt mask) 13
0:出错中断禁止
1:出错中断使能,在中断寄存器的相应位被置1时产生中断。
412/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
WKUPM:唤醒中断屏蔽位 (Wakeup interrupt mask) 12
0:唤醒中断禁止
1:唤醒中断使能,在中断寄存器的相应位被置1时产生中断。
SUSPM:挂起中断屏蔽位 (Suspend mode interrupt mask) 11
0:挂起(SUSP)中断禁止
1:挂起(SUSP)中断使能,在中断寄存器的相应位被置1时产生中断。
RESETMUSB复位中断屏蔽位 (USB reset interrupt mask) 10
0USB RESET中断禁止
1USB RESET中断使能,在中断寄存器的相应位被置1时产生中断。
SOFM:帧首中断屏蔽位 (Start of frame interrupt mask) 9
0SOF中断禁止
1SOF中断使能,在中断寄存器的相应位被置1时产生中断。
ESOFM:期望帧首中断屏蔽位 (Expected start of frame interrupt mask) 8
0ESOF中断禁止
1ESOF中断使能,在中断寄存器的相应位被置1时产生中断。
RESUME:唤醒请求 (Resume request) 4
设置此位将向PC主机发送唤醒请求。根据USB协议,如果此位在1ms15ms内保持有效,主
机将对USB模块实行唤醒操作。
FSUSP:强制挂起 (Force suspend) 3
USB总线上保持3ms没有数据通信时,SUSP中断会被触发,此时软件必需设置此位。
0:无效
1:进入挂起模式,USB模拟收发器的时钟和静态功耗仍然保持。如果需要进入低功耗状态(
线供电类的设备),应用程序需要先置位FSUSP再置位LP_MODE
LP_MODE:低功耗模式 (Low-power mode) 2
此模式用于在USB挂起状态下降低功耗。在此模式下,除了外接上拉电阻的供电,其他的静态
功耗都被关闭,系统时钟将会停止或者降低到一定的频率来减少耗电。USB总线上的活动(唤醒
事件)将会复位此位(软件也可以复位此位)
0:非低功耗模式
1:低功耗模式
PDWN:断电模式 (Power down) 1
此模式用于彻底关闭USB模块。当此位被置位时,不能使用USB模块。
0:退出断电模式
1:进入断电模式
FRES:强制USB复位 (Force USB Reset) 0
0:清除USB复位信号
1:对USB模块强制复位,类似于USB总线上的复位信号。USB模块将一直保持在复位状态下
直到软件清除此位。如果USB复位中断被使能,将产生一个复位中断。
USB中断状态寄存器(USB_ISTR)
地址偏移:0x44
复位值:0x0000
1514131211109876543210
CTR PMA
OVR ERR WKUP SUSP RESET SOF ESOF DIR
rrcw0rcw0rcw0rcw0rcw0rcw0rcw0 res rrrrr
保留 EP_ID[3:0]
此寄存器包含所有中断源的状态信息,以供应用程序确认产生中断请求的事件。
寄存器的高8位各表示一个中断源。当相关事件发生时,这些位被硬件置位,如果USB_CNTR
寄存器上的相应位也被置位,则会产生相应的中断。中断服务程序需要检查每个位,在执行必
要的操作后必需清除相应的状态位,不然中断信号线一直保持为高,同样的中断会再次被
发。如果同时多个中断标志被设置,也只会产生一个中断。
413/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
应用程序可以使用不同的方式处理传输完成中断,以减少中断响应的延迟时间。端点在成功完
成一次传输后,CTR位会被硬件置起,如果USB_CNTR上的相应位也被设置的话,就会产生中
断。与端点相关的中断标志和USB_CNTR寄存器的CTRM位无关。这两个中断标志位将一直保
持有效,直到应用程序清除了USB_EpnR寄存器中的相关中断挂起位(CTR位是个只读位)
USB模块有两路中断请求源:
高优先级的USB IRQ:用于高优先级的端点(同步和双缓冲批量端点)的中断请求,并且该中断不
能被屏蔽。
低优先级USB IRQ:用于其他中断事件,可以是低优先级的不可屏蔽中断,也可以是由
USB_ISTR寄存器的高8位标识的可屏蔽中断。
对于端点产生的中断,应用程序可以通过DIR寄存器和EP_ID只读位来识别中断请求由哪个端点
产生,并调用相应的中断服务程序。
用户在处理同时发生的多个中断事件时,可以在中断服务程序里检查USB_ISTR寄存器各个位
的顺序来确定这些事件的优先级。在处理完相应位的中断后需要清零该中断标志。完成一次中
断服务后,另一中断请求将会产生,用以请求处理剩下的中断事件。
为了避免意外清零某些位,建议使用加载指令,对所有不需改变的位写’1’,对需要清除的位
’0’。对于该寄存器,不建议使用读出-修改-写入的流程,因为在读写操作之间,硬件可能
需要设置某些位,而这些位会在写入时被清零。
下面详细描述每个位:
CTR:正确的传输 (Correct transfer) 15
此位在端点正确完成一次数据传输后由硬件置位。应用程序可以通过DIREP_ID位来识别是
哪个端点完成了正确的数据传输。
此位应用程序只读
PMAOVR:分组缓冲区溢出 (Packet memory area over / underrun) 14
此位在微控制器长时间没有响应一个访问USB分组缓冲区请求时由硬件置位。USB模块通常在
以下情况时置位该位:在接收过程中一个ACK握手分组没有被发送,或者在发送过程中发生了
比特填充错误,在以上两种情况下主机都会要求数据重传。在正常的数据传输中不会产生
PMAOVR中断。由于失败的传输都将由主机发起重传,应用程序就可以在这个中断的服务程序
中加速设备的其他操作,并准备重传。但这个中断不会在同步传输中产生(同步传输不支持重
)因此数据可能会丢失。
此位应用程序可读可写,但只有写0有效,写1无效。
ERR:出错 (Error) 13
在下列错误发生时硬件会置位此位。
NANS:无应答。主机的应答超时。
CRC:循环冗余校验码错误。数据或令牌分组中的CRC校验出错。
BST:位填充错误。PID,数据或CRC中检测出位填充错误。
FVIO:帧格式错误。收到非标准帧(EOP出现在错误的时刻,错误的令牌等)
USB应用程序通常可以忽略这些错误,因为USB模块和主机在发生错误时都会启动重传机制。
此位产生的中断可以用于应用程序的开发阶段,可以用来监测USB总线的传输质量,标识用户
可能发生的错误(连接线松,环境干扰严重,USB线损坏等)
此位应用程序可读可写,但只有写0有效,写1无效。
WKUP:唤醒请求 (Wakeup) 12
USB模块处于挂起状态时,如果检测到唤醒信号,此位将由硬件置位。此时CTLR寄存器的
LP_MODE位将被清零,同时USB_WAKEUP被激活,通知设备的其他部分(如唤醒单元)将开始
唤醒过程。
此位应用程序可读可写,但只有写0有效,写1无效。
SUSP:挂起模块请求 (Suspend mode request) 11
此位在USB线上超过3ms没有信号传输时由硬件置位,用以指示一个来自USB总线的挂起请
求。USB复位后硬件立即使能对挂起信号的检测,但在挂起模式下(FSUSP1)硬件不会再检
测挂起信号直到唤醒过程结束。
此位应用程序可读可写,但只有写0有效,写1无效。
414/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
RESETUSB复位请求 (USB reset request) 10
此位在USB模块检测到USB复位信号输入时由硬件置位。此时USB模块将复位内部协议状态
机,并在中断使能的情况下触发复位中断来响应复位信号。USB模块的发送和接收部分将被禁
止,直到此位被清除。所有的配置寄存器不会被复位,除非应用程序对他们清零。这用来保证
在复位后USB传输还可以立即正确执行。但设备的地址和端点寄存器会被USB复位所复位。
此位应用程序可读可写,但只有写0有效,写1无效。
SOF:帧首标志 (Start of frame) 9
此位在USB模块检测到总线上的SOF分组时由硬件置位,标志一个新的USB帧的开始。中断服
务程序可以通过检测SOF事件来完成与主机的1ms同步,并正确读出寄存器在收到SOF分组时
的更新内容(此功能在同步传输时非常有意义)
此位应用程序可读可写,但只有写0有效,写1无效。
ESOF:期望帧首标识位 (Expected start of frame) 8
此位在USB模块未收到期望的SOF分组时由硬件置位。主机应该每毫秒都发送SOF分组,但如
USB模块没有收到,挂起定时器将触发此中断。如果连续发生3ESOF中断,也就是连续3
次未收到SOF分组,将产生SUSP中断。即使在挂起定时器未被锁定时发生SOF分组丢失,此
位也会被置位。
此位应用程序可读可写,但只有写0有效,写1无效。
7:5 保留
DIR:传输方向 (Direction of transaction) 4
此位在完成数据传输产生中断后由硬件根据传输方向写入。
如果DIR0,相应端点的CTR_TX位被置位,标志一个IN分组(数据从USB模块传输到PC主机)
的传输完成。
如果DIR1,相应端点的CTR_RX位被置位,标志一个OUT分组(数据从PC主机传输到USB
)的传输完成。如果CTR_TX位同时也被置位,就标志同时存在挂起的OUT分组和IN分组。
应用程序可以利用该信息访问USB_EPnR位对应的操作,它表示挂起中断传输方向的信息。
该位为只读
EP_ID[3:0]:端点ID (Endpoint Identifier) 3:0
此位在USB模块完成数据传输产生中断后由硬件根据请求中断的端点号写入。如果同时有多个
端点的请求中断,硬件写入优先级最高的端点号。端点的优先级按以下方法定义:同步端点和
双缓冲批量端点具有高优先级,其他的端点为低优先级。如果多个同优先级的端点请求中断,
则根据端点号来确定优先级,即端点0具有最高优先级,端点号越小,优先级越高。应用程序
可以通过上述的优先级策略顺序处理端点的中断请求。
该位为只读。
USB帧编号寄存器(USB_FNR)
地址偏移:0x48
复位值:0x0XXXX代表未定义数值
1514131211109876543210
RXDP RXDM LCK
rrrrrrrrrrrrrrrr
LSOF[1:0] FN[10:0]
RXDPD+状态位 (Receive data + line status) 15
此位用于观察USB D+数据线的状态,可在挂起状态下检测唤醒条件的出现。
RXDMD-状态位 (Receive data - line status) 14
此位用于观察USB D-数据线的状态,可在挂起状态下检测唤醒条件的出现。
LCK:锁定位 (Locked) 13
USB模块在复位或唤醒序列结束后会检测SOF分组,如果连续检测到至少2SOF分组,则硬
件会置位此位。此位一旦锁定,帧计数器将停止计数,一直等到USB模块复位或总线挂起时再
恢复计数。
LSOF[1:0]:帧首丢失标志位 (Lost SOF) 12:11
ESOF事件发生时,硬件会将丢失的SOF分组的数目写入此位。如果再次收到SOF分组,引
脚会清除此位。
415/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
FN[10:0]:帧编号 (Frame number) 10:0
此部分记录了最新收到的SOF分组中的11位帧编号。主机每发送一个帧,帧编号都会自加,这
对于同步传输非常有意义。此部分发生SOF中断时更新。
USB设备地址寄存器(USB_DADDR)
地址偏移:0x4C
复位值:0x0000
1514131211109876543210
EF
rw rw rw rw rw rw rw rw
保留 ADD[6:0]
EFUSB模块使能位 (Enable function) 7
此位在需要使能USB模块时由应用程序置位。如果此位为0USB模块将停止工作,忽略所有
寄存器的设置,不响应任何USB通信。
ADD[6:0]:设备地址 (evice address) 6:0
此位记录了USB主机在枚举过程中为USB设备分配的地址值。该地址值和端点地址(EA)必需和
USB令牌分组中的地址信息匹配,才能在指定的端点进行正确的USB传输。
USB分组缓冲区描述表地址寄存器(USB_BTABLE)
地址偏移:0x50
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw
保留BTABLE[15:3]
res
BTABLE[15:3]:缓冲表 (Buffer table) 15:3
此位记录分组缓冲区描述表的起始地址。分组缓冲区描述表用来指示每个端点的分组缓冲区地
址和大小,按8字节对齐(即最低3位为000)。每次传输开始时,USB模块读取相应端点所对应
的分组缓冲区描述表获得缓冲区地址和大小信息。
2:0 保留位,由硬件置为0
21.5.2 端点寄存器
端点寄存器的数量由USB模块所支持的端点数目决定。USB模块最多支持8个双向端点。每个
USB设备必须支持一个控制端点,控制端点的地址(EA)必需为0。不同的端点必需使用不同的
端点号,否则端点的状态不定。每个端点都有与之对应的USB_EpnR寄存器,用于存储该端点
的各种状态信息。
USB 端点n寄存器(USB_EPnR), n=[0..7]
地址偏移:0x000x1C
复位值:0x0000
1514131211109876543210
CTR
_RX
DTOG
_RX SETUP EP_
KIND
CTR
_TX
DTOG
_TX
rc w0 t t t r rw rw rw rc w0 t t t rw rw rw rw
STAT_RX
[1:0]
EP
TYPE[1:0]
STAT_TX
[1:0] EA[3:0]
USB模块收到USB总线复位信号,或CTLR寄存器的FRES位置位时,USB模块将会复位。该
寄存器除了CTR_RXCTR_TX位保持不变以处理紧随的USB传输外,其他位都被复位。每个
端点对应一个USB_EPnR寄存器,其中n为端点地址,即端点ID号。
对于此类寄存器应避免执行读出-修改-写入操作,因为在读和写操作之间,硬件可能会设置
某些位,而这些位又会在写入时被修改,导致应用程序错过相应的操作。因此,这些位都有一
个写入无效的值,建议用Load指令修改这些寄存器,以免应用程序修改了不需要修改的位。
416/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
CTR_RX:正确接收标志位 (Correct Transfer for reception) 15
此位在正确接收到OUTSETUP分组时由硬件置位,应用程序只能对此位清零。如果CTRM
位已置位,相应的中断会产生。收到的是OUT分组还是SETUP分组可以通过下面描述的
SETUP位确定。以NAKSTALL结束的分组和出错的传输不会导致此位置位,因为没有真正
传输数据。
此位应用程序可读可写,但只有写0有效,写1无效。
DTOG_RX:用于数据接收的数据翻转位 (Data Toggle, for reception transfers) 14
对于非同步端点,此位由硬件设置,用于标记希望接收的下一个数据分组的Toggle
(0=DATA01=DATA1)。在接收到PID(分组ID)正确的数据分组之后,USB模块发送ACK握手
分组,并翻转此位。对于控制端点,硬件在收到SETUP分组后清除此位。
对于双缓冲端点,此位还用于支持双缓冲区的交换(请参考21.4.3双缓冲端点)
对于同步端点,由于仅发送DATA0,因此此位仅用于支持双缓冲区的交换(请参考21.4.4同步
传输)而不需进行翻转。同步传输不需要握手分组,因此硬件在收到数据分组后立即设置此
位。
应用程序可以对此位进行初始化(对于非控制端点,初始化是必需的),或者翻转此位用于特殊
用途。
此位应用程序可读可写,但写0无效,写1可以翻转此位。
STAT_RX[1:0]:用于数据接收的状态位 (Status bits, for reception transfers) 13:12
此位用于指示端点当前的状态,表157列出了端点的所有状态。当一次正确的OUTSETUP
据传输完成后(CTR_RX=1)硬件会自动设置此位为NAK状态,使应用程序有足够的时间在处
理完当前传输的数据后,响应下一个数据分组。
对于双缓冲批量端点,由于使用特殊的传输流量控制策略,因此根据使用的缓冲区状态控制传
输状态(请参考21.4.3双缓冲端点)
对于同步端点,由于端点状态只能是有效或禁用,因此硬件不会在正确的传输之后设置此位。
如果应用程序将此位设为STALL或者NAKUSB模块响应的操作是未定义的。
此位应用程序可读可写,但写0无效,写1翻转此位。
SETUPSETUP分组传输完成标志位 (Setup transaction completed) 11
此位在USB模块收到一个正确的SETUP分组后由硬件置位,只有控制端点才使用此位。在接
收完成后(CTR_RX=1),应用程序需要检测此位以判断完成的传输是否是SETUP分组。为了防
止中断服务程序在处理SETUP分组时下一个令牌分组修改了此位,只有CTR_RX0时,此位
才可以被修改,CTR_RX1时不能修改。
此位应用程序只读。
EP_TPYE[1:0]:端点类型位 (Endpoint type) 10:9
此位用于指示端点当前的类型,所有的端点类型都在表158中列出。所有的USB设备都必需包
含一个地址为0的控制端点,如果需要可以有其他地址的控制端点。只有控制端点才会有
SETUP传输,其他类型的端点无视此类传输。SETUP传输不能以NAKSTALL分组响应,如
果控制端点在收到SETUP分组时处于NAK状态,USB模块将不响应分组,就会出现接收错
误。如果控制端点处于STALL状态,SETUP分组会被正确接收,数据会被正确传输,并产生
一个正确传输完成的中断。控制端点的OUT分组安装普通端点的方式处理。
批量端点和中断端点的处理方式非常类似,仅在对EP_KIND位的处理上有差别。
21.4.4
417/754
同步端点的用法请参考 同步传输。
EP_KIND:端点特殊类型位 (Endpoint kind) 8
此位的需要和EP_TYPE位配合使用,具体的定义请参考表159
DBL_BUF:应用程序设置此位能使能批量端点的双缓冲功能。详见21.4.3双缓冲端点。
STATUS_OUT:应用程序设置此位表示USB设备期望主机发送一个状态数据分组,此时,设
备对于任何长度不为0的数据分组都响应STALL分组。此功能仅用于控制端点,有利于提供应
用程序对于协议层错误的检测。如果STATUS_OUT位被清除,OUT分组可以包含任意长度的
数据。
CTR_TX:正确发送标志位 (Correct transfer for transmission) 7
此位由硬件在一个正确的IN分组传输完成后置位。如果CTRM位已被置位,会产生相应的中
断。应用程序需要在处理完该事件后清除此位。在IN分组结束时,如果主机响应NAKSTALL
则此位不会被置位,因为数据传输没有成功。
此位应用程序可读可写,但写0有效,写1无效。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
DTOG_RX:发送数据翻转位 (Data Toggle, for transmission transfers) 6
对于非同步端点,此位用于指示下一个要传输的数据分组的Toggle(0DATA0
1=DATA1)。在一个成功传输的数据分组后,如果USB模块接收到主机发送的ACK分组,就会
翻转此位。对于控制端点,USB模块会在收到正确的SETUP PID后置位此位。
对于双缓冲端点,此位还可用于支持分组缓冲区交换(请参考21.4.3双缓冲端点)
对于同步端点,由于只传送DATA0,因此该位只用于支持分组缓冲区交换(请参考21.4.4同步
传输)。由于同步传输不需要握手分组,因此硬件在接收到数据分组后即设置该位。
应用程序可以初始化该位(对于非控制端点,初始化此位时必需的),也可以设置该位用于特殊
用途。
此位应用程序可读可写,但写0无效,写1翻转此位。
STAT_TX[1:0]:用于发送数据的状态位 (Status bits, for transmission transfers) 5:4
此位用于标识端点的当前状态,表160列出了所有的状态。应用程序可以翻转这些位来初始化
状态信息。在正确完成一次IN分组的传输后(CTR_TX=1),硬件会自动设置此位为NAK状态,
保证应用程序有足够的时间准备好数据响应后续的数据传输。
对于双缓冲批量端点,由于使用特殊的传输流量控制策略,是根据缓冲区的状态控制传输的状
态的(请参考21.4.3双缓冲端点)
对于同步端点,由于端点的状态只能是有效或禁用,因此硬件不会在数据传输结束时改变端点
的状态。如果应用程序将此位设为STALL或者NAK,则USB模块后续的操作是未定义的。
此位应用程序可读可写,但写0无效,写1翻转此位。
EA[3:0]:端点地址 (Endpoint address) 3:0
应用程序必需设置此4位,在使能一个端点前为它定义一个地址。
157 接收状态编码
STAT_RX[1:0] 描述
DISABLED:端点忽略所有的接收请求。 00
STALL:端点以STALL分组响应所有的接收请求。 01
NAK:端点以NAK分组响应所有的接收请求。 10
VALID:端点可用于接收。 11
158 端点类型编码
EP_TYPE[1:0] 描述
BULK:批量端点 00
CONTROL:控制端点 01
ISO:同步端点 10
INTERRUPT:中断端点 11
159 端点特殊类型定义
EP_TYPE[1:0] EP_KIND意义
00 BULK DBL_BUF:双缓冲端点
01 CONTROL STATUS_OUT
10 ISO 未使用
11 INTERRUPT
未使用
160 发送状态编码
STAT_RX[1:0] 描述
00 DISABLED:端点忽略所有的发送请求。
01 STALL:端点以STALL分组响应所有的发送请求。
10 NAK:端点以NAK分组响应所有的发送请求。
11 VALID:端点可用于发送。
418/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
21.5.3 缓冲区描述表
虽然缓冲区描述表位于分组缓冲区内,但仍可将它看作是特殊的寄存器,用以配置USB模块和
微控制器内核共享的分组缓冲区的地址和大小。由于APB1总线按32位寻址,所以所有的分组缓
冲区地址都使用32位对齐的地址,而不是USB_BTABLE寄存器和缓冲区描述表所使用的地址。
以下介绍两种地址表示方式:一种是应用程序访问分组缓冲区时使用的,另一种是相对于USB
模块的本地地址。供应用程序使用的分组缓冲区地址需要乘以2才能得到缓冲区在微控制器中
真正地址。分组缓冲区的首地址为0x4000 6000。下面将描述与USB_EPnR寄存器相关的缓冲
区描述表。完整的分组缓冲区的说明和缓冲区描述表的用法请参考21.4.2节。
发送缓冲区地址寄存器 n(USB_ADDRn_TX)
地址偏移:[USB_BTABLE] + n×16
USB本地地址:[USB_BTABLE] + n×8
1514131211109876543210
-
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw -
ADDRn_TX[15:1]
ADDRn_TX[15:1]:发送缓冲区地址 (Transmission buffer address) 15:1
此位记录了收到下一个IN分组时,需要发送的数据所在的缓冲区起始地址。
0 因为分组缓冲区的地址必须按字对齐,所以此位必须为’0’
发送数据字节数寄存器 n(USB_COUNTn_TX)
地址偏移:[USB_BTABLE] + n×16 + 4
USB本地地址:[USB_BTABLE] + n×8 + 2
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw
- COUNTn_TX[9:0]
15:10 由于USB模块支持的最大数据分组为1023个字节,所以USB模块忽略这些位。
COUNTn_TX[9:0] 发送数据字节数 (Transmission byte count) 9:0
此位记录了收到下一个IN分组时要传输的数据字节数。
注:
双缓冲区和同步
IN
端点有两个
USB_COUNTn_TX
寄存器:分别为
USB_COUNTn_TX_1
USB_COUNTn_TX_0
,内容如下:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw
- COUNTn_TX_1[9:0]
- COUNTn_TX_0[9:0]
接收缓冲区地址寄存器 n(USB_ADDRn_RX)
地址偏移:[USB_BTABLE] + n×16 + 8
USB本地地址:[USB_BTABLE] + n×8 + 4
1514131211109876543210
-
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw -
ADDRn_RX[15:1]
ADDRn_RX[15:1]:接收缓冲区地址 (Reception buffer address) 15:1
此位记录了收到下一个OUT或者SETUP分组时,用于保存数据的缓冲区起始地址。
0 因为分组缓冲区的地址按字对齐,所以此位必需为’0’
419/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
接收数据字节数寄存器 n(USB_COUNTn_RX)
地址偏移:[USB_BTABLE] + n×16 + 12
USB本地地址:[USB_BTABLE] + n×8 + 6
1514131211109876543210
BLSIZE
rwrwrwrwrwrwrrrrrrrrrr
COUNTn_RX[9:0]NUM_BLOCK[4:0]
该寄存器用于存放接收分组时需要使用到的两个参数。高6位定义了接收分组缓冲区的大小,以
便USB模块检测缓冲区的溢出。低10位则用于USB模块记录实际接收到的字节数。由于有效位
数的限制,缓冲区的大小由分配到的存储区块数表示,而存储区块的大小则由所需的缓冲区大
小决定。缓冲区的大小在设备枚举过程中定义,由端点描述符的参数maxPacketSize表述。(
体信息请参考”USB 2.0协议规范”)
BL_SIZE:存储区块的大小 (Block size) 15
此位用于定义决定缓冲区大小的存储区块的大小。
如果BL_SIZE=0,存储区块的大小为2字节,因此能分配的分组缓冲区的大小范围为262
字节。
如果BL_SIZE=1,存储区块的大小为32字节,因此能分配的分组缓冲区的大小范围为32512
字节,符合USB协议定义的最大分组长度限制。
NUM_BLOCK[4:0]:存储区块的数目 (Number of blocks) 14:10
此位用以记录分配的存储区块的数目,从而决定最终使用的分组缓冲区的大小。具体请参考
161
COUNTn_RX[9:0]:接收到的字节数 (Reception byte count) 9:0
此位由USB模块写入,用以记录端点收到的最新的OUTSETUP分组的实际字节数。
注:
双缓冲区和同步
IN
端点有两个
USB_COUNTn_RX
寄存器:分别为
USB_COUNTn_RX_1
USB_COUNTn_TX_0
,内容如下:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BLSIZE
_1
rwrwrwrwrwrwrrrrrrrrrr
1514131211109876543210
BLSIZE
_0
rwrwrwrwrwrwrrrrrrrrrr
COUNTn_RX_1[9:0]NUM_BLOCK_1[4:0]
NUM_BLOCK_0[4:0] COUNTn_RX_0[9:0]
161 分组缓冲区大小的定义
BL_SIZE=0时的 BL_SIZE=1时的
NUM_BLOCK[4:0]的值 分组缓冲区大小 分组缓冲区大
00000 不允许使用 32字节
00001 2字节 64字节
00010 4字节 96字节
00011 6字节 128字节
… …
01111 30字节 512字节
10000 32字节 保留
10001 34字节 保留
10010 36字节 保留
… …
11110 60字节 保留
11111 62字节 保留
420/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
21.5.4 USB寄存器映像
162 USB寄存器映像和复位值
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
USB_EP0R
CTR_RX
DTOG_RX
SETUP
EP_KIND
CTR_TX
DTOG_TX
复位值 0000000000000000
USB_EP1R
CTR_RX
DTOG_RX
SETUP
EP_KIND
CTR_TX
DTOG_TX
复位值 0000000000000000
USB_EP2R
CTR_RX
DTOG_RX
SETUP
EP_KIND
CTR_TX
DTOG_TX
复位值 0000000000000000
USB_EP3R
CTR_RX
DTOG_RX
SETUP
EP_KIND
CTR_TX
DTOG_TX
复位值 0000000000000000
USB_EP4R
CTR_RX
DTOG_RX
SETUP
EP_KIND
CTR_TX
DTOG_TX
复位值 0000000000000000
USB_EP5R
CTR_RX
DTOG_RX
SETUP
EP_KIND
CTR_TX
DTOG_TX
复位值 0000000000000000
USB_EP6R
CTR_RX
DTOG_RX
SETUP
EP_KIND
CTR_TX
DTOG_TX
复位值 0000000000000000
USB_EP7R
CTR_RX
DTOG_RX
SETUP
EP_KIND
CTR_TX
DTOG_TX
STAT_TX
[1:0]
EA[3:0]
1Ch
保留
STAT_RX
[1:0]
EPTYPE
[1:0]
EA[3:0]
STAT_RX
[1:0]
EPTYPE
[1:0]
STAT_TX
[1:0]
EA[3:0]
保留
保留
EA[3:0]
保留
EPTYPE
[1:0]
STAT_TX
[1:0]
保留
STAT_RX
[1:0]
EA[3:0]
STAT_RX
[1:0]
STAT_RX
[1:0]
EA[3:0]
EPTYPE
[1:0]
保留
STAT_RX
[1:0]
保留
STAT_RX
[1:0]
EPTYPE
[1:0]
EPTYPE
[1:0]
STAT_TX
[1:0]
STAT_TX
[1:0]
EA[3:0]
EPTYPE
[1:0]
EPTYPE
[1:0]
STAT_TX
[1:0]
STAT_TX
[1:0]
EA[3:0]
STAT_TX
[1:0]
18h
00h
04h
14h
10h
0Ch
08h
STAT_RX
[1:0]
保留
复位值 0000000000000000
20h~
3Fh
保留
421/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB全速设备接口(USB) STM32F10xxx参考手册
422/754
参照200912 RM0008 Reference Manual 英文第10
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
USB_CNTR
CTRM
PMAOVRM
ERRM
WKUPM
SUSPM
RESETM
SOFM
ESOFM
RESUME
FSUSP
LPMODE
PDWN
FRES
复位值
0000000000000011
USB_ISTR
CTR
PMAOVR
ERR
WKUP
SUSP
RESET
SOF
ESOF
DIR
复位值
0000000000000000
USB_FNR
RXDP
RXDM
LCK
复位值
00000XXXXXXXXXXX
USB_DADDR
EF
复位值
00000000
USB_BTABLE
复位值
0000000000000
保留
保留
LSOF
[1:0]
FN[10:0]
EP_ID
[3:0]
保留 ADD[6:0]
BTABLE[15:3] 保留
40h
保留
44h
保留
48h
保留
50h
保留
4Ch
保留
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
关于寄存器的起始地址,请参见表1
控制器局域网(bxCAN) STM32F10xxx参考手册
22 控制器局域网(bxCAN)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
本章描述的模块仅适用于互联型产品和增强型STM32F103xx系列。
22.1 bxCAN简介
bxCAN是基本扩展CAN(Basic Extended CAN)缩写,它支持CAN协议2.0A2.0B。它的设计
目标是,以最小的CPU负荷来高效处理大量收到的报文。它也支持报文发送的优先级要求(优先
级特性可软件配置)
对于安全紧要的应用,bxCAN提供所有支持时间触发通信模式所需的硬件功能。
22.2 bxCAN主要特点
支持CAN协议2.0A2.0B主动模式
波特率最高可达1兆位/
支持时间触发通信功能
发送
3个发送邮箱
发送报文的优先级特性可软件配置
记录发送SOF时刻的时间戳
接收
3级深度的2个接收FIFO
可变的过滤器组:
在互联型产品中,CAN1CAN2分享28个过滤器组
其它STM32F103xx系列产品中有14个过滤器组
标识符列表
FIFO溢出处理方式可配置
记录接收SOF时刻的时间戳
时间触发通信模式
禁止自动重传模式
16位自由运行定时器
可在最后2个数据字节发送时间戳
管理
中断可屏蔽
邮箱占用单独1块地址空间,便于提高软件效率
CAN
CAN1:是主bxCAN,它负责管理在从bxCAN512字节的SRAM存储器之间的通信
CAN2:是从bxCAN,它不能直接访问SRAM存储器
195) 2bxCAN模块共享512字节的SRAM存储器(
423/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
注:
在中容量和大容量产品中,
USB
CAN
共用一个专用的
512
字节的
SRAM
存储器用于数据的发送
和接收,因此不同同时使用
USB
CAN(
共享的
SRAM
USB
CAN
模块互斥地访问
)
USB
CAN
可以同时用于一个应用中但不能在同一个时间使用。
22.3 bxCAN总体描述
在当今的CAN应用中,CAN网络的节点在不断增加,并且多CAN常常通过网关连接起来,因
此整个CAN网中的报文数量(个节点都需要处理)急剧增加。除了应用层报文外,网络管理和诊
断报文也被引入。
需要一个增强的过滤机制来处理各种类型的报文
此外,应用层任务需要更多CPU时间,因此报文接收所需的实时响应程度需要减轻。
接收FIFO的方案允许,CPU花很长时间处理应用层任务而不会丢失报文。
构筑在底层CAN驱动程序上的高层协议软件,要求跟CAN控制器之间有高效的接口。
194 CAN网拓扑结构
22.3.1 CAN 2.0B主动内核
bxCAN模块可以完全自动地接收和发送CAN报文;且完全支持标准标识符(11)和扩展标识符
(29)
22.3.2 控制、状态和配置寄存器
应用程序通过这些寄存器,可以:
配置CAN参数,如波特率
请求发送报文
处理报文接收
管理中断
获取诊断信息
22.3.3 发送邮箱
共有3个发送邮箱供软件来发送报文。发送调度器根据优先级决定哪个邮箱的报文先被发送。
22.3.4 接收过滤器
在互联型产品中,bxCAN提供28个位宽可变/配置的标识符过滤器组,软件通过对它们编程
从而在引脚收到的报文中选择它需要的报文,而把其它报文丢弃掉。在其它STM32F103xx系列
产品中有14个位宽可变/可配置的标识符过滤器组。
424/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
接收FIFO
共有2个接收FIFO,每个FIFO都可以存放3个完整的报文。它们完全由硬件来管理。
195CAN框图(互联型产品)
注:CAN2 的开始滤波器编号 n是通过写入
CAN FMR
寄存器的
CAN2SB
[
5:0
]
配置的
425/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
22.4 bxCAN工作模式
bxCAN3个主要的工作模式:初始化、正常和睡眠模式。在硬件复位后,bxCAN工作在睡眠
模式以节省电能,同时CANTX引脚的内部上拉电阻被激活。软件通过对CAN_MCR寄存器的
INRQSLEEP位置’1’,可以请求bxCAN进入初始化睡眠模式。一旦进入了初始化睡眠模
bxCAN就对CAN_MSR寄存器的INAKSLAK位置’1’来进行确认,同时内部上拉电阻被禁
用。当INAKSLAK位都为’0’时,bxCAN就处于正常模式。在进入正常模式前,bxCAN必须跟
CAN总线取得同步;为取得同步,bxCAN要等待CAN总线达到空闲状态,即在CANRX引脚上
监测到11个连续的隐性位。
22.4.1 初始化模式
软件初始化应该在硬件处于初始化模式时进行。设置CAN_MCR寄存器的INRQ位为’1’,请求
bxCAN进入初始化模式,然后等待硬件对CAN_MSR寄存器的INAK位置’1’来进行确认。
清除CAN_MCR寄存器的INRQ位为’0’,请求bxCAN退出初始化模式,当硬件对CAN_MSR寄存
器的INAK位清’0’就确认了初始化模式的退出。
bxCAN处于初始化模式时,禁止报文的接收和发送,并且CANTX引脚输出隐性位(高电平)
初始化模式的进入,不会改变配置寄存器。
软件对bxCAN的初始化,至少包括位时间特性(CAN_BTR)和控制(CAN_MCR)2个寄存器。
在对bxCAN的过滤器组(模式、位宽、FIFO关联、激活和过滤器值)进行初始化前,软件要对
CAN_FMR寄存器的FINIT位设置’1’。对过滤器的初始化可以在非初始化模式下进行。
注:
FINIT=1
时,报文的接收被禁止。
可以先对过滤器激活位清
’0’(
CAN_FA1R
)
,然后修改相应过滤器的值。
如果过滤器组没有使用,那么就应该让它处于非激活状态
(
保持其
FACT
位为清
’0’
状态
)
22.4.2 正常模式
在初始化完成后,软件应该让硬件进入正常模式,以便正常接收和发送报文。软件可以通过对
CAN_MCR寄存器的INRQ位清’0’,来请求从初始化模式进入正常模式,然后要等待硬件对
CAN_MSR寄存器的INAK位置’1’的确认。在跟CAN总线取得同步,即在CANRX引脚上监测到
11个连续的隐性位(等效于总线空闲)后,bxCAN才能正常接收和发送报文。
不需要在初始化模式下进行过滤器初值的设置,但必须在它处在非激活状态下完成(相应的
FACT位为0)。而过滤器的位宽和模式的设置,则必须在初始化模式中进入正常模式前完成。
22.4.3 睡眠模式(低功耗)
bxCAN可工作在低功耗的睡眠模式。软件通过对CAN_MCR寄存器的SLEEP位置’1’,来请求进
入这一模式。在该模式下,bxCAN的时钟停止了,但软件仍然可以访问邮箱寄存器。
bxCAN处于睡眠模式,软件必须对CAN_MCR寄存器的INRQ位置’1’并且同时对SLEEP
’0’,才能进入初始化模式。
2种方式可以唤醒(退出睡眠模)bxCAN:通过软件对SLEEP位清’1’,或硬件检测到CAN总线
的活动。
如果CAN_MCR存器的AWUM位为’1’,一旦检测到CAN总线的活动,硬件就自动对SLEEP
’0’来唤醒bxCAN。如果CAN_MCR寄存器的AWUM位为’0’,软件必须在唤醒中断里对SLEEP
位清’0’才能退出睡眠状态。
注:
如果唤醒中断被允许
(CAN_IER
寄存器的
WKUIE
位为
’1’)
,那么一旦检测到
CAN
总线活动就会产
生唤醒中断,而不管硬件是否会自动唤醒
bxCAN
196 bxCAN工作模式在对SLEEP位清’0’后,睡眠模式的退出必须与CAN总线同步,请参考
。当硬件对SLAK位清’0’时,就确认了睡眠模式的退出。
426/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
196 bxCAN工作模式
注:
1 ACK =
硬件响应睡眠或初始化请求
,
而对
CAN_MSR
寄存器的
INAK
SLAK
位置
1
的状态
2 SYNC = bxCAN
等待
CAN
总线变为空闲的状态,即在
CANRX
引脚上检测到连续的
11
个隐性
22.5 测试模式
通过对CAN_BTR寄存器的SILM/LBKM位置’1’,来选择一种测试模式。只能在初始化模式
下,修改这2位。在选择了一种测试模式后,软件需要对CAN_MCR寄存器的INRQ位清’0’,来
真正进入测试模式。
22.5.1 静默模式
通过对CAN_BTR寄存器的SILM位置’1’,来选择静默模式。
在静默模式下,bxCAN可以正常地接收数据帧和远程帧,但只能发出隐性位,而不能真正发送
报文。如果bxCAN需要发出显性位(确认位、过载标志、主动错误标志),那么这样的显性位在内
部被接回来从而可以被CAN内核检测到,同时CAN总线不会受到影响而仍然维持在隐性位状
态。因此,静默模式通常用于分析CAN总线的活动,而不会对总线造成影响-显性位(确认位、
错误帧)不会真正发送到总线上。
197 bxCAN工作在静默模式
22.5.2 环回模式
通过对CAN_BTR寄存器的LBKM位置’1’,来选择环回模式。在环回模式下,bxCAN把发送的报
文当作接收的报文并保存(如果可以通过接收过滤)在接收邮箱里。
427/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
198 bxCAN工作在环回模式
环回模式可用于自测试。为了避免外部的影响,在环回模式下CAN内核忽略确认错误(在数/
程帧的确认位时刻,不检测是否有显性位)。在环回模式下,bxCAN在内部把Tx输出回馈到Rx
入上,而完全忽略CANRX引脚的实际状态。发送的报文可以在CANTX引脚上检测到。
22.5.3 环回静默模式
199 bxCAN工作在环回静默模式
通过对CAN_BTR寄存器的LBKMSILM位同时置’1’,可以选择环回静默模式。该模式可用于
“热自测试”,即可以像环回模式那样测试bxCAN,但却不会影响CANTXCANRX所连接的
整个CAN系统。在环回静默模式下,CANRX引脚与CAN总线断开,同时CANTX引脚被驱动到
隐性位状态。
22.6 STM32F10xxx处于调试模式时
当微控制器处于调试模式时,Cortex-M3核心处于暂停状态,依据下述配置位的状态,bxCAN
以继续正常工作或停止工作:
调试(DBG)模块中CAN1DBG_CAN1_STOP位或CAN2DBG_CAN2_STOP位。详见第
支持定时器、看门狗、bxCANI2C的调试29.16.2 节:
428/754
CAN_MCR中的DBF位。详见第22.9.2节:CAN控制和状态寄存器。
22.7 bxCAN功能描述
22.7.1 发送处理
发送报文的流程为:应用程序选择1空置的发送邮箱;设置标识符,数据长度和待发送数据;
然后对CAN_TIxR寄存器的TXRQ位置’1’,来请求发送。TXRQ位置’1’后,邮箱就不再是空邮
箱;而一旦邮箱不再为空置,软件对邮箱寄存器就不再有写的权限。TXRQ位置1后,邮箱马上
进入挂号状态,并等待成为最高优先级的邮箱,参见
发送优先级
。一旦邮箱成为最高优先级的
邮箱,其状态就变为预定发送状态。一旦CAN总线进入空闲状态,预定发送邮箱中的报文就马
上被发送(进入发送状态)。一旦邮箱中的报文被成功发送后,它马上变为空置邮箱;硬件相应地
CAN_TSR寄存器的RQCPTXOK位置1,来表明一次成功发送。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
如果发送失败,由于仲裁引起的就对CAN_TSR寄存器的ALST位置’1’,由于发送错误引起的就
TERR位置’1’
发送优先级
由标识符决定
当有超过1个发送邮箱在挂号时,发送顺序由邮箱中报文的标识符决定。根据CAN协议,标识符
数值最低的报文具有最高的优先级。如果标识符的值相等,那么邮箱号小的报文先被发送。
由发送请求次序决定
通过对CAN_MCR寄存器的TXFP位置’1’,可以把发送邮箱配置为发送FIFO。在该模式下,发送
的优先级由发送请求次序决定。
该模式对分段发送很有用。
中止
通过对CAN_TSR寄存器的ABRQ位置’1’,可以中止发送请求。邮箱如果处于挂号预定状态,
发送请求马上就被中止了。如果邮箱处于发送状态,那么中止请求可能导致2种结果。如果邮箱
中的报文被成功发送,那么邮箱变为空置邮箱,并且CAN_TSR寄存器的TXOK位被硬件置’1’
如果邮箱中的报文发送失败了,那么邮箱变为预定状态,然后发送请求被中止,邮箱变为空置
邮箱且TXOK位被硬件清’0’。因此如果邮箱处于发送状态,那么在发送操作结束后,邮箱都会变
空置邮箱。
禁止自动重传模式
该模式主要用于满足CAN标准中,时间触发通信选项的需求。通过对CAN_MCR寄存器的NART
位置’1’,来让硬件工作在该模式。
在该模式下,发送操作只会执行一次。如果发送操作失败了,不管是由于仲裁丢失或出错,硬
件都不会再自动发送该报文。
在一次发送操作结束后,硬件认为发送请求已经完成,从而对CAN_TSR寄存器的RQCP
’1’,同时发送的结果反映在TXOKALSTTERR位上。
200 发送邮箱状态
429/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
22.7.2 时间触发通信模式
在该模式下,CAN硬件的内部定时器被激活,并且被用于产生(发送与接收邮箱的)时间戳,分
存储在CAN_RDTxR/CAN_TDTxR寄存器中。内部定时器在每个CAN位时间(22.7.7)累加。
内部定时器在接收和发送的帧起始位的采样点位置被采样,并生成时间戳。
22.7.3 接收管理
接收到的报文,被存储在3级邮箱深度的FIFO中。FIFO完全由硬件来管理,从而节省了CPU
处理负荷,简化了软件并保证了数据的一致性。应用程序只能通过读FIFO输出邮箱,来读取
FIFO中最先收到的报文。
有效报文
根据CAN协议,报文被正确接收(直到EOF域的最后一位都没有错误)通过了标识符过滤,
那么该报文被认为是有效报文。请参考22.7.4
430/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
节:标识符过滤。
201FIFO状态
FIFO管理
FIFO状态开始,在接收到第一个有效的报文后,FIFO状态变为挂号_1(pending_1),硬件
相应地把CAN_RFR寄存器的FMP[1:0]设置为’01’(二进制01b)。软件可以读取FIFO输出邮箱来
读出邮箱中的报文,然后通过对CAN_RFR寄存器的RFOM位设置’1’来释放邮箱,这样FIFO
变为状态了。如果在释放邮箱的同时,又收到了一个有效的报文,那么FIFO仍然保留在挂号
_1状态,软件可以读取FIFO输出邮箱来读出新收到的报文。
如果应用程序不释放邮箱,在接收到下一个有效的报文后,FIFO状态变为挂号_2(pending_2)
硬件相应地把FMP[1:0]设置为’10’(二进制10b)。重复上面的过程,第三个有效的报文把FIFO
控制器局域网(bxCAN) STM32F10xxx参考手册
挂号_3状态(FMP[1:0]11b)。此时,软件必须对RFOM位设置1来释放邮箱,以便FIFO可以
有空间来存放下一个有效的报文;否则,下一个有效的报文到来时就会导致一个报文的丢失。
22.7.5
431/754
参见 节:报文存储
溢出
FIFO处于挂号_3状态(FIFO3个邮箱都是满的),下一个有效的报文就会导致溢出,并且
一个报文会丢失。此时,硬件对CAN_RFR寄存器的FOVR位进行置’1’来表明溢出情况。至于哪
个报文会被丢弃,取决于对FIFO的设置:
如果禁用了FIFO锁定功能(CAN_MCR寄存器的RFLM位被清’0’),那么FIFO中最后收到的报
文就被新报文所覆盖。这样,最新收到的报文不会被丢弃掉。
如果启用了FIFO锁定功能(CAN_MCR寄存器的RFLM位被置’1’),那么新收到的报文就被丢
弃,软件可以读到FIFO中最早收到的3个报文。
接收相关的中断
一旦往FIFO存入一个报文,硬件就会更新FMP[1:0]位,并且如果CAN_IER寄存器的FMPIE
’1’,那么就会产生一个中断请求。
FIFO 变满时(即第3个报文被存入)CAN_RFR 寄存器的FULL 位就被置’1’ ,并且如果
CAN_IER寄存器的FFIE位为’1’,那么就会产生一个满中断请求。
在溢出的情况下,FOVR位被置’1’,并且如果CAN_IER寄存器的FOVIE位为’1’,那么就会产生
一个溢出中断请求。
22.7.4 标识符过滤
CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者
广播的形式把报文发送给所有的接收者。节点在接收报文时-根据标识符的值-决定软件是否
需要该报文;如果需要,就拷贝到SRAM里;如果不需要,报文就被丢弃且无需软件的干预。
为满足这一需求,在互联型产品中,bxCAN控制器为应用程序提供了28个位宽可变的、可配置
的过滤器组(27~0);在其它产品中,bxCAN控制器为应用程序提供了14个位宽可变的、可配置
的过滤器组(13~0),以便只接收那些软件需要的报文。硬件过滤的做法节省了CPU开销,否则
就必须由软件过滤从而占用一定的CPU开销。每个过滤器组x232位寄存器,CAN_FxR0
CAN_FxR1组成。
可变的位宽
每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求。根据位宽的不同,每个过
滤器组可提供:
132位过滤器,包括:STDID[10:0]EXTID[17:0]IDERTR
216位过滤器,包括:STDID[10:0]IDERTREXTID[17:15]
可参见图202
此外过滤器可配置为,屏蔽位模式和标识符列表模式。
屏蔽位模式
在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按
“必须匹配”或“不用关心”处理。
标识符列表模式
在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一
个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟过滤器标识
相同。
过滤器组位宽和模式的设置
过滤器组可以通过相应CAN_FMR寄存器配置。在配置一个过滤器组前,必须通过清除
CAN_FAR寄存器的FACT位,把它设置为禁用状态。通过设置CAN_FS1R的相应FSCx位,可
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
202以配置一个过滤器组的位宽,请参见 。通过CAN_FMRFBMx位,可以配置对应的屏蔽/
标识符寄存器的标识符列表模式或屏蔽位模式。
为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。
为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。
应用程序不用的过滤器组,应该保持在禁用状态。
过滤器组中的每个过滤器,都被编号为(叫做过滤器号)0开始,到某个最大数值-取决于过
器组的模式和位宽的设置。
关于过滤器配置,参见下图。
202 过滤器组位宽设置-寄存器组织
过滤器匹配序号
一旦收到的报文被存入FIFO,就可被应用程序访问。通常情况下,报文中的数据被拷贝到
SRAM中;为了把数据拷贝到合适的位置,应用程序需要根据报文的标识符来辨别不同的数
据。bxCAN提供了过滤器匹配序号,以简化这一辨别过程。
根据过滤器优先级规则,过滤器匹配序号和报文一起,被存入邮箱中。因此每个收到的报文,
都有与它相关联的过滤器匹配序号。
过滤器匹配序号可以通过下面两种方式来使用:
把过滤器匹配序号跟一系列所期望的值进行比较
把过滤器匹配序号当作一个索引来访问目标地址
对于标识符列表模式下的过滤器(非屏蔽方式的过滤器),软件不需要直接跟标识符进行比较。
对于屏蔽位模式下的过滤器,软件只须对需要的那些屏蔽位(必须匹配的位)进行比较即可。
432/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
在给过滤器编号时,并不考虑过滤器组是否为激活状态。另外,每个FIFO各自对其关联的过滤
器进行编号。请参考下图的例子。
203 过滤器编号的例子
过滤器优先级规则
根据过滤器的不同配置,有可能一个报文标识符能通过多个过滤器的过滤;在这种情况下,存
放在接收邮箱中的过滤器匹配序号,根据下列优先级规则来确定:
位宽为32位的过滤器,优先级高于位宽为16位的过滤器
对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式
位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高
433/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
204 过滤器机制的例子
上面的例子说明了bxCAN的过滤器规则:在接收一个报文时,其标识符首先与配置在标识符列
表模式下的过滤器相比较;如果匹配上,报文就被存放到相关联的FIFO中,并且所匹配的过滤
器的序号被存入过滤器匹配序号中。如同例子中所显示,报文标识符跟#4标识符匹配,因此报
文内容和FMI4被存入FIFO
如果没有匹配,报文标识符接着与配置在屏蔽位模式下的过滤器进行比较。
如果报文标识符没有跟过滤器中的任何标识符相匹配,那么硬件就丢弃该报文,且不会对软件
有任何打扰。
22.7.5 报文存储
邮箱是软件和硬件之间传递报文的接口。邮箱包含了所有跟报文有关的信息:标识符、数据、
控制、状态和时间戳信息。
发送邮箱
软件需要在一个空的发送邮箱中,把待发送报文的各种信息设置好(然后再发出发送的请求)。发
送的状态可通过查询CAN_TSR寄存器获知。
163 发送邮箱寄存器列表
相对发送邮箱基地址的偏移量 寄存器名
0 CAN_TIxR
4 CAN_TDTxR
8 CAN_TDLxR
12 CAN_TDHxR
接收邮箱(FIFO)
在接收到一个报文后,软件就可以访问接收FIFO的输出邮箱来读取它。一旦软件处理了报文(
把它读出来),软件就应该对CAN_RFxR寄存器的RFOM位进行置’1’,来释放该报文,以便为后
434/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
面收到的报文留出存储空间。过滤器匹配序号存放在CAN_RDTxR寄存器的FMI域中。16位的时
间戳存放在CAN_RDTxR寄存器的TIME[15:0]域中。
164 接收邮箱寄存器列表
相对接收邮箱基地址的偏移量 寄存器名
0 CAN_RIxR
4 CAN_RDTxR
8 CAN_RDLxR
12 CAN_RDHxR
205 CAN错误状态图
22.7.6 出错管理
CAN协议描述的出错管理,完全由硬件通过发送错误计数器(CAN_ESR寄存器里的TEC),和
接收错误计数器(CAN_ESR寄存器里的REC)来实现,其值根据错误的情况而增加或减少。关
TECREC管理的详细信息,请参考CAN标准。
软件可以读出它们的值来判断CAN网络的稳定性。
此外,CAN_ESR寄存器提供了当前错误状态的详细信息。通过设置CAN_IER寄存器(比如
ERRIE),当检测到出错时软件可以灵活地控制中断的产生。
离线恢复
TEC大于255时,bxCAN就进入离线状态,同时CAN_ESR寄存器的BOFF位被置’1’。在离线
状态下,bxCAN无法接收和发送报文。
根据CAN_MCR寄存器中ABOM位的设置,bxCAN可以自动或在软件的请求下,从离线状态恢
(变为错误主动状态)。在这两种情况下,bxCAN都必须等待一个CAN标准所描述的恢复过程
(CAN RX引脚上检测到12811个连续的隐性位)
如果ABOM位为’1’bxCAN进入离线状态后,就自动开启恢复过程。
如果ABOM位为’0’,软件必须先请求bxCAN进入然后再退出初始化模式,随后恢复过程才被开
启。
注:
在初始化模式下,
bxCAN
不会监视
CAN RX
引脚的状态,这样就不能完成恢复过程。为了完成
恢复过程,
bxCAN
必须工作在正常模式
435/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
22.7.7 位时间特性
位时间特性逻辑通过采样来监视串行的CAN总线,并且通过与帧起始位的边沿进行同步,及
过与后面的边沿进行重新同步,来调整其采样点。
它的操作可以简单解释为,如下所述把名义上的每位时间分为3段:
同步段(SYNC_SEG):通常期望位的变化发生在该时间段内。其值固定为1个时间单元(1 x
tCAN)
时间段1(BS1):定义采样点的位置。它包含CAN标准里的PROP_SEGPHASE_SEG1
其值可以编程为116个时间单元,但也可以被自动延长,以补偿因为网络中不同节点的频
率差异所造成的相位的正向漂移。
时间段2(BS2):定义发送点的位置。它代表CAN标准里的PHASE_SEG2。其值可以编程为
18个时间单元,但也可以被自动缩短以补偿相位的负向漂移。
重新同步跳跃宽度(SJW)定义了,在每位中可以延长或缩短多少个时间单元的上限。其值可以编
程为14个时间单元。
有效跳变被定义为,当bxCAN自己没有发送隐性位时,从显性位到隐性位的第1次转变。
如果在时间段1(BS1)不是在同步段(SYNC_SEG)检测到有效跳变,那么BS1的时间就被延长
最多SJW那么长,从而采样点被延迟了。
相反如果在时间段2(BS2)而不是在SYNC_SEG检测到有效跳变,那么BS2的时间就被缩短最多
SJW那么长,从而采样点被提前了。
为了避免软件的编程错误,对位时间特性寄存(CAN_BTR)的设置,只能在bxCAN处于初始化
状态下进行。
注:
关于
CAN
位时间特性和重同步机制的详细信息,请参考
ISO11898
标准。
206 位时序
436/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
207CAN
437/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
22.8 bxCAN中断
bxCAN占用4个专用的中断向量。通过设置CAN中断允许寄存器(CAN_IER),每个中断源都可以
单独允许和禁用。
208 事件标志和中断产生
发送中断可由下列事件产生:
发送邮箱0变为空,CAN_TSR寄存器的RQCP0位被置’1’
发送邮箱1变为空,CAN_TSR寄存器的RQCP1位被置’1’
发送邮箱2变为空,CAN_TSR寄存器的RQCP2位被置’1’
FIFO0中断可由下列事件产生:
FIFO0接收到一个新报文,CAN_RF0R寄存器的FMP0位不再是’00’
FIFO0变为满的情况,CAN_RF0R寄存器的FULL0位被置’1’
FIFO0发生溢出的情况,CAN_RF0R寄存器的FOVR0位被置’1’
FIFO1中断可由下列事件产生:
FIFO1接收到一个新报文,CAN_RF1R寄存器的FMP1位不再是’00’
FIFO1变为满的情况,CAN_RF1R寄存器的FULL1位被置’1’
FIFO1发生溢出的情况,CAN_RF1R寄存器的FOVR1位被置’1’
错误和状态变化中断可由下列事件产生:
438/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
出错情况,关于出错情况的详细信息请参考CAN错误状态寄存器(CAN_ESR)
唤醒情况,在CAN接收引脚上监视到帧起始位(SOF)
CAN进入睡眠模式。
22.9 CAN 寄存器描述
关于寄存器描述中所用到的缩略词可参见第1.1节。
必须以字(32)的方式操作这些外设寄存器。
22.9.1 寄存器访问保护
对某些寄存器的错误访问会导致一个CAN节点对整个CAN网络的暂时性干扰。因此,软件只能
CAN处于初始化模式时修改CAN_BTR寄存器。
虽然错误数据的发送对CAN网的网络层不会带来问题,但却会对应用程序造成严重影响。因
此,软件只能在发送邮箱为空的状态改变它,请参见图200
过滤器的数值只能在关闭对应过滤器组的状态下,或设置FINIT位为’1’后才能修改。此外,只有
在设置整个过滤器为初始化模式下(FINIT=1),才能修改过滤器的设置,即修改CAN_FMxR
CAN_FSxRCAN_FFAR寄存器。
22.9.2 CAN控制和状态寄存器
439/754
有关寄存器说明中的缩写,参见1.1节。
CAN主控制寄存器 (CAN_MCR)
地址偏移量: 0x00
复位值: 0x0001 0002
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DBF
rw
1514131211109876543210
RESET TTCM ABOM AWUM NART RFLM TXFP SLEEP INRQ
rs rw rw rw rw rw rw rw rw
保留
保留
res
31:15 保留,硬件强制为0
DBF调试冻结 (Debug freeze) 16
0:在调试时,CAN照常工作
1:在调试时,冻结CAN的接收/发送。仍然可以正常地读写和控制接收FIFO
RESET: bxCAN 软件复位 (bxCAN software master reset) 15
0:本外设正常工作;
1:对bxCAN进行强行复位,复位后bxCAN进入睡眠模式(FMP位和CAN_MCR寄存器被初始化
为其复位值)。此后硬件自动对该位清’0’
14:8 保留,硬件强制为0
TTCM: 时间触发通信模式 (Time triggered communication mode) 7
0:禁止时间触发通信模式;
1:允许时间触发通信模式。
: 要想了解关于时间触发通信模式的更多信息,请参考22.7.2:时间触发通信模式。
ABOM: 自动离线(Bus-Off)管理 (Automatic bus-off management) 6
该位决定CAN硬件在什么条件下可以退出离线状态。
0:离线状态的退出过程是,软件对CAN_MCR寄存器的INRQ位进行置’1随后清’0’后,一旦硬
件检测到12811位连续的隐性位,则退出离线状态;
1:一旦硬件检测到12811位连续的隐性位,则自动退出离线状态。
: 关于离线状态的更多信息,请参考22.7.6:出错管理。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
AWUM: 自动唤醒模式 (Automatic wakeup mode) 5
该位决定CAN处在睡眠模式时由硬件还是软件唤醒
0:睡眠模式通过清除CAN_MCR寄存器的SLEEP位,由软件唤醒;
1:睡眠模式通过检测CAN报文,由硬件自动唤醒。唤醒的同时,硬件自动对CAN_MSR寄存
器的SLEEPSLAK位清’0’
NART: 禁止报文自动重传 (No automatic retransmission) 4
0:按照CAN标准,CAN硬件在发送报文失败时会一直自动重传直到发送成功;
1CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失)
RFLM: 接收FIFO锁定模式 (Receive FIFO locked mode) 3
0:在接收溢出时FIFO未被锁定,当接收FIFO的报文未被读出,下一个收到的报文会覆盖原有
的报文;
1:在接收溢出时FIFO被锁定,当接收FIFO的报文未被读出,下一个收到的报文会被丢弃。
TXFP: 发送FIFO优先级 (Transmit FIFO priority) 2
当有多个报文同时在等待发送时,该位决定这些报文的发送顺序
0:优先级由报文的标识符来决定;
1:优先级由发送请求的顺序来决定。
SLEEP: 睡眠模式请求 (Sleep mode request) 1
软件对该位置’1’可以请求CAN进入睡眠模式,一旦当前CAN活动(发送或接收报文)结束,
CAN就进入睡眠。
软件对该位清’0’使CAN退出睡眠模式。
当设置了AWUM位且在CAN Rx信号中检测出SOF位时,硬件对该位清’0’
在复位后该位被置’1’,即CAN在复位后处于睡眠模式。
INRQ: 初始化请求 (Initialization request) 0
软件对该位清’0’可使CAN从初始化模式进入正常工作模式:当CAN在接收引脚检测到连续的11
个隐性位后,CAN就达到同步,并为接收和发送数据作好准备了。为此,硬件相应地对
CAN_MSR寄存器的INAK位清’0’
软件对该位置1可使CAN从正常工作模式进入初始化模式:一旦当前的CAN活动(发送或接收)
束,CAN就进入初始化模式。相应地,硬件对CAN_MSR寄存器的INAK位置’1’
CAN主状态寄存器 (CAN_MSR)
地址偏移量: 0x04
复位值: 0x0000 0C02
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
RX SAMP RXM TXM SLAKI WKUI ERRI SLAK INAK
r r r r rc w1 rc w1 rc w1 r r
保留
保留 保留
31:12 保留位,硬件强制为0
RXCAN接收电平 (CAN Rx signal) 11
该位反映CAN接收引脚(CAN_RX)的实际电平。
SAMP:上次采样值 (Last sample point) 10
CAN接收引脚的上次采样值(对应于当前接收位的值)
RXM:接收模式 (Receive mode) 9
该位为’1’表示CAN当前为接收器。
TXM:发送模式 (Transmit mode) 8
该位为’1’表示CAN当前为发送器。
7:5 保留位,硬件强制为0
440/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
SLAKI:睡眠确认中断 (Sleep acknowledge interrupt) 4
SLKIE=1,一旦CAN进入睡眠模式硬件就对该位置’1,紧接着相应的中断被触发。当设置该
位为’1’时,如果设置了CAN_IER寄存器中的SLKIE位,将产生一个状态改变中断。
软件可对该位清’0’,当SLAK位被清’0’时硬件也对该位清’0’
: SLKIE=0, 不应该查询该位,而应该查询SLAK位来获知睡眠状态。
WKUI:唤醒中断挂号 (Wakeup interrupt) 3
CAN处于睡眠状态,一旦检测到帧起始位(SOF),硬件就置该位为’1’;并且如果CAN_IER
存器的WKUIE位为’1’,则产生一个状态改变中断。
该位由软件清’0’
ERRI:出错中断挂号 (Error interrupt) 2
当检测到错误时,CAN_ESR寄存器的某位被置’1’,如果CAN_IER寄存器的相应中断使能位也
被置’1’时,则硬件对该位置’1’;如果CAN_IER寄存器的ERRIE位为’1’,则产生状态改变中断。
该位由软件清’0’
SLAK:睡眠模式确认 1
该位由硬件置’1’,指示软件CAN模块正处于睡眠模式。 该位是对软件请求进入睡眠模式的确认
(CAN_MCR寄存器的SLEEP位置’1’)
CAN退出睡眠模式时硬件对该位清’0’ (需要跟CAN总线同步) 这里跟CAN总线同步是指,硬
件需要在CANRX引脚上检测到连续的11位隐性位。
: 通过软件或硬件对CAN_MCRSLEEP位清’0’,将启动退出睡眠模式的过程。有关清除
SLEEP位的详细信息,参见CAN_MCR寄存器的AWUM位的描述。
INAK初始化确认 0
该位由硬件置’1’,指示软件CAN模块正处于初始化模式。 该位是对软件请求进入初始化模式的
确认(CAN_MCR寄存器的INRQ位置’1’)
CAN退出初始化模式时硬件对该位清’0’ (需要跟CAN总线同步)。这里跟CAN总线同步是指,
硬件需要在CANRX引脚上检测到连续的11位隐性位。
CAN发送状态寄存器 (CAN_TSR)
地址偏移量: 0x08
复位值: 0x1C00 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
LOW2 LOW1 LOW0 TME2 TME1 TME0 ABRQ2 TERR2 ALST2 TXOK2 RQCP2
r r r r r r r r rs rc w1 rc w1 rc w1 rc w1
1514131211109876543210
ABRQ1 TERR1 ALST1 TXOK1 RQCP1 ABRQ0 TERR0 ALST0 TXOK0 RQCP0
rs rc w1 rc w1 rc w1 rc w1 rs rc w1 rc w1 rc w1 rc w1
resres
CODE[1:0] 保留
保留 保留
res
LOW2: 邮箱2最低优先级标志 (Lowest priority flag for mailbox 2) 31
当多个邮箱在等待发送报文,且邮箱2的优先级最低时,硬件对该位置’1’
LOW1: 邮箱1最低优先级标志 (Lowest priority flag for mailbox 1) 30
当多个邮箱在等待发送报文,且邮箱1的优先级最低时,硬件对该位置’1’
LOW0: 邮箱0最低优先级标志 (Lowest priority flag for mailbox 0) 29
当多个邮箱在等待发送报文,且邮箱0的优先级最低时,硬件对该位置’1’
注:如果只有1个邮箱在等待,则LOW[2:0]被清’0’
TME2: 发送邮箱2 (Transmit mailbox 2 empty) 28
当邮箱2中没有等待发送的报文时,硬件对该位置’1’
TME1: 发送邮箱1 (Transmit mailbox 1 empty) 27
当邮箱1中没有等待发送的报文时,硬件对该位置’1’
TME0: 发送邮箱0 (Transmit mailbox 0 empty) 26
当邮箱0中没有等待发送的报文时,硬件对该位置’1’
441/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
CODE[1:0]: 邮箱号 (Mailbox code) 25:24
当有至少1个发送邮箱为空时,这2位表示下一个空的发送邮箱号。
当所有的发送邮箱都为空时,这2位表示优先级最低的那个发送邮箱号。
ABRQ2: 邮箱2中止发送 (Abort request for mailbox 2) 23
软件对该位置’1’,可以中止邮箱2的发送请求,当邮箱2的发送报文被清除时硬件对该位清’0’
如果邮箱2中没有等待发送的报文,则对该位置’1’没有任何效果。
22:20 保留位,硬件强制其值为0
TERR2: 邮箱2发送失败 (Transmission error of mailbox 2) 19
当邮箱2因为出错而导致发送失败时,对该位置’1’
ALST2: 邮箱2仲裁丢失 (Arbitration lost for mailbox 2) 18
当邮箱2因为仲裁丢失而导致发送失败时,对该位置’1’
TXOK2: 邮箱2发送成功 (Transmission OK of mailbox 2) 17
每次在邮箱2进行发送尝试后,硬件对该位进行更新:
0:上次发送尝试失败;
1:上次发送尝试成功。
当邮箱2的发送请求被成功完成后,硬件对该位置’1’。请参见200
RQCP2: 邮箱2请求完成 (Request completed mailbox 2) 16
当上次对邮箱2的请求(发送或中止)完成后,硬件对该位置’1’
软件对该位写’1’可以对其清’0’;当硬件接收到发送请求时也对该位清’0’(CAN_TI2R 寄存器的
TXRQ位被置’1’)
该位被清’0’时,邮箱2的其它发送状态位(TXOK2, ALST2TERR2)也被清’0’
ABRQ1: 邮箱1中止发送 (Abort request for mailbox 1) 15
软件对该位置’1’,可以中止邮箱1的发送请求,当邮箱1的发送报文被清除时硬件对该位清’0’
如果邮箱1中没有等待发送的报文,则对该位置’1’没有任何效果。
14:12 保留位,硬件强制其值为0
TERR1: 邮箱1发送失败 (Transmission error of mailbox 1) 11
当邮箱1因为出错而导致发送失败时,对该位置’1’
ALST1: 邮箱1仲裁丢失 (Arbitration lost for mailbox 1) 10
当邮箱1因为仲裁丢失而导致发送失败时,对该位置’1’
TXOK1: 邮箱1发送成功 (Transmission OK of mailbox 1) 9
每次在邮箱1进行发送尝试后,硬件对该位进行更新:
0:上次发送尝试失败;
1:上次发送尝试成功。
当邮箱1的发送请求被成功完成后,硬件对该位置’1’。请参见200
RQCP1: 邮箱1请求完成 (Request completed mailbox 1) 8
当上次对邮箱1的请求(发送或中止)完成后,硬件对该位置’1’
软件对该位写’1’可以对其清’0’;当硬件接收到发送请求时也对该位清’0’(CAN_TI1R 寄存器的
TXRQ位被置’1’)
该位被清’0’时,邮箱1的其它发送状态位(TXOK1, ALST1TERR1)也被清’0’
ABRQ0: 邮箱0中止发送 (Abort request for mailbox 0) 7
软件对该位置’1’可以中止邮箱0的发送请求,当邮箱0的发送报文被清除时硬件对该位清’0’
如果邮箱0中没有等待发送的报文,则对该位置1没有任何效果。
6:4 保留位,硬件强制其值为0
TERR0: 邮箱0发送失败 (Transmission error of mailbox 0) 3
当邮箱0因为出错而导致发送失败时,对该位置’1’
ALST0: 邮箱0仲裁丢失 (Arbitration lost for mailbox 0) 2
当邮箱0因为仲裁丢失而导致发送失败时,对该位置’1’
442/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
TXOK0: 邮箱0发送成功 (Transmission OK of mailbox 0) 1
每次在邮箱0进行发送尝试后,硬件对该位进行更新:
0:上次发送尝试失败;
1:上次发送尝试成功。
当邮箱0的发送请求被成功完成后,硬件对该位置’1’。请参见200
RQCP1: 邮箱0请求完成 (Request completed mailbox 0) 0
当上次对邮箱0的请求(发送或中止)完成后,硬件对该位置’1’
软件对该位写’1’可以对其清’0’;当硬件接收到发送请求时也对该位清’0’(CAN_TI0R 寄存器的
TXRQ位被置’1’)
该位被清’0’时,邮箱0的其它发送状态位(TXOK0, ALST0TERR0)也被清’0’
CAN接收FIFO 0寄存器 (CAN_RF0R)
地址偏移量: 0x0C
复位值: 0x00
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
RFOM0 FOVR0 FULL0 保留
rs rc w1 rc w1 r r
保留
保留 FMP0[1:0]
res
31:6 保留位,硬件强制为0
RFOM0: 释放接收FIFO 0输出邮箱 (Release FIFO 0 output mailbox) 5
软件通过对该位置’1’来释放接收FIFO的输出邮箱。如果接收FIFO为空,那么对该位置’1’没有任
何效果,即只有当FIFO中有报文时对该位置’1’才有意义。如果FIFO中有2个以上的报文,由于
FIFO的特点,软件需要释放输出邮箱才能访问第2个报文。
当输出邮箱被释放时,硬件对该位清’0’
FOVR0: FIFO 0溢出 (FIFO 0 overrun) 4
FIFO 0已满,又收到新的报文且报文符合过滤条件,硬件对该位置’1’
该位由软件清’0’
FULL0: FIFO 0 (FIFO 0 full) 3
FIFO 0中有3个报文时,硬件对该位置’1’
该位由软件清’0’
2 保留位,硬件强制其值为0
FMP0[1:0]: FIFO 0 报文数目 (FIFO 0 message pending) 1:0
FIFO 0报文数目这2位反映了当前接收FIFO 0中存放的报文数目。
每当1个新的报文被存入接收FIFO 0,硬件就对FMP01
每当软件对RFOM0位写’1’来释放输出邮箱,FMP0就被减1,直到其为0
CAN接收FIFO 1寄存器(CAN_RF1R)
地址偏移量: 0x10
复位值: 0x00
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
RFOM1 FOVR1 FULL1 保留
rs rc w1 rc w1 r r
保留
保留 FMP1[1:0]
31:6 保留位,硬件强制为0
443/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
RFOM1: 释放接收FIFO 1输出邮箱 (Release FIFO 1 output mailbox) 5
软件通过对该位置’1’来释放接收FIFO的输出邮箱。如果接收FIFO为空,那么对该位置’1’没有任
何效果,即只有当FIFO中有报文时对该位置’1’才有意义。如果FIFO中有2个以上的报文,由于
FIFO的特点,软件需要释放输出邮箱才能访问第2个报文。
当输出邮箱被释放时,硬件对该位清’0’
FOVR1: FIFO 1 溢出 (FIFO 1 overrun) 4
FIFO 1已满,又收到新的报文且报文符合过滤条件,硬件对该位置’1’
该位由软件清’0’
FULL1: FIFO 1 (FIFO 1 full) 3
FIFO 1中有3个报文时,硬件对该位置’1’
该位由软件清’0’
2 保留位,硬件强制其值为0
FMP1[1:0]: FIFO 1报文数目 (FIFO 1 message pending) 1:0
FIFO 1报文数目这2位反映了当前接收FIFO 1中存放的报文数目。
每当1个新的报文被存入接收FIFO 1,硬件就对FMP11
每当软件对RFOM1位写1来释放输出邮箱,FMP1就被减1,直到其为0
CAN中断使能寄存器 (CAN_IER)
地址偏移量: 0x14
复位值: 0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SLKIE WKUIE
rw rw
1514131211109876543210
ERRIE LECIE BOFIE EPVIE EWGIE 保留 FOVIE1 FFIE1 FMPIE1 FOVIE0 FFIE0 FMPIE0 TMEIE
rw rw rw rw rw res rw rw rw rw rw rw rw
保留
保留
res
31:18 保留位,硬件强制为0
SLKIE睡眠中断使能 (Sleep interrupt enable) 17
0:当SLAKI位被置’1’时,不产生中断;
1:当SLAKI位被置’1’时,产生中断。
WKUIE: 唤醒中断使能 (Wakeup interrupt enable) 16
0:当WKUI位被置’1’时,不产生中断;
1:当WKUI位被置’1’时,产生中断。
ERRIE: 错误中断使能 (Error interrupt enable) 15
0:当CAN_ESR寄存器有错误挂号时,不产生中断;
1:当CAN_ESR寄存器有错误挂号时,产生中断。
14:12 保留位,硬件强制为0
LECIE: 上次错误号中断使能 (Last error code interrupt enable) 11
0:当检测到错误,硬件设置LEC[2:0]时,不设置ERRI位;
1:当检测到错误,硬件设置LEC[2:0]时,设置ERRI位为’1’
BOFIE: 离线中断使能 (Bus-off interrupt enable) 10
0:当BOFF位被置’1’时,不设置ERRI位;
1:当BOFF位被置’1’时,设置ERRI位为’1’
EPVIE: 错误被动中断使能 (Error Passive Interrupt Enable) 9
0:当EPVF位被置’1’时,不设置ERRI位;
1:当EPVF位被置’1’时,设置ERRI位为’1’
444/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
EWGIE: 错误警告中断使能 (Error warning interrupt enable) 8
0:当EWGF位被置’1’时,不设置ERRI位;
1:当EWGF位被置’1’时,设置ERRI位为’1’
7 保留位,硬件强制为0
FOVIE1: FIFO 1溢出中断使能 (FIFO overrun interrupt enable) 6
0:当FIFO 1FOVR位被置’1’时,不产生中断;
1:当FIFO 1FOVR位被置’1’时,产生中断。
FFIE1: FIFO 1满中断使能 (FIFO full interrupt enable) 5
0:当FIFO 1FULL位被置’1时,不产生中断;
1:当FIFO 1FULL位被置’1时,产生中断。
FMPIE1: FIFO 1消息挂号中断使能 (FIFO message pending interrupt enable) 4
0:当FIFO 1FMP[1:0]位为非0时,不产生中断;
1:当FIFO 1FMP[1:0]位为非0时,产生中断。
FOVIE0: FIFO 0溢出中断使能 (FIFO overrun interrupt enable) 3
0:当FIFO 0FOVR位被置’1’时,不产生中断;
1:当FIFO 0FOVR位被置’1’时,产生中断。
FFIE0: FIFO 0满中断使能 (FIFO full interrupt enable) 2
0:当FIFO 0FULL位被置’1时,不产生中断;
1:当FIFO 0FULL位被置’1时,产生中断。
FMPIE0: FIFO 0消息挂号中断使能 (FIFO message pending interrupt enable) 1
0:当FIFO 0FMP[1:0]位为非0时,不产生中断;
1:当FIFO 0FMP[1:0]位为非0时,产生中断。
TMEIE: 发送邮箱空中断使能 (Transmit mailbox empty interrupt enable) 0
0:当RQCPx位被置’1’时,不产生中断;
1:当RQCPx位被置’1’时,产生中断。
: 请参考22.8
445/754
bxCAN中断。
CAN错误状态寄存器 (CAN_ESR)
地址偏移量: 0x18
复位值: 0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rrrrrrrrrrrrrrrr
1514131211109876543210
保留 BOFF EPVF WEGF
rwrwrw rrr
REC[7:0] TEC[7:0]
保留 LEC[2:0]
REC[7:0]: 接收错误计数器 (Receive error counter) 31:24
这个计数器按照CAN协议的故障界定机制的接收部分实现。按照CAN的标准,当接收出错时,
根据出错的条件,该计数器1或加8;而在每次接收成功后,该计数器减1,或当该计数器的
值大于127时,设置它的值为120。当该计数器的值超过127时,CAN进入错误被动状态。
TEC[7:0]: 9位发送错误计数器的低8 (Least significant byte of the 9-bit transmit error
counter)
23:16
与上面相似,这个计数器按照CAN协议的故障界定机制的发送部分实现。
15:7 保留位,硬件强制为0
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
LEC[2:0]: 上次错误代码 (Last error code) 6:4
在检测到CAN总线上发生错误时,硬件根据出错情况设置。当报文被正确发送或接收后,硬件
清除其值为’0’
硬件没有使用错误代码7,软件可以设置该值,从而可以检测代码的更新。
000: 没有错误;
001: 位填充错;
010: 格式(Form)错;
011: 确认(ACK)错;
100: 隐性位错;
101: 显性位错;
110: CRC错;
111: 由软件设置。
3 保留位,硬件强制为0
BOFF: 离线标志 (Bus-off flag) 2
当进入离线状态时,硬件对该位置’1’。当发送错误计数器TEC溢出,即大于255时,CAN进入
离线状态。请参考22.7.6
EPVF: 错误被动标志 (Error passive flag) 1
当出错次数达到错误被动的阈值时,硬件对该位置’1’
(接收错误计数器或发送错误计数器的值>127)
EWGF: 错误警告标志 (Error warning flag) 0
当出错次数达到警告的阈值时,硬件对该位置’1’
(接收错误计数器或发送错误计数器的值96)
CAN位时序寄存器 (CAN_BTR)
地址偏移量: 0x1C
复位值: 0x0123 0000
注:
CAN
处于初始化模式时,该寄存器只能由软件访问。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SILM LBKM 保留
rw rw rw rw res rw rw rw rw rw rw rw
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw
res
BRP[9:0]
保留 SJW[1:0] TS2[2:0] TS1[3:0]
保留
res
SILM: 静默模式(用于调试) (Silent mode (debug)) 31
0: 正常状态;
1: 静默模式。
LBKM: 环回模式(用于调试) (Loop back mode (debug)) 30
0: 禁止环回模式;
1: 允许环回模式。
29:26 保留位,硬件强制为0
SJW[1:0]: 重新同步跳跃宽度 (Resynchronization jump width) 25:24
为了重新同步,该位域定义了CAN硬件在每位中可以延长或缩短多少个时间单元的上限。
tRJW = tCAN x (SJW[1:0] + 1)
23 保留位,硬件强制为0
TS2[2:0]: 时间段2 (Time segment 2) 22:20
该位域定义了时间段2占用了多少个时间单元
tBS2 = tCAN x (TS2[2:0] + 1)
446/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
TS1[3:0]: 时间段1 (Time segment 1) 19:16
该位域定义了时间段1占用了多少个时间单元
tBS1 = tCAN x (TS1[3:0] + 1)
22.7.7
447/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
关于位时间特性的详细信息,请参考 节位时间特性。
15:10 保留位,硬件强制其值为0
BRP[9:0]: 波特率分频器 (Baud rate prescaler) 9:0
该位域定义了时间单元(tq)的时间长度
tq = (BRP[9:0]+1) x tPCLK
22.9.3 CAN邮箱寄存器
本节描述发送和接收邮箱寄存器。关于寄存器映像的详细信息,请参考22.7.5 节报文存储
除了下述例外,发送和接收邮箱几乎一样:
CAN_RDTxR 寄存器的FMI域;
接收邮箱是只读的;
发送邮箱只有在它为空时才是可写的,CAN_TSR寄存器的相应TME位为’1’,表示发送邮箱
为空。
共有3个发送邮箱和2个接收邮箱。每个接收邮箱3级深度的FIFO,并且只能访问FIFO中最先
收到的报文。
每个邮箱包含4个寄存器。
发送邮箱标识符寄存器 (CAN_TIxR) (x=0..2)
地址偏移量: 0x1800x1900x1A0
复位值: 0xXXXX XXXXX=未定义位(除了第0位,复位时TXRQ=0)
注:
1
当其所属的邮箱处在等待发送的状态时,该寄存器是写保护的
2
该寄存器实现了发送请求控制功能
(
0
)
-复位值为
0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
IDE RTR TXRQ
rw
STID[10:0]/EXID[28:18] EXID[17:13]
EXID[12:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
STID[10:0]/EXID[28:18]: 标准标识符或扩展标识符 (Standard identifier or extended
identifier)
31:21
依据IDE位的内容,这些位或是标准标识符,或是扩展身份标识的高字节。
EXID[17:0]: 扩展标识符 (Extended identifier) 20:3
扩展身份标识的低字节。
控制器局域网(bxCAN) STM32F10xxx参考手册
IDE: 标识符选择 (Identifier extension) 2
该位决定发送邮箱中报文使用的标识符类型
0:使用标准标识符;
1:使用扩展标识符。
RTR: 远程发送请求 (Remote transmission request) 1
0:数据帧;
1:远程帧。
TXRQ: 发送数据请求 (Transmit mailbox request) 0
由软件对其置’1’,来请求发送邮箱的数据。当数据发送完成,邮箱为空时,硬件对其清’0’
发送邮箱数据长度和时间戳寄存器 (CAN_TDTxR) (x=0..2)
当邮箱不在空置状态时,该寄存器的所有位为写保护。
地址偏移量:0x1840x1940x1A4
复位值:未定义
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
TGT
rw rw rw rw rw
res res
TIME[15:0]
保留 保留 DLC[3:0]
TIME[15:0]: 报文时间戳 (Message time stamp) 31:16
该域包含了,在发送该报文SOF的时刻,16位定时器的值。
15:9 保留位
TGT: 发送时间戳 (Transmit global time) 8
只有在CAN处于时间触发通信模式,即CAN_MCR寄存器的TTCM位为’1’时,该位才有效。
0:不发送时间戳TIME[15:0]
1:发送时间戳TIME[15:0]。在长度为8的报文中,时间戳TIME[15:0]是最后2个发送的字节:
TIME[7:0]作为第7个字节,TIME[15:8]为第8个字节,它们替换了写入CAN_TDHxR[31:16]
数据(DATA6[7:0]DATA7[7:0])。为了把时间戳的2个字节发送出去,DLC必须编程为8
7:4 保留位。
DLC[15:0]: 发送数据长度 (Data length code) 3:0
该域指定了数据报文的数据长度或者远程帧请求的数据长度。1个报文包含08个字节数据,
而这由DLC决定。
发送邮箱低字节数据寄存器 (CAN_TDLxR) (x=0..2)
当邮箱不在空置状态时,该寄存器的所有位为写保护。
地址偏移量:0x1880x1980x1A8
复位值:未定义位
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
DATA3[7:0] DATA2[7:0]
DATA1[7:0] DATA0[7:0]
DATA3[7:0] : 数据字节3 (Data byte 3) 31:24
报文的数据字节3
DATA2[7:0] : 数据字节2 (Data byte 2) 23:16
报文的数据字节2
448/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
DATA1[7:0] : 数据字节1 (Data byte 1) 15:8
报文的数据字节1
DATA0[7:0] : 数据字节0 (Data byte 0) 7:0
报文的数据字节0
报文包含08个字节数据,且从字节0开始。
发送邮箱高字节数据寄存器 (CAN_TDHxR) (x=0..2)
当邮箱不在空置状态时,该寄存器的所有位为写保护。
地址偏移量:0x18C0x19C0x1AC
复位值:未定义位
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
DATA7[7:0] DATA6[7:0]
DATA5[7:0] DATA4[7:0]
DATA7[7:0] : 数据字节7 (Data byte 7) 31:24
报文的数据字节7
: 如果CAN_MCR寄存器的TTCM位为’1,且该邮箱的TGT位也为’1’,那么DATA7DATA6
将被TIME时间戳代替。
DATA6[7:0] : 数据字节6 (Data byte 6) 23:16
报文的数据字节6
DATA5[7:0] : 数据字节5 (Data byte 5) 15:8
报文的数据字节5
DATA4[7:0] : 数据字节4 (Data byte 4) 7:0
报文的数据字节4
接收FIFO邮箱标识符寄存器 (CAN_RIxR) (x=0..1)
地址偏移量:0x1B00x1C0
复位值:未定义位
注:
所有接收邮箱寄存器都是只读的。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rrrrrrrrrrrrrrrr
1514131211109876543210
IDE RTR 保留
rrrrrrrrrrrrrrrres
STID[10:0]/EXID[28:18] EXID[17:13]
EXID[12:0]
STID[10:0]/EXID[28:18]: 标准标识符或扩展标识符 (Standard identifier or extended
identifier)
31:21
依据IDE位的内容,这些位或是标准标识符,或是扩展身份标识的高字节。
EXID[17:0]: 扩展标识符 (Extended identifier) 20:3
扩展标识符的低字节。
IDE: 标识符选择 (Identifier extension) 2
该位决定接收邮箱中报文使用的标识符类型
0:使用标准标识符;
1:使用扩展标识符。
449/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
RTR: 远程发送请求 (Remote transmission request) 1
0:数据帧;
1:远程帧。
0 保留位。
接收FIFO邮箱数据长度和时间戳寄存器 (CAN_RDTxR) (x=0..1)
地址偏移量:0x1B40x1C4
复位值:未定义
注:
所有接收邮箱寄存器都是只读的。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rrrrrrrrrrrrrrrr
1514131211109876543210
rrrrrrrr rrrr
res
TIME[15:0]
保留 DLC[3:0]FMI[7:0]
TIME[15:0]: 报文时间戳 (Message time stamp) 31:16
该域包含了,在接收该报文SOF的时刻,16位定时器的值。
FMI[15:0]: 过滤器匹配序号 (Filter match index) 15:8
这里是存在邮箱中的信息传送的过滤器序号。关于标识符过滤的细节,请参考22.7.4中有关
滤器匹配序号。
7:4 保留位,硬件强制为0
DLC[15:0]: 接收数据长度 (Data length code) 3:0
该域表明接收数据帧的数据长度(08)。对于远程帧请求,数据长度DLC恒为0
接收FIFO邮箱低字节数据寄存器 (CAN_RDLxR) (x=0..1)
地址偏移量:0x1B80x1C8
复位值:未定义位
注:
所有接收邮箱寄存器都是只读的。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rrrrrrrrrrrrrrrr
1514131211109876543210
rrrrrrrrrrrrrrrr
DATA3[7:0] DATA2[7:0]
DATA1[7:0] DATA0[7:0]
DATA3[7:0] : 数据字节3 (Data byte 3) 31:24
报文的数据字节3
DATA2[7:0] : 数据字节2 (Data byte 2) 23:16
报文的数据字节2
DATA1[7:0] : 数据字节1 (Data byte 1) 15:8
报文的数据字节1
DATA0[7:0] : 数据字节0 (Data byte 0) 7:0
报文的数据字节0
报文包含08个字节数据,且从字节0开始。
接收FIFO邮箱高字节数据寄存器 (CAN_RDHxR) (x=0..1)
地址偏移量:0x1BC0x1CC
复位值:未定义位
450/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
注:
所有接收邮箱寄存器都是只读的。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rrrrrrrrrrrrrrrr
1514131211109876543210
rrrrrrrrrrrrrrrr
DATA7[7:0] DATA6[7:0]
DATA5[7:0] DATA4[7:0]
DATA7[7:0] : 数据字节7 (Data byte 7) 31:24
报文的数据字节7
DATA6[7:0] : 数据字节6 (Data byte 6) 23:16
报文的数据字节6
DATA5[7:0] : 数据字节5 (Data byte 5) 15:8
报文的数据字节5
DATA4[7:0] : 数据字节4 (Data byte 4) 7:0
报文的数据字节4
22.9.4 CAN过滤器寄存器
CAN 过滤器主控寄存器 (CAN_FMR)
地址偏移量: 0x200
复位值: 0x2A1C 0E01
注:
该寄存器的非保留位完全由软件控制。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FINIT
rw
FINIT
rw
res rw
保留
res
保留
保留
保留 CAN2SB[5:0]
31:14 保留位,强制为复位值。
CAN2SB[5:0]CAN2开始组 (CAN2 start bank) 13:8
这些位由软件置’1’、清’0’。它们定义了CAN2()接口的开始组,范围是1~27
注:这些位只出现在互联型产品中,其它产品中为保留位。
7:1 保留位,强制为复位值。
FINIT : 过滤器初始化模式 (Filter init mode) 0
针对所有过滤器组的初始化模式设置。
0: 过滤器组工作在正常模式;
1: 过滤器组工作在初始化模式。
CAN 过滤器模式寄存器 (CAN_FM1R)
地址偏移量: 0x204
复位值: 0x0000 0000
注:
只有在设置
CAN_FMR(FINIT=1)
,使过滤器处于初始化模式下,才能对该寄存器写入。
451/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
FBM27 FBM26 FBM25 FBM24 FBM23 FBM22 FBM21 FBM20 FBM19 FBM18 FBM17 FBM16
rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
FBM15 FBM14 FBM13 FBM12 FBM11 FBM10 FBM9 FBM8 FBM7 FBM6 FBM5 FBM4 FBM3 FBM2 FBM1 FBM0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
注:
请参考图
202
452/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
:过滤器组位宽设置-寄存器组织。
31:28 保留位,硬件强制为0
FBMx : 过滤器模式 (Filter mode) 13:0
过滤器组x的工作模式。
0: 过滤器组x232位寄存器工作在标识符屏蔽位模式;
1: 过滤器组x232位寄存器工作在标识符列表模式。
注:位
27:14
只出现在互联型产品中,其它产品为保留位。
CAN 过滤器位宽寄存器 (CAN_FS1R)
地址偏移量: 0x20C
复位值: 0x0000 0000
注:
只有在设置
CAN_FMR(FINIT=1)
,使过滤器处于初始化模式下,才能对该寄存器写入。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
FSC27 FSC26 FSC25 FSC24 FSC23 FSC22 FSC21 FSC20 FSC19 FSC18 FSC17 FSC16
rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
FSC15 FSC14 FSC13 FSC12 FSC11 FSC10 FSC9 FSC8 FSC7 FSC6 FSC5 FSC4 FSC3 FSC2 FSC1 FSC0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
注:
请参考图
202
:过滤器组位宽设置-寄存器组织。
31:28 保留位,硬件强制为0
FSCx : 过滤器位宽设置 (Filter scale configuration) 13:0
过滤器组x(130)的位宽。
0:过滤器位宽为216位;
1:过滤器位宽为单个32位。
注:位
27:14
只出现在互联型产品中,其它产品为保留位。
CAN 过滤器FIFO关联寄存器 (CAN_FFA1R)
地址偏移量: 0x214
复位值: 0x0000 0000
注:
只有在设置
CAN_FMR(FINIT=1)
,使过滤器处于初始化模式下,才能对该寄存器写入。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
FFA27 FFA26 FFA25 FFA24 FFA23 FFA22 FFA21 FFA20 FFA19 FFA18 FFA17 FFA16
rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
FFA15 FFA14 FFA13 FFA12 FFA11 FFA10 FFA9 FFA8 FFA7 FFA6 FFA5 FFA4 FFA3 FFA2 FFA1 FFA0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
31:14 保留位,硬件强制为0
FFAx : 过滤器位宽设置 (Filter FIFO assignment for filter x) 13:0
报文在通过了某过滤器的过滤后,将被存放到其关联的FIFO中。
0:过滤器被关联到FIFO0
控制器局域网(bxCAN) STM32F10xxx参考手册
1:过滤器被关联到FIFO1
注:位
27:14
只出现在互联型产品中,其它产品为保留位。
CAN 过滤器激活寄存器 (CAN_FA1R)
地址偏移量: 0x21C
复位值: 0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
FACT27 FACT26 FACT25 FACT24 FACT23 FACT22 FACT21 FACT20 FACT19 FACT18 FACT17 FACT16
rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FACT15 FACT14 FACT13 FACT12 FACT11 FACT10 FACT9 FACT8 FACT7 FACT6 FACT5 FACT4 FACT3 FACT2 FACT1 FACT0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
31:14 保留位,硬件强制为0
FACTx :过滤器激活 (Filter active) 13:0
软件对某位设置’1’来激活相应的过滤器。只有对FACTx位清’0’,或对CAN_FMR存器的
FINIT位设置’1’后,才能修改相应的过滤器寄存器x(CAN_FxR[0:1])
0:过滤器被禁用;
1:过滤器被激活。
注:位
27:14
只出现在互联型产品中,其它产品为保留位。
CAN 过滤器组i的寄存器x (CAN_FiRx) (互联产品中i=0..27,其它产品中i0..13
x=1..2)
地址偏移量:0x240h..0x31C
复位值:未定义位
注:
在互联型产品中共有
14
组过滤器:
i=0..27
;在其它产品中共有
14
组过滤器:
i=0..13
。每组过滤
器由
2
32
位的寄存器,
CAN_FiR[2:1]
组成。
只有在
CAN_FAxR
寄存器相应的
FACTx
位清
’0’
,或
CAN_FMR
寄存器的
FINIT
位为
’1’
时,才能修
改相应的过滤器寄存器。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
FB31 FB30 FB29 FB28 FB27 FB26 FB25 FB24 FB23 FB22 FB21 FB20 FB19 FB18 FB17 FB16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
1514131211109876543210
FB15 FB14 FB13 FB12 FB11 FB10 FB9 FB8 FB7 FB6 FB5 FB4 FB3 FB2 FB1 FB0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
在所有的配置情况下:
453/754
31:0 FB[31:0]过滤器位 (Filter bits)
标识符模式
寄存器的每位对应于所期望的标识符的相应位的电平。
0: 期望相应位为显性位;
1: 期望相应位为隐性位。
屏蔽位模式
寄存器的每位指示是否对应的标识符寄存器位一定要与期望的标识符的相应位一致。
0: 不关心,该位不用于比较;
1: 必须匹配,到来的标识符位必须与滤波器对应的标识符寄存器位相一致。
注:
根据过滤器位宽和模式的不同设置,过滤器组中的两个寄存器的功能也不尽相同。关于过滤器
的映射,功能描述和屏蔽寄存器的关联,请参见
22.7.4
节标识符过滤。
屏蔽位模式下的屏蔽/标识符寄存器,跟标识符列表模式下的寄存器位定义相同。
关于过滤器组寄存器的地址,请参见表165
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
22.9.5 bxCAN寄存器列表
1关于寄存器的起始地址,参见 。在互联型产品中,0x200~0x31C之间的寄存器只出现在
CAN1中。
165 bxCAN-寄存器列表及其复位值
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
CAN_MCR
DBF
RESET
TTCM
ABOM
AWUM
NART
RFLM
TXFP
SLEEP
INRQ
复位值
10 00000010
CAN_MSR
RX
SAMP
RXM
TXM
SLAKI
WKUI
ERRI
SLAK
INAK
复位值
1100 00010
CAN_TSR
ABRQ2
TERR2
ALST2
TXOK2
RQCP2
ABRQ1
TERR1
ALST1
TXOK1
RQCP1
ABRQ0
TERR0
ALST0
TXOK0
RQCP0
复位值
000111000 00000 00000 0000
CAN_RF0R
RFOM0
FOVR0
FULL0
复位值
000 00
CAN_RF1F
RFOM1
FOVR1
FULL1
复位值
000 00
CAN_IER
SLKIE
WKUIE
ERRIE
LECIE
BOFIE
EPVIE
EWGIE
FOVIE
FFIE1
FMPIE
FOVIE
FFIE0
FMPIE
TMEIE
复位值
000 0000 0000000
CAN_ESR
BOFF
EPVF
EWGF
复位值
0000000000000000 000 000
CAN_BTR
SILM
LBKM
复位值
00 00 0100011 0000000000
020h~
17Fh
CAN_TI0R
IDE
RTR
TXRQ
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0
CAN_TDT0R
TGT
复位值
xxxxxxxxxxxxxxxx x xxxx
CAN_TDL0R
保留
DATA0[7:0]
000h
004h
014h
010h
00Ch
008h
保留 DLC[3:0]
184h
DATA3[7:0] DATA2[7:0] DATA1[7:0]
TIME[15:0] 保留
保留
保留
SJW
[1:0]
保留
TS2
[2:0] TS1[3:0]
保留 保留
018h
01Ch
REC[7:0] TEC[7:0] 保留
保留 BRP[9:0]
保留
保留
保留
FMP1
[1:0]
180h
保留
保留
STID[10:0]/EXUD[28:18] EXID[17:0]
LEC
[2:0]
保留
保留
FMP0
[1:0]
保留
保留
保留 保留
LOW
[2:0]
TME
[2:0]
CODE
[1:0]
保留
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CAN_TDH0R
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
18Ch DATA7[7:0] DATA6[7:0] DATA5[7:0] DATA4[7:0]
188h
454/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
CAN_TI1R
IDE
RTR
TXRQ
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0
CAN_TDT1R
TGT
复位值
xxxxxxxxxxxxxxxx x xxxx
CAN_TDL1R
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CAN_TDH1R
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CAN_TI2R
IDE
RTR
TXR
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0
CAN_TDT2R
TGT
复位值
xxxxxxxxxxxxxxxx x xxxx
CAN_TDL2R
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CAN_TDH2R
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CAN_RI0R
IDE
RTR
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CAN_RDT0R
复位值
xxxxxxxxxxxxxxxxxxxxxxxx xxxx
CAN_RDL0R
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CAN_RDH0R
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CAN_RI1R
IDE
RTR
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CAN_RDT1R
复位值
xxxxxxxxxxxxxxxxxxxxxxxx xxxx
CAN_RDL1R
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CAN_RDH1R
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
1D0h~
1FFh
DATA0[7:0]
1CCh DATA7[7:0] DATA6[7:0] DATA5[7:0] DATA4[7:0]
1C8h DATA3[7:0] DATA2[7:0] DATA1[7:0]
保留
1C0h STID[10:0]/EXID[28:18] EXID[17:0]
保留
1B0h
1BCh
DATA0[7:0]
DATA7[7:0] DATA6[7:0]
DATA1[7:0] DATA0[7:0]
DATA7[7:0] DATA6[7:0] DATA5[7:0] DATA4[7:0]
STID[10:0]/EXID[28:18] EXID[17:0]
TIME[15:0] 保留 保留 DLC[3:0]
DATA3[7:0] DATA2[7:0] DATA1[7:0] DATA0[7:0]
STID[10:0]/EXID[28:18] EXID[17:0]
TIME[15:0] 保留 保留 DLC[3:0]
DATA7[7:0] DATA6[7:0] DATA5[7:0] DATA4[7:0]
1C4h TIME[15:0] FMI[7:0]
1A8h
1ACh
DATA3[7:0] DATA2[7:0]
STID[10:0]/EXID[28:18] EXID[17:0]
保留
保留 DLC[3:0]
1B4h
1B8h DATA3[7:0] DATA2[7:0] DATA1[7:0]
TIME[15:0] FMI[7:0]
DATA5[7:0] DATA4[7:0]
保留
190h
194h
1A4h
1A0h
19Ch
198h
DLC[3:0]
455/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
控制器局域网(bxCAN) STM32F10xxx参考手册
456/754
参照200912 RM0008 Reference Manual 英文第10
偏移
寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
CAN_FMR
FINIT
复位值
001110 1
CAN_FM1R
复位值
0000000000000000000000000000
CAN_FS1R
复位值
0000000000000000000000000000
CAN_FFA1R
复位值
0000000000000000000000000000
CAN_FA1R
复位值
0000000000000000000000000000
CAN_F0R1
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CAN_F0R2
复位值
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
CAN_F1R1
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CAN_F1R2
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.
.
.
.
.
.
CAN_F27R1
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CAN_F27R2
复位值
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
保留 FFA[27:0]
保留
318h
FB[31:0]
FB[31:0]
保留
保留
FB[31:0]
FB[31:0]
保留
保留
保留 FSC[27:0]
保留 保留
CAN2SB[5:0]
保留 FBM[27:0]
FB[31:0]
31Ch
244h
218h
21Ch
224~
23Fh
240h
240h
220h
244h
保留 FACT[27:0]
FB[31:0]
200h
204h
214h
210h
20Ch
208h
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
23 串行外设接口(SPI)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
23.1 SPI简介
在大容量产品和互联型产品上,SPI接口可以配置为支持SPI协议或者支持I2S音频协议。SPI
口默认工作在SPI方式,可以通过软件把功能从SPI模式切换到I2S模式。
在小容量和中容量产品上,不支持I2S音频协议。
串行外设接口(SPI)允许芯片与外部设备以半/双工、同步、串行方式通信。此接口可以被配
成主模式,并为外部从设备提供通信时钟(SCK)。接口还能以多主配置方式工作。
它可用于多种用途,包括使用一条双向数据线的双线单工同步传输,还可使用CRC校验的可靠
通信。
I2S也是一种3引脚的同步串行接口通讯协议。它支持四种音频标准,包括飞利浦I2S标准,MSB
LSB对齐标准,以及PCM标准。它在半双工通讯中,可以工作在主和从2种模式下。当它作为
主设备时,通过接口向外部的从设备提供时钟信号。
警告: 由于SPI3/I2S3 的部分引脚与JTAG 引脚共享(SPI3_NSS/I2S3_WS JTDI
SPI3_SCK/I2S3_CKJTDO),因此这些引脚不受IO控制器控制,他们(在每次复位后)
被默认保留为JTAG用途。如果用户想把引脚配置给SPI3/I2S3,必须(在调试时)关闭
JTAG并切换至SWD接口,或者(在标准应用时)同时关闭JTAGSWD接口。详见第
8.3.5
457/754
节:JTAG/SWD复用功能重映射
23.2 SPII2S主要特征
23.2.1 SPI特征
3线全双工同步传输
带或不带第三根双向数据线的双线单工同步传输
816位传输帧格式选择
主或从操作
支持多主模式
8个主模式波特率预分频系数(最大为fPCLK/2)
从模式频率 (最大为fPCLK/2)
主模式和从模式的快速通信
主模式和从模式下均可以由软件或硬件进行NSS管理:主/从操作模式的动态改变
可编程的时钟极性和相位
可编程的数据顺序,MSB在前或LSB在前
可触发中断的专用发送和接收标志
SPI总线忙状态标志
支持可靠通信的硬件CRC
在发送模式下,CRC值可以被作为最后一个字节发送
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
在全双工模式中对接收到的最后一个字节自动进行CRC校验
可触发中断的主模式故障、过载以及CRC错误标志
支持DMA功能的1字节发送和接收缓冲器:产生发送和接受请求
23.2.2 I2S功能
单工通信(仅发送或接收)
主或者从操作
8位线性可编程预分频器,获得精确的音频采样频率(8KHz96kHz)
数据格式可以是16位,24位或者32
音频信道固定数据包帧为16(16位数据帧)32(162432位数据帧)
可编程的时钟极性(稳定态)
从发送模式下的下溢标志位和主/从接收模式下的溢出标志位
16位数据寄存器用来发送和接收,在通道两端各有一个寄存器
支持的I2S协议:
I
2S飞利浦标准
MSB对齐标准(左对齐)
LSB对齐标准(右对齐)
PCM标准(16位通道帧上带长或短帧同步或者16位数据帧扩展为32位通道帧)
数据方向总是MSB在先
发送和接收都具有DMA能力
主时钟可以输出到外部音频设备,比率固定为256xFs(Fs为音频采样频率)
在互联型产品中,两个I2S模块(I2S2I2S3)有一个专用的PLL(PLL3),产生更加精准得时钟
458/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
23.3 SPI功能描述
23.3.1 概述
SPI的方框图见下图。
209 SPI框图
通常SPI通过4个引脚与外部器件相连:
MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
SCK:串口时钟,作为主设备的输出,从设备的输入
NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为“片
选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。从设备的NSS
引脚可以由主设备的一个标准I/O引脚来驱动。一旦被使能(SSOE)NSS引脚也可以作为
输出引脚,并在SPI处于主模式时拉低;此时,所有的SPI设备,如果它们的NSS引脚连接
到主设备的NSS引脚,则会检测到低电平,如果它们被设置为NSS硬件模式,就会自动进
入从设备状态。当配置为主设备、NSS配置为输入引脚(MSTR=1SSOE=0)时,如果NSS
被拉低,则这个SPI设备进入主模式失败状态:即MSTR位被自动清除,此设备进入从模式
(参见)
下图是一个单主和单从设备互连的例子。
459/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
210 单主和单从应用
1. 这里NSS引脚设置为输入
MOSI脚相互连接,MISO脚相互连接。这样,数据在主和从之间串行地传输(MSB位在前)
通信总是由主设备发起。主设备通过MOSI脚把数据发送给从设备,从设备通过MISO引脚回传
数据。这意味全双工通信的数据输出和数据输入是用同一个时钟信号同步的;时钟信号由主设
备通过SCK脚提供。
从选择(NSS)脚管理
2NSS模式:
211 软件NSS模式:可以通过设置SPI_CR1寄存器的SSM位来使能这种模式()。在这种
模式下NSS引脚可以用作它用,而内部NSS信号电平可以通过写SPI_CR1SSI位来驱动
硬件NSS模式,分两种情况:
NSS输出被使能:当STM32F10xxx工作为主SPI,并且NSS输出已经通过SPI_CR2寄存
器的SSOE位使能,这时NSS引脚被拉低,所有NSS引脚与这个主SPINSS引脚相连并
配置为硬件NSSSPI设备,将自动变成从SPI设备。
当一个SPI设备需要发送广播数据,它必须拉低NSS信号,以通知所有其它的设备它是主
设备;如果它不能拉低NSS,这意味着总线上有另外一个主设备在通信,这时将产生一个
硬件失败错误(Hard Fault)
NSS输出被关闭:允许操作于多主环境。
211/软件的从选择管理
时钟信号的相位和极性
SPI_CR寄存器的CPOLCPHA位,能够组合成四种可能的时序关系。CPOL(时钟极性)位控制
在没有数据传输时时钟的空闲状态电平,此位对主模式和从模式下的设备都有效。如果CPOL
’0’SCK引脚在空闲状态保持低电平;如果CPOL被置’1’SCK引脚在空闲状态保持高电平。
如果CPHA(时钟相位)位被置’1’SCK时钟的第二个边沿(CPOL位为0时就是下降沿,CPOL
’1’时就是上升沿)进行数据位的采样,数据在第二个时钟边沿被锁存。如果CPHA位被清’0’
SCK时钟的第一边沿(CPOL位为’0’时就是下降沿,CPOL位为’1’时就是上升沿)进行数据位采
样,数据在第一个时钟边沿被锁存。
460/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
CPOL时钟极性和CPHA时钟相位的组合选择数据捕捉的时钟边沿。
212显示了SPI传输的4CPHACPOL位组合。此图可以解释为主设备和从设备的SCK脚、
MISO脚、MOSI脚直接连接的主或从时序图。
注意:
1.
在改变
CPOL/CPHA
位之前,必须清除
SPE
位将
SPI
禁止。
2.
主和从必须配置成相同的时序模式。
3. SCK
的空闲状态必须和
SPI_CR1
寄存器指定的极性一致
(CPOL
’1’
时,空闲时应上拉
SCK
高电平;
CPOL
’0’
时,空闲时应下拉
SCK
为低电平
)
4.
数据帧格式
(8
位或
16
)
SPI_CR1
寄存器的
DFF
位选择,并且决定发送
/
接收的数据长度。
212 数据时钟时序图
数据帧格式
根据SPI_CR1寄存器中的LSBFIRST位,输出数据位时可以MSB在先也可以LSB在先。
根据SPI_CR1寄存器的DFF位,每个数据帧可以是8位或是16位。所选择的数据帧格式对发送和
/或接收都有效。
461/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
23.3.2 配置SPI为从模式
在从模式下,SCK脚用于接收从主设备来的串行时钟。SPI_CR1寄存器中BR[2:0]的设置不影
响数据传输速率。
注:
建议在主设备发送时钟之前使能
SPI
从设备,否则可能会发生意外的数据传输。在通信时钟的第
一个边沿到来之前或正在进行的通信结束之前,从设备的数据寄存器必须就绪。在使能从设备
和主设备之前,通信时钟的极性必须处于稳定的数值。
请按照以下步骤配置SPI为从模式:
配置步骤
1. 设置DFF位以定义数据帧格式为8位或16位。
2. 选择CPOLCPHA位来定义数据传输和串行时钟之间的相位关系(见图212)。为保证正确
的数据传输,从设备和主设备的CPOLCPHA位必须配置成相同的方式。
3. 帧格式(SPI_CR1寄存器中的LSBFIRST位定义的”MSB在前还是”LSB在前”)必须与主设备
相同。
4. 硬件模式下(参考从选择(NSS)脚管理部分),在完整的数据帧(8位或16)传输过程中,
NSS引脚必须为低电平。在NSS软件模式下,设置SPI_CR1寄存器中的SSM位并清除SSI
位。
5. 清除MSTR位、设置SPE(SPI_CR1寄存器),使相应引脚工作于SPI模式下。
在这个配置中,MOSI引脚是数据输入,MISO引脚是数据输出。
数据发送过程
在写操作中,数据字被并行地写入发送缓冲器。
当从设备收到时钟信号,并且在MOSI引脚上出现第一个数据位时,发送过程开始(译注:此时
第一个位被发送出去)。余下的位(对于8位数据帧格式,还有7位;对于16位数据帧格式,还有
15)被装进移位寄存器。当发送缓冲器中的数据传输到移位寄存器时,SPI_SP寄存器的TXE
标志被设置,如果设置了SPI_CR2寄存器的TXEIE位,将会产生中断。
数据接收过程
对于接收器,当数据接收完成时:
移位寄存器中的数据传送到接收缓冲器,SPI_SR 寄存器中的RXNE标志被设置。
如果设置了SPI_CR2寄存器中的RXNEIE位,则产生中断。
在最后一个采样时钟边沿后,RXNE位被置’1’,移位寄存器中接收到的数据字节被传送到接收缓
冲器。当读SPI_DR寄存器时,SPI设备返回这个接收缓冲器的数值。
SPI_DR寄存器时,RXNE位被清除。
23.3.3 配置SPI为主模式
在主配置时,在SCK脚产生串行时钟。
配置步骤
1. 通过SPI_CR1寄存器的BR[2:0]位定义串行时钟波特率。
2. 选择CPOLCPHA位,定义数据传输和串行时钟间的相位关系(见图212)
3. 设置DFF位来定义8位或16位数据帧格式。
4. 配置SPI_CR1寄存器的LSBFIRST位定义帧格式。
5. 如果需要NSS引脚工作在输入模式,硬件模式下,在整个数据帧传输期间应把NSS脚连接
到高电平;在软件模式下,需设置SPI_CR1寄存器的SSM位和SSI位。如果NSS引脚工作
在输出模式,则只需设置SSOE位。
6. 必须设置MSTR位和SPE(只当NSS脚被连到高电平,这些位才能保持置位)
在这个配置中,MOSI引脚是数据输出,而MISO引脚是数据输入。
462/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
数据发送过程
当写入数据至发送缓冲器时,发送过程开始。
在发送第一个数据位时,数据字被并行地(通过内部总线)传入移位寄存器,而后串行地移出到
MOSI脚上;MSB在先还是LSB在先,取决于SPI_CR1寄存器中的LSBFIRST位的设置。数据从
发送缓冲器传输到移位寄存器时TXE标志将被置位,如果设置了SPI_CR1寄存器中的TXEIE
位,将产生中断。
数据接收过程
对于接收器来说,当数据传输完成时:
传送移位寄存器里的数据到接收缓冲器,并且RXNE标志被置位。
如果设置了SPI_CR2寄存器中的RXNEIE位,则产生中断。
在最后采样时钟沿,RXNE位被设置,在移位寄存器中接收到的数据字被传送到接收缓冲器。读
SPI_DR寄存器时,SPI设备返回接收缓冲器中的数据。
SPI_DR寄存器将清除RXNE位。
一旦传输开始,如果下一个将发送的数据被放进了发送缓冲器,就可以维持一个连续的传
流。在试图写发送缓冲器之前,需确认TXE标志应该为’1’
注:
NSS
硬件模式下,从设备的
NSS
输入由
NSS
引脚控制或另一个由软件驱动的
GPIO
引脚控制。
23.3.4 配置SPI为单工通信
SPI模块能够以两种配置工作于单工方式:
1条时钟线和1条双向数据线;
1条时钟线和1条数据线(只接收或只发送)
1条时钟线和1条双向数据线(BIDIMODE=1)
设置SPI_CR1寄存器中的BIDIMODE位而启用此模式。在这个模式下,SCK引脚作为时钟,主
设备使用MOSI引脚而从设备使用MISO引脚作为数据通信。传输的方向由SPI_CR1寄存器里的
BIDIOE控制,当这个位是’1’的时候,数据线是输出,否则是输入。
1条时钟和1条单向数据线(BIDIMODE=0)
在这个模式下,SPI模块可以或者作为只发送,或者作为只接收。
只发送模式类似于全双工模式(BIDIMODE=0RXONLY=0):数据在发送引脚(主模式时是
MOSI、从模式时是MISO)上传输,而接收引脚(主模式时是MISO、从模式时是MOSI)可以
作为通用的I/O使用。此时,软件不必理会接收缓冲器中的数据(如果读出数据寄存器,它不
包含任何接收数据)
在只接收模式,可以通过设置SPI_CR2寄存器的RXONLY位而关闭SPI的输出功能;此时,
发送引脚(主模式时是MOSI、从模式时是MISO)被释放,可以作为其它功能使用。
配置并使能SPI模块为只接收模式的方式是:
在主模式时,一旦使能SPI,通信立即启动,当清除SPE位时立即停止当前的接收。在此模
式下,不必读取BSY标志,在SPI通信期间这个标志始终为’1’
在从模式时,只要NSS被拉低(或在NSS软件模式时,SSI位为’0’)同时SCK有时钟脉冲,
SPI就一直在接收。
23.3.5 数据发送与接收过程
接收与发送缓冲器
在接收时,接收到的数据被存放在一个内部的接收缓冲器中;在发送时,在被发送之前,数据
将首先被存放在一个内部的发送缓冲器中。
SPI_DR寄存器的读操作,将返回接收缓冲器的内容;写入SPI_DR寄存器的数据将被写入发
送缓冲器中。
463/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
主模式下开始传输
全双工模式(BIDIMODE=0并且RXONLY=0)
当写入数据到SPI_DR寄存器(发送缓冲器)后,传输开始;
在传送第一位数据的同时,数据被并行地从发送缓冲器传送到8位的移位寄存器中,
然后按顺序被串行地移位送到MOSI引脚上;
与此同时,在MISO引脚上接收到的数据,按顺序被串行地移位进入8位的移位寄存器
中,然后被并行地传送到SPI_DR寄存器(接收缓冲器)中。
单向的只接收模式(BIDIMODE=0并且RXONLY=1)
SPE=1时,传输开始;
只有接收器被激活,在MISO引脚上接收到的数据,按顺序被串行地移位进入8位的移
位寄存器中,然后被并行地传送到SPI_DR寄存器(接收缓冲器)中。
双向模式,发送时(BIDIMODE=1并且BIDIOE=1)
当写入数据到SPI_DR寄存器(发送缓冲器)后,传输开始;
在传送第一位数据的同时,数据被并行地从发送缓冲器传送到8位的移位寄存器中,
然后按顺序被串行地移位送到MOSI引脚上;
不接收数据。
双向模式,接收时(BIDIMODE=1并且BIDIOE=0)
SPE=1并且BIDIOE=0时,传输开始;
MOSI引脚上接收到的数据,按顺序被串行地移位进入8位的移位寄存器中,然后被
并行地传送到SPI_DR寄存器(接收缓冲器)中。
不激活发送器,没有数据被串行地送到MOSI引脚上。
从模式下开始传输
全双工模式(BIDIMODE=0并且RXONLY=0)
当从设备接收到时钟信号并且第一个数据位出现在它的MOSI时,数据传输开始,随
后的数据位依次移动进入移位寄存器;
与此同时,在传输第一个数据位时,发送缓冲器中的数据被并行地传送到8位的移位
寄存器,随后被串行地发送到MISO引脚上。软件必须保证在SPI主设备开始数据传
输之前在发送寄存器中写入要发送的数据。
单向的只接收模式(BIDIMODE=0并且RXONLY=1)
当从设备接收到时钟信号并且第一个数据位出现在它的MOSI时,数据传输开始,随
后数据位依次移动进入移位寄存器;
不启动发送器,没有数据被串行地传送到MISO引脚上。
双向模式,发送时(BIDIMODE=1并且BIDIOE=1)
当从设备接收到时钟信号并且发送缓冲器中的第一个数据位被传送到MISO引脚上的
时候,数据传输开始;
在第一个数据位被传送到MISO引脚上的同时,发送缓冲器中要发送的数据被平行地
传送到8位的移位寄存器中,随后被串行地发送到MISO引脚上。软件必须保证在SPI
主设备开始数据传输之前在发送寄存器中写入要发送的数据;
不接收数据。
双向模式,接收时(BIDIMODE=1并且BIDIOE=0)
当从设备接收到时钟信号并且第一个数据位出现在它的MOSI时,数据传输开始;
MISO引脚上接收到的数据被串行地传送到8位的移位寄存器中,然后被平行地传送
SPI_DR寄存器(接收缓冲器)
不启动发送器,没有数据被串行地传送到MISO引脚上。
464/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
处理数据的发送与接收
当数据从发送缓冲器传送到移位寄存器时,设置TXE标志(发送缓冲器空),它表示内部的发送缓
冲器可以接收下一个数据;如果在SPI_CR2寄存器中设置TXEIE位,则此时会产生一个中
断;写入SPI_DR寄存器即可清除TXE位。
注:
在写入发送缓冲器之前,软件必须确认
TXE
标志为
’1’
,否则新的数据会覆盖已经在发送缓冲器
中的数据。
在采样时钟的最后一个边沿,当数据被从移位寄存器传送到接收缓冲器时,设置RXNE标志(
收缓冲器非空);它表示数据已经就绪,可以从SPI_DR寄存器读出;如果在SPI_CR2寄存器中
设置了RXNEIE位,则此时会产生一个中断;读出SPI_DR寄存器即可清除RXNIE标志位。
在一些配置中,传输最后一个数据时,可以使用BSY标志等待数据传输的结束。
主或从模式下(BIDIMODE=0并且RXONLY=0)全双工发送和接收过程模式
软件必须遵循下述过程,发送和接收数据(见图213
465/754
和图214)
1. 设置SPE位为’1’,使能SPI模块;
2. SPI_DR寄存器中写入第一个要发送的数据,这个操作会清除TXE标志;
3. 等待TXE=1,然后写入第二个要发送的数据。等待RXNE=1,然后读出SPI_DR寄存器并
获得第一个接收到的数据,读SPI_DR的同时清除了RXNE位。重复这些操作,发送后续
的数据同时接收n-1个数据;
4. 等待RXNE=1,然后接收最后一个数据;
5. 等待TXE=1,在BSY=0之后关闭SPI模块。
也可以在响应RXNETXE标志的上升沿产生的中断的处理程序中实现这个过程。
213 主模式、全双工模式下(BIDIMODE=0并且RXONLY=0)连续传输时,TXE/RXNE/BSY
的变化示意图
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
214 从模式、全双工模式下(BIDIMODE=0并且RXONLY=0)连续传输时,TXE/RXNE/BSY
的变化示意图
只发送过程(BIDIMODE=0并且RXONLY=0)
在此模式下,传输过程可以简要说明如下,使用BSY位等待传输的结束(见图215
466/754
和图216)
1. 设置SPE位为’1’,使能SPI模块;
2. SPI_DR寄存器中写入第一个要发送的数据,这个操作会清除TXE标志;
3. 等待TXE=1,然后写入第二个要发送的数据。重复这个操作,发送后续的数据;
4. 写入最后一个数据到SPI_DR寄存器之后,等待TXE=1;然后等待BSY=0,这表示最后一
个数据的传输已经完成。
也可以在响应TXE标志的上升沿产生的中断的处理程序中实现这个过程。
注:
1.
对于不连续的传输,在写入
SPI_DR
寄存器的操作与设置
BSY
位之间有
2
APB
时钟周期的延
迟,因此在只发送模式下,写入最后一个数据后,最好先等待
TXE=1
,然后再等待
BSY=0
2
只发送模式下,在传输
2
个数据之后,由于不会读出接收到的数据,
SPI_SR
寄存器中的
OVR
会变为
’1’
(
译注:软件不必理会这个
OVR
标志位
)
215 主设备只发送模式(BIDIMODE=0并且RXONLY=0)下连续传输时,,TXE/BSY变化示
意图
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
216 从设备只发送模式(BIDIMODE=0并且RXONLY=0)下连续传输时,TXE/BSY变化示意
双向发送过程(BIDIMODE=1并且BIDIOE=1)
在此模式下,操作过程类似于只发送模式,不同的是:在使能SPI模块之前,需要在SPI_CR2
存器中同时设置BIDIMODEBIDIOE位为’1’
单向只接收模式(BIDIMODE=0并且RXONLY=1)
在此模式下,传输过程可以简要说明如下()
1. SPI_CR2寄存器中,设置RXONLY=1
2. 设置SPE=1,使能SPI模块:
a) 主模式下,立刻产生SCK时钟信号,在关闭SPI(SPE=0)之前,不断地接收串行数据;
b) 从模式下,当SPI主设备拉低NSS信号并产生SCK时钟时,接收串行数据。
3. 等待RXNE=1,然后读出SPI_DR寄存器以获得收到的数据(同时会清除RXNE)。重复这
个操作接收所有数据。
也可以在响应RXNE标志的上升沿产生的中断的处理程序中实现这个过程。
注:
如果在最后一个数据传输结束后关闭
SPI
模块,请按照第
23.3.8
节的建议操作。
217 只接收模式(BIDIMODE=0并且RXONLY=1)下连续传输时,RXNE变化示意图
单向接收过程(BIDIMODE=1并且BIDIOE=0)
在此模式下,操作过程类似于只接收模式,不同的是:在使能SPI模块之前,需要在SPI_CR2
存器中设置BIDIMODE’1’并清除BIDIOE位为’0’
连续和非连续传输
当在主模式下发送数据时,如果软件足够快,能够在检测到每次TXE的上升沿(TXE中断),并
立即在正在进行的传输结束之前写入SPI_DR寄存器,则能够实现连续的通信;此时,在每个数
据项的传输之间的SPI时钟保持连续,同时BSY位不会被清除。
467/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
如果软件不够快,则会导致不连续的通信;这时,在每个数据传输之间会被清除(见下图)
在主模式的只接收模式下(RXONLY=1),通信总是连续的,而且BSY标志始终为’1’
在从模式下,通信的连续性由SPI主设备决定。不管怎样,即使通信是连续的,BSY标志会在每
个数据项之间至少有一个SPI时钟周期为低(见图216)
218 非连续传输发送(BIDIMODE=0并且RXONLY=0)时,TXE/BSY变化示意图
23.3.6 CRC计算
CRC校验用于保证全双工通信的可靠性。数据发送和数据接收分别使用单独的CRC计算器。通
过对每一个接收位进行可编程的多项式运算来计算CRCCRC的计算是在由SPI_CR1寄存器中
CPHACPOL位定义的采样时钟边沿进行的。
注意:
SPI
接口提供了两种
CRC
计算方法,取决于所选的发送和
/
或接收的数据帧格式:
8
位数据帧采
CR8
16
位数据帧采用
CRC16
CRC计算是通过设置SPI_CR1寄存器中的CRCEN位启用的。设置CRCEN位时同时复位CRC
存器(SPI_RXCRCRSPI_TXCRCR)。当设置了SPI_CR1CRCNEXT位,SPI_TXCRCR的内
容将在当前字节发送之后发出。
在传输SPI_TXCRCR的内容时,如果在移位寄存器中收到的数值SPI_RXCRCR的内容不匹
配,则SPI_SR寄存器的CRCERR标志位被置1
如果在TX缓冲器中还有数据,CRC的数值仅在数据字节传输结束后传送。在传输CRC期间,
CRC计算器关闭,寄存器的数值保持不变。
注意:
请参考产品说明书,以确认有此功能
(
不是所有型号都有此功能
)
SPI通信可以通过以下步骤使用CRC
设置CPOLCPHALSBFirstBRSSMSSIMSTR的值;
SPI_CRCPR寄存器输入多项式;
通过设置SPI_CR1寄存器CRCEN位使能CRC计算,该操作也会清除寄存器SPI_RXCRCR
SPI_TXCRC
设置SPI_CR1寄存器的SPE位启动SPI功能;
启动通信并且维持通信,直到只剩最后一个字节或者半字;
在把最后一个字节或半字写进发送缓冲器时,设置SPI_CR1CRCNext位,指示硬件在发
送完成最后一个数据之后,发送CRC的数值。在发送CRC数值期间,停止CRC计算;
当最后一个字节或半字被发送后,SPI发送CRC数值,CRCNext位被清除。同样,接收到
CRCSPI_RXCRCR值进行比较,如果比较不相配,则设置SPI_SR上的CRCERR标志
位,当设置了SPI_CR2寄存器的ERRIE时,则产生中断。
468/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
注意:
SPI
模块处于从设备模式时,请注意在时钟稳定之后再使能
CRC
计算,否则可能会得到错误的
CRC
计算结果。事实上,只要设置了
CRCEN
位,只要在
SCK
引脚上有输入时钟,不管
SPE
位的
状态,都会进行
CRC
的计算。
SPI
时钟频率较高时,用户在发送
CRC
时必须小心。在
CRC
传输期间,使用
CPU
的时间应尽
可能少;为了避免在接收最后的数据和
CRC
时出错,在发送
CRC
过程中应禁止函数调用。必须
在发送
/
接收最后一个数据之前完成设置
CRCNEXT
位的操作。
SPI
时钟频率较高时,因为
CPU
的操作会影响
SPI
的带宽,建议采用
DMA
模式以避免
SPI
降低
的速度。
STM32F10xxx
配置为从模式并且使用了
NSS
硬件模式,
NSS
引脚应该在数据传输和
CRC
传输
期间保持为低。
当配置SPI为从模式并且使用CRC的功能,即使NSS引脚为高时仍然会执CRC的计算(译注:
NSS信号为高时,如果SCK引脚上有时钟脉冲,则CRC计算会继续执行)。例如:当主设备交
替地与多个从设备进行通信时,将会出现这种情况(译注:此时要想办法避免CRC的误操作)
在不选中一个从设备(NSS信号为高)转换到选中一个新的从设备(NSS信号为低)的时候,为了保
持主从设备端下次CRC计算结果的同步,应该清除主从两端的CRC数值。
按照下述步骤清除CRC数值:
1. 关闭SPI模块(SPE=0);
2. 清除CRCEN位为’0’
3. 设置CRCEN位为’1’
4. 使能SPI模块(SPE=1)
23.3.7 状态标志
应用程序通过3个状态标志可以完全监控SPI总线的状态。
发送缓冲器空闲标志(TXE)
此标志为’1’时表明发送缓冲器为空,可以写下一个待发送的数据进入缓冲器中。当写入SPI_DR
时,TXE标志被清除。
接收缓冲器非空(RXNE)
此标志为’1’时表明在接收缓冲器中包含有效的接收数据。读SPI数据寄存器可以清除此标志。
(Busy)标志
BSY标志由硬件设置与清除(写入此位无效果),此标志表明SPI通信层的状态。
当它被设置为’1’ 时,表明SPI 正忙于通信,但有一个例外:在主模式的双向接收模式下
(MSTR=1BDM=1并且BDOE=0),在接收期间BSY标志保持为低。
在软件要关闭SPI模块并进入停机模式(或关闭设备时钟)之前,可以使用BSY标志检测传输是否
结束,这样可以避免破坏最后一次传输,因此需要严格按照下述过程执行。
BSY标志还可以用于在多主系统中避免写冲突。
除了主模式的双向接收模式(MSTR=1BDM=1并且BDOE=0),当传输开始时,BSY标志被
’1’
以下情况时此标志将被清除为’0’
当传输结束(主模式下,如果是连续通信的情况例外)
当关闭SPI模块;
当产生主模式失效(MODF=1)
如果通信不是连续的,则在每个数据项的传输之间,BSY标志为低。
当通信是连续时:
主模式下:在整个传输过程中,BSY标志保持为高;
从模式下:在每个数据项的传输之间,BSY标志在一个SPI时钟周期中为低。
469/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
注:
不要使用
BSY
标志处理每一个数据项的发送和接收,最好使用
TXE
RXNE
标志。
23.3.8 关闭SPI
当通讯结束,可以通过关闭SPI模块来终止通讯。清除SPE位即可关闭SPI
在某些配置下,如果再传输还未完成时,就关闭SPI模块并进入停机模式,则可能导致当前的传
输被破坏,而且BSY标志也变得不可信。
为了避免发生这种情况,关闭SPI模块时,建议按照下述步骤操作:
在主或从模式下的全双工模式(BIDIMODE=0RXONLY=0)
1. 等待RXNE=1并接收最后一个数据;
2. 等待TXE=1
3. 等待BSY=0
4. 关闭SPI(SPE=0),最后进入停机模式(或关闭该模块的时钟)
在主或从模式下的单向只发送模式(BIDIMODE=0RXONLY=0)或双向的发送模式
(BIDIMODE=1BIDIOE=1)
SPI_DR寄存器中写入最后一个数据后:
1. 等待TXE=1
2. 等待BSY=0
3. 关闭SPI(SPE=0),最后进入停机模式(或关闭该模块的时钟)
在主或从模式下的单向只接收模式(MSTR=1BIDIMODE=0RXONLY=1)或双向
的接收模式(MSTR=1BIDIMODE=1BIDIOE=0)
这种情况需要特别地处理,以保证SPI不会开始一次新的传输:
1. 等待倒数第二个(n-1)RXNE=1
2. 在关闭SPI(SPE=0)之前等待一个SPI时钟周期(使用软件延迟)
3. 在进入停机模式(或关闭该模块的时钟)之前等待最后一个RXNE=1
注:
在主模式下的单向只发送模式
(MSTR=1
BDM=1
BDOE=0)
时,传输过程中
BSY
标志始终为
低。
在从模式下的只接收模式(MSTR=0BIDIMODE=0RXONLY=1)或双向的接收模
(MSTR=0BIDIMODE=1BIDIOE=0)
1. 可以在任何时候关闭SPI(SPE=0)SPI会在当前的传输结束后被关闭;
2. 如果希望进入停机模式,在进入停机模式(或关闭该模块的时钟)之前必须首先等待
BSY=0
23.3.9 利用DMASPI通信
为了达到最大通信速度,需要及时往SPI发送缓冲器填数据,同样接收缓冲器中的数据也必须及
时读走以防止溢出。为了方便高速率的数据传输,SPI实现了一种采用简单的请求/应答的DMA
机制。
SPI_CR2寄存器上的对应使能位被设置时,SPI模块可以发出DMA输请求。发送缓冲器和
接收缓冲器亦有各自的DMA请求()
发送时,在每次TXE被设置为’1’时发出DMA请求,DMA控制器则写数据至SPI_DR寄存
器,TXE标志因此而被清除。
接收时,在每次RXNE被设置为’1’时发出DMA请求,DMA控制器则从SPI_DR寄存器读出数
据,RXNE标志因此而被清除。
当只使用SPI发送数据时,只需使能SPI的发送DMA通道。此时,因为没有读取收到的数据,
OVR被置为’1’(译注:软件不必理会这个标志)
当只使用SPI接收数据时,只需使能SPI的接收DMA通道。
470/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
在发送模式下,当DMA已经传输了所有要发送的数据(DMA_ISR存器的TCIF标志变为’1’)后,
可以通过监视BSY标志以确认SPI通信结束,这样可以避免在关闭SPI或进入停止模式时,破坏
最后一个数据的传输。因此软件需要先等待TXE=1,然后等待BSY=0
注:
在不连续的通信中,在写数据到
SPI_DR
的操作与
BSY
位被置为
’1’
之间,有
2
APB
时钟周期的
延迟,因此,在写完最后一个数据后需要先等待
TXE=1
再等待
BSY=0
219 使DMA发送
220 使DMA接收
CRCDMA功能
当使能SPI使用CRC检验并且启用DMA模式时,在通信结束时,CRC字节的发送和接收是自动
完成的。
数据和CRC传输结束时,SPI_SR寄存器的CRCERR标志为’1’表示在传输期间发生错误。
471/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
23.3.10 错误标志
主模式失效错误(MODF)
主模式失效仅发生在:NSS引脚硬件模式管理下,主设备的NSS脚被拉低;或者在NSS引脚
件模式管理下,SSI位被置为’0’时;MODF位被自动置位。主模式失效对SPI设备有以下影响:
MODF位被置为’1’,如果设置了ERRIE位,则产生SPI中断;
SPE位被清为’0’。这将停止一切输出,并且关闭SPI接口;
MSTR位被清为’0’,因此强迫此设备进入从模式。
下面的步骤用于清除MODF位:
1. MODF位被置为’1’时,执行一次对SPI_SR寄存器的读或写操作;
2. 然后写SPI_CR1寄存器。
在有多个MCU的系统中,为了避免出现多个从设备的冲突,必须先拉高该主设备的NSS脚,再
MODF位进行清零。在完成清零之后,SPEMSTR位可以恢复到它们的原始状态。
出于安全的考虑,当MODF位为’1’时,硬件不允许设置SPEMSTR位。
通常配置下,从设备的MODF位不能被置为’1’。然而,在多主配置里,一个设备可以在设置了
MODF位的情况下,处于从设备模式;此时,MODF位表示可能出现了多主冲突。中断程序可
以执行一个复位或返回到默认状态来从错误状态中恢复。
溢出错误
当主设备已经发送了数据字节,而从设备还没有清除前一个数据字节产生的RXNE时,即为溢出
错误。当产生溢出错误时:
OVR位被置为’1’;当设置了ERRIE位时,则产生中断。
此时,接收器缓冲器的数据不是主设备发送的新数据,读SPI_DR寄存器返回的是之前未读的数
据,所有随后传送的数据都被丢弃。
依次读出SPI_DR寄存器和SPI_SR寄存器可将OVR清除。
CRC 错误
当设置了SPI_CR寄存器上的CRCEN位时,CRC错误标志用来核对接收数据的有效性。如果移
位寄存器中接收到的值(发送方发送的SPI_TXCRCR数值)与接收方SPI_RXCRCR寄存器中的数
值不匹配,则SPI_SR寄存器上的CRCERR标志被置位为’1’
23.3.11 SPI中断
166 SPI中断请求
中断事件 事件标志 使能控制位
发送缓冲器空标志 TXE TXEIE
接收缓冲器非空标志 RXNE RXNEIE
主模式失效事件 MODF
472/754
溢出错误 OVR
ERRIE
CRC错误标志 CRCERR
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
23.4 I2S功能描述
小容量和中容量的STM32不支持I2S音频协议。本节仅适用于大容量产品和互联型产品。
23.4.1 I2S功能描述
I2S的框图如下图所示:
I2S框图 221
通过将寄存器SPI_I2SCFGRI2SMOD位置为’1’,即可使能I2S功能。此时,可以把SPI模块用
I2S音频接口。I2S接口与SPI接口使用大致相同的引脚、标志和中断。
I2SSPI共用3个引脚:
SD:串行数据(映射至MOSI引脚),用来发送和接收2路时分复用通道的数据;
WS:字选(映射至NSS引脚),主模式下作为数据控制信号输出,从模式下作为输入;
CK:串行时钟(映射至SCK引脚),主模式下作为时钟信号输出,从模式下作为输入。
473/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
在某些外部音频设备需要主时钟时,可以另有一个附加引脚输出时钟:
MCK:主时钟(独立映射),在I2S配置为主模式,寄存器SPI_I2SPRMCKOE位为’1’时,作
为输出额外的时钟信号引脚使用。输出时钟信号的频率预先设置为256 × Fs,其中Fs是音
频信号的采样频率。
设置成主模式时,I2S使用自身的时钟发生器来产生通信用的时钟信号。这个时钟发生器也是主
时钟输出的时钟源。I2S模式下有2个额外的寄存器,一个是与时钟发生器配置相关的寄存器
SPI_I2SPR,另一个是I2S通用配置寄存器SPI_I2SCFGR(可设置音频标准、从/主模式、数据格
式、数据包帧、时钟极性等参数)
I2S模式下不使用寄存器SPI_CR1和所有的CRC寄存器。同样,I2S模式下也不使用寄存器
SPI_CR2SSOE位,和寄存器SPI_SRMODF位和CRCERR位。
I2S使用与SPI相同的寄存器SPI_DR用作16位宽模式数据传输。
23.4.2 支持的音频协议
三线总线支持2个声道上音频数据的时分复用:左声道和右声道,但是只有一个16位寄存器用作
发送或接收。因此,软件必须在对数据寄存器写入数据时,根据当前传输中的声道写入相应的
数据;同样,在读取寄存器数据时,通过检查寄存器SPI_SRCHSIDE位来判明接收到的数据
属于哪个声道。左声道总是先于右声道发送数据(CHSIDE位在PCM协议下无意义)
有四种可用的数据和包帧组合。可以通过以下四种数据格式发送数据:
16位数据打包进16位帧
16位数据打包进32位帧
24位数据打包进32位帧
32位数据打包进32位帧
在使用16位数据扩展到32位帧时,前16(MSB)是有意义的数据,后16(LSB)被强制为0,该
操作不需要软件干预,也不需要有DMA请求(仅需要一次读/写操作)
24位和32位数据帧需要CPU对寄存器SPI_DR进行2次读或写操作,在使用DMA时,需要2
DMA传输。对于24位数据,扩展到32位后,最低8位由硬件置0
对于所有的数据格式和通讯标准,总是先发送最高位(MSB)
I2S接口支持四种音频标准,可以通过设置寄存器SPI_I2SCFGRI2SSTD[1:0]位和PCMSYNC
位来选择。
I2S飞利浦标准
在此标准下,引脚WS用来指示正在发送的数据属于哪个声道。在发送第一位数据(MSB)1
时钟周期,该引脚即为有效。
I2S飞利浦协议波形(16/32位全精度,CPOL = 0) 222
474/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
发送方在时钟信号(CK)的下降沿改变数据,接收方在上升沿读取数据WS信号也在时钟信号的
下降沿变化。
I2S飞利浦协议标准波形(24位帧,CPOL = 0) 223
此模式需要对寄存器SPI_DR进行2次读或写操作。
在发送模式下:如果需要发送0x8EAA33(24)
2240x8EAA33
在接收模式下:如果接收0x8EAA33
2250x8EAA33
I2S飞利浦协议标准波形(16位扩展至32位包帧,CPOL = 0) 226
475/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
I2S配置阶段,如果选择将16位数据扩展到32位声道帧,只需要访问一次寄存器SPI_DR。用
来扩展到32位的低16位被硬件置为0x0000
如果待传输或者接收的数据是0x76A3(扩展到32位是0x76A30000),需要的操作如下图所示。
227
在发送时需要将MSB写入寄存器SPI_DR;标志位TXE’1’表示可以写入新的数据,如果允许了
相应的中断,则可以产生中断。发送是由硬件完成的,即使还未发送出后16位的0x0000,也会
设置TXE并产生相应的中断。
接收时,每次收到高16位半字(MSB)后,标志位RXNE’1’,如果允许了相应的中断,则可以产
生中断。
这样,在2次读和写之间有更多的时间,可以防止下溢或者上溢的情况发生。
MSB对齐标准
在此标准下,WS信号和第一个数据位,即最高位(MSB)同时产生。
228 MSB对齐16位或32位全精度,CPOL = 0
发送方在时钟信号的下降沿改变数据;接收方是在上升沿读取数据。
229 MSB对齐24位数据,CPOL = 0
476/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
230 MSB对齐16位数据扩展到32位包帧,CPOL = 0
LSB对齐标准
此标准与MSB对齐标准类似(16位或32位全精度帧格式下无区别)
231 LSB对齐16位或32位全精度,CPOL = 0
232 LSB对齐24位数据,CPOL = 0
在发送模式下
如果要发送数据0x3478AE,需要通过软件或者DMA对寄存器SPI_DR进行2次写操作。操作流
程如下图所示。
477/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
233 要求发送0x3478AE的操作
在接收模式下
如果要接收数据0x3478AE,需要在2个连续的RXNE事件发生时,分别对寄存器SPI_DR进行1
次读操作。
234 要求接收0x3478AE的操作
235 LSB对齐16位数据扩展到32位包帧,CPOL = 0
I2S配置阶段,如果选择将16位数据扩展到32声道帧,只需要访问一次寄存器SPI_DR。此
时,扩展到32位后的高半字(16MSB)被硬件置为0x0000
如果待传输或者接收的数据是0x76A3(扩展到32位是0x0000 76A3),需要的操作如下图所示。
236
在发送时,如果TXE’1’,用户需要写入待发送的数据(0x76A3)。用来扩展到32位的0x0000
部分由硬件首先发送出去,一旦有效数据开始从SD引脚送出,即发生下一次TXE事件。
在接收时,一旦接收到有效数据(而不是0x0000部分),即发生RXNE事件。
这样,在2次读和写之间有更多的时间,可以防止下溢或者上溢的情况发生。
PCM标准
PCM标准下,不存在声道选择的信息。PCM标准有2种可用的帧结构,短帧或者长帧,可以
通过设置寄存器SPI_I2SCFGRPCMSYNC位来选择。
478/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
237 PCM标准波形(16)
对于长帧,主模式下,用来同步的WS信号有效的时间固定为13位。
对于短帧,用来同步的WS信号长度只有1位。
238 PCM标准波形(16位扩展到32位包帧)
注意:
无论哪种模式
(
主或从
)
、哪种同步方式
(
短帧或长帧
)
,连续的
2
帧数据之间和
2
个同步信号之间的
时间差,
(
即使是从模式
)
需要通过设置
SPI_I2SCFGR
寄存器的
DATLEN
位和
CHLEN
位来确定。
23.4.3 时钟发生器
I2S的比特率即确定了在I2S数据线上的数据流和I2S的时钟信号频率。
I2S比特率 = 每个声道的比特数 × 声道数目 × 音频采样频率
对于一个具有左右声道和16位音频信号,I2S比特率计算如下
I2S比特率 = 16 × 2 × Fs
如果包长为32位,则有:I2S比特率 = 32 × 2 × Fs
479/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
239 音频采样频率定义
在主模式下,为了获得需要的音频频率,需要正确地对线性分频器进行设置。
I2S时钟发生器结构 240
1. 图中x可以是2或者3
上图中I2SxCLK的时钟源是系统时钟(即驱动AHB时钟的HSIHSEPLL)。对于互联型产品,
I2SxCLK可以来自SYSCLK,或PLL3 VCO(2xPLL3CLK)时钟从而得到最精确的时钟,可以通过
RCC_CFGR2寄存器的I2S2SRCI2S3SRC位选择。
音频的采样频率可以是96kHz48kHz44.1kHz32kHz22.05kHz16kHz11.025kHz
8kHz(或任何此范围内的数值)。为了获得需要的频率,需按照以下公式设置线性分频器:
当需要生成主时钟时(寄存器SPI_I2SPRMCKOE位为’1’)
声道的帧长为16位时,Fs = I2SxCLK / [(16*2) * ((2*I2SDIV) + ODD)*8]
声道的帧长为32位时,Fs = I2SxCLK / [(32*2) * ((2*I2SDIV) + ODD)*4]
当关闭主时钟时(MCKOE位为’0’)
声道的帧长为16位时,Fs = I2SxCLK / [(16*2) * ((2*I2SDIV) + ODD)]
声道的帧长为32位时,Fs = I2SxCLK / [(32*2) * ((2*I2SDIV) + ODD)]
下面2张表给出了不同时钟配置时,精确参数的例子。
注:
可以使用其它配置以达到优化时钟精确度的目的。
480/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
167 使用标准的8MHz HSE时钟得到精确的音频频率(只适用于大容量产品)
16位 32位 16位 32位 16位 32位 16位 32位
72 11 6 1 0 96000 97826.09 93750 1.90% 2.34%
72 23 11 1 1 48000 47872.34 48913.04 0.27% 1.90%
72 25 13 1 0 44100 44117.65 43269.23 0.04% 1.88%
72 35 17 0 1 32000 32142.86 32142.86 0.44% 0.44%
72 51 25 0 1 22050 22058.82 22058.82 0.04% 0.04%
72 70 35 1 0 16000 15675.75 16071.43 0.27% 0.45%
72 102 51 0 0 11025 11029.41 11029.41 0.04% 0.04%
72 140 70 1 1 8000 8007.11 7978.72 0.09% 0.27%
72 2 2 0 0 96000 70312.15 70312.15 26.76% 26.76%
72 3 3 0 0 48000 46875 46875 2.34% 2.34%
72 3 3 0 0 44100 46875 46875 6.29% 6.29%
72 9 9 0 0 32000 31250 31250 2.34% 2.34%
72 6 6 1 1 22050 21634.61 21634.61 1.88% 1.88%
72 9 9 0 0 16000 15625 15625 2.34% 2.34%
72 13 13 0 0 11025 10817.3 10817.3 1.88% 1.88%
SYSCLK
(MHz) MCLK 实际F
S
(Hz) 误差
期望值
F
S
(Hz)
I2S_DIV I2S_ODD
72 17 17 1 1 8000 8035.71 8035.71 0.45% 0.45%
168 使用标准的25MHz时钟和PLL3得到精确的音频频率(只适用于互联型产品)
MCLK
16位 32位 16位 32位 16位 32位 16位 32位 16位 32位 16位 32位
6 6 14 14 19 9 0 1 96000 95942.98 95942.98 0.0594% 0.0594%
7 12 20 14 46 9 1 1 48000 48003.07 47971.49 0.0064% 0.0594%
8 8 14 14 31 15 0 1 44100 44102.82 44102.82 0.0064% 0.0064%
11 4 16 10 35 30 1 1 32000 32010.24 32018.44 0.0320% 0.0576%
8 8 14 14 62 31 0 0 22050 22051.41 22051.41 0.0064% 0.0064%
7 11 20 16 139 35 1 1 16000 16001.02 16005.12 0.0064% 0.0320%
8 8 14 14 124 62 0 0 11025 11025.71 11025.71 0.0064% 0.0064%
9 9 20 20 217 108 0 1 无 8000 8000.512 8000.512 0.0064% 0.0064%
448822009600097656.25 97656.25 1.7253% 1.7253%
1313161622114800048076.92 48076.92 0.1603% 0.1603%
559944004410043945.31 43945.31 0.3508% 0.3508%
559955113200031960.22 31960.22 0.1243% 0.1243%
5 5 13 13 11 11 1 1 22050 22078.8 22078.8 0.1306% 0.1306%
99141499111600015990.49 15990.49 0.0594% 0.0594%
8 8 14 14 15 15 1 1 11025 11025.7 11025.7 0.0064% 0.0064%
4 4 10 10 30 30 1 1 是 8000 8004.611 8004.611 0.0576% 0.0576%
实际F
S
(Hz) 误差
期望
F
S
(Hz)
PREDIV2 PLL3 I2SDIV I2SODD
481/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
169 使用标准的14.7456MHz时钟和PLL3得到精确的音频频率(只适用于互联型产品)
16位 32位 16位 32位 16位 32位 16位 32位 16位 32位 16位 32位
3 3 10 10 16 8 0 0 96000 96000 96000 0% 0%
6 6 20 20 32 16 0 0 48000 48000 48000 0% 0%
11 11 20 20 19 9 0 1 44100 44095.69 44095.69 0.0098% 0.0098%
2 2 10 10 72 36 0 0 32000 32000 32000 0% 0%
11 11 10 10 19 9 0 1 22050 22047.84 22047.84 0.0098% 0.0098%
4 4 20 20 144 72 0 0 16000 16000 16000 0% 0%
2 2 10 10 209 104 0 1 11025 11023.92 11023.92 0.0098% 0.0098%
12 12 20 20 96 48 0 0 8000 8000 8000 0% 0%
2 2 10 10 3 3 0 0 96000 96000 96000 0% 0%
6 6 20 20 4 4 0 0 48000 48000 48000 0% 0%
2 2 10 10 6 6 1 1 44100 44307.69 44307.69 47.1000% 0.4710%
2 2 10 10 9 9 0 0 32000 32000 32000 0% 0%
4 4 13 13 8 8 1 1 22050 22023.52 22023.52 0.1200% 0.1200%
4 4 20 20 18 18 0 0 16000 16000 16000 0% 0%
11 11 20 20 9 9 1 1 11025 11023.92 11023.92 0.0098% 0.0098%
实际F
S
(Hz) 误差
期望
F
S
(Hz)
PREDIV2 PLL3 I2SDIV I2SODD MCLK
6 6 20 20 24 24 0 0 8000 8000 8000 0% 0%
23.4.4 I2S主模式
设置I2S工作在主模式,串行时钟由引脚CK输出,字选信号由引脚WS产生。可以通过设置寄存
SPI_I2SPRMCKOE位来选择输出或者不输出主时钟(MCK)
流程
1. 设置寄存器SPI_I2SPRI2SDIV[7:0]定义与音频采样频率相符的串行时钟波特率。同时
也要定义寄存器SPI_I2SPRODD位。
2. 设置CKPOL位定义通信用时钟在空闲时的电平状态。如果需要向外部的DAC/ADC音频器
件提供主时钟MCK,将寄存器SPI_I2SPRMCKOE位置为’1’(按照不同的MCK输出状
态,计算I2SDIVODD的值,详见23.4.3)
3. 设置寄存器SPI_I2SCFGRI2SMOD位为’1’激活I2S功能,设置I2SSTD[1:0]PCMSYNC
位选择所用的I2S标准,设置CHLEN选择每个声道的数据位数。还要设置寄存器
SPI_I2SCFGRI2SCFG[1:0]选择I2S主模式和方向(发送端还是接收端)
4. 如果需要,可以通过设置寄存器SPI_CR2来打开所需的中断功能和DMA功能。
5. 必须将寄存器SPI_I2SCFGRI2SE位置为’1’
6. 引脚WSCK需要配置为输出模式。如果寄存器SPI_I2SPRMCKOE位为’1’,引脚MCK
也要配置成输出模式。
发送流程
当写入1个半字(16)的数据至发送缓存,发送流程开始。
假设第一个写入发送缓存的数据对应的是左声道数据。当数据从发送缓存移到移位寄存器时,
标志位TXE’1’,这时,要把对应右声道的数据写入发送缓存。标志位CHSIDE提示了目前待传
输的数据对应哪个声道。标志位CHSIDE的值在TXE’1’时更新,因此它在TXE’1’时有意义。
在先左声道后右声道的数据都传输完成后,才能被认为是一个完整的数据帧。不可以只传输部
分数据帧,如仅有左声道的数据。
当发出第一位数据的同时,半字数据被并行地传送至16移位寄存器,然后后面的位依次按高
位在先的顺序从引脚MOSI/SD发出。每次数据从发送缓存移至移位寄存器时,标志位TXE
’1’,如果寄存器SPI_CR2TXEIE位为’1’,则产生中断。
482/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
写入数据的操作取决于所选择的I2S标准,详见23.4.2节。
为了保证连续的音频数据传输,建议在当前传输完成之前,对寄存器SPI_DR写入下一个要传输
的数据。
建议在要关闭I2S功能时,等待标志位TXE=1BSY=0,再将I2SE位清’0’
接收流程
接收流程的配置步骤除了第3点外,与发送流程的一致(参见前述的发送流程”),需要通过配置
I2SCFG[1:0]来选择主接收模式。
无论何种数据和声道长度,音频数据总是以16位包的形式接收。即每次填满接收缓存后,标志
RXNE’1’,如果寄存器SPI_CR2RXNEIE位为’1’,则产生中断。根据配置的数据和声道长
度,收到左声道或右声道的数据会需要1次或者2次把数据传送到接收缓存的过程。
对寄存器SPI_DR进行读操作即可清除RXNE标志位。
每次接收以后即更新CHSIDE。它的值取决于I2S单元产生的WS信号。
读取数据的操作取决于所选择的I2S标准,详见23.4.2节。
如果前一个接收到的数据还没有被读取,又接收到新数据,即发生上溢,标志位OVR被置
’1’,如果寄存器SPI_CR2ERRIE位为’1’,则产生中断,表示发生了错误。
若要关闭I2S功能,需要执行特别的操作,以保证I2S模块可以正常地完成传输周期而不会开始新
的数据传输。操作过程与数据配置和通道长度、以及音频协议的模式相关:
16位数据扩展到32位通道长度(DATLEN=00并且CHLEN=1),使用LSB(低位)对齐模式
(I2SSTD=10)
a) 等待倒数第二个(n-1)RXNE=1
b) 等待17I2S时钟周期(使用软件延迟)
c) 关闭I2S(I2SE=0)
16位数据扩展到32位通道长度(DATLEN=00并且CHLEN=1),使用MSB(高位)对齐、I2S
PCM模式(分别为I2SSTD=00I2SSTD=01I2SSTD=11)
a) 等待最后一个RXNE=1
b) 等待1I2S时钟周期(使用软件延迟)
c) 关闭I2S(I2SE=0)
所有其它DATLENCHLEN的组合,I2SSTD选择的任意音频模式,使用下述方式关闭
I2S
a) 等待倒数第二个(n-1)RXNE=1
b) 等待一个I2S时钟周期(使用软件延迟)
c) 关闭I2S(I2SE=0)
注:
在传输期间
BSY
标志始终为低。
23.4.5 I2S从模式
在从模式下,I2S可以设置成发送和接收模式。从模式的配置方式基本遵循和配置主模式一样的
流程。在从模式下,不需要I2S接口提供时钟。时钟信号和WS信号都由外部主I2S设备提供,连
接到相应的引脚上。因此用户无需配置时钟。
配置步骤列举如下:
1. 设置寄存器SPI_I2SCFGRI2SMOD位激活I2S功能;设置I2SSTD[1:0]来选择所用的I2S
标准;设置DATLEN[1:0]选择数据的比特数;设置CHLEN选择每个声道的数据位数。设
置寄存器SPI_I2SCFGRI2SCFG[1:0]选择I2S从模式的数据方向(发送端还是接收端)
2. 根据需要,设置寄存器SPI_CR2打开所需的中断功能和DMA功能。
3. 必须设置寄存器SPI_I2SCFGRI2SE位为’1’
483/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
发送流程
当外部主设备发送时钟信号,并且当NSS_WS信号请求传输数据时,发送流程开始。必须先使
能从设备,并且写入I2S数据寄存器之后,外部主设备才能开始通信。
对于I2SMSB对齐和LSB对齐模式,第一个写入数据寄存器的数据项对应左声道的数据。当开
始通信时,数据从发送缓冲器传送到移位寄存器,然后标志位TXE置为’1’;这时,要把对应右
声道的数据项写入I2S数据寄存器。
标志位CHSIDE提示了目前待传输的数据对应哪个声道。与主模式的发送流程相比,在从模式
中,CHSIDE取决于来自外部主I2SWS信号。这意味着从I2S在接收到主端生成的时钟信号之
前,就要准备好第一个要发送的数据。WS信号为’1’表示先发送左声道。
注意:
设置
I2SE
位为
’1’
的时间,应当比
CK
引脚上的主
I2S
时钟信号早至少
2
PCLK
时钟周期。
当发出第一位数据的时候,半字数据并行地通I2S内部总线传输至16位移位寄存器,然后其它
位依次按高位在先的顺序从引脚MOSI/SD发出。每次数据从发送缓冲器传送至移位寄存器时,
标志位TXE’1’,如果寄存器SPI_CR2TXEIE位为’1’,则产生中断。
注意,在对发送缓冲器写入数据前,要确认标志位TXE’1’
写入数据的操作取决于所选中的I2S标准,详见23.4.2节。
为了保证连续的音频数据传输,建议在当前传输完成之前,对寄存器SPI_DR写入下一个要传输
的数据。如果在代表下一个数据传输的第一个时钟边沿到达之前,新的数据仍然没有写入寄存
SPI_DR,下溢标志位会置’1’,并可能产生中断;它指示软件发送数据错误。如果寄存器
SPI_CR2ERRIE位为’1’,在寄存器SPI_SR的标志位UDR为高是,就会产生中断。建议在这
时关闭I2S,然后重新从左声道开始发送数据。
建议在清除I2SE位关闭I2S之前,先等待TXE=1并且BSY=0
接收流程
配置步骤除了第1点外,与发送流程一致。需要通过配置I2SCFG[1:0]来选择主接收模式。
无论何种数据和声道长度,音频数据总是以16位包的形式接收,即每次填满接收缓存,标志位
RXNE’1’,如果寄存器SPI_CR2RXNEIE位为’1’,则产生中断。按照不同的数据和声道长度
设置,收到左声道或者右声道数据会需要1次或者2次传输数据至接收缓冲器的过程。
每次接收到数据(将要从SPI_DR读出)以后即更新CHSIDE,它对应I2S单元产生的WS信号。
读取SPI_DR寄存器,将清除RXNE位。
读取数据的操作取决于所选中的I2S标准,详见23.4.2节。
在还没有读出前一个接收到的数据,又接收到新数据时,即产生上溢,并设置标志位OVR
’1’;如果寄存器SPI_CR2ERRIE位为’1’,则产生中断,指示发生了错误。
要关闭I2S功能时,需要在接收到最后一次RXNE=1时将I2SE位清’0’
注意:
外部主
I2S
器件需要有通过音频声道发送
/
接收
16
位或
32
位数据包的功能。
23.4.6 状态标志位
3个状态标志位供用户监控I2S总线的状态。
忙标志位(BSY)
BSY标志由硬件设置与清除(写入此位无效果),该标志位指示I2S通信层的状态。
该位为’1’时表I2S通讯正在进行中,但有一个例外:主接收模式(I2SCFG=11)下,在接收期间
BSY标志始终为低。
在软件要关闭SPI模块之前,可以使用BSY标志检测传输是否结束,这样可以避免破坏最后一次
传输,因此需要严格按照下述过程执行。
当传输开始时,BSY标志被置为’1’,除非I2S模块处于主接收模式。
下述情况时,该标志位被清除:
当传输结束时(除了主发送模式,这种模式下通信是连续的)
当关闭I2S模块时。
484/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
当通信是连续的时候:
在主发送模式时,整个传输期间,BSY标志始终为高;
在从模式时,每个数据项传输之间,BSY标志在1I2S时钟周期内变低。
注:
不要使用
BSY
标志处理每一个数据项的发送和接收,最好使用
TXE
RXNE
标志。
发送缓存空标志位(TXE)
该标志位为’1’表示发送缓冲器为空,可以对发送缓冲器写入新的待发送数据。在发送缓冲器中
已有数据时,标志位清’0’。在I2S被关闭时(I2SE位为’0’),该标志位也为’0’
接收缓存非空标志位(RXNE)
该标志位置’1’表示在接收缓存里有接收到的有效数据。在读取寄存器SPI_DR时,该位清’0’
声道标志位(CHSIDE)
在发送模式下,该标志位在TXE为高时刷新,指示从SD引脚上发送的数据所在的声道。如果
从发送模式下发生了下溢错误,该标志位的值无效,在重新开始通讯前需要把I2S关闭再打开。
在接收模式下,该标志位在寄存器SPI_DR接收到数据时刷新,指示接收到的数据所在的声道。
注意,如果发生错误(如上溢OVR),该标志位无意义,需要将I2S闭再打开(同时,如果必要修
I2S的配置)
PCM标准下,无论短帧格式还是长帧格式,这个标志位都没有意义。
如果寄存器SPI_SR的标志位OVRUDR’1’,且寄存器SPI_CR2ERRIE位为’1’,则会产生
中断。(中断源已经被清除后)可以通过读寄存器SPI_SR来清除中断标志。
23.4.7 错误标志位
I2S单元有2个错误标志位。
下溢标志位(UDR)
在从发送模式下,如果数据传输的第一个时钟边沿到达时,新的数据仍然没有写入SPI_DR寄存
器,该标志位会被置’1’。在寄存器SPI_I2SCFGRI2SMOD位置’1’后,该标志位才有效。如果
寄存器SPI_CR2ERRIE位为’1’,就会产生中断。
通过对寄存器SPI_SR进行读操作来清除该标志位。
上溢标志位(OVR)
如果还没有读出前一个接收到的数据时,又接收到新的数据,即产生上溢,该标志位置’1’,如
果寄存器SPI_CR2ERRIE位为’1’,则产生中断指示发生了错误。
这时,接收缓存的内容,不会刷新为从发送设备送来的新数据。对寄存器SPI_DR的读操作返回
最后一个正确接收到的数据。其他所有在上溢发生后由发送设备发出的16位数据都会丢失。
通过先读寄存器SPI_SR再读寄存器SPI_DR,来清除该标志位。
23.4.8 I2S中断
下表列举了全部I2S中断
170 I2S中断请求
中断事件 事件标志位 使能标志位
发送缓冲器空标志位 TXE TXEIE
接收缓冲器非空标志位 RXNE RXNEIE
下溢标志位 OVR
485/754
上溢标志位 UDR
ERRIE
23.4.9 DMA功能
DMA的工作方式在I2S模式除了CRC功能不可用以外,与在SPI模式完全相同。因为在I2S模式下
没有数据传输保护系统。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
23.5 SPII2S寄存器描述
486/754
关于寄存器描述中所用到的缩略词可参见第1.1节。
可以用半字(16)或字(32)的方式操作这些外设寄存器。
23.5.1 SPI控制寄存器 1(SPI_CR1)(I2S模式下不使用)
地址偏移:0x00
复位值:0x0000
1514131211109876543210
BIDI
MODE
BIDI
OE CRCEN CRC
NEXT DFF RX
ONLY SSM SSI LSB
FIRST SPE MSTR CPOL CPHA
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
BR[2:0]
BIDIMODE:双向数据模式使能 (Bidirectional data mode enable) 15
0:选择“双线双向”模式;
1:选择“单线双向”模式。
注:I2S模式下不使用。
BIDIOE:双向模式下的输出使能 (Output enable in bidirectional mode) 14
BIDIMODE位一起决定在“单线双向”模式下数据的输出方向
0:输出禁止(只收模式)
1:输出使能(只发模式)
这个“单线”数据线在主设备端为MOSI引脚,在从设备端为MISO引脚。
注:I2S模式下不使用。
CRCEN:硬件CRC校验使能 (Hardware CRC calculation enable) 13
0:禁止CRC计算;
1:启动CRC计算。
注:只有在禁止SPI(SPE=0),才能写该位,否则出错。
该位只能在全双工模式下使用。
注:I2S模式下不使用。
CRCNEXT:下一个发送CRC (Transmit CRC next) 12
0:下一个发送的值来自发送缓冲区。
1:下一个发送的值来自发送CRC寄存器。
注:在SPI_DR寄存器写入最后一个数据后应马上设置该位。
注:I2S模式下不使用。
DFF:数据帧格式 (Data frame format) 11
0:使用8位数据帧格式进行发送/接收;
1:使用16位数据帧格式进行发送/接收。
注:只有当SPI禁止(SPE=0)时,才能写该位,否则出错。
注:I2S模式下不使用。
RXONLY:只接收 (Receive only) 10
该位和BIDIMODE位一起决定在“双线双向”模式下的传输方向。在多个从设备的配置中,在
未被访问的从设备上该位被置1,使得只有被访问的从设备有输出,从而不会造成数据线上数
据冲突。
0:全双工(发送和接收)
1:禁止输出(只接收模式)
注:I2S模式下不使用。
SSM:软件从设备管理 (Software slave management) 9
SSM被置位时,NSS引脚上的电平由SSI位的值决定。
0:禁止软件从设备管理;
1:启用软件从设备管理。
注:I2S模式下不使用。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
SSI:内部从设备选择 (Internal slave select) 8
该位只在SSM位为’1’时有意义。它决定了NSS上的电平,在NSS引脚上的I/O操作无效。
注:I2S模式下不使用。
LSBFIRST:帧格式 (Frame format) 7
0:先发送MSB
1:先发送LSB
注:当通信在进行时不能改变该位的值。
注:I2S模式下不使用。
SPESPI使能 (SPI enable) 6
0:禁止SPI设备;
1:开启SPI设备。
注:I2S模式下不使用。
注:当关闭SPI设备时,请按照第23.3.8节的过程操作。
BR[2:0]:波特率控制 (Baud rate control) 5:3
000 fPCLK/2 001 fPCLK/4 010 fPCLK/8 011 fPCLK/16
100 fPCLK/32 101 fPCLK/64 110 fPCLK/128 111 fPCLK/256
当通信正在进行的时候,不能修改这些位。
注意:I2S模式下不使用。
MSTR:主设备选择 (Master selection) 2
0:配置为从设备;
1:配置为主设备。
注:当通信正在进行的时候,不能修改该位。
注:I2S模式下不使用。
CPOL:时钟极性 (Clock polarity) 1
0 空闲状态时,SCK保持低电平;
1 空闲状态时,SCK保持高电平。
注:当通信正在进行的时候,不能修改该位。
注:I2S模式下不使用。
CPHA:时钟相位 (Clock phase) 0
0 数据采样从第一个时钟边沿开始;
1 数据采样从第二个时钟边沿开始。
注:当通信正在进行的时候,不能修改该位。
注:I2S模式下不使用。
23.5.2 SPI控制寄存器 2(SPI_CR2)
地址偏移:0x04
复位值:0x0000
1514131211109876543210
TXEIE RXNEIE ERRIE SSOE TXDMA
EN
RXDMA
EN
rw rw rw rw rw rw
保留 保留
res res
15:8 保留位,硬件强制为0
TXEIE:发送缓冲区空中断使能 (Tx buffer empty interrupt enable) 7
0:禁止TXE中断;
1:允许TXE中断,当TXE标志置位为’1’时产生中断请求。
RXNEIE:接收缓冲区非空中断使能 (RX buffer not empty interrupt enable) 6
0:禁止RXNE中断;
1:允许RXNE中断,当RXNE标志置位时产生中断请求。
487/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
488/754
5 ERRIR:错误中断使能 (Error interrupt enable)
当错误(CRCERROVRMODF)产生时,该位控制是否产生中断
0:禁止错误中断;
1:允许错误中断。
4:3 保留位,硬件强制为0
SSOESS输出使能 (SS output enable) 2
0:禁止在主模式下SS输出,该设备可以工作在多主设备模式;
1:设备开启时,开启主模式下SS输出,该设备不能工作在多主设备模式。
注:I2S模式下不使用。
TXDMAEN:发送缓冲区DMA使能 (Tx buffer DMA enable) 1
当该位被设置时,TXE标志一旦被置位就发出DMA请求
0:禁止发送缓冲区DMA
1:启动发送缓冲区DMA
RXDMAEN:接收缓冲区DMA使能 (Rx buffer DMA enable) 0
当该位被设置时,RXNE标志一旦被置位就发出DMA请求
0:禁止接收缓冲区DMA
1:启动接收缓冲区DMA
23.5.3 SPI 状态寄存器(SPI_SR)
地址偏移:0x08
复位值:0x0002
1514131211109876543210
BSY OVR MODF CRC
ERR UDR CHSIDE TXE RXNE
rrrrcw0rrrr
保留
res
15:8 保留位,硬件强制为0
BSY:忙标志 (Busy flag) 7
0SPI不忙;
1SPI正忙于通信,或者发送缓冲非空。
该位由硬件置位或者复位。
23.3.7 23.3.8节。 注:使用这个标志时需要特别注意,详见第 节和第
OVR:溢出标志 (Overrun flag) 6
0:没有出现溢出错误;
1:出现溢出错误。
该位由硬件置位,由软件序列复位。关于软件序列的详细信息,参考23.4.7节。
MODF:模式错误 (Mode fault) 5
0:没有出现模式错误;
1:出现模式错误。
该位由硬件置位,由软件序列复位。关于软件序列的详细信息,参考23.3.10节。
注:I2S模式下不使用。
CRCERRCRC错误标志 (CRC error flag) 4
0:收到的CRC值和SPI_RXCRCR寄存器中的值匹配;
1:收到的CRC值和SPI_RXCRCR寄存器中的值不匹配。
该位由硬件置位,由软件写’0’而复位。
注:I2S模式下不使用。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
UDR:下溢标志位 (Underrun flag) 3
0:未发生下溢;
1:发生下溢。
该标志位由硬件置’1’,由一个软件序列清’0’,详见23.4.7节。
注:在SPI模式下不使用。
CHSIDE:声道 (Channel side) 2
0:需要传输或者接收左声道;
1:需要传输或者接收右声道。
注:在SPI模式下不使用。在PCM模式下无意义。
TXE:发送缓冲为空 (Transmit buffer empty) 1
0:发送缓冲非空;
1:发送缓冲为空。
RXNE:接收缓冲非空 (Receive buffer not empty) 0
0:接收缓冲为空;
1:接收缓冲非空。
23.5.4 SPI 数据寄存器(SPI_DR)
地址偏移:0x0C
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
DR[15:0]
DR[15:0]:数据寄存器 (Data register) 15:0
待发送或者已经收到的数据
数据寄存器对应两个缓冲区:一个用于写(发送缓冲);另外一个用于读(接收缓冲)。写操作将
数据写到发送缓冲区;读操作将返回接收缓冲区里的数据。
SPI模式的注释:根据SPI_CR1DFF位对数据帧格式的选择,数据的发送和接收可以是8
或者16位的。为保证正确的操作,需要在启用SPI之前就确定好数据帧格式。
对于8位的数据,缓冲器是8位的,发送和接收时只会用到SPI_DR[7:0]。在接收时,
SPI_DR[15:8]被强制为0
对于16位的数据,缓冲器是16位的,发送和接收时会用到整个数据寄存器,即SPI_DR[15:0]
23.5.5 SPI CRC多项式寄存器(SPI_CRCPR)(I2S模式下不使用)
地址偏移:0x10
复位值:0x0007
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
CRCPOLY[15:0]
CRCPOLY[15:0]CRC多项式寄存器 (CRC polynomial register) 15:0
该寄存器包含了CRC计算时用到的多项式。
其复位值为0x0007,根据应用可以设置其他数值。
注:在I2S模式下不使用。
489/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
23.5.6 SPI Rx CRC寄存器(SPI_RXCRCR)(I2S模式下不使用)
地址偏移:0x14
复位值: 0x0000
1514131211109876543210
rrrrrrrrrrrrrrrr
RxCRC[15:0]
RXCRC[15:0]:接收CRC寄存器 15:0
在启用CRC计算时,RXCRC[15:0]中包含了依据收到的字节计算的CRC数值。当在SPI_CR1
CRCEN位写入’1’时,该寄存器被复位。CRC计算使用SPI_CRCPR中的多项式。
当数据帧格式被设置为8位时,仅低8位参与计算,并且按照CRC8的方法进行;当数据帧格式
16位时,寄存器中的所有16位都参与计算,并且按照CRC16的标准。
注:当BSY标志为’1’时读该寄存器,将可能读到不正确的数值。
注:在I2S模式下不使用。
23.5.7 SPI Tx CRC寄存器(SPI_TXCRCR)
地址偏移:0x18
复位值:0x0000
1514131211109876543210
rrrrrrrrrrrrrrrr
TxCRC[15:0]
TxCRC[15:0]:发送CRC寄存器 15:0
在启用CRC计算时,TXCRC[15:0]中包含了依据将要发送的字节计算的CRC数值。当在
SPI_CR1中的CRCEN位写入’1’时,该寄存器被复位。CRC计算使用SPI_CRCPR中的多项
式。
当数据帧格式被设置为8位时,仅低8位参与计算,并且按照CRC8的方法进行;当数据帧格式
16位时,寄存器中的所有16个位都参与计算,并且按照CRC16的标准。
注:当BSY标志为’1’时读该寄存器,将可能读到不正确的数值。
注:在I2S模式下不使用。
23.5.8 SPI_I2S配置寄存器(SPI_I2S_CFGR)
地址偏移:0x1C
复位值: 0x0000
1514131211109876543210
I2S
MOD I2SE PCM
SYNC 保留 CKPOL CHLEN
rw rw rw res rw rw
rwres rw rw
保留 I2SCFG I2SSTD DATLEN
15:12 保留位,硬件强制为0
I2SMODI2S模式选择 (I2S mode selection) 11
0: 选择SPI模式;
1: 选择I2S模式。
注:该位只有在关闭了SPI或者I2S时才能设置。
I2SE: I2S使能 (I2S enable) 10
0: 关闭I2S
1: I2S使能。
注:在SPI模式下不使用。
490/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
I2SCFGI2S模式设置 (I2S configuration mode) 9:8
00: 从设备发送;
01: 从设备接收;
10: 主设备发送;
11: 主设备接受。
注:该位只有在关闭了I2S时才能设置。
SPI模式下不使用。
PCMSYNCPCM帧同步 (PCM frame synchronization) 7
0: 短帧同步;
1: 长帧同步。
: 该位只在I2SSTD = 11 (使用PCM标准)时有意义。
SPI模式下不使用。
6 保留位,硬件强制为0
I2SSTDI2S标准选择 (I2S standard selection) 5:4
00: I2S飞利浦标准;
01: 高字节对齐标准 (左对齐)
10: 低字节对齐标准(右对齐)
11: PCM 标准。
关于I2S标准的细节,详见23.4.2节。
注:为了正确操作,只有在关闭了I2S时才能设置该位。
SPI模式下不使用。
CKPOL:静止态时钟极性 (Steady state clock polarity) 3
0: I2S时钟静止态为低电平;
1: I2S时钟静止态为高电平。
注:为了正确操作,该位只有在关闭了I2S时才能设置。
SPI模式下不使用。
DATLEN:待传输数据长度 (Data length to be transferred) 2:1
00: 16位数据长度;
01: 24位数据长度;
10: 32位数据长度;
11: 不允许。
注:为了正确操作,该位只有在关闭了I2S时才能设置。
SPI模式下不使用。
CHLEN:声道长度 (每个音频声道的数据位数) (Channel length (number of bits per audio
channel))
0
0: 16位宽;
1: 32位宽。
只有在 DATLEN = 00 时该位的写操作才有意义,否则声道长度都由硬件固定为32位。
注:为了正确操作,该位只有在关闭了I2S时才能设置。
SPI模式下不使用。
23.5.9 SPI_I2S预分频寄存器(SPI_I2SPR)
地址偏移:0x20
复位值: 0x0002
1514131211109876543210
MCKOE ODD
rw rw
保留 I2SDIV
rw
15:10 保留位,硬件强制为0
491/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
SPI接口 STM32F10xxx参考手册
492/754
参照200912 RM0008 Reference Manual 英文第10
9 MCKOE:主设备时钟输出使能 (Master clock output enable)
0: 关闭主设备时钟输出;
1: 主设备时钟输出使能。
注:为了正确操作,该位只有在关闭了I2S时才能设置。仅在I2S主设备模式下使用该位。
SPI模式下不使用。
8 ODD:奇系数预分频 (Odd factor for the prescaler)
0: 实际分频系数 = I2SDIV *2
1: 实际分频系数 = (I2SDIV * 2)+1
23.4.3节。 参见
注:为了正确操作,该位只有在关闭了I2S时才能设置。仅在I2S主设备模式下使用该位。
SPI模式下不使用。
7:0 I2SDIVI2S线性预分频 (I2S linear prescaler)
禁止设置I2SDIV [7:0] = 0或者I2SDIV [7:0] = 1
23.4.3节。 参见
注:为了正确操作,该位只有在关闭了I2S时才能设置。仅在I2S主设备模式下使用该位。
SPI模式下不使用。
23.5.10 SPI 寄存器地址映象
171 SPI寄存器列表及其复位值
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
SPI_CR1
BIDIMODE
BIDIOE
CRCEN
CRCNEXT
DFF
RXOnly
SSM
SSI
LSBFIRST
SPE
MSTR
CPOL
CPHA
复位值 0000000000000000
SPI_CR2
TXEIE
RXNEIE
ERRIE
SSOE
TXDMAE
RXDMAE
复位值 000 000
SPI_SR
BSY
OVR
MODF
CRCER
TXE
RXNE
复位值 0000 10
SPI_DR
复位值 0000000000000000
SPI_CRCPR
复位值 0000000000000111
SPI_RXCRCR
复位值 0000000000000000
SPI_TXCRCR
复位值 0000000000000000
SPI_I2SCFGR
I2SMOD
I2SE
PCMSYNC
CKPOL
CHLEN
复位值 00000 000000
SPI_I2SPR
MCKOE
ODD
复位值 0000000010
I2SDIV
保留
020h
保留
TxCRC[15:0]
01Ch
保留
I2SCFG
保留
I2SSTD
DATLEN
保留
DR[15:0]
保留
RxCRC[15:0]
保留
CRCPOLY[15:0]
BR[2:0]
保留
保留
保留
保留
保留
018h
000h
004h
014h
010h
00Ch
008h
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
关于寄存器的起始地址,参见表1
I2C接口 STM32F10xxx参考手册
24 I2C接口
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
24.1 I2C简介
I2C(芯片间)总线接口连接微控制器和串行I2C总线。它提供多主机功能,控制所有I2C总线特定的
时序、协议、仲裁和定时。支持标准和快速两种模式,同时与SMBus 2.0兼容。
I2C模块有多种用途,包括CRC码的生成和校验、SMBus(系统管理总线—System Management
Bus)PMBus(电源管理总线—Power Management Bus)
根据特定设备的需要,可以使用DMA以减轻CPU的负担。
24.2 I2C主要特点
并行总线/I2C总线协议转换器
多主机功能:该模块既可做主设备也可做从设备
I2C主设备功能
产生时钟
产生起始和停止信号
I2C从设备功能
可编程的I2C地址检测
可响应2个从地址的双地址能力
停止位检测
产生和检测7/10位地址和广播呼叫
支持不同的通讯速度
标准速度(高达100 kHz)
快速(高达400 kHz)
状态标志:
发送器/接收器模式标志
字节发送结束标志
I
2C总线忙标志
错误标志
主模式时的仲裁丢失
地址/数据传输后的应答(ACK)错误
检测到错位的起始或停止条件
禁止拉长时钟功能时的上溢或下溢
2个中断向量
1个中断用于地址/数据通讯成功
1个中断用于错误
可选的拉长时钟功能
具单字节缓冲器的DMA
493/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
可配置的PEC(信息包错误检测)的产生或校验:
发送模式中PEC值可以作为最后一个字节传输
用于最后一个接收字节的PEC错误校验
兼容SMBus 2.0
25 ms时钟低超时延时
10 ms主设备累积时钟低扩展时间
25 ms从设备累积时钟低扩展时间
ACK控制的硬件PEC产生/校验
支持地址分辨协议(ARP)
兼容SMBus
注:
不是所有产品中都包含上述所有特性。请参考相关的数据手册,确认该产品支持的
I2C
功能。
24.3 I2C功能描述
I2C模块接收和发送数据,并将数据从串行转换成并行,或并行转换成串行。可以开启或禁止中
断。接口通过数据引脚(SDA)和时钟引脚(SCL)连接到I2C总线。允许连接到标准(高达100kHz)
快速(高达400kHz)I2C总线。
24.3.1 模式选择
接口可以下述4种模式中的一种运行:
从发送器模式
从接收器模式
主发送器模式
主接收器模式
该模块默认地工作于从模式。接口在生成起始条件后自动地从从模式切换到主模式;当仲裁丢
失或产生停止信号时,则从主模式切换到从模式。允许多主机功能。
通信流
主模式时,I2C接口启动数据传输并产生时钟信号。串行数据传输总是以起始条件开始并以停止
条件结束。起始条件和停止条件都是在主模式下由软件控制产生。
从模式时,I2C接口能识别它自己的地址(7位或10)和广播呼叫地址。软件能够控制开启或禁止
广播呼叫地址的识别。
数据和地址按8/字节进行传输,高位在前。跟在起始条件后的12个字节是地址(7位模式为1
个字节,10位模式为2个字节)。地址只在主模式发送。
在一个字节传输的8个时钟后的第9个时钟期间,接收器必须回送一个应答位(ACK)给发送器。参
考下图。
I2C总线协议 241
软件可以开启或禁止应答(ACK),并可以设置I2C接口的地址(7位、10位地址或广播呼叫地址)
I2C接口的功能框图示于下图。
494/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
I2C的功能框图 242
注:
SMBus
模式下,
SMBALERT
是可选信号。如果禁止了
SMBus
,则不能使用该信号。
24.3.2 I2C从模式
默认情况下,I2C接口总是工作在从模式。从从模式切换到主模式,需要产生一个起始条件。
为了产生正确的时序,必须在I2C_CR2寄存器中设定该模块的输入时钟。输入时钟的频率必须
至少是:
标准模式下为:2MHz
快速模式下为:4MHz
一旦检测到起始条件,在SDA线上接收到的地址被送到移位寄存器。然后与芯片自己的地址
OAR1OAR2(ENDUAL=1)或者广播呼叫地址(如果ENGC=1)相比较。
注:
10
位地址模式时,比较包括头段序列
(11110xx0)
,其中的
xx
是地址的两个最高有效位。
头段或地址不匹配I2C接口将其忽略并等待另一个起始条件。
头段匹配(10位模式):如果ACK位被置’1’I2C接口产生一个应答脉冲并等待8位从地址。
地址匹配:I2C接口产生以下时序:
如果ACK被置’1’,则产生一个应答脉冲
硬件设置ADDR位;如果设置了ITEVFEN位,则产生一个中断
如果ENDUAL=1,软件必须读DUALF位,以确认响应了哪个从地址。
10位模式,接收到地址序列后,从设备总是处于接收器模式。在收到与地址匹配的头序列并
且最低位为’1’(11110xx1)后,当接收到重复的起始条件时,将进入发送器模式。
495/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
在从模式下TRA位指示当前是处于接收器模式还是发送器模式。
从发送器
在接收到地址和清除ADDR位后,从发送器将字节从DR寄存器经由内部移位寄存器发送到SDA
线上。
从设备保持SCL为低电平,直到ADDR位被清除并且待发送数据已写入DR寄存器。(见下图中
EV1EV3)
当收到应答脉冲时:
TxE位被硬件置位,如果设置了ITEVFENITBUFEN位,则产生一个中断。
如果TxE位被置位,但在下一个数据发送结束之前没有新数据写入到I2C_DR寄存器,则BTF
被置位,在清除BTF之前I2C接口将保持SCL为低电平;读出I2C_SR1之后再写入I2C_DR寄存器
将清除BTF位。
243 从发送器的传送序列图
说明:S=Start(起始条件)Sr=重复的起始条件,P=Stop(停止条件)A=响应,NA=非响应,
EVx=事件(ITEVFEN=1时产生中断)
EV1ADDR=1,读SR1然后读SR2将清除该事件。
EV3-1TxE=1,移位寄存器空,数据寄存器空,写DR
EV3TxE=1,移位寄存器非空,数据寄存器空,写DR将清除该事件。
EV3-2AF=1,在SR1寄存器的AF位写’0’可清除AF位。
注:1 – EV1EV3_1事件拉长SCL低的时间,直到对应的软件序列结束。
2 – EV3的软件序列必须在当前字节传输结束之前完成。
从接收器
在接收到地址并清除ADDR后,从接收器将通过内部移位寄存器从SDA线接收到的字节存进DR
寄存器。I2C接口在接收到每个字节后都执行下列操作:
如果设置了ACK位,则产生一个应答脉冲
硬件设置RxNE=1。如果设置了ITEVFENITBUFEN位,则产生一个中断。
如果RxNE被置位,并且在接收新的数据结束之DR寄存器未被读出,BTF位被置位,在清除
BTF之前I2C接口将保持SCL为低电平;读出I2C_SR1之后再写入I2C_DR寄存器将清除BTF位。
(见下图)
496/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
244 从接收器的传送序列图
说明:S=Start(起始条件)Sr=重复的起始条件,P=Stop(停止条件)A=响应,NA=非响应,
EVx=事件(ITEVFEN=1时产生中断)
EV1ADDR=1,读SR1然后读SR2将清除该事件。
EV2RxNE=1,读DR将清除该事件。
EV4STOPF=1,读SR1然后写CR1寄存器将清除该事件。
注:1 – EV1事件拉长SCL低的时间,直到对应的软件序列结束。
2 – EV2的软件序列必须在当前字节传输结束之前完成。
关闭从通信
在传输完最后一个数据字节后,主设备产生一个停止条件, I2C接口检测到这一条件时:
设置STOPF=1,如果设置了ITEVFEN位,则产生一个中断。
然后I2C接口等待读SR1寄存器,再写CR1寄存器。(见上图的EV4)
24.3.3 I2C主模式
在主模式时,I2C接口启动数据传输并产生时钟信号。串行数据传输总是以起始条件开始并以停
止条件结束。当通过START位在总线上产生了起始条件,设备就进入了主模式。
以下是主模式所要求的操作顺序:
I2C_CR2寄存器中设定该模块的输入时钟以产生正确的时序
配置时钟控制寄存器
配置上升时间寄存器
编程I2C_CR1寄存器启动外设
I2C_CR1寄存器中的START位为1,产生起始条件
I2C模块的输入时钟频率必须至少是:
标准模式下为:2MHz
快速模式下为:4MHz
起始条件
BUSY=0时,设置START=1I2C接口将产生一个开始条件并切换至主模式(M/SL位置位)
注:
在主模式下,设置
START
位将在当前字节传输完后由硬件产生一个重开始条件。
一旦发出开始条件:
SB位被硬件置位,如果设置了ITEVFEN位,则会产生一个中断。
245
497/754
然后主设备等待读SR1寄存器,紧跟着将从地址写入DR寄存器(见 和图246EV5)
从地址的发送
从地址通过内部移位寄存器被送到SDA线上。
10位地址模式时,发送一个头段序列产生以下事件:
ADD10位被硬件置位,如果设置了ITEVFEN位,则产生一个中断。
245然后主设备等待读SR1寄存器,再将第二个地址字节写入DR寄存器(见 和图246)
ADDR位被硬件置位,如果设置了ITEVFEN位,则产生一个中断。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
随后主设备等待一次读SR1寄存器,跟着读SR2寄存器(见图245
498/754
和图246)
7位地址模式时,只需送出一个地址字节。
一旦该地址字节被送出,
ADDR位被硬件置位,如果设置了ITEVFEN位,则产生一个中断。
随后主设备等待一次读SR1寄存器,跟着读SR2寄存器(见图245和图246)
根据送出从地址的最低位,主设备决定进入发送器模式还是进入接收器模式。
7位地址模式时,
要进入发送器模式,主设备发送从地址时置最低位为’0’
要进入接收器模式,主设备发送从地址时置最低位为’1’
10位地址模式时
要进入发送器模式,主设备先送头字节(11110xx0),然后送最低位为’0’的从地址。(这里
xx代表10位地址中的最高2位。)
要进入接收器模式,主设备先送头字节(11110xx0),然后送最低位为’1’的从地址。然后再
重新发送一个开始条件,后面跟着头字节(11110xx1)(这里xx代表10位地址中的最高2位。)
TRA位指示主设备是在接收器模式还是发送器模式。
主发送器
在发送了地址和清除了ADDR位后, 主设备通过内部移位寄存器将字节从DR寄存器发送到SDA
线上。
主设备等待,直到TxE被清除,(见图245EV8)
当收到应答脉冲时:
TxE位被硬件置位,如果设置了INEVFENITBUFEN位,则产生一个中断。
如果TxE被置位并且在上一次数据发送结束之前没有写新的数据字节到DR寄存器,则BTF被硬
件置位,在清除BTF之前I2C接口将保持SCL为低电平;读出I2C_SR1之后再写入I2C_DR寄存器
将清除BTF
关闭通信
DR寄存器中写入最后一个字节后,通过设置STOP位产生一个停止条件(见图245EV8_2)
然后I2C接口将自动回到从模式(M/S位清除)
注:
TxE
BTF
位置位时,停止条件应安排在出现
EV8_2
事件时。
245 主发送器传送序列图
说明:S=Start(起始条件)Sr=重复的起始条件,P=Stop(停止条件)A=响应,NA=非响应,
EVx=事件(ITEVFEN=1时产生中断)
EV5SB=1,读SR1然后将地址写入DR寄存器将清除该事件。
EV6ADDR=1,读SR1然后读SR2将清除该事件。
EV8_1TxE=1,移位寄存器空,数据寄存器空,写DR存器。
EV8TxE=1,移位寄存器非空,数据寄存器空,写入DR寄存器将清除该事件。
EV8_2TxE=1BTF=1,请求设置停止位。TxEBTF位由硬件在产生停止条件时清除。
EV9ADDR10=1,读SR1然后写入DR寄存器将清除该事件。
注:1 – EV5EV6EV9EV8_1EV8_2事件拉长SCL低的时间,直到对应的软件序列结束。
2 – EV8的软件序列必须在当前字节传输结束之前完成。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
主接收器
在发送地址和清除ADDR之后,I2C接口进入主接收器模式。在此模式下,I2C接口从SDA线接收
数据字节,并通过内部移位寄存器送至DR寄存器。在每个字节后,I2C接口依次执行以下操作:
如果ACK位被置位,发出一个应答脉冲。
硬件设置RxNE=1,如果设置了INEVFENITBUFEN位,则会产生一个中断(见图246
EV7)
如果RxNE位被置位,并且在接收新数据结束前,DR寄存器中的数据没有被读走,硬件将设置
BTF=1,在清除BTF之前I2C接口将保持SCL为低电平;读出I2C_SR1之后再读出I2C_DR寄存
器将清除BTF位。
关闭通信
主设备在从从设备接收到最后一个字节后发送一个NACK。接收到NACK后,从设备释放对SCL
SDA线的控制;主设备就可以发送一个停止/重起始条件。
为了在收到最后一个字节后产生一个NACK脉冲,在读倒数第二个数据字节之后(在倒数第
二个RxNE事件之后)必须清除ACK位。
为了产生一个停止/重起始条件,软件必须在读倒数第二个数据字节之后(在倒数第二个
RxNE事件之后)设置STOP/START位。
只接收一个字节时,刚好在EV6之后(EV6_1时,清除ADDR之后)要关闭应答和停止条件的
产生位。
在产生了停止条件后,I2C接口自动回到从模式(M/SL位被清除)
246 主接收器传送序列图
说明:S=Start(起始条件)Sr=重复的起始条件,P=Stop(停止条件)A=响应,NA=非响应,
EVx=事件(ITEVFEN=1时产生中断)
EV5SB=1,读SR1然后将地址写入DR寄存器将清除该事件。
EV6ADDR=1,读SR1然后读SR2将清除该事件。在10 位主接收模式下,该事件后应设置CR2
START=1
EV6_1:没有对应的事件标志,只适于接收1个字节的情况。恰好在EV6之后(即清除ADDR之后),要清
除响应和停止条件的产生位。
EV7RxNE=1,读DR寄存器清除该事件。
EV7_1RxNE=1,读DR寄存器清除该事件。设置ACK=0STOP请求。
EV9
ADDR10=1
SR1
然后写入
DR
寄存器将清除该事件
1.如果收到一个单独的字节,则是NA
2EV5EV6EV9事件拉长SCL低电平,直到对应的软件序列结束。
3EV7的软件序列必须在当前字节传输结束前完成。
4EV6_1EV7_1的软件序列 必须在当前传输字节的ACK脉冲之前完成。
24.3.4 错误条件
以下条件可能造成通讯失败。
总线错误(BERR)
在一个地址或数据字节传输期间,当I2C接口检测到一个外部的停止或起始条件则产生总线错
误。此时:
499/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
BERR位被置位为’1’;如果设置了ITERREN位,则产生一个中断;
在从模式情况下,数据被丢弃,硬件释放总线:
如果是错误的开始条件,从设备认为是一个重启动,并等待地址或停止条件。
如果是错误的停止条件,从设备按正常的停止条件操作,同时硬件释放总线。
在主模式情况下,硬件不释放总线,同时不影响当前的传输状态。此时由软件决定是否要
中止当前的传输。
应答错误(AF)
当接口检测到一个无应答位时,产生应答错误。此时:
AF位被置位,如果设置了ITERREN位,则产生一个中断;
当发送器接收到一个NACK时,必须复位通讯:
如果是处于从模式,硬件释放总线。
如果是处于主模式,软件必须生成一个停止条件。
仲裁丢失(ARLO)
I2C接口检测到仲裁丢失时产生仲裁丢失错误,此时:
ARLO位被硬件置位,如果设置了ITERREN位,则产生一个中断;
I2C接口自动回到从模式(M/SL位被清除)。当I2C接口丢失了仲裁,则它无法在同一个传输中
响应它的从地址,但它可以在赢得总线的主设备发送重起始条件之后响应;
硬件释放总线。
过载/欠载错误(OVR)
在从模式下,如果禁止时钟延长,I2C接口正在接收数据时,当它已经接收到一个字节
(RxNE=1),但在DR寄存器中前一个字节数据还没有被读出,则发生过载错误。此时:
最后接收的数据被丢弃;
在过载错误时,软件应清除RxNE位,发送器应该重新发送最后一次发送的字节。
在从模式下,如果禁止时钟延长,I2C接口正在发送数据时,在下一个字节的时钟到达之前,新
的数据还未写入DR寄存器(TxE=1),则发生欠载错误。此时:
DR寄存器中的前一个字节将被重复发出;
用户应该确定在发生欠载错时,接收端应丢弃重复接收到的数据。发送端应按I2C总线标准
在规定的时间更新DR寄存器。
在发送第一个字节时,必须在清除ADDR之后并且第一个SCL上升沿之前写入DR寄存器;如果
不能做到这点,则接收方应该丢弃第一个数据。
24.3.5 SDA/SCL线控制
如果允许时钟延长:
发送器模式:如果TxE=1BTF=1I2C接口在传输前保持时钟线为低,以等待软件读取
SR1,然后把数据写进数据寄存器(缓冲器和移位寄存器都是空的)
接收器模式:如果RxNE=1BTF=1I2C接口在接收到数据字节后保持时钟线为低,以
等待软件读SR1,然后读数据寄存器DR(缓冲器和移位寄存器都是满的)
如果在从模式中禁止时钟延长:
如果RxNE=1,在接收到下个字节前DR还没有被读出,则发生过载错。接收到的最后一
个字节丢失。
如果TxE=1,在必须发送下个字节之前却没有新数据写进DR,则发生欠载错。相同的字
节将被重复发出。
不控制重复写冲突。
500/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
24.3.6 SMBus
介绍
系统管理总线(SMBus)是一个双线接口。通过它,各设备之间以及设备与系统的其他部分之
可以互相通信。它基于I2C操作原理。SMBus为系统和电源管理相关的任务提供一条控制总线。
一个系统利用SMBus可以和多个设备互传信息,而不需使用独立的控制线路。
系统管理总线(SMBus)标准涉及三类设备。从设备:接收或响应命令的设备。主设备:用来
送命令、产生时钟和终止发送的设备。主机:一种专用的主设备,它提供与系统CPU的主接
口。主机必须具有主-从机功能并且必须支持SMBus提醒协议。一个系统里只允许有一个主机。
SMBusI2C之间的相似点
2条线的总线协议(1个时钟,1个数据) + 可选的SMBus提醒线;
-从通信,主设备提供时钟;
多主机功能
SMBus数据格式类似于I2C7位地址格式(见图241)
SMBusI2C之间的不同点
下表列出了SMBusI2C的不同点。
172 SMBusI2C的比较
SMBus I2C
最大传输速度100kHz 最大传输速度400kHz
最小传输速度10kHz 无最小传输速度
35ms时钟低超时 无时钟超时
固定的逻辑电平 逻辑电平由VDD决定
不同的地址类型(保留的、动态的等) 7位、10位和广播呼叫从地址类型
不同的总线协议(快速命令、处理呼叫等) 无总线协议
SMBus应用用途
利用系统管理总线,设备可提供制造商信息,告诉系统它的型号/部件号,保存暂停事件的状
态,报告不同类型的错误,接收控制参数,和返回它的状态。SMBus为系统和电源管理相关的
任务提供控制总线。
设备标识
在系统管理总线上,任何一个作为从模式的设备都有一个唯一的地址,叫做从地址。保留的从
地址表请参考2.0版的SMBus规范(http://smbus.org/specs/)
总线协议
SMBus技术规范支持9个总线协议。有关这些协议的详细资料和SMBus地址类型,请参考2.0
SMBus规范(http://smbus.org/specs/)。这些协议由用户的软件来执行。
地址解析协议(ARP)
通过给每个从设备动态地分配一个新的唯一地址,可以解决SMBus的从地址冲突。地址解析协
(ARP)具有以下的特性:
使用标准SMBus物理层仲裁机制分配地址;
当设备维持供电期间,分配的地址仍保持不变,也允许设备在断电后保留其地址。
在地址分配后,没有额外的SMBus的打包开销(也就是说访问分配地址的设备与访问固定地
址的设备所用时间是一样的)
任何一个SMBus主设备可以遍历总线。
唯一的设备标识符(UDID)
为了分配地址,需要一种区分每个设备的机制,每个设备必须拥有一个唯一的设备标识符。
501/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
关于在ARP128位的UDID的详细信息,参考2.0版的SMBus规范(http://smbus.org/specs/)
SMBus提醒模式
SMBus提醒是一个带中断线的可选信号,用于那些希望扩展它们的控制能力而牺牲一个引脚的
设备。SMBALERTSCLSDA信号一样,是一种线与信号。SMBALERT通常和SMBus广播
呼叫地址一起使用。与SMBus有关的消息为2字节。
一个只具有从功能的设备,可以通过设置I2C_CR1寄存器上的ALERT位,使用SMBALERT给主
机发信号表示它希望进行通信。主机处理该中断并通过提醒响应地址ARA(Alert Response
Address,地址值为0001100x)访问所有SMBALERT设备。只有那些将SMBALERT拉低的设备
能应答ARA。此状态是由I2C_SR1寄存器中的SMBALERT状态标记来标识的。主机执行一个修
改过的接收字节操作。由从发送设备提供的7设备地址被放在字节的7个最高位上,第八个位
可以是’0’’1’
如果多个设备把SMBALERT拉低,最高优先级设备(最小的地址)将在地址传输期间通过标准仲
裁赢得通信权。在确认从地址后,此设备不得再拉低它的SMBALERT,如果当信息传输完
后,主机仍看到SMBALERT低,就知道需要再次读ARA
没有实现SMBALERT信号的主机可以定期访问ARA
有关SMBus提醒模式的更多详细资料,请参考2.0版的SMBus规范(http://smbus.org/specs/)
超时错误
在定时规范上I2CSMBus之间有很多差别。
SMBus定义了一个时钟低超时,35ms的超时。SMBus规定TLOW:SEXT为从设备的累积时钟低
扩展时间。SMBus规定TLOW:MEXT为主设备的累积时钟低扩展时间。更多超时细节请参考2.0
版的SMBus规范(http://smbus.org/specs/)
I2C_SR1中的状态标志TimeoutTlow错误表明了这个特性的状态。
如何使用SMBus模式的接口
为了从I2C模式切换到SMBus模式,应该执行下列步骤:
设置I2C_CR1寄存器中的SMBus位;
按应用要求配置I2C_CR1寄存器中的SMBTYPEENARP位。
24.3.3 I2C主模式 24.3.2。否则,参见 如果要把设备配置成主设备,产生起始条件的步骤见
I2C从模式。
软件程序必须处理多种SMBus协议。
如果ENARP=1SMBTYPE=0,使用SMB设备默认地址。
如果ENARP=1SMBTYPE=1,使用SMB主设备头字段。
如果SMBALERT=1,使用SMB提醒响应地址。
24.3.7 DMA请求
DMA请求(当被使能时)仅用于数据传输。发送时数据寄存器变空或接收时数据寄存器变满,则
产生DMA请求。DMA请求必须在当前字节传输结束之前被响应。当为相应DMA通道设置的数据
传输量已经完成时,DMA控制器发送传输结束信号ETOI2C接口,并且在中断允许时产生一个
传输完成中断:
主发送器:在EOT中断服务程序中,需禁止DMA请求,然后在等到BTF事件后设置停止条
件。
主接收器:当要接收的数据数目大于或等于2时,DMA控制器发送一个硬件信号EOT_1,它
对应DMA传输(字节数-1)。如果在I2C_CR2寄存器中设置了LAST位,硬件在发送完
EOT_1后的下一个字节,将自动发送NACK。在中断允许的情况下,用户可以在DMA传输
完成的中断服务程序中产生一个停止条件。
502/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
利用DMA发送
通过设置I2C_CR2寄存器中的DMAEN位可以激活DMA模式。只要TxE位被置位,数据将由
DMA从预置的存储区装载进I2C_DR寄存器。为I2C分配一个DMA通道,须执行以下步(x是通
道号)
1. DMA_CPARx寄存器中设置I2C_DR寄存器地址。数据将在每个TxE事件后从存储器传
送至这个地址。
2. DMA_CMARx寄存器中设置存储器地址。数据在每个TxE事件后从这个存储区传送至
I2C_DR
3. DMA_CNDTRx寄存器中设置所需的传输字节数。在每个TxE事件后,此值将被递减。
4. 利用DMA_CCRx寄存器中的PL[0:1]位配置通道优先级。
5. 设置DMA_CCRx寄存器中的DIR位,并根据应用要求可以配置在整个传输完成一半或全
部完成时发出中断请求。
6. 通过设置DMA_CCTx寄存器上的EN位激活通道。
DMA控制器中设置的数据传输数目已经完成时,DMA控制器给I2C接口发送一个传输结束的
EOT/ EOT_1信号。在中断允许的情况下,将产生一个DMA中断。
注:
如果使用
DMA
进行发送时,不要设置
I2C_CR2
寄存器的
ITBUFEN
位。
利用DMA接收
通过设置I2C_CR2寄存器中的DMAEN位可以激活DMA接收模式。每次接收到数据字节时,将
DMAI2C_DR寄存器的数据传送到设置的存储区(参考DMA说明)。设置DMA通道进行I2C
收,须执行以下步骤(x是通道号)
1. DMA_CPARx寄存器中设置I2C_DR寄存器的地址。数据将在每次RxNE事件后从此地
址传送到存储区。
2. DMA_CMARx寄存器中设置存储区地址。数据将在每次RxNE事件后从I2C_DR寄存器
传送到此存储区。
3. DMA_CNDTRx寄存器中设置所需的传输字节数。在每个RxNE事件后,此值将被递
减。
4. DMA_CCRx寄存器中的PL[0:1]配置通道优先级。
5. 清除DMA_CCRx寄存器中的DIR位,根据应用要求可以设置在数据传输完成一半或全部
完成时发出中断请求。
6. 设置DMA_CCRx寄存器中的EN位激活该通道。
DMA控制器中设置的数据传输数目已经完成时,DMA控制器给I2C接口发送一个传输结束的
EOT/ EOT_1信号。在中断允许的情况下,将产生一个DMA中断。
注:
如果使用
DMA
进行接收时,不要设置
I2C_CR2
寄存器的
ITBUFEN
位。
24.3.8 包错误校验(PEC)
包错误校验(PEC)计算器是用于提高通信的可靠性,这个计算器使用下CRC-8多项式对每一位
串行数据进行计算:
C(x) = x8 + x2 + x + 1
PEC计算由I2C_CR1寄存器的ENPEC位激活。PEC使用CRC-8算法对所有信息字节进行计
算,包括地址和读/写位在内。
在发送时:在最后一个TxE事件时设置I2C_CR1寄存器的PEC传输位,PEC将在最后一个
字节后被发送。
在接收时:在最后一个RxNE事件之后设置I2C_CR1寄存器的PEC位,如果下个接收到的
字节不等于内部计算的PEC,接收器发送一个NACK。如果是主接收器,不管校对的结果
如何, PEC后都将发送NACKPEC位必须在接收当前字节的ACK脉冲之前设置。
I2C_SR1寄存器中可获得PECERR错误标记/中断。
如果DMAPEC计算器都被激活:
503/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
在发送时:当I2C接口从DMA控制器处接收到EOT信号时,它在最后一个字节后自动发送
PEC
在接收时:当I2C接口从DMA处接收到一个EOT_1信号时,它将自动把下一个字节作为
PEC,并且将检查它。在接收到PEC后产生一个DMA请求。
为了允许中间PEC传输,在I2C_CR2寄存器中有一个控制位(LAST)用于判别是否真是最
后一个DMA传输。如果确实是最后一个主接收器的DMA请求,在接收到最后一个字节后自
动发送NACK
仲裁丢失时PEC计算失效。
24.4 I2C中断请求
下表列出了所有的I2C中断请求
173 I2C中断请求表:
中断事件 事件标志 开启控制位
SB
起始位已发送()
ADDR
地址已发送() 地址匹配()
ADD10
504/754
10位头段已发送() ITEVFEN
STOPF
已收到停止()
BTF
数据字节传输完成
RxNE
接收缓冲区非空 ITEVFEN
ITBUFEN
TxE
发送缓冲区空
BERR
总线错误
ARLO
仲裁丢失()
AF
响应失败
OVR
过载/欠载 ITERREN
PECERR
PEC错误
TIMEOUT
超时/Tlow错误
SMBALERT
SMBus提醒
注:
1. SB
ADDR
ADD10
STOPF
BTF
RxNE
TxE
通过逻辑或汇到同一个中断通道中。
2. BERR
ARLO
AF
OVR
PECERR
TIMEOUT
SMBALERT
通过逻辑或汇到同一个中
断通道中。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
I2C中断映射图 247
24.5 I2C调试模式
当微控制器进入调试模式(Cortex-M3 核心处于停止状态)时,根据DBG 模块中的
DBG_I2Cx_SMBUS_TIMEOUT配置位,SMBUS超时控制或者继续正常工作或者可以停止。详
见第29.16.2节。
24.6 I2C寄存器描述
505/754
关于在寄存器描述里面所用到的缩写,详见第1.1节。
可以用半字(16)或字(32)的方式操作这些外设寄存器。
24.6.1 控制寄存器 1(I2C_CR1)
地址偏移:0x00
复位值:0x0000
1514131211109876543210
SWRST 保留
ALERT PEC POS ACK STOP START NO
STRETCH ENGC ENPEC ENARP SMB
TYPE
保留
SMBUS PE
rw res rw rw rw rw rw rw rw rw rw rw rw res rw rw
SWRST:软件复位 (Software reset) 15
当被置位时,I2C处于复位状态。在复位该位前确信I2C的引脚被释放,总线是空的。
0I2C模块不处于复位状态;
1: I2C模块处于复位状态。
注:该位可以用于BUSY位为’1’,在总线上又没有检测到停止条件时。
14 保留位,硬件强制为0
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
ALERTSMBus提醒 (SMBus alert) 13
软件可以设置或清除该位;当PE=0时,由硬件清除。
0:释放SMBAlert引脚使其变高。提醒响应地址头紧跟在NACK信号后面;
1:驱动SMBAlert引脚使其变低。提醒响应地址头紧跟在ACK信号后面。
PEC:数据包出错检测 (Packet error checking) 12
软件可以设置或清除该位;当传送PEC,或起始或停止条件时,或当PE=0时硬件将其清
除。
0:无PEC传输;
1PEC传输(在发送或接收模式)
注:仲裁丢失时,PEC的计算失效。
POS: 应答/PEC位置(用于数据接收) (Acknowledge/PEC Position (for data reception)) 11
软件可以设置或清除该位,或当PE=0时,由硬件清除。
0ACK位控制当前移位寄存器内正在接收的字节的(N)ACK PEC位表明当前移位寄存器内
的字节是PEC
1: ACK位控制在移位寄存器里接收的下一个字节的(N)ACKPEC位表明在移位寄存器里接收
的下一个字节是PEC
注:POS位只能用在2字节的接收配置中,必须在接收数据之前配置。
为了NACK2个字节,必须在清除ADDR为之后清除ACK位。
为了检测第2个字节的PEC,必须在配置了POS位之后,拉伸ADDR事件时设置PEC位。
ACK应答使能 (Acknowledge enable) 10
软件可以设置或清除该位,或当PE=0时,由硬件清除。
0:无应答返回;
1:在接收到一个字节后返回一个应答(匹配的地址或数据)
STOP停止条件产生 (Stop generation) 9
软件可以设置或清除该位;或当检测到停止条件时,由硬件清除;当检测到超时错误时,硬件
将其置位。
在主模式下:
0:无停止条件产生;
1:在当前字节传输或在当前起始条件发出后产生停止条件。
在从模式下:
0:无停止条件产生;
1:在当前字节传输或释放SCLSDA线。
:当设置了STOPSTART PEC位,在硬件清除这个位之前,软件不要执行任何对
I2C_CR1的写操作;否则有可能会第2次设置STOPSTARTPEC位。
START:起始条件产生 (Start generation) 8
软件可以设置或清除该位,或当起始条件发出后或PE=0时,由硬件清除。
在主模式下:
0: 无起始条件产生;
1:重复产生起始条件。
在从模式下:
0:无起始条件产生;
1:当总线空闲时,产生起始条件。
NOSTRETCH:禁止时钟延长(从模式) (Clock stretching disable (Slave mode)) 7
该位用于当ADDRBTF标志被置位,在从模式下禁止时钟延长,直到它被软件复位。
0:允许时钟延长;
1:禁止时钟延长。
ENGC:广播呼叫使能 (General call enable) 6
0:禁止广播呼叫。以非应答响应地址00h
1:允许广播呼叫. 以应答响应地址00h
506/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
ENPECPEC使能 (PEC enable) 5
0:禁止PEC计算;
1:开启PEC计算。
ENARPARP使能 (ARP enable) 4
0:禁止ARP
1:使能ARP
如果SMBTYPE=0,使用SMBus设备的默认地址。
如果SMBTYPE=1,使用SMBus的主地址。
SMBTYPESMBus类型 (SMBus type) 3
0SMBus设备;
1SMBus主机。
保留位,硬件强制为0 2
SMBUSSMBus模式 (SMBus mode) 1
0I2C模式;
1SMBus模式。
PEI2C模块使能 (Peripheral enable) 0
0:禁用I2C模块;
1:启用I2C模块:根据SMBus位的设置,相应的I/O口需配置为复用功能。
注:如果清除该位时通讯正在进行,在当前通讯结束后,I2C模块被禁用并返回空闲状态。
由于在通讯结束后发生PE0,所有的位被清除。
在主模式下,通讯结束之前,绝不能清除该位。
24.6.2 控制寄存器 2(I2C_CR2)
地址偏移:0x04
复位值:0x0000
1514131211109876543210
LAST DMAEN ITBUF
EN
ITEVT
EN
ITERR
EN
rw rw rw rw rw rw rw rw rw rw rw
保留 保留 FREQ[5:0]
15:13 保留位,硬件强制为0
LAST: DMA最后一次传输 (DMA last transfer) 12
0:下一次DMAEOT不是最后的传输;
1:下一次DMAEOT是最后的传输。
注:该位在主接收模式使用, 使得在最后一次接收数据时可以产生一个NACK
DMAENDMA请求使能 (DMA requests enable) 11
0:禁止DMA请求;
1:当TxE=1RxNE =1时,允许DMA请求。
ITBUFEN:缓冲器中断使能 (Buffer interrupt enable) 10
0:当TxE=1RxNE=1时,不产生任何中断;
1:当TxE=1RxNE=1时,产生事件中断(不管DMAEN是何种状态)
507/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
ITEVTEN:事件中断使能 (Event interrupt enable) 9
0:禁止事件中断;
1:允许事件中断。
在下列条件下,将产生该中断:
– SB = 1 (主模式)
– ADDR = 1 (/从模式)
– ADD10= 1 (主模式)
– STOPF = 1 (从模式)
– BTF = 1,但是没有TxERxNE事件;
如果ITBUFEN = 1TxE事件为1
如果ITBUFEN = 1RxNE事件为1
ITERREN:出错中断使能 (Error interrupt enable) 8
0:禁止出错中断;
1:允许出错中断。
在下列条件下,将产生该中断:
– BERR = 1
– ARLO = 1
– AF = 1
– OVR = 1
– PECERR = 1
– TIMEOUT = 1
– SMBAlert = 1
保留位,硬件强制为0 7:6
FREQ[5:0]I2C模块时钟频率 (Peripheral clock frequency) 5:0
必须设置正确的输入时钟频率以产生正确的时序,允许的范围在236MHz之间:
000000:禁用
000001:禁用
0000102MHz
...
10010036MHz
大于100100:禁用。
24.6.3 自身地址寄存器 1(I2C_OAR1)
复位地址偏移:0x08
复位值:0x0000
1514131211109876543210
ADD
MODE 保留 ADD0
rw res rw rw rw rw rw rw rw rw rw rw
保留 ADD[9:8] ADD[7:1]
res
ADDMODE:寻址模式(从模式) (Addressing mode (slave mode)) 15
07位从地址(不响应10位地址)
110位从地址(不响应7位地址)
14 必须始终由软件保持为’1’
13:10 保留位,硬件强制为0
ADD[9:8]:接口地址 (Interface address) 9:8
7位地址模式时不用关心。
10位地址模式时为地址的9~8位。
ADD[7:1]:接口地址 (Interface address) 7:1
地址的7~1位。
508/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
ADD0:接口地址 (Interface address) 0
7位地址模式时不用关心。
10位地址模式时为地址第0位。
24.6.4 自身地址寄存器 2(I2C_OAR2)
地址偏移:0x0C
复位值:0x0000
1514131211109876543210
ENDUAL
rw rw rw rw rw rw rw rw
ADD2[7:1]保留
res
15:8 保留位,硬件强制为0
ADD2[7:1]:接口地址 (Interface address) 7:1
在双地址模式下地址的7~1位。
ENDUAL双地址模式使能位 (Dual addressing mode enable) 0
0:在7位地址模式下,只有OAR1被识别;
1:在7位地址模式下,OAR1OAR2都被识别。
24.6.5 数据寄存器(I2C_DR)
地址偏移:0x10
复位值:0x0000
1514131211109876543210
rw rw rw rw rw rw rw rw
保留 DR[7:0]
res
15:8 保留位,硬件强制为0
DR[7:0]8位数据寄存器 (8-bit data register) 7:0
用于存放接收到的数据或放置用于发送到总线的数据
发送器模式:当写一个字节至DR寄存器时,自动启动数据传输。一旦传输开始(TxE=1),如果
能及时把下一个需传输的数据写入DR寄存器,I2C模块将保持连续的数据流。
接收器模式:接收到的字节被拷贝到DR寄存器(RxNE=1)。在接收到下一个字节(RxNE=1)
前读出数据寄存器,即可实现连续的数据传送。
注:在从模式下,地址不会被拷贝进数据寄存器DR
注:硬件不管理写冲突(如果TxE=0,仍能写入数据寄存器)
注:如果在处理ACK脉冲时发生ARLO事件,接收到的字节不会被拷贝到数据寄存器里,因此
不能读到它。
509/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
24.6.6 状态寄存器 1(I2C_SR1)
地址偏移:0x14
复位值:0x0000
1514131211109876543210
SMB
ALERT
TIME
OUT 保留 PEC
ERR OVR AF ARLO BERR TxE RxNE 保留 STOPF ADD10 BTF ADDR SB
rcw0rcw0resrcw0rcw0rcw0rcw0rcw0rrresrrrrr
SMBALERTSMBus提醒 (SMBus alert) 15
SMBus主机模式下:
0:无SMBus提醒;
1:在引脚上产生SMBAlert提醒事件。
SMBus从机模式下:
0:没有SMBAlert响应地址头序列;
1:收到SMBAlert响应地址头序列至SMBAlert变低。
该位由软件写’0’清除,或在PE=0时由硬件清除。
TIMEOUT:超时或Tlow错误 (Timeout or Tlow error) 14
0:无超时错误;
1SCL 处于低已达到25ms( 超时);或者主机低电平累积时钟扩展时间超过
10ms(Tlow:mext);或从设备低电平累积时钟扩展时间超过25ms(Tlow:sext)
当在从模式下设置该位:从设备复位通讯,硬件释放总线。
当在主模式下设置该位:硬件发出停止条件。
该位由软件写’0’清除,或在PE=0时由硬件清除。
保留位,硬件强制为0 13
PECERR:在接收时发生PEC错误 (PEC Error in reception) 12
0: PEC错误:接收到PEC后接收器返回ACK(如果ACK=1)
1: PEC错误:接收到PEC后接收器返回NACK(不管ACK是什么值)
该位由软件写’0’清除,或在PE=0时由硬件清除。
OVR:过载/欠载 (Overrun/Underrun) 11
0: 无过载/欠载;
1: 出现过载/欠载。
NOSTRETCH=1时,在从模式下该位被硬件置位,同时:
在接收模式中当收到一个新的字节时(包括ACK应答脉冲),数据寄存器里的内容还未被
出,则新接收的字节将丢失。
在发送模式中当要发送一个新的字节时,却没有新的数据写入数据寄存器,同样的字节将被
发送两次。
该位由软件写’0’清除,或在PE=0时由硬件清除。。
:如果数据寄存器的写操作发生时间非常接近SCL的上升沿,发送的数据是不确定的,并发
生保持时间错误。
AF:应答失败 (Acknowledge failure) 10
0:没有应答失败;
1:应答失败。
当没有返回应答时,硬件将置该位为’1’
该位由软件写’0’清除,或在PE=0时由硬件清除。
510/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
ARLO:仲裁丢失(主模式) (Arbitration lost (master mode)) 9
0:没有检测到仲裁丢失;
1:检测到仲裁丢失。
当接口失去对总线的控制给另一个主机时,硬件将将置该位为’1’
该位由软件写’0’清除,或在PE=0时由硬件清除。
ARLO事件之后,I2C接口自动切换回从模式(M/SL=0)
注:SMBUS模式下,在从模式下对数据的仲裁仅仅发生在数据阶段,或应答传输区间(不包
括地址的应答)
BERR:总线出错 (Bus error) 8
0:无起始或停止条件出错;
1:起始或停止条件出错。
当接口检测到错误的起始或停止条件,硬件将该位置’1’
该位由软件写’0’清除,或在PE=0时由硬件清除。
TxE:数据寄存器为空(发送时) (Data register empty (transmitters)) 7
0:数据寄存器非空;
1:数据寄存器空。
在发送数据时,数据寄存器为空时该位被置’1’,在发送地址阶段不设置该位。
软件写数据到DR寄存器可清除该位;或在发生一个起始或停止条件后,或当PE=0时由硬件
自动清除。
如果收到一个NACK,或下一个要发送的字节是PEC(PEC=1),该位不被置位。
注:在写入第1个要发送的数据后,或设置了BTF时写入数据,都不能清除TxE位,这是因为
数据寄存器仍然为空。
RxNE:数据寄存器非空(接收时) (Data register not empty (receivers)) 6
0:数据寄存器为空;
1:数据寄存器非空。
在接收时,当数据寄存器不为空,该位被置’1’。在接收地址阶段,该位不被置位。
软件对数据寄存器的读写操作清除该位,或当PE=0时由硬件清除。
在发生ARLO事件时,RxNE不被置位。
注:当设置了BTF时,读取数据不能清除RxNE位,因为数据寄存器仍然为满。
保留位,硬件强制为0 5
STOPF:停止条件检测位(从模式) (Stop detection (slave mode)) 4
0:没有检测到停止条件;
1:检测到停止条件。
在一个应答之后(如果ACK=1),当从设备在总线上检测到停止条件时,硬件将该位置’1’
软件读取SR1寄存器后,对CR1寄存器的写操作将清除该位,或当PE=0时,硬件清除该
位。
注:在收到NACK后,STOPF位不被置位。
ADD1010头序列已发送(主模式) (10-bit header sent (Master mode)) 3
0:没有ADD10事件发生;
1:主设备已经将第一个地址字节发送出去。
10位地址模式下,当主设备已经将第一个字节发送出去时,硬件将该位置’1’
软件读取SR1寄存器后,对CR1寄存器的写操作将清除该位,或当PE=0时,硬件清除该
位。
注:收到一个NACK后,ADD10位不被置位。
511/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
BTF:字节发送结束 (Byte transfer finished) 2
0:字节发送未完成;
1:字节发送结束。
NOSTRETCH=0时,在下列情况下硬件将该位置’1’
在接收时,当收到一个新字节(包括ACK脉冲)且数据寄存器还未被读取(RxNE=1)
在发送时,当一个新数据将被发送且数据寄存器还未被写入新的数据(TxE=1)
在软件读取SR1寄存器后,对数据寄存器的读或写操作将清除该位;或在传输中发送一个起
始或停止条件后,或当PE=0时,由硬件清除该位。
注:在收到一个NACK后,BTF位不会被置位。
如果下一个要传输的字节是PEC(I2C_SR2寄存器中TRA’1’,同时I2C_CR1寄存器中PEC
’1’)BTF位不会被置位。
ADDR:地址已被发送(主模式)/地址匹配(从模式) (Address sent (master mode)/matched
(slave mode))
1
在软件读取SR1寄存器后,对SR2寄存器的读操作将清除该位,或当PE=0时,由硬件清除该
位。
地址匹配(从模式)
0:地址不匹配或没有收到地址;
1:收到的地址匹配。
当收到的从地址与OAR寄存器中的内容相匹配、或发生广播呼叫、或SMBus设备默认地址
SMBus主机识别出SMBus提醒时,硬件就将该位置’1’(当对应的设置被使能时)
地址已被发送(主模式)
0:地址发送没有结束;
1:地址发送结束。
– 10位地址模式时,当收到地址的第二个字节的ACK后该位被置’1’
– 7位地址模式时,当收到地址的ACK后该位被置’1’
注:在收到NACK后,ADDR位不会被置位。
SB:起始位(主模式) (Start bit (Master mode)) 0
0:未发送起始条件;
1:起始条件已发送。
当发送出起始条件时该位被置’1’
软件读取SR1寄存器后,写数据寄存器的操作将清除该位,或当PE=0时,硬件清除该位。
24.6.7 状态寄存器 2 (I2C_SR2)
地址偏移:0x18
复位值:0x0000
1514131211109876543210
DUALF SMB
HOST
SMB
DEFAUL
T
GEN
CALL 保留 TRA BUSY MSL
rrrrrrrrrrrrresrrr
PEC[7:0]
PEC[7:0]:数据包出错检测 (Packet error checking register) 15:8
ENPEC=1时,PEC[7:0]存放内部的PEC的值。
DUALF:双标志(从模式) (Dual flag (Slave mode)) 7
0:接收到的地址与OAR1内的内容相匹配;
1:接收到的地址与OAR2内的内容相匹配。
在产生一个停止条件或一个重复的起始条件时,或PE=0时,硬件将该位清除。
SMBHOST: SMBus主机头系列(从模式) (SMBus host header (Slave mode)) 6
0:未收到SMBus主机的地址;
1:当SMBTYPE=1ENARP=1时,收到SMBus主机地址。
在产生一个停止条件或一个重复的起始条件时,或PE=0时,硬件将该位清除。
512/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
SMBDEFAULTSMBus 设备默认地址(从模式) (SMBus device default address (Slave
mode))
5
0:未收到SMBus设备的默认地址;
1:当ENARP=1时,收到SMBus设备的默认地址。
在产生一个停止条件或一个重复的起始条件时,或PE=0时,硬件将该位清除。
GENCALL:广播呼叫地址(从模式) (General call address (Slave mode)) 4
0:未收到广播呼叫地址;
1:当ENGC=1时,收到广播呼叫的地址。
在产生一个停止条件或一个重复的起始条件时,或PE=0时,硬件将该位清除。
3 保留位,硬件强制为0
TRA:发送/接收 (Transmitter/receiver) 2
0:接收到数据;
1:数据已发送;
在整个地址传输阶段的结尾,该位根据地址字节的R/W位来设定。
在检测到停止条件(STOPF=1)、重复的起始条件或总线仲裁丢失(ARLO=1)后,或当PE=0
时,硬件将其清除。
BUSY:总线忙 (Bus busy) 1
0:在总线上无数据通讯;
1:在总线上正在进行数据通讯。
在检测到SDASCl为低电平时,硬件将该位置’1’
当检测到一个停止条件时,硬件将该位清除。
该位指示当前正在进行的总线通讯,当接口被禁用(PE=0)时该信息仍然被更新。
MSL:主从模式 (Master/slave) 0
0:从模式;
1:主模式。
当接口处于主模式(SB=1)时,硬件将该位置位;
当总线上检测到一个停止条件、仲裁丢失(ARLO=1)、或当PE=0时,硬件清除该位。
24.6.8 时钟控制寄存器(I2C_CCR)
地址偏移:0x1C
复位值:0x0000
注:
1.
要求
FPCLK1
应当是
10 MHz
的整数倍,这样可以正确地产生
400KHz
的快速时钟。
2. CCR
寄存器只有在关闭
I2C
(PE=0)
才能设置
1514131211109876543210
F/S DUTY
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留 CCR[11:0]
F/SI2C主模式选项 (I2C master mode selection) 15
0:标准模式的I2C
1:快速模式的I2C
DUTY快速模式时的占空比 (Fast mode duty cycle) 14
0:快速模式下:Tlow/Thigh = 2
1: 快速模式下:Tlow/Thigh = 16/9(CCR)
保留位,硬件强制为0 13:12
513/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
CCR[11:0]快速/标准模式下的时钟控制分频系数(主模式) (Clock control register in
Fast/Standard mode (Master mode))
11:0
该分频系数用于设置主模式下的SCL时钟。
I2C标准模式或SMBus模式下:
Thigh = CCR ×TPCLK1
Tlow = CCR ×TPCLK1
I2C快速模式下:
如果DUTY = 0
Thigh = CCR ×TPCLK1
Tlow = 2 × CCR × TPCLK1
如果DUTY = 1 (速度达到400kHz)
Thigh = 9 × CCR ×TPCLK1
Tlow = 16 × CCR ×TPCLK1
例如:在标准模式下,产生100kHzSCL的频率:
如果FREQR = 08TPCLK1 = 125ns,则CCR必须写入0x28(40×125ns = 5000 ns)
注:1. 允许设定的最小值为0x04,在快速DUTY模式下允许的最小值为0x01
2. Thigh=tr(SCL)+tw(SCLH),详见数据手册中对这些参数的定义;
3. Tlow=tf(SCL)+tw(SCLL),详见数据手册中对这些参数的定义;
4. 这些延时没有过滤器;
5. 只有在关闭I2C(PE = 0)才能设置CCR寄存器;
6. fCK应当是10MHz的整数倍,这样可以正确产生400kHz的快速时钟。
24.6.9 TRISE寄存器(I2C_TRISE)
地址偏移:0x20
复位值:0x0002
1514131211109876543210
rw rw rw rw rw rw
留 TRISE[5:0]
res
15:6 保留位,硬件强制为0
TRISE[5:0] :在快速/标准模式下的最大上升时间(主模式) (Maximum rise time in
Fast/Standard mode (Master mode))
5:0
这些位必须设置为I2C总线规范里给出的最大的SCL上升时间,增长步幅为1
例如:标准模式中最大允许SCL上升时间为1000ns。如果在I2C_CR2存器中FREQ[5:0]中的
值等于0x08TPCLK1=125ns,故TRISE[5:0]中必须写入09h(1000ns/125 ns = 8+1)
滤波器的值也可以加到TRISE[5:0]内。
如果结果不是一个整数,则将整数部分写入TRISE[5:0]以确保tHIGH参数。
注:只有当I2C被禁用(PE=0)时,才能设置TRISE[5:0]
514/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
I2C接口 STM32F10xxx参考手册
515/754
参照200912 RM0008 Reference Manual 英文第10
24.6.10 I2C寄存器地址映象
174 I2C寄存器地址映象和复位值
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
I2C_CR1
SWRST
ALERT
PEC
POS
ACK
STOP
START
NOSTRETCH
ENGC
ENPEC
ENARP
SMBTYPE
SMBUS
PE
0 00000000000 00
I2C_CR2
LAST
DMAEN
ITBUFEN
ITEVTEN
ITERREN
00000 000000
I2C_OAR1
ADDMODE
ADD0
01 0000000000
I2C_OAR2
ENDUAL
复位值 00000000
I2C_DR
复位值 00000000
I2C_SR1
SMBALERT
TIMEOUT
PECERR
OVR
AF
ARLO
BERR
TxE
RxNE
STOPF
ADD10
BTF
ADDR
SB
00 0000000 00000
I2C_SR2
DUALF
SMBHOST
SMBDEFAU
GENCALL
TRA
BUSY
MSL
000000000000 000
I2C_CCR
F/S
DUTY
0x00
0x04
0x14
0x10
0x0C
0x08
0x18
0x1C
保留
保留
保留 CCR[11:0]
保留
ADD2[7:1]
保留
DR[7:0]
保留
保留
保留
保留
保留 FREQ[5:0]
保留
保留
ADD
[9:8]
ADD[7:1]
保留
保留
保留
保留
PEC[7:0]
00 000000000000
I2C_TRISE
复位值 000010
0x20
保留
TRISE[5:0]
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
关于寄存器起始地址,参见表1
通用同步异步收发器(USART) STM32F10xxx参考手册
25 通用同步异步收发器(USART)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
25.1 USART介绍
通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的
外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。
它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据
组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。
使用多缓冲器配置的DMA方式,可以实现高速数据通信。
25.2 USART主要特性
全双工的,异步通信
NRZ标准格式
分数波特率发生器系统
发送和接收共用的可编程波特率,最高达4.5Mbits/s
可编程数据字长度(8位或9)
可配置的停止位-支持12个停止位
LIN主发送同步断开符的能力以及LIN从检测断开符的能力
USART硬件配置成LIN时,生成13位断开符;检测10/11位断开符
发送方为同步传输提供时钟
IRDA SIR 编码器解码器
在正常模式下支持3/16位的持续时间
智能卡模拟功能
智能卡接口支持ISO7816-3标准里定义的异步智能卡协议
智能卡用到的0.51.5个停止位
单线半双工通信
可配置的使用DMA的多缓冲器通信
SRAM里利用集中式DMA缓冲接收/发送字节
单独的发送器和接收器使能位
检测标志
接收缓冲器满
发送缓冲器空
传输结束标志
校验控制
发送校验位
对接收数据进行校验
四个错误检测标志
516/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
溢出错误
噪音错误
帧错误
校验错误
10个带标志的中断源
CTS改变
LIN断开符检测
发送数据寄存器空
发送完成
接收数据寄存器满
检测到总线为空闲
溢出错误
帧错误
噪音错误
校验错误
多处理器通信 -- 如果地址不匹配,则进入静默模式
从静默模式中唤醒(通过空闲总线检测或地址标志检测)
两种唤醒接收器的方式:地址位(MSB,第9),总线空闲
25.3 USART功能概述
接口通过三个引脚与其他设备连接在一起(见图248)。任何USART双向通信至少需要两个脚:接
收数据输入(RX)和发送数据输出(TX)
RX:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。
TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,
并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式里,此I/O口被同时用于数据的发
送和接收。
总线在发送或接收前应处于空闲状态
一个起始位
一个数据字(89),最低有效位在前
0.51.52个的停止位,由此表明数据帧的结束
使用分数波特率发生器 —— 12位整数和4位小数的表示方法。
一个状态寄存器(USART_SR)
数据寄存器(USART_DR)
一个波特率寄存器(USART_BRR)12位的整数和4位小数
一个智能卡模式下的保护时间寄存器(USART_GTPR)
25.6
517/754
关于以上寄存器中每个位的具体定义,请参考寄存器描述第 节:USART寄存器描述。
在同步模式中需要下列引脚:
CK:发送器时钟输出。此引脚输出用于同步传输的 时钟, (Start位和Stop位上没有时钟
脉冲,软件可选地,可以在最后一个数据位送出一个时钟脉冲)。数据可以在RX上同步被接
收。这可以用来控制带有移位寄存器的外部设备(例如LCD驱动器)。时钟相位和极性都是软
件可编程的。在智能卡模式里,CK可以为智能卡提供时钟。
IrDA模式里需要下列引脚:
IrDA_RDI: IrDA模式下的数据输入。
IrDA_TDO: IrDA模式下的数据输出。
下列引脚在硬件流控模式中需要:
nCTS: 清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
nRTS: 发送请求,若是低电平,表明USART准备好接收数据
248 USART框图
25.3.1 USART 特性描述
字长可以通过编程USART_CR1寄存器中的M位,选择89(见图249)。在起始位期间,TX
脚处于低电平,在停止位期间处于高电平。
空闲符号被视为完全由’1’组成的一个完整的数据帧,后面跟着包含了数据的下一帧的开始位(‘1’
的位数也包括了停止位的位数)
断开符号 被视为在一个帧周期内全部收到’0’(包括停止位期间,也是’0’)。在断开帧结束时,发
送器再插入12个停止位(‘1’)来应答起始位。
发送和接收由一共用的波特率发生器驱动,当发送器和接收器的使能位分别置位时,分别为其
产生时钟。
518/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
随后将有每个功能块的详细说明。
249 字长设置
25.3.2 发送器
发送器根据M位的状态发送8位或9位的数据字。当发送使能位(TE)设置时,发送移位寄存器
中的数据在TX脚上输出,相应的时钟脉冲在CK脚上输出。
字符发送
USART送期间,在TX引脚上首先移出数据的最低有效位。在此模式里,USART_DR寄存
器包含了一个内部总线和发送移位寄存器之间的缓冲器(见图248)
每个字符之前都有一个低电平的起始位;之后跟着的停止位,其数目可配置。
USART支持多种停止位的配置:0.511.52个停止位。
注:
1
.在数据传输期间不能复位
TE
位,否则将破坏
TX
脚上的数据,因为波特率计数器停止计数。
正在传输的当前数据将丢失。
2
TE
位被激活后将发送一个空闲帧。
可配置的停止位
随每个字符发送的停止位的位数可以通过控制寄存器2的位1312进行编程。
1. 1个停止位:停止位位数的默认值。
2. 2个停止位:可用于常规USART模式、单线模式以及调制解调器模式。
3. 0.5个停止位:在智能卡模式下接收数据时使用。
4. 1.5个停止位:在智能卡模式下发送和接收数据时使用。
空闲帧包括了停止位。
断开帧是10位低电平,后跟停止位(m=0);或者11位低电平,后跟停止位(m=1)。不可能
传输更长的断开帧(长度大于10或者11)
519/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
250 配置停止位
配置步骤:
1. 通过在USART_CR1寄存器上置位UE位来激活USART
2. 编程USART_CR1M位来定义字长。
3. USART_CR2中编程停止位的位数。
4. 如果采用多缓冲器通信,配置USART_CR3中的DMA使能位(DMAT)。按多缓冲器通信中
的描述配置DMA寄存器。
5. 利用USART_BRR寄存器选择要求的波特率。
6. 设置USART_CR1中的TE位,发送一个空闲帧作为第一次数据发送。
7. 把要发送的数据写进USART_DR寄存器(此动作清除TXE)。在只有一个缓冲器的情况
下,对每个待发送的数据重复步骤7
8. USART_DR寄存器中写入最后一个数据字后,要等待TC=1,它表示最后一个数据帧的
传输结束。当需要关闭USART或需要进入停机模式之前,需要确认传输结束,避免破坏
最后一次传输。
单字节通信
清零TXE位总是通过对数据寄存器的写操作来完成的。TXE位由硬件来设置,它表明:
数据已经从TDR移送到移位寄存器,数据发送已经开始
TDR寄存器被清空
下一个数据可以被写进USART_DR寄存器而不会覆盖先前的数据
如果TXEIE位被设置,此标志将产生一个中断。
如果此时USART正在发送数据,对USART_DR寄存器的写操作把数据存进TDR寄存器,并在当
前传输结束时把该数据复制进移位寄存器。
如果此时USART没有在发送数据,处于空闲状态,对USART_DR寄存器的写操作直接把数据放
进移位寄存器,数据传输开始,TXE位立即被置起。
当一帧发送完成时(停止位发送后)并且设置了TXE位,TC位被置起,如果USART_CR1寄存器
中的TCIE位被置起时,则会产生中断。
520/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
USART_DR寄存器中写入了最后一个数据字后,在关闭USART模块之前或设置微控制器进入
低功耗模式(详见下图)之前,必须先等待TC=1
使用下列软件过程清除TC位:
1.读一次USART_SR寄存器;
2.写一次USART_DR寄存器。
注:
TC
位也可以通过软件对它写
’0’
来清除。此清零方式只推荐在多缓冲器通信模式下使用。
251 发送时TC/TXE的变化情况
断开符号
设置SBK可发送一个断开符号。断开帧长度取M(249)。如果设置SBK=1,在完成当前
数据发送后,将在TX线上发送一个断开符号。断开字符发送完成时(在断开符号的停止位
)SBK被硬件复位。USART在最后一个断开帧的结束处插入一逻辑’1’,以保证能识别下一帧的
起始位。
注意:如果在开始发送断开帧之前,软件又复位了SBK位,断开符号将不被发送。如果要发送
两个连续的断开帧,SBK位应该在前一个断开符号的停止位之后置起。
空闲符号
置位TE将使得USART在第一个数据帧前发送一空闲帧。
25.3.3 接收器
USART可以根据USART_CR1M位接收8位或9位的数据字。
起始位侦测
USART中,如果辨认出一个特殊的采样序列,那么就认为侦测到一个起始位。
该序列为:1 1 1 0 X 0 X 0 X 0 0 0 0
521/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
252 起始位侦测
注意:
如果该序列不完整,那么接收端将退出起始位侦测并回到空闲状态
(
不设置标志位
)
等待下降沿。
如果
3
个采样点都为
’0’(
在第
3
5
7
位的第一次采样,和在第
8
9
10
的第二次采样都为
’0’)
则确认收到起始位,这时设置
RXNE
标志位,如果
RXNEIE=1
,则产生中断。
如果两次
3
个采样点上仅有
2
个是
’0’(
3
5
7
位的采样点和第
8
9
10
位的采样点
)
,那么起始
位仍然是有效的,但是会设置
NE
噪声标志位。如果不能满足这个条件,则中止起始位的侦测过
程,接收器会回到空闲状态
(
不设置标志位
)
如果有一次
3
个采样点上仅有
2
个是
’0’(
3
5
7
位的采样点或第
8
9
10
位的采样点
)
,那么起
始位仍然是有效的,但是会设置
NE
噪声标志位。
字符接收
USART接收期间,数据的最低有效位首先从RX脚移进。在此模式里,USART_DR寄存器包
含的缓冲器位于内部总线和接收移位寄存器之间。
配置步骤:
1. USART_CR1寄存器的UE1来激活USART
2. 编程USART_CR1M位定义字长
3. USART_CR2中编写停止位的个数
4. 如果需多缓冲器通信,选择USART_CR3中的DMA使能位(DMAR)。按多缓冲器通信所
要求的配置DMA寄存器。
5. 利用波特率寄存器USART_BRR选择希望的波特率。
6. 设置USART_CR1RE位。激活接收器,使它开始寻找起始位。
当一字符被接收到时,
RXNE位被置位。它表明移位寄存器的内容被转移到RDR。换句话说,数据已经被接收并且
可以被读出(包括与之有关的错误标志)
如果RXNEIE位被设置,产生中断。
在接收期间如果检测到帧错误,噪音或溢出错误,错误标志将被置起,
在多缓冲器通信时,RXNE在每个字节接收后被置起,并由DMA对数据寄存器的读操作而
清零。
在单缓冲器模式里,由软件读USART_DR寄存器完成对RXNE位清除。RXNE标志也可以通
过对它写0来清除。RXNE位必须在下一字符接收结束前被清零,以避免溢出错误。
注意:
在接收数据时,
RE
位不应该被复位。如果
RE
位在接收时被清零,当前字节的接收被丢失。
522/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
断开符号
当接收到一个断开帧时,USART像处理帧错误一样处理它。
空闲符号
当一空闲帧被检测到时,其处理步骤和接收到普通数据帧一样,但如果IDLEIE位被设置将产生
一个中断。
溢出错误
如果RXNE还没有被复位,又接收到一个字符,则发生溢出错误。数据只有当RXNE位被清零后
才能从移位寄存器转移到RDR寄存器。RXNE标记是接收到每个字节后被置位的。如果下一
数据已被收到或先前DMA请求还没被服务时,RXNE标志仍是置起的,溢出错误产生。
当溢出错误产生时:
ORE位被置位。
RDR内容将不会丢失。读USART_DR寄存器仍能得到先前的数据。
移位寄存器中以前的内容将被覆盖。随后接收到的数据都将丢失。
如果RXNEIE位被设置或EIEDMAR位都被设置,中断产生。
顺序执行对USART_SRUSART_DR寄存器的读操作,可复位ORE
注意:
ORE
位置位时,表明至少有
1
个数据已经丢失。有两种可能性:
如果RXNE=1,上一个有效数据还在接收寄存器RDR上,可以被读出。
如果RXNE=0,这意味着上一个有效数据已经被读走,RDR已经没有东西可读。当上一个
有效数据在RDR中被读取的同时又接收到新的(也就是丢失的)数据时,此种情况可能发生。
在读序列期间(USART_SR寄存器读访问和USART_DR读访问之间)接收到新的数据,此
种情况也可能发生。
噪音错误
使用过采样技术(同步模式除外),通过区别有效输入数据和噪音来进行数据恢复。
253 检测噪声的数据采样
175 检测噪声的数据采样
采样值 NE状态 接收的位 数据有效性
000 0 0 有效
001 1 0 无效
010 1 0 无效
011 1 1 无效
100 1 0 无效
101 1 1 无效
110 1 1 无效
111 0 1 有效
523/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
当在接收帧中检测到噪音时:
RXNE位的上升沿设置NE标志。
无效数据从移位寄存器传送到USART_DR寄存器。
在单个字节通信情况下,没有中断产生。然而,因为NE标志位和RXNE标志位是同时被设
置,RXNE将产生中断。在多缓冲器通信情况下,如果已经设置了USART_CR3寄存器中
EIE位,将产生一个中断。
先读出USART_SR,再读出USART_DR寄存器,将清除NE标志位
帧错误
当以下情况发生时检测到帧错误:
由于没有同步上或大量噪音的原因,停止位没有在预期的时间上接和收识别出来。
当帧错误被检测到时:
FE位被硬件置起
无效数据从移位寄存器传送到USART_DR寄存器。
在单字节通信时,没有中断产生。然而,这个位和RXNE位同时置起,后者将产生中断。在
多缓冲器通信情况下,如果USART_CR3寄存器中EIE位被置位的话,将产生中断。
顺序执行对USART_SRUSART_DR寄存器的读操作,可复位FE位。
接收期间的可配置的停止位
被接收的停止位的个数可以通过控制寄存器2控制位来配置,在正常模式时,可以是12个,
在智能卡模式里可能是0.51.5个。
1. 0.5个停止位(智能卡模式中的接收):不对0.5个停止位进行采样。因此,如果选择0.5
停止位则不能检测帧错误和断开帧。
2. 1个停止位:对1个停止位的采样在第8,第9和第10采样点上进行。
3. 1.5个停止位(智能卡模式):当以智能卡模式发送时,器件必须检查数据是否被正确的发
送出去。所以接收器功能块必须被激活(USART_CR1寄存器中的RE =1),并且在停止位
的发送期间采样数据线上的信号。如果出现校验错误,智能卡会在发送方采样NACK
号时,即总线上停止位对应的时间内时,拉低数据线,以此表示出现了帧错误。FE
1.5个停止位结束时和RXNE一起被置起。对1.5个停止位的采样是在第16,第17和第18
采样点进行的。1.5个的停止位可以被分成2部分:一个是0.5个时钟周期,期间不做任何
事情 。随后是1个时钟周期的停止位,在这段时间的中点处采样。详见第25.3.11节:智
能卡。
4. 2个停止位:对2个停止位的采样是在第一停止位的第8,第9和第10个采样点完成的。如
果第一个停止位期间检测到一个帧错误,帧错误标志将被设置。第二个停止位不再检查
帧错误。在第一个停止位结束时RXNE标志将被设置。
25.3.4 分数波特率的产生
接收器和发送器的波特率在USARTDIV的整数和小数寄存器中的值应设置成相同。
524/754
Tx / Rx 波特率 )*16( USARTDIV
fCK
这里的
fCK
是给外设的时钟
(PCLK1
用于
USART2
3
4
5
PCLK2
用于
USART1)
USARTDIV是一个无符号的定点数。这12位的值设置在USART_BRR寄存器。
注:
在写入
USART_BRR
之后,波特率计数器会被波特率寄存器的新值替换。因此,不要在通信进
行中改变波特率寄存器的数值。
如何从USART_BRR寄存器值得到USARTDIV
1
如果 DIV_Mantissa = 27 DIV_Fraction = 12 (USART_BRR=0x1BC),
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
于是
Mantissa (USARTDIV) = 27
Fraction (USARTDIV) = 12/16 = 0.75
所以 USARTDIV = 27.75
2
要求 USARTDIV = 25.62,
就有:
DIV_Fraction = 16*0.62 = 9.92
最接近的整数是:10 = 0x0A
DIV_Mantissa = mantissa (25.620) = 25 = 0x19
于是,USART_BRR = 0x19A
3
要求 USARTDIV = 50.99
就有:
DIV_Fraction = 16*0.99 = 15.84
最接近的整数是:16 = 0x10 => DIV_frac[3:0]溢出 => 进位必须加到小数部分
DIV_Mantissa = mantissa (50.990 + 进位) = 51 = 0x33
于是:USART_BRR = 0x330USARTDIV=51
176 设置波特率时的误差计算
fPCLK = 36MHz fPCLK = 72MHz
波特率
置于波特率 置于波特率
序号 Kbps 实际 误差% 实际 误差%
寄存器中的值 寄存器中的值
1 2.4 2.400 937.5 0% 2.4 1875 0%
2 9.6 9.600 234.375 0% 9.6 468.75 0%
3 19.2 19.2 117.1875 0% 19.2 234.375 0%
4 57.6 57.6 39.0625 0% 57.6 78.125 0%
5 115.2 115.384 19.5 0.15% 115.2 39.0625 0%
6 230.4 230.769 9.75 0.16% 230.769 19.5 0.16%
7 460.8 461.538 4.875 0.16% 461.538 9.75 0.16%
8 921.6 923.076 2.4375 0.16% 923.076 4.875 0.16%
9 2250 2250 1 0% 2250 2 0%
10 4500 不可能 不可能 不可能 4500 1 0%
注:
1. CPU
的时钟频率越低,则某一特定波特率的误差也越低。可以达到的波特率上限可以由这组数
据得到。
2.
只有
USART1
使用
PCLK2(
最高
72MHz)
。其它
USART
使用
PCLK1(
最高
36MHz)
25.3.5 USART接收器容忍时钟的变化
只有当整体的时钟系统地变化小于USART异步接收器能够容忍的范围USART异步接收器才能
正常地工作。影响这些变化的因素有:
DTRA:由于发送器误差而产生的变化(包括发送器端振荡器的变化)
DQUANT:接收器端波特率取整所产生的误差
DREC:接收器端振荡器的变化
DTCL:由于传输线路产生的变化(通常是由于收发器在由低变高的转换时序,与由高变低转
换时序之间的不一致性所造成)
需要满足:DTRA + DQUANT + DREC + DTCL < USART接收器的容忍度
525/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
对于正常接收数据,USART接收器的容忍度等于最大能容忍的变化,它依赖于下述选择:
USART_CR1寄存器的M位定义的1011位字符长度
是否使用分数波特率产生
177DIV_Fraction=0时,USART接收器的容忍度
M 认为NF是错误 不认为NF是错误
0 3.75% 4.375%
1 3.41% 3.97%
178DIV_Fraction!=0时,USART接收器的容忍度
M 认为NF是错误 不认为NF是错误
0 3.33% 3.88%
1 3.03% 3.53%
注:
在特殊的情况下,即当收到的帧包含一些在
M=0
时,正好是
10
(M=1
时是
11
)
的空闲帧,上面
2
个表格中的数据可能会有少许出入。
25.3.6 多处理器通信
通过USART可以实现多处理器通信(将几个USART连在一个网络里)。例如某个USART设备可以
是主,它的TX输出和其他USART从设备的RX输入相连接;USART从设备各自的TX输出逻辑地
与在一起,并且和主设备的RX输入相连接。
在多处理器配置中,我们通常希望只有被寻址的接收者才被激活,来接收随后的数据,这样就
可以减少由未被寻址的接收器的参与带来的多余的USART服务开销。
未被寻址的设备可启用其静默功能置于静默模式。在静默模式里:
任何接收状态位都不会被设置。
所有接收中断被禁止。
USART_CR1寄存器中的RWU位被置1RWU可以被硬件自动控制或在某个条件下由软件
写入。
根据USART_CR1寄存器中的WAKE位状态,USART可以用二种方法进入或退出静默模式。
如果WAKE位被复位:进行空闲总线检测。
如果WAKE位被设置:进行地址标记检测。
空闲总线检测(WAKE=0)
RWU位被写1时,USART进入静默模式。当检测到一空闲帧时,它被唤醒。然后RWU被硬件
清零,但是USART_SR寄存器中的IDLE位并不置起。RWU还可以被软件写0。下图给出利用空
闲总线检测来唤醒和进入静默模式的一个例子
254 利用空闲总线检测的静默模式
526/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
地址标记(address mark)检测(WAKE=1)
在这个模式里,如果MSB1,该字节被认为是地址,否则被认为是数据。在一个地址字节中,
目标接收器的地址被放4LSB中。这个4位地址被接收器同它自己地址做比较,接收器的地
址被编程在USART_CR2寄存器的ADD
如果接收到的字节与它的编程地址不匹配时,USART进入静默模式。此时,硬件设置RWU位。
接收该字节既不会设置RXNE标志也不会产生中断或发出DMA请求,因为USART已经在静默模
式。
当接收到的字节与接收器内编程地址匹配时,USART退出静默模式。然后RWU位被清零,随后
的字节被正常接收。收到这个匹配的地址字节时将设置RXNE位,因为RWU位已被清零。
当接收缓冲器不包含数据时(USART_SRRXNE=0)RWU位可以被01。否则,该次写操
作被忽略。下图给出利用地址标记检测来唤醒和进入静默模式的例子。
255 利用地址标记检测的静默模式
25.3.7 校验控制
设置USART_CR1寄存器上的PCE位,可以使能奇偶控(发送时生成一个奇偶位,接收时进行
奇偶校验)。根据M位定义的帧长度,可能的USART帧格式列在下表中。
179 帧格式
M PCE USART
0 0 | 起始位 | 8位数据 | 停止位 |
0 1 | 起始位 | 7位数据 | 奇偶检验位 | 停止位 |
1 0 | 起始位 | 9位数据 | 停止位 |
1 1 | 起始位 | 8位数据 | 奇偶检验位 | 停止位 |
注意:
在用地址标记唤醒设备时,地址的匹配只考虑到数据的
MSB
位,而不用关心校验位。
(MSB
是数
据位中最后发出的,后面紧跟校验位或者停止位
)
偶校验:校验位使得一帧中的78LSB数据以及校验位中’1’的个数为偶数。
例如:数据=00110101,有4’1’,如果选择偶校验(USART_CR1中的PS0),校验位将
’0’
奇校验:此校验位使得一帧中的78LSB数据以及校验位中’1’的个数为奇数。
例如:数据=00110101,有4’1’,如果选择奇校验(USART_CR1中的PS1),校验位将
’1’
传输模式:如果USART_CR1PCE位被置位,写进数据寄存器的数据MSB位被校验位替换
后发送出去(如果选择偶校验偶数’1’,如果选择奇校验奇数个’1’)。如果奇偶校验失败,
USART_SR寄存器中的PE标志被置’1’,并且如果USART_CR1寄存器的PEIE在被预先设置的
话,中断产生。
527/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
25.3.8 LIN(局域互联网)模式
LIN模式是通过设置USART_CR2寄存器的LINEN位选择。在LIN模式下,下列位必须保持为0
USART_CR2寄存器的CLKEN
USART_CR3寄存器的STOP[1:0]SCENHDSELIREN
LIN发送
25.3.2节里所描述的同样步骤适用于LIN主发送,但和正常USART发送有以下区别:
清零M位以配置8位字长
置位LINEN位以进入LIN模式。这时,置位SBK将发送13’0’作为断开符号。然后发一
’1’,以允许对下一个开始位的检测。
LIN接收
LIN模式被使能时,断开符号检测电路被激活。该检测完全独立于USART接收器。断开符号
只要一出现就能检测到,不管是在总线空闲时还是在发送某数据帧其间,数据帧还未完成,又
插入了断开符号的发送。
当接收器被激活时(USART_CR1RE=1),电路监测RX上的起始信号。监测起始位的方法同检
测断开符号或数据是一样的。当起始位被检测到后,电路对每个接下来的位,在每个位的第8
910 个过采样时钟点上进行采样。如果10 (USART_CR2 LBDL = 0) 11 (
USART_CR2 LBDL = 1)连续位都是’0’,并且又跟着一个定界符,USART_SRLBD标志被
设置。如果LBDIE=1,中断产生。在确认断开符号前,要检查定界符,因为它意味RX线已经
回到高电平。
如果在第1011个采样点之前采样到了’1’,检测电路取消当前检测并重新寻找起始位。如果LIN
模式被禁止,接收器继续如正常USART那样工作,不需要考虑检测断开符号。
如果LIN模式没有被激活(LINEN=0),接收器仍然正常工作于USART模式,不会进行断开检测。
如果LIN模式被激活(LINEN=1),只要一发生帧错误(也就是停止位检测到’0’,这种情况出现在断
开帧),接收器就停止,直到断开符号检测电路接收到一个’1’(这种情况发生于断开符号没有完整
的发出来),或一个定界符(这种情况发生于已经检测到一个完整的断开符号)
256说明了断开符号检测器状态机的行为和断开符号标志的关系。
257给出了一个断开帧的例子。
528/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
LIN模式下的断开检测(11位断开长度设置了LBDL) 256
257 LIN模式下的断开检测与帧错误的检测
529/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
25.3.9 USART 同步模式
通过在USART_CR2寄存器上写CLKEN位选择同步模式
在同步模式里,下列位必须保持清零状态:
USART_CR2寄存器中的LINEN
USART_CR3寄存器中的SCEN,HDSELIREN
USART允许用户以主模式方式控制双向同步串行通信。CK脚是USART发送器时钟的输出。在
起始位和停止位期间,CK脚上没有时钟脉冲。根据USART_CR2寄存器中LBCL位的状态,决定
在最后一个有效数据位期间产生或不产生时钟脉冲。USART_CR2寄存器的CPOL位允许用户选
择时钟极性,USART_CR2寄存器上CPHA位允许用户选择外部时钟的相位(258 259
530/754
和图260)
在总线空闲期间,实际数据到来之前以及发送断开符号的时候,外部CK时钟不被激活。
同步模式时,USART发送器和异步模式里工作一模一样。但是因为CK是与TX同步的(根据
CPOLCPHA),所以TX上的数据是随CK同步发出的。
同步模式的USART接收器工作方式与异步模式不同。如RE=1,数据在CK上采样(根据CPOL
CPHA决定在上升沿还是下降沿),不需要任何的过采样。但必须考虑建立时间和持续时间(
决于波特率,1/16位时间)
注意:
1
CK
脚同
TX
脚一起联合工作。因而,只有在使能了发送器
(TE
1)
,并且发送数据时
(
写入数
据至
USART_DR
寄存器
)
才提供时钟。这意味着在没有发送数据时是不可能接收一个同步数据
的。
2
LBCL,CPOL
CPHA
位的正确配置,应该在发送器和接收器都被禁止时;当使能了发送器或
接收器时,这些位不能被改变
3
.建议在同一条指令中设置
TE
RE
,以减少接收器的建立时间和保持时间。
4
USART
只支持主模式:它不能用来自其他设备的输入时钟接收或发送数据
(CK
永远是输
)
258 USART同步传输的例子
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
259 USART数据时钟时序示例(M=0)
260 USART数据时钟时序示例(M=1)
261 RX数据采样/保持时间
注:
在智能卡模式下
CK
的功能不同,有关细节请参考智能卡模式部分。
531/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
25.3.10 单线半双工通信
单线半双方模式通过设置USART_CR3寄存器的HDSEL位选择。在这个模式里,下面的位必须
保持清零状态:
USART_CR2寄存器的LINENCLKEN
USART_CR3寄存器的SCENIREN
USART可以配置成遵循单线半双工协议。在单线半双工模式下,TXRX引脚在芯片内部互
连。使用控制位”HALF DUPLEX SEL”(USART_CR3中的HDSEL)选择半双工和全双工通信。
HDSEL’1’
RX不再被使用
当没有数据传输时,TX总是被释放。因此,它在空闲状态的或接收状态时表现为一个标准
I/O口。这就意味该I/O在不被USART驱动时,必须配置成悬空输入(或开漏的输出高)
除此以外,通信与正常USART模式类似。由软件来管理线上的冲突(例如通过使用一个中央仲裁
)。特别的是,发送从不会被硬件所阻碍。当TE位被设置时,只要数据一写到数据寄存器上,
发送就继续。
25.3.11 智能卡
设置USART_CR3寄存器的SCEN位选择智能卡模式。在智能卡模式下,下列位必须保持清零:
USART_CR2寄存器的LINEN
USART_CR3寄存器的HDSEL 位和IREN
此外,CLKEN位可以被设置,以提供时钟给智能卡。
该接口符合ISO7816-3标准,支持智能卡异步协议。USART应该被设置为:
8位数据位加校验位: 此时USART_CR1寄存器中M=1PCE=1
发送和接收时为1.5个停止位:即USART_CR2寄存器的STOP=11
注:
也可以在接收时选择
0.5
个停止位,但为了避免在
2
种配置间转换,建议在发送和接收时使用
1.5
个停止位。
下图给出的例子说明了数据线上,在有校验错误和没校验错误两种情况下的信号。
532/754
262 ISO7816-3异步协议
当与智能卡相连接时,USARTTX驱动一根智能卡也驱动的双向线。为了做到这点,SW_RX
必须和TX连接到相同的I/O口。在发送开始位和数据字节期间,发送器的输出使能位TX_EN被置
起,在发送停止位期间被释放(弱上拉),因此在发现校验错误的情况下接收器可以将数据线拉
低。如果TX_EN不被使用,在停止位期间TX被拉到高电平:这样的话,只要TX配置成开漏,接
收器也可以驱动这根线。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
智能卡是一个单线半双工通信协议
从发送移位寄存器把数据发送出去,要被延时最小1/2波特时钟。在正常操作时,一个满的
发送移位寄存器将在下一个波特时钟沿开始向外移出数据。在智能卡模式里,此发送被延
1/2波特时钟。
如果在接收一个设置为0.51.5个停止位的数据帧期间,检测到一奇偶校验错误,在完成接
收该帧后(即停止位结束时),发送线被拉低一个波特时钟周期。这是告诉智能卡发送到
USART的数据没有被正确地接收到。此NACK信号(拉低发送线一个波特时钟周期)在发送端
将产生一个帧错误(发送端被配置成1.5个停止位)。应用程序可以根据协议处理重新发送数
据。如果设置了NACK控制位,发生校验错误时接收器会给出一个NACK信号;否则就不会
发送NACK
TC标志的置起可以通过编程保护时间寄存器得以延时。在正常操作时,当发送移位寄存器
变空并且没有新的发送请求出现时,TC被置起。在智能卡模式里,空的发送移位寄存器将
触发保护时间计数器开始向上计数,直到保护时间寄存器中的值。TC在这段时间被强制拉
低。当保护时间计数器达到保护时间寄存器中的值时,TC被置高。
TC标志的撤销不受智能卡模式的影响。
如果发送器检测到一个帧错误(收到接收器的NACK信号),发送器的接收功能模块不会把
NACK当作起始位检测。根据ISO协议,接收到的NACK的持续时间可以是12波特时钟周
期。
在接收器这边,如果一个校验错误被检测到,并且NACK被发送,接收器不会把NACK检测
成起始位。
注意:
1.
断开符号在智能卡模式里没有意义。一个带帧错误的
00h
数据将被当成数据而不是断开符号。
2.
当来回切换
TE
位时,没有
IDLE
帧被发送。
ISO
协议没有定义
IDLE
帧。
下图详述了USART是如何采样NACK信号的。在这个例子里,USART正在发送数据,并且被配
置成1.5个停止位。为了检查数据的完整性和NACK信号,USART的接收功能块被激活。
263 使1.5停止位检测奇偶检验错
USART可以通过CK输出为智能卡提供时钟。在智能卡模式里,CK不和通信直接关联,而是先
通过一个5位预分频器简单地用内部的外设输入时钟来驱动智能卡的时钟。分频率在预分频寄
USART_GTPR中配置。CK频率可以从fCK/2fCK/62,这里的fCK是外设输入时钟。
25.3.12 IrDA SIR ENDEC 功能模块
通过设置USART_CR3寄存器的IREN位选择IrDA模式。在IRDA模式里,下列位必须保持清零:
USART_CR2寄存器的LINEN,STOPCLKEN
USART_CR3寄存器的SCENHDSEL位。
IrDA SIR物理层规定使用反相归零调制方案(RZI),该方案用一个红外光脉冲代表逻辑’0’(
264)SIR发送编码器对从USART输出NRZ(非归零)比特流进行调制。输出脉冲流被传送到一
533/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
个外部输出驱动器和红外LEDUSARTSIR ENDEC最高只支持到115.2Kbps速率。在正常模
式里,脉冲宽度规定为一个位周期的3/16
SIR接收解码器对来自红外接收器的归零位比特流进行解调,并将接收到的NRZ串行比特流输
USART在空闲状态里,解码器输入通常是高(标记状态marking state)。发送编码器输出的
极性和解码器的输入相反。当解码器输入低时,检测到一个起始位。
IrDA是一个半双工通信协议。如果发送器忙(也就是USART正在送数据给IrDA编码器)
IrDA接收线上的任何数据将被IrDA解码器忽视。如果接收器忙(也就是USART正在接收从
IrDA解码器来的解码数据),从USARTIrDATX上的数据将不会被IrDA编码。当接收数
据时,应该避免发送,因为将被发送的数据可能被破坏。
SIR发送逻辑把’0’作为高脉冲发送,把’1’作为低电平发送。脉冲的宽度规定为正常模式时位
周期的3/16(见图265)
SIR接收逻辑把高电平状态解释为’1’,把低脉冲解释为’0’
发送编码器输出与解码器输入有着相反的极性。当空闲时,SIR输出处于低状态。
SIR解码器把IrDA兼容的接收信号转变成给USART的比特流。
IrDA规范要求脉冲要宽于1.41us。脉冲宽度是可编程的。接收器端的尖峰脉冲检测逻辑滤
除宽度小于2PSC周期的脉冲(PSC是在IrDA低功耗波特率寄存器USART_GTPR中编程的
预分频值)。宽度小于1PSC周期的脉冲一定被滤除掉,但是那些宽度大于1个而小于2
PSC周期的脉冲可能被接收或滤除,那些宽度大于2个周期的将被视为一个有效的脉冲。当
PSC=0时,IrDA编码器/解码器不工作。
接收器可以与一低功耗发送器通信。
IrDA模式里,USART_CR2寄存器上的STOP位必须配置成1个停止位。
IrDA低功耗模式
发送器
在低功耗模式,脉冲宽度不再持续3/16个位周期。取而代之,脉冲的宽度是低功耗波特率的3
倍,它最小可以是1.42MHz。通常这个值是1.8432MHz(1.42 MHz < PSC < 2.12 MHz)。一个低
功耗模式可编程分频器把系统时钟进行分频以达到这个值。
接收器
低功耗模式的接收类似于正常模式的接收。为了滤除尖峰干扰脉冲,USART应该滤除宽度短于
1PSC的脉冲。只有持续时间大于2个周期的IrDA低功耗波特率时钟(USART_GTPR中的PSC)
的低电平信号才被接受为有效的信号。
注意:
1.
宽度小于
2
个大于
1
PSC
周期的脉冲可能会也可能不会被滤除。
2.
接收器的建立时间应该由软件管理。
IrDA
物理层技术规范规定了在发送和接收之间最小要有
10ms
的延时
(IrDA
是一个半双工协议
)
264 IrDA SIR ENDEC – 框图
534/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
265 IrDA数据调制(3/16) – 普通模式
25.3.13 利用DMA连续通信
USART可以利用DMA连续通信。Rx缓冲器和Tx缓冲器的DMA请求是分别产生的。
注意:
参考产品技术说明以确定是否可用
DMA
控制器。如果所用产品无
DMA
功能,应按
25.3.2
节或
25.3.3
节里所描述的方法使用
USART
。在
USART2_SR
寄存器里,可以清零
TXE/RXNE
标志来
实现连续通信。
利用DMA发送
使用DMA进行发送,可以通过设置USART_CR3寄存器上的DMAT位激活。当TXE位被置为’1’
时,DMA就从指定的SRAM区传送数据到USART_DR寄存器。为USART的发送分配一个DMA
通道的步骤如下(x表示通道号)
1. DMA控制寄存器上将USART_DR寄存器地址配置成DMA传输的目的地址。在每个TXE
事件后,数据将被传送到这个地址。
2. DMA控制寄存器上将存储器地址配置成DMA传输的源地址。在每个TXE事件后,将从
此存储器区读出数据并传送到USART_DR寄存器。
3. DMA控制寄存器中配置要传输的总的字节数。
4. DMA寄存器上配置通道优先级。
5. 根据应用程序的要求,配置在传输完成一半还是全部完成时产生DMA中断。
6. DMA寄存器上激活该通道。
当传输完成DMA控制器指定的数据量时,DMA控制器在该DMA通道的中断向量上产生一中断。
在发送模式下,当DMA传输完所有要发送的数据时,DMA控制器设置DMA_ISR寄存器的TCIF
标志;监视USART_SR寄存器的TC标志可以确认USART通信是否结束,这样可以在关闭
USART或进入停机模式之前避免破坏最后一次传输的数据;软件需要先等待TXE=1,再等待
TC=1
535/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
266DMA发送
利用DMA接收
可以通过设置USART_CR3寄存器的DMAR位激活使用DMA进行接收,每次接收到一个字节,
DMA控制器就就把数据从USART_DR寄存器传送到指定的SRAM(参考DMA相关说明)。为
USART的接收分配一个DMA通道的步骤如下(x表示通道号)
1. 通过DMA控制寄存器把USART_DR寄存器地址配置成传输的源地址。在每个RXNE事件
后,将从此地址读出数据并传输到存储器。
2. 通过DMA控制寄存器把存储器地址配置成传输的目的地址。在每个RXNE事件后,数据将
USART_DR传输到此存储器区。
3. DMA控制寄存器中配置要传输的总的字节数。
4. DMA寄存器上配置通道优先级。。
5. 根据应用程序的要求配置在传输完成一半还是全部完成时产生DMA中断。
6. DMA控制寄存器上激活该通道。
当接收完成DMA控制器指定的传输量时,DMA控制器在该DMA通道的中断矢量上产生一中断。
267DMA接收
536/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
多缓冲器通信中的错误标志和中断产生
在多缓冲器通信的情况下,通信期间如果发生任何错误,在当前字节传输后将置起错误标志。
如果中断使能位被设置,将产生中断。在单个字节接收的情况下,和RXNE一起被置起的帧错
误、溢出错误和噪音标志,有单独的错误标志中断使能位;如果设置了,会在当前字节传输结
束后,产生中断。
25.3.14 硬件流控制
利用nCTS输入和nRTS输出可以控制2个设备间的串行数据流。下图表明在这个模式里如何连接
2个设备。
268USART间的硬件流控制
通过将UASRT_CR3中的RTSECTSE置位,可以分别独立地使能RTSCTS流控制。
RTS流控制
如果RTS流控制被使(RTSE=1),只要USART接收器准备好接收新的数据,nRTS就变成有效
(接低电平)。当接收寄存器内有数据到达时,nRTS被释放,由此表明希望在当前帧结束时停
数据传输。下图是一个启用RTS流控制的通信的例子。
269 RTS流控制
CTS流控制
如果CTS流控制被使能(CTSE=1),发送器在发送下一帧前检查nCTS输入。如果nCTS有效(
拉成低电平),则下一个数据被发送(假设那个数据是准备发送的,也就是TXE=0),否则下一帧
数据不被发出去。若nCTS在传输期间被变成无效,当前的传输完成后停止发送。
CTSE=1时,只要nCTS输入一变换状态,硬件就自动设置CTSIF状态位。它表明接收器是否
准备好进行通信。如果设置了USART_CT3寄存器的CTSIE位,则产生中断。下图是一个启用
CTS流控制通信的例子。
537/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
270 CTS流控制
25.4 USART中断请求
180 USART中断请求
中断事件 事件标志 使能位
发送数据寄存器空 TXE TXEIE
CTS标志 CTS CTSIE
发送完成 TC TCIE
接收数据就绪可读 TXNE
538/754
检测到数据溢出 ORE
TXNEIE
检测到空闲线路 IDLE IDLEIE
奇偶检验错 PE PEIE
断开标志 LBD LBDIE
噪声标志,多缓冲通信中的溢出错误和帧错误 NEORTFE EIE(1)
1.仅当使用DMA接收数据时,才使用这个标志位。
USART的各种中断事件被连接到同一个中断向量(见下图),有以下各种中断事件:
发送期间:发送完成、清除发送、发送数据寄存器空。
接收期间:空闲总线检测、溢出错误、接收数据寄存器非空、校验错误、LIN断开符号检
测、噪音标志(仅在多缓冲器通信)和帧错误(仅在多缓冲器通信)
如果设置了对应的使能控制位,这些事件就可以产生各自的中断。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
271 USART中断映像图
25.5 USART模式配置
181 USART模式设置(1)
USART1 USART2 USART3 UART4 UART5
USART模式
X X X X X
异步模式
X X X NA NA
硬件流控制
X X X X X
多缓存通讯(DMA)
X X X X X
多处理器通讯
X X X NA NA
同步
X X X NA NA
智能卡
X X X X X
半双工(单线模式)
IrDA X X X X X
LIN X X X X X
(1)X = 支持,NA = 不支持该应用
539/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
25.6 USART寄存器描述
540/754
有关寄存器描述里所使用的缩写,请参考第1.1节。
可以用半字(16)或字(32)的方式操作这些外设寄存器。
25.6.1 状态寄存器(USART_SR)
地址偏移:0x00
复位值:0x00C0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
CTS LBD TXE TC RXNE IDLE ORE NE FE PE
rcw0rcw0rrcw0rcw0rrrrr
保留
保留
31:10 保留位,硬件强制为0
CTS: CTS 标志 (CTS flag) 9
如果设置了CTSE位,当nCTS输入变化状态时,该位被硬件置高。由软件将其清零。如果
USART_CR3中的CTSIE’1’,则产生中断。
0nCTS状态线上没有变化;
1nCTS状态线上发生变化。
注:UART4UART5上不存在这一位。
LBD: LIN断开检测标志 (LIN break detection flag) 8
当探测到LIN断开时,该位由硬件置’1’,由软件清’0’(向该位写0)。如果USART_CR3中的
LBDIE = 1,则产生中断。
0:没有检测到LIN断开;
1:检测到LIN断开。
注意:若LBDIE=1,当LBD’1’时要产生中断。
TXE:发送数据寄存器空 (Transmit data register empty) 7
TDR寄存器中的数据被硬件转移到移位寄存器的时候,该位被硬件置位。如果USART_CR1
寄存器中的TXEIE1,则产生中断。对USART_DR的写操作,将该位清零。
0:数据还没有被转移到移位寄存器;
1:数据已经被转移到移位寄存器。
注意:单缓冲器传输中使用该位。
TC:发送完成 (Transmission complete) 6
当包含有数据的一帧发送完成后,并且TXE=1时,由硬件将该位置’1’。如果USART_CR1中的
TCIE’1’,则产生中断。由软件序列清除该位(先读USART_SR,然后写入USART_DR)TC
位也可以通过写入’0’来清除,只有在多缓存通讯中才推荐这种清除程序。
0:发送还未完成;
1:发送完成。
RXNE:读数据寄存器非空 (Read data register not empty) 5
RDR移位寄存器中的数据被转移到USART_DR寄存器中,该位被硬件置位。如果
USART_CR1寄存器中的RXNEIE1,则产生中断。对USART_DR的读操作可以将该位清
零。RXNE位也可以通过写入0来清除,只有在多缓存通讯中才推荐这种清除程序。
0:数据没有收到;
1:收到数据,可以读出。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
IDLE:监测到总线空闲 (IDLE line detected) 4
当检测到总线空闲时,该位被硬件置位。如果USART_CR1中的IDLEIE’1’,则产生中断。由
软件序列清除该位(先读USART_SR,然后读USART_DR)
0:没有检测到空闲总线;
1:检测到空闲总线。
注意:IDLE位不会再次被置高直到RXNE位被置起(即又检测到一次空闲总线)
ORE:过载错误 (Overrun error) 3
RXNE仍然是’1’的时候,当前被接收在移位寄存器中的数据,需要传送至RDR寄存器时,硬
件将该位置位。如果USART_CR1中的RXNEIE’1’的话,则产生中断。由软件序列将其清零
(先读USART_SR,然后读USART_CR)
0:没有过载错误;
1:检测到过载错误。
注意:该位被置位时,RDR寄存器中的值不会丢失,但是移位寄存器中的数据会被覆盖。如果
设置了EIE位,在多缓冲器通信模式下,ORE标志置位会产生中断的。
NE: 噪声错误标志 (Noise error flag) 2
在接收到的帧检测到噪音时,由硬件对该位置位。由软件序列对其清玲(先读USART_SR,再
USART_DR)
0:没有检测到噪声;
1:检测到噪声。
注意:该位不会产生中断,因为它和RXNE一起出现,硬件会在设置RXNE标志时产生中断。
在多缓冲区通信模式下,如果设置了EIE位,则设置NE标志时会产生中断。
FE: 帧错误 (Framing error) 1
当检测到同步错位,过多的噪声或者检测到断开符,该位被硬件置位。由软件序列将其清零(
USART_SR,再读USART_DR)
0:没有检测到帧错误;
1:检测到帧错误或者break符。
注意:该位不会产生中断,因为它和RXNE一起出现,硬件会在设置RXNE标志时产生中断。
如果当前传输的数据既产生了帧错误,又产生了过载错误,硬件还是会继续该数据的传输,并
且只设置ORE标志位。
在多缓冲区通信模式下,如果设置了EIE位,则设置FE标志时会产生中断。
PE: 校验错误 (Parity error) 0
在接收模式下,如果出现奇偶校验错误,硬件对该位置位。由软件序列对其清零(依次读
USART_SRUSART_DR)。在清除PE位前,软件必须等待RXNE标志位被置’1’。如果
USART_CR1中的PEIE’1’,则产生中断。
0:没有奇偶校验错误;
1:奇偶校验错误。
25.6.2 数据寄存器(USART_DR)
地址偏移:0x04
复位值:不确定
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw
保留
保留 DR[8:0]
31:9 保留位,硬件强制为0
541/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
DR[8:0]:数据值 (Data value) 8:0
包含了发送或接收的数据。由于它是由两个寄存器组成的,一个给发送用(TDR),一个给接收
(RDR),该寄存器兼具读和写的功能。TDR寄存器提供了内部总线和输出移位寄存器之间的
并行接口(参见图248)RDR寄存器提供了输入移位寄存器和内部总线之间的并行接口。
当使能校验位(USART_CR1PCE位被置位)进行发送时,写到MSB的值(根据数据的长度不
同,MSB是第7位或者第8)会被后来的校验位该取代。
当使能校验位进行接收时,读到的MSB位是接收到的校验位。
25.6.3 波特比率寄存器(USART_BRR)
注意:
如果
TE
RE
被分别禁止,波特计数器停止计数
地址偏移:0x08
复位值:0x0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
DIV_Mantissa[11:0] DIV_Fraction[3:0]
31:16 保留位,硬件强制为0
DIV_Mantissa[11:0]USARTDIV的整数部分 15:4
12位定义了USART分频器除法因子(USARTDIV)的整数部分。
DIV_Fraction[3:0]USARTDIV的小数部分 3:0
4位定义了USART分频器除法因子(USARTDIV)的小数部分。
25.6.4 控制寄存器 1(USART_CR1)
地址偏移:0x0C
复位值:0x0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
UE M WAKE PCE PS PEIE TXEIE TCIE RXNE
IE
IDLE
IE TE RE RWU SBK
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
保留
res
31:14 保留位,硬件强制为0
UEUSART使能 (USART enable) 13
当该位被清零,在当前字节传输完成后USART的分频器和输出停止工作,以减少功耗。该位由
软件设置和清零。
0USART分频器和输出被禁止;
1USART模块使能。
M:字长 (Word length) 12
该位定义了数据字的长度,由软件对其设置和清零
0:一个起始位,8个数据位,n个停止位;
1:一个起始位,9个数据位,n个停止位。
注意:在数据传输过程中(发送或者接收时),不能修改这个位。
WAKE:唤醒的方法 (Wakeup method) 11
这位决定了把USART唤醒的方法,由软件对该位设置和清零。
0:被空闲总线唤醒;
1:被地址标记唤醒。
542/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
PCE:检验控制使能 (Parity control enable) 10
用该位选择是否进行硬件校验控制(对于发送来说就是校验位的产生;对于接收来说就是校验位
的检测)。当使能了该位,在发送数据的最高位(如果M=1,最高位就是第9位;如果M=0,最高
位就是第8)插入校验位;对接收到的数据检查其校验位。软件对它置’1’或清’0’。一旦设置了
该位,当前字节传输完成后,校验控制才生效。
0:禁止校验控制;
1:使能校验控制。
PS:校验选择 (Parity selection) 9
当校验控制使能后,该位用来选择是采用偶校验还是奇校验。软件对它置’1’或清’0’。当前字节
传输完成后,该选择生效。
0:偶校验;
1:奇校验。
PEIEPE中断使能 (PE interrupt enable) 8
该位由软件设置或清除。
0:禁止产生中断;
1:当USART_SR中的PE’1’时,产生USART中断。
TXEIE:发送缓冲区空中断使能 (TXE interrupt enable) 7
该位由软件设置或清除。
0:禁止产生中断;
1:当USART_SR中的TXE’1’时,产生USART中断。
TCIE:发送完成中断使能 (Transmission complete interrupt enable) 6
该位由软件设置或清除。
0:禁止产生中断;
1:当USART_SR中的TC’1’时,产生USART中断。
RXNEIE:接收缓冲区非空中断使能 (RXNE interrupt enable) 5
该位由软件设置或清除。
0:禁止产生中断;
1:当USART_SR中的ORE或者RXNE’1’时,产生USART中断。
IDLEIEIDLE中断使能 (IDLE interrupt enable) 4
该位由软件设置或清除。
0:禁止产生中断;
1:当USART_SR中的IDLE’1’时,产生USART中断。
TE:发送使能 (Transmitter enable) 3
该位使能发送器。该位由软件设置或清除。
0:禁止发送;
1:使能发送。
注意:1.在数据传输过程中,除了在智能卡模式下,如果TE位上有个0脉冲(即设置为’0’之后
再设置为’1’),会在当前数据字传输完成后,发送一个前导符”(空闲总线)
2.当TE被设置后,在真正发送开始之前,有一个比特时间的延迟。
RE:接收使能 (Receiver enable) 2
该位由软件设置或清除。
0:禁止接收;
1:使能接收,并开始搜寻RX引脚上的起始位。
RWU:接收唤醒 (Receiver wakeup) 1
该位用来决定是否把USART置于静默模式。该位由软件设置或清除。当唤醒序列到来时,硬件
也会将其清零。
0:接收器处于正常工作模式;
1:接收器处于静默模式。
注意:1.在把USART置于静默模式(设置RWU)之前,USART要已经先接收了一个数据字
节。否则在静默模式下,不能被空闲总线检测唤醒。
2.当配置成地址标记检测唤醒(WAKE=1),在RXNE位被置位时,不能用软件修改RWU位。
543/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
SBK:发送断开帧 (Send break) 0
使用该位来发送断开字符。该位可以由软件设置或清除。操作过程应该是软件设置位它,然后
在断开帧的停止位时,由硬件将该位复位。
0:没有发送断开字符;
1:将要发送断开字符。
25.6.5 控制寄存器 2(USART_CR2)
地址偏移:0x10
复位值:0x0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
保留 LINEN CLKEN CPOL CPHA LBCL 保留 LBDIE LBDL 保留
rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
STOP[1:0] ADD[3:0]
31:15 保留位,硬件强制为0
LINENLIN模式使能 (LIN mode enable) 14
该位由软件设置或清除。
0:禁止LIN模式;
1:使能LIN模式。
LIN模式下,可以用USART_CR1寄存器中的SBK位发送LIN同步断开符(13),以及检测
LIN同步断开符。
STOP:停止位 (STOP bits) 13:12
2位用来设置停止位的位数
001个停止位;
010.5个停止位;
102个停止位;
111.5个停止位;
注:UART4UART5不能用0.5停止位和1.5停止位。
CLKEN:时钟使能 (Clock enable) 11
该位用来使能CK引脚
0:禁止CK引脚;
1:使能CK引脚。
注:UART4UART5上不存在这一位。
CPOL:时钟极性 (Clock polarity) 10
在同步模式下,可以用该位选择SLCK引脚上时钟输出的极性。和CPHA位一起配合来产生需要
的时钟/数据的采样关系
0:总线空闲时CK引脚上保持低电平;
1:总线空闲时CK引脚上保持高电平。
注:UART4UART5上不存在这一位。
CPHA 时钟相位 (Clock phase) 9
在同步模式下,可以用该位选择SLCK引脚上时钟输出的相位。和CPOL位一起配合来产生需要
的时钟/数据的采样关系(参见图259
544/754
和图260)
0:在时钟的第一个边沿进行数据捕获;
1:在时钟的第二个边沿进行数据捕获。
注:UART4UART5上不存在这一位。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
LBCL:最后一位时钟脉冲 (Last bit clock pulse) 8
在同步模式下,使用该位来控制是否在CK引脚上输出最后发送的那个数据字节(MSB)对应的时
钟脉冲
0:最后一位数据的时钟脉冲不从CK输出;
1:最后一位数据的时钟脉冲会从CK输出。
注意:1.最后一个数据位就是第8或者第9个发送的位(根据USART_CR1寄存器中的M位所定
义的8或者9位数据帧格式)
2UART4UART5上不存在这一位。
7 保留位,硬件强制为0
LBDIELIN断开符检测中断使能 (LIN break detection interrupt enable) 6
断开符中断屏蔽(使用断开分隔符来检测断开符)
0:禁止中断;
1:只要USART_SR寄存器中的LBD’1’就产生中断。
LBDLLIN断开符检测长度 (LIN break detection length) 5
该位用来选择是11位还是10位的断开符检测
010位的断开符检测;
111位的断开符检测。
4 保留位,硬件强制为0
ADD[3:0]:本设备的USART节点地址 3:0
该位域给出本设备USART节点的地址。
这是在多处理器通信下的静默模式中使用的,使用地址标记来唤醒某个USART设备。
注意:
在使能发送后不能改写这三个位
(CPOL
CPHA
LBCL)
25.6.6 控制寄存器 3(USART_CR3)
地址偏移:0x14
复位值:0x0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
CTSIE CTSE RTSE DMAT DMAR SCEN NACK HDSEL IRLP IREN EIE
rw rw rw rw rw rw rw rw rw rw rw
保留
保留
31:11 保留位,硬件强制为0
CTSIECTS中断使能 (CTS interrupt enable) 10
0:禁止中断;
1USART_SR寄存器中的CTS’1’时产生中断。
注:UART4UART5上不存在这一位。
CTSECTS使能 (CTS enable) 9
0:禁止CTS硬件流控制;
1CTS模式使能,只有nCTS输入信号有效(拉成低电平)时才能发送数据。如果在数据传输的
过程中,nCTS信号变成无效,那么发完这个数据后,传输就停止下来。如果当nCTS为无效
时,往数据寄存器里写数据,则要等到nCTS有效时才会发送这个数据。
注:UART4UART5上不存在这一位。
RTSERTS使能 (RTS enable) 8
0:禁止RTS硬件流控制;
1RTS中断使能,只有接收缓冲区内有空余的空间时才请求下一个数据。当前数据发送完成
后,发送操作就需要暂停下来。如果可以接收数据了,将nRTS输出置为有效(拉至低电平)
注:UART4UART5上不存在这一位。
545/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
DMATDMA使能发送 (DMA enable transmitter) 7
该位由软件设置或清除。
0:禁止发送时的DMA模式。
1:使能发送时的DMA模式;
注:UART4UART5上不存在这一位。
DMAR: DMA使能接收 (DMA enable receiver) 6
该位由软件设置或清除。
0:禁止接收时的DMA模式。
1:使能接收时的DMA模式;
注:UART4UART5上不存在这一位。
SCEN: 智能卡模式使能 (Smartcard mode enable) 5
该位用来使能智能卡模式
0:禁止智能卡模式;
1:使能智能卡模式。
注:UART4UART5上不存在这一位。
NACK:智能卡NACK使能 (Smartcard NACK enable) 4
0:校验错误出现时,不发送NACK
1:校验错误出现时,发送NACK
注:UART4UART5上不存在这一位。
HDSEL:半双工选择 (Half-duplex selection) 3
选择单线半双工模式
0:不选择半双工模式;
1:选择半双工模式。
IRLP:红外低功耗 (IrDA low-power) 2
该位用来选择普通模式还是低功耗红外模式
0:通常模式;
1:低功耗模式。
IREN:红外模式使能 (IrDA mode enable) 1
该位由软件设置或清除。
0:不使能红外模式;
1:使能红外模式。
EIE:错误中断使能 (Error interrupt enable) 0
在多缓冲区通信模式下,当有帧错误、过载或者噪声错误时(USART_SR中的FE=1,或者
ORE=1,或者NE=1)产生中断。
0:禁止中断;
1:只要USART_CR3中的DMAR=1,并且USART_SR中的FE=1,或者ORE=1,或者NE=1
则产生中断
25.6.7 保护时间和预分频寄存器(USART_GTPR)
地址偏移:0x18
复位值:0x0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1514131211109876543210
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
GT[7:0] PSC[7:0]
31:16 保留位,硬件强制为0
546/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
GT[7:0]:保护时间值 (Guard time value) 15:8
该位域规定了以波特时钟为单位的保护时间。在智能卡模式下,需要这个功能。当保护时间过
去后,才会设置发送完成标志。
注:UART4UART5上不存在这一位。
PSC[7:0]:预分频器值 (Prescaler value) 7:0
- 在红外(IrDA)低功耗模式下
PSC[7:0]=红外低功耗波特率
对系统时钟分频以获得低功耗模式下的频率:
源时钟被寄存器中的值(仅有8位有效)分频
00000000:保留不要写入该值;
00000001:对源时钟1分频;
00000010:对源时钟2分频;
……
- 在红外(IrDA)的正常模式下PSC只能设置为00000001
- 在智能卡模式下
PSC[4:0]:预分频值
对系统时钟进行分频,给智能卡提供时钟。
寄存器中给出的值(5位有效)乘以2后,作为对源时钟的分频因子
00000:保留不要写入该值;
00001:对源时钟进行2分频;
00010:对源时钟进行4分频;
00011:对源时钟进行6分频;
……
注意:1.位[7:5]在智能卡模式下没有意义。
2UART4UART5上不存在这一位。
547/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
通用同步异步收发器(USART) STM32F10xxx参考手册
参照200912 RM0008 Reference Manual 英文第10
25.6.8 USART寄存器地址映象
182 USART寄存器列表及其复位值
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
USART_SR
CTS
LBD
TXEIE
TC
RXNE
IDLE
ORE
NE
FE
PE
复位值
0011000000
USART_DR
复位值
000000000
USART_BRR
复位值
0000000000000000
USART_CR1
UE
M
WAKE
PCE
PS
PEIE
TXEIE
TCIE
RXNEIE
IDLEIE
TE
RE
RWU
SBK
复位值
00000000000000
USART_CR2
LIEN
CLKEN
CPOL
CPHA
LBCL
LBDIE
LBDL
复位值
0000000 00 0000
USART_CR3
CTSIE
CTSE
RTSE
DMAT
DMAR
SCEN
NACK
HDSEL
IRLP
IREN
EIE
复位值
00000000000
USART_GTPR
复位值
0000000000000000
保留
保留
保留
保留
DR[8:0]
保留
DIV_Mantissa[15:4]
DIV_
Fraction
[3:0]
018h
000h
004h
014h
010h
00Ch
008h
ADD[3:0]
保留
GT[7:0] PSC[7:0]
保留
STOP
[1:0]
保留
保留
548/754
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
关于寄存器的起始地址,参见表1
USB OTG全速(OTG_FS) STM32F10xxx参考手册
26 USB OTG全速(OTG_FS)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块只适用于STM32F105xxSTM32F107xx产品。
26.1 OTG模块介绍
部分版权属于Synopsys公司(20042005)。保留所有权利。已被允许使用。
本章描述了OTG_FS控制器的架构和如何编程使用。
本章所使用的术语:
FS 全速
LS 低速
USB 通用串行总线
OTG On-the-Go
PHY 物理层
参考下列文档:
USB On-The-Go Supplement, Revision 1.3
Universal Serial Bus Revision 2.0 Specification
OTG_FS是双重角色设(DRD)制器,支持主机端和设备端的功能,完全遵从On-The-Go
Supplement to the USB2.0规范。同时,该控制器也可配置为仅支持主机端或仅支持设备端功能
的控制器,遵从USB2.0规范。在主机模式下,OTG_FS支持全速(FS, 12Mbits/s)和低速(LS,
1.5Mbits/s)通信,而在设备模式下,支持全速(FS, 12Mbits/s)通信。OTG_FS控制器支持HNP
SRP协议。外围仅在主机模式下需要配置一个针对VBUS的电荷泵,即可完成设计。
26.2 OTG_FS主要功能
以下将从通用,主机模式和设备模式三方面来介绍OTG_FS控制器的特性。
26.2.1 通用功能
OTG_FS控制器接口:
USB-IF认证,符合Universal Serial Bus Specification Revision2.0标准
完全支持在(OTG_FS控制器的物理层(PHY))USB On-The-Go SupplementRevision1.3
范中定义为可选项目OTG协议。
对插入的AB类设备的辨认(ID线)
支持主机协商协议(HNP)和会话请求协议(SRP)
OTG应用中,允许主机关闭VBUS以节省耗电
OTG控制器使用内部比较器监视VBUS电平
可以动态的切换主机/设备角色
可以通过软件配置,完成以下设计:
支持SRP协议的USB全速设备(B类设备)
支持SRP协议的USB全速/低速主机(A类设备)
USB OTG全速双重角色设备
549/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
支持全速通信的SOF信号和低速通信的保持有效信号
SOF的脉冲可以输出到引脚
SOF在内部连接到定时器2(TIM2)
可配置的帧周期
可配置的帧结束中断
提供省电功能:如在USB挂起时停止系统,关闭数字部分,PHYDFIFO电源管理部分的
内部时钟系统。
提供1.25K字节的专用RAM和高级的FIFO管理
通过软件为不同的FIFO配置不同的RAM区域,以便灵活有效的使用RAM
每个FIFO可以存储多个数据包
允许动态的分配存储区
不限定FIFO的长度一定是2的幂次,以便可以连续的使用存储区
不需要系统的介入就可以保证一个帧(1ms)的最大数据流量。
26.2.2 主机模式功能
OTG_FS控制器接口:
需要一个外置的电荷泵为VBUS供电
支持最多8个主机通道,每个通道都可以动态的配置为任意一种传输类型
内置硬件调度控制器:
在周期性硬件传输请求队列中支持多达8个中断和同步传输请求
在非周期性硬件传输请求队列中支持多达8个控制和大容量传输的传输请求。
为有效地使用RAM空间,USB的数据RAM区划分为一个共享的接收FIFO、一个周期性发送
FIFO和一个非周期性发送FIFO
26.2.3 设备模式功能
OTG_FS控制器接口:
提供1个双向的控制端点0
提供3IN端点,支持大容量、中断或同步传输
提供3OUT端点,支持大容量、中断或同步传输
为有效地使用USB的数据RAM区,管理一个共享的接收FIFO,和一个发送OUT FIFO
管理多达4个专用的发送IN FIFO(为每个IN端点配置一个FIFO),以便减少应用程序的负荷
支持软件的断开连接功能。
550/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
26.3 OTG_FS功能描述
272
26.3.1 OTG全速控制器
USB OTG全速控制器从复位和时钟控制模块(RCC)获得由外部晶振产生的48MHz±0.25%的时
钟,这个时钟用于驱动USB全速模块(12Mbit/s)48MHz控制时钟,必须在配置OTG全速控制器
之前使能这个控制时钟。
微控制器内核(CPU)通过AHB外设总线来访问OTG全速控制器的寄存器,USB件由单独的
USB OTG中断控制线(请参考第26.13
551/754
节:OTG_FS中断)管理,通知微控制器内核。
微控制器以向OTG_FS专用地址(PUSH寄存器)32位数据的方式向USB控制器传输数据,这些
数据将自动存入USB数据RAM中配置好的发送FIFO中。每个发送FIFO都配置了这样一个PUSH
寄存器,为每个IN端点(设备模式)OUT通道(主机模式)服务。
微控制器通过读OTG_FS的专用地址(POP寄存器)获得来自USB总线的32位数据,这些数据将
自动从共享的接收FIFO中载入。接FIFO位于总共1.25K字节的USB数据RAM区。每一个OUT
端点或IN通道都有这样一个POP寄存器为之服务。
USB协议层由串行接口控制器(SIE)驱动,并连接到由内置物理层(PHY)支持的USB全速/低速收
发模块。
26.3.2 全速OTG PHY(物理接口)
内置的全速OTG PHYOTG全速控制器控制,并通过UTMI+总线(UTMIFS)的全速子集来收发
控制和数据信号。PHYUSB通信提供了物理层的支持。
全速的OTG PHY包括以下部分:
在主机和设备模式下使用的全速/低速收发模块。此模块直接在单端的USB线上驱动发送和
接收。
内置了ID线的上拉电阻,用于区分A/B类设备。
DP/DM线内置了上拉和下拉电阻,由OTG_FS控制器控制以满足当前设备类型的需求。在
设备模式下,当VBUS线上出现了有效的电平(B类有效),控制器使能DP线的上拉电阻,向主
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
机通告接入一个USB全速设备。在主机模式下,控制器同时使能DPDM线的下拉电阻。
上拉和下拉电阻可以在控制器通过主机协商协议(HNP)切换角色类型时动态的切换。
上拉/下拉电阻的ECN电路。DP线有两个由OTG_FS控制器分开控制的上拉电阻,符合
USB2.0版本的ECN要求(Enginering Change Notice)。支持动态调整DP线的上拉强度,能
更好的对抗噪声,并提高发送和接收信号质量。
内置带迟滞功能的VBUS探测比较器,用于检测VBUS的有效电平、A-B会话有效电平和会话结
束电平。这些电平用于驱动会话请求协议(SRP)、检测有效的会话开始和结束条件,并在
USB通信中持续的检测VBUS线状态。
VBUS脉冲电路用于在SRP期间通过电阻对VBUS进行充电/放电操作(弱驱动)
26.4 OTG双角色设备(DRD)
273 OTGA-B设备连接
1.仅在设计使用VBUS供电的设备时,才需要使用外部的电压调节器。
2.仅在设计使用VBUS供电的设备时,才需要使用ST20x2,如果应用板上有5V的供电,可以使用基本的电源开
关。
3VDD的范围从2V3.6V
26.4.1 ID信号检测
主机和设备(默认)的角色由ID线的状态定义。ID线的状态在连入USB总线的一瞬间决定,并取决
于插入micro-AB插座的USB电缆。
如果插入的是USB电缆的B端,并且ID线浮空,内置的上拉电阻将检测到ID线的高电平,此
时控制器处于默认的设备模式下。在这种模式下,OTG_FS控制器遵守USB2.0规范的补充
OTG1.3规范的第6.8.2节:OTG B类设备对标准FSM的描述。
如果插入的是USB电缆的A端,并且ID线接地。此时,OTG_FS控制器将执行一个ID线状态
改变中断(OTG_FS_GINTSTS寄存器的CIDSCHG),自动切换到主机模式,并需要软件
初始化主机模式。在这种模式下,OTG_FS控制器遵守USB2.0规范的补充OTG1.3规范的
的第6.8.1节:OTG A类设备对标准FSM的描述。
26.4.2 HNP双角色设备
USB全局配置寄存器的HNP使能位(OTG_FS_GUSBCFG寄存器的HNPCAP)允许OTG_FS
制器在A类主机和A类设备,以及B类主机和B类设备之间通过主机协商协议(HNP)动态地切换。
当前设备的状态可以通过读OTG全局控制和状态寄存器的ID状态位(OTG_FS_GOTGCTL寄存
器的CIDSTS)和全局中断和状态寄存器的当前操作模式位(OTG_FS_GINTSTS寄存器的
CMOD)来综合获得。
552/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
HNP的编程规则请参考第26.15 OTG_FS编程。 节:
26.4.3 SRP双角色设备
USB全局配置寄存器的SRP使能位(OTG_FS_GUSBCFG寄存器的SRPCAP)允许OTG_FS
制器在实现A类设备时关闭VBUS的供电以节省消耗。注意:A类设备无论处于主机模式还是设备
模式下都需要控制管理VBUS的供电。
26.15 OTG_FS编程。 SRP的编程规则请参考第 节:
26.5 USB设备模式
本章介绍OTG_FS控制器在USB设备模式时的功能。
OTG_FS控制器在以下情况时工作在设备模式下:
OTG B类设备
插入的是USB电缆的B端时,默认的是OTG B类设备模式
OTG A类设备
OTG A类设备通过HNP协议切换到设备角色
B类设备
ID线存在时,插入的是USB电缆的B端,同时USB全局配置寄存器的HNP
(OTG_FS_GUSBCFG寄存器的HNPCAP)0(请参考OTG 1.3版的第6.8.3)
仅作为USB设备(请参考下图)
USB全局配置寄存器的强制设备模式位(OTG_FS_GUSBCFG寄存器的FDMOD)
1,将强制使OTG_FS控制器工作于USB设备模式(请参考OTG 1.3版的第6.8.3
)。在这种情况下ID线无论是否存在,其状态都将被忽略。
注意:
在设计一个总线供电的仅实现设备模式的
B
类设备时,需要有一个外部的电压变换器,从
VBUS
电,为芯片的
VDD
供电。
274 单纯的USB外设连接
1.使用电压变换器来设计一个总线供电的设备
2VDD的范围是2V3.6V
26.5.1 具备SRP功能的设备
USB全局配置寄存器的SRP使能位(OTG_FS_GUSBCFG寄存器的SRPCAP)允许OTG_FS
制器实现会话请求协议(SRP)。在这种情况下,A类设备可以在USB会话挂起时停止对VBUS的供
电。
553/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
SRP协议的编程规则请参考第26.15.8节的B类设备的会话请求协议小节。
26.5.2 设备状态
上电状态
VBUS线上检测到B类设备有效的电平后,USB设备进入上电状态(请参考USB2.09.1)
OTG_FS控制器将自动使能DP线上的上拉电阻以告知主机接入了一个全速设备,并产生一个会
话请求中断(OTG_FS_GINTSTS寄存器的SRQINT),标志进入上电状态。
主机在整个USB通信阶段都需要提供有效的VBUS电平。如果检测到VBUS线上的电平低于B类有效
电平(例如发生了供电扰动,或者主机方关闭了供电)OTG_FS控制器将自动断开USB连接,并
产生会话结束中断(OTG_FS_GOTGINT寄存器的SEDET),标志控制器退出上电状态。
上电状态时,OTG_FS控制器期望从主机接收复位信号,其他USB操作都是无效的。当接收到
复位信号后,会产生复位中断(OTG_FS_GINTSTS寄存器的USBRST)。复位完成后,会产生
枚举中断(OTG_FS_GINTSTS寄存器的ENUMDNE),标志OTG_FS控制器进入默认状态。
软件断开
可以使用软件来配置退出上电状态。设置设备控制寄存器的软件断开位(OTG_FS_DCTL寄存器
SDIS)可以移除DP线上的上拉电阻,从而使主机即使在USB电缆依然连接时,识别到一个
设备断开事件。
默认状态
在默认状态下,OTG_FS控制器期望接收到SET_ADDRESS命令,此时其他操作都是无效的。
当接收到一个有效的SET_ADDRESS命令后,应用程序需要将相关的地址写入设备配置寄存器
的设备地址位(OTG_FS_DCFG寄存器的DAD)中。OTG_FS控制器进入地址状态,并准备好
响应主机发向这个地址的传输。
挂起状态
OTG_FS控制器持续的检测USB线上的活动。在检测到3msUSB空闲状态后,将产生早期挂
起中断(OTG_FS_GINTSTS寄存器的ESUSP),在3ms后产生挂起中断(OTG_FS_GINTSTS
寄存器的USBSUSP)确认挂起。设备状态寄存器的设备挂起位(OTG_FS_DSTS寄存器的
SUSPSTS)将自动置位,OTG_FS控制器进入挂起状态。
设备可以自发的脱离挂起状态,可以通过置位设备控制寄存器的远程唤醒信号位
(OTG_FS_DCTL寄存器的WKUPINT),并在115ms之间清除该位来实现。
当检测到主机发出恢复信号,会产生恢复中断(OTG_FS_GINTSTS寄存器的RWUSIG),同时
设备的挂起位被自动清除。
26.5.3 设备端点
OTG_FS控制器支持以下USB端点:
控制端点0
双向端点,仅用于处理控制信息
对于INOUT两个方向,各有一套独立的寄存器来控制
包括控制(DIEPCTL0/DOEPCTL0)寄存器,传输配置(DIEPTSIZ0/DOEPTSIZ0)寄存
器,和状态中断(DIEPINT0/DOEPINT0)寄存器。控制和传输长度寄存器中的某些位
与其他端点的寄存器不同。
3IN端点
每个端点都可以配置为同步、块传输或中断传输
每个端点都有控制(DIEPCTLx)寄存器,传输配置(DIEPTSIZx)寄存器和状态中断
(DIEPINTx)寄存器
设备IN端点通用中断屏蔽寄存器(DIEPMSK)用于使能/禁止所有IN端点(包括端点0)
任一类型的端点中断源
554/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
支持未完成的同步IN传输中断(OTG_FS_GINTSTS寄存器的IISOIXFR),在当前帧
有至少一个同步IN传输未完成时,会产生该中断。此中断随同周期帧中断产生
(OTG_FS_GINTSTS寄存器的EOPF)
3OUT端点
每个端点都可以配置为同步、块传输或中断传输
每个端点都有控制(DOEPCTLx)寄存器,传输配置(DOEPTSIZx)寄存器和状态中断
(DOEPINTx)寄存器
设备OUT端点通用中断屏蔽寄存器(DOEPMSK)用于使能/禁止所有OUT端点(包括端
0)上任一类型的端点中断源
支持未完成的同步OUT传输中断(OTG_FS_GINTSTS寄存器的INCOMPISOOUT
),在当前帧有至少一个同步OUT传输未完成时,会产生该中断。此中断随同周期
帧中断产生(OTG_FS_GINTSTS寄存器的EOPF)
端点配置
以下对端点的配置,都通过设置端点IN/OUT控制寄存器实现(DIEPCTLx/DOEPCTLx)
端点使能/禁止
在当前配置中激活端点
配置USB传输类型(同步,块传输,中断)
配置最大USB数据包长度
配置与IN端点相关的发送FIFO编号
配置期望收到的或将发送的PIDDATA0/DATA1(仅对块传输和中断传输有效)
配置需要发送或接收的传输帧的奇/偶帧(仅对同步传输有效)
可选的配置:设置NAK位,无论FIFO的状态如何都回应主机NAK
可选的配置:设置STALL位,对主机发送的任何命令都回应STALL
可选的配置:设置OUT端点SNOOP模式,对于接收到的数据不检验CRC
端点传输
设备端点传输长度寄存(DIEPTSIZx/DOEPTSIZx)用于配置传输长度和读取传输状态。对该寄
存器的配置必需在设置端口控制寄存器的使能位之前。一旦端点被使能,该寄存器便处于只读
状态,只有OTG_FS控制器可以更新该寄存器的传输状态位。
需要配置的传输参数如下:
以字节为单位的单次传输的长度
完成整个传输的USB数据包的数目
端点状态/中断
设备端点中断寄存器(DIEPINTx/DOEPINTx)指示了端点与USBAHB相关的事件状态。当设置
了控制器中断寄存器的OUT 端点中断位或者IN 端点中断位(OTG_FS_GINTSTS 寄存器的
OEPINT位和IEPINT)时,应用程序需要先读取设备所有端点中断寄存(DAINT),确定发生
中断的端点号,然后读取设备端点中断寄存器,获得中断的详细信息。应用程序必需随即清除
该寄存器的相应中断位,使之清除DAINT寄存器和GINTSTS寄存器的相应中断位。
设备控制器提供以下的状态位和中断事件:
传输完成中断,指示了在AHBUSB方面的数据传输都完成了。
SETUP阶段完成(仅对控制端点有效)
相关的传输FIFO已经半空或者全空(IN端点)
已发送NAK响应至主机(仅对同步IN传输有效)
当发送FIFO为空时,主机发出了IN请求(仅对块传输IN/中断IN传输有效)
在端点没有使能时,主机发出了OUT请求
检测到串扰错误
软件禁止了端点
软件将端点状态设为NAK(仅对同步IN传输有效)
收到超过3个连续的SETUP(仅对控制OUT传输有效)
检测到超时错误(仅对控制IN传输有效)
555/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
同步OUT包丢失,没有产生中断
26.6 USB主机
本章介绍了OTG_FS控制器工作在USB主机模式时的功能。OTG_FS控制器在以下条件时工作
在主机模式:
OTG A类主机
插入的是USB电缆的A端,默认的是OTG A类主机模式
OTG B类主机
OTG B类设备通过HNP协议切换到主机角色
A类设备
ID线存在时,插入的是USB电缆的A端,同时USB全局配置寄存器的HNP位为0
(OTG_FS_GUSBCFG寄存器的HNPCAP)。此时,内置的DP/DM线上的上拉电阻
自动有效。
仅作为主机(请参考下图)
USB全局配置寄存器的强制主机模式位(OTG_FS_GUSBCFG寄存器的FHMOD)
强制OTG_FS控制器工作的USB主机模式。此时即使USB连接器上的ID线存在,也依
然无效。内置的DP/DM线上的上拉电阻自动有效。
注意:
1
.控制器不能为
5V VBUS
供电,因此需要外接电荷泵,如果应用板能提供
5V
供电,可以使用基
本的开关电源来驱动
5V
VBUS
线。外接的电荷泵可以用任一通用
I/O
口来控制。在设计
OTG A
主机,
A
类设备和
USB
主机时,都需要这样的设计。
2
.在
USB
通信期间,电荷泵需要一直保证
VBUS
线上的供电,过流输出信号应该连接到配置为中
断输入的
I/O
端口上,在发生过流事件时,能产生中断,及时切断
VBUS
线的供电。
275 单纯的USB主机连接
1.如果设计的USB主机支持VBUS总线供电的设备,需要外接ST20x2。如果应用板上能提供5V供电,也可以使
用普通电源开关。
2VDD的范围是2V3.6V
26.6.1 具备SRP功能的主机
通过配置USB全局配置寄存器的SRP使能位(OTG_FS_GUSBCFG寄存器的SRPCAP),能够
支持SRP功能。使能了SRP功能后,主机可以在USB会话挂起时,关闭VBUS线的供电以节省耗
电。
SRP功能的编程实现请参考第26.15.8节的A类设备的会话请求协议小节。
556/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
26.6.2 USB主机状态
主机端口供电
控制器内部不提供VBUS5V供电,因此需要使用外接的电荷泵来VBUS线供电,如果应用板上
能提供5V供电,也可以使用普通的电源开关。这个外接的电荷泵可以通过普通的I/O口来控制。
当应用程序需要设置这个普通I/O口来给VBUS线供电时,也需要设置主机端口控制和状态寄存器
的供电位(OTG_FS_HPRT寄存器的PPWR)
VBUS线使能
USB整个通信过程中,VBUS线需要一直保证为有效的电平。任何导致VBUS线的电平下降到
(4.25V)以下的事件都将导致由会话中止位触发的OTG中断(OTG_FS_GOTGINT寄存器的
SEDET)。此时,应用程序需要关闭对VBUS的供电,并清除端口供电位。电荷泵的过流信号也
能用来防止电气损害,将此过流信号连接到设置为中断输入的I/O口上,一旦产生了过流事件
应用程序需要在中断中立即关闭VBUS的供电,并清除端口供电位。
主机对于设备接入的监测
如果VBUS线始终没有有效的电平(4.75V),无论何时插入USB设备或者B类设备,OTG_FS控制
器都不能监测到设备的插入。
VBUS线处于有效电平范围内,一旦有B类设备插入,OTG_FS控制器就会产生由设备插入位
(OTG_FS_HPRT寄存器的PCDET)触发的主机端口中断。
主机对于设备断开的监测
断开插入的设备,将产生由设备断开事件触发的断开中断(OTG_FS_GINTSTS 寄存器的
DISCINT)
主机枚举
一旦主机检测到有设备插入,需要进入枚举过程,向新插入的设备发送USB复位和配置命令。
由于插入的设备在DP(全速设备)或者DM(低速设备)线上有上拉电阻,因此会导致总线的不稳
定。当总线再次回到稳定状态时,会触发反跳结束的OTG中断(OTG_FS_GOTGINT寄存器的
DBCDNE),此时主机才能向设备发送USB复位命令。
应用程序通过置位主机端口控制和状态寄存器的端口复位位(OTG_FS_HPRT寄存器的PRST)
USB总线发出USB复位信号(单端0)。应用程序需要保证该复位信号维持在10ms20ms
间,并及时清除端口复位位。
一旦USB复位序列完成,会产生由端口使能/止改变位触发的主机端口中断(OTG_FS_HPRT
寄存器的PENCHNG)。此中断通知应用程序可以从主机端口控制和状态寄存器获得被枚举的
设备的速度信息(OTG_FS_HPRT寄存器的PSPD),随之,主机将发送SOF(全速设备)信号或
保持激活(低速状态)。此时,主机可以向设备发送配置命令,完成设备枚举。
主机挂起
应用程序可以通过置位主机控制和状态寄存器的端口挂起位(OTG_FS_HPRT寄存器的PSUSP
)来挂起USB活动。此时,OTG_FS控制器将停止发送SOF信号,并进入挂起状态。
控制器可选择支持由远程设备来唤醒主机退出挂起状态。此时,控制器在检测到远程唤醒信号
后,将产生远程唤醒中断(OTG_FS_GINTSTS寄存器的WKUPINT),随之,主机端口控制和
状态寄存器的唤醒位(OTG_FS_HPRT寄存器的PRES)将自动置位,控制器将自动向USB总线
发送唤醒信号。应用程序需要控制唤醒信号的维持时间,并及时的清除端口唤醒位来退出挂起
状态并重新开始发送SOF信号。
如果需要由主机自发退出挂起状态,应用程序可以设置端口唤醒位,此时唤醒信号将发送
USB总线,应用程序需要控制此唤醒信号维持的时间,并及时清除端口唤醒位。
557/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
26.6.3 主机通道
OTG_FS控制器提供8主机通道,每个通道对应一个USB主机传输(USB PIPE)。主机不支持
同时发起超过8个的传输请求。如果应用程序未处理的传输请求超过了8个,主机控制器(HCD)
必需在通道重新有效后,也就是收到传输完成和通道中止的中断后,重新安排通道。
每个通道都可以配置为输入/输出模式,也可以配置为任意的周期/非周期性传输类型。每个通道
都有控制寄存器(HCCHARx),传输配置寄存器(HCTSIZx)和状态/中断寄存器(HCINTx)以及相应
的屏蔽寄存器(HCINTMSKx)
主机通道控制
通道控制寄存器(HCCHARx)可以提供以下操作:
通道使能/禁止
为连接上的USB设备配置传输速度:全速/低速
为连接上的USB设备配置地址
为连接上的USB设备配置端点号
配置传输方向:输入/输出
配置传输类型:控制,块传输,中断,同步
配置最大包长度(MPS)
配置在奇数/偶数帧进行周期性传输
主机通道传输
应用程序通过主机通道传输长度寄存器(HCTSIZx)配置传输长度,并读回传输状态。必需在使能
一个传输通道前,配置传输长度。一旦通道被使能,传输长度寄存器即变为只读,只有
OTG_FS控制器可以更具当前传输状态更新该寄存器。
可以配置以下传输参数:
以字节为单位的单个包的传输长度
整个传输过程所有的包个数
起始的数据PID
主机通道状态/中断
主机通道x中断寄存器(HCINTx)指示了通道与USBAHB相关的事件。当主机控制器中断寄存器
的主机通道中断位(OTG_FS_GINTSTS寄存器的HCINT)被置位,应用程序需要先读主机所有
通道中断寄存器(HCAINT),获得产生主机通道中断的通道号,然后根据通道号读主机通道x
断寄存器(HCINTx),获得中断的信息。应用程序需要清除主机通道x中断寄存器(HCINTx)的相
应位,以便清除HAINTGINTSTS寄存器的相应位。可以通过OTG_FS_HCINTMSKx寄存器来
屏蔽每个通道的中断源。
主机控制器提供以下的状态查询和中断:
传输完成中断,指示应用程序端(AHB)USB端的数据传输都已经完成。
由于传输完成,USB通信错误或者应用程序的禁止命令导致的通道中止
相应的传输FIFO已经半空或者全空(仅对IN通道有效)
收到ACK响应
收到NAK响应
收到STALL响应
CRC错误、超时、位填充错误或者错误的EOP导致的USB传输错误
串扰错误
帧溢出
数据PID(DATA0/DATA1)翻转错误
26.6.4 主机调度器
主机控制器内置一个硬件的调度器,用于自发的管理和驱动应用程序发起的传输请求。在每个
帧开始时,主机将先处理周期性(同步和中断传)的数据传输,再处理非周期性(控制和大容量
传输)的数据传输,以便符合USB规范对同步和中断传输的高优先级保障。
558/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
主机通过请求队列(一个周期性队列和一个非周期性队列)来管理USB传输通道。每个请求队列都
能保存8个请求,而每个请求都代表应用程序提出的一个未处理的传输。每个请求队列中的请求
都带有IN/OUT方向,通道号以及其他的执行一个USB传输的信息。请求写入请求队列的顺序决
定了USB总线上的传输序列。在每个帧首,主机将先处理周期性请求队列,再处理非周期性请
求队列。如果在一个帧结束的时候,仍然有未处理的同步或者中断传输请求,将产生未完成周
期性传输中断(OTG_FS_GINTSTS寄存器的IPXFR)
周期性队列和非周期性队列的管理完全由OTG_FS控制器完成。应用程序可以通过只读的寄存
器来获得每个请求队列的状态信息。
周期性传输FIFO和队列状态寄存器(HPTXSTS)和非周期性传输FIFO和队列状态寄存器
(GNPTXSTS)包括:
周期和非周期性队列中还可以插入的请求数(最大为8)
周期性(非周期性)发送FIFO(对于OUT传输)中剩余的可用空间
IN/OUT命令,主机通道数和其他状态信息
由于每个请求队列可以保存至多8个请求,因此,应用程序可以尽可能的利用这一特性,最多
8个周期性传输请求和8个非周期传输请求,以提高传输效率。例如,对于块传输OUT/IN
据,应用程序可以配置传输高达64(每包的最大字节数)×8(最大请求数)512字节的数据,实现
全速设备的最高数据传输速率。这些数据将由主机自动调度而不需要应用程序插入管理。
应用程序通过以下步骤向主机调度发起一个周期性(非周期性)OUT传输请求:
配置主机通道的传输参数
使能配置的通道
OTG_FS_GNPTXSTS寄存器的HPTXSTS位,确保周期性(非周期性)队列还能容
纳至少1个请求。
HPTXSTS(GNPTXSTS)寄存器,确保周期性(非周期性)的发送FIFO(请参考第
26.11.2节:主机模式下的发送FIFO)中剩余足够的空间。如果应用程序在收到周期性
(非周期性)发送FIFO半空或全空中断后才提交传输请求的话,此步骤可省略。
将数据载入相应的FIFO(PUSH寄存器)。每个通道都会配置一个PUSH寄存器。数
据将根据OTG_FS_HCCHARx寄存器的EPTYPE位,自动载入相应的周期性或非周
期性发送FIFO中。当最后一个32位的数据被写入FIFO中,一个请求将被插入请求队
列的末端,等待调度执行。
应用程序通过以下步骤,向主机调度发起一个周期性(非周期性)IN传输请求:
配置主机通道的传输参数
设置主机通道控制寄存器的通道使能位(OTG_FS_HCCHARx寄存器的CHENA)
使能配置好的通道。此操作将在周期性(非周期性)请求队列的末端插入一个传输请
求,并等待调度执行。
559/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
26.7 SOF触发
276 SOF连接
OTG_FS控制器提供:
SOF的监控,跟踪和配置
SOF脉冲输出
由于音频设备需要与PC的数据流同步,或者主机需要根据音频设备的需求调整帧率,因此这些
功能对于音频应用的时钟输出非常有用。
26.7.1 主机SOF
在主机模式下,可以通过配置主机帧间隔寄存(HFIR)来设置两个连续的SOF(全速设备)或者保
持有效(低速设备)之间的PHY时钟数目,因此,应用程序可以用它来控制SOF帧周期。在每个帧
首都可以产生中断(OTG_FS_GINTSTS寄存器的SOF)。当前的帧号和时间都将保持不变直到
在主机帧号寄存器(HFNUM)中出现了下一个帧号。
每个SOF首都将产生一个宽度为12个系统时钟周期的SOF脉冲信号,通过全局控制和配置寄存
器的SOFOUTEN位,可以配置在SOF引脚上输出这个脉冲。SOF脉冲在内部也连接到定时器
2(TIM2)的触发输入端,因此输入捕获,输出比较和定时器都可以被SOF脉冲触发。通过
REMAP_DBGAFR寄存器的29’可以使能SOF脉冲到TIM2的连接。
26.7.2 设备SOF
在设备模式下,每次在USB线上收到SOF时,都将产生帧首中断(OTG_FS_GINTSTS寄存器的
SOF)。可以从设备状态寄存器中读出当前帧号(OTG_FS_DSTS寄存器的FNSOF)。此时,
会产生一个宽度为12个系统时钟周期的SOF脉冲信号,通过使能全局控制和配置寄存器的SOF
输出使能位(OTG_FS_GCCFG寄存器的SOFOUTEN)可以在SOF引脚上输出这个脉冲信号。
SOF脉冲信号同样在内部连接到定时器2(TIM2)的触发输入端,此连接通过REMAP_DBGAFR
存器的29’使能,此时输入捕获,输出比较和定时器都可以被SOF脉冲触发。
周期性帧结束中断(GINTSTS寄存器的EOPF)用来告知应用程序,80%85%90%95%
帧已经完成,此间隔取决于设备配置寄存器的帧间隔位(OTG_FS_DCFG寄存器的PFIVL)。此
功能用于判断一个帧内所有的同步传输是否都已经完成。
26.8 供电选项
OTG PHY的耗电由通用控制器配置寄存器的以下3位决定:
PHY供电位(GCCFG寄存器的PWRDWN)
560/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
切换PHY全速收发器模块的开/关。必需预先设置才能允许USB通信。
AVBUS监控使能位(GCCFG寄存器的VBUSASEN)
切换A类设备VBUS比较器的开/关。在A类设备模式时(USB主机),在HNP阶段必需使
能该位。
BVBUS监控使能位(GCCFG寄存器的VBUSASEN)
切换B类设备VBUS比较器的开关。在B类设备模式时(USB设备),在HNP阶段必需使
能该位。
USB无通信或无USB设备连接时,暂停USB,可以节省供电。
停止PHY时钟(OTG_FS_PCGCCTL寄存器的STPPCLK)
当设置时钟门控控制寄存器的停止PHY时钟位时,大部分内部连接到OTG全速控制
器的48MHz时钟通过门控被关闭,此时,即使应用程序仍然使能48MHz的输入时
钟,但由USB时钟造成的动态功耗会大大下降。
大部分的收发器会被禁止,但用于检测异步复位信号和远程唤醒事件的电路仍然处于
激活状态。
门控HCLK(OTG_FS_PCGCCTL寄存器的GATEHCLK)
当设置时钟门控寄存器的门控HCLK位时,大部分内部连接到OTG_FS控制器的系统
时钟会被门控电路关闭。只有寄存器的访问接口仍然保持有效。此时,即使应用程序
仍然使能系统时钟,但由USB时钟造成的动态功耗会大大下降。
USB系统停止
OTG_FS控制器处于USB挂起状态时,应用程序需要完全关闭所有的系统时钟源来
彻底降低所有功耗。先置位PHY时钟停止位,再设置供电控制系统模块(PWR)进入系
统深度睡眠模式,将停止USB系统。
在检测到远程唤醒(作为主机)或来自USB总线的唤醒信号(作为设备)时,OTG_FS
制器将自动恢复系统活动和USB的时钟。
为了降低功耗,只有在OTG_FS控制器需要访问FIFO时,才向USB数据FIFO提供时钟。
561/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
26.9 USB数据FIFO
下图示出OTG_FS控制器的框图和各个部分的功能。
277 OTG_FS控制器框图
BIUS:总线接口单元;AIU:应用程序接口单元;PFC:包FIFO控制器;MAC:媒体访问控制器;WPC:唤
醒和供电控制器;PIUPHY接口单元;SIE:串行接口控制器
USB系统规划了1.25K字节的专RAM用于FIFO的管理OTG_FS控制器的包FIFO控制器(PFC)
模块将此RAM划分为发送FIFO区域和接收FIFO区域,应用程序将数据暂时缓存到发送FIFO
中,等待发送,而从USB总线上收到的数据则暂时缓存在接收FIFO中,等待应用程序读取。实
际的FIFO数量及如何在专RAM中规划这些FIFO都由实际的应用决定。比如在设备模式下,每
IN端点都会配置一个发送FIFO,而这些FIFO的大小都可以由软件指定,这样,专用的RAM
以最优化的满足应用的需求。
562/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
26.10 设备模式下的FIFO结构
278 设备模式下的FIFO地址映像和AHBFIFO操作映像
26.10.1 设备模式下的接收FIFO
FS_OTG控制器在设备模式下,使用一个单独的FIFO缓存所有OUT端点的数据。收到的数据包
依次缓存在RX FIFO的可用空间中。收到的数据包的状态(包括OUT端点号,字节数,数据PID
号和收到数据的有效性)PFC模块写在收到的数据前。如果接收FIFO没有剩余空间,控制器将
NACK来回应主机,同时产生相应端点的中断。接FIFO的大小可由接收FIFO长度寄存器
(GRXFSIZ)配置。
使用单个RX FIFO的架构,使得USB设备能更有效的利用整个接收RAM空间。
所有的OUT端点共享整个RAM空间(共享的FIFO)
OTG_FS控制器可以最大限度的按照主机发送OUT数据的次序来利用接收FIFO
只要接收FIFO还有至少一个数据包等待应用程序获取,应用程序就会不断收到接收FIFO非空中
(OTG_FS_GINTSTS寄存器的RXFLVL)。应用程序可以通过读接收状态读和弹出寄存器
(GRXSTSP)获得数据包信息,并通过读相应端点的POP寄存器从接收FIFO中获取数据包。
26.10.2 设备模式下的发送FIFO
共享FIFO的模式不适用于IN传输,只有提前知道主机请求的次序或者能预测进程的处理过程
能将所有端点的数据包都按次序传送到同一个发送FIFO中。所以在设备模式下,控制器为每个
IN 端点都配置了一个专用的FIFO 。应用程序可以通过非周期性传输FIFO 长度寄存器
(GNPTXFSIZ)来配置IN端点0FIFO长度,并通过设备IN端点传输FIFO寄存器(DIEPTXFx)来配
IN端点xFIFO长度。
专用的FIFO的架构非常灵活,大大减少应用程序的负荷。这些FIFO没有请求序列,也没有必要
USB主机访问非周期性端点的时候预测访问的顺序。
563/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
据根在AHB配置寄存器中配置的非周期性发送FIFO空级别位(OTG_FS_GAHBCFG寄存器
TXFELVL)的值OTG_FS 控制器会产生发送FIFO 空中断(OTG_FS_GINTSTS 寄存器的
NPTXFE),提示对应IN端点的发送FIFO已经半空或者全空。应用程序先通过读设备所有端点
中断寄存器(DAINT)获得需要服务的IN端点号,然后通过读设备IN端点x的发送FIFO状态寄存器
(DTXFSTSx)检查FIFO是否有足够的剩余空间,最后通过写相应端点的PUSH寄存器来向发送
FIFOx传送数据。
26.11 主机模式下的FIFO结构
279 主机模式FIFO地址映像和AHBFIFO操作映像
26.11.1 主机模式下的接收FIFO
在主机模式下使用一个接收FIFO管理所有的周期性和非周期性的传输,此FIFO用于暂存从USB
总线上收到但还未传输到系统存储区的数据(到的数据包)。来自任一远程IN端点的数据包都将
按次序暂存在FIFO中。收到数据包的状态,包括主机通道号,字节数,数据PID和收到数据的
有效性也一同储存在FIFO中。应用程序可以通过接收FIFO长度寄存器(GRXFSIZ)来配置这个接
FIFO的长度。
使用单个接收FIFO的架构,使得USB主机能更有效的利用整个接收RAM空间。
所有配置好的IN通道共享整个RAM空间(共享的FIFO)
OTG_FS控制器可以最大限度的按照主机发送IN命令的序列来利用接收FIFO
只要接收FIFO还有至少一个数据包等待应用程序获取,应用程序就会收到接收FIFO非空中断。
应用程序可以通过读接收状态读和弹出寄存器获得数据包信息,并通过读相应端点的POP寄存
器从接收FIFO中获取数据包。
26.11.2 主机模式下的发送FIFO
在主机模式下,控制器使用一个发送FIFO来管理所有的非周期性(控制和块传输)OUT传输,使
用另一个发送FIFO来管理所有的周期性(同步和中断)OUT输。这两个FIFO用于暂存需要发送
USB总线的数据(发送的数据包)。可以通过主机周期性(非周期性)传输FIFO长度寄存器
(HPTXFSIZ/GNPTXFSIZ)来配置周期性(非周期性)发送FIFO的长度。
使用两个发送FIFO是因为要保证一个USB帧里周期性传输的高优先级。在每个帧开始的时候,
内置的主机调度器先处理周期性请求队列再处理非周期性请求队列。
使用两个发送FIFO使USB主机能方便的分开优化管理周期性和非周期性的数据缓存。
564/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
所有用于周期性(非周期性)OUT传输的主机通道共享同一块RAM缓存区(共享的FIFO)
OTG_FS控制器可以根据主机软件对OUT命令的调度最大限度的利用周期性(非周期性)的发
FIFO
根据在AHB配置寄存器中配置的周期性发送FIFO空标志位(OTG_FS_GAHBCFG寄存器的
PTXFELVL)的值,OTG_FS控制器会产生周期性发送FIFO空中断(OTG_FS_GINTSTS寄存器
PTXFE),提示周期性发送FIFO已经半空或者全空。应用程序需要先读周期性发送FIFO
队列状态寄存器(HPTXSTS)来获得周期性发送FIFO和周期性请求队列是否有剩余空间的信息,
只有在发送FIFO和请求队列都有剩余空间的情况下,应用程序才能将数据写入FIFO中。
根据在AHB配置寄存器中配置的非周期性发送FIFO空级别位(OTG_FS_GAHBCFG寄存器
TXFELVL)的值,OTG_FS控制器会产生非周期性发送FIFO空中断(OTG_FS_GINTSTS寄存
器的NPTXFE),提示非周期性发FIFO已经半空或者全空。应用程序需要先读非周期性发
FIFO和队列状态寄存器(GNPTXSTS)来获得非周期性发送FIFO和非周期性请求队列是否有剩余
空间的信息,只有在发送FIFO和请求队列都有剩余空间的情况下,应用程序才能将数据写入
FIFO中。
26.12 USB系统性能
通过配置大容量的RAM缓存区、高自由度的FIFO长度配置AHB PUSH/POP寄存器的32位快
速访问、和高级的FIFO控制机制,使得OTG_FS控制器能最大限度的利用RAM空间而不必顾虑
USB数据的次序,USB系统达到了最优的性能。
这些优势如下:
应用程序的负荷减少,不用干预USB传输,优化了CPU带宽的使用率
当数据通过USB系统有效率的传送时,应用程序可以提前准备好大量的传输数据。
应用程序获得了大量的时间从一个单一的接收FIFO中获取数据
USB控制器可以控制自身的全部工作效率,也就是说,与需要应用程序干预相比,现在的
架构可以提供最高的全速带宽和最大幅度的自治。
USB控制器管理一个大型的数据缓存区,可以自主的管理数据在USB总线上的传输
USB控制器管理一个大型的数据接收缓存区,可以自主的从USB总线上接收数据并填
入缓存区
由于OTG_FS控制器可以非常有效的使用1.25K字节的RAM缓存区,并且对于一个全速的帧来说
1.25K字节已经足够用于管理发送/接收的数据,因此USB系统能在每个USB帧内(1ms)提供最大
的全速数据传输率。
565/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
26.13 OTG_FS中断
无论OTG_FS控制器工作在设备模式还是主机模式,应用程序都不能访问另一个模式下的寄存
器组。如果应用程序有非法的访问,会产生模式不匹配中断并影响控制器中断寄存器的相应位
(OTG_FS_GINTSTS寄存器的MMIS)。当控制器从一种模式切换到另一种模式时,新模式下
的寄存器组都需要和上电复位时一样的重新初始化。
280 中断架构
请参考控制器中断寄存器的相关位
26.14 OTG_FS控制和状态寄存器
应用程序通过AHB从接口来读写控制和状态寄存器(CSRx),从而实现对OTG_FS控制器的控
制。这些寄存器都是32位访问的,并且32位地址对齐。包括以下寄存器组:
控制器全局寄存器组
主机模式寄存器组
主机全局寄存器组
566/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
主机端口CSR寄存器组
主机通道相关寄存器组
设备模式寄存器组
设备全局寄存器组
设备端点相关寄存器组
供电和时钟控制寄存器组
数据FIFO(DFIFO)访问寄存器组
只有控制器全局寄存器,供电和时钟控制寄存器,数据FIFO访问寄存器以及主机端口控制和状
态寄存器在主机模式和设备模式下都有效。无论OTG_FS控制器工作在主机模式还是设备模式
下,应用程序都不能访问另一种模式下的寄存器组。如果应用程序发生了非法访问,会产生模
式不匹配中断并影响控制器中断寄存器的相应(OTG_FS_GINTSTS寄存器的MMIS)。当控
制器从一种模式切换到另一种模式时,新模式下的寄存器组都需要和上电复位时一样的重新初
始化。
必须以字(32)的方式操作这些外设寄存器。
26.14.1 CSR存储器映像
主机模式寄存器和设备模式寄存器占据不同的地址。所有的寄存器都由AHB时钟驱动。
281 CSR存储器映像
在设备模式下x3,在主机模式下x7
567/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
全局CSR地址映像
这些寄存器在主机模式和设备模式下都有效。
183 控制器全局控制和状态寄存器(CSRs)
寄存器代号 偏移地址 寄存器名
OTG_FS_OTGCTL 0x000
OTG_FS控制和状态寄存器
OTG_FS_GOTGINT 0x004 OTG_FS中断寄存器
OTG_FS_GAHBCFG 0x008 OTG_FS AHB配置寄存器
OTG_FS_GUSBCFG 0x00C OTG_FS USB配置寄存器
OTG_FS_GRSTCTL 0x010 OTG_FS复位寄存器
OTG_FS_GINTSTS 0x014
OTG_FS控制器中断寄存器
OTG_FS_GINTMSK 0x018 OTG_FS中断屏蔽寄存器
OTG_FS_GRXSTSR 0x01C OTG_FS接收状态调试读/OTG状态读和弹出寄存器
OTG_FS_GRXSTSP 0x020
OTG_FS_GRXFSIZ 0x024 OTG_FS接收FIFO长度寄存器
OTG_FS_GNPTXFSIZ 0x028 OTG_FS非周期性发送FIFO长度寄存器
OTG_FS_GNPTXSTS 0x02C OTG_FS非周期性发送FIFO/队列状态寄存器
OTG_FS_GCCFG 0x038
OTG_FS通用控制配置寄存器
OTG_FS_CID 0x03C
OTG_FS控制器ID寄存器
OTG_FS_HPTXFSIZ 0x100 OTG_FS主机模式周期性发送FIFO长度寄存器
OTG_FS_DIEPTXFx 0x104
0x124 OTG_FS设备模式IN端点TX FIFO长度寄存器(x = 1…4
指明FIFO的编号)
0x13C
主机模式CSR地址映像
这些寄存器在每次切换到主机模式时都需要配置。
184 主机模式下的控制和状态寄存器(CSRs)
寄存器代号 偏移地址 寄存器名
OTG_FS_HCFG 0x400
OTG_FS主机模式配置寄存器
OTG_FS_HFIR 0x404
OTG_FS主机模式帧间隔寄存器
OTG_FS_HFNUM 0x408
OTG_FS主机模式帧号码/剩余帧时间寄存器
OTG_FS_HPTXSTS 0x410 OTG_FS主机模式周期性TX FIFO/队列状态寄存器
OTG_FS_HAINT 0x414
OTG_FS主机模式所有通道中断寄存器
OTG_FS_HAINTMSK 0x418 OTG_FS主机模式所有通道中断屏蔽寄存器
OTG_FS_HPRT 0x440
OTG_FS主机模式端口控制和状态寄存器
OTG_FS_HCCHARx 0x500
0x520 OTG_FS主机模式通道x特性寄存器(x = 0 … 7x指示通
道编号)
0x6E0
OTG_FS_HCINTx 0x508
OTG_FS主机模式通道x中断寄存器(x = 0 … 7x指示通
道编号)
OTG_FS_HCINTMSKx 0x50C OTG_FS主机模式通道x中断屏蔽寄存器(x = 0 … 7x
示通道编号)
OTG_FS_HCTSIZx 0x510
OTG_FS主机模式通道x传输长度寄存器(x = 0 … 7x
示通道编号)
568/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
设备模式CSR地址映像
这些寄存器在每次切换到设备模式时都必须配置。
185 设备模式控制和状态寄存器
寄存器代号 偏移地址 寄存器名
OTG_FS_DCFG 0x800
OTG_FS设备模式配置寄存器
OTG_FS_DCTL 0x804
OTG_FS设备模式控制寄存器
OTG_FS_DSTS 0x808
OTG_FS设备模式状态寄存器
OTG_FS_DIEPMSK 0x810 OTG_FS设备模式IN端点共有中断屏蔽寄存器
OTG_FS_DOEPMSK 0x814 OTG_FS设备模式OUT端点共有中断屏蔽寄存器
OTG_FS_DAINT 0x818
OTG_FS设备模式所有端点中断寄存器
OTG_FS_DAINTMSK 0x81C OTG_FS设备模式所有端点中断屏蔽寄存器
OTG_FS_DVBUSDIS 0x828 OTG_FS设备模式VBUS下电时间寄存器
OTG_FS_DVBUSPULSE 0x82C OTG_FS设备模式VBUS脉冲时间寄存器
OTG_FS_DIEPEMPMSK 0x834 OTG_FS设备模式IN端点FIFO空中断屏蔽寄存器
OTG_FS_DIEPCTL0 0x900 OTG_FS设备模式IN控制端点0控制寄存器
OTG_FS_DIEPCTLx 0x920 OTG_FS设备模式IN端点x制寄存器(x = 1…3x指示端
点编号) 0x940
0xAE0
OTG_FS_DIEPINTx 0x908 OTG_FS设备模式IN端点x中断寄存器(x = 1…3x指示端
点编号)
OTG_FS_DIEPTSIZ0 0x910 OTG_FS设备模式IN端点0传输长度寄存器
OTG_FS_DTXFSTSx 0x918 OTG_FS设备模式IN端点TX FIFO状态寄存器(x = 1…3x
指示端点编号)
OTG_FS_DIEPTSIZx 0x930 OTG_FS设备模式IN端点x传输长度寄存器(x = 1…3x
示端点编号) 0x950
0xAF0
OTG_FS_DOEPCTL0 0xB00 OTG_FS设备模式OUT控制端点0控制寄存器
OTG_FS_DOEPCTLx 0xB20 OTG_FS设备模式OUT端点x控制寄存器(x = 1…3x指示
端点编号) 0xB40
0xCC0
0xCE0
0xCFD
OTG_FS_DOEPINTx 0xB08 OTG_FS设备模式OUT端点x中断寄存器(x = 1…3x指示
端点编号)
OTG_FS_DOEPTSIZx 0xB10 OTG_FS设备模式OUT端点x传输长度寄存器(x = 1…3x
指示端点编号)
数据FIFO(DFIFO)访问寄存器址映射
这组寄存器列在主机模式和设备模式下都有效,用于读写指定方向的特殊端点或通道的FIFO
如果一个主机模式下的通道是IN类型的,相对应的FIFO只能进行读操作。同样地,如果一个
机模式下的通道是OUT类型的,相对应的FIFO只能进行写操作。
186FIFO(DFIFO)访问寄存器图
数据FIFO(DFIFO)访问寄存器段 地址范围 访问方式
设备模式下IN端点0/主机模式下OUT通道0DFIFO 只写 写操作
0x1000~0x1FFC
设备模式下OUT端点0/主机模式下IN通道0DFIFO 只读 读操作
569/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
设备模式下IN端点1/主机模式下OUT通道1DFIFO 只写 写操作
0x2000~0x2FFC
设备模式下OUT端点1/主机模式下IN通道1DFIFO 只读 读操作
…… …… ……
设备模式下IN端点x/主机模式下OUT通道xDFIFO 只写 写操作
0xX000~0xXFFC
设备模式下OUT端点x/主机模式下IN通道xDFIFO 只读 读操作
表中的x在设备模式下为3,在主机模式下为7
供电和时钟控制CSR寄存器映像
只有一个寄存器用来控制供电和时钟控制,此寄存器在设备模式下和主机模式下都有效。
187 供电和门控控制和状态寄存器
寄存器名 缩写 偏移地址
PCGCR 0xE00~0xE04
供电和门控时钟控制寄存器
0xE05~0xFFF
保留
26.14.2 OTG_FS全局寄存器
这些寄存器在设备模式和主机模式下都有效,并且在模式切换时不需要重新初始化。
如果没有特别注明,寄存器中每位的值都由二进制数表示。
OTG_FS控制和状态寄存器(OTG_FS_GOTGCTL)
偏移地址:0x000
复位值:0x0000 0800
OTG控制和状态寄存器控制OTG_FS控制器的操作,并反应控制器的状态。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BSVLD
ASVLD
DBCT
CIDSTS
DHNPEN
HSHNPEN
HNPRQ
HNGSCS
SRQ
SRQSCS
r r r r rw rw rw r rw r
保留 保留保留
保留 31:20
BSVLDB类会话有效 (B-session valid) 19
指示设备模式收发器的状态
0B类会话无效;
1B类会话有效。
OTG模式,用户可以用此位来判断设备是否连入主机
注意:仅在设备模式下有效。
ASVLDA类会话有效 (A-session valid) 18
指示主机模式收发器的状态
0A类会话无效;
1A类会话有效。
注意:仅在主机模式下有效。
DBCT/短反射时间 (Long/short debounce time) 17
指示检测到的连接的反射时间
0:长的反射时间,用于物理连接(100ms + 2.5us)
1:短的反射时间,用于软件连接(2.5us)
注意:仅在主机模式下有效。
570/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
CIDSTS连接的ID线状态 (Connector ID status) 16
指示连接器上的ID线状态
0OTG_FS处于A类设备模式;
1OTG_FS处于B类设备模式。
注意:在设备模式和主机模式下都有效。
15:12 保留
DHNPEN设备模式HNP使能 (Device HNP enabled) 11
应用程序在成功收到一个来自USB主机的SetFeature.SetHNPEnable命令时设置此位。
0:禁止设备模式HNP
1:使能设备模式HNP
注意:仅在设备模式下有效。
HSHNPEN主机模式HNP使能 (Host set HNP enable) 10
应用程序在成功使能连接上的设备的HNP(通过SetFeature.SetHNPEnable命令)设置此位。
0:禁止主机模式HNP
1:使能主机模式HNP
注意:仅在主机模式下有效。
HNPRQHNP请求 (HNP request) 9
应用程序在需要向USB主机发送一个HNP请求时设置此位。当OTG中断寄存器的主机协商成功状
态转换位(OTG_FS_GOTGINT寄存器的HNSSCHG)被置位时,应用程序可以通过写’0’清除此
位。控制器在清除HNSSCHG位时清除此位。
0:无NHP请求;
1HNP请求。
注意:仅在设备模式下有效。
HNGSCS主机协商成功 (Host negotiation success) 8
当主机协商成功时,控制器会设置此位。当应用程序设置HNP请求位(HNPRQ)时,控制器会清
除此位。
0:主机协商失败;
1:主机协商成功。
注意:仅在设备模式下有效。
7:2 保留
SRQ会话请求 (Session request) 1
应用程序通过设置此位在USB总线上发起一个会话请求。OTG中断寄存器的主机协商成功状态
改变位(OTG_FS_GOTGINT寄存器的HNSSCHG)被置位时,应用程序可以通过写’0’来清除此
位。控制器在清除HNSSCHG位时清除此位。
如果用户使用USB1.1全速串行收发器接口来发起一个会话请求,应用程序必需在B类会话有效位
(OTG_FS_GOTGCTL寄存器的BSVLD)被清除后,等待VBUS线降到0.2V。不同的PHY使用不
同的等待时间,由PHY的供应商掌控。
0:无会话请求;
1:会话请求。
注意:仅在设备模式下有效。
SRQSCS会话请求成功 (Session request success) 0
控制器在会话请求成功后设置此位。
0:会话请求失败;
1:会话请求成功。
注意:仅在设备模式下有效。
OTG_FS中断寄存器(OTG_FS_GOTGINT)
偏移地址:0x04
复位值:0x0000 0000
应用程序在发生OTG中断时读此寄存器,并通过清除相应位来清除OTG中断标志。
571/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rc_w1
rc_w1
rc_w1
rc_w1
rc_w1
rc_w1 SEDET
保留 保留 保留
DBCDNE
ADTOCHG
HNGDET
保留
HNSSCHG
SRSSCHG
保留 31:20
DBCDNE反射完成 (Debounce done) 19
在设备连接线路反射结束后,控制器会设置此位。应用程序可以在检测到此中断后发起USB复位
信号。此位仅在控制器USB配置寄存器的HNP有效或者SRP有效位(OTG_FS_GUSBCFG寄存器
HNPCAP位或SRPCAP)置位时才有效。
注意:仅在主机模式下有效。
ADTOCHGA类设备超时 (A-device timeout change) 18
控制器在A类设备等待B类设备插入超时时设置此位。
注意:在主机模式和设备模式下都有效。
HNGDET主机协商检测 (Host negotiation detected) 17
控制器在检测到USB总线上的主机协商请求时设置此位。
注意:在主机模式和设备模式下都有效。
16:10 保留
HNSSCHG主机协商成功状态改变 (Host negotiation success status change) 9
控制器在USB主机协商请求成功或者失败时设置此位。应用程序需要通过读OTG控制和状态寄存
器的主机协商成功位(OTG_FS_GOTGCTL寄存器的HNGSCS)来获得成功或者失败的信息。
注意:在主机模式和设备模式下都有效。
SRSSCHG会话请求成功状态改变 (Session request success status change) 8
控制器在会话请求成功或者失败时设置此位。应用程序需要通过读OTG控制和状态寄存器的会话
请求成功位(OTG_FS_GOTGCTL寄存器的SRQSCS)来获得成功或者失败的信息。
注意:在主机模式和设备模式下都有效。
7:3 保留
SEDET检测到会话结束 (Session end detected) 2
控制器在检测到VBUS<0.8V时,设置此位,指示B类设备的VBUS线的电平无效。
1:0 保留
OTG_FS AHB配置寄存器(OTG_FS_GAHBCFG)
偏移地址:0x008
复位值:0x0000 0000
此寄存器用于在上电或改变控制器模式时配置控制器。此寄存器主要配置一些和AHB相关的参
数。在初始化配置完成后,不要再修改此寄存器。应用程序在开始向AHBUSB传送数据前必
需先配置好此寄存器。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PTXFELVL
TXFELVL
GINT
rw rw rw
保留 保留
保留 31:9
572/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
PTXFELVL周期性发送FIFO空级别 (Periodic TxFIFO empty level) 8
指示在何种情况下需要触发控制器中断寄存器的周期性发送FIFO空中断(OTG_FS_GINTSTS
存器的PTXFE)
0PTXFE(OTG_FS_GINTSTS寄存器中)中断表示周期性发送FIFO已经半空;
1PTXFE(OTG_FS_GINTSTS寄存器中)中断表示周期性发送FIFO已经全空。
注意:仅在主机模式下有效。
TXFELVL发送FIFO空级别 (TxFIFO empty level) 7
在设备模式下,此位指示在何种情况下需要触发IN端点发送FIFO空中断(OTG_FS_DIEPINTx
存器的TXFE)
0TXFE(OTG_FS_DIEPINTx寄存器中)中断指示IN端点TX FIFO已经半空;
1TXFE(OTG_FS_DIEPINTx寄存器中)中断指示IN端点TX FIFO已经全空。
在主机模式下,此位指示在何种情况下需要触发非周期性发送FIFO空中断(OTG_FS_GINTSTS
寄存器的NPTXFE)
0NPTXFE(OTG_FS_GINTSTS寄存器中)中断表示非周期性发送FIFO已经半空;
1NPTXFE(OTG_FS_GINTSTS寄存器中)中断表示非周期性发送FIFO已经全空。
6:1 保留
GINT全局中断屏蔽 (Global interrupt mask) 0
应用程序可以通过此位选择屏蔽或者不屏蔽中断。但无论是否设置此位,控制器仍然会更新中断
状态寄存器。
0:屏蔽中断;
1:不屏蔽中断。
注意:在设备模式和主机模式下都有效。
OTG_FS_USB配置寄存器(OTG_FS_GUSBCFG)
偏移地址:0x00C
复位值:0x0000 0A00
此寄存器用于在上电或模式切换时配置控制器。此寄存器多用于配置与USBUSB PHY相关的
参数。应用程序在向AHBUSB传送数据之前必需先配置好此寄存器。在初始化配置完成后不
要修改此寄存器。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CTXPKT
FDMOK
FHMOD
NPTXRWEN
HNPCAP
SRPCAP
rw rw rw rw rw rw
TOCAL
rw
保留 TRDT 保留
rw
CTXPKT错误的发送包 (Corrupt Tx packet) 31
此位仅用于调试。不能设置此位为’1’
注意:在设备模式和主机模式下都有效。
FDMOD强制设备模式 (Force device mode) 30
不管OTG_FS_ID输入引脚的状态如何,设置此位为’1’强制控制器进入设备模式。
0:普通模式;
1:强制设备模式。
设置此位后,应用程序需要等待至少25ms,以便设置生效。
注意:在主机模式和设备模式下都有效。
FHMOD强制主机模式 (Force host mode) 29
不管OTG_FS_ID输入引脚的状态如何,设置此位为’1’强制控制器进入主机模式。
0:普通模式
1:强制主机模式
设置此位后,应用程序需要等待至少25ms,以便设置生效。
注意:在主机模式和设备模式下都有效。
28:15 保留
573/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
NPTXRWEN非周期性发送FIFO重发使能 (Reserved non-periodic TxFIFO rewind enable) 14
在主机模式下,在只有一个通道时应该设置此位。设置此位后,控制器将在NAK或超时的情况
下,自动重发OUT传输,而不需要应用程序的干预。
在设备模式下,任何时候在只有一个非周期IN端点时应该设置此位,这种情况多见于大容量存储
设备的应用中。当设置此位后,控制器能自动管理非周期性端点的超时,而不需要应用程序的干
预。
注意:在设备模式和主机模式下都有效。
TRDTUSB总线的周转时间 (USB turnaround time) 13:10
PHY层的时钟周期为单位设置周转时间。
设置一个MAC请求到包FIFO控制器(PFC)要求从DFIFO(SPRAM)获取数据的响应时间。
这些位必需被设置为:
0101:当MAC接口是16UTMIFS
1001:当MAC接口是8UTMIFS
注意:仅在设备模式下有效。
HNPCAPHNP使能 (HNP-capable) 9
应用程序通过此位来使能OTG_FS控制器的HNP功能。
0:禁止HNP功能;
1:使能HNP功能。
注意:在设备模式和主机模式下都有效。
SRPCAPSRP使能 (SRP-capable) 8
应用程序通过此位来使能OTG_FS控制器的SRP功能。如果控制器工作在SRP功能的B类设备
模式下,就不能要求连接的A类设备(主机)使能VBUS线并发起一个会话。
0:禁止SRP功能;
1:使能SRP功能。
注意:在设备模式和主机模式下都有效。
7:3 保留
TOCALFS超时校准 (FS timeout calibration) 2:0
考虑到由PHY带来的额外的时延,应用程序可以调整控制器的全速包超时判断时延,这些位以
PHY时钟的数目给出了调整时延的长度。不同的PHY在控制总线状态时,带来的额外时延是不同
的,通过这些位可以适应不同的总线时延。
USB标准规定的全速包的超时判断是1618BIT时间。应用程序需要根据枚举的速度来配置此
位。每个PHY时钟增加的BIT时间是0.25BIT时间。
OTG_FS复位寄存器(OTG_FS_GRSTCTL)
偏移地址:0x10
复位值:0x2000 0000
应用程序可以通过此寄存器来复位控制器的各硬件模块。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AHBIDL
TXFFLSH
RXFFLSH
FCRST
HSRST
CSRST
rrs rs rs rs rs
保留
保留
TXFNUM
rw
AHBIDLAHB主控模块空闲 (AHB master idle) 31
指示AHB主控模块是否在空闲状态。
注意:在设备模式和主机模式下都有效。
保留 30:11
574/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
TXFNUM发送FIFO编号 (TxFIFO number) 10:6
此位指示哪个FIFO需要通过发送FIFO刷新位来刷新。只有在控制器清除了发送FIFO刷新位时,
应用程序才能修改此位。
00000
主机模式下表示非周期性发送FIFO
设备模式下表示发送FIFO 0
00001
主机模式下表示周期性发送FIFO
设备模式下表示发送FIFO 1
00010
设备模式下表示发送FIFO 2
……
00101
设备模式下表示发送FIFO 5
10000
在主机模式或设备模式下刷新所有发送FIFO
注意:在主机模式和设备模式下都有效。
TXFFLSH发送FIFO刷新 (TxFIFO flush) 5
此位用于刷新单独的或所有的发送FIFO,当控制器正在进行传输时,不能设置此位。
应用程序只有在检测了控制器既没有向发送FIFO写数据也没有从发送FIFO读数据时,才能设置
此位。可以通过以下方式来检测:
读:NAK有效中断,确保控制器没有从FIFO读数据。
写:OTG_FS_GRSTCTL寄存器的AHBIDL位,确保控制器没有在写FIFO
注意:在设备模式和主机模式下都有效。
RXFFLSH接收FIFO刷新 (RxFIFO flush) 4
应用程序可以通过此位来刷新整个接收FIFO,但必需确保控制器没有在传输数据。
应用程序只有在检测了控制器既没有写接收FIFO也没有读接收FIFO时,才能设置此位。
应用程序只有在等待此位重新被控制器清除后,才能进行其他的操作。此位需要8时钟周期(
PHYAHB时钟中较慢的那个为准)才能清除。
注意:在主机模式和设备模式下都有效。
3 保留
FCRST主机帧计数器复位 (Host frame counter reset) 2
应用程序通过写此位来复位控制器内部的帧计数器。在帧计数器复位后,控制器发送的首个SOF
的帧号为0
注意:仅在主机模式下有效。
HSRSTHCLK软件复位 (HCLK soft reset) 1
应用程序可以使用此位来刷新AHB时钟域的控制逻辑。仅由AHB时钟域驱动的模块进行复位。
FIFO不会受此位影响。
根据协议,所有的由AHB时钟域驱动的状态机都会在完成AHB当前传输后复位到空闲状态。
清零AHB时钟域驱动的状态机中的CSR控制位。
为了清除此中断,用于控制中断状态及由AHB时钟域驱动的状态机产生的状态屏蔽位将被清
除。
由于中断状态位并没有被清除,因此应用程序仍然可以获得在设置此位后产生的任何控制器
事件的状态。
控制器会自动在所有必要的逻辑模块复位后清除此位。这一操作将维持若干个时钟周期,具体由
控制器当前所处的状态决定。
注意:在设备模式和主机模式下都有效。
575/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
576/754
0 CSRST控制器软件复位 (Core soft reset)
复位HCLKPCLK驱动域:
清除除了以下位之外的所有中断和CSR寄存器:
OTG_FS_PCGCCTL寄存器的RSTPDMODL
OTG_FS_PCGCCTL寄存器的GAYEHCLK
OTG_FS_PCGCCTL寄存器的PWRCLMP
OTG_FS_PCGCCTL寄存器的STPPCLK
OTG_FS_HCFG寄存器的FSLSPCS
OTG_FS_DCFG寄存器的DSPD
所有模块的状态机(除了AHB从单元)都将复位到空闲状态,所有的发送FIFO和接收FIFO都被
刷新。
所有在AHB主模块上的数据传输都在完成AHB传输的最后一个数据阶段后立即结束。所有在
USB上的传输都立即结束。
应用程序可以在任何需要复位控制器的时侯设置此位。控制器将在所有必需的逻辑模块复位之后
自动清除此位,这段操作将维持若干个时钟周期,具体由控制器当前所处的状态决定。一旦此位
被清除,软件必需在激活PHY域之前等待至少3PHY时钟周期(同步操作的时延)。应用程序在开
始其他操作之前必需确保本寄存器的位31’1’(AHB主控模块空闲)
通常,只有在软件开发阶段和在上面列出的USB配置寄存器中动态修改PHY选择位时才需要进入
软件复位操作。如果用户改变了PHY的配置,与之相应的时钟会被选中并应用到PHY域。一旦选
中了新的时钟,PHY域需要进行复位才能进一步的操作。
注意:在设备模式和主机模式下都有效。
OTG_FS控制器中断寄存器(OTG_FS_GINTSTS)
偏移地址:0x014
复位值:0x0400 0020
此寄存器在发生与当前模式(设备模式或主机模式)相配的系统事件时打断应用程序。
寄存器的某些位仅在主机模式下有效,另一些位仅在设备模式下有效。寄存器也可以用来指示
当前模式。应用程序需要在相应位写1来清除rc_w1类型的中断状态位。
FIFO状态中断位是只读的,一旦应用程序在中断服务程序中对FIFO进行了读写操作,FIFO的中
断状态位会被自动清除。
初始化的时候,应用程序在使能某个中断位之前,需要先清除OTG_FS_GINTSTS寄存器的相
应位,以避免由于原先的值导致不必要的中断。
313029282726252423222120191817161514131211109876543210
WKUINT
SRQINT
DISCINT
CIDSCHG
PTXFE
HCINT
HPRTINT
IPXFR/INCOMPISOOUT
IISOIXFR
OEPINT
IEPINT
EOPF
ISOODRP
ENUMDNE
USBRST
USBSUSP
ESUSP
BOUTNAKEFF
GINAKEFF
RXFLVL
SOF
OTGINT
MMIS
CMOD
rrr rr rr r
rc_w1
r
rc_w1
r
保留
保留
rc_w1
保留
rc_w1 rc_w1
NPTXFE
保留
WKUPINT检测到唤醒/远程唤醒中断 (Resume/remote wakeup detected interrupt) 31
在设备模式下,当检测到USB总线上的唤醒信号即产生此中断;
在主机模式下,在检测到USB总线上的一个远程唤醒信号时即产生此中断。
注意:在设备模式和主机模式下都有效。
SRQINT会话请求/检测到新会话中断 (Session request/new session detected interrupt) 30
在主机模式下,当检测到一个来自设备的会话请求时即产生此中断;
在设备模式下,当VBUSB类设备的有效电平范围内时即产生此中断。
注意:在设备模式和主机模式下都有效。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
DISCINT检测到断开事件中断 (Disconnect detected interrupt) 29
当检测到设备断开时即产生此中断。
注意:仅在主机模式下有效。
CIDSCHG连接上的ID线状态改变 (Connector ID status change) 28
控制器在检测到连接上的ID线状态改变即设置此位。
注意:在主机模式和设备模式下都有效
27 保留
PTXFE周期性发送FIFO (Periodic TxFIFO empty) 26
当周期性发送FIFO半空或者全空,并且周期性请求队列里至少能写入一个请求时,产生此中断。
半空还是全空的状态由控制器AHB 配置寄存器的周期性发FIFO 空级别位决定
(OTG_FS_GAHBCFG寄存器的PTXFELVL)
注意:仅在主机模式下有效。
HCINT主机通道中断 (Host channels interrupt) 25
控制器设置此位,指示有一个未处理的主机通道事件(在主机模式下)。应用程序需要读主机所有
通道中断寄存器(OTG_FS_HAINT寄存器)来获得产生中断的通道号,然后读相应的主机通道x
断寄存器(OTG_FS_HCINTx 寄存器)获得中断的具体信息。应用程序需要通过清除
OTG_FS_HCINTx寄存器的相应位来清除此位。
注意:仅在主机模式下有效。
HPRTINT主机端口中断 (Host port interrupt) 24
控制器设置此位指示OTG_FS控制器的某个端口状态发生改变。应用程序需要通过读主机端口控
制和状态寄存器(OTG_FS_HPRT)来获得导致此中断的具体信息。应用程序必需通过清除主机端
口控制和状态寄存器的相应位来清除此位。
注意:仅在主机模式下有效。
23:22 保留
IPXFR未完成的周期性传输 (Incomplete periodic transfer) 21
在主机模式下,控制器在帧结束时仍有属于当前帧的未完成的周期性传输时,产生此中断。
注意:仅在主机模式下有效。
INCOMPISOOUT未完成的同步OUT传输 (Incomplete isochronous OUT transfer)
在设备模式下,控制器在帧结束时仍有至少一个属于当前帧的未完成的同步OUT传输时,产生此
中断。此中断随同本寄存器中的周期性帧结束中断(EOPF)产生。
注意:仅在设备模式下有效。
IISOIXFR未完成的同步IN传输 (Incomplete isochronous IN transfer) 20
在设备模式下,控制器在帧结束时仍有至少一个属于当前帧的未完成的同步IN传输时,产生此中
断。此中断随同本寄存器中的周期性帧结束中断(EOPF)产生。
注意:仅在设备模式下有效。
OEPINTOUT端点中断 (OUT endpoint interrupt) 19
在设备模式下,控制器设置此位指示有一个控制器未处理的OUT端点事件。应用程序需要读设备
所有端点中断寄存器(OTG_FS_DAINT)来获得产生中断事件的端点号,然后读相应的设备OUT
x中断寄存器(OTG_FS_DOEPINTx)来获得产生中断的具体信息。应用程序需要通过清除
OTG_FS_DOEPINTx寄存器的相应位来清除此位。
注意:仅在设备模式下有效。
IEPINTIN端点中断 (IN endpoint interrupt) 18
在设备模式下,控制器设置此位指示有一个控制器未处理的IN点事件。应用程序需要读设备所
有端点中断寄存器(OTG_FS_DAINT)来获得产生中断事件的端点号,然后读相应的设备IN端点x
中断寄存器(OTG_FS_DIEPINTx) 来获得产生中断的具体信息。应用程序需要通过清除
OTG_FS_DIEPINTx寄存器的相应位来清除此位。
注意:仅在设备模式下有效。
17:16 保留
EOPF周期性帧结束中断 (End of periodic frame interrupt) 15
此中断指示在当前帧中,在设备配置寄存器中设置的周期性帧间隔时间(OTG_FS_DCFG寄存器
PFIVL)到达。
注意:仅在设备模式下有效。
577/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
ISOODRP同步OUT包丢失中断 (Isochronous OUT packet dropped interrupt) 14
当接收FIFO没有足够空间为一个同步OUT端点存放一个最大长度的数据包时,将导致控制器写
同步OUT包失败,并产生此中断。
注意:仅在设备模式下有效。
ENUMDNE枚举完成 (Enumeration done) 13
控制器设置此位指示已经获得速度枚举的信息。应用程序通过读设备状态寄存器
(OTG_FS_DSTS)来获得进行枚举的速度信息。
注意:仅在设备模式下有效。
USBRSTUSB复位 (USB reset) 12
控制器在检测到一个USB复位信号时设置此位。
注意:仅在设备模式下有效。
USBSUSPUSB挂起 (USB suspend) 11
控制器在检测到USB线上的挂起信号时设置此位。控制器会在数据线超过3ms没有活动的情况下
进入挂起状态。
注意:仅在设备模式下有效。
ESUSP早期挂起 (Early suspend) 10
控制器在检测到USB总线有3ms处于空闲状态时设置此位。
注意:仅在设备模式下有效。
9:8 保留
GONAKEFF全局OUT NAK状态 (Global OUT NAK effective) 7
指示应用程序,设备控制寄存器的全局OUT NAK(OTG_FS_DCTL存器的SGONAK)已生
效。应用程序通过写设备控制寄存器的清除全局OUT NAK(OTG_FS_DCTL寄存器的CGONAK
)来清除此位。
注意:仅在设备模式下有效。
GINAKEFF全局非周期性IN NAK状态 (Global IN non-periodic NAK effective) 6
指示应用程序,设备控制寄存器的设置全局非周期性IN NAK(OTG_FS_DCTL 寄存器的
SGINAK)已生效。也就是说,控制器已经相应了应用程序设置全局IN NAK位的操作。应用程
序通过清除设备控制寄存器的清除全局非周期性IN NAK(OTG_FS_DCTL寄存器的CGINAK)
来清除此位。
此中断并不意味着向USB总线发送了NAK握手信号,STALL位的优先级高于NAK位。
注意:仅在设备模式下有效。
NPTXFE非周期性发送FIFO (Non-periodic TxFIFO empty) 5
当非周期性发送FIFO全空或者半空,并且非周期性请求队列里至少能写入一个请求时,控制器会
产生此中断。FIFO半空或全空的状态取决于控制器AHB配置寄存器的非周期性发送FIFO空级别
(OTG_FS_GAHBCFG寄存器的TXFELVL)
注意:仅在主机模式下有效。
RXFLVL接收FIFO非空 (RxFIFO non-empty) 4
指示接收FIFO中至少有个一个数据包等待处理。
注意:在设备模式和主机模式下都有效。
SOF帧首 (Start of frame) 3
在主机模式下,控制器设置此位指示有一个SOF(全速设备)保持有效(低速设备)号已发向
USB总线。应用程序必需向此位写’1’来清除此中断。
在设备模式下,控制器设置此位表示在USB总线上检测到一个SOF。应用程序需要读设备状态寄
存器来获得帧编号。此中断仅当控制器处于全速状态时才会产生。
注意:在设备模式和主机模式下都有效。
OTGINTOTG中断 (OTG interrupt) 2
控制器设置此位指示发生一个OTG 协议事件。应用程序必需通过读OTG 中断寄存器
(OTG_FS_GOTGINT) 来获得产生此中断的具体信息。应用程序必需通过清除
OTG_FS_GOTGINT寄存器的相应位来清除此位。
注意:在设备模式和主机模式下都有效。
578/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
MMIS模式不匹配中断 (Mode mismatch interrupt) 1
控制器在应用程序试图执行以下操作时设置此位:
当控制器运行在设备模式下时,试图访问主机模式下的寄存器。
当控制器运行在主机模式下时,试图访问设备模式下的寄存器。
操作寄存器时,在AHB端会收到正确的响应,但控制器内部会忽视此类操作,并不对控制器的操
作产生任何影响。
注意:在主机模式和设备模式下都有效。
CMOD当前模式 (Current mode of operation) 0
指示当前模式。
0:设备模式;
1:主机模式。
注意:在设备模式和主机模式下都有效。
OTG_FS中断屏蔽寄存器(OTG_FS_GINTMSK)
偏移地址:0x018
复位值:0x0000 0000
此寄存器与控制器中断寄存器配合使用,产生中断。当一个中断位被屏蔽,就不会产生相应的
中断,然而控制器中断寄存器(OTG_FS_GINTSTS)的相应位仍然会被置起。
313029282726252423222120191817161514131211109876543210
WUIM
SRQIM
DISCINT
CIDSCHGM
PTXFEM
HCIM
PPTIM
IPXFRM/IISOOXFRM
IISOIXFRM
OEPINT
IEPINT
EPMISM
EOPFM
ISOODRPM
ENUMDNEM
USBRST
USBSUSPM
ESUSPM
GONAKEFFM
GINAKEFFM
NPTXFEM
RXFLVLM
SOFM
OTGINT
MMISM
rw rw r
保留
rw rw
保留
rw
保留
保留
rw
保留
WUIM检测到唤醒/远程唤醒中断屏蔽 (Resume/remote wakeup detected interrupt mask) 31
0:屏蔽该中断;
1:不屏蔽该中断。
注意:在设备模式和主机模式下都有效。
SRQIM会话请求/检测到新会话中断屏蔽 (Session request/new session detected interrupt
mask)
30
0:屏蔽该中断;
1:不屏蔽该中断。
注意:在设备模式和主机模式下都有效。
DISCINT检测到断开事件中断屏蔽 (Disconnect detected interrupt mask) 29
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在主机模式下有效。
CIDSCHGM连接上的ID线状态改变屏蔽 (Connector ID status change mask) 28
0:屏蔽该中断;
1:不屏蔽该中断。
注意:在主机模式和设备模式下都有效
27 保留
PTXFEM周期性发送FIFO空屏蔽 (Periodic TxFIFO empty mask) 26
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在主机模式下有效
579/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
HCIM主机通道中断屏蔽 (Host channels interrupt mask) 25
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在主机模式下有效。
PRTIM主机端口中断屏蔽 (Host port interrupt mask) 24
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在主机模式下有效。
23:22 保留
IPXFRM未完成的周期性传输中断屏蔽 (Incomplete periodic transfer mask) 21
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在主机模式下有效。
IISOOXFRM未完成的同步OUT传输中断屏蔽 (Incomplete isochronous OUT transfer mask)
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在设备模式下有效。
IISOIXFRM未完成的同步IN传输中断屏蔽 (Incomplete isochronous IN transfer mask) 20
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在设备模式下有效。
OEPINTOUT端点中断屏蔽 (OUT endpoints interrupt mask) 19
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在设备模式下有效。
IEPINTIN端点中断屏蔽 (IN endpoints interrupt mask) 18
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在设备模式下有效。
EPMISM端点不匹配中断屏蔽 (Endpoint mismatch interrupt mask) 17
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在设备模式下有效。
16 保留
EOPFM周期性帧结束中断屏蔽 (End of periodic frame interrupt mask) 15
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在设备模式下有效。
ISOODRPM同步OUT包丢失中断屏蔽 (Isochronous OUT packet dropped interrupt mask) 14
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在设备模式下有效。
ENUMDNEM枚举完成中断屏蔽 (Enumeration done mask) 13
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在设备模式下有效。
580/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
USBRSTUSB复位中断屏蔽 (USB reset mask) 12
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在设备模式下有效。
USBSUSPMUSB挂起中断屏蔽 (USB suspend mask) 11
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在设备模式下有效。
ESUSPM早期挂起中断屏蔽 (Early suspend mask) 10
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在设备模式下有效。
9:8 保留
GONAKEFFM全局OUT NAK状态中断屏蔽 (Global OUT NAK effective mask) 7
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在设备模式下有效。
GINAKEFFM全局非周期性IN NAK状态中断屏蔽 (Global non-periodic IN NAK effective mask)6
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在设备模式下有效。
NPTXFEM非周期性发送FIFO空中断屏蔽 (Non-periodic TxFIFO empty mask) 5
0:屏蔽该中断;
1:不屏蔽该中断。
注意:仅在主机模式下有效。
RXFLVLM接收FIFO非空中断屏蔽 (Receive FIFO non-empty mask) 4
0:屏蔽该中断;
1:不屏蔽该中断。
注意:在设备模式和主机模式下都有效。
SOFM帧首中断屏蔽 (Start of frame mask) 3
0:屏蔽该中断;
1:不屏蔽该中断。
注意:在设备模式和主机模式下都有效。
OTGINTOTG中断屏蔽 (OTG interrupt mask) 2
0:屏蔽该中断;
1:不屏蔽该中断。
注意:在设备模式和主机模式下都有效。
MMISM模式不匹配中断屏蔽 (Mode mismatch interrupt mask) 1
0:屏蔽该中断;
1:不屏蔽该中断。
注意:在主机模式和设备模式下都有效。
0 保留
OTG_FS接收状态调试读/OTG状态读和POP寄存器(OTG_FS_GRXSTSR /
OTG_FS_GRXSTSP)
读操作的地址偏移:0x01C
POP操作的地址偏移:0x020
复位值:0x0000 0000
581/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
对接收状态调试读寄存器的读操作,将返回接FIFO中顶部的数据。对接收状态调试读寄存器
POP寄存器的读操作,将会把接收FIFO中顶部的数据项顶出。
在主机模式和设备模式下,对于接收状态数据的解释并不相同。如果接收FIFO为空,控制器将
忽略对接收状态的读/POP操作,并返回0x0000 0000。应用程序只有在控制器中断寄存器的
FIFO非空位(OTG_FS_GINTSTS寄存器的RXFLVL)’1’时才能POP出接收状态FIFO
主机模式:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CHNUM
保留
PKTSTS DPID BCNT
rr r r
31:21 保留
PKTSTS包状态 (Packet status) 20:17
指示接收到的数据包的状态
0010:接收到IN数据包;
0011IN传输完成(触发中断)
0101:数据翻转位出错(触发中断)
0111:通道中止(触发中断)
其他:保留。
DPID数据PID (Data PID) 16:15
指示接收到的数据包的数据PID
00DATA0
10DATA1
01DATA2
11MDATA
BCNT字节数 (Byte count) 14:4
指示接收到的数据包的字节数。
CHNUM通道号 (Channel number) 3:0
指示当前收到的数据包属于哪个通道
设备模式:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
r
EPNUM
保留 FRMNUM
r
PKTSTS DPID BCNT
rr r
31:25 保留
FRMNUM帧编号 (Frame number) 24:21
4位是从USB接收到的数据包所属的帧号的末4位,仅在同步OUT传输时有效。
PKTSTS包状态 (Packet status) 20:17
指示接收到的数据包的状态
0001:全局的OUT NAK(触发中断)
0010:接收到OUT数据包;
0011OUT传输完成(触发中断)
0100SETUP传输完成(触发中断)
0110:接收到SETUP数据包;
其他:保留。
582/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
DPID数据PID (Data PID) 16:15
指示接收到OUT数据包的PID
00DATA0
10DATA1
01DATA2
11MDATA
BCNT字节数 (Byte count) 14:4
指示接收到的数据包的字节数。
EPNUM端点号 3:0
指示当前接收到的数据包所属的的端点号
OTG_FS接收FIFO长度寄存器(OTG_FS_GRXFSIZ)
偏移地址:0x024
复位值:0x0000 0200
应用程序可以定义分配给接收FIFORAM长度。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
保留 RXFD
r/rw
31:16 保留
RXFD接收FIFO的深度 (RxFIFO depth) 15:0
这个数值的单位是32位的字
最小值为16
最大值为256
上电复位的值是接收FIFO的最大深度值。
OTG_FS非周期性TX FIFO长度寄存器(OTG_FS_GNPTXFSIZ)
地址偏移:0x028
复位值:0x0000 0200
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NPTXFSA
r/rw
NPTXFD
r/rw
NPTXFD非周期性发送FIFO深度 (Non-periodic TxFIFO depth) 31:16
这个数值的单位是32位的字
最小值是16
最大值是256
NPTXFSA非周期性接收FIFO RAM 里的起始地址 (Non-periodic transmit RAM start
address)
15:0
这些位的值表示非周期性接收FIFORAM里的起始地址
OTG_FS非周期性TX FIFO/请求队列状态寄存器(OTG_FS_GNPTXSTS)
偏移地址:0x02C
复位值:0x0008 0200
注意:
在设备模式下,此寄存器无效。
此寄存器为只读寄存器,储存非周期性发送FIFO和非周期性传输请求队列的剩余空间信息。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NPTXFSAV
r
NPTQXSAV
r
NPTXQTOP
r
保留
583/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
31 保留
NPTXQTOP非周期性传输请求队列的顶部 (Top of the non-periodic transmit request queue) 30:24
正在由MAC模块处理的非周期性发送请求:
[30:27]:通道/端点号;
[26:25]
00IN/OUT命令;
010长度的传输包(设备IN/主机OUT)
11:通道中止命令;
24:结束(选中通道/端点的最后一个请求)
NPTQXSAV非周期性传输请求队列的剩余空间 (Non-periodic transmit request queue space
available)
23:16
指示非周期性传输请求队列的剩余空间。在主机模式下,此队列既保存IN的传输请求又保存OUT
的传输请求,在设备模式下,仅保存IN的传输请求。
00:非周期性传输请求队列满;
01:剩余d×1个请求空间;
02:剩余d×2个请求空间;
B×n:剩余d×n个请求空间(0 n d×8)
其他:保留。
NPTXFSAV非周期性发送FIFO的剩余空间 (Non-periodic TxFIFO space available) 15:0
指示非周期性发送FIFO的剩余空间,此值为32位。
00:非周期性发送FIFO满;
01:剩余d×1个字的空间;
02:剩余d×2个字的空间;
O×n:剩余d×n个字的空间(0 n d×256)
其他:保留。
OTG_FS通用控制器配置寄存器(OTG_FS_GCCFG)
偏移地址:0x038
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SOFOUTEN
VBUSBSEN
VBUSASEN
PWRDWN
rw rw rw rw
保留
保留
保留
31:21 保留
SOFOUTENSOF输出使能 (SOF output enable) 20
0:不输出SOF脉冲;
1:输出SOF脉冲到引脚上。
VBUSBSENVBUS对于B类有效电平的监控使能 (Enable the VBUS sensing “B” device) 19
0VBUS不监控B类有效电平;
1VBUS监控B类有效电平。
VBUSASENVBUS对于A类有效电平的监控使能 (Enable the VBUS sensing “A” device) 18
0VBUS不监控A类有效电平;
1VBUS监控A类有效电平。
17 保留
PWRDWN掉电 (Power down) 16
用于在发送和接收时激活收发器
0:使能掉电;
1:禁止掉电(收发器激活)
15:0 保留
584/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
OTG_FS控制器ID寄存器(OTG_FS_CID)
偏移地址:0x03C
复位值:0x0000 1000
此寄存器只读,保存产品的ID
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PRODUCT_ID
rw
PRODUCT_ID产品ID (Product ID field) 31:0
应用程序可以编写此ID位。
OTG_FS主机周期性发送FIFO长度寄存器(OTG_FS_HPTXFSIZ)
偏移地址:0x100
复位值:0x0200 0600
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PTXFSIZ PTXSA
r/rw r/rw
PTXFSIZ主机周期性发送FIFO深度 (Host periodic TxFIFO depth) 31:16
此值为32位的字
最小值为16
最大值为512
PTXSA主机周期性发送FIFO起始地址 (Host periodic TxFIFO start address) 15:0
此寄存器的复位值是最大接收FIFO深度和最大非周期发送FIFO深度之和。
OTG_FS设备IN端点发送FIFO长度寄存器(OTG_FS_DIEPTXFx)(其中xFIFO的编
号,x=1…4)
偏移地址:0x104 + (FIFO编号 1) × 0x04
复位值:0x0200 0400
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
INEPTXFD INEPTXSA
r/rw r/rw
INEPTXFDIN端点发送FIFO的深度 (IN endpoint TxFIFO depth) 31:16
此值为32位的字
最小值为16
最大值为512
复位值是最大可能的IN端点发送FIFO的深度
INEPTXSAIN端点发送FIFORAM中的起始地址 (IN endpoint FIFOx transmit RAM start
address)
15:0
此值为IN端点发送FIFORAM中的起始地址。
26.14.3 主机模式下的寄存器
如果没有特殊说明,寄存器中的值都以二进制形式表达。
主机模式下的寄存器仅在主机模式下生效,不能在设备模式下访问,非法访问的结果是未定义
的。主机模式下的寄存器如下:
OTG_FS主机模式配置寄存器(OTG_FS_HCFG)
偏移地址:0x400
复位值:0x0000 0000
585/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
此寄存器在上电后配置控制器的操作,不要在初始化后再修改此寄存器。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FSLSS
保留
FSLSPCS
rrw
31:3 保留
FSLSS支持全速和低速设备 (FS- and LS-only support) 2
应用程序通过此位来配置控制器对设备进行枚举的速度。应用程序可以通过此位使控制器用全速
模式来枚举一个支持高速通信的设备。在初始化后不要修改此值。
1:仅支持全速/低速设备,即使插入的设备支持高速通信(只读)
FSLSPCS全速/低速PHY时钟选择 (FS/LS PHY clock select) 1:0
当控制器处于全速主机模式时:
01PHY时钟运行在48MHz
其他值:保留。
当控制器处于低速主机模式时:
00:保留;
01PHY时钟运行在48MHz
10PHY时钟运行在6MHz,根据USB1.1速模式定义,当UTMIFS PHY低功耗模式选中
时,如果PHY支持6MHz时钟,就在低速模式下使用6MHz时钟。用户一旦在低速模式
下选中了6MHz时钟,需要执行一个软件复位操作;
11:保留。
OTG_FS主机帧间隔寄存器(OTG_FS_HFIR)
偏移地址:0x404
复位值:0x0000 EA60
此寄存器为OTG_FS控制器在枚举时选中的速度设置帧间隔时间。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FRIVL
rw
保留
31:16 保留
FRIVL帧间隔 (Frame interval) 15:0
应用程序通过此位来配置两个连续的SOF(全速)或保持有效(低速)之间的时间间隔。此寄存器用
PHY时钟个数来表示帧间隔。应用程序只有在设置了主机端口控制和状态寄存器的端口使能位
(OTG_FS_HPRT寄存器的PENA)之后才能设置此寄存器。如果没有设置此寄存器,控制器将
按照主机配置寄存器的全速/低速PHY时钟选择位(OTG_FS_HCFG寄存器的FSLSPCS)定义的
PHY时钟来计算值。不要在初始化后再修改此寄存器。
1ms × (全速/低速的PHY时钟频率)
OTG_FS主机帧号/帧时间剩余寄存器(OTG_FS_HFNUM)
偏移地址:0x408
复位值:0x0000 3FFF
此寄存器指示了当前帧号,同样也指示了当前帧还剩余多少时间(PHY时钟个数来表示)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FRNUM
r
FTREM
r
FTREM帧时间剩余 (Frame time remaining) 31:16
指示当前帧还剩余多少时间,用PHY时钟数表达。每个PHY时钟,此值都会自减1。当此值自减
0,定义在帧间隔寄存器中的数值将自动载入此寄存器,并向USB总线发送一个新的SOF
586/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
FRNUM帧号 (Frame number) 15:0
每向USB总线发送一个SOF信号,此域自动加1。达到0x3FFF时则自动归零,重新开始累加。
OTG_FS主机周期性发送FIFO/请求队列寄存器(OTG_FS_HPTXSTS)
偏移地址:0x410
复位值:0x0008 0100
此寄存器为只读寄存器,保存周期性发送FIFO和请求队列的剩余空间信息。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rr
PTXFSAVL
rw
PTXQTOP PTXQSAV
PTXQTOP周期性传输请求队列顶部 (Top of the periodic transmit request queue) 31:24
指示MAC模块正在处理的周期性发送请求项。
此寄存器仅用于模块调试。
31 奇数/偶数帧
0:偶数帧发送;
1:奇数帧发送。
[30:27]:通道/端点号;
[26:25]:类型
00IN/OUT
01:零长度数据包;
11:中止通道命令。
24:结束(选中通道/端点的最后一个请求)
PTXQSAV周期性传输请求队列的剩余空间 (Periodic transmit request queue space available)23:16
指示周期性传输请求队列的剩余空间,此请求队列包括INOUT的请求。
00:周期性传输请求队列满;
01:剩余d×1个请求位置;
10:剩余d×2个请求位置;
b×n:剩余d×n个请求位置(0 d×n 8)
其他:保留。
PTXFSAVL周期性发送FIFO剩余空间 (Periodic transmit data FIFO space available) 15:0
指示周期性发送FIFO的剩余空间
此值为32位的字。
0000:周期性发送FIFO满;
0001:剩余d×1个字;
0010:剩余d×2个字;
b×n:剩余d×n个字(0 d×n d×512)
b×200:剩余d×512个字;
其他:保留。
OTG_FS主机所有通道中断寄存器(OTG_FS_HAINT)
偏移地址:0x414
复位值:0x0000 0000
当某个通道产生了标志性的事件,主机所有通道中断会通过控制器中断寄存器的主机通道中断
(OTG_FS_GINTSTS寄存器的HCINT)打断应用程序。具体请参考280。每个通道都有相
对应的通道中断位,一共有16个控制位。应用程序通过设置和清除相应的主机通道x中断寄存器
的相应位来设置和清除此位。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
HAINT
r
保留
587/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
31:16 保留
HAINT通道中断 (Channel interrupts) 15:0
每个位对应一个通道:位0对应通道0,位15对应通道15
OTG_FS主机所有通道中断屏蔽寄存器(OTG_FS_HAINTMSK)
偏移地址:0x418
复位值:0x0000 0000
主机所有通道中断屏蔽寄存器与主机所有通道中断寄存器配置使用,用于在产生事件时打断应
用程序。每个通道都有一个相对应的中断屏蔽位,共有16位。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
HAINTM
rw
保留
31:16 保留
HAINTM通道中断屏蔽 (Channel interrupt mask) 15:0
0:屏蔽中断;
1:不屏蔽中断。
每个位对应一个通道:位0对应通道0,位15对应通道15
OTG_FS主机端口控制和状态寄存器(OTG_FS_HPRT)
偏移地址:0x440
复位值:0x0000 0000
此寄存器仅在主机模式下有效。一个OTG主机控制器仅支持一个端口。
此寄存器保存与主机端口相关的信息,包括每个端口的USB复位、使能、挂起、唤醒、连接状
态和测试模式信息等。具体请参考280。标明rc_w1的位可以通过主机中断寄存器的主机端口
中断位(OTG_FS_GINTSTS寄存器的HPRTINT)来触发中断,打断应用程序。在端口中断服
务程序中,应用程序必需读此寄存器并清除导致中断的位。对于标明rc_w1的位,应用程序需要
通过写’1’来清除中断。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PPWR
PRST
PSUSP
PRES
POCCHNG
POCA
PENCHNG
PENA
PCDET
PCSTS
rw rw rs rw
rc_w1
r
rc_w1
rc_w1
rc_w1
r
保留
PSPD
r
保留
PTCTL
rw
PLSTS
r
31:19 保留
PSPD端口速度 (Port speed) 18:17
指示连上端口的设备速度
01:全速设备;
10:低速设备;
11:保留。
PTCTL端口测试控制 (Port test control) 16:13
应用程序通过写非零值到此位来进入测试模式,在端口会出现相应的信号。
0000:非测试模式;
0001Test_J模式;
0010Test_K模式;
0011Test_SE0_NAK模式;
0100Test_Packet模式;
0101Test_Force_Enable
其他:保留。
588/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
PPWR端口供电 (Port power) 12
应用程序通过设置此位来向端口供电,控制器在发生电流溢出事件时清除此位。
0:不供电;
1:供电。
PLSTS端口状态 (Port line status) 11:10
指示USB数据线的当前逻辑状态
10OTG_FS_FS_DP线的逻辑状态;
11OTG_FS_FS_DM线的逻辑状态。
9 保留
PRST端口复位 (Port reset) 8
当应用程序设置此位时,会在端口上产生一个复位序列。应用程序需要控制复位的时间,并在复
位完成后清除此位。
0:端口不复位;
1:端口复位。
应用程序需要保持此位的’1’状态至少10ms以便启动端口的复位序列。应用程序也可以在清除此
位前增加10ms’1’状态,USB规范没有对复位信号的最长持续时间做出定义。
PSUSP端口挂起 (Port suspend) 7
应用程序设置此位,使端口进入挂起状态。在这种状态下控制器仅停止发送SOF信号。应用程序
需要通过设置端口时钟停止位来停止PHY时钟。
对此位的读操作将返回当前端口的挂起状态,当应用程序设置此寄存器的端口复位位或端口唤醒
位,或控制器检测到一个远程唤醒信号,或控制器中断寄存器的唤醒/远程唤醒检测中断位或端口
检测中断位(OTG_FS_GINTSTS寄存器的WKUINT位或DISCINT)被设置,控制器将清除此
位。
0:端口不处于挂起模式;
1:端口处于挂起模式。
PRES端口唤醒 (Port resume) 6
应用程序设置此位驱动端口发出唤醒信号。控制器将输出驱动唤醒信号直到应用程序清除此位。
当控制器检测到USB远程唤醒序列,按照控制器中断寄存器的端口唤醒/远程唤醒检测中断位的指
示,控制器会自动输出唤醒序列而不需要应用程序干预。如果控制器检测到设备断开,会自动清
除此位。对此位的读操作将返回控制器是否正在输出唤醒信号的信息。
0:无唤醒;
1:输出唤醒信号。
POCCHNG端口过流状态改变 (Port overcurrent change) 5
控制器在此寄存器的端口过流位(4)发生变化时设置此位。
POCA端口过流位 (Port overcurrent active) 4
指示端口是否发生了过流。
0:没有过流;
1:过流。
PENCHNG端口使能/禁止状态改变 (Port enable/disable change) 3
控制器在本寄存器的端口使能位(2)发生变化时设置此位。
PENA端口使能 (Port enable) 2
端口只有在复位序列后才能被控制器使能,在发生过流、设备断开获控制器清除此位时禁止端
口。应该程序不能通过寄存器写操作设置此位。此位不会触发中断。
0:端口禁止;
1:端口使能。
PCDET端口连接检测 (Port connect detected) 1
当控制器检测到一个设备连接到端口时,会触发控制器中断寄存器的主机端口中断位
(OTG_FS_GINTSTS寄存器的HPRTINT)来产生中断,并设置此位。应用程序必需通过写’1’
清除中断。
589/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
PCSTS端口连接状态 (Port connect status) 0
0:没有设备连接到端口;
1:有设备连接到端口。
OTG_FS主机通道x特性寄存器(OTG_FS_HCCHARx)(此处x代码通道号,x = 0...7)
偏移地址:0x500 + (通道号 × 0x20)
复位值:0x0000 0000
313029282726252423222120191817161514131211109876543210
CHENA
CHDIS
ODDFRM
LSDEV
EPDIR
rs rs rw rw rw
MCNT
rw
保留
EPNUM MPSIZ
rw rw rw rw
DAD
EPTYP
CHENA通道使能 (Channel enable) 31
此位由应用程序设置,由FS_OTG主机控制器清除。
0:通道禁止;
1:通道使能。
CHDIS通道禁止 (Channel disable) 30
应用程序通过设置此位,可以立即停止该通道上的数据收/发,即使该通道数据的传输还没有完
成。应用程序只有在等到通道禁止中断产生时,才能认为该通道已被禁止。
ODDFRM奇数帧 (Odd frame) 29
应用程序通过设置/清除此位来告知OTG主机控制器应该在奇数/偶数帧时进行传输。此位仅对周
期性传输(同步或中断)有效。
0:偶数帧;
1:奇数帧。
DAD设备地址 (Device address) 28:22
应用程序通过此地址选择需要的设备。
MCNT设备地址 (Multicount) 21:20
此域指示主机在这个周期性端点上每帧必须执行的传输数目。非周期性传输不使用这个参数。
00:保留。设置这个数值将产生未定义的结果。
011次传输。
10:在这个端点上,每帧需要产生2次传输。
11:在这个端点上,每帧需要产生3次传输。
注:此域的数值至少应该设置为
’01’
EPTYP端点类型 19:18
指示选中的传输类型
00:控制传输;
01:同步传输;
10:块传输;
11:中断传输。
LSDEV低速设备 (Low speed device) 17
应用程序设置此位指示与之通信的设备是低速设备。
16 保留
EPDIR端点方向 (Endpoint direction) 15
指示传输是IN还是OUT方向。
0OUT
1IN
EPNUM端点号 (Endpoint number) 14:11
指示与之通信的端点号。
MPSIZ最大包长度 (Maximum packet size) 10:0
指示选中端点的最大包长度。
590/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
OTG_FS主机通道x中断寄存器(OTG_FS_HCINTx)(其中x代表通道号,x=0...7,)
偏移地址:0x508 + (通道号 × 0x20)
复位值:0x0000 0000
280此寄存器指示通道与USBAHB相关时间的状态。具体请参考 。当控制器中断寄存器的主
机通道中断位(OTG_FS_GINTSTS寄存器的HCINT)置起时,应用程序需要先读主机所有通道
中断寄存器(OTG_FS_HAINT),获得发生主机通道中断的通道号,再读取相应通道的中断寄存
器,获得中断的详细信息。应用程序通过清除此寄存器的相应位,清除OTG_FS_HAINT寄存
OTG_FS_GINTSTS寄存器的相应位。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DTERR
FRMOR
BBERR
TXERR
ACK
NAK
STALL
CHH
XFRC
rc_w1
rc_w1
rc_w1
rc_w1
rc_w1
rc_w1
rc_w1
rc_w1
rc_w1
保留
保留
保留
31:11 保留
DTERR数据PID错误 (Data toggle error) 10
FRMOR帧溢出 (Frame overrun) 9
BBERR串扰错误 (Babble error) 8
TXERR传输错误 (Transaction error) 7
指示发生了以下错误:
CRC校验失败
超时
位填充错误
EOP失败
6 保留
ACKACK已收到/已发送中断 (ACK response received/transmitted interrupt) 5
NAKNAK已收到中断 (NAK response received interrupt) 4
STALLSTALL已收到中断 (STALL response received interrupt) 3
2 保留
CHH通道中止 (Channel halted) 1
指示由于USB传输错误,或者应用程序中止请求导致的传输异常结束。
XFRC传输完成 (Transfer completed) 0
传输正常完成,没有出错。
OTG_FS主机通道x中断屏蔽寄存器(OTG_FS_HCINTMSKx)(其中x为通道号,
x=0...7)
偏移地址:0x50C + (通道号 × 0x20)
复位值:0x0000 0000
本寄存器用于屏蔽上一节所描述的各类通道中断。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DTERRM
FRMORM
BBERRM
TXERRM
NYET
ACKM
NAKM
STALLM
CHHM
XFRCM
rw rw rw rw rw rw rw rw rw rw
保留
保留
31:11 保留
DTERRM数据PID错误中断屏蔽 (Data toggle error mask) 10
0:屏蔽中断;
1:不屏蔽中断。
591/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
FRMORM帧溢出中断屏蔽 (Frame overrun mask) 9
0:屏蔽中断;
1:不屏蔽中断。
BBERRM串扰错误中断屏蔽 (Babble error mask) 8
0:屏蔽中断;
1:不屏蔽中断。
TXERRM传输错误中断屏蔽 (Transaction error mask) 7
0:屏蔽中断;
1:不屏蔽中断。
NYET收到响应中断屏蔽 (response received interrupt mask) 6
0:屏蔽中断;
1:不屏蔽中断。
ACKMACK已收到/已发送中断屏蔽 (ACK response received/transmitted interrupt mask) 5
0:屏蔽中断;
1:不屏蔽中断。
NAKMNAK已收到中断屏蔽 (NAK response received interrupt mask) 4
0:屏蔽中断;
1:不屏蔽中断。
STALMLSTALL已收到中断屏蔽 (STALL response received interrupt mask) 3
0:屏蔽中断;
1:不屏蔽中断。
2 保留
CHHM通道中止中断屏蔽 (Channel halted mask) 1
0:屏蔽中断;
1:不屏蔽中断。
XFRCM传输完成中断屏蔽 (Transfer completed mask) 0
0:屏蔽中断;
1:不屏蔽中断。
OTG_FS主机通道x传输长度寄存器(OTG_FS_HCTSIZx)(其中x为通道号,x=0...7)
偏移地址:0x510 + (通道号 × 0x20)
复位值:0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
保留
rw
DPID PKTCNT XFRSIZ
rwrw rw
31 保留
DPID数据PID (Data PID) 30:29
应用程序通过此位告知控制器首个传输所使用的PID类型。控制器将会自动控制后续传输的PID
型。
00DATA0
01DATA2
10DATA1
11MDATA(非控制)/SETUP(控制)
PKTCNT包数目 (Packet count) 28:19
应用程序通过此位告知控制器期望收到(IN)的包数目或期望发送(OUT)的包数目。
控制器在每次成功地发送或接收OUT/IN包之后,将自动地递减这个参数,一旦该域为0,应用程
序将收到中断,指示传输正常结束。
592/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
XFRSIZ传输长度 (Transfer size) 18:0
对于OUT传输,这些位指示主机在传输期间发送的数据字节数目。
对于IN传输,这些位指示应用程序预留的缓冲区长度。对于IN传输(周期性和非周期性),应用程
序需要按照最大数据包的整数倍来预定义这个参数。
26.14.4 设备模式下的寄存器
OTG_FS设备配置寄存器(OTG_FS_DCFG)
偏移地址:0x800
复位值:0x0220 0000
在复位、或特殊控制命令、或枚举后,此寄存器用于配置控制器在设备模式下的操作特性。在
初始化后,不要再修改此寄存器。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NZLSOHSK
rw
保留
PFIVL
DAD
保留
DSPD
rwrwrw
31:13 保留
PFIVL周期性帧间隔 (Periodic frame interval) 12:11
指示产生周期性帧结束中断的时间占整个帧的百分比。应用程序可以通过此中断判断一个帧内的
同步传输是否都已传输完成。
0080%的帧时间;
0185%的帧时间;
1090%的帧时间;
1195%的帧时间。
DAD设备地址 (Device address) 10:4
应用程序在收到SetAddress的控制命令后,按照参数填充此位。
3 保留
NZLSOHSK非零长度的状态OUT握手信号 (Non-zero-length status OUT handshake) 2
在控制传输的状态阶段,如果收到了一个非零长度的数据包,应用程序可以通过此位选择发送一
个握手信号。
1:向非零长度的状态OUT传输发送STALL握手,并且不向应用程序传送收到的OUT包。
0:根据设备端口控制寄存器的NAK位和STALL位状态,选择发送握手信号,并将收到的OUT
传送给应用程序(零长度和非零长度的)
DSPD设备速度 (Device speed) 1:0
指示应用程序需要控制器进行枚举操作时的速度,或者是应用程序能支持的最大速度。然而,实
际的总线速度只有在整个序列完成后,才能根据所连接的USB主机的速度决定。
00:保留;
01:保留;
10:保留;
11:全速(USB 1.1收发器,时钟为48MHz)
OTG_FS设备控制寄存器(OTG_FS_DCTL)
偏移地址:0x804
复位值:0x0000 0000
593/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
POPRGDNE
CGONAK
SGONAK
CGINAK
SGINAK
GONSTS
GINSTS
SDIS
PWUSIG
rw w w w w r r rw rw
保留
TCTL
rw
31:12 保留
POPRGDNE上电配置结束 (Power-on programming done) 11
应用程序通过此位指示从调电状态唤醒后,对寄存器的配置已经完成。
CGONAK清除全局OUT NAK (Clear global OUT NAK) 10
对此位的写操作将清除全局OUT NAK状态。
SGONAK设置全局OUT NAK (Set global OUT NAK) 9
对此位的写操作将设置全局OUT NAK状态。
应用程序通过此位告知控制器对所有的OUT端点都发送NAK信号。
程序在设置此位前,必需确认控制器中断寄存器的全局OUT NAK有效位(OTG-FS_GINTSTS
存器的GONAKEFF)已被清除。
CGINAK清除全局IN NAK ((Clear global IN NAK)) 8
写此位将清除全局IN NAK状态。
SGINAK设置全局IN NAK (Set global IN NAK) 7
对此位的写操作将设置全局非周期性INNAK状态。程序通过此位告知控制器对所有非周期性IN
端点都发送NAK握手信号。
程序在设置此位前,必需确认控制器中断寄存器的全局IN NAK有效位(OTG_FS_GINTSTS寄存
器的GINAKEFF)已被清除。
TCTL测试控制 (Test control) 6:4
000:测试模式禁止;
001Test_J模式;
010Test_K模式;
011Test_SE0_NAK模式;
100Test_Packet模式;
101Test_Force_Enable
其他:保留。
GONSTS全局OUT NAK状态 (Global OUT NAK status) 3
0:根据FIFO的状态和NAK位及STALL位的状态,发送握手信号。
1:不管存储区是否为空,都不写入数据到接收FIFO。向除了SETUP外的所有传输都发送NAK
手信号,丢弃所有的同步OUT包。
GINSTS全局IN NAK状态 (Global IN NAK status) 2
0:根据发送FIFO中数据的状态发送握手信号。
1:不管发送FIFO中数据的状态,对所有非周期性IN端点都发送NAK握手信号。
SDIS软件断开 (Soft disconnect) 1
应用程序通过此位告知OTG控制器执行软件断开操作。当设置此位后,主机将看到设备已经断
开,设备方将不会从USB总线上收到任何信号。控制器将保持在断开状态,直到程序清除此位。
0:普通操作。当此位在设备软件断开后清除,控制器将发送一个设备连接事件到主机,主机将
重新执行枚举操作。
1:控制器执行设备软件断开操作。
RWUSIG远程唤醒信号 (Remote wakeup signaling) 0
当应用程序设置此位,控制器将发送远程唤醒信号,唤USB主机。应用程序必需设置此位来使
控制器退出挂起状态。根据USB2.0规范,程序必需在设置此位后的1~15ms之间再次清除它。
为了使USB主机能识别到设备断开的操作,软件断开(SDIS)位需要保持一段时间,下表列出了
最小的持续时间(根据设备的不同状态)。为了适应时钟的抖动,建议应用程序在定义的最短时
外再额外保留一段时间的延迟。
594/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
188 软件断开的最短持续时间
操作速度 设备状态 最短持续时间
1ms + 2.5us
全速 挂起
2.5us
全速 空闲
2.5us
全速 不空闲或挂起(正在执行传输操作)
OTG_FS设备状态寄存器(OTG_FS_DSTS)
偏移地址:0x808
复位值:0x0000 0010
此寄存器指示控制器与USB相关的状态。此寄存器用于在发生设备所有中断(OTG_FS_DAINT)
寄存器事件时读取。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EERR
SUSPSTS
rr
保留
ENUMSPD
r
保留 FNSOF
r
31:22 保留
FNSOF接收到的SOF的帧号 (Frame number of the received SOF) 21:8
7:4 保留
EERR奇怪的错误 (Erratic error) 3
控制器在发生一些奇怪的错误时设置此位。
如果发生了奇怪的错误,OTG_FS控制器将进入挂起状态,并设置控制器中断寄存器的早期挂起
(OTG_FS_GINTSTS寄存器的ESUSP)随之产生中断。如果早期挂起中断是由于此位引起
的,应用程序只能通过执行软件断开来解决。
ENUMSPD枚举速度 (Enumerated speed) 2:1
指示OTG_FS控制器通过序列选定的执行速度。
01:保留;
10:保留;
11:全速(PHY时钟运行在48MHz)
其他:保留。
SUSPSTS挂起状态 (Suspend status) 0
在设备模式下,如果在USB总线上检测到了挂起条件,将设置此位。控制器将在检测到USB数据
线在3ms内没有活动的情况下进入挂起状态。控制器在以下条件时退出挂起模式:
USB数据线上出现了活动
当应用程序设置设备控制寄存器的远程唤醒信号位(OTG_FS_DCTL寄存器的RWUSIG)
OTG_FS设备IN端点通用中断屏蔽寄存器(OTG_FS_DIEPMSK)
偏移地址:0x810
复位值:0x0000 0000
此寄存器配合设备IN 端点中断寄存器(OTG_FS_DIEPINTx) 来产生IN 点中断。对应于
OTG_FS_DIEPINTx寄存器的相应IN端点中断可以通过配置此寄存器来屏蔽。所有的中断在默
认状态下都为屏蔽状态。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BIM
TXFURM
INEPNEM
INEPNMM
ITTXFEMSK
TOM
EPDM
XFRCM
rw rw rw rw rw rw rw rw
保留
保留
保留
31:10 保留
595/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
BIMBNA中断屏蔽 (BNA interrupt mask) 9
0:中断屏蔽;
1:中断不屏蔽。
TXFURMFIFO向下溢出中断屏蔽 (FIFO underrun mask) 8
0:中断屏蔽;
1:中断不屏蔽。
7 保留
INEPNEMIN端点NAK状态有效中断屏蔽 (IN endpoint NAK effective mask) 6
0:中断屏蔽;
1:中断不屏蔽。
INEPNMM端点收到IN命令不匹配中断屏蔽 (IN token received with EP mismatch mask) 5
0:中断屏蔽;
1:中断不屏蔽。
ITTXFEMSK当发送FIFO空时收到IN命令中断屏蔽 (IN token received when TxFIFO empty
mask)
4
0:中断屏蔽;
1:中断不屏蔽。
TOM超时检测中断屏蔽(非同步端点) (Timeout condition mask (Non-isochronous endpoints)) 3
0:中断屏蔽;
1:中断不屏蔽。
2 保留
EPDM端点被禁止中断屏蔽 (Endpoint disabled interrupt mask) 1
0:中断屏蔽;
1:中断不屏蔽。
XFRCM传输结束中断屏蔽 (Transfer completed interrupt mask) 0
0:中断屏蔽;
1:中断不屏蔽。
OTG_FS设备OUT端点通用中断屏蔽寄存器(OTG_FS_DOEPMSK)
偏移地址:0x814
复位值:0x0000 0000
此寄存器配合设备OUT端点中断寄存器(OTG_FS_DOEPINTx)使用,产生OUT端点中断。
OTG_FS_DOEPINTx寄存器的每一位都可以通过写此寄存器的相应位来屏蔽。在默认状态下,
所有中断都屏蔽。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BOIM
OPEM
B2BSTUP
OTEPDM
STUPM
EPDM
XFRCM
rw rw rw rw rw rw rw
保留
保留
保留
保留
31:10 保留
BOMBNA中断屏蔽 (BNA interrupt mask) 9
0:中断屏蔽;
1:中断不屏蔽。
OPEMOUT包错误中断屏蔽 (OUT packet error mask) 8
0:中断屏蔽;
1:中断不屏蔽。
7 保留
596/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
B2BSTUP收到连续的SETUP包中断屏蔽 (Back-to-back SETUP packets received mask) 6
0:中断屏蔽;
1:中断不屏蔽。
5 保留
OTEPDM当端点被禁止时收到OUT 命令中断屏蔽 (OUT token received when endpoint
disabled mask)
4
0:中断屏蔽;
1:中断不屏蔽。
STUPMSETUP阶段完成中断屏蔽 (SETUP phase done mask) 3
仅对控制端点有效
0:中断屏蔽;
1:中断不屏蔽。
2 保留
EPDM端点被禁止中断屏蔽 (Endpoint disabled interrupt mask) 1
0:中断屏蔽;
1:中断不屏蔽。
XFRCM传输结束中断屏蔽 (Transfer completed interrupt mask) 0
0:中断屏蔽;
1:中断不屏蔽。
OTG_FS设备所有端点中断寄存器(OTG_FS_DAINT)
偏移地址:0x818
复位值:0x0000 0000
当每个端点发生了事件时,设备所有端点中断寄存器分别通过控制器中断寄存器的设备OUT
点中断位或设备IN端点中断位(OTG_FS_GINTSTS寄存器的OEPINTIEPINT)来产生中断打
断应用程序。每个端点都有相对应的一位,OUT端点有16位,IN端点也有16位。对于双向端
点,同时使用INOUT位。此寄存器的相应位,在应用程序设置和清除相应的设备端点x中断寄
存器(OTG_FS_DIEPINTxOTG_FS_DOEPINTx寄存器)的相应位时自动设置和清除。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OEPINT IEPINT
rr
OEPINTOUT端点中断位 (OUT endpoint interrupt bits) 31:16
每个位对应一个OUT端点。
16对应OUT端点0,位18对应OUT端点3
IEPINTIN端点中断位 (IN endpoint interrupt bits) 15:0
每个位对应一个IN端点。
0对应IN端点0,位3对应IN端点3
OTG_FS所有端点中断屏蔽寄存器(OTG_FS_DAINTMSK)
偏移地址:0x81C
复位值:0x0000 0000
设备所有端点中断屏蔽寄存器与设备端点中断寄存器配合使用,在发生设备端点事件时,产生
中断打断应用程序。然而,设备所有端点中断寄存器(OTG_FS_DAINT)的相应位在屏蔽时仍然
置位。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OEPM IEPM
rw rw
597/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
OEPMOUT端点中断屏蔽寄存器 (OUT EP interrupt mask bits) 31:16
每个位对应一个OUT端点。
16对应OUT端点0,位31对应OUT端点15
0:屏蔽中断;
1:不屏蔽中断。
IEPMIN端点中断屏蔽位 (IN EP interrupt mask bits) 15:0
每个位对应一个IN端点。
0对应IN端点0,位15对应IN端点15
0:屏蔽中断;
1:不屏蔽中断。
OTG_FS设备VBUS放电时间寄存器(OTG_FS_DVBUSDIS)
偏移地址:0x828
复位值:0x0000 17D7
此寄存器定义SRP期间,在VBUS脉冲后的VBUS放电时间。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
VBUSDT
rw
保留
31:16 保留
VBUSDT设备VBUS放电时间 (Device VBUS discharge time) 15:0
定义在SRP期间,VBUS脉冲后的VBUS放电时间。这个数值等于以PHY时钟计算的VBUS放电时间
/1024
根据不同的VBUS负载,这个数值可以适当调整。
OTG_FS设备VBUS脉冲时间寄存器(OTG_FS_DVBUSPULSE)
偏移地址:0x82C
复位值:0x0000 05B8
此寄存器定义SRP期间VBUS脉冲的时间。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DVBUSP
rw
保留
31:12 保留
DVBUSP设备VBUS脉冲时间 (Device VBUS pulsing time) 11:0
定义在SRP期间,VBUS脉冲时间。这个数值等于以PHY时钟计算的VBUS脉冲时间/1024
OTG_FS设备IN端点FIFO空中断屏蔽寄存器(OTG_FS_DIEPEMPMSK)
偏移地址:0x834
复位值:0x0000 0000
此寄存器配合IN端点FIFO空中断寄存器(TXFE_OTG_FS_DIEPINTx)产生中断。
313029282726252423222120191817161514131211109876543210
INEPTXFEM
rw
保留
31:16 保留
INEPTXFEMIN端点发送FIFO空中断屏蔽位 (IN EP Tx FIFO empty interrupt mask bits) 15:0
此位用于屏蔽OTG_FS_DIEPINTx寄存器的相应位。
TXFE中断的一位对应一个IN端点:位0对应IN端点0,位3对应IN端点3
0:屏蔽中断;
1:不屏蔽中断。
598/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
OTG_FS设备控制IN端点0控制寄存器(OTG_FS_DIEPCTL0)
偏移地址:0x900
复位值:0x0000 0000
本节描述了设备控制IN端点0控制寄存器。非0控制端点使用对应端点1-15的寄存器。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EPENA
EPDIS
SNAK
CNAK
STALL
NAKSTS
USBAEP
rs r w w rs r r
MPSIZ
rwr
保留 TXFNUM
保留
rw
EPTYP
保留
保留
EPENA端点使能 (Endpoint enable) 31
应用程序设置此位,以启动在端点0上的数据传输。
控制器在产生以下端点中断前会先清除此位:
端点禁止;
传输完成。
EPDIS端点禁止 (Endpoint disable) 30
应用程序通过设置此位可以立即停止端点上的数据传输,即使传输还未完成。应用程序需要等到
端点禁止中断才能确为此端点已禁止。控制器在设置端点中断中断时会清除此位。应用程序只有
在端点已经使能时才能设置此位。
29:28 保留
SNAK设置NAK (Set NAK) 27
写此位会设置端点的NAK状态
通过设置此位,程序能告知控制器发送NAK握手信号。控制器也会在收到SETUP包时设置此
位。
CNAK清除NAK (Clear NAK) 26
写此位会清除端点的NAK状态
TXFNUM发送FIFO的编号 (TxFIFO number) 25:22
此位设置分配给IN端点0FIFO编号
STALLSTALL握手 (STALL handshake) 21
应用程序只能设置此位,控制器会在收到SETUP命令时清除此位。即使同时设置了NAK位、或
全局IN NAK位、或全局OUT NAK位,STALL位仍有高优先级。
20 保留
EPTYP端点类型 (Endpoint type) 19:18
对于控制端点,由硬件置为’00’
NAKSTSNAK状态 (NAK status) 17
指示以下:
0:根据FIFO状态,控制器发送非NAK握手信号;
1:控制器发送NAK握手信号。
只要设置了此位,不管是应用程序设置此位还是控制器设置此位,控制器都将停止数据传输,而
不管发送FIFO中的数据是否有效。不管此位设置如何,控制器永远发送ACK握手响应SETUP
据包。
16 保留
USBAEPUSB活跃端点 (USB active endpoint) 15
此位永远为’1’,指示控制端点0在任何配置情况下都是活跃的。
14:2 保留
599/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
MPSIZ最大包长度 (Maximum packet size) 1:0
应用程序通过此位配置该端点的最大数据包长度
0064字节;
0132字节;
1016字节;
118字节。
OTG设备端点x控制寄存器(OTG_FS_DIEPCTLx)(其中x为端点号,x=1…3)
偏移地址:0x900 + (端点号 × 0x20)
复位值:0x0000 0000
应用程序通过这些寄存器控制非0端点的操作特性。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EPENA
EPDIS
SODDFRM
SDOPID/SEVNFRM
SNAK
CNAK
STALL
NAKSTS
EONUM/DPID
USBAEP
rsrswwww
rw/rs
rrrw
保留
MPSIZ
rw
TXFNUM
保留
rw
EPTYP
rw
EPENA端点使能 (Endpoint enable) 31
应用程序设置此位,以启动端点上的数据传输。
控制器在产生以下端点中断前会先清除此位:
SETUP阶段完成
端点禁止
传输完成
EPDIS端点禁止 (Endpoint disable) 30
应用程序通过设置此位可以立即停止端点上的数据传输,即使传输还未完成。应用程序需要等到
端点禁止中断才能确为此端点已禁止。控制器在设置端点中断中断时会清除此位。应用程序只有
在端点已经使能时才能设置此位。
SODDFRM设置奇数帧 (Set odd frame) 29
仅对同步的INOUT端点有效。
写此位在EONUM中选择奇数帧。
SD0PID设置DATA0 PID (Set DATA0 PID) 28
仅对中断/块传输IN端点有效。
写此位将设置数据PID位为DATA0
SEVNFRM设置偶数帧
仅对同步IN端点有效。
写此位在EONUM中选择偶数帧。
SNAK设置NAK (Set NAK) 27
写此位会设置端点的NAK状态
通过设置此位,程序能告知控制器发送NAK握手信号。控制器也会在收到SETUP包或OUT端点
传输结束中断时设置此位。
CNAK清除NAK (Clear NAK) 26
写此位会清除端点的NAK状态
TXFNUM发送FIFO的编号 (TxFIFO number) 25:22
此位设置分配给该端点的FIFO编号,每个有效的IN端点都必需分配一个独立的FIFO编号。
此位仅对IN端点有效。
600/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
STALLSTALL握手 (STALL handshake) 21
仅对非控制、非同步IN端点有效(操作类型为rw)
应用程序设置此位,该端点会以STALL来响应所有的主机命令。即使同时设置了NAK位、或
全局IN NAK位、或全局OUT NAK位,STALL位仍有最高优先级。只有应用程序能清除此
位,控制器不能。
仅对控制端点有效(操作类型是rs)
应用程序只能设置此位,控制器会在收到SETUP命令时清除此位。即使同时设置了NAK位、
或全局IN NAK位、或全局OUT NAK位,STALL仍有高优先级。然而控制器将永远用ACK
握手来响应SETUP数据包。
20 保留
EPTYP端点类型 (Endpoint type) 19:18
此位指示端点的传输类型
00:控制;
01:同步;
10:块传输;
11:中断;
NAKSTSNAK状态 (NAK status) 17
指示以下状态:
0:根据FIFO状态,控制器发送非NAK握手;
1:控制器发送NAK握手信号。
只要设置了此位,不管是应用程序设置还是控制器设置:
对于非同步IN端点,控制器都将停止数据传输,而不管发送FIFO中的数据是否有效。
对于同步IN端点,即使发送FIFO中的数据有效,控制器都将发送一个零长度的数据包。
不管此位设置如何,控制器永远发送ACK握手以响应SETUP数据包。
EONUM偶数/奇数帧 (Even/odd frame) 16
仅对同步IN端点有效:
指示该端点进行同步数据收发的帧号。程序必需适用本寄存器中SEVNFRMSODDFRM
的状态来,设置希望收发帧的偶数/奇数帧号。
0:偶数帧;
1:奇数帧。
DPID端点数据PID (Endpoint data PID)
仅对中断/块传输IN端点有效:
此位保存通过此端点来传输的数据包的PID。应用程序必需在使能端点后,配置此位,选
首个发送或接收的数据包的PID。应用程序通过SD0PID寄存器位来配置DATA0DATA1
0DATA0
1DATA1
USBAEPUSB活跃端点 (USB active endpoint) 15
指示在当前配置下,此端点是否为活跃端点。控制器在检测到USB复位后会清除所有端点的此位
(除了端点0),在收到SetConfigurationSetInterface命令后,应用程序必需根据需要设置此位。
14:11 保留
MPSIZ最大包长度 (Maximum packet size) 10:0
应用程序通过此位配置该端点的最大数据包长度
此位的值以字节为单位。
OTG_FS设备控制OUT端点0控制寄存器(OTG_FS_DOEPCTL0)
偏移地址:0xB00
复位值:0x0000 8000
本节描述了设备控制OUT端点0的控制寄存器。非0控制端点使用相应的端点1-15控制寄存器。
601/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EPENA
EPDIS
SNAK
CNAK
STALL
SNPM
NAKSTS
USBAEP
w r w w rs rw r r
保留
保留 保留 MPSIZ
r
保留 EPTYP
r
EPENA端点使能 (Endpoint enable) 31
应用程序设置此位,以启动端点0上的数据传输。
控制器在产生以下端点中断前会先清除此位:
SETUP阶段完成;
端点禁止;
传输完成。
EPDIS端点禁止 (Endpoint disable) 30
应用程序不可以禁止控制OUT端点0
29:28 保留
SNAK设置NAK (Set NAK) 27
写此位会设置端点的NAK状态。
通过设置此位,应用程序能告知控制器发送NAK握手信号。控制器也会在收到SETUP包或传输
结束中断时设置此位。
CNAK清除NAK (Clear NAK) 26
设置此位会清除端点的NAK状态。
25:22 保留
STALLSTALL握手 (STALL handshake) 21
应用程序只能设置此位;当收到一个SETUP命令时,由控制器清除。即使同时设置了NAK位、
或全局OUT NAK位,STALL位仍有高优先级。然而无论此位如何设置,控制器总是以ACK握手
来响应SETUP数据包。
SNPM监听模式 (Snoop mode) 20
设置此位将使端点进入监听模式,在监听模式下,控制器在将数据传送入应用程序缓存区之前将
不会检测OUT包的正确性。
EPTYP端点类型 (Endpoint type) 19:18
由硬件设置为’00’
NAKSTSNAK状态 (NAK status) 17
指示以下状态:
0:根据FIFO状态,控制器发送非NAK握手信号。
1:控制器发送NAK握手信号。
只要设置了此位,不管是应用程序设置还是控制器设置:
控制器都将停止数据传输,而不管接收FIFO中的数据是否有效。不管此位设置如何,控制器
永远发送ACK握手信号响应SETUP数据包。
16 保留
USBAEPUSB活跃端点 (USB active endpoint) 15
总是为’1’,表示控制端点0在任何配置下都是活跃的。
14:2 保留
MPSIZ最大包长度 (Maximum packet size) 1:0
控制OUT端点0的最大数据包长度必须与控制IN端点0的最大数据包长度一致。
0064字节;
0132字节;
1016字节;
118字节。
602/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
OTG_FS设备OUT端点x控制寄存器(OTG_FS_DOEPCTLx)(其中x为端点号,
x=1…3)
偏移地址:0xB00 + (端点号 × 0x20)
复位值:0x0000 0000
应用程序通过此寄存器来控制除了端点0的其他端点的操作特性。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
VNFRM
PID
EPENA
EPDIS
SODDFRM
SDOPID/SE
SNAK
CNAK
STALL
SNPM
NAKSTS
EONUM/D
USBAEP
rsrswwww
rw/rs
rw r r rw
保留
MPSIZ
rw
保留
EPTYP
rw
EPENA端点使能 (Endpoint enable) 31
对于INOUT端点都有效。
应用程序设置此位,以启动端点上的数据传输。
控制器在产生以下端点中断前会先清除此位:
SETUP阶段完成;
端点禁止;
传输完成。
EPDIS端点禁止 (Endpoint disable) 30
应用程序通过设置此位可以立即停止端点上的数据传输,即使传输还未完成。应用程序需要等到
端点禁止中断才能确为此端点已被禁止。控制器在设置端点中断时会清除此位。应用程序只有在
端点已经使能时才能设置此位。
SODDFRM设置奇数帧 (Set odd frame) 29
仅对同步OUT端点有效
设置此位,则在奇偶帧域(EONUM)中选择奇数帧。
SD0PID设置DATA0 PID (Set DATA0 PID) 28
仅对中断/块传输OUT端点有效。
写此位将设置数据PID位为DATA0
SEVNFRM设置偶数帧
仅对同步OUT端点有效。
设置此位,则在奇偶帧域(EONUM)中选择偶数帧。
SNAK设置NAK (Set NAK) 27
写此位会设置端点的NAK状态。
通过设置此位,应用程序能控制控制器发送NAK握手信号。控制器也会在收到SETUP包或OUT
端点传输结束中断时设置此位。
CNAK清除NAK (Clear NAK) 26
写此位会清除端点的NAK状态。
25:22 保留
STALLSTALL握手 (STALL handshake) 21
仅对非控制,非同步OUT端点有效(操作类型为rw)
应用程序设置此位,该端点会以STALL来响应所有来自主机的命令。即使同时设置了NAK
位、或全局IN NAK位、或全局OUT NAK位,STALL位仍有最高优先级。只有应用程序能清
除此位,控制器不能。
仅对控制端点有效(操作类型是rs)
应用程序只能设置此位,控制器会在收到SETUP命令时清除此位。即使同时设置了NAK位、
或全局IN NAK位、或全局OUT NAK位,STALL仍有高优先级。然而控制器将永远用ACK
握手来响应SETUP数据包。
603/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
SNPM监听模式 (Snoop mode) 20
设置此位将使端点进入监听模式。在监听模式下,控制器在将OUT数据包写入应用程序缓存区前
不检查数据的正确性。
EPTYP端点类型 (Endpoint type) 19:18
此位指示端点的传输类型:
00:控制
01:同步
10:块传输
11:中断
NAKSTSNAK状态 (NAK status) 17
指示以下状态:
0:根据FIFO状态,控制器发送非NAK握手信号。
1:控制器发送NAK握手信号。
只要设置了此位,不管是应用程序设置还是控制器设置:
控制器都将停止数据传输,而不管接收FIFO是否能接收数据。
不管此位设置如何,控制器永远发送ACK握手响应SETUP数据包。
EONUM偶数/奇数帧 (Even/odd frame) 16
仅对同步OUT端点有效:
指示该端点进行同步数据收发的帧号。程序必需根据本寄存器中SEVNFRMSODDFRM
的状态来设置偶数/奇数帧号。
0:偶数帧;
1:奇数帧。
DPID端点数据PID (Endpoint data PID)
仅对中断/块传输OUT端点有效:
此位保存通过此端点来传输的数据包的PID。程序必需在使能端点后配置此位,选择首个
送或接收的数据包的PID。应用程序通过SD0PID寄存器位来配置DATA0DATA1
0DATA0
1DATA1
USBAEPUSB活跃端点 (USB active endpoint) 15
指示在当前配置下,此端点是否为活跃端点。控制器在检测到USB复位后会清除所有端点的这一
(除了端点0),在收到SetConfigurationSetInterface命令后,程序必需根据需要设置此位。
14:11 保留
MPSIZ最大包长度 (Maximum packet size) 10:0
应用程序通过此位配置该端点的最大数据包长度
长度数值以字节为单位。
OTG_FS设备端点x中断寄存器(OTG_FS_DIEPINTx)(其中x为端点号,x=0…3)
偏移地址:0x908 + (端点号 × 0x20)
复位值:0x0000 0080
280此寄存器指示相应端点与USBAHB相关的事件状态。具体请参考 。当控制器中断寄存
IN端点中断位(OTG_FS_GINTSTS寄存器的IEPINT)’1’时,程序必需先读设备所有端点中
断寄存器(OTG_FS_DAINT)来获得发生事件的端点号,然后再读相应端点的中断寄存器获得详
细信息。应用程序必需通过清除此位来清除OTG_FS_DAINTOTG_FS_GINTST寄存器的对应
位。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TXFE
INEPNE
ITTXFE
TOC
EPDISD
XFRC
r
rc_w1/rw
rc_w1
rc_w1
rc_w1
rc_w1
保留
保留
保留
604/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
31:8 保留
TXFE发送FIFO (Transmit FIFO empty) 7
当与此端点相对应的发送FIFO为空或者半空时,会产生此中断。控制器AHB配置寄存器的
TxFIFO空级别位(OTG_FS_GAHBCFG寄存器的TXFELVL)将决定发送FIFO在空还是半空状态
时产生中断。
INEPNEIN端点NAK有效 (IN endpoint NAK effective) 6
OTG_FS_DIEPCTLx寄存器的CNAK位将清除IN端点的NAK状态,同时也清除此位。
此中断意味着控制器检测到NAK已经被设置(可以由应用程序设置也可以由控制器设置),这个中
断指示由应用程序设置的NAK位已经生效。
这个中断不能保证已经在USB线上发送了NAK信号。STALL位的优先级高于NAK位。
5 保留
ITTXFE当发送FIFO空时收到IN命令 (IN token received when TxFIFO is empty) 4
仅对于非周期性的IN端点有效。
指示与此端点相关的发送FIFO(周期性/非周期性)为空时,收到了IN的命令。此中断仅在收到IN
令的端点产生。
TOC超时 (Timeout condition) 3
仅对控制IN端点有效。
指示自该端点收到最后一个IN命令以来,控制器监测到了超时状态。
2 保留
EPDISD端点禁止中断 (Endpoint disabled interrupt) 1
此中断指示根据应用程序的请求,此端点已经被禁止。
XFRC传输完成中断 (Transfer completed interrupt) 0
此中断指示该端点上已配置好的传输,无论在AHB方面还是USB方面,都已传输完毕。
OTG_FS设备端点x中断寄存器(OTG_FS_DOEPINTx)(其中x为端点号,x=0…3)
偏移地址:0xB08 + (端点号 × 0x20)
复位值:0x0000 0080
280此寄存器指示相应端点与USBAHB相关的事件状态。具体请参考 。当控制器中断寄存
OUT端点中断位(OTG_FS_GINTSTS寄存器的OEPINT)’1’时,应用程序必需先读设备所
有端点中断寄存器(OTG_FS_DAINT)来获得发生事件的端点号,然后再读相应端点的中断寄存
器获得详细信息。应用程序必需通过清除此位来清除OTG_FS_DAINTOTG_FS_GINTST寄存
器的对应位。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
B2BSTUP
OTEPDIS
STUP
EPDISD
XFRC
rc_w1/rw
rc_w1
rc_w1
rc_w1
rc_w1
保留
保留
保留
保留
31:7 保留
B2BSTUP收到连续的SETUP (Back-to-back SETUP packets received) 6
仅对控制OUT端点有效。
指示该端点收到了超过3个连续的SETUP包。
5 保留
OTEPDIS当端点禁止时收到了OUT命令 (OUT token received when endpoint disabled) 4
仅对控制OUT端点有效。
指示端点禁止时收到了OUT命令,此中断仅在收到OUT命令的端点上产生。
605/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
STUPSETUP阶段完成 (SETUP phase done) 3
仅对控制OUT端点有效。
指示与此控制端点相关的SETUP阶段已经完成,当前传输不会再有更多的连续的SETUP包。产
生此中断后,应用程序可以开始处理收到的SETUP数据包。
2 保留
EPDISD端点禁止中断 (Endpoint disabled interrupt) 1
此中断指示根据应用程序的请求,此端点已经被禁止。
XFRC传输完成中断 (Transfer completed interrupt) 0
此中断指示该端点上已配置好的传输,无论在AHB端还是USB端,都已传输完毕。
OTG_FS设备IN端点0传输长度寄存器(OTG_FS_DIEPTSIZ0)
偏移地址:0x910
复位值:0x0000 0000
应用程序必需在使能端点0之前配置此寄存器。一旦通过设备控制端点0控制寄存器的端点使能
(OTG_FS_DIEPCTL0寄存器的EPENA)使能了端点0,就只有控制器可以修改此寄存器。
当端点使能位被清除之前,应用程序只能读此寄存器。
0端点使用端点1至端点15的寄存器。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
保留 PKTCNT
rw 保留 XFRSIZ
rw
31:21 保留
PKTCNT包数目(Packet count) 20:19
指示在端点0上要传输传输长度数据,所需要的USB数据包的数量。
控制器每从发送FIFO中读出一个数据包(最大长度的数据包和短包),此寄存器的值会自动减1
18:7 保留
XFRSIZ传输长度 (Transfer size) 6:0
指示端点0上要传输的字节数。当传输字节数减为0时,控制器会产生中断并通知应用程序。可以
在每个包结束后,将此寄存器值设置为端点的最大传输长度。
控制器会在从存储区向发送FIFO写数据的时候自动递减此域。
OTG_FS设备OUT端点0传输长度寄存器(OTG_FS_DOEPTSIZ0)
偏移地址:0xB10
复位值:0x0000 0000
应用程序必需在使能端点0前配置好此寄存器。一旦端点0通过设备控制端点0控制寄存器的端
使能位(OTG_FS_DOEPCTL0寄存器的EPENA)使能,就只有控制器能修改此寄存器。控制
器在清除端点使能位之前,应用程序只能读此寄存器。
0的端点使用针对端点1至端点15的寄存器。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PKTCNT
rw
保留 XFRSIZ
rw
保留
STUPCNT
rw
保留
31 保留
STUPCNTSETUP包数目 (SETUP packet count) 30:29
此位指示端点能够接收的连续的SETUP包数目
011个包;
102个包;
113个包。
606/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
28:20 保留
PKTCNT包数目 (Packet count) 19
当一个包被写入接收FIFO后,此位递减,直至减为0
18:7 保留
XFRSIZ传输长度 (Transfer size) 6:0
指示端点0上的传输字节数。控制器在传输长度为0时产生中断并通知应用程序。可以在每个包结
束时,设置此寄存器值为端点的最大传输长度,并在每个数据包结束时产生中断。
控制器在数据包从接收FIFO中写入存储区时会自动递减此域。
OTG_FS设备端点x传输长度寄存器(OTG_FS_DIEPTSIZx)(其中x为端点号,
x=1…3)
偏移地址:0x910 + (端点号 × 0x20)
复位值:0x00000000
应用程序必需在使能端点前配置此寄存器。一旦端点通过设备端点x控制寄存器的端点使能位
(OTG_FS_DIEPCTLx寄存器的EPENA)使能,就只有控制器能修改此寄存器。控制器清除了
端点使能位之前,应用程序只能读此寄存器。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
保留
MCNT
rw/r/rw
PKTCNT
rw
XFRSIZ
rw
31 保留
MCNT帧内包数目 (Multi count) 30:29
对于周期性IN端点,此位指示在USB一个帧期间要传输的数据包数量。控制器根据此位来计算同
IN端点发送的数据PID号。
011个包
102个包
113个包
PKTCNT包数目 (Packet count) 28:19
指示端点上总共要发送的数据包数。
每从发送FIFO中读出一个数据包,自动递减此域。
XFRSIZ:传输长度 18:0
该位指示当前端点的传输长度。控制器会在此位为0时产生中断并通知应用程序。可以配置此寄
存器为端点的最大传输长度,并在每个数据包结束产生中断。
控制器会在每次从存储区向发送FIFO写数据时,自动递减此域。
OTG_FS设备IN端点传输FIFO状态寄存器(OTG-FS_DTXFSTSx)(其中x为端点号,
x=0…3)
偏移地址:0x918 + (端点号 × 0x20)
此寄存器为只读寄存器,保存设备IN端点的发送FIFO的剩余空间信息。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
INEPTFSAV
r
保留
31:16 保留
607/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
608/754
15:0 INEPTFSAVIN端点发送FIFO剩余空间 (IN endpoint TxFIFO space avail)
指示IN端点的发送FIFO的剩余空间信息,寄存器值以32位的字为单位。
0x0:发送FIFO满;
0x1:剩余1个字;
0x02:剩余2个字;
0xn:剩余n个字(其中0 < n < 512)
0x200:剩余512个字;
其他:保留。
OTG_FS设备端点x传输长度寄存器(OTG_FS_DOEPTSIZx)(其中x为端点号,
x=1…3)
偏移地址:0xB10 + (端点号 × 0x20)
复位值:0x0000 0000
应用程序必需在使能端点前,配置此寄存器。一旦端点通过设备端点x控制寄存器的端点使能位
(OTG_FS_DOEPCTLx寄存器的EPENA)使能,就只有控制器能修改此寄存器。当控制器清除
端点使能位之前,应用程序只能读此寄存器。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
XFRSIZ
rw
保留
RXDPID/
STUPCNT
rw/r/rw
PKTCNT
rw
31 保留
RXDPID收到的数据PID (Received data PID) 30-
29 此位仅对同步OUT端点有效。
指示收到的最后一个数据包的数据PID
00DATA0
01DATA2
10DATA1
11MDATA
STUPCNTSETUP包数目 (SETUP packet count)
此位仅对控制OUT端点有效。
指示端点收到的连续的SETUP包的数量:
011个包;
102个包;
113个包。
PKTCNT包数目 (Packet count) 28:19
指示该端点上传输的USB包数目。
控制器在每次从存储区向接收FIFO中写数据包时,自动递减此域。
XFRSIZ传输长度 (Transfer size) 18:0
此位指示该端点要传输的字节数。控制器在此域为0时会产生中断通知应用程序。可以配置此域
为端点的最大传输长度,并在每个数据包结束产生中断。
控制器在每次从接收FIFO向存储区写数据时,自动递减此数值。
26.14.5 OTG_FS电源和时钟门控寄存器(OTG_FS_PCGCCTL)
偏移地址:0xE00
复位值:0x0000 0000
此寄存器在设备模式和主机模式下都有效。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PHYSUSP
GATEHCLK
STPPCLK
rw rw rw
保留 保留
31:5 保留
PHYSUSPPHY挂起 4
指示PHY已经挂起。此位在通过应用程序设置STPPCLK(0)使PHY进入挂起状态时置为’1’
3:2 保留
GATEHCLKHCLK门控 (Gate HCLK) 1
应用程序通过设置此位可以控制HCLK,在USB挂起或会话无效时唤醒逻辑模块。应用程序在
USB唤醒或新的会话发起时清除此位。
STPPCLK停止PHY时钟 (Stop PHY clock) 0
USB挂起、或会话无效、或者设备断开时,应用程序可以通过设置此位来停止PHY的时钟驱
动。当USB唤醒或新的会话发起时,应用程序可以清除此位。
609/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
26.14.6 OTG_FS寄存器映像
下表给出了USB OTG寄存器映像和复位值。
189 OTG_FS模块的寄存器图及其复位值
610/754
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
OTG_FS_GOTGCTL
BSVLD
ASVLD
DBCT
CIDSTS
DHNPEN
HSHNPEN
HNPRQ
HNGSCS
SRQ
SRQSCS
0001 0000 00
OTG_FS_GOTGINT
DBCDNE
ADTOCHG
HNGDET
HNSSCHG
SRSSCHG
SEDET
复位值 0 0 0 0 0 0
OTG_FS_GAHBCFG
PTXFELVL
TXFELVL
GINT
复位值 00 0
OTG_FS_GUSBCFG
CTXPKT
FDMOD
FHMOD
NPTXRWEN
HNPCAP
SRPCAP
0010100 000
OTG_FS_GRSTCTL
AHBIDL
TXFFLSH
RXFFLSH
保留
FCRST
HSRST
CSRST
值 1 00000000000
OTG_FS_GINTSTS
WKUINT
SRQINT
DISCINT
CIDSCHG
PTXFE
HCINT
HPRTINT
IPXFR/INCOMPISOOUT
IISOIXFR
OEPINT
IEPINT
EOPF
ISOODRP
ENUMDNE
USBRST
USBSUSP
ESUSP
BOUTNAKEFF
GINAKEFF
NPTXFE
RXFLVL
SOF
OTGINT
MMIS
CMOD
0000 100 0000 000000 00100000
OTG_FS_GINTMSK
WUIM
SRQIM
DISCINT
CIDSCHGM
PTXFEM
HCIM
PRTIM
IPXFRM/IISOOXFRM
IISOIXFRM
OEPINT
IEPINT
EPMISM
EOPFM
ISOODRPM
ENUMDNEM
USBRST
USBSUSPM
ESUSPM
GONAKEFFM
GINAKEFFM
NPTXFEM
RXFLVLM
SOFM
OTGINT
MMISM
0000 000 00000 000000 0000000
OTG_FS_GRXSTSR
(主机模式)
保留 保留
保留
保留
PKTSTS DPID CHNUMBCNT
018h
保留
保留
保留
010h TXFNUM
保留
014h
保留
保留 保留 保留
004h
000h
008h 保留保留
保留 保留 保留
保留 保留
00Ch TOCALTRDT 保留保留
值 000000000000000000000
OTG_FS_GRXSTSR
(设备模式)
值 0000000000000000000000000
01Ch
FRMNUM
保留 PKTSTS DPID BCNT EPNUM
保留
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
OTG_FS_GRXSTSPR
(主机模式)
值 000000000000000000000
OTG_FS_GRXSTSPR
(设备模式)
值 0000000000000000000000000
OTG_FS_GRXFSIZ
值 0000001000000000
OTG_FS_GNPTXFSIZ
值 00000000000000000000001000000000
OTG_FS_GNPTXSTS
值 0000000000001000000001000000000
OTG_FS_GCCFG
SOFOUTEN
VBUSBSEN
VBUSASEN
PWRDWN
复位值 0 0 0 0
OTG_FS_CID
值 00000000000000000001000000000000
OTG_FS_HPTXFSIZ
值 00000111011010000001000000100100
OTG_FS_DIEPTXF1
值 00000010000000000000010000000000
OTG_FS_DIEPTXF2
值 00000010000000000000010000000000
OTG_FS_DIEPTXF3
值 00000010000000000000010000000000
OTG_FS_DIEPTXF4
值 00000010000000000000010000000000
OTG_FS_HCFG
FSLSS
复位值 000
OTG_FS_HFIR
值 1110101001100000
OTG_FS_HFNUM
值 00000000000000000011111111111111
OTG_FS_HPTXSTS
值 00000000YYYYYYYYYYYYYYYYYYYYYYYY
OTG_FS_HAINT
值 0000000000000000
OTG_FS_HAINTMSK
值 0000000000000000
DPID BCNT EPNUM
保留 PKTSTS
410h PTXQTOP PTXQSAV PTXFSAVL
DPID BCNT
408h FTREM FRNUM
CHNUM
020h
PRMNUM
保留 PKTSTS
400h
FSLSPCS
保留
404h 保留 FRIVL
10Ch INEPTXFD INEPTXSA
110h INEPTXFD INEPTXSA
024h
108h INEPTXFD INEPTXSA
02Ch
038h
保留
NPTXQTOP
028h
104h INEPTXFD INEPTXSA
保留 RXFD
NPTXFD NPTXFSA
NPTQXSAV NPTXFSAV
保留
保留
保留
03Ch PRODUCT_ID
100h PTXFSIZ PTXSA
414h 保留 HAINT
418h 保留 HAINTM
611/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
OTG_FS_HPRT
PPWR
PRST
PSUSP
PRES
POCCHNG
POCA
PENCHNG
PENA
PCDET
PCSTS
000000000 000000000
OTG_FS_HCCHAR0
CHENA
CHDIS
ODDFRM
LSDEV
EPDIR
000000000000000 0000000000000000
OTG_FS_HCCHAR1
CHENA
CHDIS
ODDFRM
LSDEV
EPDIR
000000000000000 0000000000000000
OTG_FS_HCCHAR2
CHENA
CHDIS
ODDFRM
LSDEV
EPDIR
000000000000000 0000000000000000
OTG_FS_HCCHAR3
CHENA
CHDIS
ODDFRM
LSDEV
EPDIR
000000000000000 0000000000000000
OTG_FS_HCCHAR4
CHENA
CHDIS
ODDFRM
LSDEV
EPDIR
000000000000000 0000000000000000
OTG_FS_HCCHAR5
CHENA
CHDIS
ODDFRM
LSDEV
EPDIR
000000000000000 0000000000000000
OTG_FS_HCCHAR6
CHENA
CHDIS
ODDFRM
LSDEV
EPDIR
000000000000000 0000000000000000
OTG_FS_HCCHAR7
CHENA
CHDIS
ODDFRM
LSDEV
EPDIR
000000000000000 0000000000000000
OTG_FS_HCINT0
DTERR
FRMOR
BBERR
TXERR
ACK
NAK
STALL
CHH
XFRC
0000 000 00
OTG_FS_HCINT1
DTERR
FRMOR
BBERR
TXERR
ACK
NAK
STALL
CHH
XFRC
0000 000 00
OTG_FS_HCINT2
DTERR
FRMOR
BBERR
TXERR
ACK
NAK
STALL
CHH
XFRC
0000 000 00
OTG_FS_HCINT3
DTERR
FRMOR
BBERR
TXERR
ACK
NAK
STALL
CHH
XFRC
0000 000 00
OTG_FS_HCINT4
DTERR
FRMOR
BBERR
TXERR
ACK
NAK
STALL
CHH
XFRC
0000 000 00
OTG_FS_HCINT5
DTERR
FRMOR
BBERR
TXERR
ACK
NAK
STALL
CHH
XFRC
0000 000 00
保留
EPNUM MPSIZ
MPSIZ
保留
EPNUM MPSIZ
保留
保留
保留
MPSIZ
MPSIZ
560h DAD
EPTYP
EPNUM
EPNUM
540h
EPTYP
保留保留
520h DAD
DAD
MCNT
MCNT
508h
528h 保留
保留
保留
500h DAD
EPTYP
保留
EPNUM MPSIZ
440h
PLSTS
PTCTLPSPD
保留
580h DAD
EPTYP
保留
EPNUM
MCNT
EPTYP
DAD
EPTYP
5A0h DAD
EPTYP
保留
EPNUM MPSIZ
5E0h DAD
EPTYP
保留
EPNUM MPSIZ
5C0h
保留
548h 保留
保留
保留
568h 保留
保留
保留
588h 保留
保留
保留
5A8h 保留
保留
保留
MCNT
MCNT
MCNT
MCNT
MCNT
612/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
OTG_FS_HCINT6
DTERR
FRMOR
BBERR
TXERR
ACK
NAK
STALL
CHH
XFRC
0000 000 00
OTG_FS_HCINT7
DTERR
FRMOR
BBERR
TXERR
ACK
NAK
STALL
CHH
XFRC
0000 000 00
OTG_FS_HCINTMSK0
DTERRM
FRMORM
BBERRM
TXERRM
NYET
ACKM
NAKM
STALLM
CHHM
XFRCM
00000000 00
OTG_FS_HCINTMSK1
DTERRM
FRMORM
BBERRM
TXERRM
NYET
ACKM
NAKM
STALLM
CHHM
XFRCM
00000000 00
OTG_FS_HCINTMSK2
DTERRM
FRMORM
BBERRM
TXERRM
NYET
ACKM
NAKM
STALLM
CHHM
XFRCM
00000000 00
OTG_FS_HCINTMSK3
DTERRM
FRMORM
BBERRM
TXERRM
NYET
ACKM
NAKM
STALLM
CHHM
XFRCM
00000000 00
OTG_FS_HCINTMSK4
DTERRM
FRMORM
BBERRM
TXERRM
NYET
ACKM
NAKM
STALLM
CHHM
XFRCM
00000000 00
OTG_FS_HCINTMSK5
DTERRM
FRMORM
BBERRM
TXERRM
NYET
ACKM
NAKM
STALLM
CHHM
XFRCM
00000000 00
OTG_FS_HCINTMSK6
DTERRM
FRMORM
BBERRM
TXERRM
NYET
ACKM
NAKM
STALLM
CHHM
XFRCM
00000000 00
OTG_FS_HCINTMSK7
DTERRM
FRMORM
BBERRM
TXERRM
NYET
ACKM
NAKM
STALLM
CHHM
XFRCM
00000000 00
OTG_FS_HCTSIZ0
值 0000000000000000000000000000000
OTG_FS_HCTSIZ1
值 0000000000000000000000000000000
OTG_FS_HCTSIZ2
值 0000000000000000000000000000000
OTG_FS_HCTSIZ3
值 0000000000000000000000000000000
OTG_FS_HCTSIZ4
值 0000000000000000000000000000000
OTG_FS_HCTSIZ5
值 0000000000000000000000000000000
OTG_FS_HCTSIZ6
值 0000000000000000000000000000000
OTG_FS_HCTSIZ7
值 0000000000000000000000000000000
5E8h 保
保留
保留
5C8h 保
保留
保留
58Ch 保
保留
5ACh 保
保留
54Ch 保
保留
56Ch 保
保留
50Ch 保
保留
52Ch 保
保留
5CCh 保
保留
5ECh 保
保留
XFRSIZ
530h
保留
DPID PKTCNT XFRSIZ
510h
保留
DPID PKTCNT
XFRSIZ
570h
保留
DPID PKTCNT XFRSIZ
550h
保留
DPID PKTCNT
XFRSIZ
5B0h
保留
DPID PKTCNT XFRSIZ
590h
保留
DPID PKTCNT
XFRSIZ
5F0h
保留
DPID PKTCNT XFRSIZ
5D0h
保留
DPID PKTCNT
613/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
614/754
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
OTG_FS_DCFG
NZLSOHSK
000000000 000
OTG_FS_DCTL
POPRGDNE
CGONAK
SGONAK
CGINAK
SGINAK
GONSTS
GINSTS
SDIS
RWUSIG
值 000000000000
OTG_FS_DSTS
EERR
SUSPSTS
复位值
00000000000000 0000
OTG_FS_DIEPMSK
BIM
TXFURM
INEPNEM
INEPNMM
ITTXFEMSK
TOM
EPDM
XFRCM
00 0000 00
OTG_FS_DOEPMSK
BOIM
OPEM
B2BSTUP
OTEPDM
STUPM
EPDM
SFRCM
00 0 00 00
OTG_FS_DAINT
值 00000000000000000000000000000000
OTG_FS_DAINTMSK
值 00000000000000000000000000000000
OTG_FS_DVBUSDIS
值 0001011111010111
OTG_FS_DVBUSPULSE
值 010110111000
OTG_FS_DIEPEMPMSK
值 0000000000000000
OTG_FS_DIEPCTL0
EPENA
EPDIS
SNAK
CNAK
STALL
NAKSTS
USBAEP
00 0000000 000 1 00
OTG_FS_DTXFSTS0
复位值
0000001000000000
OTG_FS_DIEPCTL1
EPENA
EPDIS
SODDFRM
SD0PID/SEVNFRM
SNAK
CNAK
STALL
NAKSTS
EONUM/DPID
USBAEP
00000000000 00000 00000000000
OTG_FS_DTXFSTS1
值 0000001000000000
938h 保留 INEPTFSAV
918h 保留 INEPTFSAV
920h TXFNUM
保留
EPTYP
保留 MPSIZ
EPTYP
保留
保留
MPSIZ
900h
保留
TXFNUM
保留
834h INEPTXFEM
保留
828h VBUSDT
保留
82Ch DVBUSP
保留
818h OEPINT IEPINT
81Ch OEPM IEPM
814h
保留
保留
保留
保留
800h
DSPD
保留
DAD
PFIVL
保留
804h
TCTL
保留
808h 保留
FNSOF
保留
ENUMSP
D
810h
保留
保留
保留
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
OTG_FS_DIEPCTL2
EPENA
EPDIS
SODDFRM
SD0PID/SEVNFRM
SNAK
CNAK
STALL
NAKSTS
EONUM/DPID
USBAEP
00000000000 00000 00000000000
OTG_FS_DTXFSTS2
值 0000001000000000
OTG_FS_DIEPCTL3
EPENA
EPDIS
SODDFRM
SD0PID/SEVNFRM
SNAK
CNAK
STALL
NAKSTS
EONUM/DPID
USBAEP
00000000000 00000 00000000000
OTG_FS_DTXFSTS3
值 0000001000000000
OTG_FS_DOEPCTL0
EPENA
EPDIS
SNAK
CNAK
STALL
SNPM
NAKSTS
USBAEP
00 00 00000 1 00
OTG_FS_DOEPCTL1
EPENA
EPDIS
SODDFRM
SD0PID/SEVNFRM
SNAK
CNAK
STALL
SNPM
NAKSTS
EONUM/DPID
USBAEP
值 000000 0000000 00000000000
OTG_FS_DOEPCTL2
EPENA
EPDIS
SODDFRM
SD0PID/SEVNFRM
SNAK
CNAK
STALL
SNPM
NAKSTS
EONUM/DPID
USBAEP
值 000000 0000000 00000000000
OTG_FS_DOEPCTL3
EPENA
EPDIS
SODDFRM
SD0PID/SEVNFRM
SNAK
CNAK
STALL
SNPM
NAKSTS
EONUM/DPID
USBAEP
值 000000 0000000 00000000000
OTG_FS_DIEPINT0
TXFE
INEPNE
ITTXFE
TCC
EPDISD
XFRC
复位值 10 00 00
OTG_FS_DIEPINT1
TXFE
INEPNE
ITTXFE
TCC
EPDISD
XFRC
复位值 10 00 00
OTG_FS_DIEPINT2
TXFE
INEPNE
ITTXFE
TCC
EPDISD
XFRC
复位值 10 00 00
948h 保留
保留
保留
928h 保留
保留
保留
908h 保留
保留
保留
MPSIZ
B60h 保留
EPTYP
保留 MPSIZ
INEPTFSAV
保留
960h TXFNUM
保留
EPTYP
保留 MPSIZ
保留 MPSIZ
978h INEPTFSAV
保留
940h TXFNUM
保留
EPTYP
958h
B40h 保留
EPTYP
保留
保留
保留
MPSIZ
B20h 保留
EPTYP
保留 MPSIZ
B00h
保留
保留
EPTYP
615/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
OTG_FS_DIEPINT3
TXFE
INEPNE
ITTXFE
TCC
EPDISD
XFRC
复位值 10 00 00
OTG_FS_DOEPINT0
B2BSTUP
OTEPDIS
STUP
EPDISD
XFRC
复位值 00000
OTG_FS_DOEPINT1
B2BSTUP
OTEPDIS
STUP
EPDISD
XFRC
复位值 00000
OTG_FS_DOEPINT2
B2BSTUP
OTEPDIS
STUP
EPDISD
XFRC
复位值 00000
OTG_FS_DOEPINT3
B2BSTUP
OTEPDIS
STUP
EPDISD
XFRC
复位值 00000
OTG_FS_DIEPTSIZ0
00 0000000
OTG_FS_DIEPTSIZ1
值 0000000000000000000000000000000
OTG_FS_DIEPTSIZ2
值 0000000000000000000000000000000
OTG_FS_DIEPTSIZ3
值 0000000000000000000000000000000
OTG_FS_DOEPTSIZ0
PKTCNT
值 00 0 0000000
OTG_FS_DOEPTSIZ1
值 0000000000000000000000000000000
OTG_FS_DOEPTSIZ2
值 0000000000000000000000000000000
OTG_FS_DOEPTSIZ3
值 0000000000000000000000000000000
OTG_FS_PCGCCTL
PHYSUSP
GATEHCLK
STPPCLK
复位值
E00h 留 保留
XFRSIZ
B70h
保留
RXDPID/
STUPCNT
PKTCNT XFRSIZ
B50h
保留
RXDPID/
STUPCNT
PKTCNT
保留 XFRSIZ
B30h
保留
RXDPID/
STUPCNT
PKTCNT XFRSIZ
968h 保
保留
保留
910h 保留
PKTC
NT 保留
B28h 保
B08h 保
XFRSIZ
930h
保留
MCNT PKTCNT XFRSIZ
保留
保留
保留
保留
保留
保留
保留
B68h 保
保留
保留
保留
B48h 保
保留
保留
950h
保留
MCNT PKTCNT XFRSIZ
970h
保留
MCNT PKTCNT XFRSIZ
B10h
保留
STUPCNT
保留
请参考表1,获得这些寄存器的基地址。
616/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
26.15 OTG_FS编程规则
26.15.1 控制器初始化
应用程序必须按照顺序初始化控制器。如果在上电期间,USB电缆已经连上,控制器中断寄存
器的当前操作模式位(OTG_FS_GINTSTSCMOD)将指出当前的工作模式。当A类插头插入
时,OTG_FS控制器工作在主机模式下,当B类插头插入时,控制器工作在设备模式下。
本节介绍上电后OTG_FS控制器的初始化。无论在主机模式或是在设备模式下工作,应用程序
都必须按照顺序初始化控制器。所有的控制器全局寄存器都必须按照控制器的配置来进行初始
化:
1. 配置AHB全局配置寄存器(OTG_FS_GAHBCFG)的如下位:
全局的中断屏蔽位GINT 1
接收FIFO非空位(OTG_FS_GINTSTS寄存器的RXFLVL)
周期性的发送FIFO空级别
2. 配置OTG_FS_GUSBCFG寄存器的如下位:
HNP使能位
SRP使能位
FS超时校准位
USB反射时间位
3. 应用程序不能屏蔽GINTMSK寄存器的如下位:
OTG中断屏蔽位
模式不匹配中断屏蔽位
4. 应用程序通过读取OTG_FS_GINTSTS寄存器的CMOD位来判断当前OTF_FS控制器处于
主机模式还是处于设备模式。
26.15.2 主机模式下的初始化
在主机模式下,应用程序需遵循如下步骤来配置控制器:
1. GINTMSK寄存器的HPRTINT位配置为’1’,使能该中断。
2. 配置OTG_FS_HCFG寄存器,选择工作在全速的主机模式下。
3. 配置OTG_FS_HPRT寄存器的PPWR位为’1’,使能USB线上的VBUS供电。
4. 等待OTG_FS_HPRT0寄存器的PCDET中断,该中断表示有USB设备接到端口。
5. 配置OTG_FS_HPRT寄存器的PRST位为’1’,对设备发起复位操作。
6. 等待最少10ms,保证复位操作完成。
7. 配置OTG_FS_HPRT寄存器的PRST位为’0’
8. 等待OTG_FS_HPRT寄存器的PENCHNG位中断。
9. 读取OTG_FS_HPRT寄存器的PSPD位,该位指示设备使用全速还是低速进行枚举。
10. 根据已选择的PHY时钟1来配置HFIR寄存器。
11. 配置OTG_FS_RXFSIZE寄存器,选择接收FIFO的长度。
12. 配置OTG_FS_NPTXFSIZE寄存器,选择非周期性发送FIFO的长度和起始地址。
13. 配置OTG_FS_HPTXFSIZ寄存器,选择周期性发送FIFO的长度和起始地址。
为了和设备通讯,应用程序必须使能并初始化至少一个通道。
26.15.3 设备模式下的初始化
应用程序必须在上电或者从主机模式切换到设备模式时,遵循如下步骤来初始化控制器,使之
工作于设备模式下:
1. 配置OTG_FS_DCFG寄存器的如下位:
设备速度
对非长度的OUT包的响应状态
617/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
2. 配置OTG_FS_GINTMSK寄存器,使能以下中断:
USB复位
枚举完成
USB早期挂起
USB挂起
SOF
3. B类设备模式下,配置OTG_FS_GCCFG寄存器的VBUSBSEN位使能VBUS,使DP线上
拉到5V
4. 等待OTG_FS_GINTSTS寄存器的USBRST位,指示在USB线上检测到了持续大约10ms
的复位信号。
等待OTG_FS_GINTSTS寄存器的ENUMDNE位,它表示USB复位操作的结束。在接收到此中
断后,应用程序必须读OTG_FS_DSTS寄存器,获得枚举速度的信息,并按照枚举完成后的
端点初始化小节实现初始化。
此时,设备已准备好接收SOF数据包,并通过端点0实现控制传输。
26.15.4 主机模式下的编程规则
通道初始化
在主机与所连接的设备通讯之前,应用程序需要初始化一个或多个通道。可通过如下步骤初始
化并使能通道:
1. 配置GINTMSK寄存器,使能以下中断:
2. 通道中断
对于OUT传输的非周期性发送FIFO(适用于从模式,即配置运行在传输级的流水线
上的包数超过1)
对于OUT传输的非周期性发送FIFO半空(适用于从模式,即配置运行在传输级的流水
线上的包数超过1)
3. 配置OTG_FS_HAINTMSK寄存器,使能选中通道的中断。
4. 配置选中通道的OTG_FS_HCINTMSK寄存器,使能在主机通道中断寄存器中与传输相关
的中断。
5. 配置选中通道的OTG_FS_HCTSIZx寄存器,以字节为单位设置总传输长度,和期望接收
到的数据包数,包括短数据包。需要根据初始的数据PID号来设置寄存器的PID(将用于
首个传输的OUT包的数据PID号和期望首个接收的IN包的数据PID)
6. 配置选中通道的OTG_FS_HCCHARx寄存器,设置设备端点的特性,例如传输类型、速
度、方向等。(仅在应用程序准备好传输或接收数据包时,才需要设置通道使能位为’1’
使能通道。)
中止通道
应用程序可以通过设置OTG_FS_HCCHARx寄存器的CHDISCHENA位为’1’来中止任何一个
通道。这个操作将使OTG_FS主机控制器清除已递交的传输请求(如果存在的话),并产生一个通
道中止中断。应用程序需要在重新分配此通道用于其他通讯前,等待OTG_FS_HCINTx寄存器
CHH位为’1’(指示此通道已中止)OTG_FS的主机控制器不能打断已经开始的USB总线上的
传输。
在中止通道前,应用程序需要确认在非周期性请求队列(中止的是非周期性通道时)、或周期性请
求队列(中止的是周期性通道时)中至少有一个剩余空间。在请求队列已满时(执行通道中止操作
),可以通过写OTG_FS_HCCHARx寄存器的CHDIS位为’1’并等待CHENA位变为’0’,来清除
已递交的传输请求。
应用程序需要在以下情况中止通道:
1. 在一个非周期性的IN传输或者高带宽的中断IN传输时(仅在从模式下),检测到
OTG_FS_HCINTx寄存器的XFRC位为’1’
618/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
2. 在任意IN或者OUT通道(仅在从模式下)OTG_FS_HCINTx寄存器中产生了STALL
TXERRBBERRDTERR事件。对于高带宽的中断IN传输(仅在从模式下),一旦应用程
序检测到了DTERR事件,就必须中止该通道并等待该通道已成功中止的事件。在收到该
通道已成功中止的信息前,应用程序需要能接收该通道的其他事件(DTERRNAK
DATATXERR)
3. OTG_FS_GINTSTS寄存器的DISCINT’1’(指示设备已断开),应用程序需要中止所
有已使能的通道。
4. 当应用程序需要在传输正常结束前中止传输。
操作模式
应用程序需要在与所连接的设备通讯前初始化一个通道,本节介绍了针对不同的USB传输类型
所进行的操作。
写入发送FIFO
OTG_FS主机模式控制器会在程序按照DWORD方式写数据包时,自动地向周期性/非周期
性请求队列中写入请求(OUT请求),因此在写入发送FIFO之前,必须确保周期性/非周期性
请求队列中至少有一个空余位置。应用程序只能以DWORD方式来写入发送FIFO,如果
要写的数据包不是DWORD对齐的,需要补齐剩余字节。OTG_FS主机模式控制器会按照
配置好的最大数据包长度和实际传输长度来决定实际发送的数据包长度。
282FIFO写任务
619/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
读取接收FIFO
只有在收到IN的数据包时(0x0010)应用程序才需要读取接收FIFO
283FIFO读出任务
块传输和控制传输的OUT/SETUP
下图给出了典型的块传输或控制传输的OUT/SETUP的操作流程。详见通道1(ch_1)2个块传输
OUT包需要发送,1个控制传输的SETUP包传输也需要处理。
假设:
应用程序需要发送2个最大包长度的数据包(传输长度为1024字节)
非周期性的发送FIFO已保存了2个数据包(对于全速传输有128K字节)
非周期性的请求队列深度为4
普通块传输和控制传输的OUT/SETUP处理流程
下图(使用通道1)所描述的处理流程如下:
a) 初始化通道1
b) 写通道1的第一个包。
c) 随着最后一个DWORD数据的写入,控制器向非周期性请求队列写入一个请求。
d) 当非周期性请求队列非空时,控制器在当前帧内发送一个OUT令牌。
e) 将第二个数据包(最后一个)写入通道1
f) 在前一个传输正常结束时,控制器产生一个XFRC中断。
g) 收到XFRC事件,重新安排通道为其他传输服务。
h) 控制非ACK响应。
620/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
284 普通的块(Bulk)/控制(Control)OUT/SETUP和块/控制的IN传输过程
下面针对从模式下块传输和控制传输的OUT/SETUP流程,列出了与通道相关的中断处理程序代
码例程。
块和控制OUT/SETUP传输与块和控制IN传输的中断处理流程
a) 块和控制OUT/SETUP传输
使能(NAK/TXERR/STALL/XFRC)中断
if (XFRC)
{
清除错误计数
屏蔽ACK中断
解除通道分配
}
else if (STALL)
{
传输完成 = 1
使能CHH中断
621/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
中止通道
}
else if (NAK TXERR )
{
重置缓冲区指针
使能CHH中断
中止通道
if (TXERR)
{
增加错误计数
使能ACK中断
}
else
{
清除错误计数
}
}
else if (CHH)
{
屏蔽CHH中断
if (传输完成 (错误计数 == 3))
{
解除通道分配
}
else
{
重新初始化通道
}
}
else if (ACK)
{
清除错误计数
屏蔽ACK中断
}
应用程序必须在发送FIFO和请求队列有空余空间时才能向发送FIFO写数据包。可以通过
OTG_FS_GINTSTS寄存器的NPTXFE位来检测发送FIFO是否有空余空间。
b) 块和控制的IN传输
使能(TXERR/XFRC/BBERR/STALL/DTERR)中断
if (XFRC)
{
复位错误计数
使能CHH中断
中止通道
屏蔽ACK
}
else if (TXERR BBERR STALL)
{
使能CHH中断
中止通道
if (TXERR)
{
增加错误计数
使能ACK中断
}
}
else if (CHH)
{
屏蔽CHH
if (传输完成 (错误计数 == 3))
622/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
{
重新分配通道
}
else
{
重新初始化通道
}
}
else if (ACK)
{
复位错误计数器
屏蔽ACK
}
else if (DTERR)
{
复位错误计数器
}
应用程序必须等到XFRC事件发生后,才能在请求队列有剩余空间时写入请求。
/控制的IN传输
典型的块(BULK)和控制IN传输的操作流程如下图所示;见通道2
做如下假设:
应用程序需要接收2个最大包长度的数据包(传输长度为1024字节)
接收FIFO可以保存至少1个最大包长度的数据包和针对每个数据包的2DWORD
型状态。(对于全速通信来说是72个字节)
非周期性请求队列深度为4
623/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
285(Bulk)/控制(Control)IN传输过程
操作流程如下:
a) 初始化通道2
b) 设置HCCHAR2寄存器的CHENA位,向非周期性请求队列写入一个IN请求。
c) 控制器在完成当前OUT传输后尝试发送IN令牌。
d) 在接收到的数据写入接收FIFO后,控制器产生RXFLVL中断。
e) RXFLVL中断处理程序中,需要先屏蔽RXFLVL中断,读取接收到的状态判定接收到的
字节数,并从接收FIFO中读取相应数据。完成以上操作后再打开RXFLVL中断。
f) 控制器在传输完成的状态存入接收FIFO后产生RXFLVL中断。
g) 应用程序读取接收到的数据包状态,如果它不是一个IN的数据包(GRXSTSR寄存器的
PKTSTS0x0010),则不理它。
h) 控制器在接收到的数据包状态被读出后产生XFRC中断。
624/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
i) XFRC中断处理程序中,需要配置OTG_FS_HCCHAR2寄存器来中止通道,并停止写入
更多的请求。控制器会在OTG_FS_HCCHAR2寄存器被设置完后向非周期性请求队列写
入通道中止请求。
j) 控制器将在中止状态写入接收FIFO后产生RXFLVL中断。
k) 读出该包状态,但不处理它。
l) 控制器将在中止信息从接收FIFO中读出后产生CHH中断。
m) CHH中断处理程序中,应用程序可以重新分配该通道为其他传输服务。
n) 控制非ACK响应。
从模式下的控制传输
Setup、数据和状态是控制传输的3个阶段,必须按照3个独立的传输来对待。Setup、数据OUT
和状态OUT传输的处理流程类似于前面介绍的块OUT传输。数据IN和状态IN传输的处理流程类
似于前面介绍的块IN传输。在这3个阶段中,应用程序都需要设置OTG_FS_HCCHAR1寄存器
EPTYP位,表明传输类型为控制传输。在Setup阶段,应用程序需要设置OTG_FS_HCTSIZ1
寄存器的DPID位,表明为SETUP包。
中断OUT传输
典型的中断OUT传输的操作流程如下图所示。
做如下假设:
应用程序从奇数帧开始在每个帧中都发送一个最大数据包长度的包(发送长度为1024
字节)
周期性的FIFO中能储存1个包(1024字节)
周期性的请求队列深度为4
操作流程如下:
a) 初始化通道1,同时应用程序需要配置OTG_FS_HCCHAR1寄存器的ODDFRM位,指明
从奇数帧开始发送。
b) 将第一个要传输的包写入通道1。对于高带宽的中断传输,应用程序需要在切换到其他通
道前,先将后续需要传输的包写入通道,包数由MCNT)在下一帧时需要传输的包数)
定。
c) 在写完每个包的最后一个DWORD时,控制器会将请求写入周期性请求队列。
d) 在下一个奇数帧时,控制器会发送一个OUT令牌。
e) 在最后一个包正常传输完毕后,控制器会产生XFRC中断。
f) XFRC中断处理程序中,应用程序可以重新初始化通道,以便通道为其他传输所用。
625/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
286 普通的中断(Interrupt)OUT/IN传输过程
针对中断OUT/IN传输的中断服务程序
a) 中断OUT
使能(NAK/TXERR/STALL/XFRC/FRMOR)中断
if (XFRC)
{
复位错误计数
屏蔽ACK中断
重新分配通道
}
else if(STALL FRMOR)
{
屏蔽ACK中断
使能CHH中断
中止通道
if (STALL)
{
626/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
传输完成 1
}
}
else if (NAK TXERR)
{
重置缓存区指针
复位错误计数
屏蔽ACK中断
使能CHH中断
中止通道
}
else if (CHH)
{
屏蔽CHH中断
if (传输完成 (错误计数 == 3))
{
重新分配通道
}
else
{
重新初始化通道(为下一个b_interval 1的帧)
}
}
else if (ACK)
{
复位错误计数
屏蔽ACK中断
}
应用程序需要在切换到其他通道之前,先根据MCNT位指定的数据包数,把数据包和请求写入
发送FIFO和请求队列,此时发送FIFO必须有剩余空间,可以通过OTG_FS_GINTSTS寄存器的
PTXFE位来获得发送FIFO是否有剩余空间的信息。
b) 中断IN
使能(NAK/TXERR/XFRC/BBERR/STALL/FRMOR/DTERR)
if (XFRC)
{
复位错误计数
屏蔽ACK
if (OTG_FS_HCTSIZx.PKTCNT == 0)
{
重新分配通道
}
else
{
传输完成 1
使能CHH
中止通道
}
}
else if (STALL FRMOR NAK DTERR BBERR)
{
屏蔽ACK
使能CHH
中止通道
if (STALL BBERR)
{
复位错误计数器
传输完成 1
}
627/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
else if (FRMOR)
{
复位错误计数
}
}
else if (TXERR)
{
增加错误计数
使能ACK
使能CHH
中止通道
}
else if (CHH)
{
屏蔽CHH
if (传输完成 (错误计数 == 3))
{
重新分配通道
}
else
{
重新初始化通道(为下一个b_interval -1)
}
}
else if(ACK)
{
复位错误计数
屏蔽ACK
}
应用程序需要在切换到其他通道前,向有剩余空间的请求队列写入请求,直到写入的请求数达
到在MCNT位指定的数目。
中断IN传输
假设:
程序需要从奇数帧开始每个帧接收一个最大数据包长度的包(传输长度为1024字节)
接收FIFO可以保存指示1个最大数据包长度的包和2DWORD类型的状态字(1031
字节)
周期性请求队列深度为4
普通的中断IN操作
操作流程如下:
a) 初始化通道2,程序需要写OTG_FS_HCCHAR2寄存器的ODDFRM位,指定奇数帧。
b) 设置OTG_FS_HCCHAR2寄存器的CHENA位,控制器会向周期性请求队列写入IN请求。
对于高带宽的中断传输,程序需要在切换到其他通道前写OTG_FS_HCCHAR2寄存器的
MCNT(指定在下一个帧期间需要接收的包数目)
c) 每次程序设置OTG_FS_HCCHAR2寄存器CHENA位时,控制器都会向周期性请求队列写
入一个IN请求。
d) 在下一个奇数帧时,控制器会发送一个IN令牌。
e) 控制器收到IN的数据包并写入RX FIFO后,会产生RXFLVL中断。
f) RXFLVL中断处理程序中,应用程序读取接收到的包状态,得知收到的字节数目,并相
应地读取接收FIFO。在读接收FIFO前,需要屏蔽RXFLVF中断,并在读完完整的包后使
RXFLVL中断。
g) 控制器在传输完成状态存入接收FIFO后,产生RXFLVL中断。程序需要读取这个包状态,
并且在状态表示非IN的数据包时(GRXSTSR寄存器的PKTSTS0x0010)丢弃这个包。
h) 在读取接收到的包状态后,控制器会产生XFRC中断。
628/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
i) XFRC中断处理程序中,应用程序读取OTG_FS_HCTSIZ2寄存器的PKTCNT位,如果
该位不为0,中止通道,然后重新初始化通道,准备下一次的传输。如果PKTCNT位为0
重新初始化通道,准备下一次的传输。此时应用程序需要复位OTG_FS_HCCHAR2寄存
器的ODDFRM位。
同步OUT传输
典型的从模式下的同步OUT传输的流程图如下图所示。
假设:
程序需要从奇数帧开始每个帧发送一个最大数据包长度的包(发送长度为1024字节)
周期性发送FIFO能储存1个最大数据包长度的包(1024字节)
周期性请求队列深度为4
操作流程如下:
a) 初始化并使能通道1,程序需要设置OTG_FS_HCCHAR1寄存器的ODDFRM位。
b) 将第一个要发送的包写入通道1。对于高带宽的同步传输,应用程序需要在切换到其他通
道前根据MCNT(下一个帧时间内需要发送的最大包数)将后续要发送的数据包都写入通
道。
c) 在每个包的最后一个DWORD数据写完后,控制器会写一个请求到周期性的请求队列中。
d) 控制器会在下一个奇数帧时发送OUT令牌。
e) 当最后一个包正确传输完毕后,控制器会产生XFRC中断。
f) XFRC中断处理程序中,需要重新初始化通道为下一次传输做准备。
g) 控制非ACK响应。
629/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
287 普通的同步(Isochronous)OUT/IN传输过程
同步OUT/IN传输的中断处理程序
代码例子:同步OUT
使能(FRMOR/XFRC)
if (XFRC)
{
重新分配通道
}
else if(FRMOR)
{
使能CHH
中止通道
}
else if(CHH)
{
屏蔽CHH
重新分配通道
630/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
}
代码例子:同步IN
使能(TXERR/XFRC/FRMOR/BBERR)
if (XFRC FRMOR)
{
if (XFRC 并且 OTG_FS_HCTSIZx.PKTCNT==0)
{
复位错误计数
重新分配通道
}
else
{
使能CHH
中止通道
}
}
else if(TXERR BBERR)
{
增加错误计数
使能CHH
中止通道
}
else if(CHH)
{
屏蔽CHH
if (传输完成 (错误计数 == 3))
{
重新分配通道
}
else
{
重新初始化通道
}
}
同步IN传输
假设:
程序从奇数帧起,每个帧都需要接收一个最大数据长度的包(传输长度为1024字节)
接收FIFO至少可以储存一个最大数据长度的包和针对每个包的两个DWORD类型的
状态字(1031字节)
周期性请求队列深度为4
操作流程如下:
a) 初始化通道2,应用程序需要设置OTG_FS_HCCHAR2寄存器ODDFRM位。
b) 设置OTG_FS_HCCHAR2寄存器的CHENA位,控制器会将IN请求写入周期性请求队列。
对于高带宽的同步传输,应用程序需要在切换到其他通道前写OTG_FS_HCCHAR2寄存
器的MCNT(下一个帧时间内需要接收的最大包数)
c) 每次设置OTG_FS_HCCHAR2寄存器的CHENA位,控制器都会写一个IN请求到周期性请
求队列。
d) 控制器会在下一个奇数帧时发送IN令牌。
e) 当控制器收到IN包并写入接收FIFO后,会产生RXFLVL中断。
f) RXFLVL中断处理程序中,读取收到的数据包状态,并判定需要接收的字节数,然后读
取接收FIFO。应用程序需要在读取接收FIFO前屏蔽RXFLVL中断,并在读完后使能。
g) 在控制器将传输完成的状态信息写入接收FIFO后,会产生RXFLVL中断。此时应用程序需
要读取状态,并在判定不是IN数据包(OTG_FS_GRXSTSR寄存器的PKTST0x0010)
丢弃这个包。
h) 控制器会在读取接收到的包状态后产生XFRC中断。
631/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
i) XFRC中断处理程序中,应用程序需要读取OTG_FS_HCTSIZ2寄存器的PKTCNT位。
如果PKTCNT位不为0,应用程序需要中止通道,并重新初始化通道,为下一次传输做准
备。如果PKTCNT0,则重新初始化通道为下一次传输做准备。此时应用程序需要复位
OTG_FS_HCCHAR2寄存器的ODDFRM位。
设置队列深度
需要小心选择周期性和非周期性请求队列的深度,使之与周期性/非周期性的端点数相匹配。
非周期性请求队列的深度仅影响非周期性的传输效率。请求队列越深(配合足够的FIFO空间)
控制器能流水线式的操作越多的非周期性传输。如果请求队列较少,控制器只有在请求队列有
剩余空间时才能写入一个新的请求。
周期性请求队列的深度将对周期性传输的调度有较大的影响。一定要按照每个微帧时间内要周
期性传输的包数来决定周期性请求队列的深度。在从模式下,应用程序还需要考虑到那些必须
写入请求队列的无效请求。因此,如果有2个非高带宽的周期性端点,周期性请求队列的深度至
少是4。如果至少支持一个高带宽的周期性端点,请求队列深度必须是8。如果周期性请求队列
的深度小于每个微帧时间内需要周期性传输的包数,就会发生帧溢出。
管理混乱现象
OTG_FS控制器管理两类混乱现象:包混乱和端口混乱。
设备发送的数据超过主机通道支持的最大数据包长度时会发生包混乱。主机在EOF2(第二类帧
结束信号,非常接近于帧首信号)时还不停的收到设备发送的数据时会发生端口混乱。
OTG_FS控制器检测到包混乱时,将停止往接收缓存区中写数据,并等待包结束信号(EOP)
当检测到EOP后,控制器将清除已写入缓存区的数据,并产生一个混乱中断通知应用程序。
OTG_FS控制器检测到端口混乱时,将清除接收FIFO并中止端口,同时产生端口无效中断
(OTG_FS_CINTSTS寄存器的HPRTINT位和OTG_FS_HPRT寄存器的PENCHNG)。应用程
序在处理该中断时,需要先读OTG_FS_HPRT寄存器的POCA位,来排除是由于端口过流造成
的无效(这是产生端口无效中断的另一个源),然后再执行一个软件复位操作。在检测到一个端
混乱事件后,控制器不能再发送任何令牌。
26.15.5 设备模式下的编程规则
USB复位时的端点初始化
1. 将所有OUT端点都设为NAK状态。
设置OTG_FS_DOEPCTLx(所有的OUT端点)寄存器的SNAK位为1
2. 使能以下中断位:
设置OTG_FS_DAINTMSK寄存器的INEP0位为1(控制IN端点0)
设置OTG_FS_DAINTMSK寄存器的OUTEP0位为1(控制OUT端点0)
设置DOEPMSK寄存器的STUP位为1
设置DOEPMSK寄存器的XFRC位为1
设置DIEPMSK寄存器的XFRC位为1
设置DIEPMSK寄存器的TOC位为1
3. 为每个FIFO分配RAM空间
设置OTG_FS_GRXFSIZ寄存器,用以接收控制传输的OUT数据和SETUP数据。所
分配RAM的最小值应该是控制端点01个最大数据包的长度+2DWORD空间(用于
控制传输的OUT数据包的状态信息)+10DWORD空间(用于SETUP)
配置OTG_FS_GNPTXFSIZ寄存器(根据所选用的FIFO编号),用于发送控制传输的IN
数据。所分配RAM的最小值应为控制端点01个最大数据包长度。
4. 设置与端点相关的寄存器的以下位,用于控制OUT端点0接收SETUP数据包。
设置OTG_FS_DOEPTSIZ0寄存器的STUPCNT3(用于接收3个连续的SETUP数据
)
此时,初始化完成,可以开始接收SETUP数据包。
632/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
枚举完成后的端点初始化
1. 在枚举完成中断(OTG_FS_GINTSTS寄存器的ENUMDNE)中,读取OTG_FS_DSTS
存器,获得枚举速度的信息。
2. 配置OTG_FS_DIEPCTL0寄存器的MPSIZ位,设置最大的包长度。这个步骤配置的是控
制端点0。对于控制端点,最大的包长度取决于枚举速度。
此时,设备已经准备好接收SOF包了,并且能执行端点0上的控制传输。
SetAddress时的端点配置
应用程序在收到SETUP包中的SetAddress命令后所要进行的操作:
1. 用包含在SetAddress命令中的设备地址信息来配置OTG_FS_DCFG寄存器。
2. 配置控制器,使之发出状态IN包。
SetConfiguration / SetInterface命令时的端点配置
应用程序在收到SETUP包中的SetConfigurationSetInterface命令后要进行的操作:
1. 在收到SetConfiguration命令时,需要按照新的配置中定义的属性来配置端点寄存器。
2. 在收到SetInterface命令时,要配置该命令所涉及到的端点寄存器。
3. 部分端点可能仅在先前的设置中有效,在新的配置或设置中可能已经失效,这些已失效的
端点需要重新配置为无效。
4. 设置OTG_FS_DAINTMSK寄存器,使能每个有效端点的中断,屏蔽所有无效端点的中
断。
5. 为每个FIFO分配RAM空间。
6. 在配置完所有的端点后,应用程序需要使控制器发送一个状态IN包。
此时,设备模式下的控制器已准备好发送或接收数据包了。
端点激活
激活一个端点或者将一个已存在的端点配置成新类型的步骤:
1. 配置OTG_FS_DIEPCTLx寄存器(对于IN或者双向端点)或者OTG_FS_DOEPCTLx寄存器
(对于OUT或者双向端点)的以下位:
最大包长度
USB有效端点位=1
端点起始的数据翻转号(对于中断和块传输类型的端点)
端点的类型
发送FIFO
2. 一旦端点被激活,控制器将解析发送到该端点的令牌,并对于有效的令牌发送有效的握手
包。
端点无效
使一个已存在的端点失效的操作:
1. 清除OTG_FS_DIEPCTLx寄存器(对于IN或者双向端点)或者OTG_FS_DOEPCTLx寄存器
(对于OUT或者双向端点)USB有效端点位。
2. 一旦端点失效,控制器将会忽略发向该端点的令牌,这将导致USB超时。
注意:
应用程序需要进行以下的配置,以便设备模式下的控制器来控制通信:
GINTMSK
寄存器的
NPTXFEM
RXFLVLM
位必须清
’0’
26.15.6 操作流程
SETUPOUT数据传输
本节描述了OUT数据传输和SETUP传输的内部数据流及应用程序的操作流程。
读操作
在从模式下从接收FIFO中读一个包(OUTSETUP)的步骤如下:
633/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
1. RXFLVL中断处理程序中,需要读取接收状态弹出寄存器(OTG_FS_GRXSTSP)
2. 在从接收FIFO中读出数据包期间,写入RXFLVL=0(OTG_FS_GINTSTS寄存器)来屏蔽
RXFLVL中断。
3. 如果接收到的包的字节数不为0,则相应的数据将从数据FIFO中弹出,并储存到内存中,
如果收到的包的字节数为0,则没有数据从数据FIFO中弹出。
4. 从接收FIFO中读出的包状态为以下几种模式之一:
a) 全局的OUT NAK模式:
PKTSTS = 全局的OUT NAKBCNT0x000 EPNUM =不关心(0x0)DPID=不关心
(0x0)
这样的数据表示有一个全局的OUT NAK
b) SETUP包模式:
PKTSTSSETUPBCNT0x008EPNUM=控制端点号,DPIDD0
这样的数据表示针对指定端点的SETUP包已有效,可以从接收FIFO中读取。
c) SETUP阶段已完成模式:
PKTSTSSETUP阶段已完成,BCNT0EPNUM=控制端点号,DPID=不关心
(0x0)
这样的数据表示一个针对指定端点的SETUP阶段已完成,并已经开始数据阶段。在这个
信息从接收FIFO中弹出后,控制器将产生一个指定的控制OUT端点的SETUP中断。
d) 数据OUT包模式:
PKTSTS=数据OUTBCNT=接收到的OUT数据包长度(0BCNT1024)EPNUM=接
收到包的端点号,DPID=实际的数据PID
e) 数据阶段已完成模式:
PKTSTS=数据OUT阶段已完成,BCNT0x0EPNUMOUT端点数据传输的端点号,
DPID=不关心(0x0)
这样的数据表示一个针对指定OUT端点的OUT数据阶段已完成。在这个信息从接收FIFO
中弹出后,控制器将会产生一个针对指定OUT端点的传输完成中断。
5. 在读出接收FIFO中的数据后,需要再次打开RXFLVL中断(OTG_FS_GINTSTS)
6. 在每次检测到一个RXFLVL(OTG_FS_GINTSTS)中断后,都需要重复以上五个步骤。读
一个空的接收FIFO会导致未定义的后果。
下图是以上流程的流程图
634/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
288 在从模式下读出接收FIFO的数据报文
SETUP传输
本节描述了控制器如何控制一个SETUP的包,以及应用程序处理SETUP传输的过程。
对应用程序的要求
1. 为了接收一个SETUP包,控制OUT端点的STUPCNT(OTG_FS_DOEPTSIZx寄存器中)
必须被配置为一个非0值。当应用程序配置STUPCNT位为非0时,控制器将接收SETUP
包,并将其写入接收FIFO中,此操作与OTG_FS_DOEPCTLx寄存器的NAKSTS
EPENA位的设置无关。每当控制端点收到一个SETUP包,STUPCNT位的值都会自减1
如果在接收SETUP包之前,没有设置一个合适的STUPCNT值,控制器仍将接收SETUP
包,并自减STUPCNT位,但应用程序就不能知道在控制传输的SETUP阶段到底接收了多
少个正确的SETUP包。
设置OTG_FS_DOEPTSIZx寄存器的STUPCNT位=3
2. 程序需要为接收FIFO分配一些额外的空间,以便接收最多3SETUP包。
需要分配的空间是10DWORD。其中3DWORD空间用于第一个SETUP包,1
DWORD空间用于SETUP阶段完成信息,另6DWORD空间用于储存控制端点的另
两个额外的SETUP包。
一个SETUP包需要3DWORD空间,其中8个字节用于储存SETUP数据,4个字节
用于储存SETUP状态(SETUP包模式)。控制器会为接收到的数据保留这些空间。
FIFO仅用于SETUP包,而不用于数据包。
3. 应用程序需要从接收FIFO中读SETUP包的2DWORD长度的数据。
4. 应用程序需要从接收FIFO中读一个DWORDSETUP阶段完成信息。
内部的数据流程
5. 当收到SETUP包,控制器会将收到的数据储存到接收FIFO中,此时不会检测接收FIFO
否有剩余空间,也不检测该端点的NAK或者STALL位的状态。
在收到SETUP包后,控制器会在内部将控制IN/OUT端点的状态位设为IN NAK
OUT NAK
6. USB线上收到每个SETUP包后,都会有3DOWRD的数据写入接收FIFO中,并且
STUPCNT位自减1
635/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
第一个DWORD数据包含控制器内部使用的控制信息。
第二个DWORD数据包含SETUP命令的前4个字节。
第三个DWORD数据包含SETUP命令的后4个字节。
7. SETUP阶段完成,数据IN/OUT阶段开始时,控制器会写一个信息(DWORD类型的
SETUP阶段完成信息)到接收FIFO中,指示SETUP阶段的完成。
8. 应用程序通过AHB总线读取SETUP包。
9. 当应用程序取出接收FIFODWORD类型的SETUP阶段完成信息,控制器将产生一个
STUP中断(OTG_FS_DOEPINTx),指示SETUP包已收完,应用程序可以开始处理接收
到的SETUP包了。
控制器将清除控制OUT端点的端点使能位。
应用程序处理流程
1. 配置OTG_FS_DOEPTSIZx寄存器
STUPCNT3
2. 等待RXFLVL中断(OTG_FS_GINTSTS),并读取接收FIFO中的数据包。
3. 等待STUP中断(OTG_FS_DOEPINTx),指示一个成功完成的SETUP阶段。
在此中断处理程序中,应用程序需要读OTG_FS_DOEPTSIZx寄存器,以便知道接收
到了多少个SETUP包,并对最后一个接收到的SETUP包进行处理。
289 处理一个SETUP数据报文
处理多于3个连续的SETUP
根据USB2.0规范,通常如果出现了错误的SETUP包,主机不能向同一个端口发送超过3个连续
SETUP包。然而,USB2.0规范并没有限制主机发向同一个端口连续的SETUP包的数量。当
发生此种情况时,OTG_FS控制器将产生一个B2BSTUP中断(OTG_FS_DOEPINTx)
设置全局的OUT NAK
内部数据流:
1. 当应用程序设置了一个全局的OUT NAK(OTG_FS_DCTL寄存器的SGONAK),除了
SETUP包,控制器将停止向接收FIFO中写入任何数据。不管接收FIFO是否有剩余空间,
非同步的OUT端点将收到NAK握手信号,控制器将丢弃同步的OUT数据包。
636/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
2. 控制器将写全局OUT NAK信息到接收FIFO中,应用程序需要保证接收FIFO中有足够的空
间写此信息。
3. 当从接收FIFO中读出DWORD类型的全局OUT NAK信息时,控制器将产生一个
GONAKEFF中断(OTG_FS_GINTSTS)
4. 一旦检测到此中断,就可以判断控制器已处于全局OUT NAK状态。应用程序可以通过清
OTG_FS_DCTL寄存器的SGONAK位来清除这个中断。
应用程序处理流程
1. 应用程序需要设置全局OUT NAK位,使控制器停止接收任何数据到接收FIFO中。
OTG_FS_CTL寄存器的SGONAK1
2. 等待GONAKEFF中断(OTG_FS_GINTSTS),此中断指示控制器将停止接收除了SETUP
包以外的任何数据。
3. 在设置OTG_FS_DCTL寄存器的SGONAK位之后,在控制器产生GONAKEFF中断之前,
应用程序可以接收到有效的OUT包。
4. 可以通过写GINTMSK寄存器的GINAKEFFM位来暂时屏蔽此中断。
GINTMSK寄存器的GINAKEFFM0
5. 一旦需要退出全局OUT NAK模式,可以清除OTG_FS_DCTL寄存器的SGONAK位。此操
作也将清除GONAKEFF(OTG_FS_GINTSTS)中断。
OTG_FS_DCTL寄存器的CGONAK位=1
6. 如果已经屏蔽了此中断,可以通过以下操作使能中断。
GINTMSK寄存器的GINAKEFFM1
中止一个OUT端点
需要使用以下流程来中止一个已使能的OUT端点:
1. 在中止一个OUT端点前,应用程序需要使能全局OUT NAK状态。
OTG_FS_DCTL寄存器的SGONAK1
2. 等待GONAKEFF中断(OTG_FS_GINTSTS)
3. 对以下位进行编程,中止OUT端点
OTG_FS_DOEPCTLx寄存器的EPDIS=1
OTG_FS_DOEPCTLx寄存器的SNAK1
4. 等待EPDISD中断(OTG_FS_DOEPINTx),此中断指示OUT端点已被成功中止。当产生
EPDISD中断时,控制器将同时清除以下位:
OTG_FS_DOEPCTLx寄存器的EPDIS=0
OTG_FS_DOEPCTLx寄存器的EPENA0
5. 需要清除全局OUT NAK状态,使其他没有被中止的OUT端点能正常接收数据。
OTG_FS_DCTL寄存器的SGONAK0
普通的非同步OUT数据传输
本节描述了一个标准的非同步OUT数据的传输过程(控制、块或中断传输)
对应用程序的要求:
1. 在使能一个OUT传输前,需要在存储区中分配一个缓存区用于保存OUT传输中收到的所
有数据。
2. 对于OUT传输,端点的传输长度寄存器中的传输长度位,需要被设置成端点的最大数据包
长度的倍数,以DWORD类型对齐。
传输长度[EPNUM] n ×(MPSIZ[EPNUM] 4 (MPSIZ[EPNUM]4))
包数[EPNUM] n
n > 0
3. 在每个OUT端点中断中,都需要读出端点的传输长度寄存器,以便计算缓存区中的数据长
度。收到的数据长度可以比设置的传输长度小。
缓存区中的数据长度 初始配置的传输长度 控制器更新的传输长度。
637/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
接收到的USB包数目 初始配置的包数目 控制器更新的包数目
内部数据流:
1. 应用程序需要配置相关端点寄存器的传输长度位和包数目位,清除NAK位,并使能端点以
便接收数据。
2. 一旦NAK位被清除,控制器将开始接收数据,并在接收FIFO有剩余空间时,将数据写入
接收FIFO中。对于每一个收到的数据包,数据包和其状态信息都将写入接收FIFO中。每
写入接收FIFO一个数据包(最大包长度的包或短包),端点寄存器的包数目位都将自减1
一个带有错误的CRCOUT数据包,将被从接收FIFO中自动清除。
在发送一个ACK信号后,对于因为主机没有收到ACK信号时而重新发送的非同步
OUT数据包,将被控制器丢弃。应用程序不用处理对同一端点的带有同样数据PID
的连续OUT数据包,这种情况下寄存器的包数位不会自减。
如果接收FIFO没有剩余空间,同步或非同步的数据包都将被丢弃,并不会被写入接
FIFO。另外,对于非同步OUT数据包,将发送NAK握手信号。
对于以上三种情况,由于都没有实际的数据写入接收FIFO中,端点寄存器的包数目
位都不会自减。
3. 当包数目自减到0,或者端点收到一个短的数据包,控制器会将该端点的状态设置为
NAK。一旦端点处于NAK状态,同步和非同步传输的数据包都将被丢弃,而不会写入接收
FIFO中,同时,对于非同步的OUT传输,控制器将返回一个NAK的握手包。
4. 在数据被控制器写入接收FIFO后,应用程序可以从接收FIFO中读取数据,并将之写入其
他存储区,每个端点一次只能操作一个包的数据。
5. 每当一个包的数据通过AHB总线写入其他存储区后,端点的传输长度寄存器的值都会自动
减去已写入的数据长度。
6. OUT端点的OUT传输完成标志会在以下情况时写入接收FIFO中:
传输长度寄存器的值为0,同时包数寄存器的值也为0
写入接收FIFO的最后一个OUT数据包是一个短包(0收到的包长度<最大包长度)
7. 当应用程序将此标志(OUT传输完成标志)从接收FIFO中读出后,控制器将产生该端点的传
输完成中断,同时,该端点的使能标志被清除。
应用程序处理流程:
1. 配置OTG_FS_DOEPTSIZx寄存器,设置传输长度和合适的包数目。
2. 配置OTG_FS_DOEPCTLx寄存器,设置端点的特性,同时设置EPENACNAK位为’1’
OTG_FS_DOEPCTLx寄存器的EPENA=1
OTG_FS_DOEPCTLx寄存器的CNAK1
3. 等待RXFLVL(OTG_FS_GINTSTS)中断,并从接收FIFO中读出数据包。
根据不同的传输长度,此步骤将重复多次。
4. 等待非同步OUT传输正常完成标志的XFRC(OTG_FS_DOEPINTx)中断。
5. OTG_FS_DOEPTSIZx寄存器,获得实际接收到的数据长度的信息。
普通的同步OUT数据传输
本章描述了标准的同步OUT传输处理过程。
对应用程序的要求:
1. 所有对于非同步OUT传输的要求都适用于同步OUT传输。
2. 对于同步OUT传输,控制寄存器的传输长度位和包数目位都必须设置为在一个帧内接收的
最大数据包长度和数量。同步OUT传输不能跨越一个帧。
3. 应用程序需要在一个周期性的帧(OTG_FS_GINTSTS寄存器的EOPF中断)结束前,从接
FIFO中读出所有的同步OUT数据包(包括数据和状态)
4. 为准备接收下一个帧的数据,同步OUT端点需要在EOPF(OTG_FS_GINTSTS)后,
SOF(OTG_FS_GINTSTS)前被使能。
内部数据流:
638/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
1. 除了一些细微的差别,同步OUT端点的内部数据流与非同步OUT端点的内部数据流大致
相同。
2. 在同步OUT端点被使能(通过设置端点使能位),同时NAK状态被清除时,应用程序必须设
置合适的奇数/偶数帧位。控制器只有在以下情况下,同步OUT端点才会在特殊的帧接收
数据:
EONUM(OTG_FS_DOEPCTLx寄存器) SOFFN[0](OTG_FS_DSTS寄存器)
3. 在从接收FIFO中读取完整的同步OUT数据包(包括数据和状态)后,控制器会根据从接收
FIFO中读取的最后一个同步OUT数据包来更新OTG_FS_DOEPTSIZx寄存器的RXDPID
位。
应用程序操作流程:
1. 配置OTG_FS_DOEPTSIZx寄存器,设置合适的传输长度和包数。
2. 配置OTG_FS_DOEPCTLx寄存器,设置端点的特性并使能端点,同时清除NAK状态,选
择合适的奇数/偶数帧。
EPENA = 1
CNAK = 1
EONUM = (0:偶数 / 1:奇数)
3. 等待RXFLVL中断(OTG_FS_GINTSTS),并从接收FIFO中读取数据包
根据不同的传输长度,本步骤将重复多次。
4. 等待同步OUT传输结束标志产生的XFRC中断(OTG_FS_DOEPINTx)。此中断并不意味着
存储区中的数据是正确的。
5. 在同步传输中,并不是每次都会产生XFRC中断,但能够检测到OTG_FS_GINTSTS寄存
器的IISOOXFRM中断。
6. OTG_FS_DOEPTSIZx寄存器,以便知道在一个帧内收到了多少有效数据。只有在满足
以下任一条件之一时,才能判定收到的数据是有效的。
在这个帧内收到的USB包数目 初始化的包数目 控制器更新的最终包数目。
RXDPID = D0(OTG_FS_DOEPTSIZx),同时在这个帧内收到的USB包数为1
RXDPID = D1(OTG_FS_DOEPTSIZx),同时在这个帧内收到的USB包数为2
RXDPID = D2(OTG_FS_DOEPTSIZx),同时在这个帧内收到的USB包数为3
在这个帧内收到的USB包数目 初始化的包数目 控制器更新的最终包数目。
应用程序可以丢弃无效的数据包。
不完全的同步OUT数据传输
本节描述了同步OUT数据包接收不完全时的处理流程。
内部数据流:
1. 对于同步OUT端点,XFRC中断(OTG_FS_DOEPINTx)不是每次都会产生的。在以下情况
下,控制器会停止接收同步OUT数据包,应用程序将不会检测到XFRC中断
(OTG_FS_DOEPINTx)
当接收FIFO没有足够空间存放完整的同步OUT数据包时,控制器将停止接收。
当收到的同步OUT数据包发生了CRC错误。
当收到的同步OUT令牌是错误的。
当应用程序从接收FIFO中读取数据的速度过慢。
2. 当控制器在完成所有的同步OUT传输前检测到了帧结束信号,会产生一个不完全的同步
OUT中断(OTG_FS_GINTSTS寄存器的IISOOXFRM),此中断表示至少有一个同步OUT
端点没有产生XFRC中断(OTG_FS_DOEPINTx)。这种情况下,该端点仍然有效,但在
USB线上不会有进一步的数据传输。
应用程序处理流程:
1. IISOOXFRM中断(OTG_FS_GINTSTS)指示在当前帧内至少有一个同步OUT端点发生了
不完全传输的情况。
639/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
2. 应用程序需要判断是否由于没有读空接收FIFO才导致发生了不完全传输。应该确保在进
一步操作前必须读出接收FIFO中所有的同步OUT数据(包括数据和状态)
当应用程序读空接收FIFO后,会产生XFRC中断(OTG_FS_DOEPINTx),此时,需
要重新使能端点,以便在下一帧时接收同步OUT数据。
3. 当检测到IISOOXFRM中断(OTG_FS_GINTSTS),需要读出所有同步OUT端点的控制寄
存器(OTG_FS_DOEPCTLx)以便确认在当前帧内哪个端点发生了不完全传输。在同时满
足以下条件时,表示传输不完整。
EONUM(OTG_FS_DOEPCTLx) = SOFFN[0](OTG_FS_DSTS)
EPENA = 1(OTG_FS_DOEPCTLx)
4. 以上的操作必需在检测到SOF中断(OTG_FS_GINTSTS)之前完成,以确保当前的帧号没
有改变。
5. 对于一个发生了不完全传输的同步OUT端点,必需丢弃储存在存储区的数据,并通过设置
OTG_FS_DOEPCTLx寄存器的EPDIS位来无效该端点。
6. 等待EPDIS中断(OTG_FS_DOEPINTx),并重新使能端点,以便在下一个帧开始接收新
的数据。
由于控制器需要一定的时间来关闭端点,因此在收到一个错误的同步数据之后,应用
程序可能在下一个帧时不能接收数据。
中止一个非同步OUT端点
本节描述了应用程序如何中止一个非同步端点。
1. 设置控制器进入全局OUT NAK响应状态。
2. 无效相应的端点。
通过设置STALL = 1(OTG-FS_DOEPCTL),而不是设置SNAK
(OTG_FS_DOEPCTL)来使端点无效。
3. 当应用程序准备好结束以STALL来响应端点时,必需清除STALL
(OTG_FS_DOEPCTLx)
4. 当应用程序收到SetFeature.Endpoint Halt命令或者ClearFeature.Endpoint Halt命令时,
需要设置或者清除端点的STALL位,这个设置或者清除的操作必需在控制端点发起状态阶
段传输之前完成。
640/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
示例
本节列举了一些例子,来说明如何处理基本的传输类型和情况。
设备模式下块OUT传输
下图给出了从USB接收一个单独的块OUT数据包到AHB的流程以及相关的事件。
290 从模式下块(Bulk)OUT传输过程
在收到SetConfiguration/SetInterface 命令后,应用程序通过设(OTG_FS_DOEPCTLx
)CNAK=1EPENA=1来初始化所有的OUT端点,并为OTG_FS_DOEPTSIZx寄存器设置合
理的XFRSIZPKTCNT值。
1. 主机尝试向一个端点发送数据(OUT令牌)
2. 当接收到USB线上的OUT令牌,控制器将数据包储存在接收FIFO中,此时接收FIFO应该
有剩余空间。
3. 当控制器将完整的数据包写入接收FIFO后,将产生RXFLVL中断(OTG_FS_GINTSTS)
4. 在接收到PKTCNTUSB数据包之后,控制器将自动设置端点状态的NAK位,以防止持续
接收更多的数据包。
5. 应用程序需要响应中断,并从接收FIFO中读取数据。
6. 当读出了所有的数据(数据长度等于XFRSIZ),控制器将产生(OTG_FS_DOEPINTx)XFRC
中断。
7. 应用程序需要响应中断,并通过XFRC中断位的来决定整个传输是否已完成。
IN数据传输
本节叙述了当使能了相应的发送FIFO时,如何在设备模式下写数据包到端点的FIFO中。
1. 可以选择使用轮询方式或者中断方式
使用轮询方式,需要通过读OTG_FS_DTXFSTSx寄存器来监视端点相应的发送FIFO
状态,以便了解发送FIFO是否还有剩余空间。
使用中断方式,需要等待TXFE中断(OTG_FS_DIEPINTx)并读OTG_FS_DTXFSTSx
寄存器来了解发送FIFO是否有足够的剩余空间。
641/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
如果要写一个单独的非零长度的数据包,发送FIFO的剩余空间必需要足够写入整个
完整的数据包。
如果要写一个零长度的数据包,则无需查看发送FIFO的剩余空间。
2. 无论使用以上哪种方式,当发送FIFO有足够剩余空间来写入一个数据包,应用程序需要
先写端点控制寄存器,再写数据包到发送FIFO。通常,除了设置端点的使能位,应用程
序都必需通过读-修改-写的操作来设置OTG_FS_DIEPCTLx寄存器,以防止寄存器的内容
被修改。
如果发送FIFO的剩余空间足够大,可以向同一个端点连续写入多个数据包。对于周期性IN
点,在一个帧内只能写入一个数据包,只有在收到前一个数据包的传输完成标志后,才能写入
下一个周期要发送的数据。
设置IN端点NAK状态
内部数据流程:
1. 当设置某个具体的IN端点状态为NAK时,控制器将无视该端点的发送FIFO中是否有要传
送的数据,而停止该端点的数据传送,
2. 对于非同步IN命令,将以NAK握手信号回复。
对于同步IN命令,将以零长度的数据包回复。
3. 对于OTG_FS_DIEPCTLx寄存器的SNAK位,控制器将产生INEPNE(IN端点NAK有效)
(OTG_FS_DIEPINTx)
4. 当接收到此中断,就可以判断该端点已进入IN端点NAK状态。应用程序可以通过设置
OTG_FS_DIEPCTLx寄存器的CNAK位来清除此中断。
应用程序编程流程:
1. 需要设置IN NAK位,来停止指定IN端点的数据传输活动:
OTG_FS_DIEPCTLx寄存器的SNAK = 1
2. 等待OTG_FS_DIEPCTLx寄存器的INEPNE中断。此中断表示控制器已停止指定端点的数
据传输活动。
3. 控制器在应用程序设置NAK位之后,在产生NAK有效的中断之前,可以在该端点上发送有
效的IN数据包。
4. 应用程序可以通过写DIEPMSK寄存器的INEPNEM位来临时屏蔽此中断。
DIEPMSK寄存器的INEPNEM=0
5. 通过清除OTG_FS_DIEPCTLx寄存器的NAK状态位(NAKSTS)来退出端点NAK状态模式。
同时需要清除INEPNE中断(OTG_FS_DIEPINTx)
OTG_FS_DIEPCTLx寄存器的CNAK=1
6. 如果应用程序在之前屏蔽了此中断,需要解除屏蔽:
DIEPMSK寄存器的INEPNEM=1
IN端点无效
通过以下步骤,可以使一个已经使能的IN端点无效。
应用程序编程流程:
1. 应用程序在无效一个IN端点之前,需要先停止从AHB写数据包。
2. 应用程序需要设置端点进入NAK模式
OTG_FS_DIEPCTLx寄存器的SNAK=1
3. 等待OTG_FS_DIEPINTx寄存器的INEPNE中断。
4. 对于需要无效的端点,设置OTG_FS_DIEPCTLx寄存器的以下位:
OTG_FS_DIEPCTLx寄存器的EPDIS=1
OTG_FS_DIEPCTLx寄存器的SNAK=1
5. 等待OTG_FS_DIEPINTx寄存器的EPDISD中断,该中断表示控制器已经使指定的端点无
效。伴随着该中断,控制器也将清除以下位:
OTG_FS_DIEPCTLx寄存器的EPENA=0
642/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
OTG_FS_DIEPCTLx寄存器的EPDIS=0
6. 应用程序必需读取周期性IN端点的OTG_FS_DIEPTSIZx寄存器,以了解该端点已经向
USB总线发送了多少数据。
7. 应用程序需要通过设置OTG_FS_GRSTCTL寄存器的以下位,来清除该端点的发送FIFO
中的数据:
TXFNUM(OTG_FS_GRSTCTL)=端点的发送FIFO编号
TXFFLSH(OTG_FS_GRSTCTL)=1
应用程序需要查询OTG_FS_GRSTCTL寄存器,直到TXFFLSH位被控制器清除,这表示刷新操
作已经完成。应用程序可以随后重新使能该端点,来发送新的数据。
普通的非周期性IN数据传输
应用程序需要:
1. 在发起一个IN传输前,需要确保所有要通过IN传输被发送的数据,都属于同一个缓冲区。
2. 对于IN传输,端点传输长度寄存器的传输长度位指示整个要发送的数据长度,包括若干个
最大包长度的数据包和一个短包。短包将在传输的最后进行传送。
为了要先发送若干个最大数据包长度的数据包,并在传输的最后发送一个短包:
传输长度[EPNUM] = x × MPSIZ[EPNUM] + sp
If (sp > 0)
包数目[EPNUM] = x + 1
else
包数目[EPNUM] = x
为了要发送一个单独的零长度的数据包:
传输长度[EPNUM] = 0
包数目[EPNUM] = 1
为了要先发送若干个最大数据包长度的数据包,并在传输最后发送一个零长度的数据
包,应用程序需要把整个发送过程分割为两部分。第一个部分发送若干个最大数据包
长度的数据包,第二个部分再单独发送长度为零的数据包。
第一部分:传输长度[EPNUM] = x × MPSIZ[EPNUM];包数目[PENUM] = n
第二部分:传输长度[EPNUM] = 0;包数目[EPNUM] = 1
3. 一旦一个端点开始发送数据,控制器会更新传输长度寄存器的值,在IN传输结束时,需要
读出传输长度寄存器,以了解发送FIFO中有多少数据已通过USB总线发出。
4. 仍然留在发送FIFO中的数据 设置的传输长度 控制器更新过的最终传输长度。
USB总线上传输的数据 (设置的初始包数目 控制器更新过的最终包数目) ×
MPSIZ[EPNUM]
仍然需要发送的数据 设置的初始传输长度 已通过USB发送的数据长度。
内部数据流:
1. 应用程序需要设置端点控制寄存器的传输长度和包数目位,并使能需要传输数据的端点。
2. 应用程序需要将要传输的数据,写入相应端点的发送FIFO中。
3. 每当应用程序写一个数据包到发送FIFO中,控制器将自动从传输长度中减去写入的包长
度。需要持续写入数据直到该端点的传输长度变为0。在写数据到FIFO后,FIFO中的数据
包数目位(每个IN端点都用3位表示包数目,在内部由控制器管理,在任何时候,对于IN
点控制器能管理的最大包数为8)将自动加1。对于零长度的数据包,会有相应的标志位指
明,FIFO中不需要有任何数据。
4. 在数据被写入发送FIFO后,控制器会在收到IN命令后读取这些数据。对于每个以ACK
束的非同步IN数据包传输,该端点的包数目寄存器将自减1,直到包数目变为0。包数目寄
存器将不会因为超时而自减。
5. 对于零长度数据包(由内部的零长度标志位指示),控制器将根据IN命令发送零长度的数据
包,并且包数寄存器自减1
6. 如果在包数寄存器已经变为0,并且FIFO中已无要发送的数据时,收到了IN命令,控制器
将产生在发送FIFO为空时收到了IN命令的中断(ITTXFE),同时不设置该端点的NAK标志
位。控制器将以NAK握手信号来回应一个非同步端点的传输。
643/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
7. 控制器内部复原FIFO的指针并且不会产生超时的中断。
8. 如果传输长度为0,并且包数也为0,传输完成中断(XFRC)会产生,并且端点的有效标志
将被清除。
应用程序流程:
1. 根据传输长度和相应的包数目设置OTG_FS_DIEPTSIZx寄存器。
2. 根据端点的特性设置OTG_FS_DIEPCTLx寄存器,并设置CNAKEPENA(端点使能)位。
3. 当传输非零长度的数据包时,应用程序需要查询OTG_FS_DTXFSTSx寄存器(此处x代表
与端点相关的FIFO编号)来了解发送FIFO是否有剩余空间。应用程序也可以使用
TXFE(OTG_FS_DIEPINTx)中断来决定是否写数据到FIFO
普通的周期性IN传输
本节叙述了一个典型的周期性IN传输
应用程序需要:
1. 上一节所描述的普通的非周期性IN传输的应用程序需求1234同样适用于本节的周
期性IN传输,除了2有些许不同。
应用程序可以传输多个最大数据包长度的数据包,或传输带有一个短包结尾的多个最
大数据包长度的数据包。传输若干个最大数据包长度的数据包,并在传输的最后发送
一个短包需要做到:
传输长度[EPNUM] = x × MPSIZ[EPNUM] + sp
(此处x0的整数,并且 0 sp MPSIZ[EPNUM])
If (sp > 0)
包数目[EPNUM] = x + 1
else
包数目[EPNUM] = x
MCNT[EPNUM] = 包数目[EPNUM]
应用程序不能在传输末尾发送一个零长度的数据包,但可以自动发送一个单独的零长
度的数据包。为了要发送一个单独的零长度的数据包,需要设置:
传输长度[EPNUM] = 0
包数目[EPNUM] = 1
MCNT[EPNUM] = 包数目[EPNUM]
2. 应用程序在一个时间只能安排一个帧的数据传输。
(MCNT - 1) × MPSIZ XFERSIZ MCNT MPSIZ
PKTCNT = MCNT(OTG_FS_DIEPTSIZx)
如果XFERSIZ < MCNT × MPSIZ,那么传输的最后一个数据包是一个短包。
注意:MCNT位在OTG_FS_DIEPTSIZx寄存器中,MPSIZ位在OTG_FS_DIEPCTLx
寄存器中,PKTCNT位在OTG_FS_DIEPTSIZx寄存器中,XFERSIZ位在
OTG_FS_DIEPTSIZx寄存器中。
3. 所有在一个帧内需要发送的数据都必需在收到IN命令之前写入到发送FIFO中。需要在一
个帧内发送的数据,即使只有一个DWORD没有写入发送FIFO中,控制器仍然会认为
FIFO是空的。当发送FIFO为空时:
对于同步IN端点,会发送一个零长度的数据包。
对于中断IN端点,会发送NAK握手信号。
4. 对于一个帧内有三个数据包的高带宽IN端点,应用程序需要设置端点FIFO的长度为2×
max_pkt_size(最大数据包长度),并在第一个数据包已经发送到USB总线后,写入第三个
数据包。
内部数据流程:
1. 应用程序需要设置相应端点寄存器的传输长度和包数目位,并使能该传输端点。
2. 应用程序需要将数据写入相应的发送FIFO中。
3. 每当应用程序写入一个数据包到发送FIFO,该端点的传输长度寄存器值将自动减去写入
的数据包长度。应用程序需要持续的写入数据直到该端点的传输长度变为0.
644/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
4. 当周期性端点收到IN命令时,控制器将自动的发送FIFO中的数据。如果FIFO中没有当前
帧的完整数据包(在指定FIFO模式下有完整的包),控制器会产生收到IN命令时发送FIFO
为空的中断。
对于同步IN端点,控制器会发送零长度的数据包
对于中断IN端点,控制器会发送NAK的握手响应
5. 相应端点的包数目寄存器值会在以下情况时,自动减1
对于同步端点,当发送了一个零长度或非零长度的数据包
对于中断端点,当一个ACK握手信号被传输
当发送长度和包数目都为0时,会产生传输结束中断,相应端点的使能会被清除。
6. 周期性帧间隔时间”(OTG_FS_DCFG寄存器的PFIVL位控制)内,当控制器发现任一
在当前帧内应该为空的同步IN端点的FIFO为非空,会产生OTG_FS_GINTSTS寄存器的
IISOIXFR中断。
应用程序流程:
1. 根据端点特性配置OTG_FS_DIEPCTLx寄存器,并设置CNAKEPENA位。
2. 将需要在下一个帧时发送的数据写入发送FIFO中。
3. 如果产生了ITTXFE中断(OTG_FS_DIEPINTx),表示应用程序没有来得及将要发送的数据
写入发送FIFO中。
4. 当产生中断的端点在中断产生前已经使能,不用理会此中断;否则,使能该端点,控制器
将在收到下一个IN命令时发送数据。
5. 当产生XFRC中断(OTG_FS_DIEPINTx),并且没有ITTXFE中断(OTG_FS_DIEPINTx)
表示同步IN传输已经正常结束。可以读OTG_FS_DIEPTSIZx寄存器,传输长度寄存器值
和包数目寄存器值都等于0,指示所有的数据都已通过USB传送。
6. 当产生XFRC中断(OTG_FS_DIEPINTx),不管有没有ITTXFE中断(OTG-
FS_DIEPINTx),都表示中断IN传输已经正常结束。可以读OTG-FS_DIEPTSIZx寄存器,
传输长度和包数寄存器值都等于0,指示所有的数据都已通过USB传送。
7. 当产生未完成的同步IN传输中断(OTG_FS_GINTSTSIISOIXFR),而没有产生前述的中
断,表示在当前帧,控制器少收到至少一个周期性IN命令。
未完成的同步IN数据传输
本节叙述了当发生未完成的同步IN传输时,应用程序的处理流程。
内部数据流程:
1. 出现以下任一情况时会认为同步IN传输未完成:
控制器在至少一个同步IN端点上,收到一个错误的同步IN命令。此时,应用程序会检
测到一个未完成的同步IN传输中断(OTG_FS_GINTSTS寄存器的IISOIXFR)
应用程序来不及将完整的数据写入发送FIFO中,也就是说在写完整的数据包到发送
FIFO之前,收到了IN命令。此时,应用程序会检测到收到IN命令时发送FIFO为空
中断(OTG_FS_DIEPINTx)。应用程序可以不理会此中断,因为这将在周期性帧结束
的时候,导致一个未完成的同步IN传输中断(OTG_FS_GINTSTSIISOIXFR)。控
制器将发送一个零长度的数据包到USB总线来响应收到的IN命令。
2. 应用程序应该尽快停止继续向发送FIFO写数据。
3. 应用程序应该设置端点的NAK位和取消使能位。
4. 控制器会解除端点的使能,清除端点的取消使能位,并产生该端点的端点取消使能
断。
应用程序流程:
1. 应用程序在任何同步IN端点上收到OTG_FS_DIEPINTx的发送FIFO空中断时,都可以忽
略接收到的IN命令,因为这将导致一个未完全的同步IN传输中断(OTG_FS_GINTSTS)
2. “未完成的同步IN传输中断(OTG_FS_GINTSTS)表示至少有一个同步IN端点发生了未完
成的同步IN传输。
645/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
3. 应用程序需要读所有同步IN端点的端点控制寄存器,以了解是哪个端点发生了未完成的IN
传输事件。
4. 应用程序必需停止继续向这个端点的发送FIFO写数据。
5. 配置OTG_FS_DIEPCTLx寄存器的以下位来取消端点的使能:
OTG_FS_DIEPCTLx寄存器的SNAK = 1
OTG_FS_DIEPCTLx寄存器的EPDIS = 1
6. OTG_FS_DIEPINTx寄存器的端点取消使能中断指示控制器取消端点的使能状态。
此时,应用程序需要清除相应的发送FIFO,或者在重新使能端点之后,覆盖仍存留
FIFO中的数据。为了清除数据,应用程序必需使用OTG_FS_GRSTCTL寄存器。
中止非同步IN端点
本节叙述了应用程序如何中止一个非同步端点
应用程序流程:
1. 解除需要中止的IN端点的使能状态。设置STALL位。
2. 如果端点已经使能,设置OTG_FS_DIEPCTLx寄存器的EPDIS1.
OTG_FS_DIEPCTLxSTALL = 1
STALL位的优先级用于高于NAK位。
3. 端点取消使能中断”(OTG_FS_DIEPINTx)通知应用程序,控制器已经取消了相应端点的
使能。
4. 应用程序需要根据端点的传输类型,清除非周期性或周期性发送FIFO。对于非周期性端
点,应用程序必需重新使能另一个不需要中止的非周期性端点,来完成数据传输。
5. 当应用程序准备好结束以STALL握手信号来响应端点,必需清除OTG_FS_DIEPCTLx
存器的STALL位。
6. 当应用程序根据SetFeature.Endpoint Halt命令,或者ClearFeature.Endpoint Halt命令来
设置或清除STALL位,必需在控制端点上建立状态传输阶段之前执行对STALL位的设置和
清除操作。
特殊情况:中止一个控制OUT端点
控制器在主机发送超过SETUP包中定义的数量的IN/OUT命令时,可以在控制传输的数据传输阶
STALL IN/OUT命令。在这种情况下,应用程序必需在控制传输的数据传输阶段,使能
OTG_FS_DIEPINTxITTXFE中断和OTG_FS_DOEPINTxOTEPDIS中断。当应用程序收到
了中断,意味着必需设置相应端点控制寄存器的STALL位,并清除中断。
26.15.7 最差情况下的响应时间
OTG_FS控制器工作在设备模式下时,对于任何一个跟在同步OUT传输后的命令,都会有一
个最坏的响应时间。这个最坏的响应时间根据AHB的时钟频率有所不同。
控制器寄存器位于AHB时钟域的范围内,并且控制器在这些寄存器值被更新之前,不能接收
的命令。最坏的情况是:对于任何一个跟在同步OUT传输之后的命令,由于同步传输不需要握
手信号,因此这个命令可能会马上到达。这个最坏的响应时间在AHB时钟等于PHY时钟频率
时,是7PHY时钟。当AHB时钟更快时,这个响应时间会变快些。
当这种最坏的情况发生时,控制器会以NAK来响应块传输和中断传输命令,丢弃同步和SETUP
命令。对于SETUP命令,主机会以SETUP超时来处理这种情况,并重发SETUP包。对于同步
传输,会产生未完全的同步IN传输中断(IISOIXFR)和未完全的同步OUT传输中断(IISOOXFR)
来通知应用程序有同步的IN/OUT命令被丢弃了。
选择OTG_FS_GUSBCFG寄存器的TRDT
OTG_FS_GUSBCFG寄存器的TRDT值以PHY时钟个数为单位,表示MAC从收到一个IN命令,
到获取FIFO状态并从PFC(FIFO控制器)获取最初的数据,所需要的时间。这个时间包括了
PHYAHB时钟同步的延迟。最坏的情况是AHB时钟频率与PHY时钟频率相同,此时,这个延
迟是5个时钟周期。
646/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
一旦MAC收到了IN命令,这个信息(收到命令)将由PFC(PFCAHB时钟驱动)同步到AHB时钟。
PFC会从SPRAM读取数据,并将之写入双时钟源的缓存区。MAC再从缓存区中读出数据(4个深
)
如果AHB时钟频率高于PHY,可以选择一个较小的TRDT数值(OTG_FS_GUSBCFG)
下图中有以下信号:
tkn_rcvd:从MAC发到PFC的命令已收到信息
dynced_tkn_rcvd:从PCLKHCLK的双倍的同步tkn_rcvd信号
spr_read:读SPRAM
spr_addrSPRAM寻址
spr_rdata:从SPRAM读数据
srcbuf_push:送入源缓存区
srcbuf_rdata:从源缓存区读数据。MAC检测到数据。
应用程序可以使用以下公式来计算TRDT的值:
4 × AHB时钟 + 1PHY时钟 (2个时钟同步 + 1个时钟的存储器寻址 + 1个时钟从同步
RAM获取数据) + 1PHY时钟(下一个PHY时钟MAC可以采样2个时钟的FIFO输出)
291 TRDT最大时序的情况
647/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
26.15.8 OTG编程规则
OTG_FS制器可用于设计一个支HNPSRP协议的OTG设备。当控制器发现插入一个A
插头,控制器将执行A类设备操作,当插入B类插头,则执行B类操作。在主机模式下,
OTG_FS控制器可以关闭VBUS来节省耗电。SRP协议用于B类设备请求A类设备打开VBUS的供
电。设备必需在控制数据线和VBUS线上都产生脉冲,但主机可以只识别其中一个的脉冲信号作
SRP信号。HNP协议用于B类设备协商和切换到主机角色,协商之后,B类设备也可以挂起总
线,回到设备角色。
A类设备的会话请求协议
应用程序必需设置控制USB配置寄存器的SRP使能位,这会使得OTG_FS控制器能在A类设备
模式下识别的SRP请求。
292 A设备的SRP
DRV_VBUS:送到PHYVBUS驱动信号
VBUS_VALIDPHYVBUS有效信号
A_VALID:送到PHYA类设备的VBUS电平信号
D+:正向数据线
D-:反向数据线
1. 为了节省耗电,应用程序需要在总线空闲时,设置主机端口控制和状态寄存器的端口挂起
位和端口供电位,来挂起总线并关闭对端口的供电。
2. PHY拉低VBUS_VALID信号来指示端口供电已关闭。
3. VBUS总线供电关闭时,设备必需检测到至少2msSE0信号,才能发起SRP请求。
4. 为了发起SRP请求,设备需要打开数据线的上拉电阻,持续510msOTG_FS控制器将
检测数据线上的脉冲信号。
5. 设备需要驱动VBUS,提供超过A类设备会话有效电平(最小2.0V)VBUS脉冲。
OTG_FS控制器将用中断通知应用程序,检测到了SRP请求,并设置控制器全局中断状态
寄存器的会话请求检测位(OTG_FS_GINTSTSSRQINT)
6. 应用程序需要响应会话请求检测中断,并通过写主机端口控制和状态寄存器的端口供电位
来打开对端口的供电。PHY会拉高VBUS_VALID信号来指示端口供电已被打开。
7. USB总线恢复供电,设备连接,SRP过程结束。
B类设备的会话请求协议
应用程序必需设置控制USB配置寄存器的SRP使能位。此位将使能OTG_FS控制器作为B类设
备时的SRP功能。SRP功能使OTG_FS控制器可以向主机发起一个会话请求。
648/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
293 B类设备SRP
VBUS_VALID:来自PHYVBUS有效信号
B_VALID:通知PHYB类设备有效信号
DISCHRG_VBUS:通知PHY的放电信号
SESS_END:通知PHY的会话结束信号
CHRG_VBUS:通知PHY的驱动VBUS的信号
DP:正向的数据线
DM:反向的数据线
1. 为了节省耗电,主机可以在总线空闲的时候挂起和关闭端口供电。
OTG_FS控制器会在总线空闲3ms后,设置控制器中断寄存器的早期挂起位。紧跟着,
OTG_FS控制器会设置控制器中断寄存器的USB挂起位。
OTG_FS控制器会通知PHY停止VBUS的供电。
2. PHY会指示发向设备的会话停止信号。这是发起SRP请求的先决条件。OTG_FS控制器在
发起SRP请求之前,需要保持至少2msSE0状态。
对于USB1.1全速收发器,应用程序需要在BSVLD(OTG_FS_GOTGCTL)复位后等待
VBUS降到0.2V。这段等待时间由收发器的供应商决定,并且不同的收发器也各不相同。
3. 应用程序通过写OTG控制和状态寄存器的会话请求位来发起SRP请求。OTG_FS控制器
将先输出数据线的脉冲,再输出VBUS的脉冲。
4. 主机可以根据VBUS或者数据线的脉冲,识别到SRP请求,打开VBUS的供电。PHY将指示
VBUS已重新供电。
5. OTG_FS控制器产生VBUS脉冲。
主机将打开VBUS的供电,开始一个新的会话,这表示SRP请求成功。OTG_FS控制器会设
OTG中断状态寄存器的会话请求成功状态改变位来通知应用程序。应用程序可以通过
OTG控制和状态寄存器的会话请求成功位来获得这一信息。
6. USB重新供电,OTG_FS控制器连接,SRP请求成功完成。
A类设备的主机协商协议
HNP协议用于在A类设备和B类设备间切换主机角色。应用程序需要设置控制器USB配置寄存器
HNP使能位,来使能OTG_FS控制器作为A类设备时的HNP功能。
649/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
294 A类设备HNP
DPPULLDOWN:从控制器发向PHY的使能/取消使能PHY内部DP线的下拉的信号
DMPULLDOWN:从控制器发向PHY的使能/取消使能PHY内部DM线的下拉的信号
1. OTG_FS控制器会发送SetFeature b_hnp_enable命令到B类设备,来使能HNP功能。B
设备以ACK来响应命令,表示B类设备支持HNP协议。应用程序需要设置OTG控制和状态
寄存器的HNP使能位,来告知OTG_FS控制器,连接上的B类设备支持HNP协议。
2. 当应用程序不需要再使用到总线,需要设置主机端口控制和状态寄存器的端口挂起位来挂
起总线。
3. B类设备检测到USB挂起信号,可以断开连接,指示开始发起HNP请求。B类设备只有
在需要执行主机角色的时候才需要发起HNP请求,否则就保持总线的挂起状态。
OTG_FS控制器会设置OTG中断状态寄存器的主机协商已检测到中断位,来通知应用程
序检测到HNP请求。
OTG_FS控制器会解除DMDP线的下拉,来执行设备角色。PHY会使能DP线的上拉来
指示B类设备的接入。
应用程序必需读OTG控制和状态寄存器的当前模式位,来获知当前的工作模式。
4. B类设备检测到设备的接入,发起USB复位,并枚举OTG_FS控制。
5. B类设备一直执行主机角色,发起通信,并在完成操作后,挂起总线。
OTG_FS控制器在检测到总线超过3ms的空闲后,会设置控制器中断寄存器的早期挂起
位,紧跟着会设置控制器中断寄存器的USB挂起位。
6. 在协商模式下,OTG_FS控制器会检测总线的挂起,断开设备,并切换回主机角色。
OTG_FS控制器会使能PHY内部DMDP线的下拉,指示重新开始执行主机角色。
7. OTG_FS控制器会设置OTG中断状态寄存器的接入ID线状态改变中断。应用程序必需读
OTG控制和状态寄存器的接入ID线状态位来判断OTG_FS控制器是否工作在A类设备模
式下。这标志HNP协议的完成。应用程序必需读取OTG看哦你看告知和状态寄存器的当
前模式位来判断是否工作在主机模式下。
8. B类设备重新接入,完成HNP协议。
B类设备主机协商协议
HNP协议用于在A类设备和B类设备间切换主机角色。应用程序必需设置控制器USB配置寄存器
HNP使能位,来通知OTG_FS控制器在作为B类设备时,使能HNP功能。
650/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
USB OTG全速(OTG_FS) STM32F10xxx参考手册
651/754
参照200912 RM0008 Reference Manual 英文第10
295 B类设备HNP
DPPULLDOWN:从控制器发向PHY的对PHY内部的DP线的下拉使能/取消使能的信号。
DMPULLDOWN:从控制器发向PHY的对PHY内部的DM线的下拉使能/取消使能的信号。
1. A类设备会发送SetFeature b_hnp_enable命令来使能HNP协议。OTG_FS控制器需要回
ACK响应,以告知支持HNP协议。应用程序必需设置OTG控制和状态寄存器的设备
HNP使能位来表示支持HNP协议。
应用程序需要设置OTG控制和状态寄存器的HNP请求位来通知OTG_FS控制器,发起
HNP请求。
2. 当停止使用总线时,A类设备会挂起总线。A类设备设置主机端口控制和状态寄存器的端
口挂起位来挂起总线。
OTG_FS控制器在查到超过3ms的总线空闲时,会设置控制器中断寄存器的早期挂起位,
紧跟着会设置控制器中断寄存器的USB挂起位。
OTG_FS控制器会断开连接,A类设备将检测到总线上的SE0状态,表示开始了HNP
议。OTG_FS控制器会使能DPDM的下拉,指示开始执行主机角色。
A类设备在检测到SE0状态超过3ms后,会使能DP线的上拉电阻。OTG_FS控制器将认为
有设备插入。
OTG_FS控制器会设置OTG中断状态寄存器的主机协商成功状态改变中断,来指示开始
HNP协议。应用程序必需读OTG控制和状态寄存器的主机协商成功位,来获得主机协商
是否成功的信息。应用程序必需读控制器中断寄存器的当前模式位,来判断控制器是否工
作在主机模式下。
3. 应用程序设置复位位(OTG_FS_HPRTPRST)OTG_FS控制器执行USB复位操作,
并枚举A类设备。
4. OTG_FS控制器一直执行主机角色,发起通信,并在需求结束时,通过写主机端口控制和
状态寄存器的端口挂起位,来挂起总线。
5. 在协商模式下,当A类设备检测到总线挂起,会断开连接,并切换回主机角色。OTG_FS
控制器将取消DPDM的下拉指示重新执行设备角色。
6. 应用程序必需读取控制器中断寄存器的当前模式位,以确定是否工作在主机模式下。
7. OTG_FS控制器恢复连接,结束HNP协议。
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
27 以太网(ETH):具有DMA控制器的介质访问控制(MAC)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的内容只适用于STM32F107xx产品。
27.1 以太网模块介绍
本部分内容版权归Synopsys Inc所有。已获得使用授权。
STM32F107xx的以太网模块支持通过以太网收发数据,符合IEEE 802.3-2002标准。
STM32F107xx以太网模块灵活可调,使之能适应各种不同的客户需求。该模块支持两种标准
口,连接到外接的物理层(PHY)模块:IEEE 802.3协议定义的独立于介质的接口(MII)和简化的独
立于介质的接口(RMII)。适用于各类应用,如交换机、网络接口卡等。
以太网模块符合以下标准:
IEEE 802.3-2002标准的以太网MAC协议
IEEE 1588-2002的网路精确时钟同步标准
AMBA2.0标准的AHB/从端口
RMII协会定义的RMII标准
27.2 以太网模块主要功能
按不同种类,以太网模块(ETH)主要支持以下功能:
27.2.1 MAC控制器功能
通过外接的PHY接口,支持10/100M/秒的数据传输速率。
通过兼容IEEE 802.3标准的MII接口,外接高速以太网PHY
支持全双工和半双工操作:
支持符合CSMA/CD协议的半双工操作
支持符合IEEE 802.3流控的全双工操作
在全双工模式下,可以选择性地转发接收到的PAUSE控制帧到用户的应用程序
支持背压流控的半双工操作
在全双工模式下当输入流控信号失效时,会自动发送PAUSE帧。
在发送时插入前导符和帧开始数据(SFD),在接收时去掉这些域。
以帧为单位,自动计算CRC和产生可控制的填充位。
在接收帧时,自动去除填充位/CRC为可选项。
可对帧长度进行编程,支持最长为16K字节的标准帧。
可对帧间隙进行编程(40~96位,以8位为单位改变)
支持多种灵活的地址过滤模式:
多达448位完美的目的地址(DA)过滤器,可在比较时屏蔽任意字节。
多达348位源地址(SA)比较器,可在比较时屏蔽任意字节。
64Hash过滤器(可选的),用于多播和单播(目的)地址。
可选的令所有的多播地址帧通过
混杂模式,支持在做网络监测时不过滤,允许所有的帧直接通过。
652/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
允许所有接收到的数据包通过,并附带其通过每个过滤器的结果报告。
对于发送和接收的数据包,返回独立的32位状态信息。
支持检测接收到帧的IEEE 802.1Q VLAN标签。
应用程序有独立的发送、接收和控制接口。
支持使用RMON/MIB计数器(RFC2819/RFC2665)进行强制性的网络统计。
使用MDIO接口对PHY进行配置和管理。
检测LAN唤醒帧和AMDMagic PacketTM帧。
IPv4和由以太网帧封装的TCP数据包的接收校验和卸载分流功能。
IPv4报头校验和以及对IPv4IPv6数据格式封装的TCPUDPICMP的校验和进行检查
的高级接收功能。
支持由IEEE 1588-2002标准定义的以太网帧时间戳,在每个帧的接收或发送状态中加上64
位的时间戳。
两套FIFO:一个2K字节的传输FIFO,带可编程的发送阈值,和一个2K字节的接收FIFO
带可编程的接收阈值(默认值是64字节)
在接收FIFOEOF后插入接收状态信息,使得多个帧可以存储在同一个接收FIFO中,而不
需要开辟另一个FIFO来储存这些帧的接收状态信息。
可以滤掉接收到的错误帧,并在存储-转发模式下,不向应用程序转发错误的帧。
可以转发“好”的短帧给应用程序。
支持产生脉冲来统计在接收FIFO中丢失和破坏(由于溢出)的帧数目。
对于MAC控制器的数据传输,支持存储-转发机制。
根据接收FIFO的填充程度(阈值可编程),自动向MAC控制器产生PAUSE帧或背压信号。
在发送时,如遇到冲突可以自动重发。
在迟到冲突、冲突过多、顺延过多和欠载(underrun)情况下丢弃帧。
软件控制清空发送FIFO
在存储-转发模式下,在要发送的帧内,计算并插入IPv4的报头校验和及TCPUDPICMP
的校验和。
支持MII接口的内循环,可用于调试。
27.2.2 DMA功能
AHB从接口下,支持所有类型的AHB突发传输。
AHB主接口下,软件可以选择AHB突发传输的类型(固定的或者不固定长度的突发)
可以选择来自AHB主接口的地址对齐的突发传输。
优化的DMA传输,传输以帧分隔符为界的数据帧。
支持以字节对齐的方式对数据缓存区寻址。
双缓存区()或链表形式的描述符列表。
描述符的架构,使得大量的数据传输仅需要最小量的CPU介入。
每个描述符可以传输高达8K字节的数据。
无论正常传输还是错误传输都有完整的状态信息报告。
可配置的发送与接收DMA突发传输长度,优化总线使用。
可以设置以不同的操作条件产生对应的中断。
每个帧发送/接收完成时产生中断。
用轮换或固定优先级方式,仲裁DMA发送和接收控制器的优先级。
开始/停止模式。
状态寄存器指向当前发送/接收缓存区。
653/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
状态寄存器指向当前发送/接收描述符。
27.2.3 PTP功能
设置接收和发送帧的时间戳。
粗调和细调的校正方法。
当系统时间比目标时间大时,触发中断。
(通过MCU的复用功能I/O)输出秒脉冲
27.3 以太网模块引脚和内部信号
下表列出了MAC模块的信号以及相应的MII/RMII默认或是重映射的信号,同时也指出了输入或
输出这些信号的引脚和引脚的配置。
190 以太网模块引脚配置
MII
重映射 RMII
重映射
MAC信号 MII默认 RMII默认 引脚配置 引脚
ETH_MDC MDC - MDC - PC1 推挽复用输出,高速(50MHz)
ETH_MII_TXD2 TXD2 - - - PC2 推挽复用输出,高速(50MHz)
ETH_MII_TX_CLK TX_CLK - - - PC3 浮空输入(复位状态)
ETH_MII_CRS CRS - - - PA0 浮空输入(复位状态)
ETH_MII_RX_CLK
ETH_RMII_REF_CLK RX_CLK - REF_CLK - PA1 浮空输入(复位状态)
ETH_MDIO MDIO - MDIO - PA2 推挽复用输出,高速(50MHz)
ETH_MII_COL COL - - - PA3 浮空输入(复位状态)
ETH_MII_RX_DV
ETH_RMII_CRS_DV RX_DV - CRS_DV - PA7 浮空输入(复位状态)
ETH_MII_RXD0
ETH_RMII_RXD0 RXD0 - RXD0 - PC4 浮空输入(复位状态)
ETH_MII_RXD1
ETH_RMII_RXD1 RXD1 - RXD1 - PC5 浮空输入(复位状态)
ETH_MII_RXD2 RXD2 - - - PB0 浮空输入(复位状态)
ETH_MII_RXD3 RXD3 - - - PB1 浮空输入(复位状态)
ETH_MII_RX_ER RX_ER - - - PB10 浮空输入(复位状态)
ETH_MII_TX_EN
ETH_RMII_TX_EN TX_EN - TX_EN - PB11 推挽复用输出,高速(50MHz)
ETH_MII_TXD0
ETH_RMII_TXD0 TXD0 - TXD0 - PB12 推挽复用输出,高速(50MHz)
ETH_MII_TXD1
ETH_RMII_TXD1 TXD1 - TXD1 - PB13 推挽复用输出,高速(50MHz)
ETH_PPS_OUT PPS_OUT - PPS_OUT - PB5 推挽复用输出,高速(50MHz)
ETH_MII_TXD3 TXD3 - - - PB8 推挽复用输出,高速(50MHz)
ETH_RMII_CRS_DV - RX_DV - CRS_DV PD8 浮空输入(复位状态)
ETH_MII_RXD0
ETH_RMII_RXD0 - RXD0 - RXD0 PD9 浮空输入(复位状态)
ETH_MII_RXD1
ETH_RMII_RXD1 - RXD1 - RXD1 PD10 浮空输入(复位状态)
ETH_MII_RXD2 - RXD2 - - PD11 浮空输入(复位状态)
ETH_MII_RXD3 - RXD3 - - PD12 浮空输入(复位状态)
654/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
27.4 以太网模块功能描述:SMIMIIRMII
以太网模块包括一个符合802.3协议的MAC(介质访问控制器)和专用的DMA控制器。该模块支持
默认的独立于介质的接口(MII)和精简的独立于介质的接口(RMII),通过AFIO_MAPR寄存器的选
择位,可以选择使用哪个接口。
DMA控制器通过AHB主和从接口,分别访问MAC控制器和存储器。AHB主接口用于控制数据传
输,AHB从接口则用于访问控制和状态寄存器(CSR)区域。
MAC控制器发送数据前,DMA会从系统存储区读出数据并储存到发送FIFO中。同样地,从
线上收到的以太网帧会储存在接收FIFO中,并由DMA传送到系统存储区。
以太网模块还包括一个SMI接口,用于和外接的PHY通信。一组配置寄存器则允许用户配置
MACDMA控制器,以实现所需要的功能。
注意:
在使用以太网模块时,
AHB
的频率应至少为
25MHz
296 ETH框图
关于AHB的连接请查阅图2:互联型产品的系统结构
27.4.1 站点管理接口(SMI)
站点管理接口(SMI)允许应用程序通过时钟和数据两根线来访问任何的PHY寄存器。这个接口可
以支持多达32PHY
应用程序可以选择32PHY中的任意一个,并访问PHY32个寄存器中的任意一个。但在任意
时刻,只能访问一个PHY的一个寄存器。
在控制器内部,MDC时钟线和MDIO数据线都是作为复用(AF)功能的I/O端口:
MDC:一个周期性的时钟信号,为数据的传输提供时钟,最高频率为2.5MHzMDC信号
的高电平和低电平的最小维持时间为160nsMDC信号的最小周期为400ns。在空闲状态
下,SMI接口将驱动MDC时钟信号保持在低电平状态。
MDIO:数据的输入/输出线,在MDC时钟信号的驱动下,向PHY设备传递状态信息。
297 SMI接口信号
655/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
SMI帧格式
下表列出了SMI接口进行读写操作的帧的数据结构,必需遵循从左至右的发送顺序。
191 管理帧格式
656/754
帧内容
前导符(32 ) 起始符 PADDR RADDR TA 数据(16 ) 操作符 空闲位
1…1 01 10 ppppp rrrrr Z0 dddddddddddddddd Z
1…1 01 01 ppppp rrrrr 10 dddddddddddddddd Z
管理帧包括以下8个部分:
前导符:每个传输(读或者写)都必需以前导符开始,前导符是MDIO线上连续的32个逻辑’1’
信号,和对应MDC线上的32个时钟信号。这部分信号用于和PHY设备建立同步。
起始符:帧的起始符定义为’01’,也就是MDIO线从逻辑’1’降到’0’再回到’1’,以标记传输的
开始。
操作符:用于定义操作的类型:读或者写。
PADDRPHY的地址有5位,可以区分32PHY。高位先被发送和接收。
RADDR:寄存器的地址有5位,可以寻址32个独立的寄存器。高位先被发送和接收。
TA2位的转向符,插在RADDR和数据(DATA)之间,用于避免读操作时发生冲突。读操作
时,在TA的这2位时间内,MAC控制器保持MDIO线的高阻状态,PHY设备则先保持1位的
高阻状态,在第2位时输出’0’信号。写操作时,在TA的这2位时间内,MAC控制器驱动
MDIO线输出’10’信号,而PHY设置则保持高阻状态。
DATA(数据)16位的数据域。最先发送和接收的是ETH_MIID寄存器的第15位。
空闲位MDIO线保持在高阻状态。取消所有的三态驱动,由PHY的上拉电阻保证MDIO线
处于逻辑’1’
SMI 写操作
当应用程序设置了MII写和忙位(以太网MAC MII地址寄存器(ETH_MACMIIAR))SMI接口会向
PHY 传送PHY 地址和PHY 寄存器地址,然后传输数据(以太MAC MII 数据寄存器
(ETH_MACMIIDR))。在SMI接口传输数据的过程中,不能修改MII地址寄存器和MII数据寄存器
的内容;在此过程中(忙位为高),对MII地址寄存器或MII数据寄存器的写操作将被忽视,并且不
影响整个传输的正确完成。当完成写操作时,SMI接口将清除忙位,告知应用程序。
下图描述了写操作时的帧格式
298 MDIO时序和帧格式图-写操作
SMI读操作
当程序把以太网MAC MII地址寄存器(ETH_MACMIIAR)MII忙位置为’1’ ,而保持MII写位
’0’SMI接口则发送PHY地址和PHY寄存器地址,执行读PHY寄存器的操作。在整个传输过
程中,应用程序不能修改MII地址寄存器和MII数据寄存器的内容。在传输过程中(忙位为高),对
MII地址寄存器或者MII数据寄存器的写操作将被忽视,并且不影响整个传输的正确完成。在读操
作完成后,SMI接口将清除忙位,并把从PHY读回的数据更新到MII数据寄存器中。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
下图描述了读操作的帧格式
299 MDIO时序和帧格式图-读操作
SMI时钟选择
MAC控制器发起SMI的读/写操作,SMI接口的时钟源由AHB时钟分频得到。根据MII地址寄存器
中设置的不同时钟频率范围,需要选择不同的分频因子。
下表列出了这个时钟范围。
192 时钟范围
选择位 AHB时钟 MDC时钟
0000 60~72MHz
AHB时钟/42
0001 保留
0010 20~35MHz
AHB时钟/16
0011 35~60MHz
AHB时钟/26
0100010101100111 保留
27.4.2 独立于介质的接口:MII
独立于介质的接口(MII)用于MAC子层和PHY之间的互联,允许10M/s100M/s数据传输。
300 独立于介质的接口(MII)信号线
MII_TX_CLK:为传输发送数据而提供连续的时钟信号,对于10M/s的数据传输,此时钟
2.5MHz,对于100M/s的数据传输,此时钟为25MHz
MII_RX_CLK:为传输接收数据而提供连续的时钟信号,对于10M/s的数据传输,此时钟
2.5MHz,对于100M/s的数据传输,此时钟为25MHz
657/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
MII_TX_EN:传输使能信号,表示MAC正在输出要求MII接口传输的数据。此使能信号必需
与数据前导符的起始位同步(MII_TX_CLK)出现,并且必需一直保持到所有需要传输的位都
传输完毕为止。
MII_TXD[3:0]:由MAC子层控制,每次同步地传输4位数据,数据在MII_TX_EN信号有效时
有效。MII_TXD[0]是数据的最低位,MII_TXD[3]是最高位。当MII_TX_EN信号无效时,传
输的数据对于PHY无效。
MII_CRS:载波侦听信号,由PHY控制,当发送或接收的介质非空闲时,使能此信号。当
传送和接收的介质都空闲时,PHY会撤消此信号。PHY必需保证MII_CS信号在发生冲突的
整个时间段内都保持有效。 不需要此信号与发送/接收的时钟同步。在全双工模式下,此信
号的状态对于MAC子层无意义。
MII_COL:冲突检测信号,由PHY控制,当检测到介质发生冲突时,使能此信号,并且在
整个冲突的持续时间内,保持此信号有效。此信号不需要和发送/接收的时钟同步。在全双
工模式下,此信号的状态对于MAC子层无意义。
MII_RXD[3:0]:由PHY控制,每次同步地发送4位需要接收的数据,数据在MII_RX_DV信号
有效时有效。MII_RXD[0]是数据的最低位,MII_RXD[3]是最高位。当MII_RX_EN无效,而
MII_RX_ER有效时,PHY会传送一组特殊的MII_RXD[3:0]数据(请参考表194),来告知一些
特殊的信息。
MII_RX_DV:接收数据使能信号,由PHY控制,当PHY准备好卸载和解码数据供MII接收
时,使能该信号。此信号必需和卸载好的帧数据的首位同步(MII_RX_CLK)出现,并在数据
完全传输完毕之前,都保持有效。在传送最后4位数据后的第一个时钟之前,此信号必需变
为无效状态。为了正确的接收一个帧,MII_RX_DV信号必需在整个帧传输期间内都保持有
效,有效电平不能晚于数据线上的SFD位。
MII_RX_ER:接收出错信号,保持一个或多个时钟周期(MII_RX_CLK)的有效状态,指示
MAC子层在帧内检测到了错误。错误情况必需配合MII_RX_DV的状态,详见表194
193 发送接口信号编码
MII_TX_EN MII_TXD[3:0] 描述
0 00001111 正常的帧间隔
1 00001111 正常的数据传输
194 接收接口信号编码
MII_RX_DV MII_RX_ERR MII_RXD[3:0] 描述
0 0
0000 1111 正常的帧间隔
0 1 0000
正常的帧间隔
0 1
0001 1101 保留
0 1 1110
失败的载波指示
0 1 1111
保留
1 0
0000 1111 正常的数据接收
1 1
0000 1111 数据接收出错
MII时钟源
如下图所示,为了产生TX_CLKRX_CLK时钟信号,外接的PHY模块必需有来自外部的
25MHz时钟驱动。除了使用外部的25MHz晶体提供这一时钟外,STM32F107xx微控制器也可以
通过MCO引脚来提供这一时钟;此时需要合适地配置PLL将来自外部25MHz晶体的MCU时钟
MCO引脚输出出去。
658/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
301 MII时钟源
27.4.3 精简的独立于介质的接口:RMII
精简的独立于介质接口(RMII)规范减少了与10/100M/s通信时,STM32F107xx太网模块和
外部以太网之间的引脚数。根据IEEE802.3u标准,MII接口需要16个数据和控制信号引脚,而
RMII标准则将引脚数减少到了7(减少了62.5%的引脚数目)
RMII模块用于连接MACPHY,该模块将MACMII信号转换到RMII接口上。RMII模块具有以
下特性:
支持10M/s100M/s的通信速率。
时钟信号需要提高到50MHz
MAC和外部的以太网PHY需要使用同样的时钟源
使用2位宽度的数据收发
302 精简的独立于介质的接口信号
RMII时钟源
如下图所示,STM32F107xx控制器可以从MCO引脚提供50MHz时钟信号,当然用户需要配置
PLL来产生这一时钟。
659/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
303 RMII时钟源
27.4.4 MII/RMII的选择
通过AFIO_MAPR寄存器的第23MII_RMII_SEL位,可以选择使用MII或者RMII模式。必需在
以太网控制器处于复位状态时、或者在使能时钟前,选择好MII/RMII模式。
MII/RMII内部时钟结构
如下图所示,内部的时钟结构应能支持MIIRMII模式,并且支持10100M/s的通信速率。
304 内部时钟结构
AFIO_MAPR寄存器的第23MII_RMII_SEL位决定选择使用MII/RMII接口。
为了节省引脚,RMII_REF_CKMII_RX_CLK这两个时钟信号复用同一个GPIO端口。
27.5 以太网模块功能描述:MAC 802.3
IEEE802.3国际标准为局域网(LANs)定义了CSMA/CD(带冲突检测的载波侦听多路访问)的访问
方式。
以太网模块由MAC 802.3(介质访问控制器)、独立于介质的接口(MII)和一个专用的DMA控制器
组成。
其中,MAC模块实现了LAN CSMA/CD的子层,适用于以下系统:10M/s100M/s数据传
输率的基带和宽带系统。支持全双工和半双工的操作模式。冲突检测的访问方式,仅适用于半
双工模式。支持MAC控制帧子层。
MAC子层配合数据链路控制程序,实现以下功能:
660/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
数据封装(传送和接收)
帧的组装(帧间隔和帧同步)
寻址(管理源地址和目的地址)
错误检测
介质访问管理
介质分配(防止冲突)
冲突解决(处理冲突)
通常有两种模式可以操作MAC子层:
半双工模式:站点通过CSMA/CD算法来抢占对物理介质的访问。
全双工模式:满足以下条件时,同时进行收发而不处理冲突(不使用CSMA/CD)
物理介质支持同时进行收发操作。
只有两个站点接入LAN
两个站点都配置为全双工模式。
27.5.1 MAC 802.3 帧格式
MAC模块实现了IEEE 802.3-2002标准定义的MAC子层和可选的MAC控制子层(10/100M/s)
功能。
有两种帧格式使用CSMA/CD MAC的数据通信系统:
基本的MAC帧格式
带标签的MAC帧格式(对基本的MAC帧格式的扩展)
306
661/754
和图307描述了帧结构(带标签的和不带标签的),包括以下部分:
前导符:7个字节,用于同步(PLS电路)
十六进制的值:55-55-55-55-55-55-55
二进制:01010101 01010101 01010101 01010101 01010101 01010101 01010101 (从右
至左的传输)
帧首符(SFD)1个字节,用于指示帧首。
十六进制的值:D5
二进制:11010101 (从右至左的传输)
目的和源地址:6个字节,用以下方式指示目的地址和源地址(请参考图305)
每个地址都是48位。
目的地址的LSB(I/G)用于区分单独的地址(I/G=0)或是群地址(I/G=1)。一个群地址
可以指向0个、1个或多个、或LAN中所有的站点。源地址中的第一位(LSB)位为保留
位,固定为0
地址的第二位(U/L)用于区分单个(U/L=1)地址或是全球(U/L=0)址。对于广播地址,
此位固定为1
地址位的每个字节都必需遵循低位先发的传输规则。
地址的分配有以下的类型:
单独的地址:这是指向网络里的某个特定站点的物理地址。
群地址:这是指向给定网络里的一个或多个站点的群体地址。有以下两种多发地址:
多播群地址:指向一群逻辑上关联的站点的地址。
广播地址:是一个唯一的、预先约定好的多发地址(目的地址位全为1),总是指向给
LAN中的所有站点。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
305 地址域格式
QTag前缀:位于源地址域和MAC”客户端长度/类型域之间的4字节标识符。此标识符属于
带标签的MAC帧,是基本帧(不带标签)的扩展。基本帧不含此标识符。此标识符包括:
作为常数的2个字节的长度/类型域,表示协议类型(大于0x0600),等于802.1Q标签
协议类型(0x8100)的值。这个常数域用于区分带标签和不带标签的MAC帧。
2个字节的域,包括标签的控制信息。包含以下几部分:3位的用户优先级,1位的规
范格式指示位(CFI)12位的VLAN标识符。带标签的MAC帧比基本帧多了QTag前缀
4字节。
MAC客户端长度/类型:2个字节,根据其值的不同可分为两种含义(互斥的)
如果2个字节的值等于或者小于maxValidFrame(1500)那么这两个字节代表后续的
802.3帧的数据域MAC客户数据字节数(代表长度)
如果2个字节的值等于或者大于MinTypeValue(15360x0600),那么这两个字节代表
与以太网帧相关的MAC客户协议类型(代表类型)
如果数据域的长度小于协议规定的最小可接收长度,则忽略长度/类型域的数据,在数据
之后、FCS(帧校验序列)域之前,添加填充(PAD)域。数据在传送和接收长度/类型域时,都
是高位在前。
对于介于maxValidLengthminTypeValue(范围不相交)值之间的长度/类型值,协议没有定
MAC子层如何处理。这样的数据可能被MAC子层接受也可能不被接受。
数据和填充域:n个字节的数据。数据字段完全透明化,也就是说任意序列的数值都可以出
现在数据段中。如果存在填充域,那么填充的长度由数据的长度决定。数据和填充域的最
大最小长度如下:
最大长度为1500个字节。
不带标签的MAC帧的最短长度为46字节。
带标签的MAC帧的最短长度为42字节。
如果数据的长度小于标准要求的最短长度(对于标签帧为42字节,对于非标签帧为46
),那么就添加填充域,以符合标准要求的长度。
帧校验序列:4个字节的循环冗余校验值(CRC)CRC计算包含以下几个域的数值:源地
址、目的地址、QTag前缀、长度/类型、LLC数据和填充(即计算除了前导和SFD域以外的所
有数据)。计算多项式如下:
G(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
一个帧的CRC值计算如下:
帧的前两位互补。
帧的n位作为(n-1)次多项式M(x)的系数。目的地址的首位作为xn-1项的系数,数据域的末位
作为x0项的系数。
M(x)多项式乘以x32,再除以G(x),产生一个次数31的余数R(x)
R(x)多项式的系数就作为32位序列。
对此序列取补就是CRC校验值。
帧校验序列传输的就是32位的CRC校验值。x32的系数最先传输,x0的系数最后传输。
662/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
306 MAC帧格式
307 带标签的MAC帧格式
除了FCS域,MAC帧的序列都按照低位先出的次序进行传输。
发生以下情况,就认定MAC帧为无效:
帧长度与定义在长度/类型域的值不符。如果长度/类型域的数据为类型值,那么就默认帧长
度与定义值一致(没有无效帧)
帧长度不是字节的整数倍(有多余的位)
FCS域中的CRC值与实际帧计算出的CRC值不匹配。
27.5.2 MAC帧的传输
DMA控制器管理所有的传输。DMA将以太网帧从系统存储区读出并存入FIFO中,帧再弹出并传
MAC控制器。当帧的最末位传输完毕,传输状态会由MAC控制器返回到DAM控制器中。发送
FIFO深度为2K字节。FIFO的填充程度会反馈到DMA控制器,DMA通过AHB接口发出从系统
存储区获取数据的请求。数据会通过AHB主接口存入FIFO中。
663/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
当检测到SOF信号后,MAC接收数据,并开始传输数据至MII。由于各种延迟因素,比如IFG
迟、发送前导/SFD域的时间、和半双工模式下的退避等待等,从应用程序启动传输,到数据帧
发送到MII的时间是不定的。当EOF信号传输到MAC控制器后,控制器完成正常传输,并返还传
输状态到DMA控制器。当传送中发生了冲突(在半双工模式下)MAC控制器会标注在传输状态
信息字中,然后接收并抛弃之后的数据,直到收到下一个SOF信号。在检测到来自MAC(状态
信息字中的)重试请求时,应当从SOF开始重发同样的帧。在传输时,如果不能及时连续地提供
数据,MAC会标示一个数据下溢状态。在一个帧的传输过程中,如果MAC收到了SOF信号却没
有收到EOF信号,MAC会忽略收到的SOF,并把下一个帧作为前一个帧的延续。
从发送FIFO弹出数据到MAC控制器的操作有两种模式:
在门限模式下,当FIFO中的数据达到了设置好的阈值时(或者在达到阈值之前写入了
EOF),数据会弹出FIFO并送入到MAC控制器中。这个阈值可以通过ETH_DMABMR寄存器
TTC位来设置。
在存储-转发模式下,只有当一个完整的帧写入FIFO之后,数据才会被送入MAC控制器。
如果发送FIFO的长度小于要发送的以太网帧,那么在发送FIFO即将全满时,数据会被送入
MAC控制器。
可以通过设置FTF(ETH_DMAOMR寄存器的第20)来清空发送FIFO中的内容。此位由硬件
清零,并将FIFO的指针初始化至默认值。如果在帧数据传送MAC控制器的过程中设置了FTF
位,FIFO会被认为为空,传送停止。这将导致MAC发送器的数据下溢事件,并传送相应的状
信息字到DMA控制器。
自动计算CRC和填充字节
如果提请传送的数据少60(DA+SA+LT+数据),控制器会添加一串0到帧中,以符合IEEE802.3
规范定义的最少数据长度为46字节的标准。当然也可以配置MAC控制器不自动添加填充字节。
在帧发送时,循环冗余校验值(CRC)会自动添加到帧的校验序列(FCS)域。如果配置MAC控制器
不在以太网帧末自动添CRC值,计算好CRC值不会被传送。有一种特例,即当MAC控制器
配置为当帧(DA+SA+LT+数据)少于60字节,自动添加填充字节时,不管是否配置了自动添加
CRC,都会添加CRC值到填充过的帧结尾。
CRC生成器会为以太网帧的FCS域计算32位的CRC值。计算时使用如下的多项式:
G(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
发送协议
MAC控制器管理以太网帧的发送。控制器实现了以下功能来符合IEEE802.3/802.3z规范:
生成前导符和SFD
在半双工模式下产生拥塞信号
控制啰嗦(Jabber)超时
控制半双工模式下的流控(背压)
产生所传输帧的状态信息
包含符合IEEE1588规范的时间戳逻辑
当需要发送一个新的帧,MAC控制器会先发送前导符和SFD,然后发送数据。前导是7个字节
”10101010”SFD1个字节的”10101011”。碰撞窗口定义为1个间隙时间(对于10/100M/s
的传输速率来说是512位的时间)。堵塞信号仅仅在半双工模式下才产生,在全双工模式下不会
产生堵塞信号。
MII模式下,如果在帧传送的任意时刻(从帧头到CRC的末位)发生了冲突,MAC控制器会发送
一个0x5555 555532位堵塞信号,通知所有其他站点发生了冲突。如果冲突发生在传送前导
符期间,MAC控制器会完成前导符和SFD域的发送,紧跟着发送堵塞信号。
啰嗦(Jabber)定时器用来在发送了超过2048字节(默认值)的数据时把以太网帧切断。MAC控制器
在半双工模式下使用顺(Deferral)机制的流控(背压)。当应用程序要求停止接收帧时,只要使
能了传输流控,MAC控制器无论是否在接收帧,都会发送32字节的堵塞信号;这将导致传输冲
突和远程站点的后撤。应用程序可以通过设置ETH_MACFCR寄存器的BPA(0)来使能传输
流控。如果应用程序提出了发送帧的请求,控制器会马上安排并传送帧,无论是否发生了
664/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
压。需要注意的是,如果背压持续了一段时间(有超过16个的连续冲突事件发生),远程站点会由
于过多的冲突而放弃传输。如果在发送时使能了IEEE 1588时间戳功能,则在向MII总线传送
SFD域时,会添加当时的系统时间。
传输调度
MAC负责调度帧在MII上的传输。MAC管理两个帧之间的间隔,并遵循半双工模式下的截断二进
制指数退让算法。MAC会在符合IFG和退让延迟的情况下启动传输。在两个传输的帧之间,
MAC在一定时间内会保持空闲状态,这段时间就是配置好的帧间隔(通过ETH_MACCR寄存器的
IFG)。如果一个帧早于配置好的IFG时间到达,MII需要等待来自MAC的使能信号,才能开
始传输下一个帧。一旦MII的载波信号消失MAC即启动它的IFG计数器。全双工模式下,配置
好的IFG时间到时后,MAC则使能传输。在半双工模式下,如果IFG时间配置为96个比特的时
间,MAC将遵循IEEE 802.3规范的4.2.3.2.1章节定义的规则。如果在整个IFG时间间隔的前三分
之二(64个比特时间)的时间段里检测到了载波,MAC将复位IFG计数器。如果在IFG时间间隔的
后三分之一的时间段里检测到了载波,MAC将继续IFG计数,并在达到IFG间隔时间后使能传
输。在半双工模式下,MAC遵循截断二进制指数退让算法。
传输流控
如果设置了传输流控位(ETH_MACFCR寄存器的TFE),在全双工模式下,MAC在需要的时
候产生并传输Pause帧。Pause帧带有计算好的CRC值。可以有两种方法来启动产生Pause帧。
当应用程序把ETH_MACFCR寄存器的FCB位置’1’,或当接收FIFO全满(包缓存)时,会把Pause
帧发送出去。
当设置ETH_MACFCR寄存器的FCB位为’1’来请求进行流控时,MAC会产生并传输一个单
独的Pause帧。这个Pause帧指定的暂停时间为ETH_MACFCR寄存器中配置好的暂停时间
值。如果想延长暂停时间,或者中止前一个Pause帧指示的暂停,需要重新配置寄存器中的
暂停时间(ETH_MACFCR寄存器的PT),并请求传输一个新的Pause帧。
如果使能了流控,当接收FIFO满时,MAC会产生并传输一个Pause帧。这个Pause帧指定
的暂停时间为ETH_MACFCR寄存器中配置好的暂停时间值。如果在达到配置好的暂停时间
极限(ETH_MACFCR寄存器的PLT)时,接收FIFO仍然为满,MAC会再传输一个Pause
帧。如果接收FIFO一直为满,则将一直重复这个过程。当接收FIFO不为满而暂停时间仍未
到时,MAC会传输一个暂停时间为0Pause帧,指示远程站点结束暂停,本地缓存区已经
准备好接收新的数据帧。
单包的传输过程
下面列出了传输过程中的一系列事件:
1. 如果有数据需要传输,DMA控制器通过AHB主接口从存储区读出数据,并转发到FIFO
中。FIFO将持续接收数据,直到整个帧都传输完毕。
2. 当达到FIFO的阈值,或是整个数据包都已经存储在FIFO中,数据帧将从FIFO中弹出并送
MAC控制器。DMA将持续从FIFO中弹出数据直到整个数据包都被传送到MAC。在帧传
输完毕之后,DMA控制器会收到MAC送出的状态信息。
传输过程——缓存区中有两个数据包
1. 由于DMA控制器必须先更新描述符的状态信息,再将描述符释放给应用程序(CPU),因此
在发送FIFO中至多只能有2个帧。只有在OSF(Operation on second frame第二帧操作)
’1’时,DMA才能读取内存里的第二帧数据,并把它们送进FIFO。如果该位不为’1’,那
么只有在MAC发送完第一帧数据,且DMA释放描述符后,DMA才能读取第二帧的数据。
2. 如果OSF位为’1’DMA在把第一帧数据传输到FIFO后立刻开始取第二帧的数据,而不等
待更新第一帧的描述符状态信息。与此同时,在MAC控制器发送第一帧数据的时候,
FIFO接收第二帧数据。一旦MAC把第一帧数据发送完毕,就会传送更新的状态信息给
DMA控制器。如果DMA已经把第二帧的全部数据传送到FIFOMAC必须等到更新完第一
帧的状态信息才能发送下一帧数据。
665/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
遇到冲突时重新发送
半双工模式下,在帧发往MAC的时候有可能在MAC线路上发生冲突事件。这样MAC有可能在
FIFO接收完这帧数据前就尝试重新发送。这时,如果重新发送开始,就需要再次把数据从FIFO
中弹出。但是在FIFO控制器把96字节的数据弹出供MAC发送以后,就会释放这些数据的空间
允许DMA往那里推进新的数据。这意味着如果帧发出的数据数超过该门限(96字节)或者MAC
制器提示迟到冲突事件时,不能进行重新发送。
清空发送FIFO操作
MAC允许软件使用ETH_DMAOMR寄存器的FTF(20)来清空发送FIFO。即使发送FIFO正在
把一帧数据发送给MAC控制器,也会立即执行清空操作:清空发送FIFO,复位相应的指针为初
始的状态。这个操作会导致MAC发送端发生数据下溢事件,中止发送当前帧,并在该帧的状态
信息里同时标记数据下溢位和清空位(TDES0的位1和位13)。在执行清空操作时,发送FIFO不再
从应用程序(即从DMA)处接收数据,并把发送状态信息字返回应用程序,通知受影响的帧的数
(包括只有部分被清空的帧)。对于完全被清空的帧,设置了帧清空标志位(TDES013)。在
应用程序(DMA)接收到全部被清空帧的状态信息字以后,清空操作完成。随后ETH_DMAOMR
寄存器的FTF位被清’0’。这时,允许FIFO从应用程序(DMA)接收新帧。清空操作后,FIFO会忽
略所有不以SOF起始符开头的数据。
发送状态信息字
在以太网帧传输到MAC控制器,并且MAC控制器把该帧发送出去以后,会把发送状态信息返回
应用程序。发送状态信息的具体含义与TDES0[23:0]的描述一致。如果使能了IEEE 1588时间
戳功能,会和发送状态信息一起返回一个特别的64位时间戳。
发送校验和模块
诸如TCPUDP的通讯协议都包含校验和域,用来检测数据在网络上传输的完整性。以太网最
广泛的应用是收发封装TCP或者UDP数据的IP数据包,因此以太网控制器具有发送校验和的
功能,支持计算校验和,并在发送时插入计算结果,以及在接收时侦测校验和错误。本节描述
了发送帧的校验和模块的操作功能。
注意:
1.
计算
TCP
UDP
ICMP
的校验和都是针对整个帧的,然后插入相应的数据报头的校验和域。
因此,只有在发送
FIFO
设置成存储
-
转发模式的时候
(ETH_DMAOMR
寄存器的
TSF
位为
’1’)
才能
使能此功能。如果
MAC
控制器设置为门限模式,发送校验和模块的功能无效。
2.
在数据帧发送到
MAC
控制器发送端前,必须保证发送
FIFO
的深度足够容纳一个完整的帧。如
FIFO
的深度小于输入的以太网帧长度,即便在存储
-
转发模式下,有效荷载数据
(TCP/UDP/ICMP)
的校验和功能无效,而只会计算和修改
IPv4
报头的校验和域。
发送校验和模块支持2种校验和计算和插入的方法。可以通过帧描述符的CIC(TDES1的位
28:27,请参考后续的TDES1:发送描述符字1”)
欲了解IPv4TCPUDPICMPIPv6ICMPv6报头的规范,请分别查阅IETF规范RFC
791RFC 793RFC 768RFC 792RFC 2460RFC 4443
IP头校验和
IPv4数据包里,16位的报头校验和域(IPv4数据包的第1112字节)指示了报头域数据的
完整性。如果以太网帧的类型域值为0x0800并且IP数据包的版本域值为0x4,校验和模块就
检测到IPv4数据包。于是MAC不管输入帧的校验和域内容,直接以计算结果取而代之。
IPv6的报头不包含校验和域,因此校验和模块不会改变IPv6报头的值,而是通过发送状态
信息的IP报头错误状态标志位(TDES016)反映这个报头的校验和计算结果;在以太网类型
域以及IP报头版本域取值不匹配,或者以太网帧数据数目不够IP报头的数据长度域时,该标
志位被置为’1’。换而言之,该位在IP报头出现下列错误时被置为’1’
a) 对于IPv4数据包
接收到的以太网类型域0x0800,但IP报头的版本域不等于0x4
IPv4报头长度域取值小于0x5(20字节)
帧的总长度小于IPv4报头长度域的值
b) 对于IPv6数据包
666/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
接收到的以太网类型域为0x86DD,但IP报头的版本域不等于0x6
帧在完整接收IPv6报头(40字节)或者扩展报头(扩展报头包含报头长度域)之前结束。
即使校验和模块检测到这样的报头错误,如果以太网类型域提示载荷数据为IPv4
型,仍然会插入一个IPv4的报头校验和。
TCP/UDP/ICMP校验和
TCP/UDP/ICMP校验和通过分析IPv4IPv6报头(包括扩展报头)来判断封装的数据是TCP
UDP或者ICMP
注意 :
a) 对于非TCPUDP或者ICMP/ICMPv6的有效数据,校验和功能无效,不改动帧的数据
b) 对于不完整的IP(IPv4或者IPv6),包含安全功能的IP(如验证报头或者封装有安全数
),以及带路由报头的IPv6帧,校验和功能无效。
校验和模块会对TCPUDP或者ICMP的数据进行计算,并插入报头的相应域。它有以下2
种工作模式 :
第一种模式:校验和计算不包括TCPUDP或者ICMPv6的伪报头,假设报头的校验
和值就是输入帧的校验和域的数值。校验和域的内容会被包含在校验和的计算中,并
最终被计算的结果取代。
第二种模式:不管输入帧的校验和域的内容,校验和的计算包括TCPUDP或者
ICMPv6的伪报头数据,最终的计算结果将取代校验和域的原有内容。
注意:无论采用哪种模式,对于IPv4上的ICMP数据包,ICMP数据包的校验和域内容必须
0x0000;该类数据包没有定义伪报头。如果数据包的校验和域不是0x0000,可能会在数
据包中插入不正确的校验和数值。
发送状态信息向量的数据校验和错误状态位(12)标示了校验和操作的结果。如果以下任意
一种情况发生,那么有效载荷数据校验和错误状态位置’1’
在存储-转发模式下,在帧结尾没有写入FIFO的情况下,帧就被转发给MAC发射端
接收到的数据包少于IP报头数据长度域指示的字节数目
如果数据包长度大于给出的数据长度,多余的数据会被当成充填字节而丢弃,而不会报告
错误。如果检测到第一类错误,则不改变TCPUDP或者ICMP报头。如果检测到第二类错
误,仍然会把校验和计算结果插入报头的相应域。
MII/RMII位传输顺序
下图显示了MII上的4位数据,以22位数据的形式发送到RMII的顺序。先发送低2(D0
D1),再发送高2(D2D3)
308 位传输顺序
667/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
MII/RMII传输时序图
309 无冲突时的传输
310 有冲突时的传输
668/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
下图显示在MIIRMII上帧的传输
311 MIIRMII模式下的帧传输
27.5.3 MAC帧的接收
MAC接收到的帧都会被送入接收FIFO中。一旦接收到的数据数目超过了预先设定的阈值(
ETH_DMAOMR寄存器的RTC域设定),控制器就会把FIFO的状态通知DMA,由DMA启动的预
设传输,把数据通过AHB接口送出。
在直通模式(默认模式)下,如果FIFO接收到64字节(可通过ETH_DMAOMR寄存器的RTC设置)
数据或者完整的帧,就开始从FIFO中弹出数据,并通知DMA接收。一DMA开始向AHB接口传
送数据,就会持续从FIFO中弹出数据,直到完成整个数据包的传输。FIFO转发完EOF后,就会
弹出接收状态信息字并将其发送给DMA控制器。
在接收FIFO存储-转发模式(通过ETH_DMAOMR寄存器的RSF位设置)下,只有在接收FIFO完整
地收到一个帧后,DMA才能将其读出。此模式下,如果MAC设置成丢弃所有错误帧,那么DMA
只会读出合法的帧,并转发给应用程序。而在直通模式下,一部分错误的帧并没有被丢弃,这
是因为在帧结尾才会接收到错误状态信息,而这时帧的起始部分已经被从FIFO中读出来了。
一旦MACMII上检测到SFD就会启动接收过程。MAC控制器在处理帧之前会剥离前导符
SFD。会通过过滤器检查帧的报头,并用FCS域核对帧的CRC值。如果帧没能通过地址滤波
器,MAC控制器就会丢弃该帧。
接收协议
MAC会剥离接收到帧的前导符和SFDMAC一旦检测到SFD,就从SFD后的第一个字节(目的地
)为开始向FIFO发送以太网帧数据。如果使能IEEE1588时间戳,会在检测到任意帧的SFD
的时候记录下系统的当前时间。除非这个帧没有通过地址过滤器而被丢弃,MAC还会把这个时
间戳转交给应用程序。
如果接收到的帧长度/类型域的值小于0x600,并且把MAC配置成CRC/充填自动剥离,那么
MAC会在向接收FIFO发送完帧长度/类型域规定数目的帧数据后,开始丢弃剩下的字节(包括
FCS)。如果长度/类型域的值大于或等于0x600,不管自动CRC剥离选项怎么设置,MAC都会
把所有接收到的以太网帧数据发送到接收FIFO。默认地,MAC打开看门狗定时器,即会切断
度大于2048字节的帧(DA + SA + LT + 数据 + 填充 + FCS)。可以通过MAC配置寄存器的看门狗
失能位(WD)来关闭这项功能。然而,即使关闭了看门狗定时器,MAC仍然会切断长度大于
16KB的帧,并报告一个看门狗超时事件。
669/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
接收CRC:自动CRC和填充剥离
MAC会检查接收到帧的CRC错误。MAC会计算从接收到帧目的地址域FCS域的32CRC
值。计算使用下面的多项式:
G(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
无论如何设置自动充填/CRC剥离选项,MAC都会把完整的帧接收下来,并计算收到帧的
CRC
接收校验和模块
不管是IPv4还是IPv6,都需要检测接收到的以太网帧数据的完整性。设置ETH_MACCR寄存
器的IPCO位,可以使能接收校验和模块。MAC检验以太网帧的类型域是0x0800还是0x86DD
来判别是IPv4帧还是IPv6帧。这个方法也用于带VLAN标签的帧识别。接收校验和模块会计算
IPv4报头的校验和,检查它是否与IPv4报头的校验和域的内容匹配。在以太网类型域值指示的
数据类型与IP报头版本域不匹配,或者接收到的帧长少于IPv4报头长度域指示的长度,或者
IPv4IPv6报头少于20字节时,设置IP报头错误位为’1’。接收校验和模块还能识别IP数据包的
数据类型是TCPUDP还是ICMP,并按照TCPUDPICMP的规范计算它们的校验和。计算
包括了TCP/UDP/ICMPv6伪报头的数据,接收到的校验和数据与计算的结果比较,比较的结果
反映在接收状态信息字的数据校验和错误位;该位也会在收到的TCPUDP或者ICMP数据长度
IP报头给出的长度不符时置’1’。正如前述TCP/UDP/ICMP校验和段落描述的那样,接收校验
和模块不计算下列情况:不完整的IP数据包、带安全功能的IP数据包、IPv6路由报头以及数
类型不是TCPUDP或者ICMP的数据包。如后续的RDES0:接收描述符字0段落所述,接收
状态信息标示了校验和功能是否生效。MAC制器不会对接收到的以太网帧添加任何校验字
节。
如后续的RDES0:接收描述符字0段落所述,寄存器位的含义示于下表:
195 帧的状态
18:以太
网帧
27:报头
校验和错误
28:校
验和错误 帧状态信息
0 0 0 该帧是一个802.3(长度域值小于0x0600)
1 0 0 IPv4/IPv6帧,未发现校验和错误
1 0 1 IPv4/IPv6帧,发现校验和错误(PCE位为1)
1 1 0 IPv4/IPv6帧,发现IP报头校验和错误(IPCO HCE)
1 1 1 IPv4/IPv6帧,PCE位和IPCO HCE位都为’1’
0 0 1 IPv4/IPv6帧,不带IPHCE位,不支持这种类型,检验功能无效
0 1 1 帧类型既不是IPv4也不是IPv6,校验和模块功能失效
0 1 0 保留
接收帧控制器
如果MAC CSR过滤器寄存器的RA位为’0’MAC会根据帧的目的/源地址进行过滤(如果不希望接
收诸如过短帧、CRC错误等坏帧,则需要进行另一个层次的过滤)。所有不能通过过滤器的帧,
会被丢弃而不会被转给应用程序。如果在接收过程中动态地修改了过滤器参数,并且发生未通
过目的地址/源地址过滤器的情况,那么该帧的其余部分会被丢弃,同时更新接收状态信息字(
长度标志为0CRC错误标志位,帧过短错误标志位置’1’),表示帧未通过过滤器。在以太网掉
电模式下,丢弃所有帧,而不转发给应用程序。
接收流控
仅在全双工模式下,MAC能够检测PAUSE帧,并按照PAUSE帧中的参数,在一定时间内暂停
发送数据。设置ETH_MACFCR寄存器的RFCE位,可以使能或者取消PAUSE帧检测功能。一
旦使能接收流控功能,就会监视所有接收到帧的目的地址,看该地址是否等于控制帧的多播地
(0x0180 C200 0001;如果相符(收到帧的目的地址匹配预留的控制帧目的地址)MAC会根据
ETH_MACFFR寄存器的PCF位的值,来决定是否将接收到的控制帧转发给应用程序。
670/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
MAC也会对接收到帧的类型域、操作数域和PAUSE时间域进行解码。如果状态信息指示帧长为
64字节,并且没有侦测到CRC错误,那么MAC发送端会暂停一段时间发送数据,这段时间的长
度为得到的PAUSE时间值乘以间隙时间(10M/s100M/s模式,间隙时间都是64字节)
在暂停期间,如果接收到另一个PAUSE时间为0PAUSE帧,MAC会清除PAUSE的时间,重
新开始发送数据。
如果接收到的控制帧,类型域不匹配(0x8808)、操作数不匹配(0x00001)、帧长度不符(64
)、或者检测到CRC错误,那么MAC不会暂停发送数据。
如果PAUSE帧的目的地址是多播地址,那么MAC基于地址匹配对帧进行过滤。
如果PAUSE帧的目的地址是单播地址,那么MAC对帧的过滤就是检查目的地址是否匹配MAC
0寄存器,同时检查ETH_MACFCR寄存器的PCF位是否为’1’(检测目的地址是单点发送地址的
PAUSE)PCF(ETH_MACFFR的位[7:6])的功能是在地址过滤的基础上进一步控制对控制
帧的过滤。
多个帧的接收处理
由于帧的状态信息紧随在帧数据之后。因此只要FIFO未满,就可以存放任意数量的帧。
错误处理
如果在从MAC接收到EOF之前,接收FIFO就满了,会报告溢出错误并丢弃整个帧,同时溢出计
数器(位于ETH_DMAMFBOCR寄存器)1。状态信息会指出由于溢出,造成某个帧不完整。根
ETH_DMAOMR寄存器的FEFFUGF位的设置,接收FIFO可以过滤掉错误帧和长度低于最
小帧长的帧。
如果接收FIFO设置成存储-转发模式,那么可以过滤并丢弃所有的错误帧。
在接收FIFO设置成直通模式时,如果DMA从接收FIFO读出帧的SOF时,FIFO已经给出该帧的
状态信息和长度,那么可以丢弃掉整个出错的帧。设置接收帧清空位为’1’DMA可以清空正从
FIFO中读出的错误帧,这时FIFO中止向应用程序(DMA)弹出数据,帧余下的部分会从内部读出
并丢弃。随后就可以开始下一帧的传输。
接收状态信息字
在接收以太网帧结束时MAC会把接收状态信息发给应用程序(DMA)。接收状态信息的具体
义同RDES0的位[31:0]描述,参见后续的RDES0:接收描述符字0段落。
帧长度接口
对于交换机的应用,应用程序与MAC之间数据的收发都是以完整的帧为单位的。应用层软件需
要掌握从输入端口接收到的帧的长度,才能把帧转发给输出端口。MAC控制器在接收帧结束时
生成的接收状态信息包含了每一个接收到帧的长度。
注意:
帧长度值为
0
意味着由于接收
FIFO
溢出,写入
FIFO
的帧不完整。
MII/RMII位接收顺序
下图显示了,从RMII22位的数据转化为传送到MII上的4位数据接收顺序。先接收低2(D0
D1),再接收高2(D2D3)
671/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
312 接收位顺序
313 接收时无错误
314 接收时有错误
672/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
315 接收时有假载波指示
27.5.4 MAC中断
MAC控制器可由于多种事件的发生而产生中断。
ETH_MACSR寄存器描述了所有可以使MAC控制器产生中断的事件。用户可以通过在中断屏蔽
寄存器里把相应的屏蔽位置’1’来防止某一事件引发中断。
中断寄存器的位只表示中断由哪个模块引发。用户需要读相应的状态寄存器位及其他寄存器来
清除中断。例如,中断寄存器的位3’1’,表示MAC在掉电模式下接收到Magic数据包或者远程
局域网唤醒帧。必须读ETH_MACPMTCSR寄存器来清除这个中断事件。
316 MAC控制器中断屏蔽示意图
27.5.5 MAC过滤
地址过滤
地址过滤机制检查所有接收到帧的目的地址和源地址,并报告相应的地址过滤结果。地址检查
根据应用程序设定的参数(帧过滤器寄存器)进行。帧经过过滤还可以识别是多播帧或者广播帧。
地址过滤利用静态物理地址(MAC地址)和多播HASH列表来进行地址检验。
单播目的地址滤波器
MAC支持多达4MAC地址进行单播过滤,如果选择这种方式(帧过滤寄存器的HU位为’0’)
MAC会把接收到帧的48位单播地址与设好的MAC地址逐位比较,检查是否相符。默认情况下,
始终使能MacAddr0。其他几个地址MacAddr1-MacAddr3别有对应的使能位。在与接收到帧
的目的地址时,这几个地址(MacAddr1-MacAddr3)的每一个字节都可以通过设置寄存器的屏蔽
字节控制位,来设置不与接收到帧目的地址的相应字节比较。利用这个功能就可以实现帧目的
地址群过滤。在HASH过滤模式下(HU位为’1’)MAC利用64位的HASH列表对单播地址进行不
完美过滤。HASH过滤时,MAC计算接收到帧的目的地址的CRC(下面的注释),并取高6
作为索引检索HASH列表。CRC值为’000000’对应HASH列表寄存器的位0CRC值为’111111
673/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
对应HASH列表寄存器的位63。如果CRC值对应的HASH列表上的相应位为’1’,说明该帧能通过
HASH过滤器,否则该帧不能通过HASH过滤器。
注释:
CRC
是指根据以下多项式计算出的
32
CRC
值,更多细节请参考
27.5.3
节。
G(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
多播目的地址滤波器
设置帧过滤寄存器的PAM位为’1’可以配置MAC接收所有的多播帧。如PAM位为’0’MAC
据帧过滤寄存器HM位的取值对多播地址进行过滤。在完美过滤模式下,把多播地址与设置好的
MAC目的地址寄存器(1-3)比较;完美过滤也支持群地址过滤。在HASH过滤模式下,利用64
HASH列表进行不完美过滤;MAC使用接收到多播地址CRC(见下面的注释)的高6位检索
HASH列表。CRC值为’000000对应HASH列表寄存器的位0CRC值为’111111’对应HASH列表
寄存器的位63。如果CRC值对应的HASH列表上的相应位为’1’,说明该帧能通过HASH过滤器,
否则该帧不能通过HASH过滤器。
注释:
CRC
是指根据以下多项式计算出的
32
CRC
值,更多细节请参考
27.5.3
节。
G(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
HASH或者完美地址滤波器
通过设置帧过滤器寄存器的HPF位为’1’并设置相应的HU(对单播帧)或者HM(对多播帧),可
以把目的地址(DA)过滤器配置成在只要帧的目的地址匹配HASH滤波器或者完美滤波器之一,就
令帧通过。这种设置即对单播帧生效,也对多播帧生效。如果HPF位为’0’,那么只有一种过滤
(HASH过滤器或者完美过滤器)会对接收到的帧起作用。
广播地址滤波器
MAC默认不过滤任何广播帧。但是,如果设置帧过滤寄存器的BFD位为’1’MAC将拒收所有的
广播帧并丢弃接收到的广播帧。
单播源地址过滤器
MAC也可以根据接收到帧的源地址进行完美过滤。MAC默认把帧的源地址(SA)域和源地址寄存
器的设定值进行比较。设置MAC地址寄存器[1:3]的位30’1’,则过滤器在过滤时,不再比较帧
的目的地址而是比较其源地址。MAC也支持对源地址的成组过滤。如果帧过滤寄存器的SAF
’1’MAC会丢弃没能通过源地址(SA)过滤器的帧;否则源地址(SA)过滤的结果会通过接收状
态信息字的一个标志位反映出来(参见后续的RDES0:接收描述符字0)
SAF位为’1’时,以源地址滤波器结果和目的地址滤波器结果逻辑的形式判定帧是否转发给
应用程序。这意味着,只要帧没能通过其中一个过滤器,就会被丢弃。MAC只会把通过全部过
滤器的帧转发给应用程序。
颠倒过滤操作
无论是目的地址过滤还是源地址过滤,都能在过滤器输出端颠倒过滤结果。颠倒可以分别通过
设置帧过滤寄存器的DAIF位和SAIF位实现。DAIF位作用于单播和多播帧的目的地址,在该位
’1’时,颠倒单播/多播帧的目的地址过滤器结果。同样的,在SAIF位为’1’时,颠倒单播帧的(
地址)过滤器结果。下面2个表总结了目的地址和源地址过滤器在不同设置下,接收到不同种类
帧时的结果。
196 目的地址过滤器结果列表
帧类
PM HPF HU DAIF HM PAM DB
目的地址(DA)过滤器操作
1 X X X X X X 通过
674/754
0 X X X X X 0 通过
广播
0 X X X X X 1 不通过
1 X X X X X X 所有帧通过
0 X 0 0 X X X 完美/组滤波器匹配时通过
单播
0 X 0 1 X X X 完美/组滤波器匹配时不通过
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
0 0 1 0 X X X HASH滤波器匹配时通过
0 0 1 1 X X X HASH滤波器匹配时不通过
0 1 1 0 X X X HASH或者完美/组滤波器匹配时通过
0 1 1 1 X X X HASH或者完美/组滤波器匹配时不通过
1 X X X X X X 所有帧通过
X X X X X 1 X 所有帧通过
675/754
0 X X 0 0 0 X
完美/组滤波器匹配时通过,如果PCF =
0x,丢弃PAUSE控制帧
0 0 X 0 1 0 X
HASH 滤波器匹配时通过,如果PCF =
0x,丢弃PAUSE控制帧
0 1 X 0 1 0 X
HASH或者完/组滤波器匹配时通过,如
PCF = 0x,丢弃PAUSE控制帧
多播
0 X X 1 0 0 X
完美/组滤波器匹配时不通过,如果PCF =
0x,丢弃PAUSE控制帧
0 0 X 1 1 0 X
HASH滤波器匹配时不通过,如果PCF =
0x,丢弃PAUSE控制帧
0 1 X 1 1 0 X
HASH或者完/组滤波器匹配时不通过,
如果PCF = 0x,丢弃PAUSE控制帧
197 源地址过滤器结果列表
帧类型 RTPR SAIF SAF (SA)过滤器操作
1 X X
所有帧通过
0 0 0
传送完美/组滤波器匹配状态,但不丢弃不通过的帧
0 1 0
传送完美/组滤波器不匹配状态,但不丢弃帧
单播帧
0 0 1
完美/组滤波器匹配时通过,丢弃不通过的帧
0 1 1
完美/组滤波器匹配时不通过,丢弃不通过的帧
27.5.6 MAC自循环模式
MAC支持自循环模式:发射端把帧发送到自己的接收端上。MAC的自循环模式默认是关闭的,
可以通过把MACETH_MACCR寄存器的Loopback位置’1’来打开这个功能。
27.5.7 MAC管理计数器:MMC
MAC管理计数器(MMC)是一整套收集发送和接收到帧的统计信息寄存器。这些寄存器包括:1
操控其他寄存器行为的控制寄存器,2个包含生成的中断(接收和发送)32位寄存器2个包含
中断屏蔽的32位寄存器。应用程序可以访问这些寄存器,每个寄存器长度都是32位。
27.8以太网寄存器描述说明了这些寄存器的功能,并列出了每个统计信息计数器的地址。
使用这个地址可以对需要的发送/接收计数器进行读/写访问。
MAC按照通过地址过滤器的帧数目更新接收MMC计数器,而不会更新被丢弃帧的统计信息,除
非被丢弃的帧是长度小于6字节的过短帧(没有完整接收到目的地址)
的发送和接收帧
发送帧如果被成功地发送出去,就会被认为是的。换而言之,如果一个帧的发送过程没有
为以下错误而中止,就可以被认为是
啰嗦(Jabber)超时
没有载波/载波丢失
迟到冲突
帧溢出
顺延(Deferral)过多
冲突过多
如果不发生下列错误,一个接收帧就可以被认为是的:
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
CRC错误
过短帧(少于64字节)
对齐错误(仅对10/100M/s)
长度错误(仅对无类型帧)
超出范围(仅对无类型帧,帧长超过上限)
MII_RXER输入错误
一个帧的最大帧长由帧的类型决定
无标签帧,最大帧长 = 1518
VLAN帧,最大帧长 = 1522
27.5.8 电源管理:PMT
本节描述了MAC支持的电源管理(PMT)机制。PMT支持接收(远程)网络唤醒帧和Magic Packet
帧。PMT能在MAC接收到唤醒帧和Magic Packets时产生中断。设置远程唤醒帧使能位和Magic
Packet使能位即可使能PMT模块,这2个使能位位于ETH_MACPMTCSR寄存器。在使能了PMT
的掉电模式时,MAC会丢弃所有的帧,而不把它们转发给应用程序。只有在接收到Magic
Packet或者远程唤醒帧,并且使能了相应的检测功能时,MAC才会退出掉电模式。
远程唤醒帧过滤器寄存器
唤醒帧寄存器一共有8个,需要逐一配置帧过滤器寄存器。连续写8次唤醒帧过滤器寄存器,就
可以把需要的值分别写入唤醒帧过滤器寄存器1-8。对这些寄存器的读操作流程和写操作流程一
致,需要连续读8次唤醒帧过滤器寄存器,才能读出唤醒帧过滤器寄存器1-8的值。
317 唤醒帧过滤寄存器
过滤器i字节屏蔽
该寄存器定义了在判断是否为唤醒帧时,使用过滤器i(i=0~3)的哪些字节检查帧。第31位必
须为’0’;位j[30:0]是字节屏蔽位,如果位j’1’,则CRC模块会处理输入帧的第[过滤器i偏移
+ j]字节,否则忽略之。
过滤器i命令
4位命令控制了过滤器i的工作。位3选择地址类型,定义了过滤器的检测模板对哪一类目的
地址有效;如果该位为’1’,则检测模板只对多播地址有效;如果该位为’0’,那么检测模板
只对单播地址有效。位2和位1是保留位。位0是过滤器的使能位,如果为’0’,则不使用该过
滤器。
过滤器i偏移
该寄存器定义了过滤器i要检查的字节在帧内的起始偏移。这个8位的过滤器偏移是指过滤器
要检查的第一个字节对帧首的偏移量。最小允许取值是12,代表了帧的第13个字节(偏移值
0表示帧的第1个字节)
676/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
过滤器i CRC-16
该寄存器包含了过滤器计算出的CRC_16值,也包含了唤醒帧过滤器寄存器模块预先写好的
字节屏蔽值。
远程唤醒帧检测
MAC处于睡眠模式,且ETH_MACPMTCSR寄存器的远程唤醒使能位为’1’时,在接收到远程
唤醒帧后,MAC即恢复正常工作。对唤醒帧过滤器寄存器的连续写操作,可以设置所有8个唤醒
过滤器寄存器。设置ETH_MACPMTCSR寄存器的位2’1’使能远程唤醒。PMT支持4个可编
程的过滤器,可以提供不同的接收帧检测模板。如果输入帧通过了过滤器命令的地址过滤,而
且过滤器CRC_16与被检查的输入帧匹配,则认为接收到唤醒帧。过滤器偏移(最小允许取值是
12,代表了帧的第13个字节)定义了从帧的哪个字节开始检查。过滤器字节屏蔽定义了帧的哪些
字节会被检查。字节屏蔽的位31必须为’0’PMT只会检查唤醒帧是否有长度错误、FCS错误、
Dribble位错误、MII错误、冲突,并确保唤醒帧不是过短帧。即便唤醒帧的长度超过了512
节,只要该帧有正确的CRC值,它仍然被认为是有效的。唤醒帧检测在接收到远程唤醒帧时都
会更新ETH_MACPMTCSR寄存器的相应标志位。如果使能了远程唤醒中断,那么PMT在接收
到远程唤醒帧时会产生中断。
Magic Packet检测
Magic Packet帧是指使用AMD公司的Magic Packet来启动网络上的睡眠设备的技术。MAC接收
到包含特殊信息的数据包,这些数据包发向网络上的节点,称为Magic PacketMAC只会检查
那些发往设备地址或者广播地址的Magic Packet,来判断它们是否满足唤醒设备的条件。那些
通过地址过滤的Magic PacketMAC会进一步检查它们是否符合远程Wake-on-LAN的数据格
式:6字节全1,紧接着重复16次的MAC地址。设置ETH_MACPMTCSR寄存器的位1,可以使
Magic Packet唤醒。PMT模块会持续监视每一个发向本节点的帧,检测其是否符合Magic
Packet的格式,即:检0xFFFF FFFF FFFF,接着是目的和源地址域;随后PMT模块检查帧
是否在没有任何中断和暂停的情况下有16个重复的MAC地址;如果这16次重复间有任何的间
断,则需要重新在输入帧里检测0xFFFF FFFF FFFF。这16次重复的MAC地址可以位于帧的任
何位置,但必须位于同步流(0xFFFF FFFF FFFF)之后。只要能够检测到16个重复的MAC
址,设备也接受多播帧作为Magic Packet帧。例如,某设备的MAC地址是0x0011 2233 4455
那么MAC会检测以下数据序列:
目的地址 源地址 ………………FFFF FFFF FFFF
0011 2233 4455 0011 2233 4455 0011 2233 4455 0011 2233 4455
0011 2233 4455 0011 2233 4455 0011 2233 4455 0011 2233 4455
0011 2233 4455 0011 2233 4455 0011 2233 4455 0011 2233 4455
0011 2233 4455 0011 2233 4455 0011 2233 4455 0011 2233 4455
… CRC
Magic Packet检测在接收到Magic Packet时会更新ETH_MACPMTCSR寄存器的相应标志位。
如果使能了Magic Packet中断,则PMT在接收到Magic Packet时会产生中断。
系统在掉电期间注意事项
MCU处于停机模式时,使能外部中断线19,以太网的PMT模块仍能够检测帧。
因为MAC的接收状态机参与了Magic Packet/局域网唤醒帧检测,因此需要在掉电模式下维持它
的工作,即ETH_MACCR寄存器的RE位需要保持为’1’。在掉电时需要把ETH_MACCR寄存器
TE位清’0’来关闭发送状态机。此外,由于不需要把Magic Packet/局域网唤醒帧转发到SRAM
中,因此在掉电时也要关闭DMA。设置ETH_DMAOMR寄存器的ST位和SR(分别对应发送
DMA和接收DMA)’0’来关闭以太网DMA
推荐的掉电和唤醒顺序如下:
1. 关闭发送DMA并等待之前所有的帧发送完毕。可以通过观察ETH_DMASR寄存器位0来检
查发送是否完成。
2. ETH_MACCR寄存器的TE位和RE位清’0’来关闭MAC发射器和MAC接收器。
3. 等待接收DMA把接收FIFO里的所有帧读出。
677/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
4. 关闭接收DMA
5. 配置并使能外部中断线19,使其或者能产生事件或者能产生中断。
6. 如果配置了外部中断线19产生中断,则还需要编写中断处理程序ETH_WKUP_IRQ,在其
中清除外部中断线19的中断待处理标志位。
7. 设置ETH_MACPMTCSR寄存器的MFE/WFE位为’1’,使能Magic Packet/局域网唤醒帧检
测。
8. 设置ETH_MACPMTCSR寄存器的PD位为’1’,使能掉电模式。
9. 设置ETH_MACCR寄存器的RE位为’1’,打开MAC接收器。
10. MCU进入停机(STOP)模式,更多细节请参阅第4.3.4
678/754
节:停止模式。
11. 在接收到有效的唤醒帧后,以太网模块退出掉电模式。
12. 读取ETH_MACPMTCSR寄存器来清除电源管理事件标志位,打开MAC发送状态机,以
及发送和接收DMA
13. 设置系统时钟:使能HSE并配置时钟参数。
27.5.9 精确时间协议(IEEE1588 PTP)
IEEE1588标准定义了一种协议,该协议允许通过网络通讯,本地计算和分离设备技术实现测量
和控制系统精确的时钟同步。协议可以应用于通过本地局域网通讯的系统,网络要求支持多播
通信,这个局域网可以是(但不限于)以太网。协议可以用来同步拥有不同精度、分辨率和稳定
时钟的系统。协议支持在占用最少网络和计算资源的情况下,系统时钟同步精度达到亚微
级。协议名称是PTP(精确时间协议),协议的基础是以UDP/IP为载体的消息传递。整个系统或
者网络的各个节点,按照发起和接收时间/时钟信息的角色,可以分为主节点和从节点。协议通
过在主从节点之间交换PTP消息来把从节点时钟同步到主节点时钟,该技术如下图。
318 网络时钟同步
1. 主节点向所有的从节点广播PTP Sync消息。Sync消息包含主节点的时间信息。该消息从
主节点发出的时间记为t1。对于以太网端口,应当在MII获取这个时间。
2. 从节点接收到Sync消息,并根据自己的时钟,记录下接收到Sync消息的时间t2
3. 主节点随后向从节点发送follow_up消息,包含t1的信息,以备后用。
4. 从节点向主节点发送Delay_Req消息,并记录下该消息从MII发出的时间t3
5. 主节点接收到Delay_Req消息,并记录下接收到的时间t4
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
6. 主节点向从节点发送Delay_Resp息,消息包含了t4的信息。
7. 从节点利用t1t2t3t4,把它的本地时钟与主节点的时钟同步
协议的大部分是通过UDP层之上的软件实现的。不过,由上文所述,需要硬件支持记录PTP
从以太网端口MII发出和收到的准确时间。硬件需要记下该时间信息并将其返回给软件,这样才
能正确,高精度地实现PTP时间同步。
基准时钟源
IEEE1588协议规定,系统需要64位格式的基准时间来获得当前时间记录,这64位被分为232
位通道,其中高32位提供以秒为单位的时间信息,低32位提供以纳秒为单位的时间信息。
PTP基准时钟输入用来在内部生成基准时间(也称为系统时间)和记录时间戳。这个基准时钟的频
率必须大于或等于时间戳计数器的分辨率。主节点和从节点之间的时间同步精度在100ns左右。
后续的系统时间校准方法段描述了生成、更新和更改系统时间的方法。
时间同步的精度取决于PTP基准时钟输入的周期,所用晶体振荡器的特性(频漂)和同步流程的执
行频度。
由于发送和接收时钟输入域需要和PTP基准时钟域同步,因此时间戳记录的误差是1个基准时钟
周期。如果我们考虑由时间戳计数器分辨率引起的误差,需要再加上半个周期的误差。
发送带PTP功能的帧
在帧的SFDMII输出的时候,就会记录下时间戳。可以以帧为单位选择是否需要记录某个帧的
时间邮戳。即每一个等待发送的帧都有一个标志,指示是否需要记录这个帧的时间戳。MAC
不通过处理帧本身的方式来识别PTP帧,而是通过帧发送描述符里的控制位来控制(326)
记录下来的时间戳会按照与帧的发送状态信息相同的方式,返回给应用程序。时间戳是和帧的
发送状态信息一起,存放在相应的发送描述符里送回的,这样就自动地把时间戳和PTP帧联系
起来。64位的时间戳分别写入TDES2TDES3域,TDES2含有时间戳的低32位数据,具体描
述见后续的IEEE1588时间戳的发送DMA描述符格式
接收带PTP功能的帧
在使能了IEEE1588时间戳功能时,MAC会在MII端记录下所有收到帧的时间戳MAC不通过处
理帧本身来识别PTP帧。一旦接收完毕一帧,MAC就会提供帧的时间戳。记录下来的时间戳会
按照与帧的接收状态信息相同的方式,返回给应用程序。时间戳是和帧的接收状态信息一起,
存放在相应的发送描述符里送回的。64位的时间戳分别写入RDES2RDES3域,RDES2含有
时间戳的低32位数据,具体描述见后续的IEEE1588时间戳的接收DMA描述符格式
系统时间校准方法
利用PTP输入基准时钟HCLK来更新64PTP时间。这个PTP时间用来作为记录以太网帧在MII
上发送和接收时刻(即时间戳)的依据。这个系统时间的初始化或者校准,既可以用粗调的方式
进行,也可以用精调的方式来进行。
粗调的方式是指,把初始值和偏移值写入时间戳更新寄存器(见第27.8.3)。初始化时,用时间
戳更新寄存器的值写入系统时钟计数器。在校准时,把时间戳更新寄存器值作为偏移值,系统
时间加上或者从中减去这个偏移值。
精调的方式是指,在一段时间里纠正从时钟(基准时钟)相对主时钟(IEEE1588定义)的频率偏
移,不像粗调方式那样能够在一个时钟周期内就完成校正,精调需要一段时间才能完成;采用
相对较长的校准时间带来的好处是可以维持时间的线性度,避免了基准时间在PTP Sync消息的
间隙内发生突变(或者说大的抖动)。采用这种方法,如下图所示,把加数寄存器的值逐渐加入
加器。累加器的算术进位产生的脉冲令系统时间计数器值增加。累加器和加数寄存器都是32
寄存器。这里累加器起到了高精度频率乘法器或者除法器的作用。下图演示了整套算法。
679/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
319 用精调的方式更新系统时间
系统时钟更新电路需要50MHz的时钟频率来使精度达到20ns。频率的除数是基准时钟频率和要
求时钟频率的比。因此,假设基准时钟HCLK66MHz,计算频率比得66 MHz / 50MHz =
1.32。因此,写入加数寄存器的默认加数是232/1.32,等于0xC1F0 7C1F
如果基准时钟频率漂低,假设降至65MHz,此时频率比变成65/50 = 1.3,写入加数寄存器的值
应当是232/1.30 = 0xC4EC 4EC4。如果基准时钟漂高,假设升到67MHz,加数寄存器的值必须
0xBF0B 7672 。如果频率漂移为0,那么写入加数寄存器的默认加数应当是0xC1F0
7C1F(232/1.32)
上图中,累加到亚秒寄存器上的常数是43,这使得系统时间的精度为20ns(也就是说,系统时间
累加的步长是20ns)
软件需要利用Sync消息计算出频率的漂移,并相应地更新累加寄存器的值。开始时,设从时
加数寄存器值为FreqCompensationValue0
FreqCompensationValue0 = 232/频率比
假设对于连续的Sync消息,主从节点之间的时延MasterToSlaveDelay是恒定的,那么使用下文
描述的算法,在若干个Sync 周期后,就能锁定频率。从时钟就可以确定精确
MasterToSlaveDelay值,并用新的值把从时钟与主时钟同步。
算法如下:
在主时钟为MasterSyncTime(n)时,主节点向从节点发Sync消息。从节点在它的时钟为
SlaveClockTime(n)时,收到Sync消息,并计算出MasterClockTime(n)
MasterClockTime(n) = MasterSyncTime(n) + MasterToSlaveDelay(n)
当前Sync周期的主时钟计数数目MasterClockCount(n)
MasterClockCount(n) = MasterClockTime(n) - MasterClockTime(n-1),假设
MasterToSlaveDelay的数值在Sync周期nSync周期n-1是相同
当前Sync周期的从时钟计数数目SlaveClockCount(n)
SlaveClockCount (n) = SlaveClockTime (n) - SlaveClockTime (n-1)
当前Sync周期,主时钟计数数目和从时钟计数数目的差别,ClockDiffCount(n)
ClockDiffCount(n) = MasterClockCount(n) - SlaveClockCount (n)
680/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
从时钟的频率比系数,FreqScaleFactor(n)
FreqScaleFactor(n) = (MasterClockCount(n) + ClockDiffCount(n)) / SlaveClockCount (n)
加数寄存器的频率补偿值,FreqCompensationValue(n)
FreqCompensationValue(n) = FreqScaleFactor(n) ×FreqCompensationValue(n-1)
理论上,该算法可以在一个Sync期内锁定频率。然而,由于网络传播延时和操作环境的改
变,实际可能需要几个Sync周期。
该算法具有自校准功能,如果由于种种原因,从时钟初始设定值相对主时钟是不准确的,该算
法可以在几个Sync周期内把误差纠正过来。
系统时间生成初始化的编程步骤
设置时间戳控制寄存器(ETH_PTPTSCR)的位0’1’,可以使能时间戳功能。不过在把该位置’1’
以后,需要正确地初始化时间戳计数器来开始时间戳操作。正确的初始化流程如下:
1. 设置MACIMR寄存器的位9’1’,屏蔽时间戳触发中断。
2. 设置时间戳寄存器位0’1’,使能时间戳。
3. 按照PTP时钟频率编写亚秒累加寄存器。
4. 如果使用精调校准方式,则设置时间戳加数寄存器,并设置时间戳控制寄存器的位5
’1’(更新加数寄存器)
5. 轮询时间戳控制寄存器直到位5变为’0’
6. 如果使用精调校准方式,设置时间戳控制寄存器的位1’1’
7. 把正确的时间值写入时间戳更新高寄存器和时间戳更新低寄存器。
8. 设置时间戳控制寄存器的位2’1’(初始化时间戳)
9. 一旦时间戳计数器初始化为时间戳更新寄存器的值,它就开始工作。
10. 使能MAC的接收端和发送端,即可以正确地记录时间戳。
注意:
如果寄存器
ETH_PTPTSCR
的位
0
’0’
,关闭了时间戳操作,那么在重新打开此功能时,必须重
复以上步骤。
用粗调方式更新系统时间的编程步骤
采用以下的步骤一次(用粗调方式)同步并更新系统时间:
1. 在时间戳更新高和时间戳更新低寄存器里写入偏移值(正值或者负值)
2. 设置时间戳控制寄存器的位3(TSSTU)’1’
3. TSSTU位清’0’时,系统时间就会加上或者从中减去时间戳更新寄存器的值
用精调方式更新系统时间的编程步骤
采用以下的步骤,用减小系统时间抖动的方式(精调方式)同步并更新系统时间:
681/754
1. 采用前述系统时间校准方法介绍的算法,计算出希望调快或调慢系统时钟的步率。
2. 更新时间戳。
3. 等待需要的加数寄存器的新值被激活。为此,可以在系统时间达到目标值后打开时间戳触
发中断。
4. 把要求的目标时间写入目标时间高和目标时间低寄存器,并设置ETH_MACIMR寄存器的
9’0’来允许时间戳中断。
5. 设置时间戳控制寄存器的位4(TSARU)’1’
6. 在这个事件产生中断时,读出ETH_MACIMR寄存器。
7. 重新用旧值编写时间戳加数寄存器并设置ETH_TPTSCR寄存器位5’1’
PTP触发与TIM2的内部连接
MAC可以在系统时间大于目标值的时候提供触发中断。使用中断会引入一段已知的中断时延再
加上不确定的命令执行时间。
为了避免这部分不确定性,在系统时间大于目标值的时候,PTP会设置一个输出信号为高。这
个信号从内部连接到TIM2输入触发。利用这个信号,TIM2由同步后的PTP系统时间触发,可以
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
使用定时器的输入捕获功能,输出比较功能和波形。由于定时器的时钟(PCLK1:TIM2 APB1
)PTP基准时钟(HCLK)是同步的,因此不再有任何不确定的误差。
用户可以通过软件选择PTP触发信号连接到TIM2 ITR1输入。设置AFIO_MAPR寄存器的位29
’1’可以使能这个连接。下图显示了这个连接。
320 PTP触发输出连接到TIM2ITR1
PTP秒脉冲输出信号
PTP脉冲输出用来检查网络全部节点之间的同步。为了能够测试本地从时钟和主时钟之间的差
别,由于具有输出每秒脉冲(PPS)信号的功能,在必要时可以把这个输出连接到示波器。这样就
可以测量2个时钟之间的差别。PPS输出的脉冲宽度是125ms
设置AFIO_MAPR寄存器的位30’1’,可以使能PPS输出功能。
321 PPS输出
27.6 以太网功能描述:DMA控制器操作
DMA具有独立的发送和接收控制器,还有1个控制和状态寄存器(CSR)空间。发送控制器负责把
数据从系统存储器转送至发送FIFO,而接收控制器负责把数据从接收FIFO读出到系统存储器。
为了把CPU的操作减到最小,DMA控制器利用描述符来实现数据从源头到目的之间的移动。
DMA的设计是以数据包为单位传输,如以太网的帧传输。设置DMA控制器,可以在发送完一个
帧、接收到一个帧或者其他正常/错误操作的时候产生中断。DMACPU之间的通讯通过2种数
据结构实现:
控制和状态寄存器(CSR)
描述符列表和数据缓存
27.8节描述了控制和状态寄存器的细节。发送DMA描述符
682/754
接收DMA描述段介绍了描述
符的具体情况。
DMA负责把接收到的帧数据传送给STM32F107xx的接收缓存,把STM32F107xx发送缓存里的
数据发送出去。在STM32F107xx的存储器里,描述符是以缓存指针的形式存放。有2个描述符
队列,一个用作发送,另一个用作接收。两个队列的基地址分别存放在ETH_DMATDLAR寄存
器和ETH_DMARDLAR寄存器中。描述符队列是(显性或者隐性)前向连接的,最后一个描述符可
以指向第一个描述符,而形成环形结构。通过设置接收描述符的RDES114和发送描述符的
TDES020’1’,可以实现描述符的显性连接。描述符列表存放在MCU的物理内存里,每个描
述符可以指向最多2个缓存。这样就允许使用2不同物理地址的缓存,而不是2个在存储器里
续的缓存。数据缓存存放在MCU的物理内存里,可以存放一个帧的全部或者部分,但是不允
存放一个不属于同一个帧的数据。缓存里只存放数据,缓存的状态信息存放在描述符里。数据
链接是指帧的数据分散存放在多个缓存里。但是单个描述符不能用于多个帧。DMA一旦检测到
帧结束就会跳到下一个缓存。数据链接功能可以自由地打开和关闭。下图显示了描述符的环结
构和链结构
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
322 描述符的环结构和链结构
27.6.1 使用DMA发送的初始化步骤
初始化MAC如下:
1. ETH_DMABMR寄存器中设置STM32F107xx总线访问参数。
2. ETH_DMAIER寄存器中屏蔽不需要的中断源。
3. 软件程序生成发送和接收描述符列表,然后写入ETH_DMARDLAR寄存器和
ETH_DMATDLAR寄存器,把列表的起始地址提供给DMA
4. MAC寄存器123来中选择期望的过滤器选项。
5. MACETH_MACCR寄存器中设置并使能发送和接收操作。根据(PHY读出的)自协
(auto-negotiation)的结果,设置PS位和DM位的值。
6. 设置ETH_DMAOMR寄存器的位13和位1’1’,开始发送和接收。
7. 发送和接收控制器进入运行模式,并开始从对应的描述符列表里读取描述符。随后接收和
发送控制器开始处理接收和发送操作。发送和接收操作相互独立,可以分别开启和关闭。
27.6.2 主机总线突发访问
如果设置ETH_DMABMR寄存器的FB位为’1’,则DMAAHB主接口上执行固定长度的突发访
问。最大突发长度由PBL(ETH_DMABMR寄存器位[13:8])定义。对接收和发送描述符这16
节数据的访问总是以PBL限定的最大可能突发长度进行。
只有在发送FIFO里有足够的空间来容纳预设的突发长度,或者在帧结束之前的数据字节数小于
突发长度且发送FIFO能容纳这些字节时,发送DMA才会开始一次数据传输。DMA会向AHB主接
口提供起始地址和要传送的字节数量。如果AHB接口设置成固定长度突发传输,那么就会利用
INCR4INCR8INCR16SINGLE传送的最佳组合来传输数据。否则利用INCR(定义长度)
SINGLE传送来传输数据。
只有在接收FIFO里的可用数据多于预设的突发长度时,或者在帧结束之前的数据字节数小于突
发长度且在接收FIFO里检测到帧结束时,接收DMA才会发起一次数据传输。DMA会向AHB主接
口提供起始地址和要传送的字节数量。如果AHB接口设置成固定长度突发传输,那么就会利用
INCR4INCR8INCR16SINGLE传送的最佳组合来传输数据。如果已经传输到帧尾而长度
固定的突发传输还没有结束,那么就会进行虚拟传输来完成剩下的传输。如果没有设定成固定
长度突发(ETH_DMABMR寄存器FB位为’0’),那么会利用INCR(未定义长度)SINGLE传送来传
输数据。
如果把AHB接口配置成地址对齐,DMA接收和发送控制器会保证AHB发起的第一次突发传输小
于或者等于PBL设定的长度。这样,随后的传输都会从与设好的PBL对齐的地址开始。如果
PBL>16DMA只能支持传输地址最多对齐到16,因为AHB接口不支持INCR16以上的传输。
683/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
27.6.3 主机数据缓存对齐
发送和接收数据缓存在起始地址上没有限制。32位存储器的系统中,缓存的起始地址可以对
齐到4个字节中的任意一个。不过,DMA发起传输的时候,总是从与总线宽度对齐的地址开始,
对于不用到的字节则用虚拟字节代替。这种情况常常在传输以太网帧的起始和结尾时发生。
读缓存示例
如果发送缓存的地址为0x0000 0FF2,并需要传输15字节。DMA实际会从地址0x0000
0FF0开始读5个字(32),但是在往FIFO发送数据的时候,会忽略或者丢弃多余的字节,即
2个字节。同理,最后3个字节也会被忽略。除非DMA传输的是帧的结尾,否则DMA总是
保证向发送FIFO传输32位的数据。
写缓存示例
如果接收缓存的地址为0x0000 0FF2,并需要传输16字节长的帧。DMA实际会从地址
0x0000 0FF0开始写532位数据。但是传输的头2个字节和末尾的2个字节是虚拟字节。
27.6.4 缓冲区大小计算
DMA不会更改发送和接收描述符的缓存大小域。DMA只会更新描述符的状态信息域(RDES0
TDES0)。软件需要计算缓存的大小。发送DMA会传输与TDES1缓存大小域相等数目的字节给
MAC控制器。如果描述符标记为帧的第一个部(TDES0FS位为’1’),那么DMA就标记从这个
缓存的第一次发送是帧首。如果描述符标记为帧的最后一个部分(TDES0LS位为’1’),则DMA
就标记从这个缓存的最后一次发送是帧的结束。接收DMA在缓冲区满或收到帧结束之前,传送
数据至缓冲区。如果一个描述符没有标记为帧的最后一个部分(RDES0LS),那么在描述符
对应的缓存为满时,有效数据的数目等于缓存长度域减去描述符FS位为’1’时数据缓存指针偏
移。在数据缓存指针与数据总线宽度对齐的时候,偏移为0。如果描述符标记为帧的最后一个部
分,根据RDES1的缓存长度可以发现缓存有可能不满。为了算出最后一个缓存的有效数据数
目,软件需要读出帧长度(FL域,在RDES0的位[29:16]),再减去这个帧存放在之前的缓存内数
据的总长度。接收DMA总是用新的描述符来开始下一帧的传输。
注意:
即便在接收缓存的起始地址和系统数据总线宽度不对齐的时候,系统仍然要求接收缓存的大小和
系统数据总线宽度对齐。例如,系统需要一个从
0x1000
开始,大小为
1024
字节
(1KB)
的接收缓
存。软件可以把缓存的初始地址偏移到
0x1002
。这样,
DMA
就会对前
2
个地址
(0x1000
0x1002)
写虚拟字节。帧实际从
0x1002
开始,由于实际的地址偏移,即使缓存大小被设为
1024
字节,缓存实际可用的大小变成
1022
字节。
27.6.5 DMA仲裁器
DMA的仲裁器负责在发送和接收通道访问AHB主接口时进行仲裁。有两种仲裁方式:轮换和固
定优先级。选择轮换仲裁时(ETH_DMABMR寄存器DA位为’0’),在发送和接收DMA同时要求访
问数据总线的时候,按照ETH_DMABMR寄存器RTPR位设定的比例分配总线。在DA位为’1’
时,接收DMA总是比发送DMA对总线拥有更高的访问优先级。
27.6.6 DMA错误响应
对于DMA通道发起的数据传输,如果接收到错误响应,那么DMA会停止所有操作,并更新状态
寄存器(ETH_DMASR寄存器)的错误位和总线致命错误位。只有在软件或者硬件复位以太网外设
并重新初始化DMA以后,DMA才能恢复操作。
27.6.7 发送DMA设置
发送DMA操作:默认(OSF)模式
在默认模式下,DMA发送控制器的工作流程如下:
1. 在软件建立好包含以太网帧数据的缓存以后,建立发送描述符(TDES0-TDES3),并置
OWN(TDES[31])’1’
2. 设置ST(ETH_DMAOMR寄存器位[13])’1’后,DMA进入运行模式。
684/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
3. 在运行模式下,DMA查询发送描述符来获取待发送的帧。查询开始以后,DMA会按照环
式或者链式的顺序连续查询描述符。如果DMA检测到标志位提示CPU正在操作描述符或
者发生了错误,就会终止传输,并设置发送缓存不可用位(ETH_DMASR寄存器位2)和正
常中断总结位(ETH_DMASR寄存器位16)’1’。发送控制器操作跳至步骤9
4. 如果取到的描述符标志位显示该描述符由DMA占有(TDES[31]’1’),那么DMA从描述符
中解析发送数据缓存的地址。
5. DMASTM32F107xx存储器里取数据,并把数据发送出去。
6. 如果以太网帧的数据存放在属于不同描述符的不同缓存里,DMA会关闭存放中间数据的
描述符,并取下一个缓存对应的描述符,重复步骤345直到发送完帧结尾的数据
7. 在帧发送完成以后,如果发送状态信息显示这个帧使能了IEEE1588时间戳功能,时间戳
的值会写入存放帧尾的缓存对应的发送描述符(TDES2TDES3)。然后,写状态信息到描
述符TDES0。由于OWN位在这时清’0’CPU自此占有描述符。如果这个帧没有打开时间
戳功能,那么DMA不会更改TDES2TDES3的内容。
8. 在帧发送完成以后,如果描述符的完成中断位(TDES1[31])’1’,则设置发送中断位
(ETH_DMASR寄存器位[0])’1’。然后DMA控制器返回步骤3
9. 在暂停状态下,如果DMA收到发送查询的请求并且溢出中断标志位为’0’DMA就会尝试
重新获取描述符(因此会回到步骤3)
下图显示了默认模式下DMA的发送流程
323 默认模式下发送DMA的操作
发送DMA操作:OSF模式
此模式中(OSF位为’1’时,即ETH_DMAOMR寄存器位2)在运行状态下,发送DMA以不必等
到处理完第一个帧的状态信息描述符,就同时取第二个帧。DMA在发送完第一帧数据以后,可
685/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
以立即查询第二帧的发送描述符。如果第二帧有效,那么DMA在写第一帧的状态信息前就发送
第二帧。在OSF模式下,DMA的操作流程如下:
1. 按照发送DMA默认模式的步骤1-6操作。
2. DMA在没有完成前一帧最后一个描述符状态信息时,直接取下一个描述符。
3. 如果DMA占有取到的描述符,那么就解析发送缓存的地址。如果DMA不占有这个描述
符,则进入挂起状态并跳到步骤7
4. DMASTM32F107xx的存储器中取出发送帧的数据并发送直到帧尾发送完毕,如果帧数
据分散在多个缓存中,DMA关闭存放在中间数据缓存对应的描述符。
5. DMA等待前一帧的发送状态信息和时间戳,在接到状态信息后,如果标志位提示记录了
帧的时间戳,DMA把时间戳写入TDES2TDES3DMA再把OWN位为’0’的状态信息写
TDES0,这样就关闭了该描述符。如果这个帧没有打开时间戳功能,那么DMA不会更
TDES2TDES3的内容
6. 如果使能中断,发送中断位置’1’DMA在状态信息正常的情况下继续取下一个描述符,
并跳到步骤3。如果前一个发送状态信息显示有数据下溢错误,DMA进入暂停状态,并跳
到步骤7
7. 在暂停状态下,如果DMA收到一个待处理的状态信息和时间戳,那么如果这个帧使能了
时间戳,DMA就把时间戳写入TDES2TDES3,然后把状态信息写入TDES0。随后,设
置相关的中断标志位并回到暂停状态。
8. 只有在收到发送查询请求(ETH_DMATPDR寄存器)后,DMA才会退出暂停状态并进入运
行状态,并根据是否有待处理的状态信息跳到步骤1或者步骤2
下图显示了OSF模式下DMA的发送流程框图
686/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
324 OSF模式下发送DMA的操作
发送帧处理
发送DMA要求数据缓存里包含除前导符、填充字节和校验域之外的整个以太网帧数据,目的
(DA)、源地址(SA)和类型/长度域的值正确有效。如果描述符指示这个帧,要求MAC控制器关
CRC和插入填充功能,那么缓存里应当包含除前导符以外,包括CRC域在内的完整以太网
帧。一个帧可以分散在不同缓存里,用数据链的形式连接起来;此时应该在第一个缓存的描述
(TDES0[28])和最后一个缓存的描述符(TDES0[29])标记出帧头和帧尾。传输开始时,第一个
描述符的TDES028应为’1’DMA则会把数据从内存送到发送FIFO中。同样的,如果当前帧描
述符的TDES029’0’,发送DMA就会尝试取下一个描述符,在下一个描述符里,TDES0
28应当是’0’,如果TDES029也是’0’,表示这个缓存存放的是帧的中间数据。如果TDES029
’1’,表示这个缓存存放的是帧结尾的数据,是这个帧的最后一个缓存。在这最后一个缓存的
数据发送完毕以后,DMA 会返回整个帧的发送状态信息,写入最后一个的发送描述符0
(TDES0)。如果发送完成中断位(TDES0[30])’1’,则设置发送中断位(ETH_DMASR寄存器位0)
’1’DMA随后取下一个描述符,重复上述步骤。实际的帧发送需要等到在发送FIFO里的数据
超过阈值(可通过ETH_DMAOMR寄存器位[16:14]设置),或者整个帧都位于发送FIFO里时才会
开始。设置ETH_DMAOMR寄存器位21’1’,选择使用存放-转发模式。在DMA传输完帧以后,
则会释放描述符(TDES0[31]’0’)
发送查询暂停
在下列情况下,可以暂停DMA查询描述符:
687/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
DMA检测到CPU占有描述符(TDES0[31]=0),并且发送缓存不可用标志位(ETH_DMASR
存器位2)’1’。软件需要把描述符释放给DMA,并向DMA发送查询请求,才能恢复DMA
发送查询。
在检测到数据下溢错误时,DMA会中止帧的传输,并设置TDES0里的相应错误位为’1’。如
果还发生其它错误,则设置异常中断总结位(ETH_DMASR寄存器位15)和发送数据下溢位
(ETH_DMASR寄存器位5)’1’,并把该信息写入发送描述符0,并进入暂停。如果DMA
为第一种情况进入暂停模式,则设置正常中断总结位(ETH_DMASR寄存器位16)和发送缓存
不可用位(ETH_DMASR寄存器位2)’1’。无论发生哪种情况,会保持不变描述符列表的位
置,固定在DMA关闭的最后一个描述符的下一个。软件必须在排除暂停成因之后,明确的
发送查询命令请求,来恢复DMA操作。
发送DMA描述符
描述符结构体包含432位字,TDES0TDES1TDES2TDES3的位定义如下图:
325 传输描述符
TDES0:发送描述符字0
在初始化描述符的时候需要编写控制位[30:26]+[23:20]OWN位。在DMA更新,或者说
写回描述符的时候,会清除所有的控制位和OWM位,只报告状态信息标志位。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OWN
IC LS FS DC DP
TTSE
TE
TTSS
IHE ES JT FF IPE LC
R
TC
H
A
NC LCO EC VF ED UF DB
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
CIC 保留 CC
OWN: 占有位 (Own bit) 31
1:表示DMA占有描述符。
0:表示CPU占有描述符。
DMA在传输完整个帧或者这个缓存里的数据全部读出以后把该位清’0’。每个帧的第一个缓存描
述符的占有位,必须在后面缓存描述符的占有位全部置’1’以后,才能置’1’
IC:完成时中断 (Interrupt on completion) 30
’1’时,在当前帧发送完成以后,会把传输中断位(ETH_DMASR寄存器位[0])’1’
LS:最后分块 (Last segment) 29
’1’时,表示缓存存放着帧的最后一个分块。
FS:第一分块 (First segment) 28
’1’时,表示缓存存放着帧的第一个分块。
DC:不计算CRC (Disable CRC) 27
’1’时,MAC不再在发送帧结束时插入循环冗余检测(CRC)域。该位只有在FS(TDES0[28])
’1’时才有效。
688/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
DP:不填充 (Disable pad) 26
1MAC不对帧长不足64字节的帧自动填充字节。
0MAC对帧长不足64字节的帧自动添加填充字节,并且不管DC(TDES0[27])的取值而插入
CRC数值。该位只在FS(TDES0[28])’1’时有效。
TTSE:使能发送时间戳 (Transmit time stamp enable) 25
’1’时,并且TSE(ETH_PTPTSCR[0])也为’1’时,这个描述符对应的帧会打开IEEE1588硬件
时间戳功能。该位只在FS(TDES0[28])’1’时有效。
保留 24
CIC:校验和插入控制 (Checksum insertion control) 23:22
2位控制校验和的计算和插入:
00:不插入校验和;
01:只使能IP报头的校验和计算和插入;
10:使能IP报头和数据域的校验和计算和插入,但是硬件不计算伪报头的校验和;
11:使能IP报头和数据域的校验和计算和插入,硬件也计算伪报头的校验和。
TER:环形发送结束 (Transmit end of ring) 21
’1’时,表示到达描述符队列的最后一个描述符。DMA返回队列的起始地址,形成描述符环。
TCH:第二地址链表 (Second address chained) 20
’1’时,表示描述符里的第二个地址是下一个描述符的地址,而不是第二个缓存的地址。该位
’1’时,则TBS2(TDES1[28:16])的值不起作用。TDES0[21]的功能优先于本位(TDES0[20])
该位只在FS(TDES0[28])’1’时才有效。
保留 19:18
TTSS:发送时间戳状态 (Transmit time stamp status) 17
作为标志位,置’1’时表示记录下了描述符对应的帧时间戳,记录的时间戳放在TDES2TDES3
处。该位只在LS(TDES0[29])’1’时才有效。
IHEIP报头错误 (IP header error) 16
’1’时,表示MAC发送端发现了IP数据包报头的错误。对IPv4数据包,MAC把报头的长度域和
收到的字节数目比较,不符合则报错。对IPv6数据包,如果主报头长度不是40字节时则报错。
另外,IPv4或者IPv6帧的长度/类型域值和报头的版本信息必须匹配。对IPv4帧,如果报头长度
域值小于0x5,该位也置’1’报错。
ES:错误汇总 (Error summary) 15
该位为下列位的逻辑“或”
TDES0[14]:啰嗦(Jabber)超时;
TDES0[13]:帧清空;
TDES0[11]:载波丢失;
TDES0[10]:无载波;
TDES0[9]:迟到冲突;
TDES0[8]:冲突过多;
TDES0[2]:顺延(Deferral)过多;
TDES0[1]:数据下溢错误;
TDES0[16]IP报头错误;
TDES0[12]IP数据错误。
JT:啰嗦超时 (Jabber timeout) 14
’1’时,表示MAC发送端发生了啰嗦超时。该位只在MAC设置寄存器的JD位不为’1时才会被
’1’
FF:帧清空 (Frame flushed) 13
’1’时,表示由于CPU发出命令,DMA/MTL把帧从FIFO中清空。
IPEIP数据错误 (IP payload error) 12
’1’时,表示MAC发送端发现了IP数据包的TCPUDP或者ICMPIP数据错误。发送端会核
IPv4或者IPv6显示的数据长度与实际收到的TCPUDPICMP数据数目,不符合就置’1’
错。
689/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
LCA:载波丢失 (Loss of carrier) 11
’1’时,表示帧发送的时候发生了载波丢失(在发送时,MII_CSR信号在一个或一个以上发送时
钟周期中为无效状态)。该位只有在半双工模式下,发送帧没有冲突时有效。
NC:无载波 (No carrier) 10
’1’时,表示帧发送的时候PHY的载波侦听信号无效。
LCO:迟到冲突 (Late collision) 9
’1’时,表示帧因为发送时在冲突窗口(MII模式下,包括前导符的64字节时间)之后出现冲突
而中止发送。如果溢出错误位置’1’,该位无效。
EC:冲突过多 (Excessive collision) 8
’1’时,表示帧因为发送时连续出现16次冲突而中止发送。如果MAC设置寄存器的RD(不进行
重试)位为’1’,那么在发生一次冲突后,该位就置’1’,并中止发送。
VFVLAN (VLAN frame) 7
’1’时,表示发送的帧是VLAN帧。
CC:冲突计数 (Collision count) 6:3
4位值记录了帧发送出去前出现的冲突次数。在EC(TDES0[8])’1’时,该位无效。
EC:顺延过多 (Excessive deferral) 2
’1’时,表示在MAC设置寄存器的顺延位为’1’时,因为顺延超过24288位的时间而结束发送。
UF:数据下溢错误 (Underflow error) 1
’1’时,表示从RAM送到MAC的数据过迟,导致MAC中止发送帧。数据下溢错误表示DMA
发送帧的时候遇到了空的缓存。发送过程进入暂停状态,并设置发送数据下溢位(ETH_DMASR
寄存器位5)和发送状态位(ETH_DMASR寄存器位0)’1’
DB:顺延位 (Deferred bit) 0
’1’时,表示MAC因为载波被占用而推迟发送。该位只在半双工模式下有效。
TDES1:发送描述符字1
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
保留 TBS2 保留 TBS1
rw rw
保留 31:29
TBS2:发送缓存2大小 (Transmit buffer 2 size) 28:16
这些位给出了第二个数据缓存的大小(以字节记),如果TDES0[20]位为’1’时,这些位无效。
保留 15:13
TBS1:发送缓存1大小 (Transmit buffer 1 size) 12:0
这些位给出了第一个数据缓存的大小(以字节记),如果它的值是0,那么DMA跳过这个缓存,根
TDES0[20]位使用缓存2或者下一个缓存。
TDES2:发送描述符字2
TDES2包含描述符的第一个缓冲区的地址指针,或时间戳数据。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TBAP1/TTSL
rw
TBAP1/TTSL:发送缓存1址指针/发送帧时间戳低位 (Transmit buffer 1 address pointer /
Transmit frame time stamp low)
31:0
这些位有2个功能:应用程序用它们指示DMA数据在内存中的位置。等到数据发送完后,DMA
可以用它们存放帧的时间戳
TBAP1:当程序把描述符释放给DMA(TDES[31]’1’),这些位表示缓存1的物理地址。对缓
存的地址对齐不做限制。有关缓存地址对齐的细节,参见27.6.3节:主机数据缓存对齐
TTSL:在DMATDES[31]位清’0’之前,DMA会把对应发送帧的时间戳低32位写入这些位,覆
盖原来的TBAP1内容。只有在该帧的时间戳使能(TDES025TTSE位为’1’)和帧的最后部分
LS位为’1’时,DMA才会把时间戳写入这些位
690/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
TDES3:发送描述符字3
TDES3包含描述符的第二个缓冲区的地址指针或下一个描述符,或时间戳数据。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TBAP2/TTSH
rw
TBAP2/TTSH:发送缓存2地址指针(下个描述符地址)/发送帧时间戳高位 (Transmit buffer 2
address pointer (Next descriptor address) / Transmit frame time stamp high)
31:0
这些位有2个功能:程序用它们指示DMA据在内存中的位置。等到数据发送完后,DMA可以
用它们存放帧的时间戳
TBAP2:当程序把描述符释放给DMA的时候(TDES[31]’1’),如果描述符队列为环式时,这些
位表示缓存2的物理地址。如果第二地址链位(TDES0[20])’1’,这些位表示下一个描述符的物
理地址。在TDES0[20]位为’1’时,指针地址必须和总线宽度对齐
TTSH:在DMATDES[31]位清’0’之前,DMA会把对应发送帧的时间戳高32位写入这些位,覆
盖原来的TBAP2内容。只有在该帧的时间戳使能(TDES025TTSE位为’1’)和帧的最后部分
LS位为’1’时,DMA才会把时间戳写入这些位
IEEE1588时间戳的发送DMA描述符格式
在创建描述符(TDES0OWN位为’1’)时,描述符的格式(如前面所述)和域的意义保持不变。然
而,如果使能了IEEE1588功能,则DMA关闭描述符(TDES0OWN位清’0’)时,TDES2
TDES3有不同的意义。
如下图所示,发送描述符会添加额外的时间戳控制和状态位(TTSETTSS)。如果在OWN
’1’时,设置TTSE位为’1’,则MAC控制器为描述符对应的以太网帧帧生成时间戳。在DMA
闭描述符的时候(OWN位清’0’)DMA时间戳写入TDES2TDES3时,会设置TTSS位为’1’
326 IEEE1588时间戳使能时的发送描述符格式
DMA在把TDES0OWN位清’0’之前,会用时间戳的值更TDES2TDES3TDES2为时间戳的低32(在后
接收描述符字2”段落中,该域被称为TTSL)TDES3为时间戳的高32(在后续收描述符字3”段落中,该
域被称为TTSH)
TDES0:发送描述符字0:发送时间戳控制和状态
这个域的数值应该留给DMA在关闭描述符时操作。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OWN
IC LS FS DC DP
TTSE
TE
TTSS
IHE ES JT FF IPE LC
R
TC
H
A
NC LCO EC VF ED UF DB
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
保留
CIC 保留 CC
OWN: 占有位 (Own bit) 31
1:表示DMA占有描述符。0:表示CPU占有描述符。
DMA在传输完整个帧或者这个缓存里的数据全部读出以后把该位清’0’。每个帧的第一个缓存描
述符的占有位,必须在后面缓存描述符的占有位全部为’1’以后,才能置’1’
691/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
IC:完成时中断 (Interrupt on completion) 30
’1’时,在当前帧发送完成以后,会把传输中断位(ETH_DMASR寄存器位[0])’1’
LS:最后分块 (Last segment) 29
’1’时,表示缓存存放着帧的最后一个分块。
FS:第一分块 (First segment) 28
’1’时,表示缓存存放着帧的第一个分块。
DC:不计算CRC (Disable CRC) 27
’1’时,MAC不再在发送帧结束时插入循环冗余检测(CRC)域。该位只在FS(TDES0[28])
’1’时才有效。
DP:不填充 (Disable pad) 26
1MAC不对帧长不足64字节的帧自动填充字节。
0MAC对帧长不足64字节的帧自动添加填充字节,并且不管DC(TDES0[27])的取值而插入
CRC数值。该位只在FS(TDES0[28])’1’时才有效。
TTSE:使能发送时间戳 (Transmit time stamp enable) 25
’1’时,并且TSE(ETH_PTPTSCR[0])也为’1’时,这个描述符对应的帧会打开IEEE1588硬件
时间戳功能。该位只在FS(TDES0[28])’1’时才有效。
保留 24
CIC:校验和插入控制 (Checksum insertion control) 23:22
2位控制校验和的计算和插入:
00:不插入校验和;
01:只使能IP报头的校验和计算和插入;
10:使能IP报头和数据的校验和计算和插入,但是硬件不计算伪报头的校验和;
11:使能IP报头和数据的校验和计算和插入,硬件也计算伪报头的校验和。
TER:环形发送结束 (Transmit end of ring) 21
’1’时,表示到达描述符队列的最后一个描述符。DMA返回队列的起始地址,形成描述符环。
TCH:第二地址链表 (Second address chained) 20
’1’时,表示描述符里的第二地址是下一个描述符的地址,而不是第二个缓存的地址。该位
’1’时,则TBS2(TDES1[28:16])的值不起作用。TDES0[21]的功能优先于本位(TDES0[20])
该位只在FS(TDES0[28])’1’时才有效。
保留 19:18
TTSS:发送时间戳状态 (Transmit time stamp status) 17
作为标志位,为’1’时表示记录下了描述符对应帧的时间戳,记录的时间戳放在TDES2TDES3
处。该位只在LS(TDES0[29])’1’时才有效。
IHEIP报头错误 (IP header error) 16
’1’时,表示MAC发送端发现了IP数据包报头的错误。对IPv4数据包,MAC把报头的长度域和
从收到的字节数目比较,不符合就报错。对IPv6数据包,如果主报头长度不是40字节就报错。
另外,IPv4或者IPv6帧的长度/类型域值和报头的版本信息必须匹配。对IPv4帧,如果报头长度
域值小于0x5,该位也置’1’报错。
ES:错误汇总 (Error summary) 15
该位为下列位的逻辑“或”
TDES0[14]:啰嗦超时;
TDES0[13]:帧清空;
TDES0[11]:载波丢失;
TDES0[10]:无载波;
TDES0[9]:迟到冲突;
TDES0[8]:冲突过多;
TDES0[2]:顺延过多;
TDES0[1]:数据下溢错误;
TDES0[16]IP报头错误;
TDES0[12]IP数据错误。
692/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
JT:啰嗦超时 (Jabber timeout) 14
’1’时,表示MAC发送端发生了啰嗦超时。该位只在MAC设置寄存器的JD位不为’1时才会被
’1’
FF:帧清空 (Frame flushed) 13
’1’时,表示由于CPU发出命令,DMA/MTL把帧从FIFO中清空。
IPEIP数据错误 (IP payload error) 12
’1’时,表示MAC发送端发现了IP数据包的TCPUDP或者ICMPIP数据错误。发送端会核
IPv4或者IPv6显示的数据长度与实际收到的TCPUDPICMP数据数目,不符合就置’1’
错。
LCA:载波丢失 (Loss of carrier) 11
’1’时,表示帧发送的时候发生了载波丢失(在发送时,MII_CSR信号在一个或一个以上发送时
钟周期中为无效状态)。该位只有在半双工模式下,发送帧没有冲突时有效。
NC:无载波 (No carrier) 10
’1’时,表示帧发送的时候PHY的载波侦听信号无效。
LCO:迟到冲突 (Late collision) 9
’1’时,表示帧因为发送时在冲突窗口(MII模式下,包括前导符的64字节时间)之后出现冲突
而中止发送。如果溢出错误位为’1’,该位无效。
EC:冲突过多 (Excessive collision) 8
’1’时,表示帧因为发送时连续出现16次冲突而中止发送。如果MAC设置寄存器的RD(不进行
重试)位为’1’,那么在一次冲突发生后,该位就置’1’,并中止发送。
VFVLAN (VLAN frame) 7
’1’时,表示发送的帧是VLAN帧。
CC:冲突计数 (Collision count) 6:3
4位值记录了帧发送出去前出现的冲突次数。在冲突过多位(TDES0[8])’1’时,该位无效。
EC:顺延过多 (Excessive deferral) 2
’1’时,表示在MAC设置寄存器的顺延位为’1’时,因为顺延超过24288位时间而结束发送。
UF:数据下溢错误 (Underflow error) 1
’1’时,表示从RAM送到MAC的数据过迟,导致MAC中止发送帧。数据下溢错误表示DMA
发送帧的时候遇到了空的缓存。发送过程进入暂停状态,并设置发送数据下溢位(ETH_DMASR
寄存器位5)和发送状态位(ETH_DMASR寄存器位0)’1’
DB:顺延位 (Deferred bit) 0
’1’时,表示MAC因为载波被占用而推迟发送。该位只在半双工模式下有效。
TDES1:发送描述符字1
693/754
参见前述TDES1:发送描述符字1
TDES2:发送描述符字2
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TTSL
rw
TTSL:发送帧时间戳低位 (Transmit frame time stamp low) 31:0
DMA会把对应帧的时间戳低32位写入这些位。只有在LS(帧的最后一部分)’1’时,DMA才会
把时间戳写入这些位
TDES3:发送描述符字3
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TTSH
rw
TTSH:发送帧时间戳高位 (Transmit frame time stamp high) 31:0
DMA会把对应帧的时间戳高32位写入这些位。只有在LS(帧的最后一部分)’1’时,DMA才会
把时间戳写入这些位
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
27.6.8 接收DMA设置
下图显示了接收DMA控制器的接收过程,详述如下:
1. CPU建立接收描述符(RDES0~RDES3),并置OWN位为’1’
2. SR(ETH_DMAOMR[1])’1’DMA进入运行状态,在此状态下,DMA尝试获取接收
描述符,如果取到的描述符不可用(CPU占有),则DMA进入暂停状态,并跳到步骤9
3. DMA从取到的描述符解析出接收缓存地址。
4. 处理接收到的帧,并将其发送到接收缓存。
5. 如果缓存被填满或者帧传输结束,接收控制器会取描述符队列中的下一个接收描述符。
6. 如果当前帧传输结束,DMA跳到步骤7。如果当前帧传输没有结束(未接收到帧尾EOF)
DMA又没能占有下一个描述符,这时,如果没有使能帧清空功能,则DMA设置RDES0
描述符错误位。DMA关闭当前描述符(OWN位清’0’),并清除RDES1LS位为’0’,把描述
符标记为存放帧的中间描述符(如果没有使能帧清空功能,则标记为最后帧),然后跳到步
8。如果当前帧传输没有结束,而DMA成功占有下一个描述符,那么DMA关闭当前描述
符,标记其为中间描述符,然后退回步骤4
7. 如果使能了IEEE1588时间戳功能,DMA把时间戳写入当前描述符的RDES2RDES3
然后再把接收到帧的状态信息写入RDES0,把OWN位清’0’,把LS位置’1’
8. 接收控制器检查对列当前位置描述符的OWN位,如果CPU占有这个描述符(OWN=0),且
接收缓存不可用位(ETH_DMASR[7])’1’DMA进入暂停状态,跳到步骤9。如果DMA
有这个描述符,那么接收控制器回到步骤4,等待接收下一帧。
9. 在进入暂停状态前,DMA清空接收FIFO里不完整的帧(可以通过ETH_DMAOMR24控制
使能这个清空帧功能)
10. DMA收到接收查询命令或者接收FIFO里有下一个接收到帧的帧头时,DMA退出暂停状
态,接收控制器跳到步骤2,并取下一个描述符。
DMA直到完成时间戳写回并准备写回接收状态信息之前,才会应答接收状态信息。如果应用
序通过CSR打开了时间戳功能,但是又没有收到有效的时间戳值(比如接收FIFO在写入时间戳
就满了)DMA会在RDES2RDES3写入全’1’。如果没有打开时间戳功能,则保持RDES2
RDES3不变。
694/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
327DMA操作
获取接收描述符
为接收下一帧数据做准备,接收控制器总是会尝试获取另一个描述符。只要满足下列条件中的
任意一个,DMA就会尝试获取接收描述符:
DMA进入运行状态后,接收开始/停止位(ETH_DMAOMR[1])立刻被置为’1’
在接收到当前帧的结尾之前,当前描述符的缓存就被填满;
控制器已经完成当前帧的接收,但还没有关闭当前的接收描述符;
由于接收到新的帧,而接收流程由于描述符被CPU占有(RDES[31]=0)而暂停;
接到接收查询命令。
接收帧处理
只有在接收帧通过地址过滤器,且接收FIFO直通模式下帧长大于等于设好的接收阈值,或者接
FIFO存储-转发模式下FIFO 里写入了完整的帧时,MAC 才会把接收到的帧数据转发进
STM32F107xx的内存。如果帧没能通过地址过滤器,而ETH_MACCFFR寄存器位31(接收所有
)不为’1’,则MAC模块直接把帧丢弃。接收FIFO会清空由于冲突,或者过早停止接收而造成的
695/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
短于64字节的帧。在接收FIFO接收到64字节(设好的阈值)后,DMA开始把数据转发给当前描述
符对应的接收缓存。在DMAAHB接口数据接收准备就绪后(发送DMA未通过AHB接口取发送
帧数据时)DMARDES0FS(RDES0[9])’1’,表示缓存里是帧的第一部分。在DMA填满
接受缓存,或者帧接收完毕后,DMAOWN(RDES[31])’0’,释放描述符。如果完整的接收
帧包含在单一的描述符中,则LS(RDES[8])FS(RDES[9])都为’1’DMA取下一个描述符,
把前一个描述符的LS位置为’1’,写回接收状态信息到前一个描述符,再将其释放。然后,DMA
把接收中断位(ETH_DMASR[6])置为’1’。上面的步骤会一直重复直到DMA发现描述符被CPU
有,此时接收流程会把接收缓存不可用位(ETH_DMASR[7])置为’1’,并进入暂停状态。当前接
收描述符列表的位置不变。
接收流程暂停
在接收流程暂停的时候,如果接收到新的帧,DMA会重新从STM32F107xx内存里取当前描述
符。如果这时DMA能够占有描述符,接收流程就会重新进入运行模式。如果CPU仍然占有描述
符,那么DMA默认会丢弃在接收FIFO顶部的这个帧,并且丢失帧计数器加1。如果接收FIFO
有一个以上的帧,则重复上述的步骤。把DMA操作模式寄存器(ETH_DMAOMR)的位24(DFRF
)置为’1’可以阻止清空或者丢弃接收FIFO顶部的帧;这时,接收流程会把接收缓存不可用位置
’1’,并回到暂停状态。
接收DMA描述符
如下图,描述符结构体包含432位字,RDES0RDES1RDES2RDES3
328DMA描述符
RDES0:接收描述符字0
RDES0包含了接收帧的状态信息,帧长和描述符的占有信息。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OWN
AFM
ES DS SA
F
LE OE
VLAN
FS LS
IPHCE
LCO
FT
RWT
RE DE CE
PCE
FL
rw
OWN: 占有位 (Own bit) 31
1:表示DMA占有描述符。0:表示CPU占有描述符。
DMA在传输完整个帧或者填满描述符对应的缓存以后把该位清’0’
AFM:目的地址过滤器未通过 (Destination address filter fail) 30
’1’时,该位表示帧没有通过MAC控制器的目的地址(DA)过滤器。
FL:帧长 (Frame length) 29:16
这些位表示了发往内存包括CRC的接收帧长度,以字节为单位。只有在LS(RESD0[8])’1’
描述符错误位(RDES0[14])’0’时,这些位才有效。
只有在LS(RESD0[8])’1’时,这些位的值才表示接收帧的长度。如果LS位和错误汇总位(ES
位,RDES0[15])都为’0’,则这些位的值表示帧当前传送到内存里的累计字节数目。
696/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
ES:错误汇总 (Error summary) 15
该位为下列位的逻辑“或”:
RDES0[1]CRC错误;
RDES0[3]:接收错误;
RDES0[4]:看门狗超时;
RDES0[6]:迟到冲突;
RDES0[7]:巨人帧(如果RDES0[7]位提示IPv4报头校验和错误,该位无效)
RDES0[11]:溢出错误;
RDES0[14]:描述符错误。
该位在LS(RDES0[8])’1’时才有效。
DE:描述符错误 (Descriptor error) 14
’1’时,该位表示由于描述符的缓存装不下当前帧,因而帧被切断,而DMA又不占有下一个描
述符。该位在LS(RDES0[8])’1’时才有效。
SAF:源地址过滤器未通过 (Source address filter fail) 13
’1’时,该位表示帧没有通过MAC控制器的源地址(SA)过滤器。
LE:长度错误 (Length error) 12
’1’时,表示接收到帧的实际长度与以太网帧头长度/类型域的值不相符。该位在RDES0[5]
’0’时才有效。
OE:溢出错误 (Overflow error) 11
’1’时,表示由于接收FIFO溢出,接收到的帧被破坏。
VLANVLAN标签 (VLAN tag) 10
’1’时,表示描述符指向的帧被MAC控制器标记为VLAN帧。
FS:第一个描述符 (First descriptor) 9
’1’时,表示这个描述符包含帧的第一个缓冲区,如果缓冲区的长度为0,则第2个缓冲区包含
帧的开头;如果第2个缓冲区的长度也是0,则下一个缓冲区包含帧的开头。
LS:最后一个描述符 (Last descriptor) 8
’1’时,表示这个描述符指向的缓存区是帧的最后一个缓冲区。
IPHCEIPv报头校验和错误 (IPv header checksum error) 7
’1’时,表示IPv4或者IPv6的报头错误。错误可能是由于以太网类型域和IP版本域值不匹配,
IPv4报头校验和不对或者以太网帧的IP报头字节数不足造成的。
LCO:迟到冲突 (Late collision) 6
’1’时,表示在半双工模式下接收帧的时候发生了迟到冲突。
FT:帧类型 (Frame type) 5
’1’ 时表示接收到的帧是以太网帧(LT 域大于等于0x0600) 。置’0’ 时表示接收到的帧是
IEEE802.3帧。在接收到帧是小于14字节的过短帧时,该位无效。
RWT:接收看门狗超时 (Receive watchdog timeout) 4
’1’时表示在接收当前帧的时候,看门狗超时,之后,当前接收帧被截断。
RE:接收错误 (Receive error) 3
’1’时表示在接收帧过程中RX_DV有效时,RX_ERR信号有效。
DEDribble位错误 (Dribble bit error) 2
’1’时表示接收到的帧长度不是字节的整数倍(奇数个4位数据)。该位只在MII模式下有效。
CECRC错误 (CRC error) 1
’1’时表示接收到帧发生循环冗余检测(CRC)错误。该位只在LS(RDES0[8])’1’时有效。
PCE:数据校验和错误 (Payload checksum error) 0
’1’时,表示MAC控制器计算的TCPUDPICMP校验与接收到帧的TCPUDPICMP的校
验和域值不相符。在接收到以太网帧的数据长度和IPv4IPv6数据包长度域的值不符时,该位
也会置’1’
下表显示了位570取值的含义
697/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
198 接收描述符0
5 7 0 帧状态
帧类型 校验和错误 数据校验和错误
0 0 0 IEEE802.3类型帧(长度域值小于0x0600)
1 0 0 IPv4/IPv6类型帧,未检测到校验和错误
1 0 1 IPv4/IPv6类型帧,检测到数据校验和错误(PCE)
1 1 0 IPv4/IPv6类型帧,检测到IP报头校验和错误(IPC CE)
698/754
1 1 1
IPv4/IPv6类型帧,检测到IP报头校验和错误和数据校验和
错误
0 0 1
IPv4/IPv6类型帧,未检测IP报头校验和错误;由于不支
持的数据格式,未执行数据校验和检测
0 1 1
帧类型即不是IPv4也不是IPv6(校验和模块不执行校验和检
)
0 1 0 保留
RDES1:接收描述符字1
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DIC
RER
RCH
rw rw rw
RBS2
保留
RBS1
保留
rw rw
DIC:关闭接收完成中断 (Disable interrupt on completion) 31
’1’时,在帧接收完成的时候,对于当前描述符指示的帧,不设置ETH_DMASR寄存器的RS
(6)。这样也就不会发生RS位触发的中断
保留 30:29
RBS2:接收缓存2大小 (Receive buffer 2 size) 28:16
这些位的值给出接收缓存2以字节为单位的大小。即使RDES3的值(接收缓存2地址指针)没有与
总线宽度对齐,根据总线宽度是3264或者128位,缓存大小必须分别48或者16的倍数,
否则缓存操作会造成不可预料的后果。如果RDES1[14]位为’1’,这些位取值无意义。
RER:接收描述符环形结构结尾 (Receive end of ring) 15
’1’时,该位表示当前描述符是描述符队列中的最后一个。DMA会回到描述符队列基地址去取
下一个描述符,使描述符队列形成环形结构。
RCH:第二地址链表 (Second address chained) 14
’1’时,该位表示描述符里的第二地址是下一个描述符的地址,而不是第二个缓存的地址。该
位为’1’时,RBS2(TDES1[28:16])的值可以忽略。RDES0[15]的作用优先于本位(RDES0[14])
保留 13
RBS1:接收缓存1大小 (Receive buffer 1 size) 12:0
这些位的值表示接收缓存1以字节为单位的大小。即使RDES3的值(接收缓存2地址指针)没有与
总线宽度对齐,根据总线宽度是3264或者128位,缓存大小必须分别48或者16的倍数,
否则缓存操作会造成不可预料的后果。如果这些位取值为0DMA忽略接收缓存1,按照
RDES[14]的取值,直接取接收缓存2或者下一个描述符
RDES2:接收描述符字2
RDES2包含描述符第一个数据缓存的地址指针,或者时间戳数据。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RBAP1/RTSL
rw
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
RBAP1/RTSL:接收缓存1地址指针/接收帧时间戳低位 (Receive buffer 1 address pointer /
Receive frame time stamp low)
31:0
这些位有2个功能:应用程序用它们表示DMA数据在内存中的位置。等到数据接收完后,DMA
可以用它们存放帧的时间戳。
RBAP1:当程序把描述符传递给DMA的时候(RDES0OWN位为’1’),这些位表示缓存1
物理地址。不限制缓存区地址的对齐方式,除非发生下列情况:RDES2指向的缓存用来存放帧
的第一个分块。因为DMA在接收帧起始的时候,会对RDES2[3/2/1:0](总线宽度12864
32位对应RDES2[3:0][2:0][1:0])0,但帧数据还是移位存放到指针实际指向的地址。如果
RDES2指向的缓存存放的是帧中间或者结尾的分块。DMA会忽略RDES2[3/2/1:0]的值。
RTSL:在DMARDES0OWN位清’0’之前,DMA会把帧的时间戳低32位写入这些位,覆盖
掉原来的RBAP1值。只有在使能时间戳功能和LS位为’1’(表示缓存存放的是帧的最后分)时,
DMA才会在这些位写入时间戳。
RDES3:接收描述符字3
RDES3包含描述符第二个数据缓存的地址指针或者指向下一个描述符,或者时间戳数据。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RBAP2/RTSH
rw
RBAP2/RTSH:接收缓存2地址指针(或者下一个描述符地址指针)/接收帧时间戳高位 (Receive
buffer 2 address pointer (next descriptor address) / Receive frame time stamp high)
31:0
这些位有2个功能:程序用它们表示DMA据在内存中的位置。等到数据接收完后,DMA可以
用它们存放帧的时间戳
RBAP2:当应用程序把描述符传递给DMA的时候(RDES0OWN位为’1’),在描述符队列为
环形结构的时候,这些位表示缓存2的物理地址。如果第二地址链表位(RDES0[14])’1’,并且
下一个描述符存在,则这些位指向下一个描述符的物理地址。如果RDES0[14]位为’1’,描述符
地址指针必须和总线宽度对(总线宽度分别为12864或者32位时,RDES3[3,2或者1:0]=0)
RDES0[14]’0’时,RDES3的取值没有限制,除非发生下列情况:RDES3指向的缓存用来
存放帧的第一个分块,而DMARDES3的值作为缓存的地址。如果RDES3指向的缓存存放的
是帧中间或者结尾的分块,DMA会忽略RDES2[3/2/1:0]的值(依照总线宽度分别为1286432
位时)
RTSH:在DMARDES0OWN位清’0’之前,DMA会把帧的时间戳高32位写入这些位,覆盖
掉原来的RBAP2值。只有在时间戳使能和LS位为’1’(表示缓存存放的是帧的最后分块)时,DMA
才会在这些位写入时间戳。
IEEE1588时间戳的接收DMA描述符格式
329 IEEE1588时间戳使能时的接收描述符格式
DMA在把RDES0OWN位清’0’之前,会用时间戳的值更新RDES2RDES3RDES2更新为时间戳的低32
(该域在RDES2:接收描述符字2
699/754
中称为RTSL)RDES3更新为时间戳的高32(该域RDES3:接收描述符
3中称为RTSH)
RDES0:接收描述符字0
参见RDES0:接收描述符字0
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
RDES1:接收描述符字1
700/754
参见RDES1:接收描述符字1
RDES2:接收描述符字2
下表描述了在接收帧时间戳功能使能时,DMA关闭接收描述符后,RDES2域的不同含义。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RTSL
rw
RTSL:接收帧时间戳低位 (Receive frame time stamp low) 31:0
DMA会把帧的时间戳低32写入这些位。只有在LS(RDES0[8])’1’(表示缓存存放的是帧的
最后一部分)时,DMA才会把时间戳写入这些位。如果本域和RDES3RTSH域值为全”1”,则
表示时间戳信息损坏。
RDES3:发送描述符字3
下表描述了在接收帧时间戳功能使能时,DMA关闭接收描述符后,RDES3域的不同含义。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RTSH
rw
RTSH:发送帧时间戳高位 (Receive frame time stamp high) 31:0
DMA会把帧的时间戳高32写入这些位。只有在LS(RDES0[8])’1’(表示缓存存放的是帧的
最后一部分)时,DMA才会把时间戳写入这些位。如果本域和RDES2RTSL域值为全”1”,则
表示时间戳信息损坏。
27.6.9 DMA中断
有多种事件可以产生中断。ETH_DMASR包含了所有能引发中断的位,而ETH_DMAIER寄存器
包含了每一个能产生中断事件的中断使能位。
中断有2组,见ETH_DMASR寄存器描述,可分为正常组和异常组。通过对相应位写’1’,可以清
除中断。如果清除了一个组里所有使能的中断,相应地也清除了这个组的汇总位。如果中断是
MAC控制器引发的,那么ETH_DMASRTSTS位或者PMTS位会置高。
中断事件不会排队,即如果发生某一中断,在响应它之前不会再发生另一个中断。例如,接收
中断位(ETH_DMASR[6])表示一个或者多个帧已经接收到STM32F107xx的缓存里,中断处理程
序需要从头到尾检索所有DMA占有的描述符。
同一时间多个能引发中断的事件只能产生一个中断。中断处理程序需要检查ETH_DMASR寄存
器来判断中断的来源。在正确地清除掉ETH_DMASR寄存器的相应位以后,除非再发生一个中
断事件,否则不会再产生中断。例如控制器产生接收中断(ETH_DMASR[6]’1’),中断处理程
序读出ETH_DMASR寄存器后,又发生了接收缓存不可用(ETH_DMASR[7]’1’)事件;在首先
清除了接收中断后,由于接收缓存不可用中断依然有效并需要处理,会再产生一个新的中断。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
330 DMA中断示意图
27.7 以太网中断
以太网控制器有2个中断向量,一个用于以太网正常操作,另一个用于映射到EXTI线19的以太
网唤醒事件(检测唤醒帧或者Magic Packet)
第一个中断向量用于由MACDMA产生的中断,详见第27.5.4”MAC中断和第27.6.9”DMA
中断
第二个中断向量用于PMT模块在唤醒事件时产生的中断。唤醒事件映射EXTI线19上,它可以
使STM32F107xx微控制器退出低功耗模式,并产生中断。
在以太网唤醒事件映射到EXTI线19时,一旦发生唤醒事件,如果使能MACPMT中断,又使
能了EXTI线19检测到上升沿时产生中断,那么2个中断会同时发生。
以太网外设有一个看门狗定时器(ETH_DMARSWTR 寄存器),可用于灵活控制RS
(ETH_DMASR[6])的置位。如果对看门狗写入非0的值,而接收到帧的描述符里没有使能接收中
(RDES1[31]=0),在接收DMA把帧接收到系统内存里的时候,看门狗定时器就被激活,同时
不设置RS位为’1’。在看门狗定时器递减为0时,才设置RS位为’1’,如果使能了相应的RIE
断,则发生中断。看门狗定时器递减为0前,如果接收到一个帧,帧描述符使能了接收中断
RS位被置为’1’同时关闭看门狗定时器。
注意:
PMT
控制和状态寄存器会自动清除唤醒帧接收和
Magic Packet
接收中断标志位。然而,由于
这些标志位所在的寄存器位于
CLK_RX
域,在应用程序看到这些标志位被清除之前可能会有可观
的延迟。如果
RX
时钟比较慢的话
(
10M
位模式下
)
AHB
总线时钟频率比较高的情况下,这个
延迟会特别长。
由于
PMT
CPU
产生的中断请求也在
RX_CLK
域的同一个寄存器里,因此在读出
PMT_CSR
寄存
器后,
CPU
有可能会错误地再调用一次中断程序。因此,需要应用程序在中断里查询唤醒帧接
收和
Magic Packet
接收标志位,直到它们变成
0
再退出中断服务程序。
701/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
27.8 以太网寄存器描述
可以以字节(8)、半字(16)和字(32)的形式对本外设的寄存器进行访问。
27.8.1 MAC寄存器描述
以太网MAC设置寄存器(ETH_MACCR)
地址偏移:0x0000
复位值:0x0000 8000
MAC设置寄存器是MAC的工作模式寄存器。它定义了接收和发送的工作模式。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
WD JD
CSD
FES
ROD
LM DM
IPCO
RD
APCS
DC TE RE
rw rw rw rw rw rw rw rw rw rw rw rw rw
保留 保留 IFG
保留
保留
BL 保留
rw rw
保留 31:24
WD:关闭看门狗 (Watchdog disable) 23
1MAC关闭接收端上的看门狗定时器,并且能够接收最多达16384字节的帧。
0MAC允许接收不超过2048字节的帧,超过2048字节的帧会被切断。
JD:不检测啰嗦 (Jabber disable) 29:16
1MAC关闭发送端上的啰嗦定时器,并且能够发送最多达16384字节的帧。
0:如果应用程序试图发送超过2048字节的帧,MAC会关断发射器。
保留 21:20
IFG:帧间间隙 (interframe gap) 19:17
这些位控制了发送2个帧之间的最短间隙
00096位时间;
00188位时间;
01080位时间;
11140位时间。
注意:在半双工模式下,
IFG
可设定的最小值是
64
位时间
(IFG = 100)
,不允许取更小的值。
CSD:关闭载波侦听功能 (Carrier sense disable) 16
1:在半双工模式下,MAC的发送器在发送帧过程中忽略MIICSR信号,发送过程中载波丢失
或者没有载波都不会报错。
0MAC在发送过程中如果发生上述情况会报错,甚至放弃发送。
保留 15
FES:快速以太网 (Fast Ethernet speed) 14
该位表示快速以太网(MII)模式的速度:
010 Mbit/s
1100 Mbit/s
ROD:关闭自接收功能 (Receive own disable) 13
1MAC在半双工模式下不接受帧。
0MAC在发送时接收所有来自PHY的数据包。
该位在全双工模式下无意义。
LM:自循环模式 (Loopback mode) 12
’1’时,MACMII端工作在自循环模式。自循环模式需要接收时钟输入(RX_CLK)来正常工
作,这是因为在内部,发送时钟没有循环返回。
DM:双工模式 (Duplex mode) 11
’1’时,MAC工作在全双工模式,可以同时进行收和发。
702/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
IPCOIPv4校验和机制 (IPv4 checksum offload) 10
1:使能接收到IPv4帧的数据TCP/UDP/ICMP报头的校验和检验。
) 0:关闭接收端的校验和检测功能,相应的PCEIPHCE标志位值总是’0’(见表195
RD:不尝试重试 (Retry disable) 9
1MAC只会尝试发送1次。如果在MII上发生冲突,MAC会放弃发送,并在发送状态信息里报
告冲突过多错误。
0MAC会在发生冲突后按照BL位的设定,在一定时间后重发。
注:该位只在半双工模式下有效。
保留 8
APCS:自动填/CRC剥离 (Automatic pad/CRC stripping) 7
1:只有在接收到帧的长度小于等于1500字节时,MAC会去除帧的填充字节和CRC域。所有长
度大于等于1501字节的帧,MAC都会保留帧的填充字节和CRC域,并转发给应用程序。
0MAC会转发所有接收到的帧,而不改变帧的内容。
BL:退后限制 (Back-off limit) 6:5
退后限制定义了MAC在发送发生冲突后,重发前等待的随机时间间隙数目(时间间隙在
1000Mbit/s模式下为4096位时间,在10/100M/s模式下为512位时间)
注意:这些位只在半双工模式下有效。
00k = min(n, 10)
01k = min(n, 8)
10k = min(n, 4)
11k = min(n, 1)
其中n = 重发等待时间间隙数目,r是从0 r 2k之间的随机数。
DC:顺延检验 (Deferral check) 4
1MAC使能顺延检验功能。10/100M/s模式下发送延24288位时间后,MAC中止发送,
并在发送状态信息里置顺延过久错误标志位。在帧准备发送时就开始顺延检验,但是如果检测
到有效的CRS(载波侦听)信号则不会开始。顺延时间不会累计,假设顺延计时到10000位时,
然后开始发送,但是发现冲突,退步重发,在重发完成以后会开始重新顺延计时,这时顺延计
数器重置为0,重新启动顺延计时。
0MAC关闭顺延检验功能。MAC会延迟发送直到CRS信号失效。
该位只在半双工模式下有效。
TE:使能发送器 (Transmitter enable) 3
1MAC使能在MII上的发送状态机。
0MAC在完成发送当前帧后,关闭发送状态机,不再发送任何帧。
RE:使能接收器 (Receiver enable) 2
1MAC使能在MII上的接收状态机。
0MAC在接收完当前正在接收的帧后,关闭接收状态机,不再接收任何帧。
保留 1:0
以太网MAC帧过滤器寄存器(ETH_MACFFR)
地址偏移:0x0004
复位值:0x0000 0000
MAC帧过滤器寄存器包含了接收帧的过滤器控制位。一些控制位控制MAC的地址检验模块,
形成了第一层次的地址过滤。另一些控制位形成的第二层次过滤是对将要输入的帧而言的,进
行其他过滤选项如允许坏帧通过、允许控制帧通过等。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RA
HPF
SAF
SAIF
BFD
PAM
DAIF
HM HU PM
rw rw rw rw rw rw rw rw rw rw
PCF
rw
保留
703/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
RA接收全部 (Receive all) 31
1MAC会把所有接收到的帧转发给应用程序,不管它们是否通过了地址过滤器。源/目的地址
过滤器的结果(通过或者未通过),会反映在更新接收状态信息的相应标志位。
0MAC只会把接收到的、通过了源/目的地址过滤器的帧转发给应用程序。
保留 30:11
HPFHASH或者完美过滤器 (Hash or perfect filter) 10
1:地址过滤器会根HM位和HU位的取值,来判定帧通过的条件:是需要符合HASH过滤器,
还是需要符合完美过滤器。
0:如果HM位或者HU位置1,只要帧符合HASH过滤器,就能通过地址过滤器。
SAF:源地址过滤器 (Source address filter) 9
MAC会把接收到帧的源地址域与使能的源地址寄存器值比较。如果符合,会设置接收状态信息
里的相应标志位。
1:如果帧不能通过源地址过滤器,MAC会丢弃该帧。
0MAC转发所有接收到的帧到应用程序,过滤结果会反映在接收状态信息里的相应标志位。
SAIF:源地址过滤结果颠倒 (Source address inverse filtering) 8
1:地址检验模块工作在源地址过滤结果颠倒模式。所有源地址符合源地址寄存器的帧会被标记
为未通过。
0:所有源地址不符合源地址寄存器的帧会被标记为未通过。
PCF:通过控制帧 (Pass control frames) 7:6
这些位设置了转发所有控制帧(包括单播和多播PAUSE)给应用程序的选项。注意是否处理
PAUSE控制帧取决于RFCE(ETH_MACFCR[2])的值。
00或者01MAC不转发任何控制帧给应用程序;
10MAC转发所有的控制帧给应用程序,包括那些没能通过地址过滤器的控制帧;
11MAC转发通过地址过滤器的控制帧给应用程序。
BFD:不接收广播帧 (Broadcast frames disable) 5
1:地址过滤器过滤掉所有收到的广播帧;
0:所有收到的广播帧都能通过地址过滤器。
PAM:通过全部多播帧 (Pass all multicast) 4
1:所有的带多播目的地址的帧(地址第一位为’1’)都能通过过滤器;
0:多播帧过滤与否取决于HM位的值。
DAIF:目的地址过滤结果颠倒 (Destination address inverse filtering) 3
1:对多播帧和单播帧,地址检验模块工作在目的地址过滤结果颠倒模式;
0:过滤器正常工作。
HM:多播HASH (Hash multicast) 2
1MAC根据HASH列表对接收到的多播帧进行目的地址过滤;
0MAC对接收到的多播帧进行目的地址完美过滤,即把帧的目的地址域和目的地址寄存器的
设定值比较。
HU:单播HASH (Hash unicast) 1
1MAC根据HASH列表对接收到的单播帧进行目的地址过滤;
0MAC对接收到的单播帧进行目的地址完美过滤,即把帧的目的地址域和目的地址寄存器的
设定值比较。
PM:混杂模式 (Promiscuous mode) 0
’1’时,无论接收到帧的目的地址和源地址为何,所有的帧都能通过地址过滤器。此时,接收
状态信息的目的地址/源地址错误位总是为’0’
以太网MAC Hash列表高寄存器(ETH_MACHTHR)
地址偏移:0x0008
复位值:0x0000 0000
64位的HASH列表可以用来进行成组的地址过滤。进行HASH过滤时,帧的目的地址输入CRC
辑,并取CRC值的高6位检索HASH列表。32位的CRC计算多项式如下,详见第27.5.3节:MAC
帧的接收。
704/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
G(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
这个CRC值的最高位(MSB)决定使用哪个寄存器(Hash列表高寄存器或者Hash列表低寄存器)
剩下的5位决定检查寄存器里的哪一位。HASH值为0b00000的对应选中寄存器的位0HASH
0b11111的对应选中寄存器的位31
例如,输入帧的目的地址是0x1F52 419C B6AF(MII接口最先接收到的字节是0x1F),则计算出
CRC值高6位是0x2C因此用HTH的位12进行HASH过滤。如果输入帧的目的地址是0xA00A
9800 0045,则算出的HASH值是0x07,用HTL的位7来进行HASH过滤。
如果HASH寄存器对应的位是’1’,则MAC就接受这个帧;否则,MAC就丢弃这个帧。如
ETH_MACFFR寄存器的PAM(通过全部多播帧)’1’,那么无论HASH过滤结果如何,MAC
受所有的多播帧。
Hash列表高寄存器包含了多播HASH列表的高32位。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
HTH
rw
HTHHASH列表高 (Hash table high) 31:0
这些位是HASH列表的高32位。
以太网MAC Hash列表低寄存器(ETH_MACHTLR)
地址偏移:0x000C
复位值:0x0000 0000
Hash列表低寄存器包含了多播HASH列表的低32位。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
HTL
rw
HTLHASH列表低 (Hash table low) 31:0
这些位是HASH列表的低32位。
以太网MAC MII地址寄存器(ETH_MACMIIAR)
地址偏移:0x0010
复位值:0x0000 0000
MII地址寄存器通过接口控制外部PHY的管理信号。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MW MB
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
rc_w1
CR
保留 PA MR
保留
保留 31:16
PAPHY地址 (PHY address) 15:11
这些位的值表示了32个可能的PHY地址中,MII想要访问的PHY地址
MRMII寄存器 (MII register) 10:6
这些位的值选择了要访问PHY的哪个MII寄存器。
保留 5
705/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
CR:时钟范围 (Clock range) 4:2
CR值根据HCLK的频率来决定MDC的时钟频率
HCLK
取值 MDC时钟
000 60~72 MHz HCLK/42
001 -
保留
010 20~35 MHz HCLK/16
011 35~60 MHz HCLK/26
100, 101, 110, 111 -
保留
MWMII (MII write) 1
1:表示将要使用MII的数据寄存器对PHY进行写操作;
0:表示对PHY进行读操作,数据在MII的数据寄存器中。
MBMII (MII busy) 0
在写ETH_MACMIIAR 寄存器和ETH_MACMIIDR 寄存器之前,该位应当读出为’0’ 。在写
ETH_MACMIIAR寄存器时,该位也应为’0’。在访问PHY的时候,该位由应用程序’1’,表示正
在对PHY的进行读或者写操作。对PHY写操作时,必须保持ETH_MACMIIDR寄存器的值(MII
),直到将该位MAC’0’。对PHY读操作时,在MAC’0’该位后,ETH_MACMIIDR寄存器的
值才是有效的。只有该位为’0’时,才能写ETH_MACMIIAR寄存器(MII地址)
以太网MAC MII数据寄存器(ETH_MACMIIDR)
地址偏移:0x0014
复位值:0x0000 0000
MII数据寄存器存放要写入PHY寄存器的值,待写PHY寄存器的位置由ETH_MACMIIAR寄存器
设置。它同时也保存从PHY的寄存器读出的值,被读PHY寄存器的位置由ETH_MACMIIAR寄存
器设置。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
MD
保留
保留 31:16
MDMII数据 (MII data) 15:0
这些位包含了对PHY进行一次读操作后,读出的16位数据。或者在对PHY写操作前,将要写入
16位数据。
以太网MAC流控寄存器(ETH_MACFCR)
地址偏移:0x0018
复位值:0x0000 0000
流控寄存器控制MAC生成和接收控制(PAUSE命令)帧。对寄存器的忙位写’1’会使MAC发送
PAUSE控制帧。控制帧的格式遵守802.3x规范的定义,寄存器的PT(Pause时间)来作为控
制帧Pause时间域的值。在PAUSE帧发送到电缆上前,忙位会保持为’1’。应用程序在写寄存器
之前需要保证忙位已经清’0’
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ZQPD
UPFD
RFCE
TFCE
FCB/
BPA
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
rc_w
1/rw
PT 保留
保留
PLT
PTPAUSE时间 (Pause time) 31:16
这些位的值用来作为控制帧Pause时间域的值。如果Pause时间设置为两次同步于MII时钟域,
那么对寄存器的连续2次写操作之间间隔至少要有4个目标域时钟周期。
保留 15:8
706/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
ZQPD关闭零值PAUSE功能 (Zero-quanta pause disable) 7
1:在撤销FIFO层流控信号时,关闭自动零值Pause控制帧的自动生成;
0:正常操作,打开零值Pause控制帧自动生成功能。
保留 6
PLTPAUSE低阈值 (Pause low threshold) 5:4
这些位设置了自动重发Pause帧的定时器阈值。这个阈值应当小于位[31:16]定义Pause
间。例如,PT = 100H(256个时间间隙)PLT = 01,那么如果在第一个Pause帧发出228(256-
28)个时间间隙后,自动重发第二个Pause帧。
取值 阈值
00 Pause时间 – 4时间间隙
01 Pause时间 – 28时间间隙
10 Pause时间 – 144时间间隙
11 Pause时间 – 256时间间隙
时间间隙是指MII接口发送512(64字节)数据所需要的时间
UPFD单播Pause帧检测 (Unicast pause frame detect) 3
1MAC在检测带唯一多播地址的Pause帧的基础上,还会检测单播地址符合ETH_MACA0HR
寄存器和ETH_MACA0LR寄存器设定值的Pause帧;
0MAC只接收带802.3x规范定义的唯一地址的Pause帧。
RFCE接收流控使能 (Receive flow control enable) 2
1MAC解析接收到的Pause帧,并关闭发送器一段特定的时间;
0MAC不解析Pause帧。
TFCE发送流控使能 (Transmit flow control enable) 1
在全双工模式下—— 1MAC使能发送流控,可以发送Pause帧;0MAC关闭发送流控,不
发送Pause帧。
在半双工模式下—— 1MAC使能背压功能;0MAC关闭背压功能。
FCB/BPA流控忙/背压激活 (Flow control busy/back pressure activate) 0
在全双工模式下,设置该位’1’可以生成Pause控制帧。在半双工模式下,如果TFCE位为’1’
则设置该位为’1’可以激活背压功能。
在全双工模式下,写流控寄存器之前需要确认该位读出为’0’。应用程序要对该位写’0’,来生成
Pause控制帧。在发送控制帧的过程中,该位始终为’1’,表示正在进行发送。在Pause控制帧
发送完成以后,MAC将该位重置为’0’。在MAC把该位清’0’之前,不允许写流控寄存器。
在半双工模式下,设置该位为’1’(并且TFCE位也为’1’)MAC激活背压功能。在背压功能有效
时,如果MAC接收到新的帧,就会在发送端发送阻塞信号,导致冲突发生。MAC设置成全双工
模式时,背压(BPA)功能自动关闭。
以太网MAC VLAN标签寄存器(ETH_MACVLANTR)
地址偏移:0x001C
复位值:0x0000 0000
VLAN标签寄存器包含了用来识别VLAN帧的IEEE802.1Q VLAN标签。MAC把接收到帧的第
1314字节(长度/类型域)0x8100较,再把之后的2个字节和VLAN标签比较。如果比较相
符,就把这个帧的接收状态信息的VLAN位置为’1’VLAN帧的最大合法帧长由基本帧的1518
节增加到1522字节。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
VLANT
C
rw
VLANTI
保留
rw
保留 31:17
707/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
VLANTC12VLAN标签比较 (12-bit VLAN tag comparison) 16
1:使用12位而不是16位的VLAN标识符来进行过滤和比对。用VLAN标签域的位[11:0]和接收到
VLAN标签帧的相应域比对。
0:接收到的VLAN帧第1516字节的全部16位数据都用来与VLANTI位比对。
708/754
15:0 VLANTI(接收到帧的)VLAN标签标识符 (VLAN tag identifier (for receive frames))
这些位包含了用来识VLAN帧的802.1Q VLAN标签,用来和接收到VLAN帧的第1516字节
进行比对。位[15:13]是用户优先级,位[12]是规范格式指示符(CFI),位[11:0]VLAN标签的
VLAN标识符(VID)域。VLANTC位为’1’时,只用VID([11:0])进行比对。
如果VLANTI位的值是全’0’MAC不再比对检验VLAN帧的第1516字节,只要接收到帧的类
型域值是0x8100,都直接视为VLAN帧。
以太网MAC远程唤醒帧过滤器寄存器(ETH_MACRWUFFR)
地址偏移:0x0028
复位值:0x0000 0000
应用程序可用本地址对远程唤醒帧过滤器寄存器进行读写。该寄存器实质上是指向8个不透明
唤醒帧过滤器寄存器的指针。对该寄存器地址(偏移为0x0028)8次连续写操作,可以写入全部
8个唤醒帧过滤器寄存器;对该寄存器地址(偏移为0x0028)8次连续读操作,可以读出全部8
唤醒帧过滤器寄存器。该寄存器包含第7MAC地址的高16位。详见前述远程唤醒帧过滤器寄
存器段落。
331 以太网MAC唤醒帧过滤器寄存器(ETH_MACRWUFFR)
以太网MAC PMT控制和状态寄存器(ETH_MACPMTCSR)
地址偏移:0x002C
复位值:0x0000 0000
ETH_MACPMTCSR寄存器设置并监控唤醒事件。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
WFFRP
R
GU
WFR
MPR
WFE
MPE
PD
rs rw
rc_r rc_r
rw rw rs
保留 保留 保留
WFFRPR唤醒帧过滤器寄存器指针复位 (Wakeup frame filter register pointer reset) 31
’1’时,会把远程唤醒帧过滤器寄存器指针复位为0,该位在1个时钟周期后自动清’0’
保留 30:10
GU:全局单播 (Global unicast) 9
’1’时, 所有能通过MAC地址过滤器的单播帧,都被认为是唤醒帧。
保留 8:7
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
WFR:接收到唤醒帧 (Wakeup frame received) 6
’1’时,表示由于接收到唤醒帧,产生了电源管理(PMT)事件。读本寄存器可以清’0’该位。
MPR:接收到Magic Packet (Magic packet received) 5
’1’时,表示由于接收到Magic Packet而产生了电源管理(PMT)事件。读本寄存器可以清’0’
位。
保留 4:3
WFE:唤醒帧使能 (Wakeup frame enable) 2
’1’时,表示接收到唤醒帧时,允许产生电源管理(PMT)事件。
MPEMagic Packet使能 (Magic Packet enable) 1
’1’时,表示接收到Magic Packet时,允许产生电源管理(PMT)事件。
PD:掉电 (Power down) 0
’1’时,MAC丢弃所有接收到的帧。在接收到Magic Packet或者唤醒帧时,该位自动清’0’,同
时关闭掉电模式。在该位清’0’后,MAC向应用程序转发接收到的帧。只有在WFE(唤醒帧使
)或者MPE(Magic Packet使能)’1’时,才能把该位置’1’
以太网MAC中断状态寄存器(ETH_MACSR)
地址偏移:0x0038
复位值:0x0000 0000
ETH_MACSR寄存器能用来确定MAC中产生中断的事件。
1514131211109876543210
TSTS MMCTS MMCRS MMCS PMTS
rc_r r r r r
保留 保留 保留
保留 15:10
TSTS:时间戳触发状态 (Time stamp trigger status) 9
在系统时间值等于或者超过目标时间高、低寄存器设定的值时,该位置’1’
读这个寄存器则清’0’该位。
保留 8:7
MMCTSMMC发送状态 (MMC transmit status) 6
ETH_MMCTIR寄存器产生任一中断时,该位置’1ETH_MMCTIR寄存器里全部位清’0’时,
该位清’0’
MMCRSMMC接收状态 (MMC receive status) 5
ETH_MMCRIR寄存器产生任一中断时,该位置’1’ETH_MMCRIR寄存器里全部位清’0’时,
该位清’0’
MMCSMMC状态 (MMC status) 4
[6:5](MMCTS位和MMCRS)中任一位为’1’时,该位置’1’。位6和位5都为’0’时,该位置’0’
PMTSPMT状态 (PMT status) 3
在掉电模式下,接收到唤醒帧或者Magic Packet(以太网MAC PMT控制和状态寄存器
5和位6的描述),该位置’1’。通过读ETH_MACPMTCSR寄存器把WFR位和MPR位清’0’
后,该位也被清’0’
保留 2:0
以太网MAC中断屏蔽寄存器(ETH_MAIMR)
地址偏移:0x003C
复位值:0x0000 0000
ETH_MAIMR寄存器可以用来屏蔽由于ETH_MACSR中对应事件引起的中断。
1514131211109876543210
TSTIM PMTIM
rw rw
保留 保留保留
15:10 保留
709/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
TSTIM9 :时间戳触发中断屏蔽 (Time stampe trigger interrupt mask)
’1’时,禁止产生时间戳中断。
8:3 保留
PMTIM3 PMT中断屏蔽 (PMT interrupt mask)
’1’时,禁止产生由于ETH_MACSR寄存器的PMT状态位置’1’而引发的中断。
保留 2:0
C0高寄存器(ETH_MACA0HR)
FF
6字节设备的第一个MAC地址的高16位。注意,MII接收到的帧的目
太网MA 地址
地址偏移:0x0040
复位值:0x0010 FF
MAC地址0高寄存器包含
的地址域的第一个字节,对应的是MAC地址低寄存器的低字节([7:0])。例如,MII接收到的目
的地址是0x1122 3344 5566(0x11是第一个字节),那么和MAC地址0寄存器位[47:0]比较的其实
0x6655 4433 2211
31 30 29 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MO
1 rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
保留 MACA0H
28 27 26 25 24 23 22 21
31 MO总是1
保留 30:16
MACA0HMAC地址0[47:32] (MAC address0 high [47:32])
到的帧进行过滤,也用来在发
15:0
这些位包含了6字节MAC地址0的高16位。MAC用这些位对接收
送流控(Pause)帧的时候作为帧的源地址。
以太网MAC )
FF
6字节设备的第一个MAC地址的低32位。
地址0低寄存器(ETH_MACA0LR
地址偏移:0x0044
复位值:0xFFFF FF
MAC地址0低寄存器包含
31 30 29 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
MACA0L
28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
31:0 MACA0LMAC地址0[31:0] (MAC addresss0 low [31:0]
接收到的帧进行过滤,也用来在发这些位包含了6字节MAC地址0的低32位。MAC用这些位对
送流控(Pause)帧的时候作为帧的源地址。
以太网MAC )
FF
6字节的设备第二个MAC地址的高16位。
地址1高寄存器(ETH_MACA1HR
地址偏移:0x0048
复位值:0x0000 FF
MAC地址1高寄存器包含
31 30 29 7 6 5 4 3 2 1 0
AE SA
rw rw
MACA1HMBC 保留
rw rw
28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
31 AE地址使能 (Address enable)
行完美过滤。 1:地址过滤器使用MAC地址1来进
0:地址过滤器进行过滤时忽略MAC地址1
30
1MAC地址1[47:0]用来和接收到帧的源地址比对。
0MAC地址1[47:0]用来和接收到帧的目的地址比对。
SA源地址 (Source address)
710/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
711/754
29:24 e control)
位置’1’时,MAC不再把接收到帧目的地
。每个控制位对应的MAC地址字节如
下:
MBC屏蔽字节控制 (Mask byt
这些位是MAC地址1各字节比对的屏蔽控制位。当某个
址或者源地址的对应字节和MAC地址1的同位置字节比较
29ETH_MACA1HR[15:8]
28ETH_MACA1HR[7:0]
27ETH_MACA1LR[31:24]
24ETH_MACA1LR[7:0]
23:16 保留
15:0 MACA MAC地址1[47:32] (MAC address1 high [47:32])
这些位 址的高16位。
1H
包含了6字节的第二个MAC
C1低寄存器(ETH_MACA1LR)
地址偏移:0
复位值:
32位。
太网MA 地址
x004C
0xFFFF FFFF
MAC地址1低寄存器包含了6字节设备第二MAC地址的
31 30 29 28 27 26 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw
25 24 23 22
MACA1L
31:0 MACA1LMAC地址1[31:0] (MAC address1 low [31:0])
这些位包含了6字节MAC地址1的低32位。需要应用程序在初始化流程后,写本寄存器来定义这
些位的值。
AC
地址偏移:0
复位值:
的高16位。
太网M地址2高寄存器(ETH_MACA2HR)
x0050
0x0000 FFFF
MAC地址2高寄存器包含了6字节的设备第二MAC地址
31 30 29 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AE SA
rw rw rw rw
28 27 26 25 24 23 22
MACA2HMBC 保留
31 AE地址使能 (Address enable)
1:地址过滤器使用MAC地址2来进行完美过滤。
0:地址过滤器进行过滤时忽略MAC地址2
SA源地址 (Source address) 30
1MAC地址2[47:0]用来和接收到帧的源地址比对。
址比对。 0MAC地址2[47:0]用来和接收到帧的目的地
29:24 e control)
位置’1’时,MAC不再把接收到帧目的地
。每个控制位对应的MAC地址字节如
27ETH_MACA2LR[31:24]
MBC屏蔽字节控制 (Mask byt
这些位是MAC地址2各字节比对的屏蔽控制位。当某个
址或者源地址的对应字节和MAC地址2的同位置字节比较
下:
29ETH_MACA2HR[15:8]
28ETH_MACA2HR[7:0]
24ETH_MACA2LR[7:0]
23:16 保留
15:0 MAC HMAC地址2[47:32] (MAC address2 high [47:32])
这些 16位。
A2
位包含了6字节MAC地址2的高
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
C2低寄存器(ETH_MACA2LR)
地址偏移:0x
复位值:0xF
的低32位。
太网MA 地址
0054
FFF FFFF
MAC地址2低寄存器包含了6字节的设备第二MAC地址
31 30 29 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MACA2L
28 27 26 25 24 23
rw
31:0 MACA2LMAC地址2[31:0] (MAC address2 low [31:0])
这些位包含了6字节MAC地址2的低32位。需要应用程序在初始化流程后,写本寄存器来定义这
些位的值。
AC
地址偏移:0
复位值:0x0
的高16位。
太网M地址3高寄存器(ETH_MACA3HR)
x0058
000 FFFF
MAC地址1高寄存器包含了6字节的设备第二MAC地址
31 30 29 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AE SA
rw rw
MACA3H
rw
28 27 26 25 24 23
MBC 保留
rw
31 AE地址使能 (Address enable)
1:地址过滤器使用MAC地址3来进行完美过滤。
0:地址过滤器进行过滤时忽略MAC地址3
SA源地址 (Source address) 30
1MAC地址3[47:0]用来和接收到帧的源地址比对。
0MAC地址3[47:0]用来和接收到帧的目的地址比对。
712/754
29:24 e control)
’1’时,MAC不再把接收到帧目的地
MAC地址字节如
MBC屏蔽字节控制 (Mask byt
这些位是MAC地址3各字节比对的屏蔽控制位。当某个位置
址或者源地址的对应字节和MAC地址3的同位置字节比较。每个控制位对应的
下:
29ETH_MACA3HR[15:8]
28ETH_MACA3HR[7:0]
27ETH_MACA3LR[31:24]
24ETH_MACA3LR[7:0]
23:16 保留
15:0 MAC ss3 high [47:32])
这些 16位。
A3H MAC地址3[47:32] (MAC addre
位包含了6字节MAC地址3的高
C3低寄存器(ETH_MACA1LR)
地址偏移:0
复位值:0xF
的低32位。
太网MA 地址
x005C
FFF FFFF
MAC地址3低寄存器包含了6字节的设备第二MAC地址
31 30 29 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MACA3L
28 27 26 25 24 23
rw
31:0 MACA3LMAC地址3[31:0] (MAC address3 low [31:0])
这些位包含了6字节MAC地址3的低32位。需要应用程序在初始化流程后,写本寄存器来定义这
些位的值。
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
27.8.2 MMC寄存器描述
以太网MMC控制寄存器(ETH_MMCCR)
地址偏移:0x0100
0x0000 0000 位值:
以太网MMC控制寄存器设定了各管理计数器的工作模式。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MCF
ROR
CSR
CR
rw rw rw rw
保留
31:4 保留
3 MCFMMC计数器冻结 (MMC counter freeze)
(直到该位清’0’,接收或者发送帧都不
会更新任何MMC计数器。但在此模式下,如果把ROR位置’1’并读任一计数器,那么该计数器
会清’0’)
’1’时,所有的MMC计数器冻结,保持它们的当前值
2 ROR读时复位 (Reset on read)
’1’时,在读MMC计数器后,该计数器复位w’0’(复位后自清’0’)。读计数器的低字节([7:0])
之后,计数器就会清’0’
(Cou
0开始计数。
CSR计数器停止回转 nter stop rollover)
’1’时,计数器 到最大值后,不会重新从
1
在计数
0
位全部计数器。在1个时钟周期后该位自动清’0’
CR:计数器复位 (Counter reset)
’1’时,复
以太网MMC MCRIR)
地址偏移:0x010
复位值:0x0
以太网MMC接 大值的一半时(计数器的最高
位置 ’)所产 器。读产生中断MMC计数器可以清除对应的中断
位。必须读相应计数器的低字节
接收中断寄存器(ETH_M
4
000 0000
收中断寄存器记录:在接收统计数据寄存器计数到最
’1 生的中断。它是一个32位寄存
([7:0])来清除中断位。
31 30 29 12 11 10 9 8 7 6 5 4 3 2 1 0
RGUFS
RFAES
RFCES
r
r
r
保留 保留
28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13
保留
rc_
rc_
rc_
31:18 保留
17 RGUFS接收到的单播帧状态 (Received Good Unicast Frames Status)
接收“好”单播帧计数器达到最大值一半时,该位置’1’
16:7 保留
6 RFAES接收到帧对齐错误状态 (Received frames alignment error status)
对齐错误接收帧计数器达到最大值一半时,该位置’1’
5 RFCES接收到帧CRC错误状态 (Received frames CRC error status)
帧计数器达到最大值一半时,该位置’1’ CRC错误接收
保留 4:0
以太网 发送中断寄存器(ETH_MMCTIR)
地址偏移:0x010
复位值:0x0
MMC
8
000 0000
713/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
MC发送中断寄存器记录:在发送统计数据寄存器计数到最大值的一半时(计数器的最高
位置’1’) 生中断的MMC计数器可以清除对应的中断
太网M
所产生的中断。它是一个32位寄存器。读产
位。必须读相应计数器的低字节([7:0])来清除中断位
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TGFS
TGFMSCS
TGFSCS
_r
_r
_r
保留 保留 保留
rc
rc
rc
31:22 保留
21 TGFS发送的帧状态 (Transmitted good frames status)
发送“好”单播帧计数器达到最大值一半时,该位置’1’
20:16 保留
15 TGFMSCS发送的帧时遇到1个以上冲突状态 (Transmitted good frames more single
n status)
’1’
collisio
发送时1次以上冲突后帧计数器达到最大值一半时,该位置
14 d frames single collision
)
好 帧计数器达到最大值一半时,该位置
TGFSCS发送的帧时仅遇到1个冲突状态 (Transmitted goo
status
发送时1次冲突后的 :’1’
保留 13:0
以太网MMC
地址偏移:0
复位值:0x0
C接收中断屏蔽寄存器包含:对接收统计数据寄存器计数到最大值的一半时(计数器的
接收中断屏蔽寄存器(ETH_MMCRIMR)
x010C
000 0000
太网MM
最高位置’1’)所产生中断的屏蔽位。它是一个32位寄存器。
31 30 29 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RGUFM
RFAEM
RFCEM
rc_r
rc_r
28 27 26 25 24 23
rc_r
保留 保留 保留
31:18 保留
17 RGUFM接收到的单播帧屏蔽 (Received good unicast frames mask)
’1’时,屏蔽接收“好”单播帧计数器达到最大值一半时发生的中断。
16:7 保留
6 RFAEM接收到帧对齐错误屏蔽 (Received frames alignment error mask)
,屏蔽对齐错误接收帧计数器达到最大值一半时发生的中断。 ’1’
FRCEM接收到帧CRC错误屏蔽 (Received frame CRC error mask) 5
’1’时,屏蔽CRC错误接收帧计数器达到最大值一半时发生的中断。
保留 4:0
以太网MMC
地址偏移:0
复位值:0x0
MC发送中断屏蔽寄存器包含:对发送统计数据寄存器计数到最大值的一半时(计数器的
发送中断屏蔽寄存器(ETH_MMCTIMR)
x0110
000 0000
太网M
最高位置’1’)所产生中断的屏蔽位。它是一个32位寄存器。
714/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CM
TGFM
TGFMS
TGFSCM
保留 保留 保留
rc_r
rc_r
rc_r
31:22 保留
21 TGFM发送的帧屏蔽 (Transmitted good frames mask)
,屏蔽发送帧计数器达到最大值一半时发生的中断。 ’1’
保留 20:16
15 ted good frames more single
n mask)
TGFMSCM发送的帧时遇到1个以上冲突屏蔽 (Transmit
collisio
’1’时,屏蔽发送时1次以上冲突后的帧计数器达到最大值一半时发生的中断。
14 的帧时仅遇到1个冲突屏蔽 (Transmitted good frames single collision TGFSCM发送
mask)
’1’时,屏蔽发送时1次冲突后帧计数器达到最大值一半时发生的中断。
保留 13:0
以太网MMC
地址偏移:0x
工模式下,发送帧成功时只遇到一次冲突的帧的数目。
1次冲突后发送帧的计数器寄存器(ETH_MMCTGFSCCR)
014C
复位值:0x0000 0000
该寄存器统计在半双
31 30 29 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
r
28 27 26 25 24 23 22
TGFSCC
31:0 TGFSCC:发送时1次冲突好帧计数器 (Transmitted good frames single collision counter)
这些位是1次冲突后发送帧的计数器。
MC R)
地址偏移:0x015
工模式下,发送帧成功时遇到一次以上冲突的帧的数目。
太网M 1次以上冲突后发送帧的计数器寄存器(ETH_ MMCTGFMSCC
0
复位值:0x0000 0000
该寄存器统计在半双
31 30 29 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
r
28 27 26 25 24 23 22
TGFMSCC
31:0 TGFSCC:发送时1次以上冲突好帧计数器 (Transmitted good frames more single collision
counter)
这些位是1次以上冲突后发送帧的计数器。
以太网MMC 帧计数器寄存器(ETH_ MMCTGFCR)
地址偏移:0x016
帧的数目。
发送
8
复位值:0x0000 0000
该寄存器统计发送
31 30 29 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TGFC
r
28 27 26 25 24 23 22
31:0 TGFC:发送好帧计数器 (Transmitted good frames counter)
715/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
以太网MMC CRC错误接收帧计数器寄存器(ETH_ MMCRFCECR)
地址偏移:0x0194
复位值:0x0000 0000
该 统计接收到有CRC错误帧的数目。 寄存器
31 30 29 5 4 3 2 1 0
RFCEC
r
28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6
ceived frames CRC error counter) 31:0 RFCECCRC错误接收帧计数器 (Re
以太网MMC对齐错误接收帧计数器寄存器(ETH_ MMCRFAECR)
地址偏移:0x0198
复位值:0x0000 0000
该 统计接收到有对齐错误帧的数目。 寄存器
31 30 29 5 4 3 2 1 0
RFAEC
r
28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6
ceived frames alignment error counter) 31:0 RFAEC对齐错误接收帧计数器 (Re
以太网MMC 接收帧单播帧计数器寄存器(ETH_ MMCRGUFCR)
地址偏移:0x01C4
复位值:0x0000 0000
该 统计接收到单播帧的数目。 寄存器
31 30 29 4 3 2 1 0
RGUFC
r
28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5
(Received good unicast frames counter) 31:0 RFAEC接收“好”单播帧计数
27.8.3 IEEE 1588 时间戳寄存器
本节描述的寄存器用来支持IEEE 1588规范定义的精确网络时钟同步功能。
以太网PTP时间戳控制寄存器(ETH_PTPTSCR)
地址偏移:0x0700
复位值:0x0000 0000
该寄存器控制了时间戳生成和更新逻辑。
31 30 29 11 10 9 8 7 6 5 4 3 2 1 0
TSARU
TSITE
TSSTU
TSSTI
TSFCU
TSE
rw rw rw rw rw rw
保留
28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12
31:6 保留
5 TSARU时间戳加数寄存器更新 (Time stamp addend register update)
’1’时,时间戳加数寄存器的值会更新到PTP模块,用做系统时间细调。该位在更新完成后
’0’。必须确保读出该位为'0’时,才能在把该位置’1’
4 TSITE时间戳中断触发使能 (Time stamp interrupt trigger enable)
,如果系统时间大于目标时间寄存器的值,就产生时间戳中断。在时间戳中断产生以
后,该位清’0’
’1’
716/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
TSSTU时间戳系统时间更新 (Time stamp system time update) 3
’1’时,系统时间会更新,在原有系统时间上加上或者减去时间戳高和低2个更新寄存器的值。
必须确保TSSTU位和TSSTI位读出为’0’时,才能把该位置’1。硬件完成更新后,清除该位。
TSSTI时间戳系统时间初始化 (Time stamp system time initialize) 2
’1’时,系统时间会更新,原有系统时间替换为时间戳高和低2个更新寄存器的值。必须确保该
位读出为’0’时,才能把该位置’1’。在硬件初始化完成后,清除该位。
TSFCU时间戳更新粗调或者细调 (Time stamp fine or coarse up1 date)
1:表示用细调的方式更新系统时间戳;
0:表示用粗调的方式更新系统时间戳。
TSE:时间戳使能 (Time stamp enable) 0
1:使能接收和发送帧的时间戳功能。
0:不再往接收和发送的帧上添加时间戳。
由于置’0’后,原有的系统时间丢失,因此每次设置该位为’1’后,都需要重新初始化系统时间。
以太网PTP
地址偏移:0x070
复位值:0x0
该寄存器包含 调模式下(ETH_PTPTSCR寄存器TSFCU
’0’),每
亚秒递增寄存器(ETH_PTPSSIR)
4
000 0000
亚秒寄存器每次递增的8位数值。在粗
HCLK时钟周期,系统时间就加一次这个寄存器的值。在细调模式下,在累加器
溢出时,系统时间才加一次这个寄存器的值。
31 30 29 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
保留 STSSI
28 27 26 25 24 23
rw
31:8 保留
7:0 STSSI系统时间亚秒递增 (System time subsecond increment)
在每次更新系统时间时,把这些位的值加到系统时间亚秒寄存器上。
例如,为了系统时间精度达到20ns,这些位的值应当是20 / 0.467 = ~43(或者0x2A)
以太网PTP时间戳高寄存器(ETH_PTPTSHR)
地址偏移:0
复位值:0x0
该寄存器包含 值。系统时间高和低2
个寄存器包含
x0708
000 0000
时间信息的高32位。该寄存器为只读,包含了系统时间的秒
MAC的当前系统时间值,这个值会持续更新。
31 30 29 12 11 10 9 8 7 6 5 4 3 2 1 0
STS
r
28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13
31:0 STS系统时间秒 (System time second)
这些位表示了MAC当前系统时间的秒值。
以太网PTP时间戳低寄存器(ETH_PTPTSLR)
地址偏移:0x070C
复位值:0x0000 0000
该 包含 ,包含了系统时间的亚秒值。 时间信息的低32位。该寄存器为只读寄存器
31 30 29 28 27 26 25 13 12 11 10 9 8 7 6 5 4 3 2 1 0
STPNS
rr
24 23 22 21 20 19 18 17 16 15 14
STSS
717/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
31 STPNS系统时间正或者负标志位 (System time positive or negative sign)
该位表示时间值是正值还是负值。
1:表示时间值是负值。0:表示时间值是正值。由于系统时间总是正的,所以该位一般为’0’
30:0 STSS系统时间亚秒 (System time subseconds)
这些位表示了MAC当前系统时间的亚秒值,精度为0.46ns
718/754
以太网PTP
地址偏移:0
复位值:0x0
该寄存器包含 值对当前系统时间替换、相加、或
相减。系统时 的当前系统时间。应当先写这
’1’
时间戳高更新寄存器(ETH_PTPTSHUR)
x0710
000 0000
了系统时间更新值的高32位,使用这个更新
间高和低更新2个寄存器可以用来初始化或更MAC
2个寄存器,再把时间戳控制寄存器的TSSTI位或TSSTU位置
31 30 29 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TSUS
28 27 26 25 24 23
rw
31:0 STS时间戳更新秒 (Time stamp update second)
这些位表示了将要替换系统时间或者在系统时间上加上的秒时间值
以太网PTP时间戳低更新寄存器(ETH_ PTPTSLUR)
地址偏移:0x0714
复位值:0x0000 0000
该寄存器包含 值对当前系统时间替换、相加、或
相减。
了系统时间更新值的低32位,使用这个更新
31 30 29 9 8 7 6 5 4 3 2 1 0
TSUPNS
rw
TSUSS
28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10
rw
31 TSUPNS时间戳更新正或者负标志位 (Time stamp update positive or negative sign))
该位表示时间值是正值还是负值。
1:表示时间值是负值;0:表示时间值是正值。TSSTI位置’1’时,该位应当为’0’。如果TSSTU
位置’1’,该位为’1’表示从系统时间里减去更新值,该位为’0’表示在系统时间上加上更新值。
30:0 TSUSS时间戳更新亚秒 (Time stamp update subseconds)
这些位表示了将要替换系统时间或者在系统时间上加上的时间亚秒值。这个值的精度是
0.46ns(即数值0x0000 0001表示0.46ns)
以太网PTP PTSAR)
地址偏移:0
0x0
软件使用该寄
情况下(ETH_ 该寄存器的值每个时钟周期都会累加到32
时间戳加数寄存器(ETH_PT
x0718
000 0000 位值:
存器线性地校准时钟频率到主时钟。该寄存器只用于系统时间更新方式为细调
PTPTSCR寄存器的TSFCU位为’1’)
累加器上,一旦该累加器溢出就更新系统时间。
31 30 29 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TSA
28 27 26 25 24 23
rw
步的32位加数值。
31:0 TSA时间戳加数 (Time stamp addend)
这些位表示了用来加到累加器上实现时间同
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
以太网PTP目标时间高寄存器(ETH_PTPTTHR)
地址偏移:0x071C
复位值:0x0000 0000
该寄存器包含 生中断的时间值高32位。系统时间超过目标时用来与系统时间比较,根据结果产
间高和低2个寄存器的值时,产生中断。
31 30 29 11 10 9 8 7 6 5 4 3 2 1 0
TTSH
rw
28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12
果时间戳值等于或者超过目标时间,且使能了相应的中断,
MAC就会产生中断。
31:0 TTSH目标时间戳高 (Target time stamp high)
这些位表示了目标时间的秒值。如
以太网PTP目标时间低寄存器(ETH_PTPTTLR)
地址偏移:0x0720
复位值:0x0000 0000
该寄存器包含用来与系 时间值低 位。系统时间超过目标时
间高和低2个寄存器的值时,产生中断。
32统时间比较,根据结果产生中断
31 30 29 11 10 9 8 7 6 5 4 3 2 1 0
TTSL
rw
28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12
。如果时间戳值等于或者超过目标时间,且使能了相应的中
断,MAC就会产生中断。
31:0 TTSL目标时间戳低 (Target time stamp low)
这些位表示了目标时间的纳秒值
27.8.4 DMA寄存器描述
本节定义了DMA寄存器中每一位的意义。只要地址是32位对齐的,允许非32位访问。
MA
地址偏移:0x100
复位值:0x0000 2101
总线工作模式。
太网D总线模式寄存器(ETH_DMABMR)
0
总线模式寄存器设定了DMA
31 30 29 2 1 0
DA SR
rw rw rw
PBL
保留
DSL
保留
rw rw rw rw
28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3
AAB
FPM
USP
FB
RDP RTPR
rw rw rw
31:26 保留
25 AAB:传输地 (Address-aligned beats)
’1’时,如果FB位为’1’AHB接口对齐所有突发传输至起始地址的LS位。如果FB位为’0’,不
对齐第一次的突发传输(即对数据缓存起始的访问),但接下来的传输与地址对齐。
址对齐
24 FPM4×PBL模式 (4xPBL mode)
’1’时,把设好的PBL([22:17]和位[13:8])乘以4。这样,根据PBL的值,DMA最大传输4
3264128次数据。 816
USP:使用分散PBL (Use separate PBL) 23
1:把RDP([22:17])的值作为接收DMAPBL值,同时PBL([13:8])的值只作为发送
DMAPBL值。
值对0:位[13:8]设定的PBL DMA接收和发送控制器都有效。
719/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
720/754
22:17 )
传输时,连续传输RDP位定义的次数。RDP允许设的值有
致不可预料的后果。
RDP:接收DMA PBL (Rx DMA PBL
这些位定义了一次DMA转发的最大数据传输次数。这个最大值用于单个模块的读写操作。接收
DMA总是试图在总线上开始突发
12481632。设为其他数值会导
只有在USP位置’1’时,这些位才有效。
16 ed burst)
INCR4INCR8INCR16
FB:固定的突发 (Fix
该位控制AHB主接口是否进行固定突发长度的传输。
1AHB在开始常规突发传输时,利用SINGLE
0AHB在突发传输时,只用SINGLEINCR
RTPR:接收 发送优先级比率 (Rx Tx priority ratio)
按照以下比例给予接收DMA高于发送DMA的优先级:
15:14
001:1
012:1
103:1
114:1
该位只在DA位为’0’时有效。
PBL:可编程的突发长度 (Programmable burst leng13:8 th)
个最大值用于单个模块的读写操作。
DMA 在总线上开始突发传输时,连续传输PBL域定义的次数。PBL域允许设的值有1
2432。设为其他值的话,会导致不可预料的后果。如果USP位为’1’PBL域的值
只对 有效。
PBL 下限制:
)受发送FIFO和接收FIFO大小的限制;
支持的最大传输次数是
考虑接收和发送FIFO的最小深度;
这些位定义了一次DMA转发的最大数据传输次数。这
总是试图
816
发送DMA
的取值有以
- 可能的最大传输次数(PBL
- FIFO FIFO深度的一半;
- 如果为接收DMA DMA设定相同的PBL,则需要和发
- 不要取允许取值以外的PBL值,不然会引起系统工作不正常。
保留 7
6:2 (Descriptor skip length)
结构连接的描述符之间的跳跃距离,单位为字(32)。地址跳跃是
从 ,在环形结构下,DMA
DSL:描述符跳跃长度
这些位定义了2个不以链式
当前描述符的结尾到下一个描述符开头的地址差值。DSL域为0
为描述符是相邻地连续排列的。
1 DA
0
收的优先级高于发送。
DMA仲裁 (DMA Arbitration)
根据位[15:14]定义的发送和接收优先级比,以循环方式仲裁;
1:接
SR:软件复位 (Software reset) 0
’1’时,MACDMA控制器复位MAC所有子系统的内部寄存器和逻辑电路。在MAC内部不同
时钟域模块完成复位操作后,自动清除该位。在重新写MAC的寄存器前,应当确保该位为’0’
以太网DMA发送查询请求寄存器 ATPDR)
地址偏移:0
复位值:0x0
程序用该寄存 符队列。发送查询请求可以使发送DMA检查DMA是否
占有当前的描
帧的数据下溢
把这些位置’0’
(ETH_DM
x1004
000 0000
器来要求DMA查询发送描述
述符。发送查询命令可以唤醒处于暂停状态的发送DMA。发送DMA通常因为发送
错误或者因为不能占有想要的描述符而进入暂停状态。可以在任一时刻通过写
存器发起发送查询请求,在发送DMA开始重新取描述符时,会
31 30 29 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TPD
28 27 26 25 24 23
rw_wt
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
31:0 TPD发送查询要求 (Transmit poll demand)
对这些位写任意值,DMA即读ETH_DMACHTDR寄存器指向的当前描述符。如果该描述符不可
(CPU占有),则发送DMA回到暂停状态,并把ETH_DMASR的位2’1’。如果描述符可
用,则恢复发送流程。
以太网DMA接收查询请求寄存器(ETH_DMARPDR)
地址偏移:0x1008
0x0
程序用该寄存
符。接收查询 停状态的接收DMA。接收DMA通常因为不能占有想要的描述
000 0000 位值:
器来要求DMA查询接收描述符队列。接收查询请求可以使接收DMA检查新描述
命令可以唤醒处于暂
符而进入暂停状态。
31 30 29 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RPD
28 27 26 25 24 23
rw_wt
31:0 RPD接收查询要求 (Receive poll demand)
对这些位写任意值,DMA即读ETH_DMACHRDR寄存器指向的当前描述符。如果该描述符不可
(CPU占有),则接收DMA回到暂停状态,并把ETH_DMASR的位7’0’。如果描述符可
用,则接收DMA回到运行状态。
以太网DMA接收描述符列表地址寄存器(ETH_DMARDLAR)
地址偏移:0x100C
0x0
接收描述符列
存,并且其地 内部把描述符地址的最低位置’0’来使地址对齐总线宽
接收停止后,应当先写
000 0000 位值:
表寄存器指向接收描述符队列的开始。描述符队列位于STM32F107xx物理内
址必须以字对齐。DMA会在
度。只有在接收停止的时候,才允许写ETH_DMARDLAR寄存器。在
ETH_DMARDLAR寄存器,再发接收开始命令。
31 30 29 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 028 27 26 25 24 23 22
SRL
rw
31:0 SRL接收队列基址 (Start of receive list)
这些位包含了接收描述符队列第一个描述符的地址。DMA忽略最低的若干位[1/2/3:0](对应总线
宽度为32/64/128位的系统)的取值,默认它们为’0’。因此,这几个最低位是只读的。
以太网DMA发送描述符列表地址寄存器(ETH_DMATDLAR)
地址偏移:0x1010
0x0
发送描述符列
存,并且其地 齐总线宽
发送停止后,应当先写
000 0000 位值:
表寄存器指向发送描述符队列的起始。描述符队列位于STM32F107xx物理内
址必须以字对齐。DMA会在内部把描述符地址的最低位置’0’来使地址对
度。只有在发送停止的时候,才允许写ETH_DMATDLAR寄存器。在
ETH_DMATDLAR寄存器,再发发送开始命令。
31 30 29 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 028 27 26 25 24 23 22
STL
rw
31:0 STL发送队列基址 (Start of transmit list)
这些位包含了发送描述符列表第一个描述符的地址。DMA忽略最低的若干位[1/2/3:0](对应总线
宽度为32/64/128位的系统)的取值,默认它们为’0’。因此,这几个最低位是只读的。
721/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
以太网DMA状态寄存器(ETH_DMASR)
地址偏移:0x1014
复位值:0x0000 0000
状态寄存器包 位。软件通常在中断里或在轮询的过程中读含了所有DMA反馈给应用程序的状态
该寄存器。该
位。ETH_DM 通过设置
TH_DMAIER寄存器里的相应位,可以屏蔽位[16:0]触发的中断。
寄存器里大多数位都能触发中断。读ETH_DMASR寄存器并不能清除其中的标志
ASR寄存器位[16:0](除保留位)需要写’1’才能清除,而写’0’是无效的。
E
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TSTS
ERS
FBES
ETS
RWTS
RPSS
RBUS
RS
TUS
ROS
TJTS
TBUS
TPSS
TS
r
保留
r
保留
rc_w1 rc_w1r
PMTS
MMCS
NIS
AIS
EBS TPS RPS
保留
rr r
31:30 保留
29 TSTS:时间戳触发状态 (Time stamp trigger status)
表示MAC控制器的时间戳生成模块发生了中断事件。软件必须读MAC控制器的状态寄存器,清
除中断来源(9)才能清除该位。该位置’1’时,如果使能了相应中 断, 产生中断。
28 PMTSPMT状态 (PMT status)
表示MAC控制器的PMT模块发生了中断事件。软件必须读MAC控制器的相应寄存器,找到中断
来源并清除,才能清除该位。该位置’1’时,如果使能了相应中断,则产生中断。
27 MMCSMMC状态 (MMC status)
表示MAC控制器的MMC模块发生了中断事件。软件必须MAC控制器的相应寄存器,找到中
并清除,才能清除该位。该位置’1’时,如果使能了相应中断,则产生中断。 断来源
保留 26
25:23
MASR[13])
触发中断。
0 访问描述符时出错
EBS:错误位状态 (Error bits status)
该域表示了造成总线错误(AHB接口端)的错误类型。仅在总线致命错误位(ETH_D
’1’时,这些位才有效。这些位不
23 0 发送DMA转发数据时出错
1
接收DMA转发数据时出错
24 0 读数据转发时出错
1
写数据转发时出错
25
1
访问数据缓存时出错
22:20
中断。
0止, 到
001:运行,正在取发送描述符;
010:运行,正在等待状态信息
0行, 在读取内存中数据并压入发送FIFO中;
100101: 留;
1停, 送描述符不可用或发送缓存数据下溢;
1:运行,正在
TPS:发送流程状态 (Transmit process state)
这些位表示发送DMAFSM状态。这些位不触发
00:停 复位或者停止发送命令;
11:运 正
10:暂 发
11 关闭发送描述符。
722/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
RPS接收流程状态 (Receive process state) 19:17
这些位表示接收DMAFSM状态。这些位不触发中断。
000:停止,接到复位或者停止接收命令;
001:运行,正在取接收描述符;
010:保留;
011:运行,正在等待接收数据包;
100:暂停,接收描述符不可用;
发到内存中。
101:运行,正在关闭接收描述符;
110:保留;
111:运行,正在把接收到数据包从接收FIFO
16
况下,正常中断汇总位是下列位取值的逻辑或
SR[2]:发送缓存不可用
以上位绑定,置’1’后,只有把造成该位置’1’的位清’0’(’1’),才能把该位清’0’
NIS:正常中断汇总 (Normal interrupt summary)
ETH_DMAIER寄存器使能了相应中断的情
- ETH_DMASR[0]:发送中断
- ETH_DMA
- ETH_DMASR[6]:接收中断
- ETH_DMASR[14]:早接收中断
只有未被屏蔽的中断才会影响到本位。
NIS位的取值和
15
异常中断汇总位是下列位取值的逻辑或
只有未被屏蔽的中断才会影响到本位。
AI 只有把造成该位置’1’的位清’0’(’1’),才能把该位清’0’
AIS:异常中断汇总 (Abnormal interrupt summary)
ETH_DMAIER寄存器使能了相应中断的情况下,
- ETH_DMASR[1]:发送流程停止
- ETH_DMASR[3]:发送啰嗦超
- ETH_DMASR[4]:接收FIFO溢出
- ETH_DMASR[5]:发送数据下
- ETH_DMASR[7]:接收缓存不可
- ETH_DMASR[8]:接收流程停止
- ETH_DMASR[9]:接收看门狗超时
- ETH_DMASR[10]:早发送中断
- ETH_DMASR[13]:总线致命错误
S位的取值和以上位绑定,置’1’后,
14 ER )
填满了第一个缓存。在接收中断位(ETH_DMASR[6])
S:早接收状态 (Early receive status
’1’时,该位表示接收到数据包时,DMA
1’时,该位自动清’0’
13 FB error status)
体情况见位[25:23]。在该位置’1’时,相应的DMA控制
ES:总线致命错误状态 (Fatal bus
’1’时,表示发生了总线错误,错误的具
关闭全部总线访问。
12:11 保留
10 ) ETS:早发送状态 (Early transmit status
’1’时,该位表示发送的帧已经完全位于发送FIFO中。
RWTS:接收看门狗超时状态 (Receive w9 atchdog timeout status)
’1’时,表示接收到的帧长度超过2048字节。
位 :接收流程停止状态 ) RPSS (Receive process stopped status
在接收流程进入停止状态时,该位置’1’
8
7 状态 (Receive buffer unavai
收描述符队列中的下一个描述符由CPU占有,DMA无法取得。因此接收流程暂停。程序
符,并发送接收查询命令来恢复接收流程。如果没有收到任何接收查询命令,那
接收流程。只有在DMA占有前一个描述符时,该位
RBUS:接收缓存不可用 lable status)
表示接
需要释放描述
DMA在接收到下一个帧的时候,会恢复
’1’
6 RS:接收状态 (Receive status)
该位表示帧接收完成。帧的接收状态信息也更新到描述符中。接收流程仍处于运行状态。
723/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
TUS:发送数据下溢状态 (Transmit underflow status) 5
该位表示发送缓存在发送帧的过程中发生数据下溢。这时,发送进程暂停并把数据下溢错误位
(TDES[1])’1’
4 ROS:接收溢出状态 (Receive overflow status)
经转发给应用程序,则设置该位表示接收缓存在接收帧的过程中发生溢出。如果不完整的帧已
溢出错误位(RDES[11])’1’
3
啰嗦超时位(TDES[14])’1’
TJTS:发送啰嗦超时状态 (Transmit jabber timeout status)
该位表示发送啰嗦定时器超时,说明发送端过于繁忙。这时,中止发送进程并进入停止状态,
同时设置
TBUS:发送缓存不可用状态 (Tra2 nsmit buffer unavailable status)
停。
放描述符,并发出发送查询命令来恢
该位表示发送描述符队列中的下一个描述符由CPU占有,DMA无法取得。因此发送流程暂
[22:20]指示了发送流程的当前状态。应用程序需要释
复发送流程。
1 止状态 (Transmit process stopped status) TPSS:发送流程停
’1’时,表示发送停止。
0
个描述符的TDES[31]位已置’1’
TS:发送状态 (Transmit status)
该位表示帧发送完成,帧的第一
以太网DMA
地址偏移:0
复位值:0x0
工作模式寄存
最后写该寄存
工作模式寄存器(ETH_DMAOMR)
x1018
000 0000
器设定了FIFO接收和发送的工作模式和命令。在整个DMA的初始化流程中,应当
器。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DTCEFD
RSF
ST
FEF
FUGF
OSF
SR
rw rw rw rw rw rw rw rw
保留
RTC
保留
保留 TTC 保留
DFRF
TSF
FTF
保留 保留
rw rw rw rw rw rw rw
31:27 保留
26 DTCEFD:不丢弃TCP/IP校验和错误帧 (Dropping of TCP/IP checksum error frames disable)
收到帧仅有校验和检测模块发现的校验和错误时,MAC不会丢弃该帧。这类帧
以太网帧的封装数据里有错误,而没有其他错误(包括校验错误)
1:表示如果接
仅在接收到的
0:如果FEF位为’0’MAC丢弃所有有错的帧。
25 RFS:接收存储-转发 (Receive store and forward)
1:表示一个帧只有在完全写入接收FIFO后,接收DMA才会把它转发给应用程序。并且此时
RTC位的取值会被忽略。
0:接收FIFO工作在直通模式,DMA在接收帧写入接收FIFO的数据数目超过RTC位设定的阈值
后,向应用程序转发帧数据。
24 DFRS:不清空接收帧 (Disable flushing of received frames)
示接收DMA不会因为接收描述符或者接收缓存不可用而清空接收FIFO里的接收到帧。 1:表
0:发生上述情况,接收DMA就清空接收FIFO里的接收到帧。(详见:接收流程暂停)
保留 23:22
21
MAC 才会把发送出去。并且此时TTC
TSF:发送存储-转发 (Transmit store and forward)
1:表示只有在一个帧完全写入发送FIFO
(ETH_DMAOMR[16:14])的取值会被忽略。
0:在待发送帧写入发送FIFO的数据数目超过TTC(ETH_DMAOMR[16:14])设定的阈值后,
MAC开始发送帧。
只有在发送停止时,才能改变这位的设置状态。
22:20 nsmit FIFO)
’1’时,发送FIFO控制逻辑电路被复位到初始状态,这样发送FIFO里所有的数据被清空/
失。在清空操作完成后该位被自动清’0’。在该位为’0’之前,不允许写入工作模式寄存器。
FTF:清空发送FIFO (Flush tra
724/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
保留 19:17
16:14
送开始。
帧长小于该阈值的帧也会被发送出去。只有在TSF(21)’0’时,这些位才有效。
TTC发送阈值控制 (Transmit threshold control)
这三位控制发送FIFO的阈值。位于发送FIFO中待发送帧的数据数目超过该阈值时,发
另外,
00064 10040
001128 10132
010192 11024
011256 11116
13
送描述符队列的当前位置,搜索待发送的帧。DMA
TDLAR寄存器设定)获取描述符,要么从描述符队
如果
ETH_DMATDLAR寄存器的情况下发出发送开始命令,会引起不可预料的后果。
保存发送描述符队列里下一发送描述符的位
ST:开始/停止发送 (Start/stop transmission)
1:把发送进程置为运行状态,DMA检查发
要么从描述符队列的起始位(ETH_DMA
列里上次发送中止的位置获取描述符。如果DMA不占有描述符,则发送进程进入暂停状态,设
置发送缓存不可用位(ETH_DMASR[2])’1’。只有在发送停止时,发送开始命令才有效。
在未设
0:在发送完当前帧后,发送进程进入停止模式。
置,在传输重新开始时,这个描述符就变成当前描述符。只有在当前帧发送完成,或者发送进
程处于暂停状态时,停止发送命令才生效。
12:8 保留
7 FEF:转 ward erro
1:表示除了过短帧以外,所有的帧都会转发给DMA
0:接收 会丢弃有错误的帧(CRC错误 巨人帧、看门狗超时、溢出)。然而,如
果在 经把帧的起 转发给应用程序,则就不会丢弃该帧。接收FIFO
出错帧。
发错误帧 (For r frames)
FIFO 、冲突错误、
阈值模式下,已 始字节指
丢弃那些帧的起始字节还没有发送到AHB总线的
FUGF:转发长度不够的 (Forward undersized good frames)
1:接收FIFO把长度不够的(帧长小于64字节但没有错误),包括充填字节和CRC在内转发
给应用程序。
0:接收FIFO丢弃所有长度小于64字节的帧,除非这个帧由于小于接收阈值而已经被转发给应
用程序了。
6
保留 5
4:3 trol)
设置了接收FIFO的阈值。在位于接收FIFO里,接收到帧的数据数目超过该阈值时,
”11”
RTC:接收阈值控制 (Receive threshold con
这两位
DMA开始转发数据。另外,帧长小于该阈值的帧也会被自动转发。
注意:如果接收FIFO的长度设为128字节,这些位的值不能取
注意:只有在RSF(21)’0’时,这些位才有效。
0064
0132
1096
11128
2 (Operate on second frame) OSF:操作第二
’1’时,发送DMA在接收到前一个帧的发送状态信息前,就开始发送下一个帧的数据。
1 止接收 (Start/stop receive)
接收进程置为运行状态,DMA检查接收描述符队列的当前位置,用来处理下一个收到的
DLAR寄存器设定)获取描述符,要么从描述
止时,开始接收命令才有
述符队列里下一接收描述
描述符。只有在接收进程处于运行或者
暂停状态时,停止接收命令才有效。
SR:开始/
1:把
帧。要么从描述符队列的起始位置(ETH_DMAR
符队列里上次接收中止的位置获取描述符。如果DMA没能占有描述符,那么接收进程进入暂停
状态,设置接收缓存不可用位(ETH_DMASR[7])’1’。只有在接收停
效。在未设置ET R 开始接收命令,会引起不可预料的后果。H_DMARDLA 寄存器之前发出
。保存接收描0:在转发完当前接收到帧后,接收DMA进入停止模式
符的位置,在传输重新开始时,这个描述符就变成当前
0 保留
725/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
以太网DMA
地址偏移:0x
复位值:0x0
中断使能寄存
中断使能寄存器(ETH_DMAIER)
101C
000 0000
器可以使能ETH_DMASR寄存器反映的中断。把相应位置’1’可以使能相应的中
者硬件复位后,将屏蔽所有的中断。 断。在软件或
31 30 29 28 27 26 25
rw rw rw rw rw rw rw rw rw rw rw rw rw
24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
E
E
E
E
E
E
E
NISE
AISE
ERIE
FBEI
ETIE
RWTI
RPSI
RBUI
RIE
TUIE
ROIE
TJTI
TBUI
TPSI
TIE
rw rw
保留 保留
:17 保留 31
16 NISE:正常中断汇总使能 (Normal interrupt summary enable)
常中断。0:屏蔽正常中断。该位使能下列位:
MASR[0]:发送中断;
MASR[2]:发送缓存不可用;
1:使能正
ETH_D
ETH_D
ETH_DMASR[6]:接收中断;
ETH_DMASR[14]:早接收中断。
15 AISE:异常中断汇总使能 (Abnormal interrupt summary enable)
1:使能异常中断。0:屏蔽异常中断。该位使能下列位:
ETH_DMASR[1]:发送流程停止;
ETH_DMASR[3]:发送啰嗦超时;
H_DMASR[4]:接收溢出;
TH_DMASR[5]:发送下溢;
时;
误。
ET
E
ETH_DMASR[7]:接收缓存不可用;
ETH_DMASR[8]:接收流程停止;
ETH_DMASR[9]:接收看门狗超
ETH_DMASR[10]:早发送中断;
ETH_DMASR[13]:总线致命错
14 ERS terrupt enable)
断;
:早接收中断使能 (Early receive in
1:正常中断汇总使能位(ETH_DMAIER[16])’1’时,使能早接收中
0:屏蔽早接收中断。
13 FBE rror interrupt enable)
1:异常中断汇总使能位 为’1’时,使能总线致命错误中断;
0:屏蔽总线致命错误中断。
S:总线致命错误中断使能 (Fatal bus e
(ETH_DMAIER[15])
12:11 保留
10 ETIE terrupt enable)
1:异 )’1’时,使能早发送中断;
0:屏
:早发送中断使能 (Early transmit in
常中断汇总使能位(ETH_DMAIER[15]
蔽早发送中断。
9 RW ve watchdog timeout interrupt enable)
接收看门狗超时中断。
TIE:接收看门狗超时中断使能 (Recei
1:异常中断汇总使能位(ETH_DMAIER[15])’1’时,使能
0:屏蔽接收看门狗超时中断。
8 中断使能 (Receive process stopped interrupt enable)
停止中断。
RPSIE:接收流程停止
1:异常中断汇总使能位(ETH_DMAIER[15])’1’时,使能接收流程
0:屏蔽接收流程停止中断。
7 使能 (Receive buffer unavailable interrupt enable)
常中断汇总使能位(ETH_DMAIER[15])’1’时,使能接收缓存不可用中断。
RBUIE:接收缓存不可用中断
1:异
0:屏蔽接收缓存不可用中断。
726/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
RIE:接收中断使能 (Receive interrupt enable) 6
1:正常中断汇总使能位(ETH_DMAIER[16])’1’时,使能接收中断。
0:屏蔽接收中断。
TUIE:发送下溢中断使能 (Underflow interrupt enable) 5
1:异常中断汇总使能位(ETH_DMAIER[15])’1’时,使能发送下溢中断。
0:屏蔽发送数据下溢中断。
ROIE:接收溢出中断使能 (Overflow interrupt enable) 4
1:异常中断汇总使能位(ETH_DMAIER[15])’1’时,使能接收溢出中断。
0:屏蔽接收溢出中断。
TJTIE:发送啰嗦超时中断使能 (Transmit jabbe3 r timeout interrupt enable)
中断。
中断。
1:异常中断汇总使能位(ETH_DMAIER[15])’1’时,使能发送啰嗦超时
0:屏蔽发送啰嗦超时
TBUIE:发送缓存不可用中断使能 (Transmit buffer unav2 ailable interrupt enable)
断。
1:正常中断汇总使能位(ETH_DMAIER[16])’1’时,使能发送缓存不可用中
0:屏蔽发送缓存不可用中断。
TPSIE:发送流程停止中断使能 (Transmit process stop1 ped interrupt enable)
1:异常中断汇总使能位(ETH_DMAIER[15])’1’时,使能发送流程停止中断
0:屏蔽发送流程停止中断
TIE:发送中断使能 (Transmit interrupt enable) 0
1:正常中断汇总使能位(ETH_DMAIER[16])’1’时,使能发送中断。
0:屏蔽发送中断。
对于以太网中 断没有被屏
蔽时,或者在
以太网DMA 寄存器(ETH_DMAMFBOCR)
地址偏移:0
复位值:0x0
DM 2个计 包含了计数器的当前值。这个计数器通常
用作故障诊断。位 )而丢失帧的数
目。位[27:17 溢出及 64字节的帧)而丢失帧的数目。
断,只有在DMA态寄存器的TSTS位或者PMTS位为’1’,并且相应中
NIS/AIS位置’1’,且相应中断被使能时,中断才会发生。
丢失帧和缓存溢出计数器
x1020
000 0000
A有 数器,用来统计丢失帧的数目。本寄存器
[15:0]是由于STM32F107xx缓存不可用(接收描述符不可用
帧过短(正确但是小于]是由于接收FIFO
31 30 29
保留
rc_r
28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OFOC
OMFC
MFA MFC
rc_r
31:29 保留
28 OFOCFIFO溢出计数器溢出位 (Overflow bit for FIFO overflow counter)
27:17 MFA应用程序丢失的帧 (Missed frames by the application)
这些位表示了应用程序丢失帧的数目。
16 OMFC丢失帧计数器溢出位 (Overflow bit for missed frame counter)
15:0 MFC控制器丢失的帧 (Missed frames by the controller)
这些位表示了由于MCU的接收缓存不可用而丢失帧的数目。每当DMA丢弃一个输入帧时,这个
计数器加1
以太网 当前发送描述符寄存器(ETH_DMACHTDR)
地址偏移:0
x0
当前发送描述 描述符起始地址。
DMA
x1048
位值:0 000 0000
符寄存器指向DMA正在读取的发送
727/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
31 30 29 28 27 26 25 9 8 7 6 5 4 3 2 1 0
HTDAP
24 23 22 21 20 19 18 17 16 15 14 13 12 11 10
r
发送描述符地址指针 (Host transmit descriptor ess pointer)
复位时清’0’,由DMA在工作过程中更新。
728/754
31:0 HTDAP
这些位在
addr
以太网DMA (ETH_DMACHRDR)
地址偏移:0x104C
复位值:0x0000 0000
当前接收描述符寄存器指向DMA正在读取的接收描述符起始地址。
当前接收描述符寄存器
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
HRDAP
r
接收描述符地址指针 (Host receiv inter)
复位时清’0’,由DMA在工作过程中更新。
31:0 HRDAP
这些位在
e descriptor address po
以太网
地址偏移:0x1050
复位值:0x0000 0000
当前发送缓存地址寄存器指向DMA正在读取的发送缓存的地址。
DMA (ETH_DMACHTBDR) 当前发送缓存地址寄存器
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
HTBAP
r
发送缓存地址指针 (Host transmit b
复位时清’0’,由DMA在工作过程中更新。
31:0 HTBAP
这些位在
uffer address pointer)
以太网DMA (ETH_ DMACHRBDR)
地址偏移:0x1054
复位值:0x0000 0000
当前接收缓存寄存器地址指向DMA正在读取的接收缓存地址。
当前接收缓存地址寄存器
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
HRBAP
r
31:0 接收缓存地址指针 (Host receiv
复位时清’0’,由DMA在工作过程中更新。
HRBAP
这些位在
e buffer address pointer)
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
27.8.5 以太网寄存器映像
下表给出了以太网寄存器映像及其复位值。
199 以太网寄存器映像及其复位值
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
ETH_MACCR
WD
JD
CSD
FES
ROD
LM
DM
IPCO
RO
APCS
DC
TE
RE
00 0000 000000 000000
ETH_MACFFR
RA
HPF
SAF
SAIF
BFD
PAM
DAIF
HM
HU
PM
值 0 00000000000
ETH_MACHTHR
值 00000000000000000000000000000000
ETH_MACHTLR
值 00000000000000000000000000000000
ETH_MACMIIAR
MW
MB
0000000000 00000
ETH_MACMIIDR
值 0000000000100000
ETH_MACFCR
ZQPD
UPFD
RFCE
TFCE
FCB/BPA
0000000000000000 0 000000
ETH_MACVLANTR
VLANTC
值 00000000000000000
ETH_MACRWUFFR
值 00000000000000000000000000000000
ETH_MACPMTSCR
WFFRPR
GU
WFR
MPR
WFE
MPE
PD
复位值 0 0 0 0 0 0 0
ETH_MACSR
TSTS
MMCTS
MMCRS
MMCS
PMTS
0 0000
ETH_MACIMR
TSTIM
PMTIM
复位值 0 0
ETH_MACA0HR
MO
值 1 1111111111111111
ETH_MACA0LR
值 11111111111111111111111111111111
0x00
保留
BL
保留
保留
保留
IFG
保留
0x08
保留
0x18
0x10
保留
0x0C
0x04
MR
0x14 保留 MD
保留 VLAN
帧过滤寄存器0\帧过滤寄存器1\……\帧过滤寄存器7
保留
PLT
PT
保留
保留
保留
0x1C
0x28
0x2C
0x38 保留 保留
保留
不可用
PCF
HTH[31:0]
HTL[31:0]
保留 PA
保留
CR
保留
0x40 保留 MACA0H
0x3C 保留 保留不可用
0x44 MACA0L
ETH_MACA1HR
AE
SA
值 0000000 1111111111111111
ETH_MACA1LR
值 11111111111111111111111111111111
0x48 MBC[6:0] 保留 MACA1H
0x4C MACA1L
729/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
ETH_MACA2HR
AE
SA
值 0000000 1111111111111111
ETH_MACA2LR
值 11111111111111111111111111111111
ETH_MACA3HR
AE
SA
值 0000000 1111111111111111
ETH_MACA3LR
值 11111111111111111111111111111111
ETH_MMCCR
MCF
ROR
CSR
CR
复位值 0000
ETH_MMCRIR
RGUFS
RFAES
RFCES
复位值 0 0 0
ETH_MMCTIR
TGFS
TGFMSCS
TGFSCS
复位值 0 0 0
ETH_MMCRIMR
RGUFM
RFAEM
RFCEM
复位值 0 0 0
ETH_MMCTIMR
TGFM
TGFMSCM
TGFSCM
复位值 0 0 0
ETH_MMCTGFSCCR
值 00000000000000000000000000000000
ETH_MMCTGFMSCCR
值 00000000000000000000000000000000
ETH_MMCTGFCR
值 00000000000000000000000000000000
ETH_MMCRFCECR
值 00000000000000000000000000000000
ETH_MMCRFAECR
值 00000000000000000000000000000000
ETH_MMCRGUFCR
值 00000000000000000000000000000000
ETH_PTPTSCR
TTSARU
TSITE
TSSTU
TSSTI
TSFCU
TSE
复位值 000000
ETH_PTPSSIR
复位值 00000000
ETH_PTPTSHR
值 00000000000000000000000000000000
ETH_PTPTSLR
STPENS
值 00000000000000000000000000000000
0x108
0x100
0x104
保留
保留 保留 保留
保留 保留 保留
0x5C
0x54
0x50
0x58
MBC[6:0] 保留 MACA2H
MACA2L
MBC[6:0] 保留 MACA3H
MACA3L
0x10C 保留 保留 保留
0x110 保留 保留 保留
0x14C TGFSCC
0x150 TGFMSCC
0x168 TGFC
0x194 RFCEC
0x198 RFAEC
0x1C4 RGUFC
0x700 保留
0x704 保留 STSSI
0x708 STS[31:0]
0x70C STSS
730/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
以太网(ETH) STM32F10xxx参考手册
731/754
参照200912 RM0008 Reference Manual 英文第10
偏移 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
ETH_PTPTSHR
值 00000000000000000000000000000000
ETH_PTPTSLR
值 00000000000000000000000000000000
ETH_PTPTSHUR
值 00000000000000000000000000000000
ETH_PTPTSLUR
TSUPNS
值 00000000000000000000000000000000
ETH_PTPTSAR
值 00000000000000000000000000000000
ETH_PTPTTHR
值 00000000000000000000000000000000
ETH_PTPTTLR
值 00000000000000000000000000000000
ETH_DMABMR
AAB
FPM
USP
FB
EDFE
DA
SR
值 00000000000000000000000000
ETH_DMATPDR
值 00000000000000000000000000000000
ETH_DMARPDR
值 00000000000000000000000000000000
ETH_DMARDLAR
值 00000000000000000000000000000000
ETH_DMATDLAR
值 00000000000000000000000000000000
ETH_DMASR
TSTS
PMTS
MMCS
NIS
AIS
ERS
FBES
ETS
RWTS
RPSS
RBUS
RS
TUS
ROS
TJTS
TBUS
TPSS
TS
000 0000000000000 00000000000
ETH_DMAOMR
DTCEFD
RSF
DFRF
TSF
FTF
ST
FEF
FUGF
OSF
SR
000 00 0000 00 0000
ETH_DMAIER
NISE
AISE
ERIE
FBEIE
ETIE
RWTIE
RPSIE
RBUIE
RIE
TUIE
ROIE
TJTIE
TBUIE
TPSIE
TIE
0000 00000000000
ETH_DMAMFBOCR
OFOC
OMFC
值 00000000000000000000000000000
ETH_DMACHTDR
值 00000000000000000000000000000000
ETH_DMACHRDR
值 00000000000000000000000000000000
ETH_DMACHTBR
值 00000000000000000000000000000000
ETH_DMACHRBR
值 00000000000000000000000000000000
0x1050 HTBAP
0x1054 HRBAP
0x1048 HTDAP
0x104C HRDAP
0x1020 保留 MFA MFC
RTC
保留
0x101C 保留 保留
TTC 保留
0x1014
保留
0x1018 保留 保留 保留
保留
保留
EBS TPS RPS
保留
0x1004 TPD
0x1008 RPD
0x100C SRL
0x1010 STL
STS[31:0]
STSS
TSUS
TSUSS
0x714
0x70C
0x708
0x710
0x718
0x71C
TSA
TTSH
0x720 TTSL
PBL DSL
0x1000 保留 RDP RTPR
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
关于寄存器的起始地址,请参见表1
器件电子签名 STM32F10xxx参考手册
28 器件电子签名
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章节描述的模块适用于整个STM32F10xxx微控制器系列。
电子签名存放在闪存存储器模块的系统存储区域,可以通过JTAG/SWD或者CPU读取。它所包
含的芯片识别信息在出厂时编写,用户固件或者外部设备可以读取电子签名,用以自动匹配不
同配置的SRM32F10xxx微控制器。
28.1 存储器容量寄存器
28.1.1 闪存容量寄存器
基地址:0x1FFF F7E0
只读,它的内容在出厂时编写
1514131211109876543210
rrrrrrrrrrrrrrrr
F_SIZE
F_SIZE:闪存存储器容量 15:0
K字节为单位指示产品中闪存存储器容量。
例:0x0080 = 128 K字节
28.2 产品唯一身份标识寄存器(96)
产品唯一的身份标识非常适合:
用来作为序列号(例如USB字符序列号或者其他的终端应用)
用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪
存存储器内的安全性。
用来激活带安全机制的自举过程
96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯
一的。用户在何种情况下,都不能修改这个身份标识。
这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8)为单位读取,也可以以
半字(16)或者全字(32)读取。
基地址:0x1FFF F7E8
地址偏移:0x00
只读,其值在出厂时编写
1514131211109876543210
rrrrrrrrrrrrrrrr
U_ID[15:0]
U_ID[15:0]:唯一身份标志15:0 15:0
732/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
器件电子签名 STM32F10xxx参考手册
733/754
参照200912 RM0008 Reference Manual 英文第10
地址偏移:0x02
只读,其值在出厂时编写
1514131211109876543210
rrrrrrrrrrrrrrrr
U_ID[31:16]
U_ID[31:16]:唯一身份标志31:16 15:0
这个域的数值也预留作为未来的其它功能。
地址偏移:0x04
只读,其值在出厂时编写
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rrrrrrrrrrrrrrrr
1514131211109876543210
rrrrrrrrrrrrrrrr
U_ID[63:48]
U_ID[47:32]
U_ID[63:32]:唯一身份标志63:32 15:0
地址偏移:0x08
只读,其值在出厂时编写
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rrrrrrrrrrrrrrrr
1514131211109876543210
rrrrrrrrrrrrrrrr
U_ID[95:80]
U_ID[79:64]
U_ID[95:64]:唯一身份标志95:64 15:0
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
29 调试支持(DBG)
小容量产品是指闪存存储器容量在16K32K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K128K字节之间的STM32F101xxSTM32F102xx
STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K512K字节之间的STM32F101xxSTM32F103xx微控
制器。
互联型产品是指STM32F105xxSTM32F107xx微控制器。
除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。
29.1 概况
STM32F10xxx使用Cortex-M3核,该内核内含硬件调试模块,支持复杂的调试操作。硬件调
试模块允许内核在取指(指令断点)或访问数据(数据断点)时停止。内核停止时,内核的内部状态
和系统的外部状态都是可以查询的。完成查询后,内核和外设可以被复原,程序将继续执行。
STM32F10x微控制器连接到调试器并开始调试时,调试器将使用内核的硬件调试模块进行调
试操作。
支持两种调试接口:
串行接口
JTAG调试接口
332 STM32F10xxx级别和Cortex-M3级别的调试框图
注意:
Cortex
-M3
内核内含的硬件调试模块是
ARM CoreSight
开发工具集的子集。
ARM Cortex-M3内核提供集成的片上调试功能。它由以下部分组成:
SWJ-DP:串行/JTAG调试端口
734/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
AHP-APAHB访问端口
ITM:执行跟踪单元
FPB:闪存指令断点
DWT:数据触发
TPUI:跟踪单元接口(仅较大封装的芯片支持)
ETM:嵌入式跟踪微单元(在较大的封装上才有支持此功能的引脚)
专用于STM32F10xxx的调试特性
灵活的调试引脚分配
MCU调试盒(支持低电源模式,控制外设时钟等)
注意:
更多
ARM Cortex™-M3
内核的调试功能信息,请参考
Cortex™-M3(r1p1
)
技术参考手册
(TRM)
CoreSight
开发工具集
(r1p0
) TRM
29.2 ARM参考文献
Cortex-M3(r1p1)技术参考手册(TRM)
ARM调试接口V5
ARM CoreSight 开发工具集(r1p0)技术参考手册
29.3 SWJ调试端口(serial wire and JTAG)
STM32F10xxx内核集成了串行/JTAG调试接口(SWJ-DP)。这是标准的ARM CoreSight调试接
口,包括JTAG-DP接口(5个引脚)SW-DP接口(2个引脚)
JTAG调试接口(JTAG-DP)AHP-AP模块提供5针标准JTAG接口。
串行调试接口(SW-DP)AHP-AP模块提供2(时钟+数据)接口。
SWJ-DP接口中,SW-DP接口的2个引脚和JTAG接口的5个引脚中的一些是复用的。
333 SWJ调试端口
上面的图显示异步跟踪输出脚(TRACESWO)TDO是复用的,因此异步跟踪功能只能在SW-
DP调试接口上实现,不能在JTAG-DP调试接口上实现。
735/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
29.3.1 JTAG-DPSW-DP切换的机制
JTAG调试接口是默认的调试接口。
如果调试器想要切换到SW-DP,必须在TMS/TCK上输出一指定的JTAG序列(分别映射
SWDIOSWCLK),该序列禁止JTAG-DP,并激活SW-DP。该方法可以只通过SWCLK
SWDIO两个引脚来激活SW-DP接口。
指定的序列是:
1. 输出超过50TCK周期的TMS(SWDIO) 1信号
2. 输出16TMS(SWDIO)信号 0111100111100111 (MSB)
3. 输出超过50TCK周期的TMS(SWDIO) 1信号
29.4 引脚分布和调试端口脚
STM32F10xxx 微控制器的不同封装有不同的有效引脚数。因此,某些与引脚相关的功能可能随
封装而不同。
29.4.1 SWJ调试端口脚
STM32F10xxx5个普通I/O口可用作SWJ-DP接口引脚。这些引脚在所有的封装里都存在。
200 SWJ调试端口引脚
JTAG 调试接口 SW 调试接口
SWJ-DP端口引脚名称 引脚分配
类型 描述 类型 调试功能
JTMS/SWDIO 输入 JTAG模式选择 输入/输出 串行数据输入/输出 PA13
JTCK/SWCLK 输入 JTAG时钟 输入 串行时钟 PA14
JTDI 输入 JTAG数据输入 —— —— PA15
JTDO/TRACESWO 输出 JTAG数据输出 —— 跟踪时为TRACESWO信号 PB3
JNTRST 输入 JTAG模块复位 —— —— PB4
29.4.2 灵活的SWJ-DP脚分配
复位(SYSRESETnPORESETn)以后,属于SWJ-DP的所有5个引脚都立即被初始化为可被调
试器使用的专用引脚(注意,并没有初始化跟踪输出脚,除非调试器对此脚进行定义)
然而,STM32F10xxx微控制器可以用复用重映射和调试I/O配置寄存器(AFIO_MAPR)寄存器(
8.4.2)来禁止SWJ-DP接口的部分或所有引脚的功能,这些专用引脚将被释放以用作普通I/O
口。此寄存器被映射到和Cortex-M3系统总线相连接的APB桥上。对此寄存器的设置将由用户
代码而不是调试器完成。
3个控制位用来配置SWJ-DP接口的引脚,这3个位在系统复位时复位。
AFIO_MAPR(STM32F10xxx微控制器中的地址是0x40010004)
读:APB,无等待状态
写:APB,如果AHB-APB桥的写缓冲器满了,则一个等待状态
26:24=SWJ_CFG[2:0]
由软件置位和复位
3位用来设置分配给SWJ调试接口的专用引脚数目,目的是在使用不同的调试接口时能释放
尽可能多的引脚用作普通I/O口。
复位后的初始值是000(所有引脚都设置为JTAG-DP接口专用引脚),同时只能置位3个位中的
一个(禁止同时设置一个以上的位)
736/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
201 灵活的SWJ_DP引脚分配
SWJ接口的I/O口分配
SWJ-
CFG[2:0] PA14/
JTCK/
SWCLK
PA13/
JTMS/
SWDIO
配置为调试专用的引脚 PA15/
JTDI
PB3/
JTDO
PB4/
JNTRST
所有的SWJ引脚
专用 000 专用 专用 专用 专用
(JTAG-DP + SW-DP)
复位状态
所有的SWJ引脚
(JTAG-DP + SW-DP)
除了JNTRST引脚
001 释放 专用 专用 专用 专用
JTAG-DP接口禁止,
SW-DP接口允许
010 专用 专用 释放
737/754
参照200912 RM0008 Reference Manual 英文第10
100 JTAG-DP接口和
SW-DP接口都禁止 释放
其他 禁止
注意:
APB
桥的写缓冲区满了的时侯,在写
AFIO_MAPR
寄存器时需要多用一个
APB
周期。这是因为
JTAGSW
脚的释放需要
2
APB
周期,以保证输入内核的
nTRST
TCK
信号的平稳。
周期1:输入1 / 0JTAGSW 信号到内核(nTRST, TDI TMS1TCK0)
周期2GPI/O控制器获得SWJTAG I/O引脚的控制信号(如对方向,上拉/下拉,施密特触发
等的控制)
29.4.3 JTAG脚上的内部上拉和下拉
保证JTAG的输入引脚不是悬空的是非常必要的,因为他们直接连接到D触发器控制着调试模
式。必须特别注意SWCLK/TCK引脚,因为他们直接连接到一些D触发器的时钟端。
为了避免任何未受控制的I/O电平,STM32F10xxxJTAG输入脚上嵌入了内部上拉和下拉。
JINTRST:内部上拉
JTDI:内部上拉
JTMS/SWDIO:内部上拉
TCK/SWCLK:内部下拉
一旦JTAG I/O被用户代码释放,GPIO控制器再次取得控制。这些I/O口的状态将恢复到复位时
的状态。
JNTRST:带上拉的输入
JTDI:带上拉的输入
JTMS/SWDIO:带上拉的输入
JICK/SWCLK:带下拉的输入
JTDO:浮动输入
软件可以把这些I/O口作为普通的I/O口使用。
注意:
JTAG IEEE
标准建议对
TDI
TMS
nTRST
上拉,而对
TCK
没有特别的建议。但在
STM32F10xxx
中,
JTCK
引脚带有下拉。
内嵌的上拉和下拉使芯片不再需要外加外部电阻。
29.4.4 利用串行接口并释放不用的调试脚作为普通I/O
为了利用串行调试接口来释放一些普通I/O口,用户软件必须在复位后设置SWJ_CFG=010,从
而释放PA15PB3PB4用做普通I/O口。
在调试时,调试器进行以下操作:
在系统复位时,所有SWJ引脚被分配为专用引脚(JTAG-DP + SW-DP)
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
在系统复位状态下,调试器发送指定JTAG序列,从JTAG-DP切换到SW-DP
仍然在系统复位状态下,调试器在复位地址处设置断点
释放复位信号,内核停止在复位地址处。
从这里开始,所有的调试通信将使用SW-DP接口,其他JTAG引脚可以由用户代码改配为普
I/O口。
注意:
对于用户软件设计,应注意:
在复位后,这些专用引脚仍然处于带上拉的输入
(nTRST, TMS, TDI)
,带下拉的输入
(TCK)
,和
输出
(TDO)
状态,并持续一段时间,直到用户代码释放这些引脚。
当这些引脚被配置成专用引脚时
(JTAG
或者
SW
或者
TRACE)
,修改相应的普通
I/O
口配置寄存器
是无效的。
29.5 STM32F10xxx JTAG TAP 连接
STM32F10xxx微控制器内部串联了两个JTAG TAP。边界扫描TAP专门用来进行测试(IR寄存器
5比特位宽)Cortex-M3 TAP(IR寄存器为有4比特位宽)
为了访问Cortex-M3 TAP 对芯片进行调试,必须:
1. 首先,必须将BYPASS指令移位输入TMC TAP
2. 其次,在移位输入IR时,每个扫描链包含9个比特位(=5+4),对于不用的TAP,必须输入
BYPASS指令
3. 移位输入数据时,不用的TAP处于BYPASS模式下,因此数据扫描链需要额外添加一
比特位。
注意:
重要:一旦使用了指定的
JTAG
序列选择了串行调试接口,
TMC TAP
自动被禁止
(JTMS
被强制为
)
334 JTAG TAP连接
29.6 ID 代码和锁定机制
STM32F10x微控制器内部有多个ID编码。ST强烈建议工具设计者使用映射在外部PPB存储器
上地址为0xE0042000MCU DEVICE ID来锁定调试器。
29.6.1 微控制器设备ID编码
微控制器STM32F10xxx内含一个MCU ID编码。这个ID定义了ST MCU的部件号和硅片版本。它
DBG_MCU的一个组成部分,并且映射到外部PPB总线上(29.16)。使用JTAG调试口(4~5
738/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
个引脚)SW调试口(2个引脚)或通过用户代码都可以访问此编码。即使当MCU处于系统复位状
态下这个编码也可以被访问。
DBGMCU_IDCODE
地址:0xE004 2000
只支持32位访问
只读=0xXXXXX410,其中X为内容不确定的位
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rrrrrrrrrrrrrrrr
1514131211109876543210
rrrrrrrrrrrr
REV_ID
保留 DEV_ID
REV_ID[15:0]:版本识别 31:16
该域标识产品的版本
小容量产品 中容量产品 大容量产品
0x1000 = 版本A 0x0000 = 版本A 0x1000 = 版本A
0x2000 = 版本B 0x1001 = 版本Z
0x2001 = 版本Z
0x2003 = 版本Y
互联系列产品:
0x1000 = 版本A
0x1001 = 版本Z
15:12 保留
DEV_ID[11:0]:设备识别 11:0
这个部分指示了设备编码。对于STM32F10x微控制器:
小容量产品,设备编码为0x412
中容量产品,设备编码为0x410
大容量产品,设备编码为0x414
互联系列产品,设备编码为0x418
29.6.2 边界扫描TAP
JTAG ID编码
STM32F10xxx的边界扫描TAP集成了JTAG ID编码:
对于小容量产品
0x06412041 = 版本A
对于中容量产品
0x06410041 = 版本A
0x16410041 = 版本B和版本Z
对于大容量产品
0x06414041 = 版本A
对于互联系列产品
0x06418041 = 版本A和版本Z
739/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
29.6.3 Cortex-M3 TAP
ARM Cortex-M3TAP有一个JTAG ID编码。这个ID编码是ARM默认的,且没有被修改过,只
能通过JTAG调试口访问。此编码是0x3BA00477(对应于Cortex-M3 r1p1)
调试器/编程工具应该只通过DEV_ID(11:0)来识别芯片。
29.6.4 Cortex-M3 JEDEC-106 ID代码
ARM Cortex-M3 有一个JEDEC-106 ID 编码。它位于映射到内部PPB 总线地址为
0xE00FF000_0xE00FFFFF4KB ROM表中。
29.7 JTAG调试端口
标准的JTAG状态机是通过一个4比特位的指令寄存器(IR)5个数据寄存器(详见Cortex-M3 r1p1
Technical Reference Manual)实现的。
202 JTAG调试端口数据寄存器
IR(3:0) 数据寄存器 描述
1111 BYPASS[1比特位]
1110 IDCODE[32比特位] ID编码寄存器
0x3BA00477(ARM Cortex-M3 r1p1-01rel0 ID 编码)
1010 DPACC 调试接口寄存器
[32比特位] 初始化调试端口,并允许访问调试接口寄存器
- 输入数据时:
Bits34:3=DATA[31:0]:对应写操作的32数据位
Bits2:1=A[3:2]:调试接口寄存器的2位地址值
Bit0=RnW:读操作(1)或写操作(0)
- 输出数据时:
Bits34:3=DATA[31:0]:前一次读操作的32位数据结果
Bits2:0=ACK[2:0]3比特位的应答
010=成功/失败 001=等待 其他=未定义
A(3:2)的定义请参考0
1011 APACC 存取接口寄存器
[35比特位] 初始化存取接口并允许访问存取接口寄存器
- 输入数据时:
Bits34:3=DATA[31:0]:对应写操作的32数据位
Bits2:1=A[3:2]2比特位地址(AP寄存器的部分地址)
Bit0=RnW:读操作(1)或写操作(0)
- 输出数据时:
Bits34:3=DATA[31:0]:前一次读操作的32位数据结果
Bits2:0=ACK[2:0]3比特位的应答
010=成功/失败 001=等待 其他=未定义
关于AP寄存器请参考AHB-AP章节,这些寄存器的地址
由以下部分组成:A[3:2]
- 移位值A[3:2]
- DP SELECT寄存器的当前值
1000 ABORT 中止寄存器
[35比特位] - Bits 31:1 未定义
- Bit 0DAPABORT:写1产生一个DAP中止
740/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
203A[3:2]定义的32位调试接口寄存器地址
地址 A(3:2) 描述
0x0 00
未定义
0x4 01
DP CTRL/STAT 寄存器
- 请求一个系统或调试的上电操作
- 配置AP访问的操作模式
- 控制比较,校验操作
- 读取一些状态位(溢出,上电响应)
0x8 10
DP SELECT寄存器
用来选择当前的访问端口和有效的4字长寄存器窗口
- Bits31:24APSEL 选择当前AP
- Bits23:8:未定义
- Bits7:4APBANKSEL:在当前AP上选择4字长寄存器窗口
- Bits3:0:未定义
0xC 11
DP RDBUFF寄存器:用来使调试器获得前一次操作的最终结果(不用再请求一个新
JTAG-DP操作)
29.8 SW调试端口
29.8.1 SW协议介绍
此同步串行协议使用2个引脚:
SWCLK:从主机到目标的时钟信号
SWDIO:双向数据信号
协议允许读写2个寄存器组(DPACCAPACC寄存器组)
数据位按LSB传输。
由于SWDIO为双向口,该引脚需有上拉(ARM建议使用100K电阻)
按协议每次SWDIO方向改变时,需插入一个转换时间。在该期间内主机和目标都不驱动此信号
线。转换时间的默认值是1个比特,但可以通过配置SWCLK频率来调节。
29.8.2 SW协议序列
每个序列由3个阶段组成:
1. 主机发送包请求(8)
2. 目标发送确认响应(3)
3. 主机或目标发送数据(33)
204 请求包(8比特位)
比特位 名称 描述
0 起始 必须为1
1 APnDP 0:访问DP 1:访问AP
2 RnW 0:写请求 1:读请求
4:3 A(3:2) DPAP寄存器的地址(请参考0)
5 Parity 前面比特位的校验位
6 Stop 0
7 Park 不能由主机驱动,由于有上拉,目标永远读为1
有关DPACCAPACC寄存器描述的详细资料,请参考Cortex-M3 r1p1技术参考手册。
包请求后总是跟一个(默认为1)转换时间,此时主机和目标都不驱动线路。
741/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
205 ACK定义(3比特位)
比特位 名称 描述
0..2 ACK 001:失败 010:等待 100:成功
ACK为失败或等待,或者是一个回复读操作的ACK,此ACK后有一个转换时间。
206 传输数据(33比特位)
比特位 名称 描述
WDATA/
0..31 写或读的数据
RDATA
32 Parity 32位数据的奇偶校验位
读操作的数据传输操作后有一个转换时间。
29.8.3 SW-DP状态机(Reset, idle states, ID code)
SW-DP状态机有一个内部ID编码用来识别SW-DP,它遵守JEP-106标准。此ID编码是ARM默认
的编码,值为0x1BA01477(对应于Cortex-M3 r1p1)
注意:
在调试器读这个
ID
编码之前,
SW-DP
的状态机是不工作的。
SW-DP状态机将处于RESET状态,在上电复位后,或DPJTAG切换到SWD后,或有超过
50个周期的高电平。
当状态机处于RESET状态时,如果有至少2个周期的低电平,状态机将切换到IDLE状态。
当状态机处于RESET状态后,必需首先进入IDLE状态,并执行一个读DP-SW ID寄存器的
操作。否则,调试器在执行其他传输时,只能获得一个失败的ACK响应。
更详细的SW-DP状态机资料请参考Cortex-M3 r1p1技术参考手册和CoreSight Design Kit r1p0
技术参考手册。
29.8.4 DPAP/写访问
DP的读操作没有延迟:调试器将直接获得数据(如果ACK=成功),或者等待(如果ACK=
等待)
AP的读操作具有延迟。即前一次读操作的结果只能在下一次操作时获得。如果下一次的
操作不是对AP的访问,则必需读DP-RDBUFF寄存器来获得上一次读操作的结果。
DP-CTRL/STAT寄存器的READOK标志位会在每次AP读操作和RDBUFF读操作后更新,以
通知调试器AP的读操作是否成功。
SW-DP具有写缓冲区(DPAP都有写缓冲),这使得其他传输在进行时,仍然可以接受写操
作。如果写缓冲区满,调试器将获得一个等待的ACK响应。读IDCODE寄存器,读
CTRL/STAT寄存器和写ABORT寄存器操作在写缓冲区满时仍被接受。
由于SWCLKHCLK的异步性,需要在写操作后(在奇偶校验位后)插入2个额外的SWCLK
周期,以确保内部写操作正确完成。这两个额外的时钟周期需要在线路为低时插入(IDLE
态下)。这个操作步骤在写CTRL/STAT寄存器以提出一个上电请求时尤其重要,否则下一个
操作(在内核上电后才有效的操作)会立即执行,这将导致失败。
29.8.5 SW-DP寄存器
APnDP=0时,可以访问以下这些寄存器。
207 SW-DP寄存器
SELECT
寄存器的
CTRLSEL
A(3:2) / 寄存器 描述
00 IDCODE 固定为0x1BA01477(用于识别SW-DP)。
742/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
00 ABORT
-请求一个系统或调试的上电操作;
743/754
参照200912 RM0008 Reference Manual 英文第10
01 / 0 DP-CTRL/STAT
-配置AP访问的操作模式;
-控制比较,校验操作;
-读取一些状态位(溢出,上电响应)。
01 / 1 WIRE CONTROL 配置串行通信物理层协议(如转换时间长度等)。
10 READ RESEND
允许从一个错误的调试传输中恢复数据而不用重复
最初的AP传输。
10 SELECT 选择当前的访问端口和有效的4字长寄存器窗口。
11 / READ BUFFER
由于AP的访问具有传递性(当前AP读操作的结果会
在下次AP传输时传出),因此这个寄存器非常必要。
这个寄存器会从AP捕获上一次读操作的数据结果,
因此可以获得数据而不必再启动一个新的AP传输。
29.8.6 SW-AP寄存器
APnDP=1时,可以访问以下这些寄存器。
AP寄存器的访问地址由以下两部分组成:
A[3:2]的值
DP SELECT寄存器的当前值
29.9 对于JTAG-DPSWDP都有效的AHB-AP (AHB 访问端口)
功能:
系统访问是独立于处理器状态的。
JTAG-DPSW-DP都可以访问AHB-AP
AHB-AP是总线矩阵的AHB主设备。因此,它可以访问所有的数据总线(Dcode总线,
System总线,内部和外部 PPB总线),只有ICode总线除外。
支持位寻址的传输
旁路FPBAHB-AP传输
32AHP-AP寄存器的地址是6-位宽(最多64个字或256个字节),由以下部分组成:
a)比特位[8:4]= DP SELECT 寄存器的位[7:4] APBANKSEL
b)比特位[3:2] = 35 SW-DP 包请求中的 A(3:2)
Cortex-M3AHB-AP932位的寄存器
208 Cortex-M3 AHB-AP寄存器
地址偏移 寄存器名 描述
配置AHB接口的传输特性(长度,地址自加模
式,当前传输状态,特权模式等)
0x00 AHB-AP Control and Status Word
0x04 AHB-AP Transfer Address
0x0C AHB-AP Data Read/Write
0x10 AHB-AP Banked Data 0
0x14 AHB-AP Banked Data 1
0x18 AHB-AP Banked Data 2 直接访问4个相连的字而不用重写访问地址。
0x1C AHB-AP Banked Data 3
0xF8 AHB-AP Debug ROM Address 调试接口的基地址。
0xFC AHB-AP ID Register
更多信息请参考Cortex-M3 r1p1技术参考手册
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
29.10 内核调试
通过操作内核调试寄存器可以实行对内核的调试。对这些寄存器的访问通过先进高性能总线
(AHB-AP)进行。处理器可以通过内部私有外设总线(PPB)直接访问这些寄存器。
它包括4个寄存器。
209 内核调试寄存器
寄存器 描述
32位的调试控制和状态寄存器
DHCSR 此寄存器提供内核状态信息,允许内核进入调试模式,和提供单步功能。
17位的内核寄存器调试选择寄存器
DCRSR 此寄存器选择需要进行读写操作的内核寄存器。
32位的内核寄存器调试数据寄存器
DCRDR 此寄存器存放由DCRSR选择的内核寄存器读出的或需要写入的数据。
32位异常调试和监视控制寄存器
DEMCR 此寄存器提供向量传输和监视调试控制功能。TRCENA位启动TRACE功能。
注意:
重要:这些寄存器在系统复位时不复位,仅在上电复位时复位。
更多详细资料请参考Cortex-M3 r1p1技术参考手册。
为了在复位后立即使内核进入调试状态,需要:
使能调试和异常监视控制寄存器(Debug and Exception Monitor Control Register)的位0
(VC_CORRESET)
使能调试控制和状态寄存器(Debug Halting Control and Status Register)的位0
(C_DEBUGEN)
29.11 调试器主机在系统复位下的连接能力
STM32F10xxx 微控制器的复位系统由下列复位源组成:
POR(上电复位),在每次上电时发起一次复位
内部看门狗复位
软件复位
外部复位
Cortex-M3将调试部分的复位(通常是PORRESETn)和其他复位(SYSRESETn)区分开。因此,
当内核处于系统复位状态时,调试器可以连接到内核,配置内核调试寄存器,使能调试允
位,这样操作使内核在系统复位被释放时立即进入调试状态而不执行任何指令。同样的,可以
在内核处于复位状态下时配置调试特性。
注意:
强烈建议调试器在系统复位时连接内核
(
在复位向量处设置断点
)
29.12 FPB (Flash patch breakpoint)
FPB单元:
实现硬件断点
用系统区域的代码和数据取代代码区域的代码和数据。此特性可以用来纠正代码区域内的
软件错误。
软件补丁功能和硬件断点功能不能同时使用。
FPB由以下部分组成:
2个内容比较器,用来比较代码区域取得的内容并重映射到系统区域的相关地址。
6个指令比较器,用来比较代码区域的指令。这些比较器可用来实现软件补丁或者硬件断点
功能。
744/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
29.13 DWT(数据观察点触发data watchpoint trigger)
DWT模块由四个比较器组成,它们分别是:
一个硬件数据比较器
一个ETM触发器
一个PC值取样器
一个数据地址取样器
DWT还可用来获取某些侧面的信息。通过一些计数器可以获得以下数据:
时钟周期
分支指令
存取单元操作
睡眠周期
CPI(每条指令的执行时间)
中断开销
29.14 ITM (指令跟踪微单元 instrumentation trace macrocell)
29.14.1 概述
ITM是一应用驱动的跟踪源,它支持printf类的调试手段来跟踪操作系统(OS)和应用事件,并发
布判定的系统信息。ITM以包的形式发布跟踪信息,它由以下部分组成:
软件跟踪:软件可以通过直接写ITM激发寄存器来发布包信息。
硬件跟踪:ITM会发布由DWT产生的信息包。
时间戳:时间戳被发布到相应的包上。ITM包含一个21位的计数器以产生时间戳。Cortex-
M3的时钟或串行线观测器(Serial Wire Viewer)的位时钟率给计数器提供时钟。
ITM发送的信息包输出到TPIU(Trace Port Interface Unit)TPIU再添加一些额外的包(参考
TPIU),然后输出完整的包序列给调试器。
用户在设置或使用ITM之前,必需先使能异常调试和监视控制寄存器(Debug Exception and
Monitor Control Register)TRCEN位。
29.14.2 时间戳包,同步和溢出包
时间戳包包含了时间戳信息,普通的控制和同步信息。它使用一个21位的时间戳计数器(及可能
的预分频器),此计数器在每个时间戳包发放时复位。计数器的时钟可以是CPU时钟也可以
SWV时钟。
同步包为0x80_00_00_00_00_00,按00 00 00 00 00 80发送给TPIU(LSB在前)
同步包是时间戳包的控制信号。
它也在每个DWT触发时发送,因此DWT必须配置为触发ITM:必须设置DWT控制寄存器(DWT
Control Register)的位0(CYCCNTENA)。此外,也必须设置ITM跟踪控制寄存器(Trace Control
Register)的位2(SYNCENA)
注意:
如果
SYNENA
位没有被置起,
DWT
产生给
TPIU
的同步触发,将只发送
TPIU
同步包而不发送
ITM
同步包。
溢出包是一个特殊的时间戳包,该包指示数据已经被写但是FIFO已满。
210 主要的ITM寄存器
地址 寄存器 描述
@E0000FB0 ITM Lock Access 写入0xC5ACCE55允许写其他ITM寄存器
@E0000E80 ITM Trace Control 31-24 = 总是0
745/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
23 =
22-16 = 7位的ATB ID用以识别跟踪数据源
15-10 = 总是0
9:8 = 时间戳的预分频
7-5 = 未定义
4 = 使能SWV功能即时间戳计数器使用SWV时钟
3 = 使能DWT的激发功能
2 = 此位必需设为1来使能DWT的产生同步触发功能,以
使TPIU能够发送同步包
1 = 时间戳使能
0 = ITM的全局使能位
3:置’1’使能跟踪端口31:24
746/754
参照200912 RM0008 Reference Manual 英文第10
@E0000E40 ITM Trace Privilege
2:置’1’使能跟踪端口23:16
1:置’1’使能跟踪端口15:8
0:置’1’使能跟踪端口7:0
@E0000E00 ITM Trace Enable 每个比特位使能相应的触发端口产生跟踪
@E0000000
E000007C
Stimulus Port
Registers 0-31 向选中的产生跟踪的触发端口(32)32位数据
关于配置的例子:
TUIU输出一个简单值:
29.17.2- 配置TPIU并使能I/IO_TRACEN以使MCU分配TRACE的引脚(参见 跟踪引脚分配
29.16.3-调试MCU配置寄存器)
ITM Lock Access寄存器写入0xC5ACCE55以允许写其他ITM寄存器;
Trace Control寄存器写入0x00010005,使能TPIU的同步包并使能整个ITM功能,寄存器
中的ATB ID0x01
ITM Trace Enable寄存器写入0x1,以使能触发端口0
ITM Trace Privilege寄存器写入0x1,关闭对触发端口7:0的屏蔽;
把需要输出的值写入触发端口0寄存器,这个步骤可以通过软件完成(使用printf功能)
29.15 ETM模块(嵌入式跟踪微单元Embedded Trace Macrocell)
29.15.1 概述
ETM可以重现程序的运行过程。使用数据观察点触发模块(DWT)或指令跟踪微单元(ITM)可以跟
踪数据的变化,而是用嵌入式跟踪微单元(ETM)可以跟踪指令的执行。
ETM由内置的资源触发并以包的形式传送信息,软件可以分别配置这些资源,使用触发事件
存器(0xE0041008)可以选择触发源。触发事件可以是一个简单事件(例如来自地址比较器的地址
匹配),触发事件也可以是2事件之间的逻辑运算结果。触发源是DWT模块中四个比较器之
一。下列事件可以被观测到:
时钟周期匹配
数据地址匹配
29.13节。 更多有关触发源的信息,请参考第
ETM传送的信息包是通过TPIU(跟踪端口接口单元)输出,TPIU还需要增加一些额外的信息(详见
29.17),然后向调试主机输出完整的包序列。
29.15.2 信号协议和包类型
这部分的说明请参考ARM IHI 0014N文档的第7”ETM v3 Singal Protocol”
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
29.15.3 主要的ETM寄存器
有关寄存器的详细说明,请参考ARM IHI 0014N文档的第3章。
211 主要的ETM寄存器
地址 寄存器 说明
0xE0041FB0 ETM Lock Access 写入0xC5ACCE55解除对其它ETM寄存器的写保护
0xE0041000 ETM Control 控制ETM的操作,例如如何使能跟踪
0xE0041010 ETM Status 提供跟踪和触发逻辑当前状态的信息
0xE0041008 ETM Trigger Event 定义将要控制触发的事件
0xE004101C ETM Trace Enable Control 定义选用的比较器
0xE0041020 ETM Trace Enable Event 定义跟踪使能事件
0xE0041024 ETM Trace Start/Stop 定义触发源使用的跟踪事件,以设置跟踪的启动或停止
29.15.4 配置实例
TPIU输出一个简单的数值:
配置TPIU并使能I/IO_TRACEN,从而在大容量产品的调试配置寄存器中分配TRACE I/O
ETM Lock Access寄存器中写入0xC5ACCE55,解除对ITM寄存器的写保护;
在控制寄存器中写入0x00001D1E(配置跟踪)
在触发事件寄存器(Trigger Event)中写入0x000406F(定义触发事件)
在跟踪使能事件寄存器(Trace Enable Event)中写入0x0000006F(定义事件的启停)
在跟踪启动/停止寄存器(Trace Start/Stop)中写入0x00000001(跟踪使能)
ETM控制寄存器(Control)中写入0x0000191E(配置结束)
29.16 MCU调试模块(MCUDBG)
MCU调试模块协助调试器提供以下功能:
低功耗模式
在断点时提供定时器、看门狗、I2CbxCAN的时钟控制
对跟踪脚分配的控制
29.16.1 低功耗模式的调试支持
使用WFIWFE可以进入低功耗模式。
MCU支持多种低功耗模式,分别可以关闭CPU时钟,或降低CPU的能耗。
内核不允许在调试期间关闭FCLKHCLK。这些时钟对于调试操作是必要的,因此在调试期
间,它们必须工作。MCU使用一种特殊的方式,允许用户在低功耗模式下调试代码。
为实现这一功能,调试器必须先设置一些配置寄存器来改变低功耗模式的特性。
在睡眠模式下,调试器必须先置位DBGMCU_CR寄存器的DBG_SLEEP位。这将为HCLK
提供与FCLK(由代码配置的系统时钟)相同的时钟。
在停止模式下,调试器必须先置位DBG_STOP位。这将激活内部RC振荡器,在停止模式下
FCLKHCLK提供时钟。
29.16.2 支持定时器、看门狗、bxCANI2C的调试
在产生断点时,有必要根据定时器和看门狗的不同用途选择计数器的工作模式:
在产生断点时,计数器继续计数。这在输出PWM控制电机时常常要用到。
在产生断点时,计数器停止计数。这对于看门狗的计数器是必需的。
747/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
对于bxCAN,用户可以选择在断点期间阻止接收寄存器的更新。
对于I2C,用户可以选择在断点期间阻止SMBUS超时。
29.16.3 调试MCU配置寄存器
此寄存器允许在调试状态下下配置MCU。包括:
支持低功耗模式
支持定时器和看门狗的计数器
支持bxCAN通信
分配跟踪引脚
DBGMCU_CR寄存器被映射到外部PPB总线,基地址为0xE0042000
寄存器由PORESET异步复位(不被系统复位所复位)。当内核处于复位状态下时,调试器可写该
寄存器。
如果调试器不支持这些特性,用户软件仍可写这些寄存器。
DBGMCU_CR
地址:0xE0042004
只支持32位访问
POR复位:0x0000 0000(不被系统复位所复位)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DBG_
CAN2_
STOP
DBG_TIM8
_STOP
DBG_TIM7
_STOPT
DBG_TIM6
_STOPT
DBG_TIM5
_STOP
DBG_I2C
2_SMBUS
TIMEOUT
rw rw rw rw rw rw
1514131211109876543210
DBG_I2C
1_SMBUS
TIMEOUT
DBG_
CAN1_
STOP
DBG_
TIM4_
STOP
DBG_
TIM3_
STOP
DBG_
TIM2_
STOP
DBG_
TIM1_
STOP
DBG_
WWDG_
STOP
DBG_
IWDG_
STOP
TRACE
_IOEN
DBG_
STAND
BY
DBG_
STOP
DBG_
SLEEP
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
res
TRACE_
MODE[1:0] 保留
保留
res
31:21 保留,必须保持为0
DBG_CAN2_STOP:当内核进入调试状态时,CAN2停止运行。 21
0CAN2仍然正常运行;
1CAN2的接收寄存器不继续接收数据。
DBG_TIMx_STOP:当核心停止时停止定时器计数器(x=8..5) 20:17
0: 当核心停止时,仍然向相关定时器的计数器提供时钟,定时器输出工作正常;
1: 当核心停止时,切断相关定时器的计数器的时钟,同时关闭定时器的输出(就好象对某一暂停
事件的紧急响应,停止定时器)
DBG_I2C2_SMBUS_TIMEOUT:当核心停止时停止SMBUS超时模式。 16
0: 与正常模式操作相同;
1: 冻结SMBUS的超时控制。
DBG_I2C1_SMBUS_TIMEOUT:当核心停止时停止SMBUS超时模式。 15
0: 与正常模式操作相同;
1: 冻结SMBUS的超时控制。
DBG_CAN1_STOP:当内核进入调试状态时,CAN1停止运行。 14
0CAN1仍然正常运行;
1CAN1的接收寄存器不继续接收数据。
DBG_TIMx_STOP:当内核进入调试状态时计数器停止工作 x=4..1 13:10
0:选中定时器的计数器仍然正常工作;
1:选中定时器的计数器停止工作。
748/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
DBG_WWDG_STOP:当内核进入调试状态时调试窗口看门狗停止工作。 9
0:窗口看门狗计数器仍然正常工作;
1:窗口看门狗计数器停止工作。
DBG_IWDG_STOP:当内核进入调试状态时看门狗停止工作 8
0:看门狗计数器仍然正常工作;
1:看门狗计数器停止工作。
TRACE_MODE[1:0]TRACE_IOEN:跟踪引脚分配控制 7:5
- TRACE_IOEN0时:TRACE_MODExx:不分配跟踪引脚(默认状态)
- TRACE_IOEN=1时:
TRACE_MODE=00:跟踪引脚使用异步模式;
TRACE_MODE=01:跟踪引脚使用同步模式,并且数据长度为1
TRACE_MODE=10:跟踪引脚使用同步模式,并且数据长度为2
TRACE_MODE=11:跟踪引脚使用同步模式,并且数据长度为4
4:3 保留,必须保持为0
DBG_STANDBY:调试待机模式。 2
0(FCLK关,HCLK)整个数字电路部分都断电。
从软件的观点看,退出STANDBY模式与复位是一样的(除了一些状态位指示了微控制器刚从
STANDBY状态退出)
1(FCLK开,HCLK)数字电路部分不下电,FCLKHCLK时钟由内部RL振荡器提供时钟。
另外,微控制器通过产生系统复位来退出STANDBY模式和复位是一样的。
DBG_STOP:调试停止模式。 1
0(FCLK关,HCLK)在停止模式时,时钟控制器禁止一切时钟(包括HCLKFCLK)。当从
STOP模式退出时,时钟的配置和复位之后的配置一样(微控制器由8MHz的内部RC振荡器(HIS)
提供时钟)。因此,软件必需重新配置时钟控制系统启动PLL,晶振等。
1(FCLK开,HCLK)在停止模式时,FCLKHCLK钟由内部RC振荡器提供。当退出停止
模式时,软件必需重新配置时钟系统启动PLL,晶振等(与配置此比特位为0时的操作一样)
DBG_SLEEP:调试睡眠模式 0
0(FCLK开,HCLK)在睡眠模式时,FCLK由原先已配置好的系统时钟提供,HCLK则关
闭。由于睡眠模式不会复位已配置好的时钟系统,因此从睡眠模式退出时,软件不需要重新配
置时钟系统。
1(FCLK开,HCLK)在睡眠模式时,FCLKHCLK钟都由原先配置好的系统时钟提供。
749/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
29.17 TPIU (跟踪端口接口单元 Trace Port Interface Unit)
29.17.1 导言
TPIU在片上数据跟踪和ITM之间担当桥梁的作用。
输出的数据流封装成跟踪源ID,然后被追踪端口分析器(Trace Port Analyzer)采集。
内核嵌入了一个简单的专门为低价调试所设计的TPIU(由一个特殊版本的CoreSight TPIU
)
335 TPIU框图
29.17.2 跟踪引脚分配
异步模式
异步模式需要1个额外的引脚并且存在于所有的封装。此模式仅在串行调试接口有效(不支持
JTAG调试接口)
212 异步跟踪引脚分配
同步跟踪模式
TPUI引脚 STM32F10xxx引脚分配
类型 描述
TRACESWO PB3
输出 异步跟踪数据输出
同步模式
同步模式根据跟踪数据长度使用26个额外引脚,并且只存在于大封装芯片里。此外,此模式
JTAG调试接口和串行调试接口下都可使用,并提供比异步跟踪更好的数据输出量。
213 同步跟踪引脚分配
同步跟踪模式
TPUI引脚名 STM32F10xxx引脚分配
类型 描述
TRACECK 输出 跟踪时钟 PE2
同步跟踪数据输出,
长度可以是1,2,4
TRACED[3:0] 输出 PE[6:3]
750/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
TPUI跟踪引脚分配
这些引脚在默认状态下不是专用引脚。可以通过设置MCU Debug Component Configuration
存器的TRACE_IOEN TRACE_MODE位分配这些引脚。必需由调试器完成设置。
此外,由跟踪的配置决定分配的引脚数(异步还是同步)
异步模式:需要1个额外引脚
同步模式:根据跟踪端口的数据长度(124)决定使用25个额外的引脚
TRACECK
TRACED(0)如果数据长度配置为124
TRACED(1)如果数据长度配置为24
TRACED(2)如果数据长度配置为4
TRACED(3)如果数据长度配置为4
调试器需要设置Debug MCU Configuration寄存器的TRACE_IOENTRACE_MODE[1:0]位来
分配跟踪引脚。默认时,跟踪脚是不分配的。
此寄存器被映射到外部PPB并且被PORESET所复位(系统复位不复位此寄存器)。调试器可以在
系统复位的状态下写该寄存器。
214 灵活的跟踪引脚分配
DBGMCU_CR寄存器 跟踪引脚分配
PB3/
JTDO/
TRACES
WO
PE2/
TRACE
CK
PE3/
TRACE
D[0]
PE4/
TRACE
D[1]
PE5/
TRACE
D[2]
PE6/
TRACE
D[3]
引脚用途
TRACE_
IOEN TRACE_
MODE[1:0]
751/754
参照200912 RM0008 Reference Manual 英文第10
0 XX
无跟踪
(默认状态)释放(1)
释放(可用作普通I/O)
TRACES
1 00 异步跟踪 WO
1 01
同步跟踪1
TRACE
CK
TRACE
D[0]
释放
(可用作普通I/O)
1 10
同步跟踪2
TRACE
CK
TRACE
D[0]
TRACE
D[1]
释放(可用作
普通I/O)
释放(1)
TRACE TRACE TRACE TRACE TRACE
1 11
同步跟踪4
CK D[0] D[1] D[2] D[3]
注释(1):使用串行调试接口时,此引脚被释放,使用JTAG调试接口时,此引脚用作JTDO
注意:
TUIP
的输入时钟
TRACECLKIN
默认接地。所以在比特位
TRACE_IOEN
被置位后,
HCLK
需要两
个时钟周期。
然后,调试器可以通过写TPIUSPP_R(Selected Pin Protocol)寄存器的PROTOCOL [1:0]位来
配置跟踪模式。
PROTOCOL=00: 跟踪模式(同步)
PROTOCOL=0110:串行模式(曼彻斯特或NRZ编码)。默认状态为01
然后通过写TPIUCPSPS_R(Current Sync Port Size)寄存器的位[3:0]来配置跟踪端口的大小。
0x11个引脚(默认)
0x22个引脚
0x84个引脚
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
29.17.3 TPUI格式器
协议格式器输出16个字节组成的帧:
7个数据字节
8个多用途字节,由以下部分组成:
1(LSB)用来区分数据字节(0)ID字节(1)
7(MSB)可以作为数据或跟踪源ID的变化。
1个辅助字节,其中的每个位都对应于8个多用途字节中的一个:
如果对应的多用途字节是数据字节,那么这个位是数据的比特0位。
如果对应字节是ID字节,这个位表明ID变化何时生效。
注意:
更多信息,请参考
ARM CoreSight Architecture Specification v1.0(ARM IHI 0029B)
29.17.4 TPUI帧异步包
TPUI会产生两种类型的同步包:
帧同步包(或全字同步包)
该包为0x7F_FF_FF_FF(LSB先发),这个序列只有在0x7F没有被作为ID源编码的时候才能
使用。
该包在帧之间周期性地输出。
在连续模式里,一旦同步帧被发现,TPA必须抛弃所有这些帧。
半字同步包
该包为:0x7F_FF(LSB先发)
它在帧之间或帧内周期性的输出。
这些包只存在于连续模式中,并且使能TPA检测IDLE模式下的TRACE(TRACE被捕
)。当被TPA检测到时,必须将其抛弃。
29.17.5 同步帧包的发送
由于内核的TPIU内没有同步计数寄存器,因此同步的触发只能由DWT产生。参DWT Control
Register寄存器(SYNCTAP[11:10])DWT Current PC Sampler Cycle Count寄存器。
TPUI帧同步包(0x7F_FF_FF_FF)在下列情况时被发送:
在每个TPIU复位释放后。复位信号同步于TRACECLKIN时钟的上升沿释放,这意味着当
DBGMCU_CFG寄存器的TRACE_IOEN位被置位时,同步包就被发送。这种情况下,包
0x7F_FF_FF_FF后面不跟任何格式的包。
在每个DWT触发时(假设已事先设置好DWT),有以下两种情况:
如果ITMSYNENA=0,只发送字0x7F_FF_FF_FF,后面不跟任何格式的数据包。
如果ITMSYNENA=1ITM同步包将跟在 (0x80_00_00_00_00_00)后面,由TPUI
排格式(加上跟踪源ID)
29.17.6 同步模式
跟踪输出数据的引脚数可以为4个,2个或者1个,由TRACED(3:0)
配置时钟输出到调试器(TRACECK)TRACECLKIN在内部被驱动,并仅当使用TRACE时和HCLK
相连接。
注意:
在此类同步模式中,不需要提供稳定的时钟频率。
TRACE I/O 端口(包括TRACECK) TRACLKIN 的上升沿驱动(等同于HCLK) 。因此,
TRACECK的输出频率等于HCLK/2
752/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
29.17.7 异步模式
调试模块提供一个低成本的,只使用一个引脚的跟踪数据输出功能,即使用异步输出引脚
TRACESWO。但显然,这样的输出数据带宽是有限的。
TRACESWO引脚与JTDO引脚复用,只在SW-DP调试接口有效,因此STM32F10xxx的所有封
装都提供这种功能。
异步模式需要TRACECLKIN引脚有平稳的频率提供。对标准的UART(NRZ)捕捉机制来说,需要
5%的正确度。曼彻斯特编码可放宽到10%
29.17.8 TRACECLKINSTM32F10xxx内部的连接
TRACECLKIN输入在STM32F10xxx内部与HCLK相连接。这意味着在使用异步跟踪模式时,应
用程序应限制使用时间帧保证CPU频率的稳定。
注意:
重要:当使用异步跟踪功能时需注意:
STM32F10xxx
微控制器的初时时钟是内部
RC
振荡器,
此振荡器在复位状态下的频率与复位后
的频率不同。这是由于
RC
校准在复位状态下使用初始值,而这个值在复位释放后会更新。
因此,不应该在系统复位状态下激活跟踪端口分析器
(Trace Port Analyzer)
的跟踪功能
(
置位
TRACE_IOEN)
。因为在复位状态下的同步帧包的比特宽度与复位后的包不同。
29.17.9 TPIU寄存器
只有当Debug Exception and Monitor Control(DEMCR)寄存器的TRCENA位被置位时TPIU
APB寄存器才可以被读写。否则寄存器读出值为0(这一位的输出使能TPIUPCLK)
215 重要的TPIU寄存器
地址 寄存器 描述
0xE0040004 Current port size 跟踪端口的长度:
0:端口长度为1
1:端口长度为2
2:端口长度为3,不支持
3:端口长度为4
四个比特中只能同时置位一个比特。
默认状态下,端口长度为1(0x00000001)
Selected pin
protocol
0xE00400F0 跟踪端口协议的选择:
1:0
00:同步跟踪模式
01:串行输出-曼彻斯特编码(默认值)
10:串行输出-NRZ
11:未定义
Formatter and flush
control
0xE0040304 31-9 :总是0
8 Trigln 总是1,指示触发器
7-4:总是0
3-2:总是0
1EnFCont:同步模式下(Select Pin Protocol寄存器的Bit10
00),此比特位强制为1,连续模式下格式器被自动使能。异步模式
(Select Pin Protocol寄存器的Bit10不为00),此比特可以被置位
或复位来选择是否使能格式器。
0:总是0
默认值为0x102
注意:在同步模式下,由于TRACECTL信号没有外部引脚,因此格
式器会在连续模式下自动使能。这意味着格式器会插入一些控制包
来识别跟踪包的源。
753/754
参照200912 RM0008 Reference Manual 英文第10
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
调试支持(DBG) STM32F10xxx参考手册
754/754
参照200912 RM0008 Reference Manual 英文第10
Formatter and flush
status
0xE0040300 没有在Cortex-M3中使用,读出值始终为0x00000008
29.17.10 配置的例子
设置Debug Exception and Monitor Control 寄存器的TRCENA位;
TPIU Current Port Size寄存器中写入期望值(默认是0x1,指示端口长度为1bit)
TPIU Formatter and Flush Control寄存器中写入0x102(默认值)
TPIU Select Pin Protocol寄存器,选择同步或异步模式。例如写0x2选择NRZ编码的异步
模式(类似URAT)
DBGMCU Control寄存器写入0x20(置位IO_TRACEN),为异步模式分配TRACEI/O
口。此时TPIU将发出一个同步包(FF_FF_FF_7F)
配置ITM并且写ITMStimulus寄存器输出数据。
29.18 DBG寄存器地址映象
下列表格归纳了调试寄存器。
216 DBG – 寄存器和复位值
地址 寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0xE0042000 DBGMCU_
IDCODE
复位值
(1)
xxxxxxxxxxxxxxxx xxxxxxxxxxxx
0xE0042004 DBGMCU_CR
DBG_CAN2_STOP
DBG_TIM8_STOP
DBG_TIM7_STOP
DBG_TIM6_STOP
DBG_TIM5_STOP
DBG_I2C2_SMBUS_TIMEOU
DBG_I2C1_SMBUS_TIMEOU
DBG_CAN1_STOP
DBG_TIM4_STP
DBG_TIM3_STP
DBG_TIM2_STP
DBG_TIM1_STP
DBG_WWDG_STOP
DBG_IWDG_STOP
TRACE_IOEN
DBG_STANDBY
DBG_STOP
DBG_SLEEP
复位值 00000000000000000 000
保留
保留
REV_ID DEV_ID
TRACE_MODE
[1:0]
保留
(1) 复位值与特定的产品相关。详情参见29.6.1-微控制器设备ID编码。
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本

Navigation menu