首页资源分类嵌入式处理器ARM MCU > stm32中文参考手册

stm32中文参考手册

已有 445110个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:stm32

    分    享:

    文档简介

    内容有索引,关于stm32的中文手册

    文档预览

    STM32F10xxx参考手册 翻译说明 本文档是依据STM32 Reference Manual (RM0008)翻译的,已经与2009年6月的英文第9版(Doc ID 13902 Rev 9)进行了全面校对,更正了不少以前版本的错误。 在校对即将结束时,ST于2009年12月中旬又发布了英文第10版(Doc ID 13902 Rev 10),为了与最新的 英文版同步,我们按照英文第10版结尾的”文档版本历史”中的指示,在翻译的文档中快速地校对更正了对 应的部分。由于时间的关系,没有逐字逐句地按照英文第10版进行通篇校对,鉴于芯片本身没有改变, 我们相信除了”文档版本历史”中指出的差别外,英文第10版与英文第9版不会再有更多的变化,遂定稿现 在这个翻译版本为对应的中文第10版文档。 由于我们的水平有限以及文档篇幅的庞大,翻译的过程中难免会有错误和遗漏的地方,希望广大读者们 能够及时向我们反馈您在阅读期间所发现的错误和问题,我们会尽快在下一个版本中更正。您可以发邮 件到mcu.china@st.com向我们提出您的意见和建议,谢谢。 意法半导体(中国)投资有限公司 MCU技术支持 2010年1月10日 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 STM32F10xxx参考手册 文档使用说明 本手册是STM32微控制器产品的技术参考手册,技术参考手册是有关如何使用该产品的具体信息,包含 各个功能模块的内部结构、所有可能的功能描述、各种工作模式的使用和寄存器配置等详细信息。 技术参考手册不包含有关产品技术特征的说明,这些内容在数据手册中。数据手册中的内容包括:产品 的基本配置(如内置Flash和RAM的容量、外设模块的种类和数量等),管脚的数量和分配,电气特性,封 装信息,和定购代码等。 STM32是一个微控制器产品系列的总称,目前这个系列中已经包含了多个子系列,分别是:STM32小容 量产品、STM32中容量产品、STM32大容量产品和STM32互联型产品;按照功能上的划分,又可分为 STM32F101xx、STM32F102xx和STM32F103xx系列;因此STM32产品系列有以下这些数据手册: 小容量STM32F101xx:http://www.st.com/stonline/products/literature/ds/15058.pdf 中容量STM32F101xx:http://www.st.com/stonline/products/literature/ds/13586.pdf 大容量STM32F101xx:http://www.st.com/stonline/products/literature/ds/14610.pdf 小容量STM32F102xx:http://www.st.com/stonline/products/literature/ds/15057.pdf 中容量STM32F102xx:http://www.st.com/stonline/products/literature/ds/15056.pdf 小容量STM32F103xx:http://www.st.com/stonline/products/literature/ds/15060.pdf 中容量STM32F103xx:http://www.st.com/stonline/products/literature/ds/13587.pdf 大容量STM32F103xx:http://www.st.com/stonline/products/literature/ds/14611.pdf 互联型STM32F105xx/STM32F107xx:http://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技术参考手册》。 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 STM32F10xxx参考手册 STM32系列产品命名规则 示例: STM32 F 103 C 8 T 6 A xxx 产品系列 STM32 = 基于ARM®的32位微控制器 产品类型 F = 通用类型 产品子系列 101 = 基本型 102 = USB基本型,USB 2.0全速设备 103 = 增强型 105或107 = 互联型 引脚数目 T = 36脚 C = 48脚 R = 64脚 V = 100脚 Z = 144脚 闪存存储器容量 4 = 16K字节的闪存存储器 6 = 32K字节的闪存存储器 8 = 64K字节的闪存存储器 B = 128K字节的闪存存储器 C = 256K字节的闪存存储器 D = 384K字节的闪存存储器 E = 512K字节的闪存存储器 封装 H = BGA T = LQFP U = VFQFPN Y = WLCSP64 温度范围 6 = 工业级温度范围,-40°C~85°C 7 = 工业级温度范围,-40°C~105°C 内部代码 A 或者空 (详见产品数据手册) 选项 xxx = 已编程的器件代号(3个数字) TR = 卷带式包装 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 STM32F10xxx参考手册 STM32技术参考手册各章节与各产品系列交叉对照表 小中大小中小中大 容容容容容容容容 量量量量量量量量 STM32F107xx STM32F105xx STM32F103xx STM32F103xx STM32F103xx STM32F102xx STM32F102xx STM32F101xx STM32F101xx STM32F101xx 第1章:文中的缩写 第2章:存储器和总线构架 第3章:CRC计算单元(CRC) 第4章:电源控制(PWR) 第5章:备份寄存器(BKP) 第6章:小容量、中容量和大容量产品的复位和时钟控制(RCC) 第7章:互联型产品的复位和时钟控制(RCC) 第8章:通用和复用功能I/O(GPIO和AFIO) 第9章:中断和事件 第10章:DMA控制器(DMA) 第11章:模拟/数字转换(ADC) 第12章:数字/模拟转换(DAC) 第13章:高级控制定时器(TIM1和TIM8) 第14章:通用定时器(TIMx) 第15章:基本定时器(TIM6和TIM7) 第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) ● 表示所在行对应的章节适用于该列标示的产品系列 ●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●● ●●●●●●●● ●● ●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●● ● ●●● ●●●●● ●●●●●●●●●● ● ●●● ●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●● ● ● ● ●●●●● ●●●●● ●●●●●●●●●● ●●●●●●●●●● ●●●●●●●●●● ●● ● ●●●●●●●●●● ●●●●●●●●●● 提示:点击上表中的章节名字可以直接跳转到对应的章节。 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 STM32F10xxx参考手册 下表给出了一个交叉参考,在使用各功能模块时应重点阅读哪些章节: 功能模块 备通模数定实独窗静 通控串芯通通以 SDIO (SDIO) 份用拟字时时立口态 用制行片用用太 寄 存 器 输 入 输 出 端 / 数 字 转 换 / 模 拟 转 换 器 时 钟 看 门 狗 看 门 狗 存 储 器 控 制 接 口 串 行 总 线 器 局 域 网 外 设 总 线 间 总 线 接 口 同 步 异 步 收 串 行 总 线 网 (RTC) 口 器 发 器 (BKP) (ETH) OTG(OTG_FS) (I2C) (SPI) (bxCAN) (USB) (FSMC) ( WWDG) (IWDG) (TIMx(x=1…8)) (DAC) (ADC) (USART) (GPIO) 第1章:文中的缩写 ●●●●●●●●●●●●●●●●● 第2章:存储器和总线构架 ●●●●●●●●●●●●●●●●● 第3章:CRC计算单元(CRC) 第4章:电源控制(PWR) ●●●●●●●●●●●●●●●●● 第5章:备份寄存器(BKP) ● ◎ 第6章:小容量、中容量和大容量产品的复位 和时钟控制(RCC) 或 第7章:互联型产品的复位和时钟控制(RCC) ●●●●●●●●●●●●●●●●● 第8章:通用和复用功能I/O(GPIO和AFIO) ◎●●●●◎●●●●●●●●●●● 第9章:中断和事件 ◎◎◎◎◎ ◎◎◎◎◎◎◎◎◎◎ 第10章:DMA控制器(DMA) ◎◎◎ ◎◎ ◎◎◎ 第11章:模拟/数字转换(ADC) ● 第12章:数字/模拟转换(DAC) ● 第13章:高级控制定时器(TIM1和TIM8) ◎ ● 第14章:通用定时器(TIMx) ◎ ● 第15章:基本定时器(TIM6和TIM7) ◎◎● 第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章的内容适合于除互联型产品以外的产品。 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 STM32F10xxx参考手册 参考手册 STM32F101xx, STM32F102xx、STM32F103xx、STM32F105xx 和 STM32F107xx,ARM 内核 32 位高性能微控制器 导言 本参考手册针对应用开发,提供关于如何使用STM32F101xx、STM32F102xx、STM32F103和 STM32F105xx/STM32F107xx 微 控 制 器 的 存 储 器 和 外 设 的 详 细 信 息 。 在 本 参 考 手 册 中 STM32F101xx 、 STM32F102xx 、 STM32F103 和 STM32F105xx/STM32F107xx 被 统 称 为 STM32F10xxx。 STM32F10xxx系列拥有不同的存储器容量、封装和外设配置。 关 于 订 货 编 号 、 电 气 和 物 理 性 能 参 数 , 请 参 考 小 容 量 、 中 容 量 和 大 容 量 的 STM32F101xx 和 STM32F103xx 的 数 据 手 册 , 小 容 量 和 中 容 量 的 STM32F102xx 数 据 手 册 和 STM32F105xx/ STM32F107xx互联型产品的数据手册。 关于芯片内部闪存的编程,擦除和保护操作,请参考STM32F10xxx闪存编程手册。 关于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/): ● STM32F101xx、STM32F102xx和STM32F103xx的数据手册。 ● STM32F10xxx闪存编程手册。 相关数据手册下载地址: 小容量STM32F101xx:http://www.st.com/stonline/products/literature/ds/15058.pdf 中容量STM32F101xx:http://www.st.com/stonline/products/literature/ds/13586.pdf 大容量STM32F101xx:http://www.st.com/stonline/products/literature/ds/14610.pdf 小容量STM32F102xx:http://www.st.com/stonline/products/literature/ds/15057.pdf 中容量STM32F102xx:http://www.st.com/stonline/products/literature/ds/15056.pdf 小容量STM32F103xx:http://www.st.com/stonline/products/literature/ds/15060.pdf 中容量STM32F103xx:http://www.st.com/stonline/products/literature/ds/13587.pdf 大容量STM32F103xx:http://www.st.com/stonline/products/literature/ds/14611.pdf 互联型STM32F105xx/STM32F107xx:http://www.st.com/stonline/products/literature/ds/15274.pdf STM32F10xxx Cortex-M3编程手册:http://www.st.com/stonline/products/literature/pm/15491.pdf 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 目录 5.3 BKP功能描述 5.3.1 5.3.2 侵入检测 RTC校准 5.4 BKP寄存器描述 5.4.1 备份数据寄存器x(BKP_DRx) (x = 1 … 10) 5.4.2 RTC时钟校准寄存器(BKP_RTCCR) 5.4.3 备份控制寄存器(BKP_CR) 5.4.4 备份控制/状态寄存器(BKP_CSR) 5.4.5 BKP寄存器映像 6 小容量、中容量和大容量产品的复位和时钟控制(RCC) 6.1 复位 6.1.1 6.1.2 6.1.3 系统复位 电源复位 备份域复位 6.2 时钟 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.2.8 6.2.9 6.2.10 HSE时钟 HSI时钟 PLL LSE时钟 LSI时钟 系统时钟(SYSCLK)选择 时钟安全系统(CSS) RTC时钟 看门狗时钟 时钟输出 6.3 RCC寄存器描述 6.3.1 时钟控制寄存器(RCC_CR) 6.3.2 时钟配置寄存器(RCC_CFGR) 6.3.3 时钟中断寄存器 (RCC_CIR) 6.3.4 APB2外设复位寄存器 (RCC_APB2RSTR) 6.3.5 APB1外设复位寄存器 (RCC_APB1RSTR) 6.3.6 AHB外设时钟使能寄存器 (RCC_AHBENR) 6.3.7 APB2外设时钟使能寄存器(RCC_APB2ENR) 6.3.8 APB1外设时钟使能寄存器(RCC_APB1ENR) 6.3.9 备份域控制寄存器 (RCC_BDCR) 6.3.10 控制/状态寄存器 (RCC_CSR) 6.3.11 RCC寄存器地址映像 7 互联型产品的复位和时钟控制(RCC) 7.1 复位 7.1.1 7.1.2 7.1.3 系统复位 电源复位 备份域复位 7.2 时钟 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 7.2.6 HSE时钟 HSI时钟 PLL LSE时钟 LSI时钟 系统时钟(SYSCLK)选择 STM32F10xxx参考手册 47 47 48 48 48 48 49 49 51 54 54 54 54 55 55 57 57 58 58 58 59 59 59 59 59 60 60 61 63 65 67 69 70 71 74 75 77 78 78 78 78 79 79 81 82 82 82 83 83 8/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 目录 7.2.7 7.2.8 7.2.9 7.2.10 时钟安全系统(CSS) RTC时钟 看门狗时钟 时钟输出 7.3 RCC寄存器 7.3.1 时钟控制寄存器(RCC_CR) 7.3.2 时钟配置寄存器(RCC_CFGR) 7.3.3 时钟中断寄存器(RCC_CIR) 7.3.4 APB2外设复位寄存器(RCC_APB2RSTR) 7.3.5 APB1外设复位寄存器(RCC_APB1RSTR) 7.3.6 AHB外设时钟使能寄存器(RCC_AHBENR) 7.3.7 APB2外设时钟使能寄存器(RCC_APB2ENR) 7.3.8 APB1外设时钟使能寄存器(RCC_APB1ENR) 7.3.9 备份域控制寄存器(RCC_BDCR) 7.3.10 控制/状态寄存器(RCC_CSR) 7.3.11 AHB外设时钟复位寄存器(RCC_AHBRSTR) 7.3.12 时钟配置寄存器2(RCC_CFGR2) 7.3.13 RCC寄存器地址映像 8 通用和复用功能I/O(GPIO和AFIO) 8.1 GPIO功能描述 8.1.1 8.1.2 8.1.3 8.1.4 8.1.5 8.1.6 8.1.7 8.1.8 8.1.9 8.1.10 8.1.11 通用I/O(GPIO) 单独的位设置或位清除 外部中断/唤醒线 复用功能(AF) 软件重新映射I/O复用功能 GPIO锁定机制 输入配置 输出配置 复用功能配置 模拟输入配置 外设的GPIO配置 8.2 GPIO寄存器描述 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.2.7 端口配置低寄存器(GPIOx_CRL) (x=A..E) 端口配置高寄存器(GPIOx_CRH) (x=A..E) 端口输入数据寄存器(GPIOx_IDR) (x=A..E) 端口输出数据寄存器(GPIOx_ODR) (x=A..E) 端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E) 端口位清除寄存器(GPIOx_BRR) (x=A..E) 端口配置锁定寄存器(GPIOx_LCKR) (x=A..E) 8.3 复用功能I/O和调试配置(AFIO) 8.3.1 8.3.2 8.3.3 8.3.4 8.3.5 8.3.6 8.3.7 8.3.8 8.3.9 8.3.10 把OSC32_IN/OSC32_OUT作为GPIO 端口PC14/PC15 把OSC_IN/OSC_OUT引脚作为GPIO端口PD0/PD1 CAN1复用功能重映射 CAN2复用功能重映射 JTAG/SWD复用功能重映射 ADC复用功能重映射 定时器复用功能重映射 USART复用功能重映射 I2C1复用功能重映射 SPI 1复用功能重映射 STM32F10xxx参考手册 83 83 84 84 85 85 86 88 91 92 94 95 97 99 100 101 101 103 105 105 106 107 107 107 107 107 107 108 109 109 110 113 113 114 114 115 115 115 116 116 116 117 117 117 117 118 118 119 120 120 9/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 目录 8.3.11 SPI3复用功能重映射 8.3.12 以太网复用功能重映射 8.4 AFIO寄存器描述 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.4.6 事件控制寄存器(AFIO_EVCR) 复用重映射和调试I/O配置寄存器(AFIO_MAPR) 外部中断配置寄存器1(AFIO_EXTICR1) 外部中断配置寄存器2(AFIO_EXTICR2) 外部中断配置寄存器3(AFIO_EXTICR3) 外部中断配置寄存器4(AFIO_EXTICR4) 8.5 GPIO 和AFIO寄存器地址映象 9 中断和事件 9.1 嵌套向量中断控制器 9.1.1 9.1.2 系统嘀嗒(SysTick)校准值寄存器 中断和异常向量 9.2 外部中断/事件控制器(EXTI) 9.2.1 9.2.2 9.2.3 9.2.4 9.2.5 主要特性 框图 唤醒事件管理 功能说明 外部中断/事件线路映像 9.3 EXTI 寄存器描述 9.3.1 中断屏蔽寄存器(EXTI_IMR) 9.3.2 事件屏蔽寄存器(EXTI_EMR) 9.3.3 上升沿触发选择寄存器(EXTI_RTSR) 9.3.4 下降沿触发选择寄存器(EXTI_FTSR) 9.3.5 软件中断事件寄存器(EXTI_SWIER) 9.3.6 挂起寄存器(EXTI_PR) 9.3.7 外部中断/事件寄存器映像 10 DMA控制器(DMA) 10.1 DMA简介 10.2 DMA主要特性 10.3 功能描述 10.3.1 10.3.2 10.3.3 10.3.4 10.3.5 10.3.6 10.3.7 DMA处理 仲裁器 DMA 通道 可编程的数据传输宽度、对齐方式和数据大小端 错误管理 中断 DMA请求映像 10.4 DMA寄存器 10.4.1 DMA中断状态寄存器(DMA_ISR) 10.4.2 DMA中断标志清除寄存器(DMA_IFCR) 10.4.3 DMA通道x配置寄存器(DMA_CCRx)(x = 1…7) 10.4.4 DMA通道x传输数量寄存器(DMA_CNDTRx)(x = 1…7) 10.4.5 DMA通道x外设地址寄存器(DMA_CPARx)(x = 1…7) 10.4.6 DMA通道x存储器地址寄存器(DMA_CMARx)(x = 1…7) 10.4.7 DMA寄存器映像 11 模拟/数字转换(ADC) STM32F10xxx参考手册 120 121 121 121 121 126 127 127 128 129 130 130 130 130 134 134 135 135 135 137 138 138 138 139 139 140 140 141 142 142 142 143 143 144 144 145 146 146 147 149 149 150 150 152 152 152 153 155 10/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 目录 11.1 ADC介绍 11.2 ADC主要特征 11.3 ADC功能描述 11.3.1 11.3.2 11.3.3 11.3.4 11.3.5 11.3.6 11.3.7 11.3.8 11.3.9 11.3.10 ADC开关控制 ADC时钟 通道选择 单次转换模式 连续转换模式 时序图 模拟看门狗 扫描模式 注入通道管理 间断模式 11.4 校准 11.5 数据对齐 11.6 可编程的通道采样时间 11.7 外部触发转换 11.8 DMA请求 11.9 双ADC模式 11.9.1 11.9.2 11.9.3 11.9.4 11.9.5 11.9.6 11.9.7 11.9.8 11.9.9 同步注入模式 同步规则模式 快速交叉模式 慢速交叉模式 交替触发模式 独立模式 混合的规则/注入同步模式 混合的同步规则+交替触发模式 混合同步注入 + 交叉模式 11.10 温度传感器 11.11 ADC中断 11.12 ADC寄存器 11.12.1 ADC状态寄存器(ADC_SR) 11.12.2 ADC控制寄存器1(ADC_CR1) 11.12.3 ADC控制寄存器2(ADC_CR2) 11.12.4 ADC采样时间寄存器1(ADC_SMPR1) 11.12.5 ADC采样时间寄存器2(ADC_SMPR2) 11.12.6 ADC注入通道数据偏移寄存器x (ADC_JOFRx)(x=1..4) 11.12.7 ADC看门狗高阀值寄存器(ADC_HTR) 11.12.8 ADC看门狗低阀值寄存器(ADC_LRT) 11.12.9 ADC规则序列寄存器1(ADC_SQR1) 11.12.10 ADC规则序列寄存器2(ADC_SQR2) 11.12.11 ADC规则序列寄存器3(ADC_SQR3) 11.12.12 ADC注入序列寄存器(ADC_JSQR) 11.12.13 ADC 注入数据寄存器x (ADC_JDRx) (x= 1..4) 11.12.14 ADC规则数据寄存器(ADC_DR) 11.12.15 ADC寄存器地址映像 12 数字/模拟转换(DAC) 12.1 DAC简介 STM32F10xxx参考手册 155 155 156 157 157 157 157 158 158 158 159 159 160 161 161 161 162 163 163 164 165 165 166 166 167 167 167 168 168 169 170 170 171 173 175 175 176 176 176 177 177 178 178 179 179 180 182 182 11/754 参照2009年12月 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通道1的12位右对齐数据保持寄存器(DAC_DHR12R1) 194 12.5.4 DAC通道1的12位左对齐数据保持寄存器(DAC_DHR12L1) 194 12.5.5 DAC通道1的8位右对齐数据保持寄存器(DAC_DHR8R1) 194 12.5.6 DAC通道2的12位右对齐数据保持寄存器(DAC_DHR12R2) 195 12.5.7 DAC通道2的12位左对齐数据保持寄存器(DAC_DHR12L2) 195 12.5.8 DAC通道2的8位右对齐数据保持寄存器(DAC_DHR8R2) 195 12.5.9 双DAC的12位右对齐数据保持寄存器(DAC_DHR12RD) 196 12.5.10 双DAC的12位左对齐数据保持寄存器(DAC_DHR12LD) 196 12.5.11 双DAC的8位右对齐数据保持寄存器(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 TIM1和TIM8简介 199 13.2 TIM1和TIM8主要特性 199 13.3 TIM1和TIM8功能描述 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 参照2009年12月 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 TIM1和TIM8寄存器描述 233 13.4.1 TIM1和TIM8控制寄存器1(TIMx_CR1) 233 13.4.2 TIM1和TIM8控制寄存器2(TIMx_CR2) 234 13.4.3 TIM1和TIM8从模式控制寄存器(TIMx_SMCR) 235 13.4.4 TIM1和TIM8 DMA/中断使能寄存器(TIMx_DIER) 237 13.4.5 TIM1和TIM8状态寄存器(TIMx_SR) 238 13.4.6 TIM1和TIM8事件产生寄存器(TIMx_EGR) 239 13.4.7 TIM1和TIM8捕获/比较模式寄存器1(TIMx_CCMR1) 240 13.4.8 TIM1和TIM8捕获/比较模式寄存器2(TIMx_CCMR2) 242 13.4.9 TIM1和TIM8捕获/比较使能寄存器(TIMx_CCER) 244 13.4.10 TIM1和TIM8计数器(TIMx_CNT) 246 13.4.11 TIM1和TIM8预分频器(TIMx_PSC) 246 13.4.12 TIM1和TIM8自动重装载寄存器(TIMx_ARR) 246 13.4.13 TIM1和TIM8重复计数寄存器(TIMx_RCR) 246 13.4.14 TIM1和TIM8捕获/比较寄存器1(TIMx_CCR1) 247 13.4.15 TIM1和TIM8捕获/比较寄存器2(TIMx_CCR2) 247 13.4.16 TIM1和TIM8捕获/比较寄存器3(TIMx_CCR3) 247 13.4.17 TIM1和TIM8捕获/比较寄存器(TIMx_CCR4) 248 13.4.18 TIM1和TIM8刹车和死区寄存器(TIMx_BDTR) 248 13.4.19 TIM1和TIM8 DMA控制寄存器(TIMx_DCR) 249 13.4.20 TIM1和TIM8连续模式的DMA地址(TIMx_DMAR) 250 13.4.21 TIM1和TIM8寄存器图 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 目录 14.3.13 14.3.14 14.3.15 14.3.16 定时器输入异或功能 定时器和外部触发的同步 定时器同步 调试模式 14.4 TIMx寄存器描述 14.4.1 控制寄存器1(TIMx_CR1) 14.4.2 控制寄存器2(TIMx_CR2) 14.4.3 从模式控制寄存器(TIMx_SMCR) 14.4.4 DMA/中断使能寄存器(TIMx_DIER) 14.4.5 状态寄存器(TIMx_SR) 14.4.6 事件产生寄存器(TIMx_EGR) 14.4.7 捕获/比较模式寄存器1(TIMx_CCMR1) 14.4.8 捕获/比较模式寄存器2(TIMx_CCMR2) 14.4.9 捕获/比较使能寄存器(TIMx_CCER) 14.4.10 计数器(TIMx_CNT) 14.4.11 预分频器(TIMx_PSC) 14.4.12 自动重装载寄存器(TIMx_ARR) 14.4.13 捕获/比较寄存器1(TIMx_CCR1) 14.4.14 捕获/比较寄存器2(TIMx_CCR2) 14.4.15 捕获/比较寄存器3(TIMx_CCR3) 14.4.16 捕获/比较寄存器4(TIMx_CCR4) 14.4.17 DMA控制寄存器(TIMx_DCR) 14.4.18 连续模式的DMA地址(TIMx_DMAR) 14.4.19 TIMx寄存器图 15 基本定时器(TIM6 和TIM7) 15.1 TIM6和TIM7简介 15.2 TIM6和TIM7的主要特性 15.3 TIM6和TIM7的功能 15.3.1 15.3.2 15.3.3 15.3.4 时基单元 计数模式 时钟源 调试模式 15.4 TIM6和TIM7寄存器 15.4.1 TIM6和TIM7控制寄存器1(TIMx_CR1) 15.4.2 TIM6和TIM7控制寄存器2(TIMx_CR2) 15.4.3 TIM6和TIM7 DMA/中断使能寄存器(TIMx_DIER) 15.4.4 TIM6和TIM7状态寄存器(TIMx_SR) 15.4.5 TIM6和TIM7事件产生寄存器(TIMx_EGR) 15.4.6 TIM6和TIM7计数器(TIMx_CNT) 15.4.7 TIM6和TIM7预分频器(TIMx_PSC) 15.4.8 TIM6和TIM7自动重装载寄存器(TIMx_ARR) 15.4.9 TIM6和TIM7寄存器图 16 实时时钟(RTC) 16.1 RTC简介 16.2 主要特性 16.3 功能描述 16.3.1 16.3.2 16.3.3 概述 复位过程 读RTC寄存器 STM32F10xxx参考手册 275 275 277 281 282 282 283 284 285 286 287 288 290 292 293 293 293 293 294 294 294 295 295 296 298 298 298 299 299 300 302 303 303 303 304 304 305 305 305 306 306 307 308 308 308 308 308 309 309 14/754 参照2009年12月 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 NOR和PSRAM地址映像 327 19.4.2 NAND和PC卡地址映像 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 参照2009年12月 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闪存、ATA和PC卡时序图 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 SD的I/O模式 385 20.4.14 命令与响应 385 20.5 响应格式 388 20.5.1 R1(普通响应命令) 388 20.5.2 R1b 388 20.5.3 R2(CID、CSD寄存器) 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_CK的SDIO读等待操作 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 参照2009年12月 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 目录 22.5 测试模式 22.5.1 22.5.2 22.5.3 静默模式 环回模式 环回静默模式 22.6 STM32F10xxx处于调试模式时 22.7 bxCAN功能描述 22.7.1 22.7.2 22.7.3 22.7.4 22.7.5 22.7.6 22.7.7 发送处理 时间触发通信模式 接收管理 标识符过滤 报文存储 出错管理 位时间特性 22.8 bxCAN中断 22.9 CAN 寄存器描述 22.9.1 寄存器访问保护 22.9.2 CAN控制和状态寄存器 22.9.3 CAN邮箱寄存器 22.9.4 CAN过滤器寄存器 22.9.5 bxCAN寄存器列表 23 串行外设接口(SPI) 23.1 SPI简介 23.2 SPI和I2S主要特征 23.2.1 23.2.2 SPI特征 I2S功能 23.3 SPI功能描述 23.3.1 23.3.2 23.3.3 23.3.4 23.3.5 23.3.6 23.3.7 23.3.8 23.3.9 23.3.10 23.3.11 概述 配置SPI为从模式 配置SPI为主模式 配置SPI为单工通信 数据发送与接收过程 CRC计算 状态标志 关闭SPI 利用DMA的SPI通信 错误标志 SPI中断 23.4 I2S功能描述 23.4.1 23.4.2 23.4.3 23.4.4 23.4.5 23.4.6 23.4.7 23.4.8 23.4.9 I2S功能描述 支持的音频协议 时钟发生器 I2S主模式 I2S从模式 状态标志位 错误标志位 I2S中断 DMA功能 23.5 SPI和I2S寄存器描述 STM32F10xxx参考手册 427 427 427 428 428 428 428 430 430 431 434 435 436 438 439 439 439 447 451 454 457 457 457 457 458 459 459 462 462 463 463 468 469 470 470 472 472 473 473 474 479 482 483 484 485 485 485 486 18/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 目录 23.5.1 SPI控制寄存器1(SPI_CR1)(I2S模式下不使用) 23.5.2 SPI控制寄存器2(SPI_CR2) 23.5.3 SPI 状态寄存器(SPI_SR) 23.5.4 SPI 数据寄存器(SPI_DR) 23.5.5 SPI CRC多项式寄存器(SPI_CRCPR)(I2S模式下不使用) 23.5.6 SPI Rx CRC寄存器(SPI_RXCRCR)(I2S模式下不使用) 23.5.7 SPI Tx CRC寄存器(SPI_TXCRCR) 23.5.8 SPI_I2S配置寄存器(SPI_I2S_CFGR) 23.5.9 SPI_I2S预分频寄存器(SPI_I2SPR) 23.5.10 SPI 寄存器地址映象 24 I2C接口 24.1 I2C简介 24.2 I2C主要特点 24.3 I2C功能描述 24.3.1 24.3.2 24.3.3 24.3.4 24.3.5 24.3.6 24.3.7 24.3.8 模式选择 I2C从模式 I2C主模式 错误条件 SDA/SCL线控制 SMBus DMA请求 包错误校验(PEC) 24.4 I2C中断请求 24.5 I2C调试模式 24.6 I2C寄存器描述 24.6.1 控制寄存器1(I2C_CR1) 24.6.2 控制寄存器2(I2C_CR2) 24.6.3 自身地址寄存器1(I2C_OAR1) 24.6.4 自身地址寄存器2(I2C_OAR2) 24.6.5 数据寄存器(I2C_DR) 24.6.6 状态寄存器1(I2C_SR1) 24.6.7 状态寄存器2 (I2C_SR2) 24.6.8 时钟控制寄存器(I2C_CCR) 24.6.9 TRISE寄存器(I2C_TRISE) 24.6.10 I2C寄存器地址映象 25 通用同步异步收发器(USART) 25.1 USART介绍 25.2 USART主要特性 25.3 USART功能概述 25.3.1 25.3.2 25.3.3 25.3.4 25.3.5 25.3.6 25.3.7 25.3.8 25.3.9 25.3.10 USART 特性描述 发送器 接收器 分数波特率的产生 USART接收器容忍时钟的变化 多处理器通信 校验控制 LIN(局域互联网)模式 USART 同步模式 单线半双工通信 STM32F10xxx参考手册 486 487 488 489 489 490 490 490 491 492 493 493 493 494 494 495 497 499 500 501 502 503 504 505 505 505 507 508 509 509 510 512 513 514 515 516 516 516 517 518 519 521 524 525 526 527 528 530 532 19/754 参照2009年12月 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 目录 26.11.2 主机模式下的发送FIFO 26.12 USB系统性能 26.13 OTG_FS中断 26.14 OTG_FS控制和状态寄存器 26.14.1 26.14.2 26.14.3 26.14.4 26.14.5 26.14.6 CSR存储器映像 OTG_FS全局寄存器 主机模式下的寄存器 设备模式下的寄存器 OTG_FS电源和时钟门控寄存器(OTG_FS_PCGCCTL) OTG_FS寄存器映像 26.15 OTG_FS编程规则 26.15.1 控制器初始化 26.15.2 主机模式下的初始化 26.15.3 设备模式下的初始化 26.15.4 主机模式下的编程规则 26.15.5 设备模式下的编程规则 26.15.6 操作流程 26.15.7 最差情况下的响应时间 26.15.8 OTG编程规则 27 以太网(ETH):具有DMA控制器的介质访问控制(MAC) 27.1 以太网模块介绍 27.2 以太网模块主要功能 27.2.1 27.2.2 27.2.3 MAC控制器功能 DMA功能 PTP功能 27.3 以太网模块引脚和内部信号 27.4 以太网模块功能描述:SMI、MII和RMII 27.4.1 27.4.2 27.4.3 27.4.4 站点管理接口(SMI) 独立于介质的接口:MII 精简的独立于介质的接口:RMII MII/RMII的选择 27.5 以太网模块功能描述:MAC 802.3 27.5.1 27.5.2 27.5.3 27.5.4 27.5.5 27.5.6 27.5.7 27.5.8 27.5.9 MAC 802.3帧格式 MAC帧的传输 MAC帧的接收 MAC中断 MAC过滤 MAC自循环模式 MAC管理计数器:MMC 电源管理:PMT 精确时间协议(IEEE1588 PTP) 27.6 以太网功能描述:DMA控制器操作 27.6.1 27.6.2 27.6.3 27.6.4 27.6.5 27.6.6 使用DMA发送的初始化步骤 主机总线突发访问 主机数据缓存对齐 缓冲区大小计算 DMA仲裁器 DMA错误响应 STM32F10xxx参考手册 564 565 566 566 567 570 585 593 608 610 617 617 617 617 618 632 633 646 648 652 652 652 652 653 654 654 655 655 657 659 660 660 661 663 669 673 673 675 675 676 678 682 683 683 684 684 684 684 21/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 目录 27.6.7 27.6.8 27.6.9 发送DMA设置 接收DMA设置 DMA中断 27.7 以太网中断 27.8 以太网寄存器描述 27.8.1 MAC寄存器描述 27.8.2 MMC寄存器描述 27.8.3 IEEE 1588时间戳寄存器 27.8.4 DMA寄存器描述 27.8.5 以太网寄存器映像 28 器件电子签名 28.1 存储器容量寄存器 28.1.1 闪存容量寄存器 28.2 产品唯一身份标识寄存器(96位) 29 调试支持(DBG) 29.1 概况 29.2 ARM参考文献 29.3 SWJ调试端口(serial wire and JTAG) 29.3.1 JTAG-DP和SW-DP切换的机制 29.4 引脚分布和调试端口脚 29.4.1 29.4.2 29.4.3 29.4.4 SWJ调试端口脚 灵活的SWJ-DP脚分配 JTAG脚上的内部上拉和下拉 利用串行接口并释放不用的调试脚作为普通I/O口 29.5 STM32F10xxx JTAG TAP 连接 29.6 ID 代码和锁定机制 29.6.1 29.6.2 29.6.3 29.6.4 微控制器设备ID编码 边界扫描TAP Cortex-M3 TAP Cortex-M3 JEDEC-106 ID代码 29.7 JTAG调试端口 29.8 SW调试端口 29.8.1 29.8.2 29.8.3 29.8.4 29.8.5 29.8.6 SW协议介绍 SW协议序列 SW-DP状态机(Reset, idle states, ID code) DP和AP读/写访问 SW-DP寄存器 SW-AP寄存器 29.9 对于JTAG-DP或SWDP都有效的AHB-AP (AHB 访问端口) 29.10 内核调试 29.11 调试器主机在系统复位下的连接能力 29.12 FPB (Flash patch breakpoint) 29.13 DWT(数据观察点触发data watchpoint trigger) 29.14 ITM (指令跟踪微单元 instrumentation trace macrocell) 29.14.1 概述 29.14.2 时间戳包,同步和溢出包 STM32F10xxx参考手册 684 694 700 701 702 702 713 716 719 729 732 732 732 732 734 734 735 735 736 736 736 736 737 737 738 738 738 739 740 740 740 741 741 741 742 742 742 743 743 744 744 744 745 745 745 745 22/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 目录 29.15 ETM模块(嵌入式跟踪微单元Embedded Trace Macrocell) 29.15.1 29.15.2 29.15.3 29.15.4 概述 信号协议和包类型 主要的ETM寄存器 配置实例 29.16 MCU调试模块(MCUDBG) 29.16.1 29.16.2 29.16.3 低功耗模式的调试支持 支持定时器、看门狗、bxCAN和I2C的调试 调试MCU配置寄存器 29.17 TPIU (跟踪端口接口单元 Trace Port Interface Unit) 29.17.1 导言 29.17.2 跟踪引脚分配 29.17.3 TPUI格式器 29.17.4 TPUI帧异步包 29.17.5 同步帧包的发送 29.17.6 同步模式 29.17.7 异步模式 29.17.8 TRACECLKIN在STM32F10xxx内部的连接 29.17.9 TPIU寄存器 29.17.10 配置的例子 29.18 DBG寄存器地址映象 STM32F10xxx参考手册 746 746 746 747 747 747 747 747 748 750 750 750 752 752 752 752 753 753 753 754 754 23/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 存储器和总线架构 STM32F10xxx参考手册 1 1.1 1.2 1.3 文中的缩写 寄存器描述表中使用的缩写列表 在对寄存器的描述中使用了下列缩写: read / write (rw) 软件能读写此位。 read-only (r) 软件只能读此位。 write-only (w) 软件只能写此位,读此位将返回复位值。 read/clear (rc_w1) read / clear (rc_w0) read / clear by read (rc_r) read / set (rs) read-only write trigger (rt_w) toggle (t) Reserved(Res.) 软件可以读此位,也可以通过写’1’清除此位,写’0’对此位无影响。 软件可以读此位,也可以通过写’0’清除此位,写’1’对此位无影响。 软件可以读此位;读此位将自动地清除它为’0’,写’0’对此位无影响。 软件可以读也可以设置此位,写’0’对此位无影响。 软件可以读此位;写’0’或’1’触发一个事件但对此位数值没有影响。 软件只能通过写’1’来翻转此位,写’0’对此位无影响。 保留位,必须保持默认值不变 术语表 ● 小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xx、STM32F102xx和 STM32F103xx微控制器。 ● 中容量产品是指闪存存储器容量在64K至128K字节之间的STM32F101xx、STM32F102xx 和STM32F103xx微控制器。 ● 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx 微控制器。 ● 互联型产品是STM32F105xx和STM32F107xx微控制器。 可用的外设 有关STM32微控制器系列全部型号中,某外设存在与否及其数目,请查阅相应的小容量、中容 量或者大容量STM32F101xx和STM32F103xx以及小容量和中容量STM32F102xx的数据手册, 以及STM32F105xx/STM32F107xx数据手册。 24/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 存储器和总线架构 STM32F10xxx参考手册 2 存储器和总线构架 2.1 系统构架 在小容量、中容量和 大容量产品中,主系统由以下部分构成: ● 四个驱动单元: ─ Cortex™-M3内核DCode总线(D-bus),和系统总线(S-bus) ─ 通用DMA1和通用DMA2 ● 四个被动单元 ─ 内部SRAM ─ 内部闪存存储器 ─ FSMC ─ AHB到APB的桥(AHB2APBx),它连接所有的APB设备 这些都是通过一个多级的AHB总线构架相互连接的,如下图图1所示: 图1 系统结构 在互联型产品中,主系统由以下部分构成: ● 五个驱动单元: ─ Cortex™-M3内核DCode总线(D-bus),和系统总线(S-bus) ─ 通用DMA1和通用DMA2 ─ 以太网DMA ● 三个被动单元 ─ 内部SRAM ─ 内部闪存存储器 ─ AHB到APB的桥(AHB2APBx),它连接所有的APB设备 这些都是通过一个多级的AHB总线构架相互连接的,如图2所示: 25/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 存储器和总线架构 图2 互联型产品的系统结构 STM32F10xxx参考手册 ICode总线 该总线将Cortex™-M3内核的指令总线与闪存指令接口相连接。指令预取在此总线上完成。 DCode总线 该总线将Cortex™-M3内核的DCode总线与闪存存储器的数据接口相连接(常量加载和调试访 问)。 系统总线 此总线连接Cortex™-M3内核的系统总线(外设总线)到总线矩阵,总线矩阵协调着内核和DMA间 的访问。 DMA总线 此 总 线将 DMA 的AHB主 控 接口 与总 线 矩阵 相联 , 总线 矩阵 协 调着 CPU 的 DCode 和 DMA 到 SRAM、闪存和外设的访问。 总线矩阵 总线矩阵协调内核系统总线和DMA主控总线之间的访问仲裁,仲裁利用轮换算法。在互联型产 品 中 , 总 线 矩 阵 包 含 5 个 驱 动 部 件 (CPU 的 DCode 、 系 统 总 线 、 以 太 网 DMA 、 DMA1 总 线 和 DMA2总线)和3个从部件(闪存存储器接口(FLITF)、SRAM和AHB2APB桥)。在其它产品中总线 矩阵包含4个驱动部件(CPU的DCode、系统总线、DMA1总线和DMA2总线)和4个被动部件(闪存 存储器接口(FLITF)、SRAM、FSMC和AHB2APB桥)。 AHB外设通过总线矩阵与系统总线相连,允许DMA访问。 26/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 存储器和总线架构 STM32F10xxx参考手册 注意: AHB/APB桥(APB) 两个AHB/APB桥在AHB和2个APB总线间提供同步连接。APB1操作速度限于36MHz,APB2操 作于全速(最高72MHz)。 有关连接到每个桥的不同外设的地址映射请参考 表1。在每一次复位以后,所有除SRAM和 FLITF以外的外设都被关闭,在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外 设的时钟。 当对APB寄存器进行8位或者16位访问时,该访问会被自动转换成32位的访问:桥会自动将8位 或者32位的数据扩展以配合32位的向量。 2.2 存储器组织 程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。 数据字节以小端格式存放在存储器中。一个字里的最低地址字节被认为是该字的最低有效字 节,而最高地址字节是最高有效字节。 外设寄存器的映像请参考相关章节。 可访问的存储器空间被分成8个主要块,每个块为512MB。 其他所有没有分配给片上存储器和外设的存储器空间都是保留的地址空间,请参考相应器件的 数据手册中的存储器映像图。 27/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 存储器和总线架构 STM32F10xxx参考手册 2.3 存储器映像 请参考相应器件的数据手册中的存储器映像图。表1列出了所用STM32F10xxx中内置外设的起 始地址。 表1 寄存器组起始地址 起始地址 0x5000 0000 – 0x5003 FFFF 0x4003 0000 – 0x4FFF FFFF 0x4002 8000 – 0x4002 9FFF 0x4002 3400 - 0x4002 3FFF 0x4002 3000 - 0x4002 33FF 0x4002 2000 - 0x4002 23FF 0x4002 1400 - 0x4002 1FFF 0x4002 1000 - 0x4002 13FF 0x4002 0800 - 0x4002 0FFF 0x4002 0400 - 0x4002 07FF 0x4002 0000 - 0x4002 03FF 0x4001 8400 - 0x4001 7FFF 0x4001 8000 - 0x4001 83FF 0x4001 4000 - 0x4001 7FFF 0x4001 3C00 - 0x4001 3FFF 0x4001 3800 - 0x4001 3BFF 0x4001 3400 - 0x4001 37FF 0x4001 3000 - 0x4001 33FF 0x4001 2C00 - 0x4001 2FFF 0x4001 2800 - 0x4001 2BFF 0x4001 2400 - 0x4001 27FF 0x4001 2000 - 0x4001 23FF 0x4001 2000 - 0x4001 23FF 0x4001 1800 - 0x4001 1BFF 0x4001 1400 - 0x4001 17FF 0x4001 1000 - 0x4001 13FF 0X4001 0C00 - 0x4001 0FFF 0x4001 0800 - 0x4001 0BFF 0x4001 0400 - 0x4001 07FF 0x4001 0000 - 0x4001 03FF 0x4000 7800 - 0x4000FFFF 0x4000 7400 - 0x4000 77FF 0x4000 7000 - 0x4000 73FF 0x4000 6C00 - 0x4000 6FFF 0x4000 6800 - 0x4000 6BFF 0x4000 6400 - 0x4000 67FF 0x4000 6000(1) - 0x4000 63FF 外设 USB OTG 全速 保留 以太网 保留 CRC 闪存存储器接口 保留 复位和时钟控制(RCC) 保留 DMA2 DMA1 保留 SDIO 保留 ADC3 USART1 TIM8定时器 SPI1 TIM1定时器 ADC2 ADC1 GPIO端口G GPIO端口F GPIO端口E GPIO端口D GPIO端口C GPIO端口B GPIO端口A EXTI AFIO 保留 DAC 电源控制(PWR) 后备寄存器(BKP) bxCAN2 bxCAN1 USB/CAN共享的512字节SRAM 总线 AHB 寄存器映像 参见26.14.6节 参见27.8.5节 参见3.4.4节 参见6.3.11节 AHB 参见10.4.7节 参见10.4.7节 参见20.9.16节 APB2 APB1 参见11.12.15节 参见25.6.8节 参见13.4.21节 参见23.5节 参见13.4.21节 参见11.12.15节 参见11.12.15节 参见8.5节 参见8.5节 参见8.5节 参见8.5节 参见8.5节 参见8.5节 参见8.5节 参见9.3.7节 参见8.5节 参见12.5.14节 参见4.4.3节 参见5.4.5节 参见22.9.5节 参见22.9.5节 28/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 存储器和总线架构 STM32F10xxx参考手册 0x4000 5C00 - 0x4000 5FFF 0x4000 5800 - 0x4000 5BFF 0x4000 5400 - 0x4000 57FF 0x4000 5000 - 0x4000 53FF 0x4000 4C00 - 0x4000 4FFF 0x4000 4800 - 0x4000 4BFF 0x4000 4400 - 0x4000 47FF USB全速设备寄存器 I2C2 I2C1 UART5 UART4 USART3 USART2 参见21.5.4节 参见24.6.10节 参见24.6.10节 参见25.6.8节 参见25.6.8节 参见25.6.8节 参见25.6.8节 0x4000 4000 - 0x4000 3FFF 保留 0x4000 3C00 - 0x4000 3FFF 0x4000 3800 - 0x4000 3BFF 0x4000 3400 - 0x4000 37FF SPI3/I2S3 SPI2/I2S3 保留 参见23.5节 参见23.5节 0x4000 3000 - 0x4000 33FF 0x4000 2C00 - 0x4000 2FFF 0x4000 2800 - 0x4000 2BFF 0x4000 1800 - 0x4000 27FF 独立看门狗(IWDG) 窗口看门狗(WWDG) RTC 保留 参见17.4.5节 参见18.6.4节 参见16.4.7节 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执行读-改-写操作有着相 同的效果。 29/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 存储器和总线架构 STM32F10xxx参考手册 读0x22006008地址返回SRAM中地址0x20000300字节的位2的值(0x01 或 0x00)。 请参考《Cortex™-M3技术参考手册》以了解更多有关位段的信息。 2.3.3 嵌入式闪存 高性能的闪存模块有以下的主要特性: ● 高达512K字节闪存存储器结构:闪存存储器有主存储块和信息块组成: ─ 主存储块容量: 小容量产品主存储块最大为4K×64位,每个存储块划分为32个1K字节的页(见表2)。 中容量产品主存储块最大为16K×64位,每个存储块划分为128个1K字节的页(见表3)。 大容量产品主存储块最大为64K×64位,每个存储块划分为256个2K字节的页(见表4)。 互联型产品主存储块最大为32K×64位,每个存储块划分为128个2K字节的页(见表5)。 ─ 信息块容量: 互联型产品有2360×64位(见表5)。 其它产品有258×64位(见表2、表3、表4)。 闪存存储器接口的特性为: ● 带预取缓冲器的读接口(每字为2×64位) ● 选择字节加载器 ● 闪存编程/擦除操作 ● 访问/写保护 表2 闪存模块的组织(小容量产品) 模块 名称 页0 页1 页2 主存储块 页3 页4 … … 页31 信息块 系统存储器 选择字节 FLASH_ACR FALSH_KEYR FLASH_OPTKEYR 闪存存储器 接口寄存器 FLASH_SR FLASH_CR FLASH_AR 保留 FLASH_OBR FLASH_WRPR 地址 0x0800 0000 - 0x0800 03FF 0x0800 0400 - 0x0800 07FF 0x0800 0800 - 0x0800 0BFF 0x0800 0C00 - 0x0800 0FFF 0x0800 1000 - 0x0800 13FF … … 0x0800 7C00 - 0x0800 7FFF 0x1FFF F000 - 0x1FFF F7FF 0x1FFF F800 - 0x1FFF F80F 0x4002 2000 - 0x4002 2003 0x4002 2004 - 0x4002 2007 0x4002 2008 - 0x4002 200B 0x4002 200C - 0x4002 200F 0x4002 2010 - 0x4002 2013 0x4002 2014 - 0x4002 2017 0x4002 2018 - 0x4002 201B 0x4002 201C - 0x4002 201F 0x4002 2020 - 0x4002 2023 大小(字节) 1K 1K 1K 1K 1K … … 1K 2K 16 4 4 4 4 4 4 4 4 4 30/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 存储器和总线架构 表3 闪存模块的组织(中容量产品) 模块 名称 页0 页1 页2 主存储块 页3 页4 … … 页127 信息块 系统存储器 选择字节 FLASH_ACR FALSH_KEYR FLASH_OPTKEYR 闪存存储器 接口寄存器 FLASH_SR FLASH_CR FLASH_AR 保留 FLASH_OBR FLASH_WRPR 表4 闪存模块的组织(大容量产品) 模块 名称 页0 页1 页2 主存储块 页3 … … 页255 信息块 系统存储器 选择字节 FLASH_ACR FALSH_KEYR FLASH_OPTKEYR 闪存存储器 接口寄存器 FLASH_SR FLASH_CR FLASH_AR 保留 FLASH_OBR FLASH_WRPR 地址 0x0800 0000 - 0x0800 03FF 0x0800 0400 - 0x0800 07FF 0x0800 0800 - 0x0800 0BFF 0x0800 0C00 - 0x0800 0FFF 0x0800 1000 - 0x0800 13FF … … 0x0801 FC00 - 0x0801 FFFF 0x1FFF F000 - 0x1FFF F7FF 0x1FFF F800 - 0x1FFF F80F 0x4002 2000 - 0x4002 2003 0x4002 2004 - 0x4002 2007 0x4002 2008 - 0x4002 200B 0x4002 200C - 0x4002 200F 0x4002 2010 - 0x4002 2013 0x4002 2014 - 0x4002 2017 0x4002 2018 - 0x4002 201B 0x4002 201C - 0x4002 201F 0x4002 2020 - 0x4002 2023 地址 0x0800 0000 - 0x0800 07FF 0x0800 0800 - 0x0800 0FFF 0x0800 1000 - 0x0800 17FF 0x0800 1800 - 0x0800 1FFF … … 0x0807 F800 - 0x0807 FFFF 0x1FFF F000 - 0x1FFF F7FF 0x1FFF F800 - 0x1FFF F80F 0x4002 2000 - 0x4002 2003 0x4002 2004 - 0x4002 2007 0x4002 2008 - 0x4002 200B 0x4002 200C - 0x4002 200F 0x4002 2010 - 0x4002 2013 0x4002 2014 - 0x4002 2017 0x4002 2018 - 0x4002 201B 0x4002 201C - 0x4002 201F 0x4002 2020 - 0x4002 2023 STM32F10xxx参考手册 大小(字节) 1K 1K 1K 1K 1K … … 1K 2K 16 4 4 4 4 4 4 4 4 4 大小(字节) 2K 2K 2K 2K … … 2K 2K 16 4 4 4 4 4 4 4 4 4 31/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 存储器和总线架构 STM32F10xxx参考手册 表5 闪存模块的组织(互联型产品) 注: 注: 模块 名称 地址 大小(字节) 页0 0x0800 0000 - 0x0800 07FF 2K 页1 0x0800 0800 - 0x0800 0FFF 2K 页2 主存储块 页3 0x0800 1000 - 0x0800 17FF 2K 0x0800 1800 - 0x0800 1FFF 2K … … … … … … 页127 0x0803 F800 - 0x0803 FFFF 2K 信息块 系统存储器 选择字节 0x1FFF B000 - 0x1FFF F7FF 18K 0x1FFF F800 - 0x1FFF F80F 16 FLASH_ACR 0x4002 2000 - 0x4002 2003 4 FALSH_KEYR 0x4002 2004 - 0x4002 2007 4 FLASH_OPTKEYR 0x4002 2008 - 0x4002 200B 4 闪存存储器 接口寄存器 FLASH_SR FLASH_CR FLASH_AR 0x4002 200C - 0x4002 200F 4 0x4002 2010 - 0x4002 2013 4 0x4002 2014 - 0x4002 2017 4 保留 0x4002 2018 - 0x4002 201B 4 FLASH_OBR 0x4002 201C - 0x4002 201F 4 FLASH_WRPR 0x4002 2020 - 0x4002 2023 4 有关闪存寄存器的详细信息,请参考《STM32F10xxx闪存编程手册》 闪存读取 闪存的指令和数据访问是通过AHB总线完成的。预取模块是用于通过ICode总线读取指令的。仲 裁是作用在闪存接口,并且DCode总线上的数据访问优先。 读访问可以有以下配置选项: ● 等待时间:可以随时更改的用于读取操作的等待状态的数量。 ● 预取缓冲区(2个64位):在每一次复位以后被自动打开,由于每个缓冲区的大小(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传输一起执行。 32/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 存储器和总线架构 STM32F10xxx参考手册 注: 编程和擦除闪存 闪存编程一次可以写入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开始(通过ICode和DCode总线访问), 而数据区(SRAM)始终从地址0x2000 0000开始(通过系统总线访问)。Cortex-M3的CPU始终从 ICode总线获取复位向量,即启动仅适合于从代码区开始(典型地从Flash启动)。STM32F10xxx 微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从 内置SRAM启动。 根据选定的启动模式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问: ● 从主闪存存储器启动:主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原 有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问,0x0000 0000或0x0800 0000。 ● 从系统存储器启动:系统存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的 地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为0x1FFF F000)访问它。 ● 从内置SRAM启动:只能在0x2000 0000开始的地址区访问SRAM。 当从内置SRAM启动,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,从 新映射向量表之SRAM中。 内嵌的自举程序 内嵌的自举程序存放在系统存储区,由ST在生产线上写入,用于通过可用的串行接口对闪存存 储器进行重新编程: ● 对于小容量、中容量和大容量的产品而言,可以通过USART1接口启用自举程序。进一步的 细节请查询AN2606。 ● 对于互联型产品而言,可以通过以下某个接口启用自举程序:USART1、USART2(重映像 的)、CAN2(重映像的)或USB OTG全速接口的设备模式(通过设备固件更新DFU协议)。 USART接口依靠内部8MHz振荡器(HSI)运行。CAN和USB OTG接口只能当外部有一个 8MHz、14.7456MHz或25MHz时钟(HSE)时运行。进一步的细节请查询AN2606。 33/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 CRC计算单元(CRC) STM32F10xxx参考手册 3 CRC计算单元(CRC) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。 3.1 CRC简介 循环冗余校验(CRC)计算单元是根据固定的生成多项式得到任一32位全字的CRC计算结果。 在其他的应用中, CRC技术主要应用于核实数据传输或者数据存储的正确性和完整性。标准 EN/IEC 60335-1即提供了一种核实闪存存储器完整性的方法。CRC计算单元可以在程序运行时 计算出软件的标识,之后与在连接时生成的参考标识比较,然后存放在指定的存储器空间。 3.2 CRC主要特性 ● 使用CRC-32(以太网)多项式:0x4C11DB7 ─ X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 + X8 + X7 + X4 + X2 + X +1 ● 一个32位数据寄存器用于输入 / 输出 ● CRC计算时间:4个AHB时钟周期(HCLK) ● 通用8位寄存器(可用于存放临时数据) 下图为CRC计算单元框图 图3 CRC 计算单元框图 3.3 CRC功能描述 CRC计算单元含有1个32位数据寄存器: ● 对该寄存器进行写操作时,作为输入寄存器,可以输入要进行CRC计算的新数据。 ● 对该寄存器进行读操作时,返回上一次CRC计算的结果。 每一次写入数据寄存器,其计算结果是前一次CRC计算结果和新计算结果的组合(对整个32位字 进行CRC计算,而不是逐字节地计算)。 34/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 CRC计算单元(CRC) STM32F10xxx参考手册 在CRC计算期间会暂停CPU的写操作,因此可以对寄存器CRC_DR进行背靠背写入或者连续地 写-读操作。 可以通过设置寄存器CRC_CR的RESET位来重置寄存器CRC_DR为0xFFFF 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 DR[31: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 DR[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31: 0 数据寄存器位 写入CRC计算器的新数据时,作为输入寄存器 读取时返回CRC计算的结果 3.4.2 独立数据寄存器(CRC_IDR) 地址偏移:0x04 复位值:0x0000 0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 IDR[7:0] rw rw rw rw rw rw rw rw 位31:8 保留。 位7:0 通用8位数据寄存器位 可用于临时存放1字节的数据。 寄存器CRC_CR的RESET位产生的CRC复位对本寄存器没有影响 译注:此寄存器不参与CRC计算,可以存放任何数据。 35/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 CRC计算单元(CRC) STM32F10xxx参考手册 3.4.3 控制寄存器(CRC_CR) 地址偏移:0x08 复位值: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 保留 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 0x00 复位值 CRC_IDR 0x04 复位值 CRC_CR 0x08 复位值 数据寄存器 0xFFFF FFFF 保留 独立的数据寄存器 0x00 保留 保留 RESET 0 0 36/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 电源控制(PWR) STM32F10xxx参考手册 4 电源控制(PWR) 4.1 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。 电源 STM32的工作电压(VDD)为2.0~3.6V。通过内置的电压调节器提供所需的1.8V电源。 当主电源VDD掉电后,通过VBAT脚为实时时钟(RTC)和备份寄存器提供电源。 图4 电源框图 注: VDDA和VSSA必须分别联到VDD和VSS。 4.1.1 独立的A/D转换器供电和参考电压 为了提高转换的精确度,ADC使用一个独立的电源供电,过滤和屏蔽来自印刷电路板上的毛刺 干扰。 ● ADC的电源引脚为VDDA ● 独立的电源地VSSA 如果有VREF-引脚(根据封装而定),它必须连接到VSSA。 37/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 电源控制(PWR) STM32F10xxx参考手册 100脚和144脚封装: 为了确保输入为低压时获得更好精度,用户可以连接一个独立的外部参考电压ADC到VREF+和 VREF-脚上。在VREF+的电压范围为2.4V~VDDA。 64脚或更少封装: 没有VREF+和VREF-引脚,他们在芯片内部与ADC的电源(VDDA)和地(VSSA)相联。 4.1.2 电池备份区域 使用电池或其他电源连接到VBAT脚上,当VDD断电时,可以保存备份寄存器的内容和维持RTC的 功能。 VBAT脚也为RTC、LSE振荡器和PC13至PC15供电,这保证当主要电源被切断时RTC能继续工 作。切换到VBAT供电由复位模块中的掉电复位功能控制。 如果应用中没有使用外部电池,VBAT必须连接到VDD引脚上。 注意: 在 VDD 上 升 阶 段 (tRSTTEMPO) 或 者 探 测 到 PVD 之 后 , VBAT 和 VDD 之 间 的 电 源 开 关 仍 会 保 持 连 接 在 VBAT。在VDD上升阶段,如果VDD在小于tRSTTEMPO的时间内达到稳定状态(关于tRSTTEMPO可参考数 据手册中的相关部分),且VDD > VBAT + 0.6V时,电流可能通过VDD和VBAT之间的内部二极管注 入到VBAT。 如果与VBAT连接的电源或者电池不能承受这样的注入电流,强烈建议在外部VBAT和电源之间连 接一个低压降二极管。 注: 如果在应用中没有外部电池,建议VBAT在外部通过一个100nF的陶瓷电容与VDD相连,更多细节 参阅AN2586。 当备份区域由VDD(内部模拟开关连到VDD)供电时,下述功能可用: ● PC14和PC15可以用于GPIO或LSE引脚 ● PC13可以作为通用I/O口、TAMPER引脚、RTC校准时钟、RTC闹钟或秒输出(参见第5 章:备份寄存器(BKP)) 因为模拟开关只能通过少量的电流(3mA),在输出模式下使用PC13至PC15的I/O口功能是有限 制的:速度必须限制在2MHz以下,最大负载为30pF,而且这些I/O口绝对不能当作电流源(如驱 动LED)。 当后备区域由VBAT供电时(VDD消失后模拟开关连到VBAT),可以使用下述功能: ● PC14和PC15只能用于LSE引脚 ● PC13可以作为TAMPER引脚、RTC闹钟或秒输出(参见第5.4.2节:RTC时钟校准寄存器 (BKP_RTCCR)) 4.1.3 电压调节器 复位后调节器总是使能的。根据应用方式它以3种不同的模式工作。 ● 运转模式:调节器以正常功耗模式提供1.8V电源(内核,内存和外设)。 ● 停止模式:调节器以低功耗模式提供1.8V电源,以保存寄存器和SRAM的内容。 ● 待机模式:调节器停止供电。除了备用电路和备份域外,寄存器和SRAM的内容全部丢失。 4.2 电源管理器 4.2.1 上电复位(POR)和掉电复位(PDR) STM32内部有一个完整的上电复位(POR)和掉电复位(PDR)电路,当供电电压达到2V时系统既 能正常工作。 38/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 电源控制(PWR) STM32F10xxx参考手册 当VDD/VDDA低于指定的限位电压VPOR/VPDR时,系统保持为复位状态,而无需外部复位电路。关 于上电复位和掉电复位的细节请参考数据手册的电气特性部分。 图5 上电复位和掉电复位的波形图 4.2.2 可编程电压监测器(PVD) 用户可以利用PVD对VDD电压与电源控制寄存器(PWR_CR)中的PLS[2:0]位进行比较来监控电 源,这几位选择监控电压的阀值。 通过设置PVDE位来使能PVD。 电源控制/状态寄存器(PWR_CSR)中的PVDO标志用来表明VDD是高于还是低于PVD的电压阀 值。该事件在内部连接到外部中断的第16线,如果该中断在外部中断寄存器中是使能的,该事 件就会产生中断。当VDD下降到PVD阀值以下和(或)当VDD上升到PVD阀值之上时,根据外部中 断第16线的上升/下降边沿触发设置,就会产生PVD中断。例如,这一特性可用于用于执行紧急 关闭任务。 图6 PVD的门限 39/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 电源控制(PWR) STM32F10xxx参考手册 4.3 低功耗模式 在系统或电源复位以后,微控制器处于运行状态。当CPU不需继续运行时,可以利用多种低功 耗模式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗、最快速启动时间 和可用的唤醒源等条件,选定一个最佳的低功耗模式。 STM32F10xxx有三种低功耗模式: ● 睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时 钟(SysTick)等仍在运行) ● 停止模式(所有的时钟都已停止) ● 待机模式(1.8V电源关闭) 此外,在运行模式下,可以通过以下方式中的一种降低功耗: ● 降低系统时钟 ● 关闭APB和AHB总线上未被使用的外设时钟。 表8 低功耗模式一览 模式 进入 唤醒 对1.8V区域 对VDD区域 时钟的影响 时钟的影响 电压调节器 睡眠 (SLEEP-NOW或 SLEEP-ON-EXIT) 停机 待机 WFI 任一中断 CPU 时 钟 关 , 对 其他时钟和ADC 无 开 WFE 唤醒事件 时钟无影响 PDDS和LPDS位 +SLEEPDEEP位 +WFI或WFE PDDS位 +SLEEPDEEP位 +WFI或WFE 任一外部中断(在外 部中断寄存器中设 置) WKUP引脚的上升 关闭所有 1.8V 区 域的时钟 HSI 和HSE 的振荡器关 闭 开启或处于低功耗 模式(依据电源控制 寄 存 器 (PWR_CR) 的设定) 沿、RTC闹钟事件、 NRST引脚上的外部 关 复位、IWDG复位 4.3.1 降低系统时钟 在 运 行 模 式 下 , 通 过 对 预 分 频 寄 存 器 进 行 编 程 , 可 以 降 低 任 意 一 个 系 统 时 钟(SYSCLK 、 HCLK、PCLK1、PCLK2)的速度。进入睡眠模式前,也可以利用预分频器来降低外设的时钟。 详见第6.3.2节:时钟配置寄存器(RCC_CFGR)。 4.3.2 外部时钟的控制 在运行模式下,任何时候都可以通过停止为外设和内存提供时钟(HCLK和PCLKx)来减少功耗。 为了在睡眠模式下更多地减少功耗,可在执行WFI或WFE指令前关闭所有外设的时钟。 通 过 设 置 AHB 外 设 时 钟 使 能 寄 存 器 (RCC_AHBENR) 、 APB2 外 设 时 钟 使 能 寄 存 器 (RCC_APB2ENR)和APB1外设时钟使能寄存器(RCC_APB1ENR)来开关各个外设模块的时钟。 4.3.3 睡眠模式 进入睡眠模式 通过执行WFI或WFE指令进入睡眠状态。根据Cortex™-M3系统控制寄存器中的SLEEPONEXIT 位的值,有两种选项可用于选择睡眠模式进入机制: ● SLEEP-NOW:如果SLEEPONEXIT位被清除,当WRI或WFE被执行时,微控制器立即进 入睡眠模式。 ● SLEEP-ON-EXIT:如果SLEEPONEXIT位被置位,系统从最低优先级的中断处理程序中退 出时,微控制器就立即进入睡眠模式。 也就是说中断程序全部处理完了 在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。 40/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 电源控制(PWR) STM32F10xxx参考手册 关于如何进入睡眠模式,更多的细节参考表9和表10。 退出睡眠模式 如果执行WFI指令进入睡眠模式,任意一个被嵌套向量中断控制器响应的外设中断都能将系统从 睡眠模式唤醒。 如果执行WFE指令进入睡眠模式,则一旦发生唤醒事件时,微处理器都将从睡眠模式退出。唤 醒事件可以通过下述方式产生: ● 在外设控制寄存器中使能一个中断,而不是在NVIC(嵌套向量中断控制器)中使能,并且在 Cortex-M3系统控制寄存器中使能SEVONPEND位。当MCU从WFE中唤醒后,外设的中断 挂起位和外设的NVIC中断通道挂起位(在NVIC中断清除挂起寄存器中)必须被清除。 ● 配置一个外部或内部的EXIT线为事件模式。当MCU从WFE中唤醒后,因为与事件线对应的 挂起位未被设置,不必清除外设的中断挂起位或外设的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供电区域的的所有时钟都被停止,PLL、HSI和 HSE RC振荡器的功能被禁止,SRAM和寄存器内容被保留下来。 在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态。 进入停止模式 关于如何进入停止模式,详见表11。 在停止模式下,通过设置电源控制寄存器(PWR_CR)的LPDS位使内部调节器进入低功耗模式, 能够降低更多的功耗。 如果正在进行闪存编程,直到对内存访问完成,系统才进入停止模式。 如果正在进行对APB的访问,直到对APB访问完成,系统才进入停止模式。 可以通过对独立的控制位进行编程,可选择以下功能: 41/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 电源控制(PWR) STM32F10xxx参考手册 ● 独立看门狗(IWDG):可通过写入看门狗的键寄存器或硬件选择来启动IWDG。一旦启动了 独立看门狗,除了系统复位,它不能再被停止。详见17.3节。 ● 实时时钟(RTC):通过备份域控制寄存器 (RCC_BDCR)的RTCEN位来设置。 ● 内部RC振荡器(LSI RC):通过控制/状态寄存器 (RCC_CSR)的LSION位来设置。 ● 外部32.768kHz振荡器(LSE):通过备份域控制寄存器 (RCC_BDCR)的LSEON位设置。 在停止模式下,如果在进入该模式前ADC和DAC没有被关闭,那么这些外设仍然消耗电流。通 过设置寄存器ADC_CR2的ADON位和寄存器DAC_CR的ENx位为0可关闭这2个外设。 退出停止模式 关于如何退出停止模式,详见下表。 当一个中断或唤醒事件导致退出停止模式时,HSI RC振荡器被选为系统时钟。 当电压调节器处于低功耗模式下,当系统从停止模式退出时,将会有一段额外的启动延时。如 果在停止模式期间保持内部调节器开启,则退出启动时间会缩短,但相应的功耗会增加。 表11 停止模式 停止模式 说明 进入 在以下条件下执行WFI(等待中断)或WFE(等待事件)指令: – 设置Cortex-M3系统控制寄存器中的SLEEPDEEP位 – 清除电源控制寄存器(PWR_CR)中的PDDS位 – 通过设置PWR_CR中LPDS位选择电压调节器的模式 注:为了进入停止模式,所有的外部中断的请求位(挂起寄存器(EXTI_PR))和RTC的闹钟标志 都必须被清除,否则停止模式的进入流程将会被跳过,程序继续运行。因为唤醒是由中断执行的 退出 如果执行WFI进入停止模式: 设置任一外部中断线为中断模式(在NVIC中必须使能相应的外部中断向量)。参见中断向量 表(表54)。 如果执行WFE进入停止模式: 设置任一外部中断线为事件模式。参见唤醒事件管理(第9.2.3节)。 唤醒延时 HSI RC唤醒时间 + 电压调节器从低功耗唤醒的时间。 4.3.5 待机模式 待机模式可实现系统的最低功耗。该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个 1.8V供电区域被断电。PLL、HSI和HSE振荡器也被断电。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节)将会指示内核由待机状态退出。 关于如何退出待机模式,详见下表。 42/754 参照2009年12月 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节:低功耗模式的调试支持。 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。 43/754 参照2009年12月 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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 DBP PLS[2:0] PVDE CSBF CWUF PDDS LPDS rw rw rw rw rw rc_w1 rc_w1 rw rw 位 31:9 位8 位 7:5 位4 位3 位2 位1 位0 保留。始终读为0。 DBP:取消后备区域的写保护 在复位后,RTC和后备寄存器处于被保护状态以防意外写入。设置这位允许写入这些寄存器。 0:禁止写入RTC和后备寄存器 1:允许写入RTC和后备寄存器 注:如果RTC的时钟是HSE/128,该位必须保持为’1’。 PLS[2:0]:PVD电平选择 这些位用于选择电源电压监测器的电压阀值 000:2.2V 100:2.6V 001:2.3V 101:2.7V 010:2.4V 110:2.8V 011:2.5V 111:2.9V 注:详细说明参见数据手册中的电气特性部分。 PVDE:电源电压监测器(PVD)使能 0:禁止PVD 1:开启PVD CSBF:清除待机位 始终读出为0 0:无功效 1:清除SBF待机位(写) CWUF:清除唤醒位 始终读出为0 0:无功效 1:2个系统时钟周期后清除WUF唤醒位(写) PDDS:掉电深睡眠 与LPDS位协同操作 0:当CPU进入深睡眠时进入停机模式,调压器的状态由LPDS位控制。 1:CPU进入深睡眠时进入待机模式。 LPDS:深睡眠下的低功耗 PDDS=0时,与PDDS位协同操作 0:在停机模式下电压调压器开启 1:在停机模式下电压调压器处于低功耗模式 44/754 参照2009年12月 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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 EWUP 保留 PVDO SBF WUF rw r r r 位31:9 位8 位 7:3 位2 位1 位0 保留。始终读为0。 EWUP:使能WKUP引脚 0:WKUP引脚为通用I/O。WKUP引脚上的事件不能将CPU从待机模式唤醒 1:WKUP引脚用于将CPU从待机模式唤醒,WKUP引脚被强置为输入下拉的配置(WKUP引脚 上的上升沿将系统从待机模式唤醒) 注:在系统复位时清除这一位。 保留。始终读为0。 PVDO:PVD输出 当PVD被PVDE位使能后该位才有效 0:VDD/VDDA高于由PLS[2:0]选定的PVD阀值 1:VDD/VDDA低于由PLS[2:0]选定的PVD阀值 注:在待机模式下PVD被停止。因此,待机模式后或复位后,直到设置PVDE位之前,该位为 0。 SBF:待机标志 该位由硬件设置,并只能由POR/PDR(上电/掉电复位)或设置电源控制寄存器(PWR_CR)的 CSBF位清除。 0:系统不在待机模式 1:系统进入待机模式 WUF:唤醒标志 该位由硬件设置,并只能由POR/PDR(上电/掉电复位)或设置电源控制寄存器(PWR_CR)的 CWUF位清除。 0:没有发生唤醒事件 1:在WKUP引脚上发生唤醒事件或出现RTC闹钟事件。 注:当WKUP引脚已经是高电平时,在(通过设置EWUP位)使能WKUP引脚时,会检测到一个额外的 事件。 45/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 DBP 8 7 6 5 PVDE 4 CSBF 3 CWUF 2 PDDS 1 LPDS 0 电源控制(PWR) 4.4.3 PWR寄存器地址映像 以下表格列出所有PWR寄存器。 表13 PWR寄存器地址映像和复位值 偏移 寄存器 000h PWR_CR 保留 复位值 004h PWR_CSR 保留 复位值 关于寄存器的起始地址,参见表1。 STM32F10xxx参考手册 PLS [2:0] 000000000 保留 0 000 EWUP PVDO SBF WUF 46/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 备份寄存器(BKP) STM32F10xxx参考手册 5 备份寄存器(BKP) 5.1 5.2 5.3 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。 BKP简介 备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域 里,当VDD电源被切断,他们仍然由VBAT维持供电。当系统在待机模式下被唤醒,或系统复位或 电源复位时,他们也不会被复位。 此外,BKP控制寄存器用来管理侵入检测和RTC校准功能。 复位后,对备份寄存器和RTC的访问被禁止,并且备份域被保护以防止可能存在的意外的写操 作。执行以下操作可以使能对备份寄存器和RTC的访问。 ● 通过设置寄存器RCC_APB1ENR的PWREN和BKPEN位来打开电源和后备接口的时钟 ● 电源控制寄存器(PWR_CR)的DBP位来使能对后备寄存器和RTC的访问。 BKP特性 ● 20字节数据后备寄存器(中容量和小容量产品),或84字节数据后备寄存器(大容量和互联型 产品) ● 用来管理防侵入检测并具有中断功能的状态/控制寄存器 ● 用来存储RTC校验值的校验寄存器。 ● 在PC13引脚(当该引脚不用于侵入检测时)上输出RTC校准时钟,RTC闹钟脉冲或者秒脉冲 BKP功能描述 5.3.1 侵入检测 注: 当TAMPER引脚上的信号从0变成1或者从1变成0(取决于备份控制寄存器BKP_CR的TPAL位), 会产生一个侵入检测事件。侵入检测事件将所有数据备份寄存器内容清除。 然而为了避免丢失侵入事件,侵入检测信号是边沿检测的信号与侵入检测允许位的逻辑与,从 而在侵入检测引脚被允许前发生的侵入事件也可以被检测到。 ● 当TPAL=0时:如果在启动侵入检测TAMPER引脚前(通过设置TPE位)该引脚已经为高电 平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出 现上升沿)。 ● 当TPAL=1时:如果在启动侵入检测引脚TAMPER前(通过设置TPE位)该引脚已经为低电 平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出 现下降沿)。 设置BKP_CSR寄存器的TPIE位为’1’,当检测到侵入事件时就会产生一个中断。 在一个侵入事件被检测到并被清除后,侵入检测引脚TAMPER应该被禁止。然后,在再次写入 备份数据寄存器前重新用TPE位启动侵入检测功能。这样,可以阻止软件在侵入检测引脚上仍 然有侵入事件时对备份数据寄存器进行写操作。这相当于对侵入引脚TAMPER进行电平检测。 当VDD电源断开时,侵入检测功能仍然有效。为了避免不必要的复位数据备份寄存器,TAMPER 引脚应该在片外连接到正确的电平。 47/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 备份寄存器(BKP) STM32F10xxx参考手册 5.3.2 RTC校准 为方便测量,RTC时钟可以经64分频输出到侵入检测引脚TAMPER上。通过设置RTC校验寄存 器(BKP_RTCCR)的CCO位来开启这一功能。 通过配置CAL[6:0]位,此时钟可以最多减慢121ppm。 关于RTC校准和如何提高精度,请看AN2604“STM32F101xx和STM32F103xx的RTC校准” 5.4 BKP寄存器描述 关于在寄存器描述里面所用到的缩写,可参考1.1节。 可以用半字(16位)或字(32位)的方式操作这些外设寄存器。 5.4.1 备份数据寄存器x(BKP_DRx) (x = 1 … 10) 地址偏移:0x04 到 0x28,0x40到0xBC 复位值:0x0000 0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 D[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 D[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 CAL[6:0] 位15:8 位9 rw rw rw rw rw rw rw rw rw rw 保留,始终读为0。 ASOS:闹钟或秒输出选择(Alarm or second output selection) 当设置了ASOE位,ASOS位可用于选择在TAMPER引脚上输出的是RTC秒脉冲还是闹钟脉冲 信号。 0:输出RTC闹钟脉冲 1:输出秒脉冲 注:该位只能被后备区的复位所清除 位8 ASOE:允许输出闹钟或秒脉冲(Alarm or second output enable) 根据ASOS位的设置,该位允许RTC闹钟或秒脉冲输出到TAMPER引脚上。 输出脉冲的宽度为一个RTC时钟的周期。设置了ASOE位时不能开启TAMPER的功能。 注:该位只能被后备区的复位所清除 位7 CCO:校准时钟输出(Calibration clock output) 0:无影响 1:此位置1可以在侵入检测引脚输出经64分频后的RTC时钟。当CCO位置1时,必须关闭侵入 检测功能以避免检测到无用的侵入信号。 注:当VDD供电断开时,该位被清除。 48/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 备份寄存器(BKP) STM32F10xxx参考手册 位6:0 CAL[6:0]:校准值(Calibration value) 校准值表示在每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 注: 5.4.4 保留 TPAL TPE rw rw 位15:2 保留,始终读为0。 位1 TPAL:侵入检测TAMPER引脚有效电平(TAMPER pin active level) 0:侵入检测TAMPER引脚上的高电平会清除所有数据备份寄存器(如果TPE位为1) 1:侵入检测TAMPER引脚上的低电平会清除所有数据备份寄存器(如果TPE位为1) 位0 TPE:启动侵入检测TAMPER引脚(TAMPER pin enable) 0:侵入检测TAMPER引脚作为通用IO口使用 1:开启侵入检测引脚作为侵入检测使用 同时设置TPAL和TPE位总是安全的。然而,同时清除两者会产生一个假的侵入事件。因此, 推荐只在TPE为0时才改变TPAL位的状态。 备份控制/状态寄存器(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 位9 保留,始终读为0。 TIF:侵入中断标志(Tamper interrupt flag) 当检测到有侵入事件且TPIE位为1时,此位由硬件置1。通过向CTI位写1来清除此标志位(同时 也清除了中断)。如果TPIE位被清除,则此位也会被清除。 0:无侵入中断 1:产生侵入中断 注意:仅当系统复位或由待机模式唤醒后才复位该位 位8 位7:3 位2 TEF:侵入事件标志(Tamper event flag) 当检测到侵入事件时此位由硬件置1。通过向CTE位写1可清除此标志位 0:无侵入事件 1:检测到侵入事件 注:侵入事件会复位所有的BKP_DRx寄存器。只要TEF为1,所有的BKP_DRx寄存器就一直保 持复位状态。当此位被置1时,若对BKP_DRx进行写操作,写入的值不会被保存。 保留,始终读为0。 TPIE:允许侵入TAMPER引脚中断(TAMPER pin interrupt enable) 0:禁止侵入检测中断 1:允许侵入检测中断(BKP_CR寄存器的TPE位也必须被置1) 注1:侵入中断无法将系统内核从低功耗模式唤醒。 注2:仅当系统复位或由待机模式唤醒后才复位该位。 49/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 备份寄存器(BKP) 位1 位0 CTI:清除侵入检测中断(Clear tamper interrupt) 此位只能写入,读出值为0。 0:无效 1:清除侵入检测中断和TIF侵入检测中断标志 CTE:清除侵入检测事件(Clear tamper event) 此位只能写入,读出值为0。 0:无效 1:清除TEF侵入检测事件标志(并复位侵入检测器)。 STM32F10xxx参考手册 50/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 0 备份寄存器(BKP) STM32F10xxx参考手册 5.4.5 BKP寄存器映像 BKP寄存器是16位的可寻址寄存器。 表14 BKP寄存器映像和复位值 偏移 寄存器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 000h 004h 008h 00Ch 010h 014h 018h 01Ch 020h 024h 028h 02Ch 030h 034h 038h 03Ch 040h BKP_DR1 复位值 BKP_DR2 复位值 BKP_DR3 复位值 BKP_DR4 复位值 BKP_DR5 复位值 BKP_DR6 复位值 BKP_DR7 复位值 BKP_DR8 复位值 BKP_DR9 复位值 BKP_DR10 复位值 BKP_RTCCR 复位值 RTC_CR 复位值 RTC_CSR 复位值 BKP_DR11 复位值 保留 保留 保留 保留 保留 保留 保留 保留 保留 保留 保留 保留 ASOS ASOE CCO D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 CAL[6:0] 0000000000 CTI TPAL 保留 00 TPIE TFE TIF 保留 保留 保留 00 000 保留 保留 D[15:0] 0000000000000000 CTE TPE 51/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 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) 偏移 044h 048h 04Ch 050h 054h 058h 05Ch 060h 064h 068h 06Ch 070h 074h 078h 07Ch 080h 084h 寄存器 BKP_DR12 复位值 BKP_DR13 复位值 BKP_DR14 复位值 BKP_DR15 复位值 BKP_DR16 复位值 BKP_DR17 复位值 BKP_DR18 复位值 BKP_DR19 复位值 BKP_DR20 复位值 BKP_DR21 复位值 BKP_DR22 复位值 BKP_DR23 复位值 BKP_DR24 复位值 BKP_DR25 复位值 BKP_DR26 复位值 BKP_DR27 复位值 BKP_DR28 复位值 STM32F10xxx参考手册 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 保留 D[15:0] 0000000000000000 52/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 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) 偏移 寄存器 088h 08Ch 090h 094h 098h 09Ch 0A0h 0A4h 0A8h 0ACh 0B0h 0B4h 0B8h 0BCh BKP_DR29 复位值 保留 BKP_DR30 复位值 保留 BKP_DR31 复位值 保留 BKP_DR32 复位值 保留 BKP_DR33 复位值 保留 BKP_DR34 复位值 保留 BKP_DR35 复位值 保留 BKP_DR36 复位值 保留 BKP_DR37 复位值 保留 BKP_DR38 复位值 保留 BKP_DR39 复位值 保留 BKP_DR40 复位值 保留 BKP_DR41 复位值 保留 BKP_DR42 复位值 保留 有关寄存器的起始地址,请参考表1。 STM32F10xxx参考手册 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 D[15:0] 0000000000000000 53/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 6 小容量、中容量和大容量产品的复位和时钟控制(RCC) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 本章内容适用于小容量、中容量和大容量产品,互联型产品的相关内容在下一章讨论。 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’将使能该复位。这时,即使执行了进入停机 模式的过程,系统将被复位而不是进入停机模式。 关于用户选择字节的进一步信息,请参考STM32F10xxx闪存编程手册。 6.1.2 电源复位 当以下事件中之一发生时,产生电源复位: 1. 上电/掉电复位(POR/PDR复位) 2. 从待机模式中返回 电源复位将复位除了备份区域外的所有寄存器。(见图4) 图中复位源将最终作用于RESET引脚,并在复位过程中保持低电平。复位入口矢量被固定在地 址0x0000_0004。更多细节,参阅表55:其它STM32F10xxx产品(小容量、中容量和大容量)的 向量表。 54/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 芯片内部的复位信号会在NRST引脚上输出,脉冲发生器保证每一个(外部或内部)复位源都能有 至少20μs的脉冲延时;当NRST引脚被拉低产生外部复位时,它将产生复位脉冲。 图7 复位电路 6.1.3 备份域复位 6.2 备份区域拥有两个专门的复位,它们只影响备份区域(见图4)。 当以下事件中之一发生时,产生备份区域复位。 1. 软件复位,备份区域复位可由设置备份域控制寄存器 (RCC_BDCR)(见6.3.9节)中的 BDRST位产生。 2. 在VDD和VBAT两者掉电的前提下,VDD或VBAT上电将引发备份区域复位。 时钟 三种不同的时钟源可被用来驱动系统时钟(SYSCLK): ● HSI振荡器时钟 ● HSE振荡器时钟 ● PLL时钟 这些设备有以下2种二级时钟源: ● 40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机/ 待机模式下自动唤醒系统。 ● 32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)。 当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。 55/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) 图8 时钟树 STM32F10xxx参考手册 1.当HSI被用于作为PLL时钟的输入时,系统时钟能得到的最大频率是64MHz。 2.对于内部和外部时钟源的特性,请参考相应产品数据手册中“电气特性”章节。 用 户 可 通 过 多 个 预 分 频 器 配 置 AHB 、 高 速 APB(APB2) 和 低 速 APB(APB1) 域 的 频 率 。 AHB 和 APB2域的最大频率是72MHz。APB1域的最大允许频率是36MHz。SDIO接口的时钟频率固定 为HCLK/2。 RCC通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。通过对SysTick 控制与状态寄存器的设置,可选择上述时钟或Cortex(HCLK)时钟作为SysTick时钟。ADC时钟 由高速APB2时钟经2、4、6或8分频后获得。 定时器时钟频率分配由硬件按以下2种情况自动设置: 1. 如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。 2. 否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。 56/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 FCLK是Cortex™-M3的自由运行时钟。详情见ARM的Cortex™-M3技术参考手册。 6.2.1 HSE时钟 高速外部时钟信号(HSE)由以下两种时钟源产生: ● HSE外部晶体/陶瓷谐振器 ● HSE用户外部时钟 为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容器必须尽可能地靠 近振荡器引脚。负载电容值必须根据所选择的振荡器来调整。 图9 HSE/LSE时钟源 硬件配置 外部时钟 晶体/陶瓷谐振器 外部时钟源(HSE旁路) 在这个模式里,必须提供外部时钟。它的频率最高可达25MHz。用户可通过设置在时钟控制寄 存器中的HSEBYP和HSEON位来选择这一模式。外部时钟信号(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时钟信号由内部8MHz的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。 HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振 荡器短。然而,即使在校准之后它的时钟频率精度仍较差。 校准 制造工艺决定了不同芯片的RC振荡器频率会不同,这就是为什么每个芯片的HSI时钟频率在出 厂前已经被ST校准到1%(25°C)的原因。系统复位时,工厂校准值被装载到时钟控制寄存器的 HSICAL[7:0]位。 如果用户的应用基于不同的电压或环境温度,这将会影响RC振荡器的精度。可以通过时钟控制 寄存器里的HSITRIM[4:0]位来调整HSI频率。 57/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 时钟控制寄存器中的HSIRDY位用来指示HSI RC振荡器是否稳定。在时钟启动过程中,直到这 一位被硬件置’1’,HSI RC输出时钟才被释放。HSI RC可由时钟控制寄存器中的HSION位来启 动和关闭。 如果HSE晶体振荡器失效,HSI时钟会被作为备用时钟源。参考6.2.7节时钟安全系统。 6.2.3 PLL 内部PLL可以用来倍频HSI RC的输出时钟或HSE晶体输出时钟。参考图8和时钟控制寄存器。 PLL的设置(选择HIS振荡器除2或HSE振荡器为PLL的输入时钟,和选择倍频因子)必须在其被激 活前完成。一旦PLL被激活,这些参数就不能被改动。 如果PLL中断在时钟中断寄存器里被允许,当PLL准备就绪时,可产生中断申请。 如果需要在应用中使用USB接口,PLL必须被设置为输出48或72MHZ时钟,用于提供48MHz的 USBCLK时钟。 6.2.4 LSE时钟 LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供 一个低功耗且精确的时钟源。 LSE晶体通过在备份域控制寄存器(RCC_BDCR)里的LSEON位启动和关闭。 在备份域控制寄存器(RCC_BDCR)里的LSERDY指示LSE晶体振荡是否稳定。在启动阶段,直 到这个位被硬件置’1’后,LSE时钟信号才被释放出来。如果在时钟中断寄存器里被允许,可产 生中断申请。 外部时钟源(LSE旁路) 在这个模式里必须提供一个32.768kHz频率的外部时钟源。你可以通过设置在备份域控制寄存器 (RCC_BDCR)里的LSEBYP和LSEON位来选择这个模式。具有50%占空比的外部时钟信号(方 波、正弦波或三角波)必须连到OSC32_IN引脚,同时保证OSC32_OUT引脚悬空,见图9。 6.2.5 LSI时钟 注意: LSI RC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和 自动唤醒单元提供时钟。LSI时钟频率大约40kHz(在30kHz和60kHz之间)。进一步信息请参考数 据手册中有关电气特性部分。 LSI RC可以通过控制/状态寄存器(RCC_CSR)里的LSION位来启动或关闭。 在控制/状态寄存器(RCC_CSR)里的LSIRDY位指示低速内部振荡器是否稳定。在启动阶段,直 到这个位被硬件设置为’1’后,此时钟才被释放。如果在时钟中断寄存器(RCC_CIR)里被允许, 将产生LSI中断申请。 只有大容量和互联型产品可以进行LSI校准 LSI校准 可以通过校准内部低速振荡器LSI来补偿其频率偏移,从而获得精度可接受的RTC时间基数,以 及独立看门狗(IWDG)的超时时间(当这些外设以LSI为时钟源)。 校准可以通过使用TIM5的输入时钟(TIM5_CLK)测量LSI时钟频率实现。测量以HSE的精度为保 证,软件可以通过调整RTC的20位预分频器来获得精确的RTC时钟基数,以及通过计算得到精 确的独立看门狗(IWDG)的超时时间。 LSI校准步骤如下: 1. 打开TIM5,设置通道4为输入捕获模式; 2. 设置AFIO_MAPR的TIM5_CH4_IREMAP位为’1’,在内部把LSI连接到TIM5的通道4; 3. 通过TIM5的捕获/比较4事件或者中断来测量LSI时钟频率; 4. 根据测量结果和期望的RTC时间基数和独立看门狗的超时时间,设置20位预分频器。 58/754 参照2009年12月 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™-M3的NMI中断(不可屏蔽中断)。 一旦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/128、LSE或LSI时钟提供。除非备份域复位,此选择不能被改变。 LSE时钟在备份域里,但HSE和LSI时钟不是。因此: ● 如果LSE被选为RTC时钟: ─ 只要VBAT维持供电,尽管VDD供电被切断,RTC仍继续工作。 ● 如果LSI被选为自动唤醒单元(AWU)时钟: ─ 如果VDD供电被切断, AWU状态不能被保证。有关LSI校准,详见6.2.5节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 59/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 ● 除2的PLL时钟 时钟的选择由时钟配置寄存器(RCC_CFGR)中的MCO[2:0]位控制。 6.3 RCC寄存器描述 请参考第1章中有关寄存器描述中用到的缩写。 6.3.1 时钟控制寄存器(RCC_CR) 偏移地址: 0x00 复位值: 0x000 XX83,X代表未定义 访问: 无等待状态, 字, 半字 和字节访问 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 PLL RDY PLLON 保留 CSS HSE HSE HSE ON BYP RDY ON r rw rw rw r rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 HSICAL[7:0] HSITRIM[4:0] 保留 HSI RDY HSION r r r r r r r r rw rw rw rw rw r rw 位31:26 位25 位24 位23:20 位19 位18 位17 保留,始终读为0。 PLLRDY:PLL时钟就绪标志 (PLL clock ready flag) PLL锁定后由硬件置’1’。 0:PLL未锁定; 1:PLL锁定。 PLLON:PLL使能 (PLL enable) 由软件置’1’或清零。 当进入待机和停止模式时,该位由硬件清零。当PLL时钟被用作或被选择将要作为系统时钟 时,该位不能被清零。 0:PLL关闭; 1:PLL使能。 保留,始终读为0。 CSSON:时钟安全系统使能 (Clock security system enable) 由软件置’1’或清零以使能时钟监测器。 0:时钟监测器关闭; 1:如果外部4-16MHz振荡器就绪,时钟监测器开启。 HSEBYP:外部高速时钟旁路 (External high-speed clock bypass) 在调试模式下由软件置’1’或清零来旁路外部晶体振荡器。只有在外部4-16MHz振荡器关闭的情 况下,才能写入该位。 0:外部4-16MHz振荡器没有旁路; 1:外部4-16MHz外部晶体振荡器被旁路。 HSERDY:外部高速时钟就绪标志 (External high-speed clock ready flag) 由硬件置’1’来指示外部4-16MHz振荡器已经稳定。在HSEON位清零后,该位需要6个外部425MHz振荡器周期清零。 0:外部4-16MHz振荡器没有就绪; 1:外部4-16MHz振荡器就绪。 60/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位16 位15:8 位7:3 位2 位1 位0 HSEON:外部高速时钟使能 (External high-speed clock enable) 由软件置’1’或清零。 当进入待机和停止模式时,该位由硬件清零,关闭4-16MHz外部振荡器。当外部4-16MHz振荡 器被用作或被选择将要作为系统时钟时,该位不能被清零。 0:HSE振荡器关闭; 1:HSE振荡器开启。 HSICAL[7:0]:内部高速时钟校准 (Internal high-speed clock calibration) 在系统启动时,这些位被自动初始化 HSITRIM[4:0]:内部高速时钟调整 (Internal high-speed clock trimming) 由软件写入来调整内部高速时钟,它们被叠加在HSICAL[5:0]数值上。 这些位在HSICAL[7:0]的基础上,让用户可以输入一个调整数值,根据电压和温度的变化调整 内部HSI RC振荡器的频率。 默认数值为16,可以把HSI调整到8MHz±1%;每步HSICAL的变化调整约40kHz。 保留,始终读为0。 HSIRDY:内部高速时钟就绪标志 (Internal high-speed clock ready flag) 由硬件置’1’来指示内部8MHz振荡器已经稳定。在HSION位清零后,该位需要6个内部8MHz振 荡器周期清零。 0:内部8MHz振荡器没有就绪; 1:内部8MHz振荡器就绪。 HSION:内部高速时钟使能 (Internal high-speed clock enable) 由软件置’1’或清零。 当从待机和停止模式返回或用作系统时钟的外部4-16MHz振荡器发生故障时,该位由硬件置’1’ 来启动内部8MHz的RC振荡器。当内部8MHz振荡器被直接或间接地用作或被选择将要作为系 统时钟时,该位不能被清零。 0:内部8MHz振荡器关闭; 1:内部8MHz振荡器开启。 6.3.2 时钟配置寄存器(RCC_CFGR) 偏移地址: 0x04 复位值: 0x0000 0000 访问: 0到2个等待周期,字,半字和字节访问 只有当访问发生在时钟切换时,才会插入1或2个等待周期。 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 MCO[2:0] 保留 USB PRE PLLMUL[3:0] PLL PLL XTPRE SRC 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 ADCPRE[1:0] PPRE2[2:0] PPRE1[2:0] HPRE[3:0] SWS[1:0] SW[1:0] rw rw rw rw rw rw rw rw rw rw rw rw r 位31:27 保留,始终读为0。 r rw rw 61/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位26:24 位22 位21:18 位17 位16 位15:14 位13:11 MCO: 微控制器时钟输出 (Microcontroller clock output) 由软件置’1’或清零。 0xx:没有时钟输出; 100:系统时钟(SYSCLK)输出; 101:内部RC振荡器时钟(HSI)输出; 110:外部振荡器时钟(HSE)输出; 111:PLL时钟2分频后输出。 注意:- 该时钟输出在启动和切换MCO时钟源时可能会被截断。 - 在系统时钟作为输出至MCO引脚时,请保证输出时钟频率不超过50MHz (I/O口最高频率)。 USBPRE:USB预分频 (USB prescaler) 由软件置’1’或清’0’来产生48MHz的USB时钟。在RCC_APB1ENR寄存器中使能USB时钟之 前,必须保证该位已经有效。如果USB时钟被使能,该位不能被清零。 0:PLL时钟1.5倍分频作为USB时钟 1:PLL时钟直接作为USB时钟 PLLMUL:PLL倍频系数 (PLL multiplication factor) 由软件设置来确定PLL倍频系数。只有在PLL关闭的情况下才可被写入。 注意:PLL的输出频率不能超过72MHz 0000:PLL 2倍频输出 1000:PLL 10倍频输出 0001:PLL 3倍频输出 1001:PLL 11倍频输出 0010:PLL 4倍频输出 1010:PLL 12倍频输出 0011:PLL 5倍频输出 1011:PLL 13倍频输出 0100:PLL 6倍频输出 1100:PLL 14倍频输出 0101:PLL 7倍频输出 1101:PLL 15倍频输出 0110:PLL 8倍频输出 1110:PLL 16倍频输出 0111:PLL 9倍频输出 1111:PLL 16倍频输出 PLLXTPRE:HSE分频器作为PLL输入 (HSE divider for PLL entry) 由软件置’1’或清’0’来分频HSE后作为PLL输入时钟。只能在关闭PLL时才能写入此位。 0:HSE不分频 1:HSE 2分频 PLLSRC:PLL输入时钟源 (PLL entry clock source) 由软件置’1’或清’0’来选择PLL输入时钟源。只能在关闭PLL时才能写入此位。 0:HSI振荡器时钟经2分频后作为PLL输入时钟 1:HSE时钟作为PLL输入时钟。 ADCPRE[1:0]:ADC预分频 (ADC prescaler) 由软件置’1’或清’0’来确定ADC时钟频率 00:PCLK2 2分频后作为ADC时钟 01:PCLK2 4分频后作为ADC时钟 10:PCLK2 6分频后作为ADC时钟 11:PCLK2 8分频后作为ADC时钟 PPRE2[2:0]:高速APB预分频(APB2) (APB high-speed prescaler (APB2)) 由软件置’1’或清’0’来控制高速APB2时钟(PCLK2)的预分频系数。 0xx:HCLK不分频 100:HCLK 2分频 101:HCLK 4分频 110:HCLK 8分频 111:HCLK 16分频 62/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位10:8 位7:4 位3:2 位1:0 PPRE1[2:0]:低速APB预分频(APB1) (APB low-speed prescaler (APB1)) 由软件置’1’或清’0’来控制低速APB1时钟(PCLK1)的预分频系数。 警告:软件必须保证APB1时钟频率不超过36MHz。 0xx:HCLK不分频 100:HCLK 2分频 101:HCLK 4分频 110:HCLK 8分频 111:HCLK 16分频 HPRE[3:0]: AHB预分频 (AHB Prescaler) 由软件置’1’或清’0’来控制AHB时钟的预分频系数。 0xxx:SYSCLK不分频 1000:SYSCLK 2分频 1100:SYSCLK 64分频 1001:SYSCLK 4分频 1101:SYSCLK 128分频 1010:SYSCLK 8分频 1110:SYSCLK 256分频 1011:SYSCLK 16分频 1111:SYSCLK 512分频 注意:当AHB时钟的预分频系数大于1时,必须开启预取缓冲器。详见闪存读取(第2.3.3节)。 SWS[1:0]:系统时钟切换状态 (System clock switch status) 由硬件置’1’或清’0’来指示哪一个时钟源被作为系统时钟。 00:HSI作为系统时钟; 01:HSE作为系统时钟; 10:PLL输出作为系统时钟; 11:不可用。 SW[1:0]:系统时钟切换 (System clock switch) 由软件置’1’或清’0’来选择系统时钟源。 在从停止或待机模式中返回时或直接或间接作为系统时钟的HSE出现故障时,由硬件强制选择 HSI作为系统时钟(如果时钟安全系统已经启动) 00:HSI作为系统时钟; 01:HSE作为系统时钟; 10:PLL输出作为系统时钟; 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 HSE HIS LSE LSI RDYC RDYC RDYC RDYC RDYC w wwwww 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 PLL HSE HSI LSE LSI RDYIE RDYIE RDYIE RDYIE RDYIE CSSF 保留 PLL HSE HSI LSE LSI RDYF RDYF RDYF RDYF RDYF rw rw rw rw rw r rrrrr 位31:24 位23 保留,始终读为0。 CSSC:清除时钟安全系统中断 (Clock security system interrupt clear) 由软件置’1’来清除CSSF安全系统中断标志位CSSF。 0:无作用; 1:清除CSSF安全系统中断标志位。 63/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位22:21 位20 位19 位18 位17 位16 位15:13 位12 位11 位10 位9 位8 位7 位6:5 保留,始终读为0。 PLLRDYC:清除PLL就绪中断 (PLL ready interrupt clear) 由软件置’1’来清除PLL就绪中断标志位PLLRDYF。 0:无作用; 1:清除PLL就绪中断标志位PLLRDYF。 HSERDYC:清除HSE就绪中断 (HSE ready interrupt clear) 由软件置’1’来清除HSE就绪中断标志位HSERDYF。 0:无作用; 1:清除HSE就绪中断标志位HSERDYF。 HSIRDYC: 清除HSI就绪中断 (HSI ready interrupt clear) 由软件置’1’来清除HSI就绪中断标志位HSIRDYF。 0:无作用; 1:清除HSI就绪中断标志位HSIRDYF。 LSERDYC:清除LSE就绪中断 (LSE ready interrupt clear) 由软件置’1’来清除LSE就绪中断标志位LSERDYF。 0:无作用; 1:清除LSE就绪中断标志位LSERDYF。 LSIRDYC:清除LSI就绪中断 (LSI ready interrupt clear) 由软件置’1’来清除LSI就绪中断标志位LSIRDYF。 0:无作用; 1:清除LSI就绪中断标志位LSIRDYF。 保留,始终读为0。 PLLRDYIE:PLL就绪中断使能 (PLL ready interrupt enable) 由软件置’1’或清’0’来使能或关闭PLL就绪中断。 0:PLL就绪中断关闭; 1:PLL就绪中断使能。 HSERDYIE:HSE就绪中断使能 (HSE ready interrupt enable) 由软件置’1’或清’0’来使能或关闭外部4-16MHz振荡器就绪中断。 0:HSE就绪中断关闭; 1:HSE就绪中断使能。 HSIRDYIE:HSI就绪中断使能 (HSI ready interrupt enable) 由软件置’1’或清’0’来使能或关闭内部8MHz RC振荡器就绪中断。 0:HSI就绪中断关闭; 1:HSI就绪中断使能。 LSERDYIE:LSE就绪中断使能 (LSE ready interrupt enable) 由软件置’1’或清’0’来使能或关闭外部32kHz RC振荡器就绪中断。 0:LSE就绪中断关闭; 1:LSE就绪中断使能。 LSIRDYIE:LSI就绪中断使能 (LSI ready interrupt enable) 由软件置’1’或清’0’来使能或关闭内部40kHz RC振荡器就绪中断。 0:LSI就绪中断关闭; 1:LSI就绪中断使能。 CSSF:时钟安全系统中断标志 (Clock security system interrupt flag) 在外部4-16MHz振荡器时钟出现故障时,由硬件置’1’。 由软件通过置’1’ CSSC位来清除。 0:无HSE时钟失效产生的安全系统中断; 1:HSE时钟失效导致了时钟安全系统中断。 保留,始终读为0。 64/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位4 PLLRDYF:PLL就绪中断标志 (PLL ready interrupt flag) 在PLL就绪且PLLRDYIE位被置’1’时,由硬件置’1’。 由软件通过置’1’ PLLRDYC位来清除。 0:无PLL上锁产生的时钟就绪中断; 1:PLL上锁导致时钟就绪中断。 位3 HSERDYF:HSE就绪中断标志 (HSE ready interrupt flag) 在外部低速时钟就绪且HSERDYIE位被置’1’时,由硬件置’1’。 由软件通过置’1’ HSERDYC位来清除。 0:无外部4-16MHz振荡器产生的时钟就绪中断; 1:外部4-16MHz振荡器导致时钟就绪中断。 位2 HSIRDYF:HSI就绪中断标志 (HSI ready interrupt flag) 在内部高速时钟就绪且HSIRDYIE位被置’1’时,由硬件置’1’。 由软件通过置’1’ HSIRDYC位来清除。 0:无内部8MHz RC振荡器产生的时钟就绪中断; 1:内部8MHz RC振荡器导致时钟就绪中断。 位1 LSERDYF:LSE就绪中断标志 (LSE ready interrupt flag) 在外部低速时钟就绪且LSERDYIE位被置’1’时,由硬件置’1’。 由软件通过置’1’ LSERDYC位来清除。 0:无外部32kHz振荡器产生的时钟就绪中断; 1:外部32kHz振荡器导致时钟就绪中断。 位0 LSIRDYF:LSI就绪中断标志 (LSI ready interrupt flag) 在内部低速时钟就绪且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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADC3 USART1 TIM8 SPI1 RST RST RST 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 位15 位14 保留,始终读为0。 ADC3RST:ADC3接口复位 (ADC3 interface reset) 由软件置’1’或清’0’ 0:无作用; 1:复位ADC3接口。 USART1RST:USART1复位 (USART1 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位USART1。 65/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) 位13 位12 位11 位10 位9 位8 位7 位6 位5 位4 位3 位2 位1 TIM8RST:TIM8定时器复位 (TIM8 timer reset) 由软件置’1’或清’0’ 0:无作用; 1:复位TIM8定时器。 SPI1RST:SPI1复位 (SPI 1 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位SPI1。 TIM1RST:TIM1定时器复位 (TIM1 timer reset) 由软件置’1’或清’0’ 0:无作用; 1:复位TIM1定时器。 ADC2RST:ADC2接口复位 (ADC 2 interface reset) 由软件置’1’或清’0’ 0:无作用; 1:复位ADC2接口。 ADC1RST:ADC1接口复位 (ADC 1 interface reset) 由软件置’1’或清’0’ 0:无作用; 1:复位ADC1接口。 IOPGRST:IO端口G复位 (IO port G reset) 由软件置’1’或清’0’ 0:无作用; 1:复位IO端口G。 IOPFRST:IO端口F复位 (IO port F reset) 由软件置’1’或清’0’ 0:无作用; 1:复位IO端口F。 IOPERST:IO端口E复位 (IO port E reset) 由软件置’1’或清’0’ 0:无作用; 1:复位IO端口E。 IOPDRST:IO端口D复位 (IO port D reset) 由软件置’1’或清’0’ 0:无作用; 1:复位IO端口D。 IOPCRST:IO端口C复位 (IO port C reset) 由软件置’1’或清’0’ 0:无作用; 1:复位IO端口C。 IOPBRST:IO端口B复位 (IO port B reset) 由软件置’1’或清’0’ 0:无作用; 1:复位IO端口B。 IOPARST:IO端口A复位 (IO port A reset) 由软件置’1’或清’0’ 0:无作用; 1:复位IO端口A。 保留,始终读为0。 STM32F10xxx参考手册 66/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位0 AFIORST:辅助功能IO复位 (Alternate function I/O reset) 由软件置’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 rw rw 15 14 13 12 BKP RST 保留 CAN RST 保留 USB RST I2C2 RST I2C1 RST UART5R UART4R USART3 USART2 ST ST RST RST 保留 rw rw rw rw rw rw rw rw rw 11 10 9 8 76 5 4 3 2 1 0 SPI3 SPI2 RST RST 保留 WWDG RST 保留 TIM7 TIM6 TIM5 TIM4 TIM3 TIM2 RST RST RST RST RST RST rw rw rw rw rw rw rw rw rw 位31:30 位29 位28 位27 位26 位25 位24 位23 位22 位21 保留,始终读为0。 DACRST:DAC接口复位 (DAC interface reset) 由软件置’1’或清’0’ 0:无作用; 1:复位DAC接口。 PWRRST:电源接口复位 (Power interface reset) 由软件置’1’或清’0’ 0:无作用; 1:复位电源接口。 BKPRST:备份接口复位 (Backup interface reset) 由软件置’1’或清’0’ 0:无作用; 1:复位备份接口。 保留,始终读为0。 CANRST:CAN复位 (CAN reset) 由软件置’1’或清’0’ 0:无作用; 1:复位CAN。 保留,始终读为0。 USBRST:USB复位 (USB reset) 由软件置’1’或清’0’ 0:无作用; 1:复位USB。 I2C2RST:I2C 2复位 (I2C 2 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位I2C 2。 I2C1RST:I2C 1复位 (I2C 1 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位I2C 1。 67/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) 位20 位19 位18 位17 位16 位15 位14 位13:12 位11 位10:6 位5 位4 位3 位2 UART5RST:UART5复位 (UART 5 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位UART5。 UART4RST:UART4复位 (UART 4 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位UART4。 USART3RST:USART3复位 (USART 3 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位USART3。 USART2RST:USART2复位 (USART 2 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位USART2。 保留,始终读为0。 SPI3RST SPI3 复位 (SPI 3 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位SPI3。 SPI2RST:SPI2复位 (SPI 2 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位SPI2。 保留,始终读为0。 WWDGRST:窗口看门狗复位 (Window watchdog reset) 由软件置’1’或清’0’ 0:无作用; 1:复位窗口看门狗。 保留,始终读为0。 TIM7RST:定时器7复位 (Timer 7 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位TIM7定时器。 TIM6RST:定时器6复位 (Timer 6 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位TIM6定时器。 TIM5RST:定时器5复位 (Timer 5 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位TIM5定时器。 TIM4RST:定时器4复位 (Timer 4 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位TIM4定时器。 STM32F10xxx参考手册 68/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位1 TIM3RST:定时器3复位 (Timer 3 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位TIM3定时器。 位0 TIM2RST:定时器2复位 (Timer 2 reset) 由软件置’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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 SDIOEN 保留 FSMCEN 保留 CRCEN 保留 FLITF EN 保留 SRAM EN DMA2 EN DMA1 EN rw rw rw rw rw rw rw 位31:11 位10 位9 位8 位7 位6 位5 位4 位3 位2 保留,始终读为0。 SDIOEN:SDIO时钟使能 (SDIO clock enable) 由软件置’1’或清’0’。 0:SDIO时钟关闭; 1:SDIO时钟开启。 保留,始终读为0。 FSMCEN:FSMC时钟使能 (FSMC clock enable) 由软件置’1’或清’0’。 0:FSMC时钟关闭; 1:FSMC时钟开启。 保留,始终读为0。 CRCEN:CRC时钟使能 (CRC clock enable) 由软件置’1’或清’0’。 0:CRC时钟关闭; 1:CRC时钟开启。 保留,始终读为0。 FLITFEN:闪存接口电路时钟使能 (FLITF clock enable) 由软件置’1’或清’0’来开启或关闭睡眠模式时闪存接口电路时钟。 0:睡眠模式时闪存接口电路时钟关闭; 1:睡眠模式时闪存接口电路时钟开启。 保留,始终读为0。 SRAMEN:SRAM时钟使能 (SRAM interface clock enable) 由软件置’1’或清’0’来开启或关闭睡眠模式时SRAM时钟。 0:睡眠模式时SRAM时钟关闭; 1:睡眠模式时SRAM时钟开启。 69/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位1 DMA2EN:DMA2时钟使能 (DMA2 clock enable) 由软件置’1’或清’0’。 0:DMA2时钟关闭; 1:DMA2时钟开启。 位0 DMA1EN:DMA1时钟使能 (DMA1 clock enable) 由软件置’1’或清’0’。 0:DMA1时钟关闭; 1:DMA1时钟开启。 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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADC3 USART1 TIM8 EN EN 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 位15 位14 位13 位12 位11 位10 保留,始终读为0。 ADC3EN:ADC3接口时钟使能 (ADC 3 interface clock enable) 由软件置’1’或清’0’ 0:ADC3接口时钟关闭; 1:ADC3接口时钟开启。 USART1EN:USART1时钟使能 (USART1 clock enable) 由软件置’1’或清’0’ 0:USART1时钟关闭; 1:USART1时钟开启。 TIM8EN:TIM8定时器时钟使能 (TIM8 Timer clock enable) 由软件置’1’或清’0’ 0:TIM8定时器时钟关闭; 1:TIM8定时器时钟开启。 SPI1EN:SPI1时钟使能 (SPI 1 clock enable) 由软件置’1’或清’0’ 0:SPI1时钟关闭; 1:SPI1时钟开启。 TIM1EN:TIM1定时器时钟使能 (TIM1 Timer clock enable) 由软件置’1’或清’0’ 0:TIM1定时器时钟关闭; 1:TIM1定时器时钟开启。 ADC2EN:ADC2接口时钟使能 (ADC 2 interface clock enable) 由软件置’1’或清’0’ 0:ADC2接口时钟关闭; 1:ADC2接口时钟开启。 70/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位9 ADC1EN:ADC1接口时钟使能 (ADC 1 interface clock enable) 由软件置’1’或清’0’ 0:ADC1接口时钟关闭; 1:ADC1接口时钟开启。 位8 IOPGEN:IO端口G时钟使能 (I/O port G clock enable) 由软件置’1’或清’0’ 0:IO端口G时钟关闭; 1:IO端口G时钟开启。 位7 IOPFEN:IO端口F时钟使能 (I/O port F clock enable) 由软件置’1’或清’0’ 0:IO端口F时钟关闭; 1:IO端口F时钟开启。 位6 IOPEEN:IO端口E时钟使能 (I/O port E clock enable) 由软件置’1’或清’0’ 0:IO端口E时钟关闭; 1:IO端口E时钟开启。 位5 IOPDEN:IO端口D时钟使能 (I/O port D clock enable) 由软件置’1’或清’0’ 0:IO端口D时钟关闭; 1:IO端口D时钟开启。 位4 IOPCEN:IO端口C时钟使能 (I/O port C clock enable) 由软件置’1’或清’0’ 0:IO端口C时钟关闭; 1:IO端口C时钟开启。 位3 IOPBEN:IO端口B时钟使能 (I/O port B clock enable) 由软件置’1’或清’0’ 0:IO端口B时钟关闭; 1:IO端口B时钟开启。 位2 IOPAEN:IO端口A时钟使能 (I/O port A clock enable) 由软件置’1’或清’0’ 0:IO端口A时钟关闭; 1:IO端口A时钟开启。 位1 保留,始终读为0。 位0 AFIOEN:辅助功能IO时钟使能 (Alternate function I/O clock enable) 由软件置’1’或清’0’ 0:辅助功能IO时钟关闭; 1:辅助功能IO时钟开启。 6.3.8 APB1 外设时钟使能寄存器(RCC_APB1ENR) 注: 偏移地址:0x1C 复位值:0x0000 0000 访问:字、半字和字节访问 通常无访问等待周期。但在APB1总线上的外设被访问时,将插入等待状态直到APB1外设访问 结束。 当外设时钟没有启用时,软件不能读出外设寄存器的数值,返回的数值始终是0x0。 71/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) 31 30 29 28 27 26 25 24 23 保留 DACEN PWR EN rw rw BKP EN 保留 CAN EN 保留 USB EN rw rw rw 15 14 13 12 11 10 9 8 7 SPI3 EN rw SPI2 EN rw 保留 WWDG EN rw 保留 STM32F10xxx参考手册 22 I2C2 EN rw 6 21 20 19 18 17 16 I2C1 EN UART5 UART4 USART3 USART2 EN EN EN EN 保留 rw rw rw rw rw 5 4 3 2 1 0 TIM7 EN rw TIM6 EN rw TIM5 EN rw TIM4 EN rw TIM3 EN rw TIM2 EN rw 位31:30 位29 位28 位27 位26 位25 位24 位23 位22 位21 位20 位19 保留,始终读为0。 DACEN: DAC接口时钟使能 (DAC interface clock enable) 由软件置’1’或清’0’ 0:DAC接口时钟关闭; 1:DAC接口时钟开启。 PWREN:电源接口时钟使能 (Power interface clock enable) 由软件置’1’或清’0’ 0:电源接口时钟关闭; 1:电源接口时钟开启。 BKPEN:备份接口时钟使能 (Backup interface clock enable) 由软件置’1’或清’0’ 0:备份接口时钟关闭; 1:备份接口时钟开启。 保留,始终读为0。 CANEN:CAN时钟使能 (CAN clock enable) 由软件置’1’或清’0’ 0:CAN时钟关闭; 1:CAN时钟开启。 保留,始终读为0。 USBEN:USB时钟使能 (USB clock enable) 由软件置’1’或清’0’ 0:USB时钟关闭; 1:USB时钟开启。 I2C2EN:I2C 2时钟使能 (I2C 2 clock enable) 由软件置’1’或清’0’ 0:I2C 2时钟关闭; 1:I2C 2时钟开启。 I2C1EN:I2C 1时钟使能 (I2C 1 clock enable) 由软件置’1’或清’0’ 0:I2C 1时钟关闭; 1:I2C 1时钟开启。 UART5EN:UART5时钟使能 (UART 5 clock enable) 由软件置’1’或清’0’ 0:UART5时钟关闭; 1:UART5时钟开启。 UART4EN:UART4时钟使能 (UART 4 clock enable) 由软件置’1’或清’0’ 0:UART4时钟关闭; 1:UART4时钟开启。 72/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位18 位17 位16 位15 位14 位13:12 位11 位10:6 位5 位4 位3 位2 位1 位0 USART3EN:USART3时钟使能 (USART 3 clock enable) 由软件置’1’或清’0’ 0:USART3时钟关闭; 1:USART3时钟开启。 USART2EN:USART2时钟使能 (USART 2 clock enable) 由软件置’1’或清’0’ 0:USART2时钟关闭; 1:USART2时钟开启。 保留,始终读为0。 SPI3EN:SPI 3时钟使能 (SPI 3 clock enable) 由软件置’1’或清’0’ 0:SPI 3时钟关闭; 1:SPI 3时钟开启。 SPI2EN:SPI 2时钟使能 (SPI 2 clock enable) 由软件置’1’或清’0’ 0:SPI 2时钟关闭; 1:SPI 2时钟开启。 保留,始终读为0。 WWDGEN:窗口看门狗时钟使能 (Window watchdog clock enable) 由软件置’1’或清’0’ 0:窗口看门狗时钟关闭; 1:窗口看门狗时钟开启。 保留,始终读为0。 TIM7EN:定时器7时钟使能 (Timer 7 clock enable) 由软件置’1’或清’0’ 0:定时器7时钟关闭; 1:定时器7时钟开启。 TIM6EN:定时器6时钟使能 (Timer 6 clock enable) 由软件置’1’或清’0’ 0:定时器6时钟关闭; 1:定时器6时钟开启。 TIM5EN:定时器5时钟使能 (Timer 5 clock enable) 由软件置’1’或清’0’ 0:定时器5时钟关闭; 1:定时器5时钟开启。 TIM4EN:定时器4时钟使能 (Timer 4 clock enable) 由软件置’1’或清’0’ 0:定时器4时钟关闭; 1:定时器4时钟开启。 TIM3EN:定时器3时钟使能 (Timer 3 clock enable) 由软件置’1’或清’0’ 0:定时器3时钟关闭; 1:定时器3时钟开启。 TIM2EN:定时器2时钟使能 (Timer 2 clock enable) 由软件置’1’或清’0’ 0:定时器2时钟关闭; 1:定时器2时钟开启。 73/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 6.3.9 备份域控制寄存器 (RCC_BDCR) 偏移地址:0x20 复位值:0x0000 0000,只能由备份域复位有效复位 访问:0到3等待周期,字、半字和字节访问 当连续对该寄存器进行访问时,将插入等待状态。 注意: 备份域控制寄存器中(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 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RTC EN 保留 RTCSEL[1:0] 保留 LSE BYP LSE RDY LSEON rw rw rw rw r rw 位31:17 保留,始终读为0。 位16 BDRST:备份域软件复位 (Backup domain software reset) 由软件置’1’或清’0’ 0:复位未激活; 1:复位整个备份域。 位15 RTCEN:RTC时钟使能 (RTC clock enable) 由软件置’1’或清’0’ 0:RTC时钟关闭; 1:RTC时钟开启。 位14:10 保留,始终读为0。 位9:8 RTCSEL[1:0]:RTC时钟源选择 (RTC clock source selection) 由软件设置来选择RTC时钟源。一旦RTC时钟源被选定,直到下次后备域被复位,它不能在被 改变。可通过设置BDRST位来清除。 00:无时钟; 01:LSE振荡器作为RTC时钟; 10:LSI振荡器作为RTC时钟; 11:HSE振荡器在128分频后作为RTC时钟。 位7:3 保留,始终读为0。 位2 LSEBYP:外部低速时钟振荡器旁路 (External low-speed oscillator bypass) 在调试模式下由软件置’1’或清’0’来旁路LSE。只有在外部32kHz振荡器关闭时,才能写入该位 0:LSE时钟未被旁路; 1:LSE时钟被旁路。 位1 LSERDY:外部低速LSE就绪 (External low-speed oscillator ready) 由硬件置’1’或清’0’来指示是否外部32kHz振荡器就绪。在LSEON被清零后,该位需要6个外部 低速振荡器的周期才被清零。 0:外部32kHz振荡器未就绪; 1:外部32kHz振荡器就绪。 位0 LSEON:外部低速振荡器使能 (External low-speed oscillator enable) 由软件置’1’或清’0’ 0:外部32kHz振荡器关闭; 1:外部32kHz振荡器开启。 74/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 6.3.10 控制/状态寄存器 (RCC_CSR) 31 LPWR RSTF rw 15 偏移地址:0x24 复位值:0x0C00 0000,除复位标志外由系统复位清除,复位标志只能由电源复位清除。 访问:0到3等待周期,字、半字和字节访问 当连续对该寄存器进行访问时,将插入等待状态。 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 WWDG RSTF IWDG RSTF SFT RSTF POR RSTF PIN RSTF 保留 RMVF 保留 rw rw rw rw rw rw 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 LSI RDY LSION r rw 位31 LPWRRSTF:低功耗复位标志 (Low-power reset flag) 在低功耗管理复位发生时由硬件置’1’;由软件通过写RMVF位清除。 0:无低功耗管理复位发生; 1:发生低功耗管理复位. 关于低功耗管理复位的详细信息,请参考6.1.1节的”低功耗管理复位”。 位30 位29 WWDGRSTF:窗口看门狗复位标志 (Window watchdog reset flag) 在窗口看门狗复位发生时由硬件置’1’;由软件通过写RMVF位清除。 0:无窗口看门狗复位发生; 1:发生窗口看门狗复位。 IWDGRSTF:独立看门狗复位标志 (Independent watchdog reset flag) 在独立看门狗复位发生在VDD区域时由硬件置’1’;由软件通过写RMVF位清除。 0:无独立看门狗复位发生; 1:发生独立看门狗复位。 位28 SFTRSTF:软件复位标志 (Software reset flag) 在软件复位发生时由硬件置’1’;由软件通过写RMVF位清除。 0:无软件复位发生; 1:发生软件复位。 位27 PORRSTF:上电/掉电复位标志 (POR/PDR reset flag) 在上电/掉电复位发生时由硬件置’1’;由软件通过写RMVF位清除。 0:无上电/掉电复位发生; 1:发生上电/掉电复位。 位26 PINRSTF:NRST引脚复位标志 (PIN reset flag) 在NRST引脚复位发生时由硬件置’1’;由软件通过写RMVF位清除。 0:无NRST引脚复位发生; 1:发生NRST引脚复位。 位25 保留,读操作返回0 位24 位23:2 位1 RMVF:清除复位标志 (Remove reset flag) 由软件置’1’来清除复位标志。 0:无作用; 1:清除复位标志。 保留,读操作返回0 LSIRDY:内部低速振荡器就绪 (Internal low-speed oscillator ready) 由硬件置’1或清’0’来指示内部40kHz RC振荡器是否就绪。在LSION清零后,3个内部40kHz RC 振荡器的周期后LSIRDY被清零。 0:内部40kHz RC振荡器时钟未就绪; 1:内部40kHz RC振荡器时钟就绪。 75/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 小容量、中容量和大容量产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位0 LSION:内部低速振荡器使能 (Internal low-speed oscillator enable) 由软件置’1或清’0’。 0:内部40kHz RC振荡器关闭; 1:内部40kHz RC振荡器开启。 76/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 77/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 有关寄存器的起始地址,请参考表1。 00 000011 0 复位值 保留 024h RCC_CSR LPWRRSTF WWDGRSTF IWDGRSTF SFTRSTF PORRSTF PINRSTF 保留 RMVF LSIRDY LSION 000000 保留 000 保留 RTC SEL [1:0] 00 00 RCC_BDCR 复位值 保留 保留 020h BDRST RTCEN LSEBYP LSERDYF LSEON 0 0 0000000 00 保留 000 RCC_APB1ENR 复位值 01Ch RCC_APB2ENR 复位值 018h 保留 DACRST PWREN BKPEN 保留 CANEN 保留 USBEN I2C2EN I2C1EN UART5EN UART4EN USART3EN USART2EN 保留 SPI3EN SPI2EN WWDGEN TIM7EN TIM6EN TIM5EN TIM4EN TIM3EN TIM2EN 保留 00000000000000 0 ADC3EN USART1EN TIM8RST SPI1EN TIM1EN ADC2EN ADC1EN IOPGEN IOPFEN IOPEEN IOPDEN IOPCEN IOPBEN IOPAEN 保留 AFIOEN 保留 0 0 0 1 100 SDIOEN 保留 FSMCEN 保留 CRCEN 保留 FLITFEN 保留 SRAMEN DMA2EN DMA1EN RCC_AHBENR 复位值 014h 000000 0 000 0 0000000 00 复位值 保留 保留 010h RCC_APB1RSTR 保留 DACRST PWRRST BKPRST 保留 CANRST 保留 USBRST I2C2RST I2C1RST UART5RST UART4RST USART3RST USART2RST 保留 SPI3RST SPI2RST WWDGRST TIM7RST TIM6RST TIM5RST TIM4RST TIM3RST TIM2RST 保留 00000000000000 0 00Ch RCC_APB2RSTR 复位值 ADC3RST USART1RST TIM8RST SPIRST TIM1RST ADC2RST ADC1RST IOPGRST IOPFRST IOPERST IOPDRST IOPCRST IOPBRST IOPARST 保留 AFIORST 00000 000000 00000 0 RCC_CIR 复位值 保留 保留 保留 保留 008h CSSC PLLRDYC HSERDYC HSIRDYC LSERDYC LSIRDYC PLLRDYIE HSERDYIE HSIRDYIE LSERDYIE LSIRDYIE CSSF PLLRDYF HSERDYF HSIRDYF LSERDYF LSIRDYF 00000000000000000000000 00 MCO[2:0] 000 RCC_CR 复位值 RCC_CFGR 复位值 000h 004h HPRE[3:0] PRRE1 [2:0] PRRE2 [2:0] ADC PRE [1:0] PLLMUL[3:0] 保留 保留 保留 USBPRE PLLXTPRE PLLSRC SWS[1:0 ] SW[1:0] 00000000000010000 11 保留 HSITRIM[4:0] HSICAL[7:0] 31 30 29 28 27 26 PLLRDY 25 PLLON 24 23 22 21 20 CSSON 19 HSEBYP 18 HSERDY 17 HSEON 16 15 14 13 12 11 10 9 8 7 6 5 4 3 保留 2 HSIRDY 1 HSION 0 寄存器 偏移 表15 RCC寄存器地址映像和复位值 下表列出了RCC寄存器的映像和复位值。 6.3.11 RCC寄存器地址映像 STM32F10xxx参考手册 小容量、中容量和大容量产品的复位和时钟控制(RCC) 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 7 互联型产品的复位和时钟控制(RCC) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 本章内容适用于互联型产品,除非特别说明。 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’将使能该复位。这时,即使执行了进入停机 模式的过程,系统将被复位而不是进入停机模式。 关于用户选择字节的进一步信息,请参考STM32F10xxx闪存编程手册。 7.1.2 电源复位 当以下事件中之一发生时,产生电源复位: 1. 上电/掉电复位(POR/PDR复位) 2. 从待机模式中返回 电源复位将复位除了备份区域外的所有寄存器(见图4)。 下图中复位源将最终作用于RESET引脚,并在复位过程中保持低电平。复位入口矢量被固定在 地址0x0000_0004。更多细节,参见表54:互联型产品的向量表。 芯片内部的复位信号会在NRST引脚上输出,脉冲发生器保证每一个(外部或内部)复位源都能有 至少20μs的脉冲延时;当NRST引脚被拉低产生外部复位时,它将产生复位脉冲。 78/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) 图10 复位电路 STM32F10xxx参考手册 7.1.3 备份域复位 7.2 备份区域拥有两个专门的复位,它们只影响备份区域(见图4)。 当以下事件中之一发生时,产生备份区域复位。 1. 软件复位,备份区域复位可由设置备份域控制寄存器(RCC_BDCR)(见7.3.9节)中的 BDRST位产生。 2. 在VDD和VBAT两者掉电的前提下,VDD或VBAT上电将引发备份区域复位。 时钟 三种不同的时钟源可被用来驱动系统时钟(SYSCLK): ● HSI振荡器时钟 ● HSE振荡器时钟 ● PLL时钟 这些设备有以下2种二级时钟源: ● 40kHz低速内部RC(LSI RC)振荡器,可以用于驱动独立看门狗,或通过程序选择驱动 RTC,用于从停机/待机模式下自动唤醒系统。 ● 也可以通过程序选择32.768kHz低速外部晶体(LSE晶体)用来驱动RTC(RTCCLK)。 当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。 79/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) 图11 时钟树 STM32F10xxx参考手册 1.当HSI被用于作为PLL时钟的输入时,系统时钟能得到的最大频率是36MHz。 2.对于内部和外部时钟源的特性,请参考相应产品数据手册中“电气特性”章节。 高级时钟控制器拥有3个PLL,为使用外部晶体或振荡器提供了高度的灵活性,使得核心和外设 能够工作在最高的频率,同时保证以太网和全速的USB OTG能够有合适的时钟。 一个单一的25MHz晶体可以为整个系统和所有包括以太网和全速USB OTG的外设提供时钟。为 了实现高质量的音频性能,可以使用一个音频晶体;这样,I2S的主时钟可以产生所有从8kHz至 96kHz之间的标准采样频率,而误差小于0.5%。 更多关于以太网、全速USB OTG和/或I2S(音频)时钟配置的需求,请参考互联型产品数据手册 的“附录A 应用框图”。 用 户 可 通 过 多 个 预 分 频 器 配 置 AHB 、 高 速 APB(APB2) 和 低 速 APB(APB1) 域 的 频 率 。 AHB 和 APB2域的最大频率是72MHz。APB1域的最大允许频率是36MHz。 除去以下情况,所有外设的时钟都是从系统时钟(SYSCLK)得到: ● Flash存储器编程接口时钟始终是HSI时钟。 80/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 ● 全速USB OTG的48MHz时钟是从PCC VCO时钟(2xPLLCLK),和随后可编程预分频器(除3 或除2)得到,这是通过RCC_CFGR寄存器的OTGFSPRE位控制。为了正常地操作USB全 速OTG,应该配置PLL输出72MHz或48MHz。 ● I2S2和I2S3的时钟还可以从PLL3 VCO时钟(2xPLL3CLK)得到,这是通过RCC_CFGR2寄 存器的I2SxSRC位控制。更多有关PLL3的内容和如何配置I2S时钟,以得到高质量的音频效 果,请参阅第23.4.3节:时钟发生器。 ● 以太网MAC的时钟(TX、RX和RMII)是由外部PHY提供。更多有关以太网配置的详情,请见 第27.4.4节:MII/RMII的选择。 当使用以太网模块时,AHB时钟频率必须至少为25MHz。 RCC通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。通过对SysTick 控制与状态寄存器的设置,可选择上述时钟或Cortex(HCLK)时钟作为SysTick时钟。ADC时钟 由高速APB2时钟经2、4、6或8分频后获得。 定时器时钟频率分配由硬件按以下2种情况自动设置: 1. 如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。 2. 否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。 FCLK是Cortex™-M3的自由运行时钟。详情见ARM的Cortex™-M3 r1p1 技术参考手册(TRM)。 7.2.1 HSE时钟 高速外部时钟信号(HSE)由以下两种时钟源产生: ● HSE外部晶体/陶瓷谐振器 ● HSE用户外部时钟 为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容器必须尽可能地靠 近振荡器引脚。负载电容值必须根据所选择的振荡器来调整。 图12 HSE/LSE时钟源 硬件配置 外部时钟 晶体/陶瓷谐振器 外部时钟源(HSE旁路) 在这个模式里,必须提供外部时钟。它的频率最高可达50MHz。用户可通过设置在时钟控制寄 存器中的HSEBYP和HSEON位来选择这一模式。外部时钟信号(50%占空比的方波、正弦波或 三角波)必须连到SOC_IN引脚,同时保证OSC_OUT引脚悬空。见图12。 外部晶体/陶瓷谐振器(HSE晶体) 3~25Mz外部振荡器可为系统提供非常精确的主时钟。相关的硬件配置可参考图12,进一步信息 可参考数据手册的电气特性部分。 81/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 在时钟控制寄存器(RCC_CR)中的HSERDY位用来指示高速外部振荡器是否稳定。在启动时, 直到这一位被硬件置’1’,时钟才被释放出来。如果在时钟中断寄存器(RCC_CIR)中允许产生中 断,将会产生相应中断。 HSE晶体可以通过设置时钟控制寄存器(RCC_CR)中的HSEON位被启动和关闭。 7.2.2 HSI时钟 HSI时钟信号由内部8MHz的RC振荡器产生,可直接作为系统时钟或在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节时钟安全系统(CSS)。 7.2.3 PLL 主PLL以下述时钟源之一为输入,产生倍频的输出: ● HSI时钟除以2 ● HSE或通过一个可配置分频器的PLL2时钟 参见图11和时钟控制寄存器(RCC_CR)。 PLL2 和 PLL3 由 HSE 通 过 一 个 可 配 置 的 分 频 器 提 供 时 钟 。 参 见 图 11 和 时 钟 配 置 寄 存 器 2(RCC_CFGR2)。 必须在使能每个PLL之前完成PLL的配置(选择时钟源、预分频系数和倍频系数等),同时应该在 它们的输入时钟稳定(就绪位)后才能使能。一旦使能了PLL,这些参数将不能再被改变。 当改变主PLL的输入时钟源时,必须在选中了新的时钟源(通过时钟配置寄存器(RCC_CFGR)的 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)里的LSEBYP和LSEON位来选择这个模式。具有50%占空比的外部时钟信号(方 波、正弦波或三角波)必须连到OSC32_IN引脚,同时保证OSC32_OUT引脚悬空,见图12。 82/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 7.2.5 LSI时钟 LSI RC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和 自动唤醒单元提供时钟。LSI时钟频率大约40kHz(在30kHz和60kHz之间)。进一步信息请参考数 据手册中有关电气特性部分。 LSI RC可以通过控制/状态寄存器(RCC_CSR)里的LSION位来启动或关闭。 在控制/状态寄存器(RCC_CSR)里的LSIRDY位指示低速内部振荡器是否稳定。在启动阶段,直 到这个位被硬件设置为’1’后,此时钟才被释放。如果在时钟中断寄存器(RCC_CIR)里被允许, 将产生LSI中断申请。 LSI校准 可以通过校准内部低速振荡器LSI来补偿其频率偏移,从而获得精度可接受的RTC时间基数,以 及独立看门狗(IWDG)的超时时间(当这些外设以LSI为时钟源)。 校准可以通过使用TIM5的输入时钟(TIM5_CLK)测量LSI时钟频率实现。测量以HSE的精度为保 证,软件可以通过调整RTC的20位预分频器来获得精确的RTC时钟基数,以及通过计算得到精 确的独立看门狗(IWDG)的超时时间。 LSI校准步骤如下: 1. 打开TIM5,设置通道4为输入捕获模式; 2. 设置AFIO_MAPR的TIM5_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™-M3的NMI中断(不可屏蔽中断)。 一旦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/128、LSE或LSI时钟提供。除非备份域复位,此选择不能被改变。 LSE时钟在备份域里,但HSE和LSI时钟不是。因此: 83/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 ● 如果LSE被选为RTC时钟: ─ 只要VBAT维持供电,尽管VDD供电被切断,RTC仍继续工作。 ● 如果LSI被选为自动唤醒单元(AWU)时钟: ─ 如果VDD供电被切断, AWU状态不能被保证。有关LSI校准,详见7.2.5节: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 ● 除2的PLL时钟 ● PLL2时钟 ● PLL3时钟除以2 ● XT1外部3~25MHz振荡器(用于以太网) ● PLL3时钟(用于以太网) 在MCO上输出的时钟必须小于50MHz(这是I/O端口的最大速度)。 时钟的选择由时钟配置寄存器(RCC_CFGR)中的MCO[3:0]位控制。 84/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 7.3 RCC寄存器 请参考第1章中有关寄存器描述中用到的缩写。 7.3.1 时钟控制寄存器(RCC_CR) 偏移地址: 0x00 复位值: 0x000 XX83,X代表未定义 访问: 无等待状态, 字, 半字 和字节访问 31 30 29 28 27 26 25 24 23 保留 PLL3 PLL3 PLL2 PLL2 RDY ON RDY ON PLL RDY PLLON r rw r rw r rw 15 14 13 12 11 10 9 8 7 HSICAL[7:0] r r r r r r r r rw 22 21 20 保留 654 HSITRIM[4:0] rw rw rw 19 18 17 16 CSS HSE HSE HSE ON BYP RDY ON rw rw r rw 3210 保留 HSI RDY HSION rw r rw 位31:30 位29 位28 位27 位26 位25 位24 位23:20 保留,始终读为0。 PLL3RDY:PLL3时钟就绪标志 (PLL3 clock ready flag) PLL3锁定后由硬件置’1’。 0:PLL3未锁定; 1:PLL3锁定。 PLL3ON:PLL3使能 (PLL3 enable) 由软件置’1’或清零以开启或关闭PLL3。 当进入待机和停止模式时,该位由硬件清零。 0:PLL3关闭; 1:PLL3使能。 PLL2RDY:PLL2时钟就绪标志 (PLL2 clock ready flag) PLL2锁定后由硬件置’1’。 0:PLL2未锁定; 1:PLL2锁定。 PLL2ON:PLL2使能 (PLL2 enable) 由软件置’1’或清零以开启或关闭PLL2。 当进入待机和停止模式时,该位由硬件清零。当PLL2时钟被间接地作为系统时钟时(即它被用 作PLL时钟的输入,最终被用于系统时钟),该位不能被清零。 0:PLL2关闭; 1:PLL2使能。 PLLRDY:PLL时钟就绪标志 (PLL clock ready flag) PLL锁定后由硬件置’1’。 0:PLL未锁定; 1:PLL锁定。 PLLON:PLL使能 (PLL enable) 由软件置’1’或清零以开启或关闭PLL。 当进入待机和停止模式时,该位由硬件清零。当PLL时钟被用作或被选择将要作为系统时钟 时,该位不能被清零。在清除这个位之前,软件必须先关闭全速USB OTG的时钟。 0:PLL关闭; 1:PLL使能。 保留,始终读为0。 85/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位19 位18 位17 位16 位15:8 位7:3 位2 位1 位0 CSSON:时钟安全系统使能 (Clock security system enable) 由软件置’1’或清零以使能时钟监测器。 0:时钟监测器关闭; 1:如果外部3-25MHz振荡器就绪,时钟监测器开启。 HSEBYP:外部高速时钟旁路 (External high-speed clock bypass) 在调试模式下由软件置’1’或清零来旁路外部晶体振荡器。只有在外部3-25MHz振荡器关闭的情 况下,才能写入该位。 0:外部3-25MHz振荡器没有旁路; 1:外部3-25MHz外部晶体振荡器被旁路。 HSERDY:外部高速时钟就绪标志 (External high-speed clock ready flag) 由硬件置’1’来指示外部3-25MHz振荡器已经稳定。在HSEON位清零后,该位需要6个外部325MHz时钟周期清零。 0:外部3-25MHz时钟没有就绪; 1:外部3-25MHz时钟就绪。 HSEON:外部高速时钟使能 (External high-speed clock enable) 由软件置’1’或清零。 当进入待机和停止模式时,该位由硬件清零,关闭外部3-25MHz振荡器。当外部3-25MHz振荡 器被用作或被选择将要作为系统时钟时,该位不能被清零。 0:HSE振荡器关闭; 1:HSE振荡器开启。 HSICAL[7:0]:内部高速时钟校准 (Internal high-speed clock calibration) 在系统启动时,这些位被自动初始化 HSITRIM[4:0]:内部高速时钟调整 (Internal high-speed clock trimming) 由软件写入来调整内部高速时钟,它们被叠加在HSICAL[5:0]数值上。 这些位在HSICAL[7:0]的基础上,让用户可以输入一个调整数值,根据电压和温度的变化调整 内部HSI RC振荡器的频率。 默认数值为16,可以把HSI调整到8MHz±1%;每步HSICAL的变化调整约40kHz。 保留,始终读为0。 HSIRDY:内部高速时钟就绪标志 (Internal high-speed clock ready flag) 由硬件置’1’来指示内部8MHz振荡器已经稳定。在HSION位清零后,该位需要6个内部8MHz振 荡器周期清零。 0:内部8MHz振荡器没有就绪; 1:内部8MHz振荡器就绪。 HSION:内部高速时钟使能 (Internal high-speed clock enable) 由软件置’1’或清零。 当从待机和停止模式返回或用作系统时钟的外部3-25MHz振荡器发生故障时,该位由硬件置’1’ 来启动内部8MHz的RC振荡器。当内部8MHz振荡器被直接或间接地用作或被选择将要作为系 统时钟时,该位不能被清零。 0:内部8MHz振荡器关闭; 1:内部8MHz振荡器开启。 7.3.2 时钟配置寄存器(RCC_CFGR) 偏移地址: 0x04 复位值: 0x0000 0000 访问: 0到2个等待周期,字,半字和字节访问 只有当访问发生在时钟切换时,才会插入1或2个等待周期。 86/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 MCO[3:0] 保留 OTGFS PRE PLLMUL[3:0] PLL PLL XTPRE SRC 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 ADCPRE[1:0] PPRE2[2:0] PPRE1[2:0] HPRE[3:0] SWS[1:0] SW[1:0] rw rw rw rw rw rw rw rw rw rw rw rw r r rw rw 位31:28 位27:24 位22 位21:18 位17 位16 保留,始终读为0。 MCO: 微控制器时钟输出 (Microcontroller clock output) 由软件置’1’或清零。 00xx:没有时钟输出; 0100:系统时钟(SYSCLK)输出; 0101:内部8MHz的RC振荡器时钟输出; 0110:外部3-25MHz振荡器时钟输出; 0111:PLL时钟2分频后输出。 1000:PLL2时钟输出 1001:PLL3时钟2分频后输出。 1010:XT1外部3-25MHz振荡器时钟输出(为以太网) 1011:PLL3时钟输出(为以太网) 注意:- 该时钟输出在启动和切换MCO时钟源时可能会被截断。 - 在系统时钟作为输出至MCO引脚时,请保证输出时钟频率不超过50MHz (I/O口最高频率) OTGFSPRE:全速USB OTG预分频 (USB OTG FS prescaler) 由软件置’1’或清’0’来产生48MHz的全速USB OTG时钟。在RCC_APB1ENR寄存器中使能全速 OTG时钟之前,必须保证该位已经有效。如果全速OTG时钟被使能,该位不能被清’0’。 0:PLL VCO时钟(2xPLLCLK)被除以3(必须配置PLL输出为72MHz); 1:PLL VCO时钟(2xPLLCLK)被除以2(必须配置PLL输出为48MHz)。 PLLMUL:PLL倍频系数 (PLL multiplication factor) 由软件设置来确定PLL倍频系数。只有在PLL关闭的情况下才可被写入。 000x:保留 10xx:保留 0010:PLL 4倍频输出 1100:保留 0011:PLL 5倍频输出 1101:PLL 6.5倍频输出 0100:PLL 6倍频输出 111x:保留 0101:PLL 7倍频输出 0110:PLL 8倍频输出 0111:PLL 9倍频输出 警告:PLL的输出频率绝对不能超过72MHz PLLXTPRE:PREDIV1分频因子的低位 (LSB of division factor PREDIV1) 由软件置’1’或清’0’来选择PREDIV1分频因子的最低位。这一位与RCC_CFGR2寄存器的位(0) 是同一位,因此修改RCC_CFGR2寄存器的位(0)同时会改变这一位。 如 果 RCC_CFGR2 寄 存 器 的 位 [3:1] 为 ’000’ , 则 该 位 控 制 PREDIV1 对 输 入 时 钟 进 行 2 分 频 (PLLXPRE=1),或不对输入时钟分频(PLLXPRE=0)。 只能在关闭PLL时才能写入此位。 PLLSRC:PLL输入时钟源 (PLL entry clock source) 由软件置’1’或清’0’来选择PLL输入时钟源。只能在关闭PLL时才能写入此位。 0:HSI振荡器时钟经2分频后作为PLL输入时钟 1:PREDIV1输出作为PLL输入时钟。 注:当改变主PLL的输入时钟源时,必须在选定了新的时钟源后才能关闭原来的时钟源。 87/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位15:14 位13:11 位10:8 位7:4 位3:2 位1:0 ADCPRE[1:0]:ADC预分频 (ADC prescaler) 由软件置’1’或清’0’来确定ADC时钟频率 00:PCLK2 2分频后作为ADC时钟 01:PCLK2 4分频后作为ADC时钟 10:PCLK2 6分频后作为ADC时钟 11:PCLK2 8分频后作为ADC时钟 PPRE2[2:0]:高速APB预分频(APB2) (APB high-speed prescaler (APB2)) 由软件置’1’或清’0’来控制高速APB2时钟(PCLK2)的预分频系数。 0xx:HCLK不分频 100:HCLK 2分频 101:HCLK 4分频 110:HCLK 8分频 111:HCLK 16分频 PPRE1[2:0]:低速APB预分频(APB1) (APB low-speed prescaler (APB1)) 由软件置’1’或清’0’来控制低速APB1时钟(PCLK1)的预分频系数。 0xx:HCLK不分频 100:HCLK 2分频 101:HCLK 4分频 110:HCLK 8分频 111:HCLK 16分频 警告:软件必须保证APB1时钟频率不超过36MHz。 HPRE[3:0]: AHB预分频 (AHB Prescaler) 由软件置’1’或清’0’来控制AHB时钟的预分频系数。 0xxx:SYSCLK不分频 1000:SYSCLK 2分频 1100:SYSCLK 64分频 1001:SYSCLK 4分频 1101:SYSCLK 128分频 1010:SYSCLK 8分频 1110:SYSCLK 256分频 1011:SYSCLK 16分频 1111:SYSCLK 512分频 注意:当AHB时钟的预分频系数大于1时,必须开启预取缓冲器。详见闪存读取(第2.3.3节)。 警告:当使用以太网模块时,AHB的时钟频率必须至少为25MHz。 SWS[1:0]:系统时钟切换状态 (System clock switch status) 由硬件置’1’或清’0’来指示哪一个时钟源被作为系统时钟。 00:HSI作为系统时钟; 01:HSE作为系统时钟; 10:PLL输出作为系统时钟; 11:不可用。 SW:系统时钟切换 (System clock switch) 由软件置’1’或清’0’来选择系统时钟源(SYSCLK)。 在从停止或待机模式中返回时或直接或间接作为系统时钟的HSE出现故障时,由硬件强制选择 HSI作为系统时钟(如果时钟安全系统已经启动) 00:HSI作为系统时钟; 01:HSE作为系统时钟; 10:PLL输出作为系统时钟; 11:不可用。 7.3.3 时钟中断寄存器(RCC_CIR) 偏移地址: 0x08 复位值: 0x0000 0000 访问:无等待周期, 字, 半字 和字节访问 88/754 参照2009年12月 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 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 PLL3 PLL2 PLL RDYIE RDYIE RDYIE HSE HSI LSE RDYIE RDYIE RDYIE LSI RDYIE CSSF PLL3 RDYF PLL2 RDYF PLL RDYF HSE RDYF HSI RDYF LSE RDYF LSI RDYF rw rw rw rw rw rw rw r r r r r r r r 位31:24 位23 位22 位21 位20 位19 位18 位17 位16 位15 位14 保留,始终读为0。 CSSC:清除时钟安全系统中断 (Clock security system interrupt clear) 由软件置’1’来清除CSSF安全系统中断标志位CSSF。 0:无作用; 1:清除CSSF安全系统中断标志位。 PLL3RDYC:清除PLL3就绪中断 (PLL3 ready interrupt clear) 由软件置’1’来清除PLL3就绪中断标志位PLL3RDYF。 0:无作用; 1:清除PLL3就绪中断标志位PLL3RDYF。 PLL2RDYC:清除PLL2就绪中断 (PLL2 ready interrupt clear) 由软件置’1’来清除PLL2就绪中断标志位PLL2RDYF。 0:无作用; 1:清除PLL2就绪中断标志位PLL2RDYF。 PLLRDYC:清除PLL就绪中断 (PLL ready interrupt clear) 由软件置’1’来清除PLL就绪中断标志位PLLRDYF。 0:无作用; 1:清除PLL就绪中断标志位PLLRDYF。 HSERDYC:清除HSE就绪中断 (HSE ready interrupt clear) 由软件置’1’来清除HSE就绪中断标志位HSERDYF。 0:无作用; 1:清除HSE就绪中断标志位HSERDYF。 HSIRDYC: 清除HSI就绪中断 (HSI ready interrupt clear) 由软件置’1’来清除HSI就绪中断标志位HSIRDYF。 0:无作用; 1:清除HSI就绪中断标志位HSIRDYF。 LSERDYC:清除LSE就绪中断 (LSE ready interrupt clear) 由软件置’1’来清除LSE就绪中断标志位LSERDYF。 0:无作用; 1:清除LSE就绪中断标志位LSERDYF。 LSIRDYC:清除LSI就绪中断 (LSI ready interrupt clear) 由软件置’1’来清除LSI就绪中断标志位LSIRDYF。 0:无作用; 1:清除LSI就绪中断标志位LSIRDYF。 保留,始终读为0。 PLL3RDYIE:PLL3就绪中断使能 (PLL3 ready interrupt enable) 由软件置’1’或清’0’来使能或关闭PLL3就绪中断。 0:PLL3就绪中断关闭; 1:PLL3就绪中断使能。 89/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位13 位12 位11 位10 位9 位8 位7 位6 位5 位4 位3 PLL2RDYIE:PLL2就绪中断使能 (PL2L ready interrupt enable) 由软件置’1’或清’0’来使能或关闭PLL2就绪中断。 0:PLL2就绪中断关闭; 1:PLL2就绪中断使能。 PLLRDYIE:PLL就绪中断使能 (PLL ready interrupt enable) 由软件置’1’或清’0’来使能或关闭PLL就绪中断。 0:PLL就绪中断关闭; 1:PLL就绪中断使能。 HSERDYIE:HSE就绪中断使能 (HSE ready interrupt enable) 由软件置’1’或清’0’来使能或关闭外部3-25MHz振荡器就绪中断。 0:HSE就绪中断关闭; 1:HSE就绪中断使能。 HSIRDYIE:HSI就绪中断使能 (HSI ready interrupt enable) 由软件置’1’或清’0’来使能或关闭内部8MHz RC振荡器就绪中断。 0:HSI就绪中断关闭; 1:HSI就绪中断使能。 LSERDYIE:LSE就绪中断使能 (LSE ready interrupt enable) 由软件置’1’或清’0’来使能或关闭外部32kHz RC振荡器就绪中断。 0:LSE就绪中断关闭; 1:LSE就绪中断使能。 LSIRDYIE:LSI就绪中断使能 (LSI ready interrupt enable) 由软件置’1’或清’0’来使能或关闭内部40kHz RC振荡器就绪中断。 0:LSI就绪中断关闭; 1:LSI就绪中断使能。 CSSF:时钟安全系统中断标志 (Clock security system interrupt flag) 在外部4-25MHz振荡器时钟出现故障时,由硬件置’1’。 由软件通过置’1’ CSSC位来清除。 0:无HSE时钟失效产生的安全系统中断; 1:HSE时钟失效导致了时钟安全系统中断。 PLL3RDYF:PLL3就绪中断标志 (PLL3 ready interrupt flag) 在PLL3就绪且PLL3RDYIE位被置’1’时,由硬件置’1’。 由软件通过置’1’ PLL3RDYC位来清除。 0:无PLL3上锁产生的时钟就绪中断; 1:PLL3上锁导致时钟就绪中断。 PLL2RDYF:PLL2就绪中断标志 (PLL2 ready interrupt flag) 在PLL3就绪且PLL2RDYIE位被置’1’时,由硬件置’1’。 由软件通过置’1’ PLL2RDYC位来清除。 0:无PLL2上锁产生的时钟就绪中断; 1:PLL2上锁导致时钟就绪中断。 PLLRDYF:PLL就绪中断标志 (PLL ready interrupt flag) 在PLL就绪且PLLRDYIE位被置’1’时,由硬件置’1’。 由软件通过置’1’ PLLRDYC位来清除。 0:无PLL上锁产生的时钟就绪中断; 1:PLL上锁导致时钟就绪中断。 HSERDYF:HSE就绪中断标志 (HSE ready interrupt flag) 在外部低速时钟就绪且HSERDYIE位被置’1’时,由硬件置’1’。 由软件通过置’1’ HSERDYC位来清除。 0:无外部3-25MHz振荡器产生的时钟就绪中断; 1:外部3-25MHz振荡器导致时钟就绪中断。 90/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) 位2 HSIRDYF:HSI就绪中断标志 (HSI ready interrupt flag) 在内部高速时钟就绪且HSIRDYIE位被置’1’时,由硬件置’1’。 由软件通过置’1’ HSIRDYC位来清除。 0:无内部8MHz RC振荡器产生的时钟就绪中断; 1:内部8MHz RC振荡器导致时钟就绪中断。 位1 LSERDYF:LSE就绪中断标志 (LSE ready interrupt flag) 在外部低速时钟就绪且LSERDYIE位被置’1’时,由硬件置’1’。 由软件通过置’1’ LSERDYC位来清除。 0:无外部32kHz振荡器产生的时钟就绪中断; 1:外部32kHz振荡器导致时钟就绪中断。 位0 LSIRDYF:LSI就绪中断标志 (LSI ready interrupt flag) 在内部低速时钟就绪且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 保留 STM32F10xxx参考手册 19 18 17 16 15 14 13 12 11 10 9 保留 USART1 RST 保留 SPI1 RST TIM1 RST ADC2 RST ADC1 RST rw rw rw rw rw 87 保留 6543210 IOPE RST IOPD RST IOPC RST IOPB RST IOPA RST 保留 AFIO RST rw rw rw rw rw rw 位31:15 位14 位13 位12 位11 位10 保留,始终读为0。 USART1RST:USART1复位 (USART1 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位USART1。 保留,始终读为0。 SPI1RST:SPI1复位 (SPI 1 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位SPI1。 TIM1RST:TIM1定时器复位 (TIM1 timer reset) 由软件置’1’或清’0’ 0:无作用; 1:复位TIM1定时器。 ADC2RST:ADC2接口复位 (ADC 2 interface reset) 由软件置’1’或清’0’ 0:无作用; 1:复位ADC2接口。 91/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位9 位8:7 位6 位5 位4 位3 位2 位1 位0 ADC1RST:ADC1接口复位 (ADC 1 interface reset) 由软件置’1’或清’0’ 0:无作用; 1:复位ADC1接口。 保留,始终读为0。 IOPERST:IO端口E复位 (IO port E reset) 由软件置’1’或清’0’ 0:无作用; 1:复位IO端口E。 IOPDRST:IO端口D复位 (IO port D reset) 由软件置’1’或清’0’ 0:无作用; 1:复位IO端口D。 IOPCRST:IO端口C复位 (IO port C reset) 由软件置’1’或清’0’ 0:无作用; 1:复位IO端口C。 IOPBRST:IO端口B复位 (IO port B reset) 由软件置’1’或清’0’ 0:无作用; 1:复位IO端口B。 IOPARST:IO端口A复位 (IO port A reset) 由软件置’1’或清’0’ 0:无作用; 1:复位IO端口A。 保留,始终读为0。 AFIORST:辅助功能IO复位 (Alternate function I/O reset) 由软件置’1’或清’0’ 0:无作用; 1:复位辅助功能。 7.3.5 APB1 外设复位寄存器(RCC_APB1RSTR) 偏移地址:0x10 复位值:0x0000 0000 访问:无等待周期,字, 半字和字节访问 31 30 29 28 27 26 25 24 23 保留 DACRST PWR RST rw rw 15 14 13 12 BKP CAN2 CAN1 RST RST RST rw rw rw 11 10 9 保留 87 SPI3 SPI2 RST RST 保留 WWDG RST 保留 rw rw rw 22 21 20 19 18 17 16 I2C2 RST I2C1 RST UART5R UART4R USART3 USART2 ST ST RST RST 保留 rw rw rw rw rw rw 6 5 4 3 2 1 0 TIM7 TIM6 TIM5 TIM4 TIM3 TIM2 RST RST RST RST RST RST rw rw rw rw rw rw 位31:30 位29 保留,始终读为0。 DACRST:DAC接口复位 (DAC interface reset) 由软件置’1’或清’0’ 0:无作用; 1:复位DAC接口。 92/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) 位28 位27 位26 位25 位24:23 位22 位21 位20 位19 位18 位17 位16 位15 PWRRST:电源接口复位 (Power interface reset) 由软件置’1’或清’0’ 0:无作用; 1:复位电源接口。 BKPRST:备份接口复位 (Backup interface reset) 由软件置’1’或清’0’ 0:无作用; 1:复位备份接口。 CAN2RST:CAN2复位 (CAN2 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位CAN2。 CAN1RST:CAN1复位 (CAN1 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位CAN1。 保留,始终读为0。 I2C2RST:I2C 2复位 (I2C 2 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位I2C 2。 I2C1RST:I2C 1复位 (I2C 1 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位I2C 1。 UART5RST:UART5复位 (UART 5 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位UART5。 UART4RST:UART4复位 (UART 4 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位UART4。 USART3RST:USART3复位 (USART 3 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位USART3。 USART2RST:USART2复位 (USART 2 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位USART2。 保留,始终读为0。 SPI3RST SPI3 复位 (SPI 3 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位SPI3。 STM32F10xxx参考手册 93/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位14 位13:12 位11 位10:6 位5 位4 位3 位2 位1 位0 SPI2RST:SPI2复位 (SPI 2 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位SPI2。 保留,始终读为0。 WWDGRST:窗口看门狗复位 (Window watchdog reset) 由软件置’1’或清’0’ 0:无作用; 1:复位窗口看门狗。 保留,始终读为0。 TIM7RST:定时器7复位 (Timer 7 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位TIM7定时器。 TIM6RST:定时器6复位 (Timer 6 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位TIM6定时器。 TIM5RST:定时器5复位 (Timer 5 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位TIM5定时器。 TIM4RST:定时器4复位 (Timer 4 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位TIM4定时器。 TIM3RST:定时器3复位 (Timer 3 reset) 由软件置’1’或清’0’ 0:无作用; 1:复位TIM3定时器。 TIM2RST:定时器2复位 (Timer 2 reset) 由软件置’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 15 14 13 12 11 ETHMAC ETH TXEN MACEN 保留 OTG FSEN rw rw rw 保留 ETHMAC RXEN rw 10 9 8 7 6 5 4 3 2 1 0 保留 CRCEN 保留 FLITF EN 保留 SRAM EN DMA2 EN DMA1 EN rw rw rw rw rw 位31:17 保留,始终读为0。 94/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位16 位15 位14 位13 位12 位11:7 位6 位5 位4 位3 位2 位1 位0 ETHMACRXEN:以太网MAC接收时钟使能 (Ethernet MAC RX clock enable) 由软件置’1’或清’0’。 0:以太网MAC接收时钟关闭; 1:以太网MAC接收时钟开启。 注:在RMII模式下,如果使能了这个时钟,MAC的RMII时钟也被使能。 ETHMACTXEN:以太网MAC发送时钟使能 (Ethernet MAC TX clock enable) 由软件置’1’或清’0’。 0:以太网MAC发送时钟关闭; 1:以太网MAC发送时钟开启。 注:在RMII模式下,如果使能了这个时钟,MAC的RMII时钟也被使能。 ETHMACEN:以太网MAC时钟使能 (Ethernet MAC TX clock enable) 由软件置’1’或清’0’。在使能MAC时钟之前必须先选定PHY接口(MII/RMII)。 0:以太网MAC时钟关闭; 1:以太网MAC时钟开启。 保留,始终读为0。 OTGFSEN:全速USB OTG时钟使能 (USB OTG FS clock enable) 由软件置’1’或清’0’。 0:全速USB OTG时钟关闭; 1:全速USB OTG时钟开启。 保留,始终读为0。 CRCEN:CRC时钟使能 (CRC clock enable) 由软件置’1’或清’0’。 0:CRC时钟关闭; 1:CRC时钟开启。 保留,始终读为0。 FLITFEN:闪存接口电路时钟使能 (FLITF clock enable) 由软件置’1’或清’0’来开启或关闭睡眠模式时闪存接口电路时钟。 0:睡眠模式时闪存接口电路时钟关闭; 1:睡眠模式时闪存接口电路时钟开启。 保留,始终读为0。 SRAMEN:SRAM时钟使能 (SRAM interface clock enable) 由软件置’1’或清’0’来开启或关闭睡眠模式时SRAM时钟。 0:睡眠模式时SRAM时钟关闭; 1:睡眠模式时SRAM时钟开启。 DMA2EN:DMA2时钟使能 (DMA2 clock enable) 由软件置’1’或清’0’。 0:DMA2时钟关闭; 1:DMA2时钟开启。 DMA1EN:DMA1时钟使能 (DMA1 clock enable) 由软件置’1’或清’0’。 0:DMA1时钟关闭; 1:DMA1时钟开启。 7.3.7 APB2 外设时钟使能寄存器(RCC_APB2ENR) 偏移地址:0x18 复位值:0x0000 0000 访问:字,半字和字节访问 通常无访问等待周期。但在APB2总线上的外设被访问时,将插入等待状态直到APB2的外设访 问结束。 95/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 15 14 13 12 11 10 9 保留 USART1 EN 保留 SPI1 EN TIM1 EN ADC2 EN ADC1 EN rw rw rw rw rw 87 保留 6543210 IOPE EN IOPD EN IOPC EN IOPB EN IOPA EN 保留 AFIO EN rw rw rw rw rw rw 位31:15 位14 位13 位12 位11 位10 位9 位8:7 位6 位5 位4 位3 保留,始终读为0。 USART1EN:USART1时钟使能 (USART1 clock enable) 由软件置’1’或清’0’ 0:USART1时钟关闭; 1:USART1时钟开启。 保留,始终读为0。 SPI1EN:SPI1时钟使能 (SPI 1 clock enable) 由软件置’1’或清’0’ 0:SPI1时钟关闭; 1:SPI1时钟开启。 TIM1EN:TIM1定时器时钟使能 (TIM1 Timer clock enable) 由软件置’1’或清’0’ 0:TIM1定时器时钟关闭; 1:TIM1定时器时钟开启。 ADC2EN:ADC2接口时钟使能 (ADC 2 interface clock enable) 由软件置’1’或清’0’ 0:ADC2接口时钟关闭; 1:ADC2接口时钟开启。 ADC1EN:ADC1接口时钟使能 (ADC 1 interface clock enable) 由软件置’1’或清’0’ 0:ADC1接口时钟关闭; 1:ADC1接口时钟开启。 保留,始终读为0。 IOPEEN:IO端口E时钟使能 (I/O port E clock enable) 由软件置’1’或清’0’ 0:IO端口E时钟关闭; 1:IO端口E时钟开启。 IOPDEN:IO端口D时钟使能 (I/O port D clock enable) 由软件置’1’或清’0’ 0:IO端口D时钟关闭; 1:IO端口D时钟开启。 IOPCEN:IO端口C时钟使能 (I/O port C clock enable) 由软件置’1’或清’0’ 0:IO端口C时钟关闭; 1:IO端口C时钟开启。 IOPBEN:IO端口B时钟使能 (I/O port B clock enable) 由软件置’1’或清’0’ 0:IO端口B时钟关闭; 1:IO端口B时钟开启。 96/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位2 IOPAEN:IO端口A时钟使能 (I/O port A clock enable) 由软件置’1’或清’0’ 0:IO端口A时钟关闭; 1:IO端口A时钟开启。 位1 保留,始终读为0。 位0 AFIOEN:辅助功能IO时钟使能 (Alternate function I/O clock enable) 由软件置’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 CAN2 CAN1 EN EN EN 保留 I2C2 EN I2C1 EN UART5 UART4 USART3 USART2 EN EN EN 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 SPI2 EN EN 保留 WWDG EN 保留 TIM7 TIM6 TIM5 TIM4 TIM3 TIM2 EN EN EN EN EN EN rw rw rw rw rw rw rw rw rw 位31:30 保留,始终读为0。 位29 DACEN: DAC接口时钟使能 (DAC interface clock enable) 由软件置’1’或清’0’ 0:DAC接口时钟关闭; 1:DAC接口时钟开启。 位28 PWREN:电源接口时钟使能 (Power interface clock enable) 由软件置’1’或清’0’ 0:电源接口时钟关闭; 1:电源接口时钟开启。 位27 BKPEN:备份接口时钟使能 (Backup interface clock enable) 由软件置’1’或清’0’ 0:备份接口时钟关闭; 1:备份接口时钟开启。 位26 CAN2EN:CAN2时钟使能 (CAN2 clock enable) 由软件置’1’或清’0’ 0:CAN2时钟关闭; 1:CAN2时钟开启。 位25 CAN1EN:CAN1时钟使能 (CAN1 clock enable) 由软件置’1’或清’0’ 0:CAN1时钟关闭; 1:CAN1时钟开启。 位24:23 保留,始终读为0。 97/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位22 位21 位20 位19 位18 位17 位16 位15 位14 位13:12 位11 位10:6 位5 位4 I2C2EN:I2C 2时钟使能 (I2C 2 clock enable) 由软件置’1’或清’0’ 0:I2C 2时钟关闭; 1:I2C 2时钟开启。 I2C1EN:I2C 1时钟使能 (I2C 1 clock enable) 由软件置’1’或清’0’ 0:I2C 1时钟关闭; 1:I2C 1时钟开启。 UART5EN:UART5时钟使能 (UART 5 clock enable) 由软件置’1’或清’0’ 0:UART5时钟关闭; 1:UART5时钟开启。 UART4EN:UART4时钟使能 (UART 4 clock enable) 由软件置’1’或清’0’ 0:UART4时钟关闭; 1:UART4时钟开启。 USART3EN:USART3时钟使能 (USART 3 clock enable) 由软件置’1’或清’0’ 0:USART3时钟关闭; 1:USART3时钟开启。 USART2EN:USART2时钟使能 (USART 2 clock enable) 由软件置’1’或清’0’ 0:USART2时钟关闭; 1:USART2时钟开启。 保留,始终读为0。 SPI3EN:SPI 3时钟使能 (SPI 3 clock enable) 由软件置’1’或清’0’ 0:SPI 3时钟关闭; 1:SPI 3时钟开启。 SPI2EN:SPI 2时钟使能 (SPI 2 clock enable) 由软件置’1’或清’0’ 0:SPI 2时钟关闭; 1:SPI 2时钟开启。 保留,始终读为0。 WWDGEN:窗口看门狗时钟使能 (Window watchdog clock enable) 由软件置’1’或清’0’ 0:窗口看门狗时钟关闭; 1:窗口看门狗时钟开启。 保留,始终读为0。 TIM7EN:定时器7时钟使能 (Timer 7 clock enable) 由软件置’1’或清’0’ 0:定时器7时钟关闭; 1:定时器7时钟开启。 TIM6EN:定时器6时钟使能 (Timer 6 clock enable) 由软件置’1’或清’0’ 0:定时器6时钟关闭; 1:定时器6时钟开启。 98/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位3 TIM5EN:定时器5时钟使能 (Timer 5 clock enable) 由软件置’1’或清’0’ 0:定时器5时钟关闭; 1:定时器5时钟开启。 位2 TIM4EN:定时器4时钟使能 (Timer 4 clock enable) 由软件置’1’或清’0’ 0:定时器4时钟关闭; 1:定时器4时钟开启。 位1 TIM3EN:定时器3时钟使能 (Timer 3 clock enable) 由软件置’1’或清’0’ 0:定时器3时钟关闭; 1:定时器3时钟开启。 位0 TIM2EN:定时器2时钟使能 (Timer 2 clock enable) 由软件置’1’或清’0’ 0:定时器2时钟关闭; 1:定时器2时钟开启。 7.3.9 备份域控制寄存器(RCC_BDCR) 注意: 偏移地址:0x20 复位值:0x0000 0000,只能由备份域复位有效复位 访问:0到3等待周期,字、半字和字节访问 当连续对该寄存器进行访问时,将插入等待状态。 备份域控制寄存器中(RCC_BDCR)的LSEON、LSEBYP、RTCSEL和RTCEN位处于备份域。因 此,这些位在复位后处于写保护状态,只有在电源控制寄存器(PWR_CR)中的DBP位置’1’后才 能对这些位进行改动。进一步信息请参考5.1节。这些位只能由备份域复位清除(见7.1.3节)。任 何内部或外部复位都不会影响这些位。 位31:17 位16 位15 位14:10 位9:8 位7:3 位2 保留,始终读为0。 BDRST:备份域软件复位 (Backup domain software reset) 由软件置’1’或清’0’ 0:复位未激活; 1:复位整个备份域。 RTCEN:RTC时钟使能 (RTC clock enable) 由软件置’1’或清’0’ 0:RTC时钟关闭; 1:RTC时钟开启。 保留,始终读为0。 RTCSEL[1:0]:RTC时钟源选择 (RTC clock source selection) 由软件设置来选择RTC时钟源。一旦RTC时钟源被选定,直到下次后备域被复位,它不能在被 改变。可通过设置BDRST位来清除。 00:无时钟; 01:LSE振荡器作为RTC时钟; 10:LSI振荡器作为RTC时钟; 11:HSE振荡器在128分频后作为RTC时钟。 保留,始终读为0。 LSEBYP:外部低速时钟振荡器旁路 (External low-speed oscillator bypass) 在调试模式下由软件置’1’或清’0’来旁路LSE。只有在外部32kHz振荡器关闭时,才能写入该位 0:LSE时钟未被旁路; 1:LSE时钟被旁路。 99/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位1 LSERDY:外部低速LSE就绪 (External low-speed oscillator ready) 由硬件置’1’或清’0’来指示是否外部32kHz振荡器就绪。在LSEON被清零后,该位需要6个外部 低速振荡器的周期才被清零。 0:外部32kHz振荡器未就绪; 1:外部32kHz振荡器就绪。 位0 LSEON:外部低速振荡器使能 (External low-speed oscillator enable) 由软件置’1’或清’0’ 0:外部32kHz振荡器关闭; 1:外部32kHz振荡器开启。 7.3.10 控制/状态寄存器(RCC_CSR) 31 LPWR RSTF rw 15 偏移地址:0x24 复位值:0x0C00 0000,除复位标志外由系统复位清除,复位标志只能由电源复位清除。 访问:0到3等待周期,字、半字和字节访问 当连续对该寄存器进行访问时,将插入等待状态。 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 WWDG RSTF IWDG RSTF SFT RSTF POR RSTF PIN RSTF 保留 RMVF 保留 rw rw rw rw rw rw 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 LSI RDY LSION r rw 位31 LPWRRSTF:低功耗复位标志 (Low-power reset flag) 在低功耗管理复位发生时由硬件置’1’;由软件通过写RMVF位清除。 0:无低功耗管理复位发生; 1:发生低功耗管理复位. 关于低功耗管理复位的详细信息,请参考7.1.1节的”低功耗管理复位”。 位30 WWDGRSTF:窗口看门狗复位标志 (Window watchdog reset flag) 在窗口看门狗复位发生时由硬件置’1’;由软件通过写RMVF位清除。 0:无窗口看门狗复位发生; 1:发生窗口看门狗复位。 位29 IWDGRSTF:独立看门狗复位标志 (Independent watchdog reset flag) 在独立看门狗复位发生在VDD区域时由硬件置’1’;由软件通过写RMVF位清除。 0:无独立看门狗复位发生; 1:发生独立看门狗复位。 位28 SFTRSTF:软件复位标志 (Software reset flag) 在软件复位发生时由硬件置’1’;由软件通过写RMVF位清除。 0:无软件复位发生; 1:发生软件复位。 位27 PORRSTF:上电/掉电复位标志 (POR/PDR reset flag) 在上电/掉电复位发生时由硬件置’1’;由软件通过写RMVF位清除。 0:无上电/掉电复位发生; 1:发生上电/掉电复位。 位26 PINRSTF:NRST引脚复位标志 (PIN reset flag) 在NRST引脚复位发生时由硬件置’1’;由软件通过写RMVF位清除。 0:无NRST引脚复位发生; 1:发生NRST引脚复位。 位25 保留,读操作返回0 100/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位24 位23:2 位1 位0 RMVF:清除复位标志 (Remove reset flag) 由软件置’1’来清除复位标志。 0:无作用; 1:清除复位标志。 保留,读操作返回0 LSIRDY:内部低速振荡器就绪 (Internal low-speed oscillator ready) 由硬件置’1’或清’0’来指示内部40kHz RC振荡器是否就绪。在LSION清零后,3个内部40kHz RC振荡器的周期后LSIRDY被清零。 0:内部40kHz RC振荡器时钟未就绪; 1:内部40kHz RC振荡器时钟就绪。 LSION:内部低速振荡器使能 (Internal low-speed oscillator enable) 由软件置’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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 ETHMAC RST 保留 OTGFS RST rw rw 保留 位31:15 保留,读操作返回0 位14 ETHMACRST:以太网MAC复位 (Ethernet MAC reset) 由软件置’1’或清’0’。 0:无作用; 1:复位以太网MAC模块。 位13 保留,读操作返回0 位12 OTGFSRST:全速USB OTG复位 (USB OTG FS reset) 由软件置’1’或清’0’。 0:无作用; 1:复位全速USB OTG模块。 位11:0 保留,读操作返回0 7.3.12 时钟配置寄存器 2(RCC_CFGR2) 偏移地址:0x2C 复位值:0x0000 0000 访问:无等待周期,字、半字和字节访问 101/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 I2S3 I2S2 PREDI SRC SRC V1SRC rw rw rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PLL3MUL[3:0] PLL2MUL[3:0] PREDIV2[3:0] PREDIV1[3:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:19 位18 位17 位16 位15:12 位11:8 位7:4 保留,读操作返回0 I2S3SRC:I2S3时钟源 (I2S3 clock source) 由软件置’1’或清’0’以选择I2S3的时钟源。在使能I2S3的时钟之前必须先选择好这一位。 0:系统时钟(SYSCLK)作为I2S3的时钟; 1:PLL3 VCO时钟作为I2S3的时钟。 I2S2SRC:I2S2时钟源 (I2S2 clock source) 由软件置’1’或清’0’以选择I2S2的时钟源。在使能I2S2的时钟之前必须先选择好这一位。 0:系统时钟(SYSCLK)作为I2S2的时钟; 1:PLL3 VCO时钟作为I2S2的时钟。 PREDIV1SRC:PREDIV1输入时钟源 (PREDIV1 entry clock source) 由软件置’1’或清’0’以选择PREDIV1的时钟源。只有在关闭PLL时,才能写这一位。 0:HSE振荡器时钟作为PREDIV1的时钟源; 1:PLL2作为PREDIV1的时钟源。 PLL3MUL[3:0]:PLL3倍频因子 (PLL3 Multiplication Factor) 这些位由软件设置以选择PLL3的倍频因子。只有在关闭PLL3时,才能写这些位。 00xx:保留 1010:PLL3 12倍频输出 010x:保留 1011:PLL3 13倍频输出 0110:PLL3 8倍频输出 1100:PLL3 14倍频输出 0111:PLL3 9倍频输出 1101:保留 1000:PLL3 10倍频输出 1110:PLL3 16倍频输出 1001:PLL3 11倍频输出 1111:PLL3 20倍频输出 PLL2MUL[3:0]:PLL2倍频因子 (PLL2 Multiplication Factor) 这些位由软件设置以选择PLL2的倍频因子。只有在关闭PLL2时,才能写这些位。 00xx:保留 1010:PLL2 12倍频输出 010x:保留 1011:PLL2 13倍频输出 0110:PLL2 8倍频输出 1100:PLL2 14倍频输出 0111:PLL2 9倍频输出 1101:保留 1000:PLL2 10倍频输出 1110:PLL2 16倍频输出 1001:PLL2 11倍频输出 1111:PLL2 20倍频输出 PREDIV2[3:0]:PREDIV2分频因子 (PREDIV2 division factor) 这些位由软件设置以选择PREDIV2的分频因子。只有在关闭PLL2和PLL3时,才能写这些位。 0000:PREDIV2不对输入时钟分频 1000:PREDIV2对输入时钟9分频 0001:PREDIV2对输入时钟2分频 1001:PREDIV2对输入时钟10分频 0010:PREDIV2对输入时钟3分频 1010:PREDIV2对输入时钟11分频 0011:PREDIV2对输入时钟4分频 1011:PREDIV2对输入时钟12分频 0100:PREDIV2对输入时钟5分频 1100:PREDIV2对输入时钟13分频 0101:PREDIV2对输入时钟6分频 1101:PREDIV2对输入时钟14分频 0110:PREDIV2对输入时钟7分频 1110:PREDIV2对输入时钟15分频 0111:PREDIV2对输入时钟8分频 1111:PREDIV2对输入时钟16分频 102/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 31 30 PLL3RDY 29 PLL3ON 28 PLL2RDY 27 PLL2ON 26 PLLRDY 25 PLLON 24 23 22 21 20 CSSON 19 HSEBYP 18 HSERDY 17 HSEON 16 15 14 13 12 11 10 9 8 7 6 5 4 3 保留 2 HSIRDY 1 HSION 0 互联型产品的复位和时钟控制(RCC) STM32F10xxx参考手册 位3:0 PREDIV1[3:0]:PREDIV1分频因子 (PREDIV1 division factor) 这些位由软件设置以选择PREDIV1的分频因子。只有在关闭PLL时,才能写这些位。 注:位(0)与RCC_CFGR寄存器的位(17)相同,修改RCC_CFGR寄存器的位(17)会同时改变这 里的位(0)。 0000:PREDIV1不对输入时钟分频 1000:PREDIV1对输入时钟9分频 0001:PREDIV1对输入时钟2分频 1001:PREDIV1对输入时钟10分频 0010:PREDIV1对输入时钟3分频 1010:PREDIV1对输入时钟11分频 0011:PREDIV1对输入时钟4分频 1011:PREDIV1对输入时钟12分频 0100:PREDIV1对输入时钟5分频 1100:PREDIV1对输入时钟13分频 0101:PREDIV1对输入时钟6分频 1101:PREDIV1对输入时钟14分频 0110:PREDIV1对输入时钟7分频 1110:PREDIV1对输入时钟15分频 0111:PREDIV1对输入时钟8分频 1111:PREDIV1对输入时钟16分频 7.3.13 RCC寄存器地址映像 下表列出了RCC寄存器的映像和复位值。 表16 RCC寄存器地址映像和复位值 偏移 寄存器 000h RCC_CR 保留 复位值 000000 004h RCC_CFGR 复位值 保留 MCO[2:0] 0000 保留 OTGFSPRE PLLXTPRE PLLSRC SWS[1:0] SW[1:0] 保留 HSICAL[7:0] HSITRIM[4:0] 0000xxxxxxxx10000 11 PLLMUL[3:0] ADC PRE [1:0] PRRE2 [2:0] PRRE1 [2:0] HPRE[3:0] 00000000000000000000000 008h RCC_CIR 复位值 保留 保 留 00000000 000000000000000 00Ch RCC_APB2RSTR 保留 保 留 保留 复位值 0 0000 00000 0 010h RCC_APB1RSTR 保留 保留 保留 保留 复位值 00000 000000 00 0 000000 014h RCC_AHBENR 复位值 018h RCC_APB2ENR 复位值 保留 保留 保留 000 0 0 1 100 保留 0 0000 00000 0 CSSC PLL3RDYC PLL2RDYC PLLRDYC HSERDYC HSIRDYC LSERDYC LSIRDYC PLL3RDYIE PLL2RDYIE PLLRDYIE HSERDYIE HSIRDYIE LSERDYIE LSIRDYIE CSSF PLL3RDYF PLL2RDYF PLLRDYF HSERDYF HSIRDYF LSERDYF LSIRDYF USART1RST SPIRST TIM1RST ADC2RST ADC1RST IOPERST IOPDRST IOPCRST IOPBRST IOPARST 保留 AFIORST DACRST PWRRST BKPRST CAN2RST CAN1RST I2C2RST I2C1RST UART5RST UART4RST USART3RST USART2RST 保留 SPI3RST SPI2RST WWDGRST TIM7RST TIM6RST TIM5RST TIM4RST TIM3RST TIM2RST ETHMACRXEN ETHMACTXEN ETHMACEN 保留 OTGFSEN CRCEN 保留 FLITFEN 保留 SRAMEN DMA2EN DMA1EN USART1EN 保留 SPI1EN TIM1EN ADC2EN ADC1EN IOPEEN IOPDEN IOPCEN IOPBEN IOPAEN 保留 AFIOEN 103/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 TIM2EN 0 BDRST RTCEN LSEBYP LSERDYF LSEON LPWRRSTF WWDGRSTF IWDGRSTF SFTRSTF PORRSTF PINRSTF 保留 RMVF LSIRDY LSION 互联型产品的复位和时钟控制(RCC) 偏移 寄存器 9 8 7 6 STM32F10xxx参考手册 TIM3EN 1 TIM4EN 2 TIM5EN 3 TIM6EN 4 TIM7EN 5 10 WWDGEN 11 12 13 SPI2EN 14 SPI3EN 15 16 USART2EN 17 USART3EN 18 UART4EN 19 UART5EN 20 I2C1EN 21 I2C2EN 22 23 24 CAN1EN 25 CAN2EN 26 BKPEN 27 PWREN 28 DACRST 29 30 31 01Ch RCC_APB1ENR 保留 保留 复位值 00000 000000 保留 保留 00 0 RCC_BDCR 020h 复位值 保留 保留 00 保留 RTC SEL [1:0] 00 000000 保留 000 024h RCC_CSR 保留 复位值 0 0 0 0 1 1 0 00 ETHMACRST 保留 OTGFSRST 028h RCC_AHBRSTR 复位值 保留 028h RCC_AHBRSTR 保留 复位值 有关寄存器的起始地址,请参考表1。 I2S3SRC I2S2SRC PREDIV1SRC 保留 00 PLL3MUL [3:0] PLL2MUL [3:0] PREDIV2 [3:0] PREDIV1 [3:0] 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 104/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 8 通用和复用功能I/O(GPIO和AFIO) 8.1 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。 GPIO功能描述 每 个 GPI/O 端 口 有 两 个 32 位 配 置 寄 存 器 (GPIOx_CRL , GPIOx_CRH) , 两 个 32 位 数 据 寄 存 器 (GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存 器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。 根据数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置 成多种模式。 ─ 输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入 ─ 开漏输出 ─ 推挽式输出 ─ 推挽式复用功能 ─ 开漏复用功能 每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访 问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这 样,在读和更改访问之间产生IRQ时不会发生危险。 下图给出了一个I/O端口位的基本结构。 图13 I/O端口位的基本结构 105/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O 图14 5伏兼容I/O端口位的基本结构 STM32F10xxx参考手册 (1) VDD_FT 对5伏容忍I/O脚是特殊的,它与VDD不同 表17 端口位配置表 配置模式 CNF1 CNF0 推挽(Push-Pull) 0 通用输出 0 开漏(Open-Drain) 1 复用功能 推挽(Push-Pull) 0 输出 开漏(Open-Drain) 1 1 输入 模拟输入 浮空输入 下拉输入 上拉输入 0 0 1 1 0 MODE1 MODE0 01 10 11 见表18 00 PxODR寄存器 0或1 0或1 不使用 不使用 不使用 不使用 0 1 表18 输出模式位 MODE[1:0] 00 01 10 11 意义 保留 最大输出速度为10MHz 最大输出速度为2MHz 最大输出速度为50MHz 8.1.1 通用I/O(GPIO) 复 位 期 间 和 刚 复 位 后 , 复 用 功 能 未 开 启 , I/O 端 口 被 配 置 成 浮 空 输 入 模 式 (CNFx[1:0]=01b , MODEx[1:0]=00b)。 复位后,JTAG引脚被置于输入上拉或下拉模式: ─ PA15:JTDI置于上拉模式 ─ PA14:JTCK置于下拉模式 ─ PA13:JTMS置于上拉模式 ─ PB4: JNTRST置于上拉模式 106/754 参照2009年12月 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节:外部中断/事件控制器(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状态 107/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O 下图给出了I/O端口位的输入配置 图15 输入浮空/上拉/下拉配置 STM32F10xxx参考手册 (1) VDD_FT 对5伏容忍I/O脚是特殊的,它与VDD不同 8.1.8 输出配置 当I/O端口被配置为输出时: ● 输出缓冲器被激活 ─ 开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高阻状态(PMOS从不被激活)。 ─ 推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将激活P-MOS。 ● 施密特触发输入被激活 ● 弱上拉和下拉电阻被禁止 ● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器 ● 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态 ● 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。 下图给出了I/O端口位的输出配置。 图16 输出配置 (1) VDD_FT 对 5 伏兼容 I/O 脚是特殊的,它与 VDD 不同 108/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 8.1.9 复用功能配置 当I/O端口被配置为复用功能时: ● 在开漏或推挽式配置中,输出缓冲器被打开 ● 内置外设的信号驱动输出缓冲器(复用功能输出) ● 施密特触发输入被激活 ● 弱上拉和下拉电阻被禁止 ● 在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器 ● 开漏模式时,读输入数据寄存器时可得到I/O口状态 ● 在推挽模式时,读输出数据寄存器时可得到最后一次写的值 下图示出了I/O端口位的复用功能配置。详见8.4节-AFIO寄存器描述。 一组复用功能I/O寄存器允许用户把一些复用功能重新映象到不同的引脚。 图17 复用功能配置 (1) VDD_FT 对5伏兼容I/O脚是特殊的,它与VDD不同 8.1.10 模拟输入配置 当I/O端口被配置为模拟输入配置时: ● 输出缓冲器被禁止; ● 禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置 为’0’; ● 弱上拉和下拉电阻被禁止; ● 读取输入数据寄存器时数值为’0’。 下图示出了I/O端口位的高阻抗模拟输入配置: 109/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O 图18 高阻抗的模拟输入配置 STM32F10xxx参考手册 (1) VDD_FT 对5伏兼容I/O脚是特殊的,它与VDD不同 8.1.11 外设的GPIO配置 下列表格列出了各个外设的引脚配置。 表19 高级定时器TIM1/TIM8 TIM1/TIM8引脚 配置 TIM1/8_CHx 输入捕获通道x 输出比较通道x TIM1/8_CHxN 互补输出通道x TIM1/8_BKIN 刹车输入 TIM1/8_ETR 外部触发时钟输入 表20 通用定时器TIM2/3/4/5 TIM2/3/4/5引脚 配置 TIM2/3/4/5_CHx 输入捕获通道x 输出比较通道x TIM2/3/4/5_ETR 外部触发时钟输入 表21 USART USART引脚 USARTx_TX USARTx_RX USARTx_CK USARTx_RTS USARTx_CTS 配置 全双工模式 半双工同步模式 全双工模式 半双工同步模式 同步模式 硬件流量控制 硬件流量控制 GPIO配置 浮空输入 推挽复用输出 推挽复用输出 浮空输入 浮空输入 GPIO配置 浮空输入 推挽复用输出 浮空输入 GPIO配置 推挽复用输出 推挽复用输出 浮空输入或带上拉输入 未用,可作为通用I/O 推挽复用输出 推挽复用输出 浮空输入或带上拉输入 110/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 表22 SPI SPI引脚 SPIx_SCK SPIx_MOSI SPIx_MISO SPIx_NSS 配置 主模式 从模式 全双工模式/主模式 全双工模式/从模式 简单的双向数据线/主模式 简单的双向数据线/从模式 全双工模式/主模式 全双工模式/从模式 简单的双向数据线/主模式 简单的双向数据线/从模式 硬件主/从模式 硬件主模式/NSS输出使能 软件模式 GPIO配置 推挽复用输出 浮空输入 推挽复用输出 浮空输入或带上拉输入 推挽复用输出 未用,可作为通用I/O 浮空输入或带上拉输入 推挽复用输出 未用,可作为通用I/O 推挽复用输出 浮空输入或带上拉输入或带下拉输入 推挽复用输出 未用,可作为通用I/O 表23 I2S I2S引脚 I2Sx_WS I2Sx_CK I2Sx_SD I2Sx_MCK 主模式 从模式 主模式 从模式 发送器 接收器 主模式 从模式 配置 GPIO配置 推挽复用输出 浮空输入 推挽复用输出 浮空输入 推挽复用输出 浮空输入或带上拉输入或带下拉输入 推挽复用输出 未用,可作为通用I/O 表24 I2C接口 I2C引脚 I2Cx_SCL I2Cx_SDA I2C时钟 I2C数据 配置 GPIO配置 开漏复用输出 开漏复用输出 表25 BxCAN BxCAN引脚 CAN_TX CAN_RX 推挽复用输出 浮空输入或带上拉输入 GPIO配置 表26 USB(1) USB引脚 GPIO配置 USB_DM / USB_DP 一旦使能了USB模块,这些引脚会自动连接到内部USB收发器 1.本表内容只适用于小容量、中容量和大容量产品。 表27 全速USB OTG引脚配置(1) OTG_FS引脚 配置 主机 GPIO配置 如果使用此引脚,则为推挽复用输出 OTG_FS_SOF 设备 如果使用此引脚,则为推挽复用输出 OTG 如果使用此引脚,则为推挽复用输出 111/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 主机 浮空输入 OTG_FS_VBUS(2) 设备 浮空输入 OTG 浮空输入 主机 如果软件选择了强置主机模式(OTG_FS_GUSBCFG寄存 器的FHMOD位),则不需要此引脚。 OTG_FS_ID 设备 如果软件选择了强置设备模式(OTG_FS_GUSBCFG寄存 器的FHMOD位),则不需要此引脚。 OTG 上拉输入 主机 由USB断电自动控制 OTG_FS_DM 设备 由USB断电自动控制 OTG 由USB断电自动控制 主机 由USB断电自动控制 OTG_FS_DP 设备 由USB断电自动控制 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引脚 ADC/DAC 模拟输入 GPIO配置 表30 FSMC FSMC引脚 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 推挽复用输出 推挽复用输出 推挽复用输出 推挽复用输出 浮空输入或带上拉输入 浮空输入 推挽复用输出 推挽复用输出 GPIO配置 112/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 表31 其它I/O功能 引脚 TAMPER-RTC MCO EXTI输入线 复用功能 RTC输出 侵入事件输入 时钟输出 外部中断输入 GPIO配置 当 配 置 BKP_CR 和 BKP_RTCCR 寄 存 器时,由硬件强制设置 推挽复用输出 浮空输入或带上拉输入或带下拉输入 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 CNF7[1:0] MODE7[1:0] CNF6[1:0] MODE6[1:0] CNF5[1:0] MODE5[1:0] CNF4[1:0] MODE4[1:0] 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 CNF3[1:0] MODE3[1:0] CNF2[1:0] MODE2[1:0] CNF1[1:0] MODE1[1:0] CNF0[1:0] MODE0[1:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:30 27:26 23:22 19:18 15:14 11:10 7:6 3:2 位29:28 25:24 21:20 17:16 13:12 9:8, 5:4 1:0 CNFy[1:0]:端口x配置位(y = 0…7) (Port x configuration bits) 软件通过这些位配置相应的I/O端口,请参考表17端口位配置表。 在输入模式(MODE[1:0]=00): 00:模拟输入模式 01:浮空输入模式(复位后的状态) 10:上拉/下拉输入模式 11:保留 在输出模式(MODE[1:0]>00): 00:通用推挽输出模式 01:通用开漏输出模式 10:复用功能推挽输出模式 11:复用功能开漏输出模式 MODEy[1:0]:端口x的模式位(y = 0…7) (Port x mode bits) 软件通过这些位配置相应的I/O端口,请参考表17端口位配置表。 00:输入模式(复位后的状态) 01:输出模式,最大速度10MHz 10:输出模式,最大速度2MHz 11:输出模式,最大速度50MHz 113/754 参照2009年12月 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 CNF15[1:0] MODE15[1:0] CNF14[1:0] MODE14[1:0] CNF13[1:0] MODE13[1:0] CNF12[1:0] MODE12[1:0] 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 CNF11[1:0] MODE11[1:0] CNF10[1:0] MODE10[1:0] CNF9[1:0] MODE9[1:0] CNF8[1:0] MODE8[1:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:30 27:26 23:22 19:18 15:14 11:10 7:6 3:2 位9:28 25:24 21:20 17:16 13:12 9:8, 5:4 1:0 CNFy[1:0]:端口x配置位(y = 8…15) (Port x configuration bits) 软件通过这些位配置相应的I/O端口,请参考表17端口位配置表。 在输入模式(MODE[1:0]=00): 00:模拟输入模式 01:浮空输入模式(复位后的状态) 10:上拉/下拉输入模式 11:保留 在输出模式(MODE[1:0]>00): 00:通用推挽输出模式 01:通用开漏输出模式 10:复用功能推挽输出模式 11:复用功能开漏输出模式 MODEy[1:0]:端口x的模式位(y = 8…15) (Port x mode bits) 软件通过这些位配置相应的I/O端口,请参考表17端口位配置表。 00:输入模式(复位后的状态) 01:输出模式,最大速度10MHz 10:输出模式,最大速度2MHz 11:输出模式,最大速度50MHz 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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IDR15 IDR14 IDR13 IDR12 IDR11 IDR10 IDR9 IDR8 IDR7 IDR6 IDR5 IDR4 IDR3 IDR2 IDR1 IDR0 rrrrrrrrrrrrrrrr 位31:16 位15:0 保留,始终读为0。 IDRy[15:0]:端口输入数据(y = 0…15) (Port input data) 这些位为只读并只能以字(16位)的形式读出。读出的值为对应I/O口的状态。 114/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O 8.2.4 端口输出数据寄存器(GPIOx_ODR) (x=A..E) 地址偏移:0Ch 复位值:0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 保留 STM32F10xxx参考手册 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 位15:0 保留,始终读为0。 ODRy[15:0]:端口输出数据(y = 0…15) (Port output data) 这些位可读可写并只能以字(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 位31:16 位15:0 BRy: 清除端口x的位y (y = 0…15) (Port x Reset bit y) 这些位只能写入并只能以字(16位)的形式操作。 0:对对应的ODRy位不产生影响 1:清除对应的ODRy位为0 注:如果同时设置了BSy和BRy的对应位,BSy位起作用。 BSy: 设置端口x的位y (y = 0…15) (Port x Set bit y) 这些位只能写入并只能以字(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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 位31:16 位15:0 保留。 BRy: 清除端口x的位y (y = 0…15) (Port x Reset bit y) 这些位只能写入并只能以字(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 位15:0 保留。 LCKK:锁键 (Lock key) 该位可随时读出,它只可通过锁键写入序列修改。 0:端口配置锁键位激活 1:端口配置锁键位被激活,下次系统复位前GPIOx_LCKR寄存器被锁住。 锁键的写入序列: 写1 -> 写0 -> 写1 -> 读0 -> 读1 最后一个读可省略,但可以用来确认锁键已被激活。 注:在操作锁键的写入序列时,不能改变LCK[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/PC15,LSE功能始终优先于通用I/O口的功能。 1. 当关闭1.8V电压区(进入待机模式)或后备区域使用VBAT供电(不再有VDD供电)时,不能使用 PC14/PC15的GPIO口功能; 2.参见第4.1.2节有关I/O口使用的限制 116/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 8.3.2 把OSC_IN/OSC_OUT引脚作为GPIO端口PD0/PD1 注: 外部振荡器引脚OSC_IN/OSC_OUT可以用做GPIO的PD0/PD1,通过设置复用重映射和调试I/O 配置寄存器(AFIO_MAPR)实现。 这个重映射只适用于36、48和64脚的封装(100脚和144脚的封装上有单独的PD0和PD1的引 脚,不必重映射) 外部中断/事件功能没有被重映射。在36、48和64脚的封装上,PD0和PD1不能用来产生外部中 断/事件。 8.3.3 CAN1 复用功能重映射 CAN信号可以被映射到端口A、端口B或端口D上,如下表所示。对于端口D,在36、48和64脚 的封装上没有重映射功能。 表32 CAN1复用功能重映射 复用功能(1) CAN_REMAP[1:0]=”00” CAN_REMAP[1:0]=”10”(2) CAN_REMAP[1:0]=”11”(3) CAN1_RX 或 AN_RX PA11 PB8 PD0 CAN1_TX 或 AN_TX PA12 PB9 PD1 1. 在互联型产品中是CAN1_RX和CAN1_TX;在其它带有单个CAN接口的产品中是CAN_RX和CAN_TX。 2. 重映射不适用于36脚的封装 3. 当PD0和PD1没有被重映射到OSC_IN和OSC_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 调试接口信号 复用功能 JTMS/SWDIO JTCK/SWCLK JTDI JTDO/TRACESWO JNTRST TRACECK TRACED0 TRACED1 TRACED2 TRACED3 GPIO端口 PA13 PA14 PA15 PB3 PB4 PE2 PE3 PE4 PE5 PE6 为了在调试期间可以使用更多GPIOs,通过设置复用重映射和调试I/O配置寄存器(AFIO_MAPR) 的SWJ_CFG[2:0]位,可以改变上述重映像配置。参见下表。 117/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 表35 调试端口映像 SWJ_CFG [2:0] 可能的调试端口 000 完全SWJ(JTAG-DP + SW-DP) (复位状态) 001 完全SWJ(JTAG-DP + SW-DP) 但没有JNTRST 010 关闭JTAG-DP, 启用SW-DP 100 关闭JTAG-DP, 关闭SW-DP 其它 禁用 1. I/O 口只可在不使用异步跟踪时使用。 PA13/ JTMS/ SWDIO SWJ I/O引脚分配 PA14/ JTCK/ SWCLK PA15/ JTDI PB3/ JTDO/ TRACESWO PB4/ NJTRST I/O不可用 I/O不可用 I/O不可用 I/O不可用 I/O不可用 I/O不可用 I/O不可用 I/O不可用 I/O不可用 I/O可用 I/O不可用 I/O不可用 I/O可用 I/O可用(1) I/O可用 I/O可用 I/O可用 I/O可用 I/O可用 I/O可用 8.3.6 ADC复用功能重映射 参阅复用重映射和调试I/O配置寄存器(AFIO_MAPR)。 表36 ADC1外部触发注入转换复用功能重映射(1) 复用功能 ADC1_ETRGINJ_REMAP = 0 ADC1外部触发注入转换 ADC1外部触发注入转换与EXTI15相连 1. 重映射仅存在于大容量产品 表37 ADC1外部触发规则转换复用功能重映射(1) 复用功能 ADC1_ETRGREG_REMAP = 0 ADC1外部触发规则转换 ADC1外部触发规则转换与EXTI11相连 1. 重映射仅存在于大容量产品 表38 ADC2外部触发注入转换复用功能重映射(1) 复用功能 ADC2_ETRGINJ_REMAP = 0 ADC2外部触发注入转换 ADC2外部触发注入转换与EXTI15相连 1. 重映射仅存在于大容量产品 表39 ADC2外部触发规则转换复用功能重映射(1) 复用功能 ADC2_ETRGREG_REMAP = 0 ADC2外部触发规则转换 1. 重映射仅存在于大容量产品 ADC2外部触发规则转换与EXTI11相连 ADC1_ETRGINJ_REMAP = 1 ADC1外部触发注入转换与 TIM8_CH4相连 ADC1_ETRGREG_REMAP = 1 ADC1外部触发规则转换与 TIM8_TRGO相连 ADC2_ETRGINJ_REMAP = 1 ADC2外部触发注入转换与 TIM8_CH4相连 ADC2_ETRGREG_REMAP = 1 ADC2外部触发规则转换与 TIM8_TRGO相连 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 1.重映像只适用于大容量产品和互联型产品 LSI内部时钟连至TIM5_CH4的输入作为校准使用 118/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 表41 TIM4复用功能重映像 复用功能 TIM4_REMAP = 0 TIM4_CH1 PB6 TIM4_CH2 PB7 TIM4_CH3 PB8 TIM4_CH4 PB9 1. 重映像只适用于 100 和 144 脚的封装 表42 TIM3复用功能重映像 TIM4_REMAP = 1(1) PD12 PD13 PD14 PD15 复用功能 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. 重映像只适用于 64、100 和 144 脚的封装 表43 TIM2复用功能重映像 复用功能 TIM2_CH1_ETR(2) TIM2_REMAP[1:0] TIM2_REMAP[1:0] TIM2_REMAP[1:0] TIM2_REMAP[1:0] =00 =01 =10 =11 (没有重映像) (部分重映像) (部分重映像)(1) (完全重映像)(1) PA0 PA15 PA0 PA15 TIM2_CH2 TIM2_CH3 PA1 PB3 PA2 PA1 PB3 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_ETR PA12 TIM1_CH1 PA8 TIM1_CH2 PA9 TIM1_CH3 PA10 TIM1_CH4 PA11 TIM1_BKIN PB12(2) PA6 TIM1_CH1N PB13(2) PA7 TIM1_CH2N PB14(2) PB0 TIM1_CH3N PB15(2) PB1 1.重映像只适用于100和144脚的封装 2.重映像不适用于36脚的封装 TIM1_REMAP[1:0] = 11 (完全重映像)(1) PE7 PE9 PE11 PE13 PE14 PE15 PE8 PE10 PE12 8.3.8 USART复用功能重映射 参见复用重映射和调试I/O配置寄存器(AFIO_MAPR) 表45 USART3重映像 复用功能 USART3_REMAP[1:0] = 00 (没有重映像) USART3_TX PB10 USART3_REMAP[1:0] = 01 (部分重映像)(1) PC10 USART3_REMAP[1:0] = 11 (完全重映像)(2) PD8 119/754 参照2009年12月 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 1.重映像只适用于64、100和144脚的封装 2.重映像只适用于100和144脚的封装 PD12 表46 USART2重映像 复用功能 USART2_REMAP = 0 USART2_REMAP = 1(1) USART2_CTS PA0 PD3 USART2_RTS PA1 PD4 USART2_TX PA2 PD5 USART2_RX PA3 PD6 USART2_CK PA4 PD7 1.重映像只适用于100和144脚的封装 表47 USART1重映像 复用功能 USART1_REMAP = 0 USART1_REMAP = 1 USART1_TX PA9 PB6 USART1_RX PA10 PB7 8.3.9 I2C1 复用功能重映射 参见复用重映射和调试I/O配置寄存器(AFIO_MAPR)。 表48 I2C 1重映像 复用功能 I2C1_REMAP = 0 I2C1_SCL PB6 I2C1_SDA PB7 1. 重映像不适用于36脚封装 I2C1_REMAP = 1(1) PB8 PB9 8.3.10 SPI 1 复用功能重映射 参见复用重映射和调试I/O配置寄存器(AFIO_MAPR)。 表49 SPI1重映像 复用功能 SPI1_NSS SPI1_SCK SPI1_MISO SPI1_MOSI SPI1_REMAP = 0 PA4 PA5 PA6 PA7 SPI1_REMAP = 1 PA15 PB3 PB4 PB5 8.3.11 SPI3 复用功能重映射 参见复用重映射和调试I/O配置寄存器(AFIO_MAPR),这个重映射只适用于互联型产品。 表50 SPI3重映像 复用功能 SPI3_NSS SPI3_SCK SPI3_MISO SPI3_MOSI SPI3_REMAP = 0 PA15 PB3 PB4 PB5 SPI3_REMAP = 1 PA4 PC10 PC11 PC12 120/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 8.3.12 以太网复用功能重映射 参见复用重映射和调试I/O配置寄存器(AFIO_MAPR),以太网只出现在互联型产品。 表51 ETH重映像 复用功能 SPI3_REMAP = 0 SPI3_REMAP = 1 RX_DV-CRS_DV PA7 RXD0 PC4 RXD1 PC5 RXD2 PB0 RXD3 PB1 PD8 PD9 PD10 PD11 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 PORT[2:0] PIN[3:0] rw rw rw rw rw rw rw rw 位31:8 位7 位6:4 位3:0 保留。 EVOE:允许事件输出 (Event output enable) 该位可由软件读写。当设置该位后,Cortex的EVENTOUT将连接到由PORT[2:0]和PIN[3:0]选定 的I/O口。 PORT[2:0]:端口选择 (Port selection) 选择用于输出Cortex的EVENTOUT信号的端口: 000:选择PA 001:选择PB 010:选择PC 011:选择PD 100:选择PE PIN[3:0]:引脚选择(x=A…E) (Pin selection) 选择用于输出Cortex的EVENTOUT信号的引脚: 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 121/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O 小、中和大容量产品的寄存器映像和位定义 31 30 29 28 27 26 25 24 23 22 保留 SWJ_CFG[2:0] 保留 www 15 14 13 12 11 10 9 8 7 6 STM32F10xxx参考手册 21 20 19 18 17 16 ADC2_E ADC2_E ADC1_E ADC1_E TIM5CH TRGREG TRGINJ TRGREG TRGINJ 4_IREM _REMAP _REMAP _REMAP _REMAP AP 543210 PD01_ REMAP rw CAN_REMAP [1:0] rw rw 位31:27 位26:24 位23:21 位20 位19 位18 位17 位16 位15 TIM4_ TIM3_REMAP REMAP [1:0] TIM2_REMAP [1:0] TIM1_REMAP USART3_REMAP USART2 USART1 I2C1_ SPI1_ [1:0] [1:0] _REMAP _REMAP REMAP REMAP rw rw rw rw rw rw rw rw rw rw rw rw rw 保留。 SWJ_CFG[2:0]:串行线JTAG配置 (Serial wire JTAG configuration) 这些位只可由软件写(读这些位,将返回未定义的数值),用于配置SWJ和跟踪复用功能的I/O 口。SWJ(串行线JTAG)支持JTAG或SWD访问Cortex的调试端口。系统复位后的默认状态是启 用SWJ但没有跟踪功能,这种状态下可以通过JTMS/JTCK脚上的特定信号选择JTAG或SW(串 行线)模式。 000:完全SWJ(JTAG-DP + SW-DP):复位状态; 001:完全SWJ(JTAG-DP + SW-DP)但没有NJTRST; 010:关闭JTAG-DP,启用SW-DP; 100:关闭JTAG-DP,关闭SW-DP; 其它组合:无作用。 保留。 ADC2_ETRGREG_REMAP:ADC2规则转换外部触发重映射 (ADC 2 external trigger regular conversion remapping) 该位可由软件置’1’或置’0’。它控制与ADC2规则转换外部触发相连的触发输入。当该位置’0’ 时 , ADC2 规 则 转 换 外 部 触 发 与 EXTI11 相 连 ; 当 该 位 置 ’1’ 时 , ADC2 规 则 转 换 外 部 触 发 与 TIM8_TRGO相连。 ADC2_ETRGINJ_REMAP:ADC2注入转换外部触发重映射 (ADC 2 external trigger injected conversion remapping) 该位可由软件置’1’或置’0’。它控制与ADC2注入转换外部触发相连的触发输入。当该位置’0’ 时,ADC2注入转换外部触发与EXTI15相连;当该位置’1’时,ADC2注入转换外部触发与TIM8 通道4相连。 ADC1_ETRGREG_REMAP:ADC1规则转换外部触发重映射 (ADC 1 external trigger regular conversion remapping) 该位可由软件置’1’或置’0’。它控制与ADC2规则转换外部触发相连的触发输入。当该位置’0’ 时 , ADC1 规 则 转 换 外 部 触 发 与 EXTI11 相 连 ; 当 该 位 置 ’1’ 时 , ADC1 规 则 转 换 外 部 触 发 与 TIM8_TRGO相连。 ADC1_ETRGINJ_REMAP:ADC1注入转换外部触发重映射 (ADC 1 External trigger injected conversion remapping) 该位可由软件置’1’或置’0’。它控制与ADC2注入转换外部触发相连的触发输入。当该位置’0’ 时,ADC2注入转换外部触发与EXTI15相连;当该位置’1’时,ADC1注入转换外部触发与TIM8 通道4相连。 TIM5CH4_IREMAP:TIM5通道4内部重映射 (TIM5 channel4 internal remap) 该位可由软件置’1’或置’0’。它控制TIM5通道4内部映像。当该位置’0’时,TIM5_CH4与PA3相 连;当该位置’1’时,LSI内部振荡器与TIM5_CH4相连,目的是对LSI进行校准。 PD01_REMAP:端口D0/端口D1映像到OSC_IN/OSC_OUT (Port D0/Port D1 mapping on OSC_IN/OSC_OUT) 该位可由软件置’1’或置’0’。它控制PD0和PD1的GPIO功能映像。当不使用主振荡器HSE时(系 统运行于内部的8MHz阻容振荡器),PD0和PD1可以映像到OSC_IN和OSC_OUT引脚。此功能 只能适用于36、48和64引脚的封装(PD0和PD1出现在100脚和144脚的封装上,不必重映像)。 0:不进行PD0和PD1的重映像; 1:PD0映像到OSC_IN,PD1映像到OSC_OUT。 122/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 位14:13 位12 位11:10 位9:8 位7:6 位5:4 位3 位2 CAN_REMAP[1:0]:CAN复用功能重映像 (CAN alternate function remapping) 这些位可由软件置’1’或置’0’,在只有单个CAN接口的产品上控制复用功能CAN_RX和CAN_TX 的重映像。 00:CAN_RX映像到PA11,CAN_TX映像到PA12; 01:未用组合; 10:CAN_RX映像到PB8,CAN_TX映像到PB9(不能用于36脚的封装); 11:CAN_RX映像到PD0,CAN_TX映像到PD1。 TIM4_REMAP:定时器4的重映像 (TIM4 remapping) 该位可由软件置’1’或置’0’,控制将TIM4的通道1-4映射到GPIO端口上。 0:没有重映像(TIM4_CH1/PB6,TIM4_CH2/PB7,TIM4_CH3/PB8,TIM4_CH4/PB9); 1:完全映像(TIM4_CH1/PD12,TIM4_CH2/PD13,TIM4_CH3/PD14,TIM4_CH4/PD15)。 注:重映像不影响在PE0上的TIM4_ETR。 TIM3_REMAP[1:0]:定时器3的重映像 (TIM3 remapping) 这些位可由软件置’1’或置’0’,控制定时器3的通道1至4在GPIO端口的映像。 00:没有重映像(CH1/PA6,CH2/PA7,CH3/PB0,CH4/PB1); 01:未用组合; 10:部分映像(CH1/PB4,CH2/PB5,CH3/PB0,CH4/PB1); 11:完全映像(CH1/PC6,CH2/PC7,CH3/PC8,CH4/PC9)。 注:重映像不影响在PD2上的TIM3_ETR。 TIM2_REMAP[1:0]:定时器2的重映像 (TIM2 remapping) 这些位可由软件置’1’或置’0’,控制定时器2的通道1至4和外部触发(ETR)在GPIO端口的映像。 00:没有重映像(CH1/ETR/PA0,CH2/PA1,CH3/PA2,CH4/PA3); 01:部分映像(CH1/ETR/PA15,CH2/PB3,CH3/PA2,CH4/PA3); 10:部分映像(CH1/ETR/PA0,CH2/PA1,CH3/PB10,CH4/PB11); 11:完全映像(CH1/ETR/PA15,CH2/PB3,CH3/PB10,CH4/PB11)。 TIM1_REMAP[1:0]:定时器1的重映像 (TIM1 remapping) 这些位可由软件置’1’或置’0’,控制定时器1的通道1至4、1N至3N、外部触发(ETR)和刹车输入 (BKIN)在GPIO端口的映像。 00:没有重映像(ETR/PA12,CH1/PA8,CH2/PA9,CH3/PA10,CH4/PA11,BKIN/PB12, CH1N/PB13,CH2N/PB14,CH3N/PB15); 01:部分映像(ETR/PA12,CH1/PA8,CH2/PA9,CH3/PA10,CH4/PA11,BKIN/PA6, CH1N/PA7,CH2N/PB0,CH3N/PB1); 10: 未用组合; 11: 完全映像(ETR/PE7,CH1/PE9,CH2/PE11,CH3/PE13,CH4/PE14,BKIN/PE15, CH1N/PE8,CH2N/PE10,CH3N/PE12)。 USART3_REMAP[1:0]:USART3的重映像 (USART3 remapping) 这些位可由软件置’1’或置’0’,控制USART3的CTS、RTS、CK、TX和RX复用功能在GPIO端 口的映像。 00: 没有重映像(TX/PB10,RX/PB11,CK/PB12,CTS/PB13,RTS/PB14); 01: 部分映像(TX/PC10,RX/PC11,CK/PC12,CTS/PB13,RTS/PB14); 10: 未用组合; 11: 完全映像(TX/PD8,RX/PD9,CK/PD10,CTS/PD11,RTS/PD12)。 USART2_REMAP:USART2的重映像 (USART2 remapping) 这些位可由软件置’1’或置’0’,控制USART2的CTS、RTS、CK、TX和RX复用功能在GPIO端 口的映像。 0: 没有重映像(CTS/PA0,RTS/PA1,TX/PA2,RX/PA3,CK/PA4); 1: 重映像(CTS/PD3,RTS/PD4,TX/PD5,RX/PD6,CK/PD7); USART1_REMAP:USART1的重映像 (USART1 remapping) 该位可由软件置’1’或置’0’,控制USART1的TX和RX复用功能在GPIO端口的映像。 0: 没有重映像(TX/PA9,RX/PA10); 1: 重映像(TX/PB6,RX/PB7)。 123/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 位1 I2C1_REMAP:I2C1的重映像 (I2C1 remapping) 该位可由软件置’1’或置’0’,控制I2C1的SCL和SDA复用功能在GPIO端口的映像。 0: 没有重映像(SCL/PB6,SDA/PB7); 1: 重映像(SCL/PB8,SDA/PB9)。 位0 SPI1_REMAP:SPI1的重映像 该位可由软件置’1’或置’0’,控制SPI1的NSS、SCK、MISO和MOSI复用功能在GPIO端口的映 像。 0: 没有重映像(NSS/PA4,SCK/PA5,MISO/PA6,MOSI/PA7); 1: 重映像(NSS/PA15,SCK/PB3,MISO/PB4,MOSI/PB5)。 互联型产品的寄存器映像和位定义 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 PTP_PPS _REMAP TIM2ITR1 _IREMAP SPI3_ REMAP 保留 SWJ_CFG[2:0] MII_RM CAN2_ ETH_ II_SEL REMAP REMAP rw 15 14 rw rw ww 13 12 11 10 9 w rw rw rw 87654 保留 32 TIM5CH4 _IREMAP rw 10 PD01_ REMAP rw CAN1_REMAP [1:0] rw rw 位31 位30 位29 位28 位27 位26:24 TIM4_ TIM3_REMAP REMAP [1:0] TIM2_REMAP [1:0] TIM1_REMAP USART3_REMAP USART2 USART1 I2C1_ SPI1_ [1:0] [1:0] _REMAP _REMAP REMAP REMAP rw rw rw rw rw rw rw rw rw rw rw rw rw 保留。 PTP_PPS_REMAP:以太网PTP PPS重映射 (Ethernet PTP PPS remapping) 该位可由软件置’1’或置’0’。它允许以太网MAC的PPS_PTS输出到PB5引脚。 0:PTP_PPS不输出到PB5引脚; 1:PTP_PPS输出到PB5引脚。 注:该位只在互联型产品上有效,其它产品中为保留位。 TIM2ITR1_REMAP:TIM2内部触发1重映射 (TIM2 internal trigger 1 remapping) 该位可由软件置’1’或置’0’。它控制TIM2_ITR1的内部重映射。 0:为了校准的需要,在内部连接TIM2_ITR1至以太网的PTP输出; 1:为了校准的需要,在内部连接TIM2_ITR1至全速USB OTG的SOF(帧开始)输出。 注:该位只在互联型产品上有效,其它产品中为保留位。 SPI3_REMAP:SPI3重映射 (SPI3 remapping) 该位可由软件置’1’或置’0’。它控制SPI3的NSS、SCK、MISO、MOSI在GPIO端口的复用功 能。 0:没有重映射(NSS/PA15、SCK/PB3、MISO/PB4、MOSI/PB5); 1:重映射(NSS/PA4、SCK/PC10、MISO/PC11、MOSI/PC12)。 注:该位只在互联型产品上有效,其它产品中为保留位。 保留。 SWJ_CFG[2:0]:串行线JTAG配置 (Serial wire JTAG configuration) 这些位只能由软件写(读这些位,将返回未定义的数值),用于配置SWJ和跟踪复用功能的I/O 口。SWJ(串行线JTAG)支持JTAG或SWD访问Cortex的调试端口。系统复位后的默认状态是启 用SWJ但没有跟踪功能,这种状态下可以通过JTMS/JTCK脚上的特定信号选择JTAG或SW(串 行线)模式。 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 位23 位22 位21 位20:17 位16 位15 位14:13 位12 位11:10 位9:8 MII_RMII_SEL:MII或RMII选择 (MII or RMII selection) 该位可由软件置’1’或置’0’。它配置内部的以太网MAC使用外部的MII接口还是RMII接口的收发 器(PHY)。 0:配置以太网的MAC使用外部MII接口的收发器(PHY); 1:配置以太网的MAC使用外部RMII接口的收发器(PHY)。 注:该位只在互联型产品上有效,其它产品中为保留位。 CAN2_REMAP:CAN2的重映射 (CAN2 I/O remapping) 该位可由软件置’1’或置’0’。它控制CAN2_TX和CAN2_RX引脚的配置。 0:没有重映射(CAN2_RX/PB12、CAN2_TX/PB13) 1:重映射(CAN2_RX/PB5、CAN2_TX/PB6) 注:该位只在互联型产品上有效,其它产品中为保留位。 ETH_REMAP:以太网MAC的引脚配置 (Ethernet MAC I/O remapping) 该位可由软件置’1’或置’0’。它控制以太网MAC至外部收发器(PHY)的连接。 0:没有重映射(RX_DV-CRS_DV/PA7、RXD0/PC4、RXD1/PC5、RXD2/PB0、RXD3/PB1) 1:重映射(RX_DV-CRS_DV/PD8、RXD0/PD9、RXD1/PD10、RXD2/PD11、RXD3/PD12)。 注:该位只在互联型产品上有效,其它产品中为保留位。 保留。 TIM5CH4_IREMAP:TIM5通道4内部重映射 (TIM5 channel4 internal remap) 该位可由软件置’1’或置’0’。它控制TIM5通道4内部映像。当该位置’0’时,TIM5_CH4与PA3相 连;当该位置’1’时,LSI内部振荡器与TIM5_CH4相连,目的是对LSI进行校准。 PD01_REMAP:端口D0/端口D1映像到OSC_IN/OSC_OUT (Port D0/Port D1 mapping on OSC_IN/OSC_OUT) 该位可由软件置’1’或置’0’。它控制PD0和PD1的GPIO功能映像。当不使用主振荡器HSE时(系 统运行于内部的8MHz阻容振荡器),PD0和PD1可以映像到OSC_IN和OSC_OUT引脚。此功能 只能适用于36、48和64引脚的封装(PD0和PD1出现在100脚和144脚的封装上,不必重映像)。 0:不进行PD0和PD1的重映像; 1:PD0映像到OSC_IN,PD1映像到OSC_OUT。 CAN1_REMAP[1:0]:CAN1复用功能重映像 (CAN1 alternate function remapping) 这些位可由软件置’1’或置’0’,它控制复用功能CAN1_RX和CAN1_TX的重映像。 00:CAN1_RX映像到PA11,CAN1_TX映像到PA12; 01:未用组合; 10:CAN1_RX映像到PB8,CAN1_TX映像到PB9; 11:CAN1_RX映像到PD0,CAN1_TX映像到PD1。 TIM4_REMAP:定时器4的重映像 (TIM4 remapping) 该位可由软件置’1’或置’0’,控制将TIM4的通道1-4映射到GPIO端口上。 0:没有重映像(TIM4_CH1/PB6,TIM4_CH2/PB7,TIM4_CH3/PB8,TIM4_CH4/PB9); 1:完全映像(TIM4_CH1/PD12,TIM4_CH2/PD13,TIM4_CH3/PD14,TIM4_CH4/PD15)。 注:重映像不影响在PE0上的TIM4_ETR。 TIM3_REMAP[1:0]:TIM3的重映像 (TIM3 remapping) 这些位可由软件置’1’或置’0’,控制定时器3的通道1至4在GPIO端口的映像。 00:没有重映像(CH1/PA6,CH2/PA7,CH3/PB0,CH4/PB1); 01:未用组合; 10:部分映像(CH1/PB4,CH2/PB5,CH3/PB0,CH4/PB1); 11:完全映像(CH1/PC6,CH2/PC7,CH3/PC8,CH4/PC9)。 注:重映像不影响在PD2上的TIM3_ETR。 TIM2_REMAP[1:0]:TIM2的重映像 (TIM2 remapping) 这些位可由软件置’1’或置’0’,控制定时器2的通道1至4和外部触发(ETR)在GPIO端口的映像。 00:没有重映像(CH1/ETR/PA0,CH2/PA1,CH3/PA2,CH4/PA3); 01:部分映像(CH1/ETR/PA15,CH2/PB3,CH3/PA2,CH4/PA3); 10:部分映像(CH1/ETR/PA0,CH2/PA1,CH3/PB10,CH4/PB11); 11:完全映像(CH1/ETR/PA15,CH2/PB3,CH3/PB10,CH4/PB11)。 125/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 位7:6 位5:4 位3 位2 位1 位0 TIM1_REMAP[1:0]:TIM1的重映像 (TIM1 remapping) 这些位可由软件置’1’或置’0’,控制定时器1的通道1至4、1N至3N、外部触发(ETR)和刹车输入 (BKIN)在GPIO端口的映像。 00:没有重映像(ETR/PA12,CH1/PA8,CH2/PA9,CH3/PA10,CH4/PA11,BKIN/PB12, CH1N/PB13,CH2N/PB14,CH3N/PB15); 01:部分映像(ETR/PA12,CH1/PA8,CH2/PA9,CH3/PA10,CH4/PA11,BKIN/PA6, CH1N/PA7,CH2N/PB0,CH3N/PB1); 10: 未用组合; 11: 完全映像(ETR/PE7,CH1/PE9,CH2/PE11,CH3/PE13,CH4/PE14,BKIN/PE15, CH1N/PE8,CH2N/PE10,CH3N/PE12)。 USART3_REMAP[1:0]:USART3的重映像 (USART3 remapping) 这些位可由软件置’1’或置’0’,控制USART3的CTS、RTS、CK、TX和RX复用功能在GPIO端 口的映像。 00: 没有重映像(TX/PB10,RX/PB11,CK/PB12,CTS/PB13,RTS/PB14); 01: 部分映像(TX/PC10,RX/PC11,CK/PC12,CTS/PB13,RTS/PB14); 10: 未用组合; 11: 完全映像(TX/PD8,RX/PD9,CK/PD10,CTS/PD11,RTS/PD12)。 USART2_REMAP:USART2的重映像 (USART2 remapping) 这些位可由软件置’1’或置’0’,控制USART2的CTS、RTS、CK、TX和RX复用功能在GPIO端 口的映像。 0: 没有重映像(CTS/PA0,RTS/PA1,TX/PA2,RX/PA3,CK/PA4); 1: 重映像(CTS/PD3,RTS/PD4,TX/PD5,RX/PD6,CK/PD7); USART1_REMAP:USART1的重映像 (USART1 remapping) 该位可由软件置’1’或置’0’,控制USART1的TX和RX复用功能在GPIO端口的映像。 0: 没有重映像(TX/PA9,RX/PA10); 1: 重映像(TX/PB6,RX/PB7)。 I2C1_REMAP:I2C1的重映像 (I2C1 remapping) 该位可由软件置’1’或置’0’,控制I2C1的SCL和SDA复用功能在GPIO端口的映像。 0: 没有重映像(SCL/PB6,SDA/PB7); 1: 重映像(SCL/PB8,SDA/PB9)。 SPI1_REMAP:SPI1的重映像 该位可由软件置’1’或置’0’,控制SPI1的NSS、SCK、MISO和MOSI复用功能在GPIO端口的映 像。 0: 没有重映像(NSS/PA4,SCK/PA5,MISO/PA6,MOSI/PA7); 1: 重映像(NSS/PA15,SCK/PB3,MISO/PB4,MOSI/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 保留 15 14 13 12 11 10 9 8 EXTI3[3:0] EXTI2[3:0] rw rw rw rw rw rw rw rw 位31:16 保留。 7654 EXTI1[3:0] rw rw rw rw 3210 EXTI0[3:0] rw rw rw rw 126/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O STM32F10xxx参考手册 位15:0 EXTIx[3:0]:EXTIx配置(x = 0 … 3) (EXTI x configuration) 这些位可由软件读写,用于选择EXTIx外部中断的输入源。参看9.2.5节。 0000:PA[x]引脚 0100:PE[x]引脚 0001:PB[x]引脚 0101:PF[x]引脚 0010:PC[x]引脚 0110:PG[x]引脚 0011:PD[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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 EXTI7[3:0] EXTI6[3:0] EXTI5[3:0] EXTI4[3:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:16 位15:0 保留。 EXTIx[3:0]:EXTIx配置(x = 4 … 7) (EXTI x configuration) 这些位可由软件读写,用于选择EXTIx外部中断的输入源。 0000:PA[x]引脚 0100:PE[x]引脚 0001:PB[x]引脚 0101:PF[x]引脚 0010:PC[x]引脚 0110:PG[x]引脚 0011:PD[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 保留 15 14 13 12 11 10 9 8 7 6 5 4 EXTI11[3:0] EXTI10[3:0] EXTI9[3:0] rw rw rw rw rw rw rw rw rw rw rw rw 位31:16 保留。 位15:0 EXTIx[3:0]:EXTIx配置(x = 8 … 11) (EXTI x configuration) 这些位可由软件读写,用于选择EXTIx外部中断的输入源。 0000:PA[x]引脚 0100:PE[x]引脚 0001:PB[x]引脚 0101:PF[x]引脚 0010:PC[x]引脚 0110:PG[x]引脚 0011:PD[x]引脚 3210 EXTI8[3:0] rw rw rw rw 127/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用和复用功能I/O 8.4.6 外部中断配置寄存器 4(AFIO_EXTICR4) 地址偏移:0x14 复位值:0x0000 31 30 29 28 27 26 25 24 23 22 21 保留 STM32F10xxx参考手册 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 EXTI15[3:0] EXTI14[3:0] EXTI13[3:0] rw rw rw rw rw rw rw rw rw rw rw rw 位31:16 位15:0 保留。 EXTIx[3:0]:EXTIx配置(x = 12 … 15) (EXTI x configuration) 这些位可由软件读写,用于选择EXTIx外部中断的输入源。 0000:PA[x]引脚 0100:PE[x]引脚 0001:PB[x]引脚 0101:PF[x]引脚 0010:PC[x]引脚 0110:PG[x]引脚 0011:PD[x]引脚 3210 EXTI12[3:0] rw rw rw rw 128/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 0 通用和复用功能I/O STM32F10xxx参考手册 8.5 GPIO 和AFIO寄存器地址映象 关于寄存器起始地址,请参考表1。下面列出了GPIO和AFIO寄存器映象和复位数值。 表52 GPIO寄存器地址映像和复位值 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 偏移 寄存器 000h GPIOx_CRL 复位值 CNF7 MODE7 CNF6 MODE6 CNF5 MODE5 CNF4 MODE4 CNF3 MODE3 CNF2 MODE2 CNF1 MODE1 CNF0 MODE0 [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] 01010101010101010101010101010101 [1:0] MODE10 [1:0] MODE11 [1:0] MODE12 [1:0] MODE13 [1:0] MODE14 [1:0] MODE15 004h GPIOx_CRH CNF15 [1:0] CNF14 [1:0] CNF13 [1:0] CNF12 [1:0] CNF11 [1:0] CNF10 [1:0] CNF9 MODE9 CNF8 MODE8 [1:0] [1:0] [1:0] [1:0] 复位值 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 008h GPIOx_IDR 复位值 保留 IDR[15:0] 0000000000000000 00Ch GPIOx_ODR 复位值 保留 ODR[15:0] 0000000000000000 010h GPIOx_BSRR BR[15:0] BSR[15:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 014h GPIOx_BRR 复位值 保留 BR[15:0] 0000000000000000 LCKK 018h GPIOx_LCKR 复位值 保留 LCK[15:0] 00000000000000000 表53 AFIO寄存器地址映像和复位值 11 10 12 14 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 偏移 寄存器 000h AFIO_EVCR 复位值 保留 PORT [2:0] PIN[3:0] 00000000 9 8 EVOE 7 6 5 4 3 2 1 I2C1_REMAP USART1_REMAP USART2_REMAP TIM1_REMAP[1:0] TIM2_REMAP[1:0] TIM3_REMAP[1:0] TIM4_REMAP CAN_REMAP[1:0] PD01_REMAP TIM5CH4_IREMAP ADC1_ETRGINJ_REMA ADC1_ETRGREG_REMA ADC2_ETRGINJ_REMA ADC2_ETRGREG_REMA 004h AFIO_MAPR 小容量、中容 量和大容量产 品 保留 SWJ_CFG [2:0] 保留 复位值 000 000000000000000000000 0 SPI1_REMAP USART3_REMAP[1:0] USART3_REMAP[1:0] SPI1_REMAP I2C1_REMAP USART1_REMAP USART2_REMAP TIM1_REMAP[1:0] TIM2_REMAP[1:0] TIM3_REMAP[1:0] TIM4_REMAP CAN1_REMAP[1:0] PD01_REMAP TIM5CH4_IREMAP ETH_REMAP CAN2_REMAP MII_RMII_SEL 保留 SPI3_REMAP TIM2ITR1_REMAP PTP_PPS_REMAP 保留 AFIO_MAPR 004h 互联型产品 SWJ_CFG [2:0] 保留 008h 00Ch 010h 014h 复位值 AFIO_EXTICR1 复位值 AFIO_EXTICR2 复位值 AFIO_EXTICR3 复位值 AFIO_EXTICR4 复位值 000 000000 保留 保留 保留 保留 00000000000000000 EXTI3[3:0] EXTI2[3:0] EXTI1[3:0] EXTI0[3:0] 0000000000000000 EXTI7[3:0] EXTI6[3:0] EXTI5[3:0] EXTI4[3:0] 0000000000000000 EXTI11[3:0] EXTI10[3:0] EXTI9[3:0] EXTI8[3:0] 0000000000000000 EXTI15[3:0] EXTI14[3:0] EXTI13[3:0] EXTI12[3:0] 0000000000000000 129/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 中断和事件 STM32F10xxx参考手册 9 9.1 中断和事件 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。 嵌套向量中断控制器 特性 ● 68个可屏蔽中断通道(不包含16个Cortex™-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 -2 固定 NMI 不可屏蔽中断 RCC时钟安全系统(CSS)联接到NMI向量 0x0000_0008 -1 固定 硬件失效(HardFault) 所有类型的失效 0x0000_000C 0 可设置 存储管理(MemManage) 存储器管理 0x0000_0010 1 可设置 总线错误(BusFault) 预取指失败,存储器访问失败 0x0000_0014 2 可设置 错误应用(UsageFault) 未定义的指令或非法状态 0x0000_0018 - -- 3 可设置 SVCall 保留 通过SWI指令的系统服务调用 0x0000_001C ~0x0000_002B 0x0000_002C 4 可设置 调试监控(DebugMonitor) 调试监控器 0x0000_0030 - -- 保留 0x0000_0034 130/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 中断和事件 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 STM32F10xxx参考手册 5 可设置 PendSV 可挂起的系统服务 0x0000_0038 6 可设置 SysTick 系统嘀嗒定时器 0x0000_003C 7 可设置 WWDG 窗口定时器中断 0x0000_0040 8 可设置 PVD 连到EXTI的电源电压检测(PVD)中断 0x0000_0044 9 可设置 TAMPER 侵入检测中断 0x0000_0048 10 可设置 RTC 实时时钟(RTC)全局中断 0x0000_004C 11 可设置 FLASH 闪存全局中断 0x0000_0050 12 可设置 RCC 复位和时钟控制(RCC)中断 0x0000_0054 13 可设置 EXTI0 EXTI线0中断 0x0000_0058 14 可设置 EXTI1 EXTI线1中断 0x0000_005C 15 可设置 EXTI2 EXTI线2中断 0x0000_0060 16 可设置 EXTI3 EXTI线3中断 0x0000_0064 17 可设置 EXTI4 EXTI线4中断 0x0000_0068 18 可设置 DMA1通道1 DMA1通道1全局中断 0x0000_006C 19 可设置 DMA1通道2 DMA1通道2全局中断 0x0000_0070 20 可设置 DMA1通道3 DMA1通道3全局中断 0x0000_0074 21 可设置 DMA1通道4 DMA1通道4全局中断 0x0000_0078 22 可设置 DMA1通道5 DMA1通道5全局中断 0x0000_007C 23 可设置 DMA1通道6 DMA1通道6全局中断 0x0000_0080 24 可设置 DMA1通道7 DMA1通道7全局中断 0x0000_0084 25 可设置 ADC1_2 ADC1和ADC2全局中断 0x0000_0088 26 可设置 CAN1_TX CAN1发送中断 0x0000_008C 27 可设置 CAN1_RX0 CAN1接收0中断 0x0000_0090 28 可设置 CAN1_RX1 CAN1接收1中断 0x0000_0094 29 可设置 CAN_SCE CAN1 SCE中断 0x0000_0098 30 可设置 EXTI9_5 EXTI线[9:5]中断 0x0000_009C 31 可设置 TIM1_BRK TIM1刹车中断 0x0000_00A0 32 可设置 TIM1_UP TIM1更新中断 0x0000_00A4 33 可设置 TIM1_TRG_COM TIM1触发和通信中断 0x0000_00A8 34 可设置 TIM1_CC TIM1捕获比较中断 0x0000_00AC 35 可设置 TIM2 TIM2全局中断 0x0000_00B0 36 可设置 TIM3 TIM3全局中断 0x0000_00B4 37 可设置 TIM4 TIM4全局中断 0x0000_00B8 38 可设置 I2C1_EV 39 可设置 I2C1_ER I2C1事件中断 I2C1错误中断 0x0000_00BC 0x0000_00C0 40 可设置 I2C2_EV I2C2事件中断 0x0000_00C4 41 可设置 I2C2_ER I2C2错误中断 0x0000_00C8 42 可设置 SPI1 SPI1全局中断 0x0000_00CC 43 可设置 SPI2 SPI2全局中断 0x0000_00D0 44 可设置 USART1 USART1全局中断 0x0000_00D4 45 可设置 USART2 USART2全局中断 0x0000_00D8 46 可设置 USART3 USART3全局中断 0x0000_00DC 47 可设置 EXTI15_10 EXTI线[15:10]中断 0x0000_00E0 48 可设置 RTCAlarm 连到EXTI的RTC闹钟中断 0x0000_00E4 131/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 中断和事件 STM32F10xxx参考手册 42 49 可设置 OTG_FS_WKUP唤醒 - -- - 50 57 可设置 TIM5 51 58 可设置 SPI3 52 59 可设置 UART4 53 60 可设置 UART5 54 61 可设置 TIM6 55 62 可设置 TIM7 56 63 可设置 DMA2通道1 57 64 可设置 DMA2通道2 58 65 可设置 DMA2通道3 59 66 可设置 DMA2通道4 60 67 可设置 DMA2通道5 61 68 可设置 ETH 62 69 可设置 ETH_WKUP 63 70 可设置 CAN2_TX 64 71 可设置 CAN2_RX0 65 72 可设置 CAN2_RX1 66 73 可设置 CAN2_SCE 67 74 可设置 OTG_FS 连到EXTI的全速USB OTG唤醒中断 保留 TIM5全局中断 SPI3全局中断 UART4全局中断 UART5全局中断 TIM6全局中断 TIM7全局中断 DMA2通道1全局中断 DMA2通道2全局中断 DMA2通道3全局中断 DMA2通道4全局中断 DMA2通道5全局中断 以太网全局中断 连到EXTI的以太网唤醒中断 CAN2发送中断 CAN2接收0中断 CAN2接收1中断 CAN2的SCE中断 全速的USB OTG全局中断 0x0000_00E8 0x0000_00EC ~0x0000_0104 0x0000_0108 0x0000_010C 0x0000_0110 0x0000_0114 0x0000_0118 0x0000_011C 0x0000_0120 0x0000_0124 0x0000_0128 0x0000_012C 0x0000_0130 0x0000_0134 0x0000_0138 0x0000_013C 0x0000_0140 0x0000_0144 0x0000_0148 0x0000_014C 表55 其它STM32F10xxx产品(小容量、中容量和大容量)的向量表 位 优先 优先级 置 级 类型 名称 说明 地址 - -- 保留 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 - -- 3 可设置 SVCall 保留 通过SWI指令的系统服务调用 0x0000_001C ~0x0000_002B 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 132/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 中断和事件 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 STM32F10xxx参考手册 12 可设置 RCC 复位和时钟控制(RCC)中断 0x0000_0054 13 可设置 EXTI0 EXTI线0中断 0x0000_0058 14 可设置 EXTI1 EXTI线1中断 0x0000_005C 15 可设置 EXTI2 EXTI线2中断 0x0000_0060 16 可设置 EXTI3 EXTI线3中断 0x0000_0064 17 可设置 EXTI4 EXTI线4中断 0x0000_0068 18 可设置 DMA1通道1 DMA1通道1全局中断 0x0000_006C 19 可设置 DMA1通道2 DMA1通道2全局中断 0x0000_0070 20 可设置 DMA1通道3 DMA1通道3全局中断 0x0000_0074 21 可设置 DMA1通道4 DMA1通道4全局中断 0x0000_0078 22 可设置 DMA1通道5 DMA1通道5全局中断 0x0000_007C 23 可设置 DMA1通道6 DMA1通道6全局中断 0x0000_0080 24 可设置 DMA1通道7 DMA1通道7全局中断 0x0000_0084 25 可设置 ADC1_2 ADC1和ADC2的全局中断 0x0000_0088 26 可设置 USB_HP_CAN_TX USB高优先级或CAN发送中断 0x0000_008C 27 可设置 USB_LP_CAN_RX0 USB低优先级或CAN接收0中断 0x0000_0090 28 可设置 CAN_RX1 CAN接收1中断 0x0000_0094 29 可设置 CAN_SCE CAN SCE中断 0x0000_0098 30 可设置 EXTI9_5 EXTI线[9:5]中断 0x0000_009C 31 可设置 TIM1_BRK TIM1刹车中断 0x0000_00A0 32 可设置 TIM1_UP TIM1更新中断 0x0000_00A4 33 可设置 TIM1_TRG_COM TIM1触发和通信中断 0x0000_00A8 34 可设置 TIM1_CC TIM1捕获比较中断 0x0000_00AC 35 可设置 TIM2 TIM2全局中断 0x0000_00B0 36 可设置 TIM3 TIM3全局中断 0x0000_00B4 37 可设置 TIM4 38 可设置 I2C1_EV TIM4全局中断 I2C1事件中断 0x0000_00B8 0x0000_00BC 39 可设置 I2C1_ER I2C1错误中断 0x0000_00C0 40 可设置 I2C2_EV 41 可设置 I2C2_ER I2C2事件中断 I2C2错误中断 0x0000_00C4 0x0000_00C8 42 可设置 SPI1 SPI1全局中断 0x0000_00CC 43 可设置 SPI2 SPI2全局中断 0x0000_00D0 44 可设置 USART1 USART1全局中断 0x0000_00D4 45 可设置 USART2 USART2全局中断 0x0000_00D8 46 可设置 USART3 USART3全局中断 0x0000_00DC 47 可设置 EXTI15_10 EXTI线[15:10]中断 0x0000_00E0 48 可设置 RTCAlarm 连到EXTI的RTC闹钟中断 0x0000_00E4 49 可设置 USB唤醒 连到EXTI的从USB待机唤醒中断 0x0000_00E8 50 可设置 TIM8_BRK TIM8刹车中断 0x0000_00EC 51 可设置 TIM8_UP TIM8更新中断 0x0000_00F0 52 可设置 TIM8_TRG_COM TIM8触发和通信中断 0x0000_00F4 53 可设置 TIM8_CC TIM8捕获比较中断 0x0000_00F8 54 可设置 ADC3 ADC3全局中断 0x0000_00FC 55 可设置 FSMC FSMC全局中断 0x0000_0100 133/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 中断和事件 STM32F10xxx参考手册 49 56 可设置 SDIO 50 57 可设置 TIM5 51 58 可设置 SPI3 52 59 可设置 UART4 53 60 可设置 UART5 54 61 可设置 TIM6 55 62 可设置 TIM7 56 63 可设置 DMA2通道1 57 64 可设置 DMA2通道2 58 65 可设置 DMA2通道3 59 66 可设置 DMA2通道4_5 SDIO全局中断 TIM5全局中断 SPI3全局中断 UART4全局中断 UART5全局中断 TIM6全局中断 TIM7全局中断 DMA2通道1全局中断 DMA2通道2全局中断 DMA2通道3全局中断 DMA2通道4和DMA2通道5全局中断 0x0000_0104 0x0000_0108 0x0000_010C 0x0000_0110 0x0000_0114 0x0000_0118 0x0000_011C 0x0000_0120 0x0000_0124 0x0000_0128 0x0000_012C 9.2 外部中断/事件控制器(EXTI) 对于互联型产品,外部中断/事件控制器由20个产生事件/中断请求的边沿检测器组成,对于其它 产品,则有19个能产生事件/中断请求的边沿检测器。每个输入线可以独立地配置输入类型(脉冲 或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏 蔽。挂起寄存器保持着状态线的中断请求。 9.2.1 主要特性 EXTI控制器的主要特性如下: ● 每个中断/事件都有独立的触发和屏蔽 ● 每个中断线都有专用的状态位 ● 支持多达20个软件的中断/事件请求 ● 检测脉冲宽度低于APB2时钟宽度的外部信号。参见数据手册中电气特性部分的相关参数。 134/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 中断和事件 9.2.2 框图 图19 外部中断/事件控制器框图 STM32F10xxx参考手册 9.2.3 唤醒事件管理 STM32F10xxx可以处理外部或内部事件来唤醒内核(WFE)。唤醒事件可以通过下述配置产生: ● 在外设的控制寄存器使能一个中断,但不在NVIC中使能,同时在Cortex-M3的系统控制寄 存器中使能SEVONPEND位。当CPU从WFE恢复后,需要清除相应外设的中断挂起位和外 设NVIC中断通道挂起位(在NVIC中断清除挂起寄存器中)。 ● 配置一个外部或内部EXTI线为事件模式,当CPU从WFE恢复后,因为对应事件线的挂起位 没有被置位,不必清除相应外设的中断挂起位或NVIC中断通道挂起位。 在互联型产品中,以太网唤醒事件同样具有WFE唤醒功能。 使用外部I/O端口作为唤醒事件,请参见9.2.4节的功能说明 9.2.4 功能说明 要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置2个触发寄存器,同时在中 断屏蔽寄存器的相应位写’1’允许中断请求。当外部中断线上发生了期待的边沿时,将产生一个 中断请求,对应的挂起位也随之被置’1’。在挂起寄存器的对应位写’1’,将清除该中断请求。 如果需要产生事件,必须先配置好并使能事件线。根据需要的边沿检测通过设置2个触发寄存 器,同时在事件屏蔽寄存器的相应位写’1’允许事件请求。当事件线上发生了需要的边沿时,将 产生一个事件请求脉冲,对应的挂起位不被置’1’。 通过在软件中断/事件寄存器写’1’,也可以通过软件产生中断/事件请求。 硬件中断选择 通过下面的过程来配置20个线路做为中断源: ● 配置20个中断线的屏蔽位(EXTI_IMR) 135/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 中断和事件 STM32F10xxx参考手册 ● 配置所选中断线的触发选择位(EXTI_RTSR和EXTI_FTSR); ● 配置对应到外部中断控制器(EXTI)的NVIC中断通道的使能和屏蔽位,使得20个中断线中的 请求可以被正确地响应。 硬件事件选择 通过下面的过程,可以配置20个线路为事件源 ● 配置20个事件线的屏蔽位(EXTI_EMR) ● 配置事件线的触发选择位(EXTI_RTSR和EXTI_FTSR) 软件中断/事件的选择 20个线路可以被配置成软件中断/事件线。下面是产生软件中断的过程: ● 配置20个中断/事件线屏蔽位(EXTI_IMR, EXTI_EMR) ● 设置软件中断寄存器的请求位(EXTI_SWIER) 136/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 中断和事件 9.2.5 外部中断/事件线路映像 112通用I/O端口以下图的方式连接到16个外部中断/事件线上: 图20 外部中断通用I/O映像 STM32F10xxx参考手册 1.通过AFIO_EXTICRx配置GPIO线上的外部中断/事件,必须先使能AFIO时钟。对于小容量、中容量和大容量 的产品,参见6.3.7节;对于互联型产品,参见7.3.7节。 另外四个EXTI线的连接方式如下: ● EXTI线16连接到PVD输出 ● EXTI线17连接到RTC闹钟事件 ● EXTI线18连接到USB唤醒事件 ● EXTI线19连接到以太网唤醒事件(只适用于互联型产品) 137/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 中断和事件 STM32F10xxx参考手册 9.3 EXTI 寄存器描述 关于寄存器描述中的缩略词,请参考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)。 位19:0 MRx: 线x上的中断屏蔽 (Interrupt Mask on line x) 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 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)。 位19:0 MRx: 线x上的事件屏蔽 (Event Mask on line x) 0:屏蔽来自线x上的事件请求; 1:开放来自线x上的事件请求。 注:位19只适用于互联型产品,对于其它产品为保留位。 138/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 中断和事件 9.3.3 上升沿触发选择寄存器(EXTI_RTSR) 偏移地址:0x08 复位值:0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 STM32F10xxx参考手册 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)。 注意: 位18:0 TRx: 线x上的上升沿触发事件配置位 (Rising trigger event configuration bit of line x) 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)。 位18:0 TRx: 线x上的下降沿触发事件配置位 (Falling trigger event configuration bit of line x) 0:禁止输入线x上的下降沿触发(中断和事件) 1:允许输入线x上的下降沿触发(中断和事件) 注:位19只适用于互联型产品,对于其它产品为保留位。 外部唤醒线是边沿触发的,这些线上不能出现毛刺信号。 在写EXTI_FTSR寄存器时,在外部中断线上的下降沿信号不能被识别,挂起位不会被置位。 在同一中断线上,可以同时设置上升沿和下降沿触发。即任一边沿都可触发中断。 139/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 中断和事件 9.3.5 软件中断事件寄存器(EXTI_SWIER) 偏移地址:0x10 复位值:0x0000 0000 STM32F10xxx参考手册 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 SWIER SWIER SWIER SWIER 19 18 17 16 rw rw rw rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER 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 位31:19 位18:0 保留,必须始终保持为复位状态(0)。 SWIERx: 线x上的软件中断 (Software interrupt on line x) 当该位为’0’时,写’1’将设置EXTI_PR中相应的挂起位。如果在EXTI_IMR和EXTI_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)。 位18:0 PRx: 挂起位 (Pending bit) 0:没有发生触发请求 1:发生了选择的触发请求 当在外部中断线上发生了选择的边沿事件,该位被置’1’。在该位中写入’1’可以清除它,也可以 通过改变边沿检测的极性清除。 注:位19只适用于互联型产品,对于其它产品为保留位。 140/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 中断和事件 STM32F10xxx参考手册 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 偏移 寄存器 000h EXTI_IMR 复位值 004h EXTI_EMR 复位值 008h EXTI_RTSR 复位值 00Ch EXTI_FTSR 复位值 010h EXTI_SWIER 复位值 014h EXTI_PR 复位值 保留 MR[19:0] 000000000000000000000 保留 MR[19:0] 000000000000000000000 保留 TR[19:0] 000000000000000000000 保留 TR[19:0] 000000000000000000000 保留 SWIER[19:0] 000000000000000000000 保留 PR[19:0] 000000000000000000000 关于寄存器的起始地址,参见表1。 141/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 DMA控制器(DMA) STM32F10xxx参考手册 10 DMA控制器(DMA) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。 10.1 DMA简介 直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传 输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。 两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门用来管理来自 于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。 10.2 DMA主要特性 ● 12个独立的可配置的通道(请求):DMA1有7个通道,DMA2有5个通道 ● 每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过 软件来配置。 ● 在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、 中等和低),优先权设置相等时由硬件决定(请求0优先于请求1,依此类推) 。 ● 独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目 标地址必须按数据传输宽度对齐。 ● 支持循环的缓冲器管理 ● 每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这3个事件标志 逻辑或成为一个单独的中断请求。 ● 存储器和存储器间的传输 ● 外设和存储器、存储器和外设之间的传输 ● 闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标。 ● 可编程的数据传输数目:最大为65535 下面为功能框图: 142/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 DMA控制器(DMA) 图21 DMA框图 STM32F10xxx参考手册 1.DMA2仅存在于大容量产品和互联型产品。 2.SPI/I2S3、UART4、TIM5、TIM6、TIM7和DAC的DMA请求仅存在于大容量产品和互联型产品。 3.ADC3、SDIO和TIM8的DMA请求仅存在于大容量产品。 10.3 功能描述 DMA控制器和Cortex™-M3核心共享系统数据总线,执行直接存储器数据传输。当CPU和DMA 同时访问相同的目标(RAM或外设)时,DMA请求会暂停CPU访问系统总线达若干个周期,总线 仲裁器执行循环调度,以保证CPU至少可以得到一半的系统总线(存储器或外设)带宽。 10.3.1 DMA处理 在发生一个事件后,外设向DMA控制器发送一个请求信号。DMA控制器根据通道的优先权处理 请求。当DMA控制器开始访问发出请求的外设时,DMA控制器立即发送给它一个应答信号。当 从DMA控制器得到应答信号时,外设立即释放它的请求。一旦外设释放了这个请求,DMA控制 器同时撤销应答信号。如果有更多的请求时,外设可以启动下一个周期。 总之,每次DMA传送由3个操作组成: ● 从外设数据寄存器或者从当前外设/存储器地址寄存器指示的存储器地址取数据,第一次传 输时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元。 ● 存数据到外设数据寄存器或者当前外设/存储器地址寄存器指示的存储器地址,第一次传输 时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元。 ● 执行一次DMA_CNDTRx寄存器的递减操作,该寄存器包含未完成的操作数目。 143/754 参照2009年12月 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寄存器中的PSIZE和MSIZE位编程。 指针增量 通过设置DMA_CCRx寄存器中的PINC和MINC标志位,外设和存储器的指针在每次传输后可以 有选择地完成自动增量。当设置为增量模式时,下一个要传输的地址将是前一个地址加上增量 值 , 增 量 值 取 决 与 所 选 的 数 据 宽 度 为 1 、 2 或 4 。 第 一 个 传 输 的 地 址 是 存 放 在 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 参照2009年12月 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 可编程的数据传输宽度、对齐方式和数据大小端 当PSIZE和MSIZE不相同时,DMA模块按照下表进行数据对齐。 源端 宽度 8 8 8 16 16 16 32 32 32 表57 可编程的数据传输宽度和大小端操作(当PINC = MINC = 1) 目标 传输 宽度 数目 源:地址/数据 传输操作 0x0 / B0 8 4 0x1 / B1 0x2 / B2 0x3 / B3 1: 在0x0读B0[7:0],在0x0写B0[7:0] 2: 在0x1读B1[7:0],在0x1写B1[7:0] 3: 在0x2读B2[7:0],在0x2写B2[7:0] 4: 在0x3读B3[7:0],在0x3写B3[7:0] 0x0 / B0 16 4 0x1 / B1 0x2 / B2 0x3 / B3 1: 在0x0读B0[7:0],在0x0写00B0[15:0] 2: 在0x1读B1[7:0],在0x2写00B1[15:0] 3: 在0x2读B2[7:0],在0x4写00B2[15:0] 4: 在0x3读B3[7:0],在0x6写00B3[15:0] 0x0 / B0 32 4 0x1 / B1 0x2 / B2 0x3 / B3 1: 在0x0读B0[7:0],在0x0写000000B0[31:0] 2: 在0x1读B1[7:0],在0x4写000000B1[31:0] 3: 在0x2读B2[7:0],在0x8写000000B2[31:0] 4: 在0x3读B3[7:0],在0xC写000000B3[31:0] 0x0 / B1B0 8 4 0x2 / B3B2 0x4 / B5B4 0x6 / B7B6 1: 在0x0读B1B0[15:0],在0x0写B0[7:0] 2: 在0x2读B3B2[15:0],在0x1写B2[7:0] 3: 在0x4读B5B4[15:0],在0x2写B4[7:0] 4: 在0x6读B7B6[15:0],在0x3写B6[7:0] 0x0 / B1B0 16 4 0x2 / B3B2 0x4 / B5B4 0x6 / B7B6 1: 在0x0读B1B0[15:0],在0x0写B1B0[15:0] 2: 在0x2读B3B2[15:0],在0x2写B3B2[15:0] 3: 在0x4读B5B4[15:0],在0x4写B5B4[15:0] 4: 在0x6读B7B6[15:0],在0x6写B7B6[15:0] 0x0 / B1B0 32 4 0x2 / B3B2 0x4 / B5B4 0x6 / B7B6 1: 在0x0读B1B0[15:0],在0x0写0000B1B0[31:0] 2: 在0x2读B3B2[15:0],在0x4写0000B3B2[31:0] 3: 在0x4读B5B4[15:0],在0x8写0000B5B4[31:0] 4: 在0x6读B7B6[15:0],在0xC写0000B7B6[31:0] 0x0 / B3B2B1B0 1: 在0x0读B3B2B1B0[31:0],在0x0写B0[7:0] 8 4 0x4 / B7B6B5B4 0x8 / BBBAB9B8 2: 在0x4读B7B6B5B4[31:0],在0x1写B4[7:0] 3: 在0x8读BBBAB9B8[31:0],在0x2写B8[7:0] 0xC / BFBEBDBC 4: 在0xC读BFBEBDBC[31:0],在0x3写BC[7:0] 0x0 / B3B2B1B0 1: 在0x0读B3B2B1B0[31:0],在0x0写B1B0[15:0] 16 4 0x4 / B7B6B5B4 0x8 / BBBAB9B8 2: 在0x4读B7B6B5B4[31:0],在0x2写B5B4[15:0] 3: 在0x8读BBBAB9B8[31:0],在0x4写B9B8[15:0] 0xC / BFBEBDBC 4: 在0xC读BFBEBDBC[31:0],在0x6写BDBC[15:0] 0x0 / B3B2B1B0 1: 在0x0读B3B2B1B0[31:0],在0x0写B3B2B1B0[31:0] 32 4 0x4 / B7B6B5B4 0x8 / BBBAB9B8 2: 在0x4读B7B6B5B4[31:0],在0x4写B7B6B5B4[31:0] 3: 在0x8读BBBAB9B8[31:0],在0x8写BBBAB9B8[31:0] 0xC / BFBEBDBC 4: 在0xC读BFBEBDBC[31:0],在0xC写BFBEBDBC[31:0] 目标:地址/数据 0x0 / B0 0x1 / B1 0x2 / B2 0x3 / B3 0x0 / 00B0 0x2 / 00B1 0x4 / 00B2 0x6 / 00B3 0x0 / 000000B0 0x4 / 000000B1 0x8 / 000000B2 0xC / 000000B3 0x0 / B0 0x1 / B2 0x2 / B4 0x3 / B6 0x0 / B1B0 0x2 / B3B2 0x4 / B5B4 0x6 / B7B6 0x0 / 0000B1B0 0x4 / 0000B3B2 0x8 / 0000B5B4 0xC / 0000B7B6 0x0 / B0 0x1 / B4 0x2 / B8 0x3 / BC 0x0 / B1B0 0x2 / B5B4 0x4 / B9B8 0x6 / BDBC 0x0 / B3B2B1B0 0x4 / B7B6B5B4 0x8 / BBBAB9B8 0xC / BFBEBDBC 145/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 DMA控制器(DMA) STM32F10xxx参考手册 操作一个不支持字节或半字写的AHB设备 当DMA模块开始一个AHB的字节或半字写操作时,数据将在HWDATA[31:0]总线中未使用的部 分重复。因此,如果DMA以字节或半字写入不支持字节或半字写操作的AHB设备时(即HSIZE不 适于该模块),不会发生错误,DMA将按照下面两个例子写入32位HWDATA数据: ● 当HSIZE=半字时,写入半字’0xABCD’,DMA将设置HWDATA总线为’0xABCDABCD’。 ● 当HSIZE=字节时,写入字节’0xAB’,DMA将设置HWDATA总线为’0xABABABAB’。 假定AHB/APB桥是一个AHB的32位从设备,它不处理HSIZE参数,它将按照下述方式把任何 AHB上的字节或半字按32位传送到APB上: ● 一个AHB上对地址0x0(或0x1、0x2或0x3)的写字节数据’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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 DMA控制器(DMA) STM32F10xxx参考手册 10.3.7 DMA请求映像 DMA1控制器 从外设(TIMx[x=1、2、3、4]、ADC1、SPI1、SPI/I2S2、I2Cx[x=1、2]和USARTx[x=1、2、3]) 产生的7个请求,通过逻辑或输入到DMA1控制器,这意味着同时只能有一个请求有效。参见下 图的DMA1请求映像。 外设的DMA请求,可以通过设置相应外设寄存器中的控制位,被独立地开启或关闭。 图22 DMA1请求映像 147/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 DMA控制器(DMA) STM32F10xxx参考手册 表59 各个通道的DMA1请求一览 外设 通道1 通道2 通道3 通道4 通道5 通道6 通道7 ADC1 SPI/I2S ADC1 SPI1_RX SPI1_TX SPI/I2S2_RX SPI/I2S2_TX USART I2C USART3_TX USART3_RX USART1_TX USART1_RX USART2_RX USART2_TX I2C2_TX I2C2_RX I2C1_TX I2C1_RX TIM1 TIM1_CH1 TIM1_CH2 TIM1_TX4 TIM1_TRIG TIM1_COM TIM1_UP TIM1_CH3 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[5、6、7、8]、ADC3、SPI/I2S3、UART4、DAC通道1、2和SDIO)产生的5个请 求,经逻辑或输入到DMA2控制器,这意味着同时只能有一个请求有效。参见下图的DMA2请求 映像。 外设的DMA请求,可以通过设置相应外设寄存器中的DMA控制位,被独立地开启或关闭。 注意: DMA2控制器及相关请求仅存在于大容量产品和互联型产品中。 图23 DMA2请求映像 148/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 DMA控制器(DMA) 表60 各个通道的DMA2请求一览 外设 ADC3(1) 通道1 通道2 通道3 SPI/I2S3 SPI/I2S3_RX SPI/I2S3_TX UART4 SDIO(1) UART4_RX TIM5 TIM5_CH4 TIM5_TRIG TIM5_CH3 TIM5_UP TIM6/ DAC通道1 TIM6_UP/ DAC通道1 TIM7/ DAC通道2 TIM8(1) TIM8_CH3 TIM8_UP TIM8_CH4 TIM8_TRIG TIM8_COM TIM8_CH1 1. ADC3、SDIO和TIM8的DMA请求只在大容量的产品中存在。 10.4 DMA寄存器 STM32F10xxx参考手册 通道4 SDIO TIM5_CH2 通道5 ADC3 UART4_TX TIM5_CH1 TIM7_UP/ DAC通道2 TIM8_CH2 关于寄存器描述中用到的缩写,请参见第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 r r r r r r r r r r r r 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TEIF4 HTIF4 TCIF4 GIF4 TEIF3 HTIF3 TCIF3 GIF3 TEIF2 HTIF2 TCIF2 GIF2 TEIF1 HTIF1 TCIF1 GIF1 r r r r r r r r r r r r r r r r 位31:28 位27,23, 19,15, 11,7,3 位26,22, 18,14, 10,6,2 位25,21, 17,13, 9,5,1 保留,始终读为0。 TEIFx:通道x的传输错误标志(x = 1 … 7) (Channel x transfer error flag) 硬件设置这些位。在DMA_IFCR寄存器的相应位写入’1’可以清除这里对应的标志位。 0:在通道x没有传输错误(TE); 1:在通道x发生了传输错误(TE)。 HTIFx:通道x的半传输标志(x = 1 … 7) (Channel x half transfer flag) 硬件设置这些位。在DMA_IFCR寄存器的相应位写入’1’可以清除这里对应的标志位。 0:在通道x没有半传输事件(HT); 1:在通道x产生了半传输事件(HT)。 TCIFx:通道x的传输完成标志(x = 1 … 7) (Channel x transfer complete flag) 硬件设置这些位。在DMA_IFCR寄存器的相应位写入’1’可以清除这里对应的标志位。 0:在通道x没有传输完成事件(TC); 1:在通道x产生了传输完成事件(TC)。 149/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 DMA控制器(DMA) STM32F10xxx参考手册 位24,20, 16,12, 8,4,0 GIFx:通道x的全局中断标志(x = 1 … 7) (Channel x global interrupt flag) 硬件设置这些位。在DMA_IFCR寄存器的相应位写入’1’可以清除这里对应的标志位。 0:在通道x没有TE、HT或TC事件; 1:在通道x产生了TE、HT或TC事件。 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 CHTIF CTCIF CGIF CTEIF CHTIF CTCIF CGIF CTEIF CHTIF CTCIF CGIF 7 7 7 7 6 6 6 6 5 5 5 5 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 CTEIF CHTIF CTCIF CGIF CTEIF CHTIF CTCIF CGIF CTEIF CHTIF CTCIF CGIF CTEIF CHTIF CTCIF CGIF 4 4 4 4 3 3 3 3 2 2 2 2 1 1 1 1 rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:28 保留,始终读为0。 位27,23, 19,15, 11,7,3 CTEIFx:清除通道x的传输错误标志(x = 1 … 7) (Channel x transfer error clear) 这些位由软件设置和清除。 0:不起作用 1:清除DMA_ISR寄存器中的对应TEIF标志。 位26,22, 18,14, 10,6,2 CHTIFx:清除通道x的半传输标志(x = 1 … 7) (Channel x half transfer clear) 这些位由软件设置和清除。 0:不起作用 0:清除DMA_ISR寄存器中的对应HTIF标志。 位25,21, 17 , 13 , 9,5,1 CTCIFx:清除通道x的传输完成标志(x = 1 … 7) (Channel x transfer complete clear) 这些位由软件设置和清除。 0:不起作用 0:清除DMA_ISR寄存器中的对应TCIF标志。 位24,20, 16,12, 8,4,0 CGIFx:清除通道x的全局中断标志(x = 1 … 7) (Channel x global interrupt clear) 这些位由软件设置和清除。 0:不起作用 0:清除DMA_ISR寄存器中的对应的GIF、TEIF、HTIF和TCIF标志。 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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 MEM2 MEM PL[1:0] MSIZE[1:0] PSIZE[1:0] MINC PINC CIRC DIR TEIE HTIE TCIE EN rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:15 保留,始终读为0。 150/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 DMA控制器(DMA) 位14 位13:12 位11:10 位9:8 位7 位6 位5 位4 位3 位2 位1 STM32F10xxx参考手册 MEM2MEM:存储器到存储器模式 (Memory to memory mode) 该位由软件设置和清除。 0:非存储器到存储器模式; 1:启动存储器到存储器模式。 PL[1:0]:通道优先级 (Channel priority level) 这些位由软件设置和清除。 00:低 01:中 10:高 11:最高 MSIZE[1:0]:存储器数据宽度 (Memory size) 这些位由软件设置和清除。 00:8位 01:16位 10:32位 11:保留 PSIZE[1:0]:外设数据宽度 (Peripheral size) 这些位由软件设置和清除。 00:8位 01:16位 10:32位 11:保留 MINC:存储器地址增量模式 (Memory increment mode) 该位由软件设置和清除。 0:不执行存储器地址增量操作 1:执行存储器地址增量操作 PINC:外设地址增量模式 (Peripheral increment mode) 该位由软件设置和清除。 0:不执行外设地址增量操作 1:执行外设地址增量操作 CIRC:循环模式 (Circular mode) 该位由软件设置和清除。 0:不执行循环操作 1:执行循环操作 DIR:数据传输方向 (Data transfer direction) 该位由软件设置和清除。 0:从外设读 1:从存储器读 TEIE:允许传输错误中断 (Transfer error interrupt enable) 该位由软件设置和清除。 0:禁止TE中断 0:允许TE中断 HTIE:允许半传输中断 (Half transfer interrupt enable) 该位由软件设置和清除。 0:禁止HT中断 0:允许HT中断 TCIE:允许传输完成中断 (Transfer complete interrupt enable) 该位由软件设置和清除。 0:禁止TC中断 0:允许TC中断 151/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 DMA控制器(DMA) STM32F10xxx参考手册 位0 EN:通道开启 (Channel enable) 该位由软件设置和清除。 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 NDT[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:16 位15:0 保留,始终读为0。 NDT[15:0]:数据传输数量 (Number of data to transfer) 数据传输数量为0至65535。这个寄存器只能在通道不工作(DMA_CCRx的EN=0)时写入。通 道开启后该寄存器变为只读,指示剩余的待传输字节数目。寄存器内容在每次DMA传输后递 减。 数据传输结束后,寄存器的内容或者变为0;或者当该通道配置为自动重加载模式时,寄存 器的内容将被自动重新加载为之前配置时的数值。 当寄存器的内容为0时,无论通道是否开启,都不会发生任何数据传输。 10.4.5 DMA通道x外设地址寄存器(DMA_CPARx)(x = 1…7) 偏移地址:0x10 + 20 x (通道编号 – 1) 复位值:0x0000 0000 当开启通道(DMA_CCRx的EN=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 PA[31: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 位31:0 PA[31:0]:外设地址 (Peripheral address) 外设数据寄存器的基地址,作为数据传输的源或目标。 当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_CCRx的EN=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 MA[31: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 位31:0 MA[31:0]:存储器地址 存储器地址作为数据传输的源或目标。 152/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 DMA控制器(DMA) STM32F10xxx参考手册 当MSIZE=’01’(16位),不使用MA[0]位。操作自动地与半字地址对齐。 当MSIZE=’10’(32位),不使用MA[1:0]位。操作自动地与字地址对齐。 10.4.7 DMA寄存器映像 关于寄存器的起始地址,参见表1。 表61 DMA寄存器映像和复位 偏移 寄存器 31 30 29 28 TEIF7 27 HTIF7 26 TCIF7 25 GIF7 24 TEIF6 23 HTIF6 22 TCIF6 21 GIF6 20 TEIF5 19 HTIF5 18 TCIF5 17 GIF5 16 TEIF4 15 HTIF4 14 TCIF4 13 GIF4 12 TEIF3 11 HTIF3 10 TCIF3 9 GIF3 8 TEIF2 7 HTIF2 6 TCIF2 5 GIF2 4 TEIF1 3 HTIF1 2 TCIF1 1 GIF1 0 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 MEM2MEM MINC PINC CIRC DIR TEIE HTIE TCIE EN MEM2MEM MINC PINC CIRC DIR TEIE HTIE TCIE EN 000h DMA_ISR 复位值 保留 0000000000000000000000000000 004h DMA_IFCR 复位值 保留 0000000000000000000000000000 008h DMA_CCR1 保留 PL MSIZE PSIZE [1:0] [1:0] [1:0] 复位值 000000000000000 00Ch DMA_CNDTR1 复位值 保留 NDT[15:0] 0000000000000000 010h DMA_CPAR1 PA[31:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DMA_CMAR1 014h MA[31:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 018h 保留 01Ch DMA_CCR2 保留 PL MSIZE PSIZE [1:0] [1:0] [1:0] 复位值 000000000000000 020h DMA_CNDTR2 复位值 保留 NDT[15:0] 0000000000000000 024h DMA_CPAR2 PA[31:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 028h DMA_CMAR2 MA[31:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 02Ch 保留 030h DMA_CCR3 保留 PL MSIZE PSIZE [1:0] [1:0] [1:0] 复位值 000000000000000 034h DMA_CNDTR3 复位值 保留 NDT[15:0] 0000000000000000 038h DMA_CPAR3 PA[31:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 03Ch DMA_CMAR3 MA[31:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 040h 保留 MEM2MEM MINC PINC CIRC DIR TEIE HTIE TCIE EN 153/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 DMA控制器(DMA) STM32F10xxx参考手册 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 MEM2MEM 14 13 12 11 10 9 8 MINC 7 PINC 6 CIRC 5 DIR 4 TEIE 3 HTIE 2 TCIE 1 EN 0 偏移 寄存器 MEM2MEM MINC PINC CIRC DIR TEIE HTIE TCIE EN 044h DMA_CCR4 保留 PL MSIZE PSIZE [1:0] [1:0] [1:0] 复位值 000000000000000 048h DMA_CNDTR4 保留 NDT[15:0] 复位值 0000000000000000 04Ch DMA_CPAR4 PA[31:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 050h DMA_CMAR4 MA[31:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 054h 保留 058h DMA_CCR5 保留 PL MSIZE PSIZE [1:0] [1:0] [1:0] 复位值 000000000000000 05Ch DMA_CNDTR5 保留 NDT[15:0] 复位值 0000000000000000 060h DMA_CPAR5 PA[31:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 064h DMA_CMAR5 MA[31:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 068h 保留 06Ch DMA_CCR6 保留 PL MSIZE PSIZE [1:0] [1:0] [1:0] 复位值 000000000000000 070h DMA_CNDTR6 保留 NDT[15:0] 复位值 0000000000000000 074h DMA_CPAR6 PA[31:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 078h DMA_CMAR6 MA[31:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 07Ch 保留 080h DMA_CCR7 保留 PL MSIZE PSIZE [1:0] [1:0] [1:0] 复位值 000000000000000 084h DMA_CNDTR7 保留 NDT[15:0] 复位值 0000000000000000 DMA_CPAR7 088h PA[31:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 08Ch DMA_CMAR7 MA[31:0] 复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 090h 保留 MEM2MEM MINC PINC CIRC DIR TEIE HTIE TCIE EN MEM2MEM MINC PINC CIRC DIR TEIE HTIE TCIE EN 154/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) STM32F10xxx参考手册 11 模拟/数字转换(ADC) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。 11.1 ADC介绍 12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部 信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右 对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。 ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。对于小容量、中容量和大容量产 品参见图8,对于互联型产品参见图11。 11.2 ADC主要特征 注意: ● 12位分辨率 ● 转换结束、注入转换结束和发生模拟看门狗事件时产生中断 ● 单次和连续转换模式 ● 从通道0到通道n的自动扫描模式 ● 自校准 ● 带内嵌数据一致性的数据对齐 ● 采样间隔可以按通道分别编程 ● 规则转换和注入转换均有外部触发选项 ● 间断模式 ● 双重模式(带2个或以上ADC的器件) ● ADC转换时间: ─ STM32F103xx增强型产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs) ─ STM32F101xx基本型产品:时钟为28MHz时为1μs(时钟为36MHz为1.55μs) ─ STM32F102xxUSB型产品:时钟为48MHz时为1.2μs ─ STM32F105xx和STM32F107xx产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs) ● ADC供电要求:2.4V到3.6V ● ADC输入范围:VREF- ≤ VIN ≤ VREF+ ● 规则通道转换期间有DMA请求产生。 下图是ADC模块的方框图。 如果有VREF-引脚(取决于封装),必须和VSSA相连接 155/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) 11.3 ADC功能描述 下图为一个ADC模块的框图,表62为ADC引脚的说明。 图24 单个ADC框图 STM32F10xxx参考手册 1.ADC3的规则转换和注入转换触发与ADC1和ADC2的不同。 2.TIM8_CH4和TIM8_TRGO及它们的重映射位只存在于大容量产品中。 156/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) STM32F10xxx参考手册 表62 ADC引脚 名称 信号类型 注解 VREF+ VDDA(1) 输入,模拟参考正极 ADC使用的高端/正极参考电压,2.4V ≤ VREF+ ≤ VDDA 输入,模拟电源 等效于VDD的模拟电源且:2.4V ≤ VDDA ≤ VDD(3.6V) VREFVSSA(1) 输入,模拟参考负极 ADC使用的低端/负极参考电压,VREF- = VSSA 输入,模拟电源地 等效于VSS的模拟电源地 ADCx_IN[15:0] 模拟输入信号 16个模拟输入通道 1.VDDA和VSSA应该分别连接到VDD和VSS。 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_SQRx或ADC_JSQR寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉 冲将发送到ADC以转换新选择的组。 温度传感器/ VREFINT内部通道 温度传感器和通道ADC1_IN16相连接,内部参照电压VREFINT和ADC1_IN17相连接。可以按注入 或规则通道对这两个内部通道进行转换。 注意: 温度传感器和VREFINT只能出现在主ADC1中。 11.3.4 单次转换模式 单次转换模式下,ADC只执行一次转换。该模式既可通过设置ADC_CR2寄存器的ADON位(只 适用于规则通道)启动也可通过外部触发启动(适用于规则通道或注入通道),这时CONT位为0。 一旦选择通道的转换完成: ● 如果一个规则通道被转换: ─ 转换数据被储存在16位ADC_DR寄存器中 ─ EOC(转换结束)标志被设置 ─ 如果设置了EOCIE,则产生中断。 ● 如果一个注入通道被转换: ─ 转换数据被储存在16位的ADC_DRJ1寄存器中 ─ JEOC(注入转换结束)标志被设置 ─ 如果设置了JEOCIE位,则产生中断。 157/754 参照2009年12月 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标志被设置,16位ADC数据寄存器包含转换的结果。 图25 时序图 11.3.7 模拟看门狗 如果被ADC转换的模拟电压低于低阀值或高于高阀值,AWD模拟看门狗状态位被设置。阀值位 于ADC_HTR和ADC_LTR寄存器的最低12个有效位中。通过设置ADC_CR1寄存器的AWDIE位 以允许产生相应中断。 阀值独立于由ADC_CR2寄存器上的ALIGN位选择的数据对齐模式。比较是在对齐之前完成的 (见11.5节)。 通过配置ADC_CR1寄存器,模拟看门狗可以作用于1个或多个通道,如表63所示。 图26 模拟看门狗警戒区 158/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) STM32F10xxx参考手册 表63 模拟看门狗通道选择 模拟看门狗警戒的通道 无 所有注入通道 所有规则通道 所有注入和规则通道 单一的(1)注入通道 单一的(1)规则通道 单一的(1)注入或规则通道 (1) 由AWDCH[4:0]位选择 11.3.8 扫描模式 AWDSGL位 任意值 0 0 0 1 1 1 ADC_CR1寄存器控制位 AWDEN位 0 0 1 1 0 1 1 JAWDEN位 0 1 0 1 1 0 1 此模式用来扫描一组模拟通道。 扫描模式可通过设置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_SQRx和ADC_JSQR寄存器中设置的多至20个转换序列。 在此模式里,必须禁止注入通道的外部触发。 如果除JAUTO位外还设置了CONT位,规则通道至注入通道的转换序列被连续执行。 对于ADC时钟预分频系数为4至8时,当从规则转换切换到注入序列或从注入转换切换到规则序 列时,会自动插入1个ADC时钟间隔;当ADC时钟预分频系数为2时,则有2个ADC时钟间隔的 延迟。 注意: 不可能同时使用自动注入和间断模式。 159/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) 图27 注入转换延时 STM32F10xxx参考手册 (1) 最大延迟数值请参考STM32F101xx和STM32F103xx数据手册中有关电气特性部分。 11.3.10 间断模式 规则组 此模式通过设置ADC_CR1寄存器上的DISCEN位激活。它可以用来执行一个短序列的n次转换 (n<=8),此转换是ADC_SQRx寄存器所选择的转换序列的一部分。数值n由ADC_CR1寄存器的 DISCNUM[2:0]位给出。 一个外部触发信号可以启动ADC_SQRx寄存器中描述的下一轮n次转换,直到此序列所有的转 换完成为止。总的序列长度由ADC_SQR1寄存器的L[3:0]定义。 举例: n=3,被转换的通道 = 0、1、2、3、6、7、9、10 第一次触发:转换的序列为 0、1、2 第二次触发:转换的序列为 3、6、7 第三次触发:转换的序列为 9、10,并产生EOC事件 注意: 第四次触发:转换的序列 0、1、2 当以间断模式转换一个规则组时,转换序列结束后不自动从头开始。 当所有子组被转换完成,下一次触发启动第一个子组的转换。在上面的例子中,第四次触发重 新转换第一子组的通道 0、1和2。 注入组 此模式通过设置ADC_CR1寄存器的JDISCEN位激活。在一个外部触发事件后,该模式按通道 顺序逐个转换ADC_JSQR寄存器中选择的序列。 一个外部触发信号可以启动ADC_JSQR寄存器选择的下一个通道序列的转换,直到序列中所有 的转换完成为止。总的序列长度由ADC_JSQR寄存器的JL[1:0]位定义。 例子: n=1,被转换的通道 = 1、2、3 第一次触发:通道1被转换 第二次触发:通道2被转换 第三次触发:通道3被转换,并且产生EOC和JEOC事件 注意: 第四次触发:通道1被转换 1 当完成所有注入通道转换,下个触发启动第1个注入通道的转换。在上述例子中,第四个 触发重新转换第1个注入通道1。 2 不能同时使用自动注入和间断模式。 160/754 参照2009年12月 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和图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 0 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 图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]位更改。每个通道可以分别用不同的时间采样。 总转换时间如下计算: TCONV = 采样时间+ 12.5个周期 161/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) STM32F10xxx参考手册 11.7 例如: 当ADCCLK=14MHz,采样时间为1.5周期 TCONV = 1.5 + 12.5 = 14周期 = 1μs 外部触发转换 注意: 转换可以由外部事件触发(例如定时器捕获,EXTI线)。如果设置了EXTTRIG控制位,则外部事 件就能够触发转换。EXTSEL[2:0]和JEXTSEL2:0]控制位允许应用程序选择8个可能的事件中的 某一个,可以触发规则和注入组的采样。 当外部触发信号被选为ADC规则或注入转换时,只有它的上升沿可以启动转换。 表64 ADC1和ADC2用于规则通道的外部触发 触发源 类型 EXTSEL[2:0] TIM1_CC1事件 000 TIM1_CC2事件 001 TIM1_CC3事件 TIM2_CC2事件 010 来自片上定时器的内部信号 011 TIM3_TRGO事件 100 TIM4_CC4事件 101 EXTI线11/TIM8_TRGO事件(1)(2) 外部引脚/来自片上定时器的内部信号 110 SWSTART 软件控制位 111 1.TIM8_TRGO事件只存在于大容量产品 2.对于规则通道,选中EXTI线路11或TIM8_TRGO作为外部触发事件,可以分别通过设置ADC1和ADC2的 ADC1_ETRGREG_REMAP位和ADC2_ETRGREG_REMAP位实现。 表65 ADC1和ADC2用于注入通道的外部触发 触发源 连接类型 JEXTSEL[2:0] TIM1_TRGO事件 000 TIM1_CC4事件 001 TIM2_TRGO事件 TIM2_CC1事件 010 来自片上定时器的内部信号 011 TIM3_CC4事件 100 TIM4_TRGO事件 101 EXTI线15/TIM8_CC4事件(1)(2) 外部引脚/来自片上定时器的内部信号 110 JSWSTART 软件控制位 111 1.TIM8_CC4事件只存在于大容量产品 2 . 对 于 注 入 通 道 , 选 中 EXTI 线 路 15 和 TIM8_CC4 作 为 外 部 触 发 事 件 , 可 以 分 别 通 过 设 置 ADC1 和 ADC2 的 ADC1_ETRGINJ_REMAP位和ADC2_ ETRGINJ_REMAP位实现。 表66 ADC3用于规则通道的外部触发 触发源 TIM3_CC1事件 TIM2_CC3事件 TIM1_CC3事件 TIM8_CC1事件 TIM8_TRGO事件 TIM5_CC1事件 TIM5_CC3事件 SWSTART 连接类型 来自片上定时器的内部信号 软件控制位 EXTSEL[2:0] 000 001 010 011 100 101 110 111 162/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) STM32F10xxx参考手册 表67 ADC3用于注入通道的外部触发 触发源 TIM1_TRGO事件 TIM1_CC4事件 TIM4_CC3事件 TIM8_CC2事件 TIM8_CC4事件 TIM5_TRGO事件 TIM5_CC4事件 JSWSTART 连接类型 来自片上定时器的内部信号 软件控制位 EXTSEL[2:0] 000 001 010 011 100 101 110 111 软件触发事件可以通过对寄存器ADC_CR2的SWSTART或JSWSTART位置’1’产生。 规则组的转换可以被注入触发打断。 11.8 DMA请求 注: 因为规则通道转换的值储存在一个仅有的数据寄存器中,所以当转换多个规则通道时需要使用 DMA,这可以避免丢失已经存储在ADC_DR寄存器中的数据。 只有在规则通道的转换结束时才产生DMA请求,并将转换的数据从ADC_DR寄存器传输到用户 指定的目的地址。 只有ADC1和ADC3拥有DMA功能。由ADC2转化的数据可以通过双ADC模式,利用ADC1的 DMA功能传输。 11.9 双ADC模式 在有2个或以上ADC模块的产品中,可以使用双ADC模式(见图31双ADC框图)。 在双ADC模式里,根据ADC1_CR1寄存器中DUALMOD[2:0]位所选的模式,转换的启动可以是 ADC1主和ADC2从的交替触发或同步触发。 注意: 在双ADC模式里,当转换配置成由外部事件触发时,用户必须将其设置成仅触发主ADC,从 ADC设置成软件触发,这样可以防止意外的触发从转换。但是,主和从ADC的外部触发必须同 时被激活。 共有6种可能的模式: ─ 同步注入模式 ─ 同步规则模式 ─ 快速交叉模式 ─ 慢速交叉模式 ─ 交替触发模式 ─ 独立模式 还有可以用下列方式组合使用上面的模式: 注意: ─ 同步注入模式 + 同步规则模式 ─ 同步规则模式 + 交替触发模式 ─ 同步注入模式 + 交叉模式 在双ADC模式里,为了在主数据寄存器上读取从转换数据,必须使能DMA位,即使不使用DMA 传输规则通道数据。 163/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) 图31 双ADC框图(1) STM32F10xxx参考手册 1.外部触发信号作用于ADC2,但在本图中没有显示。 2.在某些双ADC模式中,在完整的ADC1数据寄存器(ADC1_DR)中包含了ADC1和ADC2的规则转换数据。 11.9.1 同步注入模式 注意: 此模式转换一个注入通道组。外部触发来自ADC1的注入组多路开关(由ADC1_CR2寄存器的 JEXTSEL[2:0]选择),它同时给ADC2提供同步触发。 不要在2个ADC上转换相同的通道(两个ADC在同一个通道上的采样时间不能重叠)。 在ADC1或ADC2的转换结束时: ● 转换的数据存储在每个ADC接口的ADC_JDRx寄存器中。 164/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) STM32F10xxx参考手册 ● 当所有ADC1/ADC2注入通道都被转换时,产生JEOC中断(若任一ADC接口开放了中断)。 注: 在同步模式中,必须转换具有相同时间长度的序列,或保证触发的间隔比2个序列中较长的序列 长,否则当较长序列的转换还未完成时,具有较短序列的ADC转换可能会被重启。 图32 在4个通道上的同步注入模式 11.9.2 同步规则模式 注意: 注: 此模式在规则通道组上执行。外部触发来自ADC1的规则组多路开关(由ADC1_CR2寄存器的 EXTSEL[2:0]选择),它同时给ADC2提供同步触发。 不要在2个ADC上转换相同的通道((两个ADC在同一个通道上的采样时间不能重叠)。 在ADC1或ADC2的转换结束时: ● 产生一个32位DMA传输请求(如果设置了DMA位),32位的ADC1_DR寄存器内容传输到 SRAM中,它上半个字包含ADC2的转换数据,低半个字包含ADC1的转换数据。 ● 当所有ADC1/ADC2规则通道都被转换完时,产生EOC中断(若任一ADC接口开放了中断)。 在同步规则模式中,必须转换具有相同时间长度的序列,或保证触发的间隔比2个序列中较长的 序列长,否则当较长序列的转换还未完成时,具有较短序列的ADC转换可能会被重启。 图33 在16个通道上的同步规则模式 11.9.3 快速交叉模式 注意: 此模式只适用于规则通道组(通常为一个通道)。外部触发来自ADC1的规则通道多路开关。外部 触发产生后: ● ADC2立即启动并且 ● ADC1在延迟7个ADC时钟周期后启动 如果同时设置了ADC1和ADC2的CONT位,所选的两个ADC规则通道将被连续地转换。 ADC1产生一个EOC中断后(由EOCIE使能),产生一个32位的DMA传输请求(如果设置了DMA 位),ADC1_DR寄存器的32位数据被传输到SRAM,ADC1_DR的上半个字包含ADC2的转换数 据,低半个字包含ADC1的转换数据。 最大允许采样时间<7个ADCCLK周期,避免ADC1和ADC2转换相同通道时发生两个采样周期的 重叠。 165/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) 图34 在1个通道上连续转换模式下的快速交叉模式 STM32F10xxx参考手册 11.9.4 慢速交叉模式 此模式只适用于规则通道组(只能为一个通道)。外部触发来自ADC1的规则通道多路开关。外部 触发产生后: ● ADC2立即启动并且 ● ADC1在延迟14个ADC时钟周期后启动 ● 在延迟第二次14个ADC周期后ADC2再次启动,如此循环。 注意: 最大允许采样时间<14个ADCCLK周期,以避免和下个转换重叠。 ADC1产生一个EOC中断后(由EOCIE使能),产生一个32位的DMA传输请求(如果设置了DMA 位),ADC1_DR寄存器的32位数据被传输到SRAM,ADC1_DR的上半个字包含ADC2的转换数 据,低半个字包含ADC1的转换数据。 在28个ADC时钟周期后自动启动新的ADC2转换。 在这个模式下不能设置CONT位,因为它将连续转换所选择的规则通道。 注意: 应用程序必须确保当使用交叉模式时,不能有注入通道的外部触发产生。 图35 在1个通道上的慢速交叉模式 11.9.5 交替触发模式 此模式只适用于注入通道组。外部触发源来自ADC1的注入通道多路开关。 ● 当第一个触发产生时,ADC1上的所有注入组通道被转换。 ● 当第二个触发到达时,ADC2上的所有注入组通道被转换。 ● 如此循环…… 如果允许产生JEOC中断,在所有ADC1注入组通道转换后产生一个JEOC中断。 如果允许产生JEOC中断,在所有ADC2注入组通道转换后产生一个JEOC中断。 当所有注入组通道都转换完后,如果又有另一个外部触发,交替触发处理从转换ADC1注入组通 道重新开始。 166/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) 图36 交替触发:每个ADC1的注入通道组 STM32F10xxx参考手册 如果ADC1和ADC2上同时使用了注入间断模式: ● 当第一个触发产生时,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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) 图38 交替+规则同步 STM32F10xxx参考手册 如果触发事件发生在一个中断了规则转换的注入转换期间,这个触发事件将被忽略。下图示出 了这种情况的操作(第2个触发被忽略)。 图39 触发事件发生在注入转换期间 11.9.9 混合同步注入 + 交叉模式 注: 一个注入事件可以中断一个交叉转换。这种情况下,交叉转换被中断,注入转换被启动,在注 入序列转换结束时,交叉转换被恢复。下图是这种情况的一个例子。 当ADC时钟预分频系数设置为4时,交叉模式恢复后不会均匀地分配采样时间,采样间隔是8个 ADC时钟周期与6个ADC时钟周期轮替,而不是均匀的7个ADC时钟周期。 图40 交叉的单通道转换被注入序列CH11和CH12中断 11.10 温度传感器 注意: 温度传感器可以用来测量器件周围的温度(TA)。 温度传感器在内部和ADC1_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值。 温度传感器模拟输入推荐采样时间是17.1μs。 图41是温度传感器的方框图。 当没有被使用时,传感器可以置于关电模式。 必须设置TSVREFE位激活内部通道:ADC1_IN16(温度传感器)和ADC1_IN17(VREFINT)的转换。 168/754 参照2009年12月 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 = VSENSE在25°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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) 表68 ADC中断 中断事件 规则组转换结束 注入组转换结束 设置了模拟看门狗状态位 事件标志 EOC JEOC AWD 11.12 ADC寄存器 寄存器描述中使用的一些缩略语请参考1.1节。 必须以字(32位)的方式操作这些外设寄存器。 11.12.1 ADC状态寄存器(ADC_SR) 地址偏移:0x00 复位值:0x0000 0000 31 30 29 28 27 26 25 24 23 保留 使能控制位 EOCIE JEOCIE AWDIE 22 21 20 STM32F10xxx参考手册 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 STRT JSTRT JEOC EOC AWD rc w0 rc w0 rc w0 rc w0 rc w0 位31:15 保留。必须保持为0。 位4 STRT:规则通道开始位 (Regular channel Start flag) 该位由硬件在规则通道转换开始时设置,由软件清除。 0:规则通道转换未开始; 1:规则通道转换已开始。 位3 JSTRT:注入通道开始位 (Injected channel Start flag) 该位由硬件在注入通道组转换开始时设置,由软件清除。 0:注入通道组转换未开始; 1:注入通道组转换已开始。 位2 JEOC:注入通道转换结束位 (Injected channel end of conversion) 该位由硬件在所有注入通道组转换结束时设置,由软件清除 0:转换未完成; 1:转换完成。 位1 EOC:转换结束位 (End of conversion) 该位由硬件在(规则或注入)通道组转换结束时设置,由软件清除或由读取ADC_DR时清除 0:转换未完成; 1:转换完成。 位0 AWD:模拟看门狗标志位 (Analog watchdog flag) 该位由硬件在转换的电压值超出了ADC_LTR和ADC_HTR寄存器定义的范围时设置,由软件清 除 0:没有发生模拟看门狗事件; 1:发生模拟看门狗事件。 170/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) STM32F10xxx参考手册 11.12.2 ADC控制寄存器 1(ADC_CR1) 地址偏移:0x04 复位值:0x0000 0000 31 30 29 15 14 13 DISCNUM[2:0] rw rw rw 28 27 26 25 保留 12 11 10 9 JDISC EN DISC EN JAUTO AWD SGL rw rw rw rw 24 23 22 21 20 AWDEN JAWD EN 保留 rw rw 8 7 6 5 4 SCAN JEOC IE AWDIE EOCIE rw rw rw rw rw 19 18 17 16 DUALMOD[3:0] rw rw rw rw 3 2 1 0 AWDCH[4:0] rw rw rw rw 位31:24 保留。必须保持为0。 位23 AWDEN:在规则通道上开启模拟看门狗 (Analog watchdog enable on regular channels) 该位由软件设置和清除。 0:在规则通道上禁用模拟看门狗; 1:在规则通道上使用模拟看门狗。 位22 JAWDEN:在注入通道上开启模拟看门狗 (Analog watchdog enable on injected channels) 该位由软件设置和清除。 0:在注入通道上禁用模拟看门狗; 1:在注入通道上使用模拟看门狗。 位21:20 保留。必须保持为0。 位19:16 DUALMOD[3:0]:双模式选择 (Dual mode selection) 软件使用这些位选择操作模式。 0000:独立模式 0001:混合的同步规则+注入同步模式 0010:混合的同步规则+交替触发模式 0011:混合同步注入+快速交叉模式 0100:混合同步注入+慢速交叉模式 0101:注入同步模式 0110:规则同步模式 0111:快速交叉模式 1000:慢速交叉模式 1001:交替触发模式 注: 在ADC2和ADC3中这些位为保留位 在双模式中,改变通道的配置会产生一个重新开始的条件,这将导致同步丢失。建议在进行任 何配置改变前关闭双模式。 位15:13 DISCNUM[2:0]:间断模式通道计数 (Discontinuous mode channel count) 软件通过这些位定义在间断模式下,收到外部触发后转换规则通道的数目 000:1个通道 001:2个通道 …… 111:8个通道 位12 JDISCEN:在注入通道上的间断模式 (Discontinuous mode on injected channels) 该位由软件设置和清除,用于开启或关闭注入通道组上的间断模式 0:注入通道组上禁用间断模式; 1:注入通道组上使用间断模式。 171/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) STM32F10xxx参考手册 位11 位10 位9 位8 位7 位6 位5 位4:0 DISCEN:在规则通道上的间断模式 (Discontinuous mode on regular channels) 该位由软件设置和清除,用于开启或关闭规则通道组上的间断模式 0:规则通道组上禁用间断模式; 1:规则通道组上使用间断模式。 JAUTO:自动的注入通道组转换 (Automatic Injected Group conversion) 该位由软件设置和清除,用于开启或关闭规则通道组转换结束后自动的注入通道组转换 0:关闭自动的注入通道组转换; 1:开启自动的注入通道组转换。 AWDSGL:扫描模式中在一个单一的通道上使用看门狗 (Enable the watchdog on a single channel in scan mode) 该位由软件设置和清除,用于开启或关闭由AWDCH[4:0]位指定的通道上的模拟看门狗功能 0:在所有的通道上使用模拟看门狗; 1:在单一通道上使用模拟看门狗。 SCAN:扫描模式 (Scan mode) 该位由软件设置和清除,用于开启或关闭扫描模式。在扫描模式中,转换由ADC_SQRx或 ADC_JSQRx寄存器选中的通道。 0:关闭扫描模式; 1:使用扫描模式。 注 : 如 果 分 别 设 置 了 EOCIE 或 JEOCIE 位 , 只 在 最 后 一 个 通 道 转 换 完 毕 后 才 会 产 生 EOC 或 JEOC中断。 JEOCIE:允许产生注入通道转换结束中断 (Interrupt enable for injected channels) 该位由软件设置和清除,用于禁止或允许所有注入通道转换结束后产生中断。 0:禁止JEOC中断; 1:允许JEOC中断。当硬件设置JEOC位时产生中断。 AWDIE:允许产生模拟看门狗中断 (Analog watchdog interrupt enable) 该位由软件设置和清除,用于禁止或允许模拟看门狗产生中断。在扫描模式下,如果看门狗检 测到超范围的数值时,只有在设置了该位时扫描才会中止。 0:禁止模拟看门狗中断; 1:允许模拟看门狗中断。 EOCIE:允许产生EOC中断 (Interrupt enable for EOC) 该位由软件设置和清除,用于禁止或允许转换结束后产生中断。 0:禁止EOC中断; 1:允许EOC中断。当硬件设置EOC位时产生中断。 AWDCH[4:0]:模拟看门狗通道选择位 (Analog watchdog channel select bits) 这些位由软件设置和清除,用于选择模拟看门狗保护的输入通道。 00000:ADC模拟输入通道0 00001:ADC模拟输入通道1 …… 01111:ADC模拟输入通道15 10000:ADC模拟输入通道16 10001:ADC模拟输入通道17 保留所有其他数值。 注:ADC1的模拟输入通道16和通道17在芯片内部分别连到了温度传感器和VREFINT。 ADC2的模拟输入通道16和通道17在芯片内部连到了VSS。 ADC3模拟输入通道9、14、15、16、17与Vss相连。 172/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) STM32F10xxx参考手册 11.12.3 ADC控制寄存器 2(ADC_CR2) 31 15 JEXT TRIG rw 地址偏移:0x08 复位值:0x0000 0000 30 29 28 27 26 25 保留 14 13 12 JEXTSEL[2:0] rw rw rw 11 ALIGN rw 10 9 保留 24 23 22 21 20 19 18 17 16 TS SW JSW EXT VREFE START START TRIG EXTSEL[2:0] 保留 rw rw rw rw rw rw rw 8 7 6 5 4 3 2 1 0 DMA 保留 RST CAL CAL CONT ADON rw rw rw rw rw 位31:24 保留。必须保持为0。 位23 位22 TSVREFE:温度传感器和VREFINT使能 (Temperature sensor and VREFINT enable) 该位由软件设置和清除,用于开启或禁止温度传感器和VREFINT通道。在多于1个ADC的器件 中,该位仅出现在ADC1中。 0:禁止温度传感器和VREFINT; 1:启用温度传感器和VREFINT。 SWSTART:开始转换规则通道 (Start conversion of regular channels) 由软件设置该位以启动转换,转换开始后硬件马上清除此位。如果在EXTSEL[2:0]位中选择了 SWSTART为触发事件,该位用于启动一组规则通道的转换, 0:复位状态; 1:开始转换规则通道。 位21 JSWSTART:开始转换注入通道 (Start conversion of injected channels) 由软件设置该位以启动转换,软件可清除此位或在转换开始后硬件马上清除此位。如果在 JEXTSEL[2:0]位中选择了JSWSTART为触发事件,该位用于启动一组注入通道的转换, 0:复位状态; 1:开始转换注入通道。 位20 EXTTRIG : 规则 通 道 的外部触发转换模式 (External trigger conversion mode for regular channels) 该位由软件设置和清除,用于开启或禁止可以启动规则通道组转换的外部触发事件。 0:不用外部事件启动转换; 1:使用外部事件启动转换。 位19:17 EXTSEL[2:0]:选择启动规则通道组转换的外部事件 (External event select for regular group) 这些位选择用于启动规则通道组转换的外部事件 ADC1和ADC2的触发配置如下 000:定时器1的CC1事件 100:定时器3的TRGO事件 001:定时器1的CC2事件 101:定时器4的CC4事件 010:定时器1的CC3事件 110:EXTI线11/ TIM8_TRGO事件,仅大容量产 品具有TIM8_TRGO功能 011:定时器2的CC2事件 111:SWSTART ADC3的触发配置如下 000:定时器3的CC1事件 100:定时器8的TRGO事件 001:定时器2的CC3事件 101:定时器5的CC1事件 010:定时器1的CC3事件 110:定时器5的CC3事件 011:定时器8的CC1事件 111:SWSTART 位16 保留。必须保持为0。 173/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) STM32F10xxx参考手册 位15 位14:12 位11 位10:9 位8 位7:4 位3 位2 位1 JEXTTRIG:注入通道的外部触发转换模式 (External trigger conversion mode for injected channels) 该位由软件设置和清除,用于开启或禁止可以启动注入通道组转换的外部触发事件。 0:不用外部事件启动转换; 1:使用外部事件启动转换。 JEXTSEL[2:0]:选择启动注入通道组转换的外部事件 (External event select for injected group) 这些位选择用于启动注入通道组转换的外部事件。 ADC1和ADC2的触发配置如下 000:定时器1的TRGO事件 100:定时器3的CC4事件 001:定时器1的CC4事件 101:定时器4的TRGO事件 010:定时器2的TRGO事件 110:EXTI线15/TIM8_CC4事件(仅大容量产品具 有TIM8_CC4) 011:定时器2的CC1事件 111:JSWSTART ADC3的触发配置如下 000:定时器1的TRGO事件 100:定时器8的CC4事件 001:定时器1的CC4事件 101:定时器5的TRGO事件 010:定时器4的CC3事件 110:定时器5的CC4事件 011:定时器8的CC2事件 111:JSWSTART ALIGN:数据对齐 (Data alignment) 该位由软件设置和清除。参考图29和图30。 0:右对齐; 1:左对齐。 保留。必须保持为0。 DMA:直接存储器访问模式 (Direct memory access mode) 该位由软件设置和清除。详见DMA控制器章节。 0:不使用DMA模式; 1:使用DMA模式。 注:只有ADC1和ADC3能产生DMA请求。 保留。必须保持为0。 RSTCAL:复位校准 (Reset calibration) 该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。 0:校准寄存器已初始化; 1:初始化校准寄存器。 注:如果正在进行转换时设置RSTCAL,清除校准寄存器需要额外的周期。 CAL:A/D校准 (A/D Calibration) 该位由软件设置以开始校准,并在校准结束时由硬件清除。 0:校准完成; 1:开始校准。 CONT:连续转换 (Continuous conversion) 该位由软件设置和清除。如果设置了此位,则转换将连续进行直到该位被清除。 0:单次转换模式; 1:连续转换模式。 174/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 模拟/数字转换(ADC) STM32F10xxx参考手册 位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) 31 15 SMP 15 0 rw 地址偏移:0x0C 复位值:0x0000 0000 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 SMP17[2:0] SMP16[2:0] SMP15[2:1] rw rw rw rw rw rw rw rw rw rw rw 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SMP14[2:0] SMP13[2:0] SMP12[2:0] SMP11[2:0] SMP10[2:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:24 位23:0 保留。必须保持为0。 SMPx[2:0]:选择通道x的采样时间 (Channel x Sample time selection) 这些位用于独立地选择每个通道的采样时间。在采样周期中通道选择位必须保持不变。 000:1.5周期 100:41.5周期 001:7.5周期 101:55.5周期 010:13.5周期 110:71.5周期 011:28.5周期 111:239.5周期 注:ADC1的模拟输入通道16和通道17在芯片内部分别连到了温度传感器和VREFINT。 ADC2的模拟输入通道16和通道17在芯片内部连到了Vss。 ADC3模拟输入通道14、15、16、17与Vss相连 11.12.5 ADC采样时间寄存器 2(ADC_SMPR2) 地址偏移:0x10 复位值:0x0000 0000 31 30 保留 29 28 27 SMP9[2:0] 26 25 24 SMP8[2:0] 23 22 21 SMP7[2:0] 20 19 18 17 16 SMP6[2:0] SMP5[2:1] rw rw 15 14 13 12 SMP 50 SMP4[2:0] rw rw rw rw rw rw rw 11 10 9 SMP3[2:0] rw rw rw rw rw rw 8 7 6 SMP2[2:0] rw rw rw rw rw rw 5 4 3 SMP1[2:0] rw rw rw rw rw rw 2 1 0 SMP0[2:0] rw rw rw 位31:30 保留。必须保持为0。 位29:0 SMPx[2:0]:选择通道x的采样时间 (Channel x Sample time selection) 这些位用于独立地选择每个通道的采样时间。在采样周期中通道选择位必须保持不变。 000:1.5周期 100:41.5周期 001:7.5周期 101:55.5周期 010:13.5周期 110:71.5周期 011:28.5周期 111:239.5周期 注:ADC3模拟输入通道9与Vss相连 175/754 参照2009年12月 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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 JOFFSETx[11:0] rw rw rw rw rw rw rw rw rw rw rw rw 位31:12 保留。必须保持为0。 位11:0 JOFFSETx[11:0]:注入通道x的数据偏移 (Data offset for injected channel x) 当转换注入通道时,这些位定义了用于从原始转换数据中减去的数值。转换的结果可以在 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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 HT[11:0] rw rw rw rw rw rw rw rw rw rw rw rw 位31:12 保留。必须保持为0。 位11:0 HT[11:0]:模拟看门狗高阀值 (Analog watchdog high threshold) 这些位定义了模拟看门狗的阀值高限。 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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 LT[11:0] rw rw rw rw rw rw rw rw rw rw rw rw 位31:12 保留。必须保持为0。 位11:0 LT[11:0]:模拟看门狗低阀值 (Analog watchdog low threshold) 这些位定义了模拟看门狗的阀值低限。 176/754 参照2009年12月 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 保留 L[3:0] SQ16[4:1] rw rw rw rw rw rw rw rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SQ16 _0 SQ15[4:0] SQ14[4:0] SQ13[4:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:24 保留。必须保持为0。 位23:20 L[3:0]:规则通道序列长度 (Regular channel sequence length) 这些位由软件定义在规则通道转换序列中的通道数目。 0000:1个转换 0001:2个转换 …… 1111:16个转换 位19:15 SQ16[4:0]:规则序列中的第16个转换 (16th conversion in regular sequence) 这些位由软件定义转换序列中的第16个转换通道的编号(0~17)。 位14:10 SQ15[4:0]:规则序列中的第15个转换 (15th conversion in regular sequence) 位9:5 SQ14[4:0]:规则序列中的第14个转换 (14th conversion in regular sequence) 位4:0 SQ13[4:0]:规则序列中的第13个转换 (13th conversion in regular sequence) 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 保留 SQ12[4:0] SQ11[4:0] SQ10[4:1] 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 SQ10 _0 SQ9[4:0] SQ8[4:0] SQ7[4:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:30 位29:25 位24:20 位19:15 位14:10 位9:5 位4:0 保留。必须保持为0。 SQ12[4:0]:规则序列中的第12个转换 (12th conversion in regular sequence) 这些位由软件定义转换序列中的第12个转换通道的编号(0~17)。 SQ11[4:0]:规则序列中的第11个转换 (11th conversion in regular sequence) SQ10[4:0]:规则序列中的第10个转换 (10th conversion in regular sequence) SQ9[4:0]:规则序列中的第9个转换 (9th conversion in regular sequence) SQ8[4:0]:规则序列中的第8个转换 (82th conversion in regular sequence) SQ7[4:0]:规则序列中的第7个转换 (7th conversion in regular sequence) 177/754 参照2009年12月 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 保留 SQ6[4:0] SQ5[4:0] SQ4[4:1] 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 SQ4_0 SQ3[4:0] SQ2[4:0] SQ1[4:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:30 保留。必须保持为0。 位29:25 SQ6[4:0]:规则序列中的第6个转换 (6th conversion in regular sequence) 这些位由软件定义转换序列中的第6个转换通道的编号(0~17)。 位24:20 SQ5[4:0]:规则序列中的第5个转换 (5th conversion in regular sequence) 位19:15 SQ4[4:0]:规则序列中的第4个转换 (4th conversion in regular sequence) 位14:10 SQ3[4:0]:规则序列中的第3个转换 (3rd conversion in regular sequence) 位9:5 SQ2[4:0]:规则序列中的第2个转换 (2nd conversion in regular sequence) 位4:0 SQ1[4:0]:规则序列中的第1个转换 (1st conversion in regular sequence) 11.12.12 ADC注入序列寄存器(ADC_JSQR) 31 15 JSQ4_0 rw 地址偏移:0x38 复位值:0x0000 0000 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 JL[3:0] JSQ4[4:1] rw rw rw rw rw rw 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 JSQ3[4:0] JSQ2[4:0] JSQ1[4:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:22 位21:20 位19:15 位14:10 位9:5 位4:0 保留。必须保持为0。 JL[1:0]:注入通道序列长度 (Injected sequence length) 这些位由软件定义在规则通道转换序列中的通道数目。 00:1个转换 01:2个转换 10:3个转换 11:4个转换 JSQ4[4:0]:注入序列中的第4个转换 (4th conversion in injected sequence) 这些位由软件定义转换序列中的第4个转换通道的编号(0~17)。 注:不同于规则转换序列,如果JL[1:0]的长度小于4,则转换的序列顺序是从(4-JL)开始。例 如:ADC_JSQR[21:0] = 10 00011 00011 00111 00010,意味着扫描转换将按下列通道顺序转 换:7、3、3,而不是2、7、3。 JSQ3[4:0]:注入序列中的第3个转换 (3rd conversion in injected sequence) JSQ2[4:0]:注入序列中的第2个转换 (2nd conversion in injected sequence) JSQ1[4:0]:注入序列中的第1个转换 (1st conversion in injected sequence) 178/754 参照2009年12月 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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 JDATA[15:0] r r r r r r r r r r r r r r r r 位31:16 保留。必须保持为0。 位21:20 JDATA[15:0]:注入转换的数据 (Injected data) 这些位为只读,包含了注入通道的转换结果。数据是左对齐或右对齐,如图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 ADC2DATA[15:0] r r r r r r r r r r r r r r r r 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATA[15:0] r r r r r r r r r r r r r r r r 位31:16 ADC2DATA[15:0]:ADC2转换的数据 (ADC2 data) - 在ADC1中:双模式下,这些位包含了ADC2转换的规则通道数据。见11.9:双ADC模式 - 在ADC2和ADC3中:不使用这些位。 位15:0 DATA[15:0]:规则转换的数据 (Regular data) 这些位为只读,包含了规则通道的转换结果。数据是左对齐或右对齐,如图29和图30所示。 179/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 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 STRT 4 JSTRT 3 JEOC 2 EOC 1 AWD 0 TSVREFE SWSTART JSWSTART EXTTRIG 保留 JEXTTRIG ALIGN DMA RSTCAL CAL CONT ADON 模拟/数字转换(ADC) STM32F10xxx参考手册 11.12.15 ADC寄存器地址映像 下表列出了所有的ADC寄存器。 表69 ADC寄存器映像和复位值 偏移 寄存器 00h ADC_SR 复位值 04h ADC_CR1 复位值 保留 AWDEN JAWDEN JDISCEN DISCEN JAUTO AWDSGL SCAN JEOCIE AWDIE EOCIE 保留 DUALMOD 保留 [3:0] DISC NUM [2:0] 00000 AWDCH[4:0] 00 00000000000000000000 08h ADC_CR2 保留 EXTSEL JEXTSEL [2:0] [2:0] 保留 保留 复位值 0000000 00000 0 0000 0Ch ADC_SMPR1 采样时间位SMPx_x 复位值 00000000000000000000000000000000 10h ADC_SMPR2 采样时间位SMPx_x 复位值 00000000000000000000000000000000 14h ADC_JOFR1 复位值 保留 JOFFSET1[11:0] 000000000000 18h ADC_JOFR2 复位值 保留 JOFFSET2[11:0] 000000000000 1Ch ADC_JOFR3 复位值 保留 JOFFSET3[11:0] 000000000000 20h ADC_JOFR4 复位值 保留 JOFFSET4[11:0] 000000000000 1Ch ADC_HTR 复位值 保留 HT[11:0] 000000000000 20h ADC_LTR 复位值 保留 LT[11:0] 000000000000 2Ch ADC_SQR1 复位值 保留 L[3:0] 规则通道序列SQx_x位 000000000000000000000000 30h ADC_SQR2 保留 规则通道序列SQx_x位 复位值 000000000000000000000000000000 34h ADC_SQR3 保留 规则通道序列SQx_x位 复位值 000000000000000000000000000000 38h ADC_JSQR 保留 JL [1:0] 注入通道序列JSQx_x位 复位值 0000000000000000000000 180/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 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) STM32F10xxx参考手册 偏移 寄存器 3Ch ADC_JDR1 复位值 保留 JDATA[15:0] 0000000000000000 40h ADC_JDR2 复位值 保留 JDATA[15:0] 0000000000000000 44h ADC_JDR3 复位值 保留 JDATA[15:0] 0000000000000000 48h ADC_JDR4 复位值 保留 JDATA[15:0] 0000000000000000 4Ch ADC_DR ADC2DATA[15:0] 规则 DATA[15:0] 复位值 00000000000000000000000000000000 关于寄存器的起始地址,请参见表1。 181/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 数字/模拟转换(DAC) STM32F10xxx参考手册 12 数字/模拟转换(DAC) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 本章内容只适用于大容量的STM32F101xx和STM32F103xx产品。 12.1 DAC简介 数字/模拟转换模块(DAC)是12位数字输入,电压输出的数字/模拟转换器。DAC可以配置为8位 或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐 或右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道 可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输 入参考电压VREF+以获得更精确的转换结果。 12.2 DAC主要特征 ● 2个DAC转换器:每个转换器对应1个输出通道 ● 8位或者12位单调输出 ● 12位模式下数据左对齐或者右对齐 ● 同步更新功能 ● 噪声波形生成 ● 三角波形生成 ● 双DAC通道同时或者分别转换 ● 每个通道都有DMA功能 ● 外部触发转换 ● 输入参考电压VREF+ 单个DAC通道的框图如下图,表70给出了引脚的说明。 182/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 数字/模拟转换(DAC) 图42 DAC 通道模块框图 STM32F10xxx参考手册 表70 DAC 引脚 名称 型号类型 注释 注意: VREF+ 输入,正模拟参考电压 DAC使用的高端/正极参考电压, 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 参照2009年12月 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寄存器。 图43 单 DAC 通道模式的数据寄存器 ● 双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寄存器的操作,经过相应的移位后,写入的数据被转存到DHR1和DHR2 寄存器中(DHR1和DHR2是内部的数据保存寄存器x)。随后,DHR1和DHR2的内容或被自动地 传送到DORx寄存器,或通过软件触发或外部事件触发被传送到DORx寄存器。 图44 双 DAC 通道模式的数据寄存器 184/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 数字/模拟转换(DAC) STM32F10xxx参考手册 12.3.4 DAC转换 不能直接对寄存器DAC_DORx写入数据,任何输出到DAC通道x的数据都必须写入DAC_DHRx 寄存器(数据实际写入DAC_DHR8Rx、DAC_DHR12Lx、DAC_DHR12Rx、DAC_DHR8RD、 DAC_DHR12LD、或者DAC_DHR12RD寄存器)。 如果没有选中硬件触发(寄存器DAC_CR1的TENx位置’0’),存入寄存器DAC_DHRx的数据会在 一个APB1时钟周期后自动传至寄存器DAC_DORx。如果选中硬件触发(寄存器DAC_CR1的 TENx位置’1’),数据传输在触发发生以后3个APB1时钟周期后完成。 一旦数据从DAC_DHRx寄存器装入DAC_DORx寄存器,在经过时间tSETTLING之后,输出即有 效,这段时间的长短依电源电压和模拟输出负载的不同会有所变化。 图45 TEN=0 触发失能时转换的时间框图 12.3.5 DAC输出电压 数字输入经过DAC被线性地转换为模拟电压输出,其范围为0到VREF+。 任一DAC通道引脚上的输出电压满足下面的关系: DAC输出 = VREF x (DOR / 4095)。 12.3.6 选择DAC触发 如果TENx位被置1,DAC转换可以由某外部事件触发(定时器计数器、外部中断线)。配置控制位 TSELx[2:0]可以选择8个触发事件之一触发DAC转换。 表71 外部触发 触发源 类型 TSELx[2:0] 定时器6 TRGO事件 000 互联型产品为定时器3 TRGO事件 或大容量产品为定时器8 TRGO事件 001 定时器7 TRGO事件 来自片上定时器的内部信号 010 定时器5 TRGO事件 011 定时器2 TRGO事件 100 定时器4 TRGO事件 101 EXTI线路9 外部引脚 110 SWTRIG(软件触发) 软件控制位 111 每次DAC接口侦测到来自选中的定时器TRGO输出,或者外部中断线9的上升沿,最近存放在寄 存器DAC_DHRx中的数据会被传送到寄存器DAC_DORx中。在3个APB1时钟周期后,寄存器 DAC_DORx更新为新值。 如果选择软件触发,一旦SWTRIG位置’1’,转换即开始。在数据从DAC_DHRx寄存器传送到 DAC_DORx寄存器后,SWTRIG位由硬件自动清’0’。 185/754 参照2009年12月 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功能。2个DMA通道可分别用于2个DAC通道的DMA请求。 如果DMAENx位置’1’,一旦有外部触发(而不是软件触发)发生,则产生一个DMA请求,然后 DAC_DHRx寄存器的数据被传送到DAC_DORx寄存器。 在双DAC模式下,如果2个通道的DMAENx位都为’1’,则会产生2个DMA请求。如果实际只需要 一个DMA传输,则应只选择其中一个DMAENx位置’1’。这样,程序可以在只使用一个DMA请 求,一个DMA通道的情况下,处理工作在双DAC模式的2个DAC通道。 DAC的DMA请求不会累计,因此如果第2个外部触发发生在响应第1个外部触发之前,则不能处 理第2个DMA请求,也不会报告错误。 12.3.8 噪声生成 可以利用线性反馈移位寄存器(Linear Feedback Shift Register LFSR)产生幅度变化的伪噪声。 设置WAVE[1:0]位为’01’选择DAC噪声生成功能。寄存器LFSR的预装入值为0xAAA。按照特定 算法,在每次触发事件后3个APB1时钟周期之后更新该寄存器的值。 图46 DAC LFSR 寄存器算法 设置DAC_CR寄存器的MAMPx[3:0]位可以屏蔽部分或者全部LFSR的数据,这样的得到的LSFR 值与DAC_DHRx的数值相加,去掉溢出位之后即被写入DAC_DORx寄存器。 如果寄存器LFSR值为0x000,则会注入’1’(防锁定机制)。 将WAVEx[1:0]位置’0’可以复位LFSR波形的生成算法。 图47 带 LFSR 波形生成的 DAC 转换(使能软件触发) 注意: 为了产生噪声,必须使能DAC触发,即设DAC_CR寄存器的TENx位为’1’。 186/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 数字/模拟转换(DAC) STM32F10xxx参考手册 12.3.9 三角波生成 可以在DC或者缓慢变化的信号上加上一个小幅度的三角波。设置WAVEx[1:0]位为’10’选择DAC 的三角波生成功能。设置DAC_CR寄存器的MAMPx[3:0]位来选择三角波的幅度。内部的三角波 计数器每次触发事件之后3个APB1时钟周期后累加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通道转换 在需要2个DAC同时工作的情况下,为了更有效地利用总线带宽,DAC集成了3个供双DAC模式 使用的寄存器:DHR8RD、DHR12RD和DHR12LD,只需要访问一个寄存器即可完成同时驱动 2个DAC通道的操作。 对于双DAC通道转换和这些专用寄存器,共有11种转换模式可用。这些转换模式在只使用一个 DAC通道的情况下,仍然可通过独立的DHRx寄存器操作。 所有模式详述于以下章节。 12.4.1 不使用波形发生器的独立触发 按照下列顺序设置DAC工作在此转换模式: ● 分别设置2个DAC通道的触发使能位TEN1和TEN2为’1’; ● 通过设置TSEL1[2:0]和 TSEL2[2:0]位为不同值,分别配置2个DAC通道的不同触发源; ● 将双DAC通道转换数据装入所需的DHR寄存器(DHR12RD、DHR12LD 或DHR8RD)。 187/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 数字/模拟转换(DAC) STM32F10xxx参考手册 当 发 生 DAC 通 道 1 触 发 事 件 时 , ( 延 迟 3 个 APB1 时 钟 周 期 后 ) 寄 存 器 DHR1 的 值 传 入 寄 存 器 DAC_DOR1。 当 发 生 DAC 通 道 2 触 发 事 件 时 , ( 延 迟 3 个 APB1 时 钟 周 期 后 ) 寄 存 器 DHR2 的 值 传 入 寄 存 器 DAC_DOR2。 12.4.2 使用相同LFSR的独立触发 按照下列顺序设置DAC工作在此转换模式: ● 分别设置2个DAC通道的触发使能位TEN1和TEN2为’1’; ● 通过设置TSEL1[2:0]和 TSEL2[2:0]位为不同值,分别配置2个DAC通道的不同触发源; ● 设置2个DAC通道的WAVEx[1:0]位为”01”,并设置MAMPx[3:0]为相同的LFSR屏蔽值; ● 将双DAC通道转换数据装入所需的DHR寄存器(DHR12RD、DHR12LD 或DHR8RD)。 当发生DAC通道1触发事件时,具有相同屏蔽的LFSR1计数器值与DHR1寄存器数值相加,(延迟 3个APB1时钟周期后)结果传入寄存器DAC_DOR1,然后更新LFSR1计数器。 当发生DAC通道2触发事件时,具有相同屏蔽的LFSR2计数器值与DHR2寄存器数值相加,(延迟 3个APB1时钟周期后)结果传入寄存器DAC_DOR2,然后更新LFSR2计数器。 12.4.3 使用不同LFSR的独立触发 按照下列顺序设置DAC工作在此转换模式: ● 分别设置2个DAC通道的触发使能位TEN1和TEN2为’1’; ● 通过设置TSEL1[2:0]和 TSEL2[2:0]位为不同值,分别配置2个DAC通道的不同触发源; ● 设置2个DAC通道的WAVEx[1:0]位为”01”,并设MAMPx[3:0]为不同的LFSR屏蔽值; ● 将双DAC通道转换数据装入所需的DHR寄存器(DHR12RD、DHR12LD 或者DHR8RD)。 当发生DAC通道1触发事件时,按照MAMP1[3:0]所设屏蔽的LFSR1计数器值与DHR1寄存器数 值相加,(延迟3个APB1时钟周期后)结果传入寄存器DAC_DOR1,然后更新LFSR1计数器。 当发生DAC通道2触发事件时,按照MAMP2[3:0]所设屏蔽的LFSR2计数器值与DHR2寄存器数 值相加,(延迟3个APB1时钟周期后)结果传入寄存器DAC_DOR2,然后更新LFSR2计数器。 12.4.4 产生相同三角波的独立触发 按照下列顺序设置DAC工作在此转换模式: ● 分别设置2个DAC通道的触发使能位TEN1和TEN2为’1’; ● 通过设置TSEL1[2:0]和 TSEL2[2:0]位为不同值,分别配置2个DAC通道的不同触发源; ● 设置2个DAC通道的WAVEx[1:0]位为”1x”,并设MAMPx[3:0]为相同的三角波幅值; ● 将双DAC通道转换数据装入所需的DHR寄存器(DHR12RD、DHR12LD 或DHR8RD)。 当发生DAC通道1触发事件时,相同的三角波幅值加上DHR1寄存器的值,(延迟3个APB1时钟周 期后)结果传入寄存器DAC_DOR1,然后更新DAC通道1三角波计数器。 当发生DAC通道2触发事件时,相同的三角波幅值加上DHR2寄存器的值,(延迟3个APB1时钟周 期后)结果传入寄存器DAC_DOR2,然后更新DAC通道2三角波计数器。 12.4.5 产生不同三角波的独立触发 按照下列顺序设置DAC工作在此转换模式: ● 分别设置2个DAC通道的触发使能位TEN1和TEN2为’1’; ● 通过设置TSEL1[2:0]和 TSEL2[2:0]位为不同值,分别配置2个DAC通道的不同触发源; ● 设置2个DAC通道的WAVEx[1:0]位为’1x’,并设MAMPx[3:0]为不同的三角波幅值。 ● 将双DAC通道转换数据装入所需的DHR寄存器(DHR12RD、DHR12LD 或DHR8RD)。 188/754 参照2009年12月 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寄存器(DHR12RD、DHR12LD 或DHR8RD)。 在此配置下,一个APB1时钟周期后,DHR1和DHR2寄存器的数值即被分别传入DAC_DOR1和 DAC_DOR2寄存器。 12.4.7 不使用波形发生器的同时触发 按照下列顺序设置DAC工作在此转换模式: ● 分别设置2个DAC通道的触发使能位TEN1和TEN2为’1’; ● 通过设置TSEL1[2:0]和 TSEL2[2:0]位为相同值,分别配置2个DAC通道使用相同触发源; ● 将双DAC通道转换数据装入所需的DHR寄存器(DHR12RD、DHR12LD 或DHR8RD)。 当 发 生 触 发 事 件 时 , ( 延 迟 3 个 APB1 时 钟 周 期 后 )DHR1 和 DHR2 寄 存 器 的 数 值 分 别 传 入 DAC_DOR1和DAC_DOR2寄存器。 12.4.8 使用相同LFSR的同时触发 按照下列顺序设置DAC工作在此转换模式: ● 分别设置2个DAC通道的触发使能位TEN1和TEN2为’1’; ● 通过设置TSEL1[2:0]和 TSEL2[2:0]位为相同值,分别配置2个DAC通道使用相同触发源; ● 设置2个DAC通道的WAVEx[1:0]位为”01”,并设MAMPx[3:0]为相同的LFSR屏蔽值; ● 将双DAC通道转换数据装入所需的DHR寄存器(DHR12RD、DHR12LD 或DHR8RD); 当发生触发事件时,MAMP1[3:0]所设屏蔽的LFSR1计数器值与DHR1寄存器的数值相加,(延迟 3个APB1时钟周期后)结果传入DAC_DOR1寄存器,然后更新LFSR1计数器。 同样,MAMP1[3:0]所设屏蔽的LFSR2计数器值与DHR2寄存器的数值相加,(延迟3个APB1时钟 周期后)结果传入寄存器DAC_DOR2,然后更新LFSR2计数器。 12.4.9 使用不同LFSR的同时触发 按照下列顺序设置DAC工作在此转换模式: ● 分别设置2个DAC通道的触发使能位TEN1和TEN2为’1’; ● 通过设置TSEL1[2:0]和 TSEL2[2:0]位为相同值,分别配置2个DAC通道使用相同触发源; ● 设置2个DAC通道的WAVEx[1:0]位为’01’,并设MAMPx[3:0]为不同的LFSR屏蔽值; ● 将双DAC通道转换数据装入所需的DHR寄存器(DHR12RD、DHR12LD 或DHR8RD)。 当发生触发事件时,具有相同屏蔽的LFSR1计数器值与DHR1寄存器数值相加,(延迟3个APB1 时钟周期后)结果传入寄存器DAC_DOR1,然后更新LFSR1计数器。 同时,具有相同屏蔽的LFSR2计数器值与DHR2寄存器数值相加,(延迟3个APB1时钟周期后)结 果传入寄存器DAC_DOR2,然后更新LFSR2计数器。 12.4.10 使用相同三角波发生器的同时触发 按照下列顺序设置DAC工作在此转换模式: ● 分别设置2个DAC通道的触发使能位TEN1和TEN2为’1’: 189/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 数字/模拟转换(DAC) STM32F10xxx参考手册 ● 通过设置TSEL1[2:0]和 TSEL2[2:0]位为相同值,分别配置2个DAC通道使用相同触发源。 ● 设置2个DAC通道的WAVEx[1:0]位为’1x’,并设MAMPx[3:0]为相同的三角波幅值。 ● 将双DAC通道转换数据装入所需的DHR寄存器(DHR12RD、DHR12LD 或DHR8RD)。 当发生触发事件时,相同的三角波幅值与DHR1寄存器数值相加,(延迟3个APB1时钟周期后)结 果传入寄存器DAC_DOR1,然后更新LFSR1计数器。 同时,相同的三角波幅值与DHR2寄存器数值相加,(延迟3个APB1时钟周期后)结果传入寄存器 DAC_DOR2,然后更新LFSR2计数器。 12.4.11 使用不同三角波发生器的同时触发 按照下列顺序设置DAC工作在此转换模式: ● 分别设置2个DAC通道的触发使能位TEN1和TEN2为’1’: ● 通过设置TSEL1[2:0]和 TSEL2[2:0]位为相同值,分别配置2个DAC通道使用相同触发源。 ● 设置2个DAC通道的WAVEx[1:0]位为’1x’,并设MAMPx[3:0]为不同的三角波幅值。 ● 将双DAC通道转换数据装入所需的DHR寄存器(DHR12RD、DHR12LD 或DHR8RD)。 当发生触发事件时,MAMP1[3:0]所设的三角波幅值与DHR1寄存器数值相加,(延迟3个APB1时 钟周期后)结果传入寄存器DAC_DOR1,然后更新LFSR1计数器。 同时,MAMP2[3:0]所设的三角波幅值与DHR2寄存器数值相加,(延迟3个APB1时钟周期后)结 果传入寄存器DAC_DOR2,然后更新LFSR2计数器。 190/754 参照2009年12月 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 MAMP2[3:0] WAVE2[2:0] TSEL2[2:0] TEN2 BOFF2 EN2 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 保留 DMAEN1 MAMP13:0] WAVE1[2:0] TSEL1[2:0] TEN1 BOFF1 EN1 rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:29 保留。 位28 DMAEN2:DAC通道2 DMA使能 (DAC channel2 DMA enable) 该位由软件设置和清除。 0:关闭DAC通道2 DMA模式; 1:使能DAC通道2 DMA模式。 位27:24 MAMP2[3:0]:DAC通道2屏蔽/幅值选择器 (DAC channel2 mask/amplitude selector) 由软件设置这些位,用来在噪声生成模式下选择屏蔽位,在三角波生成模式下选择波形的幅 值。 0000:不屏蔽LSFR位0 / 三角波幅值等于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。 位23:22 WAVE2[1:0]:DAC通道2噪声/三角波生成使能 (DAC channel2 noise/triangle wave generation enable) 该2位由软件设置和清除。 00:关闭波形发生器; 10:使能噪声波形发生器; 1x:使能三角波发生器。 191/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 数字/模拟转换(DAC) STM32F10xxx参考手册 位21:19 位18 位17 位16 位15:13 位12 位11:8 TSEL2[2:0]:DAC通道2触发选择 (DAC channel2 trigger selection) 该3位用于选择DAC通道2的外部触发事件。 000:TIM6 TRGO事件; 001:对于互联型产品是TIM3 TRGO事件,对于大容量产品是TIM8 TRGO事件; 010:TIM7 TRGO事件; 011:TIM5 TRGO事件; 100:TIM2 TRGO事件; 101:TIM4 TRGO事件; 110:外部中断线9; 111:软件触发。 注意:该3位只能在TEN2 = 1(DAC通道2触发使能)时设置。 TEN2:DAC通道2触发使能 (DAC channel2 trigger enable) 该位由软件设置和清除,用来使能/关闭DAC通道2的触发。 0 : 关 闭 DAC 通 道 2 触 发 , 写 入 DAC_DHRx 寄 存 器 的 数 据 在 1 个 APB1 时 钟 周 期 后 传 入 DAC_DOR2寄存器; 1 : 使 能 DAC 通 道 2 触 发 , 写 入 DAC_DHRx 寄 存 器 的 数 据 在 3 个 APB1 时 钟 周 期 后 传 入 DAC_DOR2寄存器。 注意:如果选择软件触发,写入寄存器DAC_DHRx的数据只需要1个APB1时钟周期就可以传入 寄存器DAC_DOR2。 BOFF2:关闭DAC通道2输出缓存 (DAC channel2 output buffer disable) 该位由软件设置和清除,用来使能/关闭DAC通道2的输出缓存。 0:使能DAC通道2输出缓存; 1:关闭DAC通道2输出缓存。 EN2:DAC通道2使能 (DAC channel2 enable) 该位由软件设置和清除,用来使能/关闭DAC通道2。 0:关闭DAC通道2; 1:使能DAC通道2。 保留。 DMAEN1:DAC通道1 DMA使能 (DAC channel1 DMA enable) 该位由软件设置和清除。 0:关闭DAC通道1 DMA模式; 1:使能DAC通道1 DMA模式。 MAMP1[3:0]:DAC通道1屏蔽/幅值选择器 (DAC channel1 mask/amplitude selector) 由软件设置这些位,用来在噪声生成模式下选择屏蔽位,在三角波生成模式下选择波形的幅 值。 0000:不屏蔽LSFR位0 / 三角波幅值等于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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 数字/模拟转换(DAC) STM32F10xxx参考手册 位7:6 位5:3 位2 位1 位0 WAVE1[1:0]:DAC通道1噪声/三角波生成使能 (DAC channel1 noise/triangle wave generation enable) 该2位由软件设置和清除。 00:关闭波形生成; 10:使能噪声波形发生器; 1x:使能三角波发生器。 TSEL1[2:0]:DAC通道1触发选择 (DAC channel1 trigger selection) 该位用于选择DAC通道1的外部触发事件。 000:TIM6 TRGO事件; 001:对于互联型产品是TIM3 TRGO事件,对于大容量产品是TIM8 TRGO事件; 010:TIM7 TRGO事件; 011:TIM5 TRGO事件; 100:TIM2 TRGO事件; 101:TIM4 TRGO事件; 110:外部中断线9; 111:软件触发。 注意:该位只能在TEN1= 1(DAC通道1触发使能)时设置。 TEN1:DAC通道1触发使能 (DAC channel1 trigger enable) 该位由软件设置和清除,用来使能/关闭DAC通道1的触发。 0:关闭DAC通道1触发,写入寄存器DAC_DHRx的数据在1个APB1时钟周期后传入寄存器 DAC_DOR1; 1:使能DAC通道1触发,写入寄存器DAC_DHRx的数据在3个APB1时钟周期后传入寄存器 DAC_DOR1。 注意:如果选择软件触发,写入寄存器DAC_DHRx的数据只需要1个APB1时钟周期就可以传入 寄存器DAC_DOR1。 BOFF1:关闭DAC通道1输出缓存 (DAC channel1 output buffer disable) 该位由软件设置和清除,用来使能/关闭DAC通道1的输出缓存。 0:使能DAC通道1输出缓存; 1:关闭DAC通道1输出缓存。 EN1:DAC通道1使能 (DAC channel1 enable) 该位由软件设置和清除,用来使能/失能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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 SW SW TRIG2 TRIG1 w w 位31:2 保留。 位1 SWTRIG2:DAC通道2软件触发 (DAC channel2 software trigger) 该位由软件设置和清除,用来使能/关闭软件触发。 0:关闭DAC通道2软件触发; 1:使能DAC通道2软件触发。 注意:一旦寄存器DAC_DHR2的数据传入寄存器DAC_DOR2,(1个APB1时钟周期后)该位由 硬件置’0’。 193/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 数字/模拟转换(DAC) STM32F10xxx参考手册 位0 SWTRIG1:DAC通道1软件触发 (DAC channel1 software trigger) 该位由软件设置和清除,用来使能/关闭软件触发。 0:关闭DAC通道1软件触发; 1:使能DAC通道1软件触发。 注意:一旦寄存器DAC_DHR1的数据传入寄存器DAC_DOR1,(1个APB1时钟周期后)该位由 硬件置’0’。 12.5.3 DAC通道 1 的 12 位右对齐数据保持寄存器(DAC_DHR12R1) 地址偏移:0x08 复位值: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 保留 DACC1DHR[11:0] rw rw rw rw rw rw rw rw rw rw rw rw 位31:12 保留。 位11:0 DACC1DHR[11:0]:DAC通道1的12位右对齐数据 (DAC channel1 12-bit right-aligned data) 该位由软件写入,表示DAC通道1的12位数据。 12.5.4 DAC通道 1 的 12 位左对齐数据保持寄存器(DAC_DHR12L1) 地址偏移:0x0C 复位值: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 DACC1DHR[11:0] 保留 rw rw rw rw rw rw rw rw rw rw rw rw 位31:16 保留。 位15:4 DACC1DHR[11:0]:DAC通道1的12位左对齐数据 (DAC channel1 12-bit left-aligned data) 该位由软件写入,表示DAC通道1的的12位数据. 位3:0 保留。 12.5.5 DAC通道 1 的 8 位右对齐数据保持寄存器(DAC_DHR8R1) 地址偏移:0x10 复位值: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 保留 DACC1DHR[7:0] rw rw rw rw rw rw rw rw 194/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 数字/模拟转换(DAC) STM32F10xxx参考手册 位31:18 位7:0 保留。 DACC1DHR[7:0]:DAC通道1的8位右对齐数据 (DAC channel1 8-bit right-aligned data) 该位由软件写入,表示DAC通道1的的8位数据。 12.5.6 DAC通道 2 的 12 位右对齐数据保持寄存器(DAC_DHR12R2) 地址偏移: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 保留 DACC2DHR[11:0] rw rw rw rw rw rw rw rw rw rw rw rw 位31:12 保留。 位11:0 DACC2DHR[11:0]:DAC通道2的12位右对齐数据 (DAC channel2 12-bit right-aligned data) 该位由软件写入,表示DAC通道2的12位数据。 12.5.7 DAC通道 2 的 12 位左对齐数据保持寄存器(DAC_DHR12L2) 地址偏移:0x18 复位值: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 DACC2DHR[11:0] 保留 rw rw rw rw rw rw rw rw rw rw rw rw 位31:16 保留。 位15:4 DAC2DHR[11:0]:DAC通道2的12位左对齐数据 (DAC channel2 12-bit left-aligned data) 该位由软件写入,表示DAC通道2的的12位数据。 位3:0 保留。 12.5.8 DAC通道 2 的 8 位右对齐数据保持寄存器(DAC_DHR8R2) 地址偏移:0x1C 复位值: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 保留 DACC2DHR[7:0] rw rw rw rw rw rw rw rw rw rw rw rw 位31:18 保留。 位7:0 DACC2DHR[7:0]:DAC通道2的8位右对齐数据 (DAC channel2 8-bit right-aligned data) 该位由软件写入,表示DAC通道2的的8位数据。 195/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 数字/模拟转换(DAC) STM32F10xxx参考手册 12.5.9 双DAC的 12 位右对齐数据保持寄存器(DAC_DHR12RD) 地址偏移:0x20 复位值:0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 DACC2DHR[11:0] 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 保留 DACC1DHR[11:0] rw rw rw rw rw rw rw rw rw rw rw rw 位31:28 保留。 位27:16 DACC2DHR[11:0]:DAC通道2的12位右对齐数据 (DAC channel2 12-bit right-aligned data) 该位由软件写入,表示DAC通道2的12位数据。 位15:12 保留。 位11:0 DACC1DHR[11:0]:DAC通道1的12位右对齐数据 (DAC channel1 12-bit right-aligned data) 该位由软件写入,表示DAC通道2的12位数据。 12.5.10 双DAC的 12 位左对齐数据保持寄存器(DAC_DHR12LD) 地址偏移:0x24 复位值:0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DACC2DHR[11:0] 保留 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 DACC1DHR[11:0] 保留 rw rw rw rw rw rw rw rw rw rw rw rw 位31:20 DACC2DHR[11:0]:DAC通道2的12位左对齐数据 (DAC channel2 12-bit left-aligned data) 该位由软件写入,表示DAC通道2的12位数据。 位19:16 保留。 位15:4 DACC1DHR[11:0]:DAC通道1的12位左对齐数据 (DAC channel1 12-bit left-aligned data) 该位由软件写入,表示DAC通道1的12位数据。 位3:0 保留。 12.5.11 双DAC的 8 位右对齐数据保持寄存器(DAC_DHR8RD) 地址偏移:0x28 复位值: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 DACC2DHR[7:0] DACC1DHR[7:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:16 保留。 196/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 数字/模拟转换(DAC) STM32F10xxx参考手册 位15:8 位7:0 DACC2DHR[7:0]:DAC通道2的8位右对齐数据 (DAC channel2 8-bit right-aligned data) 该位由软件写入,表示DAC通道2的的8位数据。 DACC1DHR[7:0]:DAC通道1的8位右对齐数据 (DAC channel1 8-bit right-aligned data) 该位由软件写入,表示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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 DACC1DOR[11:0] rw rw rw rw rw rw rw rw rw rw rw rw 位31:12 保留。 位11:0 DACC1DOR[11:0]:DAC通道1 输出数据 (DAC channel1 data output) 该位由软件写入,表示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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 DACC2DOR[11:0] rw rw rw rw rw rw rw rw rw rw rw rw 位31:12 保留。 位11:0 DACC2DOR[11:0]:DAC通道2 输出数据 (DAC channel2 data output) 该位由软件写入,表示DAC通道2的输出数据。 197/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 0 EN1 SWTRIG2 SWTRIG1 数字/模拟转换(DAC) 12.5.14 DAC寄存器映像 下表列出了所有DAC寄存器。 表72 DAC 寄存器映像 偏移 寄存器 9 8 7 6 5 STM32F10xxx参考手册 3 2 1 BOFF1 TSEL1[2:0] 4 10 11 WAVE1[1:0] DMAEN1 12 13 14 15 16 BOFF2 17 18 19 TSEL2[2:0] 20 21 23 22 24 25 26 27 WAVE2[1:0] DMAEN2 28 29 30 31 TEN1 0x00 DAC_CR 保留 MAMP2 [3:0] TEN2 EN2 保留 MAMP1 [3:0] 复位值 0000000000000 0000000000000 DAC_SWTRIGR 0x04 保留 0x08 0x0C 0x10 0x14 0x18 0x1C 复位值 DAC_DHR12R1 复位值 DAC_DHR12L1 复位值 DAC_DHR8R1 复位值 DAC_DHR12R2 复位值 DAC_DHR12L2 复位值 DAC_DHR8R2 复位值 保留 保留 保留 保留 保留 保留 00 DACC1DHR[11:0] 000000000000 DACC1DHR[11:0] 000000000000 保留 DACC1DHR[7:0] 00000000 DACC2DHR[11:0] 000000000000 DACC2DHR[11:0] 000000000000 保留 DACC2DHR[7:0] 00000000 0x20 DAC_DHR12RD 复位值 保留 DACC2DHR[11:0] 000000000000 保留 DACC1DHR[11:0] 000000000000 0x24 0x28 DAC_DHR12LD DACC2DHR[11:0] 复位值 DAC_DHR8RD 复位值 000000000000 保留 保留 DACC1DHR[11:0] 000000000000 保留 DACC2DHR[7:0] DACC1DHR[7:0] 0000000000000000 0x2C DAC_DOR1 复位值 保留 DACC1DOR[11:0] 000000000000 0x30 DAC_DOR2 复位值 保留 DACC2DOR[11:0] 000000000000 关于寄存器的起始地址,请参见表1。 198/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 13 高级控制定时器(TIM1和TIM8) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 小容量、中容量产品和STM32F105xx/STM32F107xx的互联型产品,包含一个高级控制定时器 (TIM1),而大容量产品的STM32F103xx包含有二个高级控制定时器(TIM1和TIM8)。 13.1 TIM1和TIM8简介 高级控制定时器(TIM1和TIM8)由一个16位的自动装载计数器组成,它由一个可编程的预分频器 驱动。 它适合多种用途,包含测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较、 PWM、嵌入死区时间的互补PWM等)。 使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几 个毫秒的调节。 高级控制定时器(TIM1和TIM8)和通用定时器(TIMx)是完全独立的,它们不共享任何资源。它们 可以同步操作,具体描述参看13.3.20节。 13.2 TIM1和TIM8主要特性 TIM1和TIM8定时器的功能包括: ● 16位向上、向下、向上/下自动装载计数器 ● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意 数值 ● 多达4个独立通道: ─ 输入捕获 ─ 输出比较 ─ PWM生成(边缘或中间对齐模式) ─ 单脉冲模式输出 ● 死区时间可编程的互补输出 ● 使用外部信号控制定时器和定时器互联的同步电路 ● 允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器 ● 刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态 ● 如下事件发生时产生中断/DMA: ─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) ─ 输入捕获 ─ 输出比较 ─ 刹车信号输入 ● 支持针对定位的增量(正交)编码器和霍尔传感器电路 ● 触发输入作为外部时钟或者按周期的电流管理 199/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图50 高级控制定时器框图 STM32F10xxx参考手册 注: 根据控制位的设定,在U(更新)事件时传送预加载寄存器的内容至工作寄存器 事件 中断和DMA输出 13.3 TIM1和TIM8功能描述 13.3.1 时基单元 可编程高级控制定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。这个计数 器可以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。 计数器、自动装载寄存器和预分频器寄存器可以由软件读写,即使计数器还在运行读写仍然有 效。 时基单元包含: ● 计数器寄存器(TIMx_CNT) ● 预分频器寄存器 (TIMx_PSC) ● 自动装载寄存器 (TIMx_ARR) ● 重复次数寄存器 (TIMx_RCR) 200/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 自动装载寄存器是预先装载的,写或读自动重装载寄存器将访问预装载寄存器。根据在 TIMx_CR1寄存器中的自动装载预装载使能位(ARPE)的设置,预装载寄存器的内容被立即或在 每次的更新事件UEV时传送到影子寄存器。当计数器达到溢出条件(向下计数时的下溢条件)并当 TIMx_CR1寄存器中的UDIS位等于0时,产生更新事件。更新事件也可以由软件产生。随后会详 细描述每一种配置下更新事件的产生。 计数器由预分频器的时钟输出CK_CNT驱动,仅当设置了计数器TIMx_CR1寄存器中的计数器使 能位(CEN)时,CK_CNT才有效。(更多有关使能计数器的细节,请参见控制器的从模式描述)。 注意,在设置了TIMx_CR寄存器的CEN位的一个时钟周期后,计数器开始计数。 预分频器描述 预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。它是基于一个(在TIMx_PSC 寄存器中的)16位寄存器控制的16位计数器。因为这个控制寄存器带有缓冲器,它能够在运行时 被改变。新的预分频器的参数在下一次更新事件到来时被采用。 图51和图52给出了在预分频器运行时,更改计数器参数的例子。 图51 当预分频器的参数从1变到2时,计数器的时序图 图52 当预分频器的参数从1变到4时,计数器的时序图 201/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图55 计数器时序图,内部时钟分频因子为4 STM32F10xxx参考手册 图56 计数器时序图,内部时钟分频因子为N 图57 计数器时序图,当ARPE=0时的更新事件(TIMx_ARR没有预装入) 203/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图59 计数器时序图,内部时钟分频因子为1 STM32F10xxx参考手册 图60 计数器时序图,内部时钟分频因子为2 图61 计数器时序图,内部时钟分频因子为4 205/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图62 计数器时序图,内部时钟分频因子为N STM32F10xxx参考手册 图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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 ● 当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)。注:如果因为计数 器溢出而产生更新,自动重装载将在计数器重载入之前被更新,因此下一个周期将是预期 的值(计数器被装载为新的值)。 以下是一些计数器在不同时钟频率下的操作的例子: 图64 计数器时序图,内部时钟分频因子为1,TIMx_ARR=0x6 1.这里使用了中心对齐模式1(详见13.4.1节)。 图65 计数器时序图,内部时钟分频因子为2 图66 计数器时序图,内部时钟分频因子为4,TIMx_ARR=0x36 207/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图67 计数器时序图,内部时钟分频因子为N STM32F10xxx参考手册 图68 计数器时序图,ARPE=1时的更新事件(计数器下溢) 208/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图69 计数器时序图,ARPE=1时的更新事件(计数器溢出) STM32F10xxx参考手册 13.3.3 重复计数器 13.3.1节“时基单元”解释了计数器上溢/下溢时更新事件(UEV)是如何产生的,然而事实上它只 能在重复计数达到0的时候产生。这个特性对产生PWM信号非常有用。 这意味着在每N次计数上溢或下溢时,数据从预装载寄存器传输到影子寄存器(TIMx_ARR自动 重 载 入 寄 存 器 , TIMx_PSC 预 装 载 寄 存 器 , 还 有 在 比 较 模 式 下 的 捕 获 / 比 较 寄 存 器 TIMx_CCRx),N是TIMx_RCR重复计数寄存器中的值。 重复计数器在下述任一条件成立时递减: ● 向上计数模式下每次计数器溢出时, ● 向下计数模式下每次计数器下溢时, ● 中央对齐模式下每次上溢和每次下溢时。虽然这样限制了PWM的最大循环周期为128,但 它能够在每个PWM周期2次更新占空比。在中央对齐模式下,因为波形是对称的,如果每 个PWM周期中仅刷新一次比较寄存器,则最大的分辨率为2xTck。 重复计数器是自动加载的,重复速率是由TIMx_RCR寄存器的值定义(参看图70)。当更新事件由 软件产生(通过设置TIMx_EGR 中的UG位)或者通过硬件的从模式控制器产生,则无论重复计数 器的值是多少,立即发生更新事件,并且TIMx_RCR寄存器中的内容被重载入到重复计数器。 209/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图70 不同模式下更新速率的例子,及TIMx_RCR的寄存器设置 STM32F10xxx参考手册 13.3.4 时钟选择 计数器时钟可由下列时钟源提供: ● 内部时钟(CK_INT) ● 外部时钟模式1:外部输入引脚 ● 外部时钟模式2:外部触发输入ETR ● 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器。如可以配置一个定时 器Timer1而作为另一个定时器Timer2的预分频器。详见下一章。 内部时钟源(CK_INT) 如果禁止了从模式控制器(SMS=000),则CEN、DIR(TIMx_CR1寄存器)和UG位(TIMx_EGR寄 存器)是事实上的控制位,并且只能被软件修改(UG位仍被自动清除)。只要CEN位被写成’1’,预 分频器的时钟就由内部时钟CK_INT提供。 下图显示控制电路和向上计数器在一般模式下,不带预分频器时的操作。 210/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图71 一般模式下的控制电路,内部时钟分频因子为1 STM32F10xxx参考手册 外部时钟源模式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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图73 外部时钟模式1下的控制电路 STM32F10xxx参考手册 外部时钟源模式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 计数器在每2个ETR上升沿计数一次。 在ETR的上升沿和计数器实际时钟之间的延时取决于在ETRP信号端的重新同步电路。 212/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图75 外部时钟模式2下的控制电路 STM32F10xxx参考手册 13.3.5 捕获/比较通道 每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器),包括捕获的输入部分 (数字滤波、多路复用和预分频器),和输出部分(比较器和输出控制)。 图76至图79是一个捕获/比较通道概览。 输入部分对相应的TIx输入信号采样,并产生一个滤波后的信号TIxF。然后,一个带极性选择的 边缘监测器产生一个信号(TIxFPx),它可以作为从模式控制器的输入触发或者作为捕获控制。该 信号通过预分频进入捕获寄存器(ICxPS)。 图76 捕获/比较通道(如:通道1输入部分) 输出部分产生一个中间波形OCxRef(高有效)作为基准,链的末端决定最终输出信号的极性。 213/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图77 捕获/比较通道1的主电路 STM32F10xxx参考手册 图78 捕获/比较通道的输出部分(通道1至3) 214/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图79 捕获/比较通道的输出部分(通道4) STM32F10xxx参考手册 捕获/比较模块由一个预装载寄存器和一个影子寄存器组成。读写过程仅操作预装载寄存器。 在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。 在比较模式下,预装载寄存器的内容被复制到影子寄存器中,然后影子寄存器的内容和计数器 进行比较。 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 13.3.7 PWM输入模式 该模式是输入捕获模式的一个特例,除下列区别外,操作与输入捕获模式相同: ● 两个ICx信号被映射至同一个TIx输入。 ● 这2个ICx信号为边沿有效,但是极性相反。 ● 其中一个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=1且CC2E=1。 图80 PWM输入模式时序 因 为 只 有 TI1FP1 和 TI2FP2 连 到 了 从 模 式 控 制 器 , 所 以 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 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寄存器是否需要使用预装载寄存器。 在输出比较模式下,更新事件UEV对OCxREF和OCx输出没有影响。 同步的精度可以达到计数器的一个计数周期。输出比较模式(在单脉冲模式下)也能用来输出一个 单脉冲。 输出比较模式的配置步骤: 1. 选择计数器时钟(内部,外部,预分频器)。 2. 将相应的数据写入TIMx_ARR和TIMx_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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 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_CCER 和 TIMx_BDTR 寄 存 器 中 )CCxE 、 CCxNE 、 MOE、OSSI和OSSR位的组合控制。详见TIMx_CCER寄存器的描述。 在PWM模式(模式1或模式2)下,TIMx_CNT和TIMx_CCRx始终在进行比较,(依据计数器的计数 方向)以确定是否符合TIMx_CCRx≤TIMx_CNT或者TIMx_CNT≤TIMx_CCRx。 根据TIMx_CR1寄存器中CMS位的状态,定时器能够产生边沿对齐的PWM信号或中央对齐的 PWM信号。 PWM 边沿对齐模式 ● 向上计数配置 当TIMx_CR1寄存器中的DIR位为低的时候执行向上计数。参看13.3.2节。 下面是一个PWM模式1的例子。当TIMx_CNTTIMx_CCRx时参考信号OCxREF为低,否则为高。如果 TIMx_CCRx中的比较值大于TIMx_ARR中的自动重装载值,则OCxREF保持为’1’。该模式 下不能产生0%的PWM波形。 218/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 PWM 中央对齐模式 当TIMx_CR1寄存器中的CMS位不为’00’时为中央对齐模式(所有其他的配置对OCxREF/OCx信 号都有相同的作用)。根据不同的CMS位设置,比较标志可以在计数器向上计数时被置1、在计 数器向下计数时被置1、或在计数器向上和向下计数时被置1。TIMx_CR1寄存器中的计数方向 位(DIR)由硬件更新,不要用软件修改它。参看13.3.2节的中央对齐模式。 下图给出了一些中央对齐的PWM波形的例子 ● TIMx_ARR=8 ● PWM模式1 ● TIMx_CR1寄存器的CMS=01,在中央对齐模式1下,当计数器向下计数时设置比较标志。 图83 中央对齐的PWM波形(APR=8) 使用中央对齐模式的提示: ● 进入中央对齐模式时,使用当前的向上/向下计数配置;这就意味着计数器向上还是向下计 数取决于TIMx_CR1寄存器中DIR位的当前值。此外,软件不能同时修改DIR和CMS位。 ● 不推荐当运行在中央对齐模式时改写计数器,因为这会产生不可预知的结果。特别地: ─ 如果写入计数器的值大于自动重加载的值(TIMx_CNT>TIMx_ARR),则方向不会被更新。 例如,如果计数器正在向上计数,它就会继续向上计数。 ─ 如果将0或者TIMx_ARR的值写入计数器,方向被更新,但不产生更新事件UEV。 219/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 ● 使用中央对齐模式最保险的方法,就是在启动计数器之前产生一个软件更新(设置 TIMx_EGR位中的UG位),并且不要在计数进行过程中修改计数器的值。 13.3.11 互补输出和死区插入 高级控制定时器(TIM1和TIM8)能够输出两路互补信号,并且能够管理输出的瞬时关断和接通。 这段时间通常被称为死区,用户应该根据连接的输出器件和它们的特性(电平转换的延时、电源 开关的延时等)来调整死区时间。 配置TIMx_CCER寄存器中的CCxP和CCxNP位,可以为每一个输出独立地选择极性(主输出 OCx或互补输出OCxN)。 互补信号OCx和OCxN通过下列控制位的组合进行控制:TIMx_CCER寄存器的CCxE和CCxNE 位,TIMx_BDTR和TIMx_CR2寄存器中的MOE、OISx、OISxN、OSSI和OSSR位,详见表75 带刹车功能的互补输出通道OCx和OCxN的控制位。特别的是,在转换到IDLE状态时(MOE下降 到0)死区被激活。 同时设置CCxE和CCxNE位将插入死区,如果存在刹车电路,则还要设置MOE位。每一个通道 都有一个10位的死区发生器。参考信号OCxREF可以产生2路输出OCx和OCxN。如果OCx和 OCxN为高有效: ● OCx输出信号与参考信号相同,只是它的上升沿相对于参考信号的上升沿有一个延迟。 ● OCxN输出信号与参考信号相反,只是它的上升沿相对于参考信号的下降沿有一个延迟。 如果延迟大于当前有效的输出宽度(OCx或者OCxN),则不会产生相应的脉冲。 下 列 几 张 图 显 示 了 死 区 发 生 器 的 输 出 信 号 和 当 前 参 考 信 号 OCxREF 之 间 的 关 系 。 ( 假 设 CCxP=0、CCxNP=0、MOE=1、CCxE=1并且CCxNE=1) 图84 带死区插入的互补输出 图85 死区波形延迟大于负脉冲 图86 死区波形延迟大于正脉冲 220/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 注: 每 一 个 通道的 死 区 延时都 是 相 同的, 是 由 TIMx_BDTR 寄 存 器 中 的 DTG位 编 程 配置。 详 见 13.4.18节TIM1和TIM8刹车和死区寄存器(TIMx_BDTR)中的延时计算。 重定向OCxREF到OCx或OCxN 在输出模式下(强置、输出比较或PWM),通过配置TIMx_CCER寄存器的CCxE和CCxNE位, 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 寄 存 器 中 的 MOE 、 OSSI 和 OSSR 位 , TIMx_CR2寄存器中的OISx和OISxN位),输出使能信号和无效电平都会被修改。但无论何时, OCx和OCxN输出不能在同一时间同时处于有效电平上。详见表75带刹车功能的互补输出通道 OCx和OCxN的控制位。 刹车源既可以是刹车输入引脚又可以是一个时钟失败事件。时钟失败事件由复位时钟控制器中 的时钟安全系统产生,详见6.2.7节时钟安全系统(CSS)。 系统复位后,刹车电路被禁止,MOE位为低。设置TIMx_BDTR寄存器中的BKE位可以使能刹车 功能,刹车输入信号的极性可以通过配置同一个寄存器中的BKP位选择。BKE和BKP可以同时 被修改。当写入BKE和BKP位时,在真正写入之前会有1个APB时钟周期的延迟,因此需要等待 一个APB时钟周期之后,才能正确地读回写入的位。 因为MOE下降沿可以是异步的,在实际信号(作用在输出端)和同步控制位(在TIMx_BDTR寄存器 中)之间设置了一个再同步电路。这个再同步电路会在异步信号和同步信号之间产生延迟。特别 的,如果当它为低时写MOE=1,则读出它之前必须先插入一个延时(空指令)才能读到正确的 值。这是因为写入的是异步信号而读的是同步信号。 当发生刹车时(在刹车输入端出现选定的电平),有下述动作: ● MOE位被异步地清除,将输出置于无效状态、空闲状态或者复位状态(由OSSI位选择)。这 个特性在MCU的振荡器关闭时依然有效。 ● 一旦MOE=0,每一个输出通道输出由TIMx_CR2寄存器中的OISx位设定的电平。如果 OSSI=0,则定时器释放使能输出,否则使能输出始终为高。 ● 当使用互补输出时: ─ 输出首先被置于复位状态即无效的状态(取决于极性)。这是异步操作,即使定时器没有时 钟时,此功能也有效。 ─ 如果定时器的时钟依然存在,死区生成器将会重新生效,在死区之后根据OISx和OISxN 位指示的电平驱动输出端口。即使在这种情况下,OCx和OCxN也不能被同时驱动到有效 的电平。注,因为重新同步MOE,死区时间比通常情况下长一些(大约2个ck_tim的时钟周 期)。 ─ 如果OSSI=0,定时器释放使能输出,否则保持使能输出;或一旦CCxE与CCxNE之一变 高时,使能输出变为高。 ● 如果设置了TIMx_DIER寄存器中的BIE位,当刹车状态标志(TIMx_SR寄存器中的BIF位) 为’1’时,则产生一个中断。如果设置了TIMx_DIER寄存器中的BDE位,则产生一个DMA请 求。 ● 如果设置了TIMx_BDTR寄存器中的AOE位,在下一个更新事件UEV时MOE位被自动置位; 例如,这可以用来进行整形。否则,MOE始终保持低直到被再次置’1’;此时,这个特性可 以被用在安全方面,你可以把刹车输入连到电源驱动的报警输出、热敏传感器或者其他安 全器件上。 221/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 注: 刹车输入为电平有效。所以,当刹车输入有效时,不能同时(自动地或者通过软件)设置MOE。 同时,状态标志BIF不能被清除。 刹车由BRK输入产生,它的有效极性是可编程的,且由TIMx_BDTR寄存器中的BKE位开启。 除了刹车输入和输出管理,刹车电路中还实现了写保护以保证应用程序的安全。它允许用户冻 结几个配置参数(死区长度,OCx/OCxN极性和被禁止的状态,OCxM配置,刹车使能和极性)。 用户可以通过TIMx_BDTR寄存器中的LOCK位,从三级保护中选择一种,参看13.4.18节TIM1和 TIM8刹车和死区寄存器(TIMx_BDTR)。在MCU复位后LOCK位只能被修改一次。 下图显示响应刹车的输出实例。 图87 响应刹车的输出 222/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 13.3.13 在外部事件时清除OCxREF信号 对于一个给定的通道,设置TIMx_CCMRx寄存器中对应的OCxCE位为’1’,能够用ETRF输入端 的高电平把OCxREF信号拉低,OCxREF信号将保持为低直到发生下一次的更新事件UEV。 该功能只能用于输出比较和PWM模式,而不能用于强置模式。 例如,OCxREF信号可以联到一个比较器的输出,用于控制电流。这时,ETR必须配置如下: 1. 外部触发预分频器必须处于关闭:TIMx_SMCR寄存器中的ETPS[1:0]=00。 2. 必须禁止外部时钟模式2:TIMx_SMCR寄存器中的ECE=0。 3. 外部触发极性(ETP)和外部触发滤波器(ETF)可以根据需要配置。 下图显示了当ETRF输入变为高时,对应不同OCxCE的值,OCxREF信号的动作。在这个例子 中,定时器TIMx被置于PWM模式。 图88 清除TIMx的OCxREF 13.3.14 产生六步PWM输出 当在一个通道上需要互补输出时,预装载位有OCxM、CCxE和CCxNE。在发生COM换相事件 时,这些预装载位被传送到影子寄存器位。这样你就可以预先设置好下一步骤配置,并在同一 个时刻同时修更改所有通道的配置。COM可以通过设置TIMx_EGR寄存器的COM位由软件产 生,或在TRGI上升沿由硬件产生。 当 发 生 COM 事 件 时 会 设 置 一 个 标 志 位 (TIMx_SR 寄 存 器 中 的 COMIF 位 ) , 这 时 如 果 已 设 置 了 TIMx_DIER寄存器的COMIE位,则产生一个中断;如果已设置了TIMx_DIER寄存器的COMDE 位,则产生一个DMA请求。 下图显示当发生COM事件时,三种不同配置下OCx和OCxN输出。 223/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图89 产生六步PWM,使用COM的例子(OSSR=1) STM32F10xxx参考手册 13.3.15 单脉冲模式 单脉冲模式(OPM)是前述众多模式的一个特例。这种模式允许计数器响应一个激励,并在一个 程序可控的延时之后产生一个脉宽可程序控制的脉冲。 可 以 通 过 从 模 式 控 制 器 启 动 计 数 器 , 在 输 出 比 较 模 式 或 者 PWM 模 式 下 产 生 波 形 。 设 置 TIMx_CR1寄存器中的OPM位将选择单脉冲模式,这样可以让计数器自动地在产生下一个更新 事件UEV时停止。 仅当比较值与计数器的初始值不同时,才能产生一个脉冲。启动之前(当定时器正在等待触发), 必须如下配置: ● 向上计数方式:计数器CNT < CCRx ≤ ARR (特别地, 0 < CCRx), ● 向下计数方式:计数器CNT > CCRx。 224/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图90 单脉冲模式的例子 STM32F10xxx参考手册 例如,你需要在从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寄存器中的DIR和CMS位应该置低。 因为只需要一个脉冲,所以必须设置TIMx_CR1寄存器中的OPM=1,在下一个更新事件(当计数 器从自动装载值翻转到0)时停止计数。 特殊情况:OCx快速使能: 在单脉冲模式下,在TIx输入脚的边沿检测逻辑设置CEN位以启动计数器。然后计数器和比较值 间的比较操作产生了输出的转换。但是这些操作需要一定的时钟周期,因此它限制了可得到的 最小延时tDELAY。 如果要以最小延时输出波形,可以设置TIMx_CCMRx寄存器中的OCxFE位;此时OCxREF(和 OCx)直接响应激励而不再依赖比较的结果,输出的波形与比较匹配时的波形一样。OCxFE只在 通道配置为PWM1和PWM2模式时起作用。 13.3.16 编码器接口模式 选择编码器接口模式的方法是:如果计数器只在TI2的边沿计数,则置TIMx_SMCR寄存器中的 SMS=001;如果只在TI1边沿计数,则置SMS=010;如果计数器同时在TI1和TI2边沿计数,则 置SMS=011。 225/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 通过设置TIMx_CCER寄存器中的CC1P和CC2P位,可以选择TI1和TI2极性;如果需要,还可以 对输入滤波器编程。 两个输入TI1和TI2被用来作为增量编码器的接口。参看表73,假定计数器已经启动(TIMx_CR1 寄存器中的CEN=1),则计数器由每次在TI1FP1或TI2FP2上的有效跳变驱动。TI1FP1和TI2FP2 是TI1和TI2在通过输入滤波器和极性控制后的信号;如果没有滤波和变相,则TI1FP1=TI1, TI2FP2=TI2。根据两个输入信号的跳变顺序,产生了计数脉冲和方向信号。依据两个输入信号 的跳变顺序,计数器向上或向下计数,同时硬件对TIMx_CR1寄存器的DIR位进行相应的设置。 不管计数器是依靠TI1计数、依靠TI2计数或者同时依靠TI1和TI2计数,在任一输入端(TI1或者 TI2)的跳变都会重新计算DIR位。 编码器接口模式基本上相当于使用了一个带有方向选择的外部时钟。这意味着计数器只在0到 TIMx_ARR寄存器的自动装载值之间连续计数(根据方向,或是0到ARR计数,或是ARR到0计 数)。所以在开始计数之前必须配置TIMx_ARR;同样,捕获器、比较器、预分频器、重复计数 器、触发输出特性等仍工作如常。编码器模式和外部时钟模式2不兼容,因此不能同时操作。 在这个模式下,计数器依照增量编码器的速度和方向被自动的修改,因此计数器的内容始终指 示着编码器的位置。计数方向与相连的传感器旋转的方向对应。下表列出了所有可能的组合, 假设TI1和TI2不同时变换。 表73 计数方向与编码器信号的关系 有效边沿 相对信号的电平 (TI1FP1对应TI2, TI2FP2对应TI1) TI1FP1信号 上升 下降 TI2FP2信号 上升 下降 仅在TI1计数 高 向下计数 向上计数 不计数 不计数 低 向上计数 向下计数 不计数 不计数 仅在TI2计数 高 不计数 不计数 向上计数 向下计数 低 不计数 不计数 向下计数 向上计数 在TI1和TI2上计数 高 向下计数 向上计数 向上计数 向下计数 低 向上计数 向下计数 向下计数 向上计数 一个外部的增量编码器可以直接与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寄存器,计数器使能) 226/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图91 编码器模式下的计数器操作实例 STM32F10xxx参考手册 下图为当IC1FP1极性反相时计数器的操作实例(CC1P=’1’,其他配置与上例相同) 图92 IC1FP1反相的编码器接口模式实例 当定时器配置成编码器接口模式时,提供传感器当前位置的信息。使用第二个配置在捕获模式 的定时器,可以测量两个编码器事件的间隔,获得动态的信息(速度,加速度,减速度)。指示机 械零点的编码器输出可被用做此目的。根据两个事件间的间隔,可以按照固定的时间读出计数 器。如果可能的话,你可以把计数器的值锁存到第三个输入捕获寄存器(捕获信号必须是周期的 并且可以由另一个定时器产生);也可以通过一个由实时时钟产生的DMA请求来读取它的值。 13.3.17 定时器输入异或功能 TIMx_CR2寄存器中的TI1S位,允许通道1的输入滤波器连接到一个异或门的输出端,异或门的 3个输入端为TIMx_CH1、TIMx_CH2和TIMx_CH3。 异或输出能够被用于所有定时器的输入功能,如触发或输入捕获。下节13.3.18给出了此特性用 于连接霍尔传感器的例子。 13.3.18 与霍尔传感器的接口 使用高级控制定时器(TIM1或TIM8)产生PWM信号驱动马达时,可以用另一个通用TIMx(TIM2、 TIM3、TIM4或TIM5)定时器作为“接口定时器”来连接霍尔传感器,见图93,3个定时器输入脚 (CC1、CC2、CC3)通过一个异或门连接到TI1输入通道(通过设置TIMx_CR2寄存器中的TI1S位 来选择),“接口定时器”捕获这个信号。 227/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 从模式控制器被配置于复位模式,从输入是TI1F_ED。每当3个输入之一变化时,计数器从新从 0开始计数。这样产生一个由霍尔输入端的任何变化而触发的时间基准。 “接口定时器”上的捕获/比较通道1配置为捕获模式,捕获信号为TRC(见图76)。捕获值反映了 两个输入变化间的时间延迟,给出了马达速度的信息。 “接口定时器”可以用来在输出模式产生一个脉冲,这个脉冲可以(通过触发一个COM事件)用 于改变高级定时器TIM1或TIM8各个通道的属性,而高级控制定时器产生PWM信号驱动马达。 因此“接口定时器”通道必须编程为在一个指定的延时(输出比较或PWM模式)之后产生一个正 脉冲,这个脉冲通过TRGO输出被送到高级控制定时器TIM1或TIM8。 举例:霍尔输入连接到TIMx定时器,要求每次任一霍尔输入上发生变化之后的一个指定的时 刻,改变高级控制定时器TIMx的PWM配置。 ● 置TIMx_CR2寄存器的TI1S位为’1’,配置三个定时器输入逻辑或到TI1输入, ● 时基编程:置TIMx_ARR为其最大值(计数器必须通过TI1的变化清零)。设置预分频器得到 一个最大的计数器周期,它长于传感器上的两次变化的时间间隔。 ● 设置通道1为捕获模式(选中TRC):置TIMx_CCMR1寄存器中CC1S=01,如果需要,还可 以设置数字滤波器。 ● 设置通道2为PWM2模式,并具有要求的延时:置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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 图93 霍尔传感器接口的实例 STM32F10xxx参考手册 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 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输入的上升沿开始向上计数: ● 配置通道2检测TI2的上升沿。配置输入滤波器带宽(本例中,不需要任何滤波器,保持 IC2F=0000)。触发操作中不使用捕获预分频器,不需要配置。CC2S位只用于选择输入捕 获源,置TIMx_CCMR1寄存器中CC2S=01。置TIMx_CCER寄存器中CC2P=1以确定极性 (只检测低电平)。 230/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 13.3.20 定时器同步 所有TIM定时器在内部相连,用于定时器同步或链接。详见下一章14.3.15节。 13.3.21 调试模式 当微控制器进入调试模式时(Cortex-M3核心停止),根据DBG模块中DBG_TIMx_STOP的设置, TIMx计数器可以或者继续正常操作,或者停止。详见随后的29.16.2节。 232/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 13.4 TIM1和TIM8寄存器描述 关于在寄存器描述里面所用到的缩写,详见第1章。 可以用半字(16位)或字(32位)的方式操作这些外设寄存器。 13.4.1 TIM1 和TIM8 控制寄存器 1(TIMx_CR1) 偏移地址:0x00 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CKD[1:0] ARPE CMS[1:0] DIR OPM URS UDIS CEN rw rw rw rw rw rw rw rw rw rw 位15:10 保留,始终读为0。 位9:8 CKD[1:0]:时钟分频因子 (Clock division) 这2位定义在定时器时钟(CK_INT)频率、死区时间和由死区发生器与数字滤波器(ETR,TIx)所用 的采样时钟之间的分频比例。 00:tDTS = tCK_INT 01:tDTS = 2 x tCK_INT 10:tDTS = 4 x tCK_INT 11:保留,不要使用这个配置 位7 ARPE:自动重装载预装载允许位 (Auto-reload preload enable) 0:TIMx_ARR寄存器没有缓冲; 1:TIMx_ARR寄存器被装入缓冲器。 位6:5 CMS[1:0]:选择中央对齐模式 (Center-aligned mode selection) 00:边沿对齐模式。计数器依据方向位(DIR)向上或向下计数。 01:中央对齐模式1。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器 中CCxS=00)的输出比较中断标志位,只在计数器向下计数时被设置。 10:中央对齐模式2。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器 中CCxS=00)的输出比较中断标志位,只在计数器向上计数时被设置。 11:中央对齐模式3。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器 中CCxS=00)的输出比较中断标志位,在计数器向上和向下计数时均被设置。 注:在计数器开启时(CEN=1),不允许从边沿对齐模式转换到中央对齐模式。 位4 DIR:方向 (Direction) 0:计数器向上计数; 1:计数器向下计数。 注:当计数器配置为中央对齐模式或编码器模式时,该位为只读。 位3 OPM:单脉冲模式 (One pulse mode) 0:在发生更新事件时,计数器不停止; 1:在发生下一次更新事件(清除CEN位)时,计数器停止。 位2 URS:更新请求源 (Update request source) 软件通过该位选择UEV事件的源 0:如果使能了更新中断或DMA请求,则下述任一事件产生更新中断或DMA请求: − 计数器溢出/下溢 − 设置UG位 − 从模式控制器产生的更新 1:如果使能了更新中断或DMA请求,则只有计数器溢出/下溢才产生更新中断或DMA请求。 233/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 位1 UDIS:禁止更新 (Update disable) 软件通过该位允许/禁止UEV事件的产生 0:允许UEV。更新(UEV)事件由下述任一事件产生: − 计数器溢出/下溢 − 设置UG位 − 从模式控制器产生的更新 具有缓存的寄存器被装入它们的预装载值。(译注:更新影子寄存器) 1:禁止UEV。不产生更新事件,影子寄存器(ARR、PSC、CCRx)保持它们的值。如果设置了 UG位或从模式控制器发出了一个硬件复位,则计数器和预分频器被重新初始化。 位0 CEN:使能计数器 (Counter enable) 0:禁止计数器; 1:使能计数器。 注:在软件设置了CEN位后,外部时钟、门控模式和编码器模式才能工作。触发模式可以自动 地通过硬件设置CEN位。 13.4.2 TIM1 和TIM8 控制寄存器 2(TIMx_CR2) 偏移地址:0x04 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 OIS4 OIS3N OIS3 OIS2N OIS2 OIS1N OIS1 TI1S MMS[2:0] CCDS CCUS rw rw rw rw rw rw rw rw rw rw rw rw rw 位15 保留,始终读为0。 位14 OIS4:输出空闲状态4(OC4输出)。参见OIS1位。 位13 OIS3N:输出空闲状态3(OC3N输出)。参见OIS1N位。 位12 OIS3:输出空闲状态3(OC3输出)。参见OIS1位。 位11 OIS2N:输出空闲状态2(OC2N输出)。参见OIS1N位。 位10 OIS2:输出空闲状态2(OC2输出)。参见OIS1位。 位9 OIS1N:输出空闲状态1(OC1N输出) (Output Idle state 1) 0:当MOE=0时,死区后OC1N=0; 1:当MOE=0时,死区后OC1N=1。 注:已经设置了LOCK(TIMx_BKR寄存器)级别1、2或3后,该位不能被修改。 位8 OIS1:输出空闲状态1(OC1输出) (Output Idle state 1) 0:当MOE=0时,如果实现了OC1N,则死区后OC1=0; 1:当MOE=0时,如果实现了OC1N,则死区后OC1=1。 注:已经设置了LOCK(TIMx_BKR寄存器)级别1、2或3后,该位不能被修改。 位7 TI1S:TI1选择 (TI1 selection) 0:TIMx_CH1引脚连到TI1输入; 1:TIMx_CH1、TIMx_CH2和TIMx_CH3引脚经异或后连到TI1输入。 保留 CCPC rw 234/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 位6:4 位3 位2 位1 位0 MMS[2:0]:主模式选择 (Master mode selection) 这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) 0:当发生CCx事件时,送出CCx的DMA请求; 1:当发生更新事件时,送出CCx的DMA请求。 CCUS:捕获/比较控制更新选择 (Capture/compare control update selection) 0:如果捕获/比较控制位是预装载的(CCPC=1),只能通过设置COM位更新它们; 1:如果捕获/比较控制位是预装载的(CCPC=1),可以通过设置COM位或TRGI上的一个上升沿 更新它们。 注:该位只对具有互补输出的通道起作用。 保留,始终读为0。 CCPC:捕获/比较预装载控制位 (Capture/compare preloaded control) 0:CCxE,CCxNE和OCxM位不是预装载的; 1:CCxE,CCxNE和OCxM位是预装载的;设置该位后,它们只在设置了COM位后被更新。 注:该位只对具有互补输出的通道起作用。 13.4.3 TIM1 和TIM8 从模式控制寄存器(TIMx_SMCR) 偏移地址:0x08 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ETP ECE ETPS[1:0] ETF[3:0] MSM TS[2:0] 保留 SMS[2:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15 ETP:外部触发极性 (External trigger polarity) 该位选择是用ETR还是ETR的反相来作为触发操作 0:ETR不反相,高电平或上升沿有效; 1:ETR被反相,低电平或下降沿有效。 位14 ECE:外部时钟使能位 (External clock enable) 该位启用外部时钟模式2 0:禁止外部时钟模式2; 1:使能外部时钟模式2。计数器由ETRF信号上的任意有效边沿驱动。 注1:设置ECE位与选择外部时钟模式1并将TRGI连到ETRF(SMS=111和TS=111)具有相同功 效。 注2:下述从模式可以与外部时钟模式2同时使用:复位模式,门控模式和触发模式;但是,这 时TRGI不能连到ETRF(TS位不能是’111’)。 注3:外部时钟模式1和外部时钟模式2同时被使能时,外部时钟的输入是ETRF。 235/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 位13:12 位11:8 位7 位6:4 位3 位2:0 ETPS[1:0]:外部触发预分频 (External trigger prescaler) 外部触发信号ETRP的频率必须最多是TIMxCLK频率的1/4。当输入较快的外部时钟时,可以使 用预分频降低ETRP的频率。 00:关闭预分频; 01:ETRP频率除以2; 10:ETRP频率除以4; 11:ETRP频率除以8。 ETF[3:0]:外部触发滤波 (External trigger filter) 这些位定义了对ETRP信号采样的频率和对ETRP数字滤波的带宽。实际上,数字滤波器是一个 事件计数器,它记录到N个事件后会产生一个输出的跳变。 0000:无滤波器,以fDTS采样 1000:采样频率fSAMPLING=fDTS/8,N=6 0001:采样频率fSAMPLING=fCK_INT,N=2 1001:采样频率fSAMPLING=fDTS/8,N=8 0010:采样频率fSAMPLING=fCK_INT,N=4 1010:采样频率fSAMPLING=fDTS/16,N=5 0011:采样频率fSAMPLING=fCK_INT,N=8 1011:采样频率fSAMPLING=fDTS/16,N=6 0100:采样频率fSAMPLING=fDTS/2,N=6 1100:采样频率fSAMPLING=fDTS/16,N=8 0101:采样频率fSAMPLING=fDTS/2,N=8 1101:采样频率fSAMPLING=fDTS/32,N=5 0110:采样频率fSAMPLING=fDTS/4,N=6 1110:采样频率fSAMPLING=fDTS/32,N=6 0111:采样频率fSAMPLING=fDTS/4,N=8 1111:采样频率fSAMPLING=fDTS/32,N=8 MSM:主/从模式 (Master/slave mode) 0:无作用; 1:触发输入(TRGI)上的事件被延迟了,以允许在当前定时器(通过TRGO)与它的从定时器间的 完美同步。这对要求把几个定时器同步到一个单一的外部事件时是非常有用的。 TS[2:0]:触发选择 (Trigger selection) 这3位选择用于同步计数器的触发输入。 000:内部触发0(ITR0) 100:TI1的边沿检测器(TI1F_ED) 001:内部触发1(ITR1) 101:滤波后的定时器输入1(TI1FP1) 010:内部触发2(ITR2) 110:滤波后的定时器输入2(TI2FP2) 011:内部触发3(ITR3) 111:外部触发输入(ETRF) 更多有关ITRx的细节,参见表74。 注:这些位只能在未用到(如SMS=000)时被改变,以避免在改变时产生错误的边沿检测。 保留,始终读为0。 SMS[2:0]:从模式选择 (Slave mode selection) 当选择了外部信号,触发信号(TRGI)的有效边沿与选中的外部输入极性相关(见输入控制寄存器 和控制寄存器的说明) 000:关闭从模式 – 如果CEN=1,则预分频器直接由内部时钟驱动。 001:编码器模式1 – 根据TI1FP1的电平,计数器在TI2FP2的边沿向上/下计数。 010:编码器模式2 – 根据TI2FP2的电平,计数器在TI1FP1的边沿向上/下计数。 011:编码器模式3 – 根据另一个信号的输入电平,计数器在TI1FP1和TI2FP2的边沿向上/下计 数。 100:复位模式 – 选中的触发输入(TRGI)的上升沿重新初始化计数器,并且产生一个更新寄存 器的信号。 101:门控模式 – 当触发输入(TRGI)为高时,计数器的时钟开启。一旦触发输入变为低,则计 数器停止(但不复位)。计数器的启动和停止都是受控的。 110:触发模式 – 计数器在触发输入TRGI的上升沿启动(但不复位),只有计数器的启动是受控 的。 111:外部时钟模式1 – 选中的触发输入(TRGI)的上升沿驱动计数器。 注:如果TI1F_EN被选为触发输入(TS=100)时,不要使用门控模式。这是因为,TI1F_ED在每 次TI1F变化时输出一个脉冲,然而门控模式是要检查触发输入的电平。 236/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 表74 TIMx内部触发连接 从定时器 ITR0 (TS=000) TIM1 TIM5 TIM8 TIM1 ITR1 (TS=001) TIM2 TIM2 ITR2 (TS=010) TIM3 TIM4 ITR3 (TS=011) TIM4 TIM5 13.4.4 TIM1 和TIM8 DMA/中断使能寄存器(TIMx_DIER) 偏移地址:0x0C 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 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。 位14 TDE:允许触发DMA请求 (Trigger DMA request enable) 0:禁止触发DMA请求; 1:允许触发DMA请求。 位13 COMDE:允许COM的DMA请求 (COM DMA request enable) 0:禁止COM的DMA请求; 1:允许COM的DMA请求。 位12 CC4DE:允许捕获/比较4的DMA请求 (Capture/Compare 4 DMA request enable) 0:禁止捕获/比较4的DMA请求; 1:允许捕获/比较4的DMA请求。 位11 CC3DE:允许捕获/比较3的DMA请求 (Capture/Compare 3 DMA request enable) 0:禁止捕获/比较3的DMA请求; 1:允许捕获/比较3的DMA请求。 位10 CC2DE:允许捕获/比较2的DMA请求 (Capture/Compare 2 DMA request enable) 0:禁止捕获/比较2的DMA请求; 1:允许捕获/比较2的DMA请求。 位9 CC1DE:允许捕获/比较1的DMA请求 (Capture/Compare 1 DMA request enable) 0:禁止捕获/比较1的DMA请求; 1:允许捕获/比较1的DMA请求。 位8 UDE:允许更新的DMA请求 (Update DMA request enable) 0:禁止更新的DMA请求; 1:允许更新的DMA请求。 位7 BIE:允许刹车中断 (Break interrupt enable) 0:禁止刹车中断; 1:允许刹车中断。 位6 TIE:触发中断使能 (Trigger interrupt enable) 0:禁止触发中断; 1:使能触发中断。 位5 COMIE:允许COM中断 (COM interrupt enable) 0:禁止COM中断; 1:允许COM中断。 位4 CC4IE:允许捕获/比较4中断 (Capture/Compare 4 interrupt enable) 0:禁止捕获/比较4中断; 1:允许捕获/比较4中断。 237/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 位3 CC3IE:允许捕获/比较3中断 (Capture/Compare 3 interrupt enable) 0:禁止捕获/比较3中断; 1:允许捕获/比较3中断。 位2 CC2IE:允许捕获/比较2中断 (Capture/Compare 2 interrupt enable) 0:禁止捕获/比较2中断; 1:允许捕获/比较2中断。 位1 CC1IE:允许捕获/比较1中断 (Capture/Compare 1 interrupt enable) 0:禁止捕获/比较1中断; 1:允许捕获/比较1中断。 位0 UIE:允许更新中断 (Update interrupt enable) 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 位12 位11 位10 位9 位8 位7 位6 位5 位4 保留,始终读为0。 CC4OF:捕获/比较4重复捕获标记 (Capture/Compare 4 overcapture flag) 参见CC1OF描述。 CC3OF:捕获/比较3重复捕获标记 (Capture/Compare 3 overcapture flag) 参见CC1OF描述。 CC2OF:捕获/比较2重复捕获标记 (Capture/Compare 2 overcapture flag) 参见CC1OF描述。 CC1OF:捕获/比较1重复捕获标记 (Capture/Compare 1 overcapture flag) 仅当相应的通道被配置为输入捕获时,该标记可由硬件置1。写0可清除该位。 0:无重复捕获产生; 1:计数器的值被捕获到TIMx_CCR1寄存器时,CC1IF的状态已经为’1’。 保留,始终读为0。 BIF:刹车中断标记 (Break interrupt flag) 一旦刹车输入有效,由硬件对该位置’1’。如果刹车输入无效,则该位可由软件清’0’。 0:无刹车事件产生; 1:刹车输入上检测到有效电平。 TIF:触发器中断标记 (Trigger interrupt flag) 当发生触发事件(当从模式控制器处于除门控模式外的其它模式时,在TRGI输入端检测到有效 边沿,或门控模式下的任一边沿)时由硬件对该位置’1’。它由软件清’0’。 0:无触发器事件产生; 1:触发中断等待响应。 COMIF:COM中断标记 (COM interrupt flag) 一旦产生COM事件(当捕获/比较控制位:CCxE、CCxNE、OCxM已被更新)该位由硬件置’1’。 它由软件清’0’。 0:无COM事件产生; 1:COM中断等待响应。 CC4IF:捕获/比较4中断标记 (Capture/Compare 4 interrupt flag) 参考CC1IF描述。 238/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 位3 CC3IF:捕获/比较3中断标记 (Capture/Compare 3 interrupt flag) 参考CC1IF描述。 位2 CC2IF:捕获/比较2中断标记 (Capture/Compare 2 interrupt flag) 参考CC1IF描述。 位1 CC1IF:捕获/比较1中断标记 (Capture/Compare 1 interrupt flag) 如果通道CC1配置为输出模式: 当计数器值与比较值匹配时该位由硬件置1,但在中心对称模式下除外(参考TIMx_CR1寄存器 的CMS位)。它由软件清’0’。 0:无匹配发生; 1:TIMx_CNT的值与TIMx_CCR1的值匹配。 当TIMx_CCR1的内容大于TIMx_APR的内容时,在向上或向上/下计数模式时计数器溢出,或 向下计数模式时的计数器下溢条件下,CC1IF位变高 如果通道CC1配置为输入模式: 当捕获事件发生时该位由硬件置’1’,它由软件清’0’或通过读TIMx_CCR1清’0’。 0:无输入捕获产生; 1:计数器值已被捕获(拷贝)至TIMx_CCR1(在IC1上检测到与所选极性相同的边沿)。 位0 UIF:更新中断标记 (Update interrupt flag) 当产生更新事件时该位由硬件置’1’。它由软件清’0’。 0:无更新事件产生; 1:更新中断等待响应。当寄存器被更新时该位由硬件置’1’: − 若TIMx_CR1寄存器的UDIS=0,当重复计数器数值上溢或下溢时(重复计数器=0时产生更 新事件)。 − 若TIMx_CR1寄存器的URS=0、UDIS=0,当设置TIMx_EGR寄存器的UG=1时产生更新事 件,通过软件对计数器CNT重新初始化时。 − 若TIMx_CR1寄存器的URS=0、UDIS=0,当计数器CNT被触发事件重新初始化时。(参考 13.4.3: TIM1和TIM8从模式控制寄存器(TIMx_SMCR))。 13.4.6 TIM1 和TIM8 事件产生寄存器(TIMx_EGR) 偏移地址:0x14 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 BG TG COMG CC4G CC3G CC2G CC1G UG w w w w w w w w 位15:8 保留,始终读为0。 位7 BG:产生刹车事件 (Break generation) 该位由软件置’1’,用于产生一个刹车事件,由硬件自动清’0’。 0:无动作; 1:产生一个刹车事件。此时MOE=0、BIF=1,若开启对应的中断和DMA,则产生相应的中断 和DMA。 位6 TG:产生触发事件 (Trigger generation) 该位由软件置’1’,用于产生一个触发事件,由硬件自动清’0’。 0:无动作; 1:TIMx_SR寄存器的TIF=1,若开启对应的中断和DMA,则产生相应的中断和DMA。 位5 COMG:捕获/比较事件,产生控制更新 (Capture/Compare control update generation) 该位由软件置’1’,由硬件自动清’0’。 0:无动作; 1:当CCPC=1,允许更新CCxE、CCxNE、OCxM位。 注:该位只对拥有互补输出的通道有效。 位4 CC4G:产生捕获/比较4事件 (Capture/Compare 4 generation) 参考CC1G描述。 239/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 位3 CC3G:产生捕获/比较3事件 (Capture/Compare 3 generation) 参考CC1G描述。 位2 CC2G:产生捕获/比较2事件 (Capture/Compare 2 generation) 参考CC1G描述。 位1 CC1G:产生捕获/比较1事件 (Capture/Compare 1 generation) 该位由软件置’1’,用于产生一个捕获/比较事件,由硬件自动清’0’。 0:无动作; 1:在通道CC1上产生一个捕获/比较事件: 若通道CC1配置为输出: 设置CC1IF=1,若开启对应的中断和DMA,则产生相应的中断和DMA。 若通道CC1配置为输入: 当前的计数器值被捕获至TIMx_CCR1寄存器;设置CC1IF=1,若开启对应的中断和DMA,则 产生相应的中断和DMA。若CC1IF已经为1,则设置CC1OF=1。 位0 UG:产生更新事件 (Update generation) 该位由软件置’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描述了通道 在输入模式下的功能。因此必须注意,同一个位在输出模式和输入模式下的功能是不同的。 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OC2CE rw OC2M[2:0] IC2F[3:0] rw rw rw OC2PE OC2FE IC2PSC[1:0] rw rw CC2S[1:0] rw rw OC1CE rw OC1M[2:0] IC1F[3:0] rw rw rw OC1PE OC1FE IC1PSC[1:0] rw rw CC1S[1:0] rw rw 输出比较模式: 位15 位14:12 位11 位10 位9:8 位7 OC2CE:输出比较2清0使能 (Output Compare 2 clear enable) OC2M[2:0]:输出比较2模式 (Output Compare 2 mode) OC2PE:输出比较2预装载使能 (Output Compare 2 preload enable) OC2FE:输出比较2快速使能 (Output Compare 2 fast enable) CC2S[1:0]:捕获/比较2选择。(Capture/Compare 2 selection) 该位定义通道的方向(输入/输出),及输入脚的选择: 00:CC2通道被配置为输出; 01:CC2通道被配置为输入,IC2映射在TI2上; 10:CC2通道被配置为输入,IC2映射在TI1上; 11:CC2通道被配置为输入,IC2映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC2S仅在通道关闭时(TIMx_CCER寄存器的CC2E=0)才是可写的。 OC1CE:输出比较1清’0’使能 (Output Compare 1 clear enable) 0:OC1REF 不受ETRF输入的影响; 1:一旦检测到ETRF输入高电平,清除OC1REF=0。 240/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 位6:4 位3 位2 位1:0 OC1M[2:0]:输出比较1模式 (Output Compare 1 mode) 该3位定义了输出参考信号OC1REF的动作,而OC1REF决定了OC1、OC1N的值。OC1REF 是高电平有效,而OC1、OC1N的有效电平取决于CC1P、CC1NP位。 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为高。 110:PWM模式1- 在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为无效电平(OC1REF=0),否 则为有效电平(OC1REF=1)。 111:PWM模式2- 在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电 平。 注1:一旦LOCK级别设为3(TIMx_BDTR寄存器中的LOCK位)并且CC1S=00(该通道配置成输 出)则该位不能被修改。 注2:在PWM模式1或PWM模式2中,只有当比较结果改变了或在输出比较模式中从冻结模式 切换到PWM模式时,OC1REF电平才改变。 OC1PE:输出比较1预装载使能 (Output Compare 1 preload enable) 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) 该位用于加快CC输出对触发输入事件的响应。 0:根据计数器与CCR1的值,CC1正常操作,即使触发器是打开的。当触发器的输入有一个有 效沿时,激活CC1输出的最小延时为5个时钟周期。 1:输入到触发器的有效沿的作用就象发生了一次比较匹配。因此,OC被设置为比较电平而与 比较结果无关。采样触发器的有效沿和CC1输出间的延时被缩短为3个时钟周期。 OCFE只在通道被配置成PWM1或PWM2模式时起作用。 CC1S[1:0]:捕获/比较1 选择。(Capture/Compare 1 selection) 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC1通道被配置为输出; 01:CC1通道被配置为输入,IC1映射在TI1上; 10:CC1通道被配置为输入,IC1映射在TI2上; 11:CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=0)才是可写的。 241/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 输入捕获模式: 位15:12 位11:10 位9:8 位7:4 位3:2 位1:0 IC2F[3:0]:输入捕获2滤波器 (Input capture 2 filter) IC2PSC[1:0]:输入/捕获2预分频器 (Input capture 2 prescaler) CC2S[1:0]:捕获/比较2选择 (Capture/Compare 2 selection) 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC2通道被配置为输出; 01:CC2通道被配置为输入,IC2映射在TI2上; 10:CC2通道被配置为输入,IC2映射在TI1上; 11:CC2通道被配置为输入,IC2映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC2S仅在通道关闭时(TIMx_CCER寄存器的CC2E=0)才是可写的。 IC1F[3:0]:输入捕获1滤波器 (Input capture 1 filter) 这几位定义了TI1输入的采样频率及数字滤波器长度。数字滤波器由一个事件计数器组成,它记 录到N个事件后会产生一个输出的跳变: 0000:无滤波器,以fDTS采样 0001:采样频率fSAMPLING=fCK_INT,N=2 0010:采样频率fSAMPLING=fCK_INT,N=4 0011:采样频率fSAMPLING=fCK_INT,N=8 0100:采样频率fSAMPLING=fDTS/2,N=6 0101:采样频率fSAMPLING=fDTS/2,N=8 0110:采样频率fSAMPLING=fDTS/4,N=6 0111:采样频率fSAMPLING=fDTS/4,N=8 1000:采样频率fSAMPLING=fDTS/8,N=6 1001:采样频率fSAMPLING=fDTS/8,N=8 1010:采样频率fSAMPLING=fDTS/16,N=5 1011:采样频率fSAMPLING=fDTS/16,N=6 1100:采样频率fSAMPLING=fDTS/16,N=8 1101:采样频率fSAMPLING=fDTS/32,N=5 1110:采样频率fSAMPLING=fDTS/32,N=6 1111:采样频率fSAMPLING=fDTS/32,N=8 IC1PSC[1:0]:输入/捕获1预分频器 (Input capture 1 prescaler) 这2位定义了CC1输入(IC1)的预分频系数。 一旦CC1E=0(TIMx_CCER寄存器中),则预分频器复位。 00:无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获; 01:每2个事件触发一次捕获; 10:每4个事件触发一次捕获; 11:每8个事件触发一次捕获。 CC1S[1:0]:捕获/比较1选择 (Capture/Compare 1 Selection) 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC1通道被配置为输出; 01:CC1通道被配置为输入,IC1映射在TI1上; 10:CC1通道被配置为输入,IC1映射在TI2上; 11:CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=0)才是可写的。 13.4.8 TIM1 和TIM8 捕获/比较模式寄存器 2(TIMx_CCMR2) 偏移地址:0x1C 复位值:0x0000 参看以上CCMR1寄存器的描述 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OC4CE rw OC4M[2:0] IC4F[3:0] rw rw rw OC4PE OC4FE IC4PSC[1:0] rw rw CC4S[1:0] rw rw OC3CE rw OC3M[2:0] IC3F[3:0] rw rw rw OC3PE OC3FE IC3PSC[1:0] rw rw CC3S[1:0] rw rw 242/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 输出比较模式: 位15 位14:12 位11 位10 位9:8 位7 位6:4 位3 位2 位1:0 OC4CE:输出比较4清0使能 (Output compare 4 clear enable) OC4M[2:0]:输出比较4模式 (Output compare 4 mode) OC4PE:输出比较4预装载使能 (Output compare 4 preload enable) OC4FE:输出比较4快速使能 (Output compare 4 fast enable) CC4S[1:0]:捕获/比较4选择 (Capture/Compare 4 selection) 该2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC4通道被配置为输出; 01:CC4通道被配置为输入,IC4映射在TI4上; 10:CC4通道被配置为输入,IC4映射在TI3上; 11:CC4通道被配置为输入,IC4映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC4S仅在通道关闭时(TIMx_CCER寄存器的CC4E=0)才是可写的。 OC3CE:输出比较3清0使能 (Output compare 3 clear enable) OC3M[2:0]:输出比较3模式 (Output compare 3 mode) OC3PE:输出比较3预装载使能 (Output compare 3 preload enable) OC3FE:输出比较3快速使能 (Output compare 3 fast enable) CC3S[1:0]:捕获/比较3选择 (Capture/Compare 3 selection) 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC3通道被配置为输出; 01:CC3通道被配置为输入,IC3映射在TI3上; 10:CC3通道被配置为输入,IC3映射在TI4上; 11:CC3通道被配置为输入,IC3映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC3S仅在通道关闭时(TIMx_CCER寄存器的CC3E=0)才是可写的。 输入捕获模式: 位15:12 位11:10 位9:8 位7:4 位3:2 位1:0 IC4F[3:0]:输入捕获4滤波器 (Input capture 4 filter) IC4PSC[1:0]:输入/捕获4预分频器 (Input capture 4 prescaler) CC4S[1:0]:捕获/比较4选择 (Capture/Compare 4 selection) 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC4通道被配置为输出; 01:CC4通道被配置为输入,IC4映射在TI4上; 10:CC4通道被配置为输入,IC4映射在TI3上; 11:CC4通道被配置为输入,IC4映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC4S仅在通道关闭时(TIMx_CCER寄存器的CC4E=0)才是可写的。 IC3F[3:0]:输入捕获3滤波器 (Input capture 3 filter) IC3PSC[1:0]:输入/捕获3预分频器 (Input capture 3 prescaler) CC3S[1:0]:捕获/比较3选择 (Capture/compare 3 selection) 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC3通道被配置为输出; 01:CC3通道被配置为输入,IC3映射在TI3上; 10:CC3通道被配置为输入,IC3映射在TI4上; 11:CC3通道被配置为输入,IC3映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC3S仅在通道关闭时(TIMx_CCER寄存器的CC3E=0)才是可写的。 243/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 13.4.9 TIM1 和TIM8 捕获/比较使能寄存器(TIMx_CCER) 偏移地址:0x20 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CC4P rw 位15:14 位13 位12 位11 位10 位9 位8 位7 位6 位5 位4 位3 位2 位1 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 保留,始终读为0。 CC4P:输入/捕获4输出极性 (Capture/Compare 4 output polarity) 参考CC1P的描述。 CC4E:输入/捕获4输出使能 (Capture/Compare 4 output enable) 参考CC1E 的描述。 CC3NP:输入/捕获3互补输出极性 (Capture/Compare 3 complementary output polarity) 参考CC1NP的描述。 CC3NE:输入/捕获3互补输出使能 (Capture/Compare 3 complementary output enable) 参考CC1NE的描述。 CC3P:输入/捕获3输出极性 (Capture/Compare 3 output polarity) 参考CC1P的描述。 CC3E:输入/捕获3输出使能 (Capture/Compare 3 output enable) 参考CC1E 的描述。 CC2NP:输入/捕获2互补输出极性 (Capture/Compare 2 complementary output polarity) 参考CC1NP的描述。 CC2NE:输入/捕获2互补输出使能 (Capture/Compare 2 complementary output enable) 参考CC1NE的描述。 CC2P:输入/捕获2输出极性 (Capture/Compare 2 output polarity) 参考CC1P的描述。 CC2E:输入/捕获2输出使能 (Capture/Compare 2 output enable) 参考CC1E的描述。 CC1NP:输入/捕获1互补输出极性 (Capture/Compare 1 complementary output polarity) 0:OC1N高电平有效; 1:OC1N低电平有效。 注:一旦LOCK级别(TIMx_BDTR寄存器中的LOCK位)设为3或2且CC1S=00(通道配置为输出) 则该位不能被修改。 CC1NE:输入/捕获1互补输出使能 (Capture/Compare 1 complementary output enable) 0:关闭- OC1N禁止输出,因此OC1N的电平依赖于MOE、OSSI、OSSR、OIS1、OIS1N和 CC1E位的值。 1:开启- OC1N信号输出到对应的输出引脚,其输出电平依赖于MOE、OSSI、OSSR、 OIS1、OIS1N和CC1E位的值。 CC1P:输入/捕获1输出极性 (Capture/Compare 1 output polarity) CC1通道配置为输出: 0:OC1高电平有效; 1:OC1低电平有效。 CC1通道配置为输入: 该位选择是IC1还是IC1的反相信号作为触发或捕获信号。 0:不反相:捕获发生在IC1的上升沿;当用作外部触发器时,IC1不反相。 1:反相:捕获发生在IC1的下降沿;当用作外部触发器时,IC1反相。 注:一旦LOCK级别(TIMx_BDTR寄存器中的LOCK位)设为3或2,则该位不能被修改。 244/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 位0 CC1E:输入/捕获1输出使能 (Capture/Compare 1 output enable) CC1通道配置为输出: 0: 关闭- OC1禁止输出,因此OC1的输出电平依赖于MOE、OSSI、OSSR、OIS1、OIS1N 和CC1NE位的值。 1: 开启- OC1信号输出到对应的输出引脚,其输出电平依赖于MOE、OSSI、OSSR、 OIS1、OIS1N和CC1NE位的值。 CC1通道配置为输入: 该位决定了计数器的值是否能捕获入TIMx_CCR1寄存器。 0:捕获禁止; 0:捕获使能。 注: 表75 带刹车功能的互补输出通道OCx和OCxN的控制位 控制位 输出状态(1) MOE OSSI OSSR CCxE CCxNE 位位 位 位 位 OCx 输出状态 OCxN 输出状态 0 0 输出禁止(与定时器断开) 0 OCx=0,OCx_EN=0 输出禁止(与定时器断开) OCxN=0,OCxN_EN=0 0 0 0 1 输出禁止(与定时器断开) 1 OCx=0,OCx_EN=0 OCxREF + 极性, OCxN= OCxREF xor CCxNP, OCxN_EN=1 0 OCxREF + 极性, OCx= OCxREF xor CCxP, 输出禁止(与定时器断开) OCxN=0,OCxN_EN=0 OCx_EN=1 0 1 1 X 1 0 1 OCxREF + 极性 + 死区, OCxREF反相 + 极性 + 死区, OCx_EN=1 OCxN_EN=1 输出禁止(与定时器断开) 输出禁止(与定时器断开) 0 OCx=CCxP,OCx_EN=0 OCxN=CCxNP,OCxN_EN=0 1 0 关闭状态(输出使能且为无效 OCxREF + 极性, 1 电平) OCxN= OCxREF xor CCxNP, OCx=CCxP,OCx_EN=1 OCxN_EN=1 1 1 OCxREF + 极性, 关闭状态(输出使能且为无效电 0 OCx= OCxREF xor CCxP, 平) OCx_EN=1 OCxN=CCxNP,OCxN_EN=1 1 1 OCxREF + 极性 + 死区, OCxREF反相 + 极性 + 死区, 1 OCx_EN=1 OCxN_EN=1 0 0 0 0 0 1 0 1 0 X 1 0 1 0 1 1 1 1 0 输出禁止(与定时器断开) 异 步 地 : OCx=CCxP , OCx_EN=0 , OCxN=CCxNP , 1 OCxN_EN=0; 0 若 时 钟 存 在 : 经 过 一 个 死 区 时 间 后 OCx=OISx , OCxN=OISxN,假设OISx与OISxN并不都对应OCx和OCxN的 1 有效电平。 0 关闭状态(输出使能且为无效电平) 异 步 地 : OCx=CCxP , OCx_EN=1 , OCxN=CCxNP , 1 OCxN_EN=1; 0 若 时 钟 存 在 : 经 过 一 个 死 区 时 间 后 OCx=OISx , OCxN=OISxN,假设OISx与OISxN并不都对应OCx和OCxN的 1 有效电平。 1. 如果一个通道的2个输出都没有使用(CCxE = CCxNE = 0),那么OISx, OISxN, CCxP和CCxNP都必须清零。 引脚连接到互补的OCx和OCxN通道的外部I/O引脚的状态,取决于OCx和OCxN通道状态和 GPIO以及AFIO寄存器。 245/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 13.4.10 TIM1 和TIM8 计数器(TIMx_CNT) 偏移地址:0x24 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CNT[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 CNT[15:0]:计数器的值 (Counter value) 13.4.11 TIM1 和TIM8 预分频器(TIMx_PSC) 偏移地址:0x28 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PSC[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 PSC[15:0]:预分频器的值 (Prescaler value) 计数器的时钟频率(CK_CNT)等于fCK_PSC/( PSC[15:0]+1)。 PSC包含了每次当更新事件产生时,装入当前预分频器寄存器的值;更新事件包括计数器被 TIM_EGR的UG位清’0’或被工作在复位模式的从控制器清’0’。 13.4.12 TIM1 和TIM8 自动重装载寄存器(TIMx_ARR) 偏移地址:0x2C 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ARR[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 ARR[15:0]: 自动重装载的值 (Prescaler value) ARR包含了将要装载入实际的自动重装载寄存器的值。 详细参考13.3.1节:有关ARR的更新和动作。 当自动重装载的值为空时,计数器不工作。 13.4.13 TIM1 和TIM8 重复计数寄存器(TIMx_RCR) 偏移地址:0x30 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 REP[7:0] rw rw rw rw rw rw rw rw 位15:8 保留,始终读为0。 位7:0 REP[7:0]: 重复计数器的值 (Repetition counter value) 开启了预装载功能后,这些位允许用户设置比较寄存器的更新速率(即周期性地从预装载寄存器 传输到当前寄存器);如果允许产生更新中断,则会同时影响产生更新中断的速率。 每次向下计数器REP_CNT达到0,会产生一个更新事件并且计数器REP_CNT重新从REP值开 始计数。由于REP_CNT只有在周期更新事件U_RC发生时才重载REP值,因此对TIMx_RCR寄 存器写入的新值只在下次周期更新事件发生时才起作用。 这意味着在PWM模式中,(REP+1)对应着: - 在边沿对齐模式下,PWM周期的数目; - 在中心对称模式下,PWM半周期的数目; 246/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 13.4.14 TIM1 和TIM8 捕获/比较寄存器 1(TIMx_CCR1) 偏移地址:0x34 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR1[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 CCR1[15:0]: 捕获/比较通道1的值 (Capture/Compare 1 value) 若CC1通道配置为输出: CCR1包含了装入当前捕获/比较1寄存器的值(预装载值)。 如果在TIMx_CCMR1寄存器(OC1PE位)中未选择预装载功能,写入的数值会立即传输至当前寄 存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较1寄存器中。 当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC1端口上产生输出信号。 若CC1通道配置为输入: CCR1包含了由上一次输入捕获1事件(IC1)传输的计数器值。 13.4.15 TIM1 和TIM8 捕获/比较寄存器 2(TIMx_CCR2) 偏移地址:0x38 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR2[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 CCR2[15:0]: 捕获/比较通道2的值 (Capture/Compare 2 value) 若CC2通道配置为输出: CCR2包含了装入当前捕获/比较2寄存器的值(预装载值)。 如果在TIMx_CCMR2寄存器(OC2PE位)中未选择预装载特性,写入的数值会立即传输至当前寄 存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较2寄存器中。 当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC2端口上产生输出信号。 若CC2通道配置为输入: CCR2包含了由上一次输入捕获2事件(IC2)传输的计数器值。 13.4.16 TIM1 和TIM8 捕获/比较寄存器 3(TIMx_CCR3) 偏移地址:0x3C 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR3[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 CCR3[15:0]: 捕获/比较通道3的值 (Capture/Compare 3 value) 若CC3通道配置为输出: CCR3包含了装入当前捕获/比较3寄存器的值(预装载值)。 如果在TIMx_CCMR3寄存器(OC3PE位)中未选择预装载特性,写入的数值会立即传输至当前寄 存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较3寄存器中。 当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC3端口上产生输出信号。 若CC3通道配置为输入: CCR3包含了由上一次输入捕获3事件(IC3)传输的计数器值。 247/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 13.4.17 TIM1 和TIM8 捕获/比较寄存器(TIMx_CCR4) 偏移地址:0x40 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR4[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 CCR4[15:0]: 捕获/比较通道4的值 (Capture/Compare 4 value) 若CC4通道配置为输出: CCR4包含了装入当前捕获/比较4寄存器的值(预装载值)。 如果在TIMx_CCMR4寄存器(OC4PE位)中未选择预装载特性,写入的数值会立即传输至当前寄 存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较4寄存器中。 当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC4端口上产生输出信号。 若CC4通道配置为输入: CCR4包含了由上一次输入捕获4事件(IC4)传输的计数器值。 13.4.18 TIM1 和TIM8 刹车和死区寄存器(TIMx_BDTR) 偏移地址:0x44 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MOE AOE BKP BKE OSSR OSSI LOCK[1:0] DTG[7:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 注释: 根据锁定设置,AOE、BKP、BKE、OSSI、OSSR和DTG[7:0]位均可被写保护,有必要在第一 次写入TIMx_BDTR寄存器时对它们进行配置。 位15 MOE: 主输出使能 (Main output enable) 一旦刹车输入有效,该位被硬件异步清’0’。根据AOE位的设置值,该位可以由软件清’0’或被自 动置1。它仅对配置为输出的通道有效。 0:禁止OC和OCN输出或强制为空闲状态; 1:如果设置了相应的使能位(TIMx_CCER寄存器的CCxE、CCxNE位),则开启OC和OCN输 出。 有关OC/OCN使能的细节,参见13.4.9节,TIM1和TIM8捕获/比较使能寄存器(TIMx_CCER)。 位14 AOE: 自动输出使能 (Automatic output enable) 0:MOE只能被软件置’1’; 1:MOE能被软件置’1’或在下一个更新事件被自动置’1’(如果刹车输入无效)。 注:一旦LOCK级别(TIMx_BDTR寄存器中的LOCK位)设为’1’,则该位不能被修改。 位13 BKP: 刹车输入极性 (Break polarity) 0:刹车输入低电平有效; 1:刹车输入高电平有效。 注:一旦LOCK级别(TIMx_BDTR寄存器中的LOCK位)设为’1’,则该位不能被修改。 注:任何对该位的写操作都需要一个APB时钟的延迟以后才能起作用。 位12 BKE: 刹车功能使能 (Break enable) 0:禁止刹车输入(BRK及CCS时钟失效事件); 1:开启刹车输入(BRK及CCS时钟失效事件)。 注:当设置了LOCK级别1时(TIMx_BDTR寄存器中的LOCK位),该位不能被修改。 注:任何对该位的写操作都需要一个APB时钟的延迟以后才能起作用。 248/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 位11 位10 位9:8 位7:0 OSSR: 运行模式下“关闭状态”选择 (Off-state selection for Run mode) 该位用于当MOE=1且通道为互补输出时。没有互补输出的定时器中不存在OSSR位。 参考OC/OCN使能的详细说明(13.4.9节,TIM1和TIM8捕获/比较使能寄存器(TIMx_CCER))。 0:当定时器不工作时,禁止OC/OCN输出(OC/OCN使能输出信号=0); 1:当定时器不工作时,一旦CCxE=1或CCxNE=1,首先开启OC/OCN并输出无效电平,然后 置OC/OCN使能输出信号=1。 注:一旦LOCK级别(TIMx_BDTR寄存器中的LOCK位)设为2,则该位不能被修改。 OSSI: 空闲模式下“关闭状态”选择 (Off-state selection for Idle mode) 该位用于当MOE=0且通道设为输出时。 参考OC/OCN使能的详细说明(13.4.9节,TIM1和TIM8捕获/比较使能寄存器(TIMx_CCER))。 0:当定时器不工作时,禁止OC/OCN输出(OC/OCN使能输出信号=0); 1:当定时器 不工作时,一旦CCxE=1或CCxNE=1,OC/OCN首先输出其空闲电平,然后 OC/OCN使能输出信号=1。 注:一旦LOCK级别(TIMx_BDTR寄存器中的LOCK位)设为2,则该位不能被修改。 LOOK[1:0]: 锁定设置 (Lock configuration) 该位为防止软件错误而提供写保护。 00:锁定关闭,寄存器无写保护; 01:锁定级别1,不能写入TIMx_BDTR寄存器的DTG、BKE、BKP、AOE位和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) 这些位定义了插入互补输出之间的死区持续时间。假设DT表示其持续时间: DTG[7:5]=0xx => DT=DTG[7:0] × Tdtg,Tdtg = TDTS; DTG[7:5]=10x => DT=(64+DTG[5:0]) × Tdtg,Tdtg = 2 × TDTS; DTG[7:5]=110 => DT=(32+DTG[4:0]) × Tdtg,Tdtg = 8 × TDTS; DTG[7:5]=111 => DT=(32+DTG[4:0])× Tdtg,Tdtg = 16 × TDTS; 例:若TDTS = 125ns(8MHZ),可能的死区时间为: 0到15875ns,若步长时间为125ns; 16us到31750ns,若步长时间为250ns; 32us到63us,若步长时间为1us; 64us到126us,若步长时间为2us; 注:一旦LOCK级别(TIMx_BDTR寄存器中的LOCK位)设为1、2或3,则不能修改这些位。 13.4.19 TIM1 和TIM8 DMA控制寄存器(TIMx_DCR) 偏移地址:0x48 复位值:0x0000 15 14 13 12 11 10 9 8 保留 DBL[4:0] rw rw rw rw rw 位15:13 保留,始终读为0。 7 6 5 保留 4 3 2 1 0 DBA[4:0] rw rw rw rw rw 249/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) STM32F10xxx参考手册 位12:8 位7:5 位4:0 DBL[4:0]: DMA连续传送长度 (DMA burst length) 这些位定义了DMA在连续模式下的传送长度(当对TIMx_DMAR寄存器进行读或写时,定时器则 进行一次连续传送),即:定义传输的次数,传输可以是半字(双字节)或字节: 00000:1次传输 00001:2次传输 00010:3次传输 ...... ...... 10001:18次传输 例:我们考虑这样的传输:DBL=7,DBA=TIM2_CR1 - 如果DBL=7,DBA=TIM2_CR1表示待传输数据的地址,那么传输的地址由下式给出: (TIMx_CR1的地址) + DBA + (DMA索引), 其中 DMA索引 = DBL 其中(TIMx_CR1的地址) + DBA再加上7,给出了将要写入或者读出数据的地址,这样数据的传 输将发生在从地址(TIMx_CR1的地址) + DBA开始的7个寄存器。 根据DMA数据长度的设置,可能发生以下情况: - 如果设置数据为半字(16位),那么数据就会传输给全部7个寄存器。 - 如果设置数据为字节,数据仍然会传输给全部7个寄存器:第一个寄存器包含第一个MSB字 节,第二个寄存器包含第一个LSB字节,以此类推。因此对于定时器,用户必须指定由DMA传 输的数据宽度。 保留,始终读为0。 DBA[4:0]: DMA基地址 (DMA base address) 这些位定义了DMA在连续模式下的基地址(当对TIMx_DMAR寄存器进行读或写时),DBA定义 为从TIMx_CR1寄存器所在地址开始的偏移量: 00000:TIMx_CR1, 00001:TIMx_CR2, 00010:TIMx_SMCR, ...... 13.4.20 TIM1 和TIM8 连续模式的DMA地址(TIMx_DMAR) 偏移地址:0x4C 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DMAB[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 DMAB[15:0]: DMA连续传送寄存器 (DMA register for burst accesses) 对TIMx_DMAR寄存器的读或写会导致对以下地址所在寄存器的存取操作: TIMx_CR1地址 + DBA + DMA索引,其中: “TIMx_CR1地址”是控制寄存器1(TIMx_CR1)所在的地址; “DBA”是TIMx_DCR寄存器中定义的基地址; “DMA索引”是由DMA自动控制的偏移量,它取决于TIMx_DCR寄存器中定义的DBL。 250/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 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 ARPE 7 6 5 DIR 4 OPM 3 URS 2 UDIS 1 CEN 0 OIS4 OIS3N OIS3 OIS2N OIS2 OIS1N OIS1 TI1S CCDS CCUS 保留 CCPC TDE COMDE CC4DE CC3DE CC2DE CC1DE UDE BIE TIE COMIE CC4IE CC3IE CC2IE CC1IE UIE CC4OF CC3OF CC2OF CC1OF 保留 BIF TIF COMIF CC4IF CC3IF CC2IF CC1IF UIF BG TG COM CC4G CC3G CC2G CC1G UG 13.4.21 TIM1 和TIM8 寄存器图 下表中将TIM1和TIM8的所有寄存器映射到一个16位可寻址(编址)空间。 表76 TIM1和TIM8 – 寄存器图和复位值 偏移 寄存器 000h TIMx_CR1 复位值 004h TIMx_CR2 复位值 008h TIMx_SMCR 复位值 保留 保留 保留 ETP ECE MSM 保留 CKD [1:0] CMS [1:0] 0000000000 MMS [2:0] 0000000000000 0 ETPS [1:0] EFT[3:0] TS [2:0] SMS [2:0] 000000000000 000 00Ch TIMx_DIER 复位值 保留 000000000000000 010h TIMx_SR 复位值 保留 0000 00000000 014h TIMx_EGR 复位值 TIMx_CCMR1 输出比较模式 018h 复位值 TIMx_CCMR1 输入捕获模式 复位值 TIMx_CCMR2 输出比较模式 01Ch 复位值 TIMx_CCMR2 输入捕获模式 复位值 保留 保留 保留 保留 保留 OC4CE OC4PE OC4FE OC3CE OC3PE OC3FE OC2CE OC2PE OC2FE OC1CE OC1PE OC1FE 00000000 OC2M [2:0] CC2S [1:0] OC1M [2:0] CC1S [1:0] 0000000000000000 IC2F [3:0] IC2 PSC [1:0] CC2S [1:0] IC1F [3:0] IC1 PSC [1:0] CC1S [1:0] 0000000000000000 OC4M [2:0] CC4S [1:0] OC3M [2:0] CC3S [1:0] 0000000000000000 IC4F [3:0] IC4 PSC [1:0] CC4S [1:0] IC3F [3:0] IC3 PSC [1:0] CC3S [1:0] 0000000000000000 020h 024h 028h TIMx_CCER 复位值 TIMx_CNT 复位值 TIMx_PSC 复位值 保留 保留 保留 00000000000000 CNT[15:0] 0000000000000000 PSC[15:0] 0000000000000000 CC4P CC4E CC3NP CC3NE CC3P CC3E CC2NP CC2NE CC2P CC2E CC1NP CC1NE CC1P CC1E 251/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 高级控制定时器(TIM1和TIM8) 19 20 21 22 23 24 25 26 27 28 29 30 31 偏移 寄存器 02Ch 030h 034h 038h 03Ch 040h TIMx_ARR 复位值 TIMx_RCR 复位值 TIMx_CCR1 复位值 TIMx_CCR2 复位值 TIMx_CCR3 复位值 TIMx_CCR4 复位值 保留 保留 保留 保留 保留 保留 044h 048h 04Ch TIMx_BDTR 复位值 保留 TIMx_DCR 复位值 保留 TIMx_DMAR 复位值 保留 关于寄存器的起始地址,请参见表1。 18 17 16 MOE 15 STM32F10xxx参考手册 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ARR[15:0] 0000000000000000 REP[7:0] 00000000 CCR1[15:0] 0000000000000000 CCR2[15:0] 0000000000000000 CCR3[15:0] 0000000000000000 CCR4[15:0] OSSI OSSR 0000000000000000 BKE BKP AOE LOCK [1:0] DT[7:0] 0000000000000000 DBL[4:0] 保留 DBA[4:0] 00000 00000 DMAB[15:0] 0000000000000000 252/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 14 通用定时器(TIMx) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。 14.1 TIMx简介 通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。 它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)。 使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个 毫秒间调整。 每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作,参见14.3.15 节。 14.2 TIMx主要功能 通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括: ● 16位向上、向下、向上/向下自动装载计数器 ● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意 数值 ● 4个独立通道: ─ 输入捕获 ─ 输出比较 ─ PWM生成(边缘或中间对齐模式) ─ 单脉冲模式输出 ● 使用外部信号控制定时器和定时器互连的同步电路 ● 如下事件发生时产生中断/DMA: ─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) ─ 输入捕获 ─ 输出比较 ● 支持针对定位的增量(正交)编码器和霍尔传感器电路 ● 触发输入作为外部时钟或者按周期的电流管理 253/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 图98 通用定时器框图 STM32F10xxx参考手册 注: 根据控制位的设定,在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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 计数器由预分频器的时钟输出CK_CNT驱动,仅当设置了计数器TIMx_CR1寄存器中的计数器使 能位(CEN)时,CK_CNT才有效。(有关计数器使能的细节,请参见控制器的从模式描述)。 注:真正的计数器使能信号CNT_EN是在CEN的一个时钟周期后被设置。 预分频器描述 预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。它是基于一个(在TIMx_PSC 寄存器中的)16位寄存器控制的16位计数器。这个控制寄存器带有缓冲器,它能够在工作时被改 变。新的预分频器参数在下一次更新事件到来时被采用。 图99和图100给出了在预分频器运行时,更改计数器参数的例子。 图99 当预分频器的参数从1变到2时,计数器的时序图 图100 当预分频器的参数从1变到4时,计数器的时序图 14.3.2 计数器模式 向上计数模式 在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器的内容),然后重新从0开始 计数并且产生一个计数器溢出事件。 每次计数器溢出时可以产生更新事件,在TIMx_EGR寄存器中(通过软件方式或者使用从模式控 制器)设置UG位也同样可以产生一个更新事件。 255/754 参照2009年12月 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 图103 计数器时序图,内部时钟分频因子为4 STM32F10xxx参考手册 图104 计数器时序图,内部时钟分频因子为N 图105 计数器时序图,当ARPE=0时的更新事件(TIMx_ARR没有预装入) 257/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 图106 计数器时序图,当ARPE=1时的更新事件(预装入了TIMx_ARR) 向下计数模式 在向下模式中,计数器从自动装入的值(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时,计数器在不同时钟频率下的操作例子。 258/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 图107 计数器时序图,内部时钟分频因子为1 STM32F10xxx参考手册 图108 计数器时序图,内部时钟分频因子为2 图109 计数器时序图,内部时钟分频因子为4 259/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 图110 计数器时序图,内部时钟分频因子为N STM32F10xxx参考手册 图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寄存器)的值。 ● 当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)。注:如果因为计数 器溢出而产生更新,自动重装载将在计数器重载入之前被更新,因此下一个周期将是预期 的值(计数器被装载为新的值)。 260/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 以下是一些计数器在不同时钟频率下的操作的例子: 图112 计数器时序图,内部时钟分频因子为1,TIMx_ARR=0x6 STM32F10xxx参考手册 1.这里使用了中心对齐模式1(详见14.4.1节)。 图113 计数器时序图,内部时钟分频因子为2 图114 计数器时序图,内部时钟分频因子为4,TIMx_ARR=0x36 261/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 图115 计数器时序图,内部时钟分频因子为N STM32F10xxx参考手册 图116 计数器时序图,ARPE=1时的更新事件(计数器下溢) 262/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 图117 计数器时序图,ARPE=1时的更新事件(计数器溢出) STM32F10xxx参考手册 14.3.3 时钟选择 计数器时钟可由下列时钟源提供: ● 内部时钟(CK_INT) ● 外部时钟模式1:外部输入脚(TIx) ● 外部时钟模式2:外部触发输入(ETR) ● 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时 器Timer1而作为另一个定时器Timer2的预分频器。参见14.3.15。 内部时钟源(CK_INT) 如果禁止了从模式控制器(TIMx_SMCR寄存器的SMS=000),则CEN、DIR(TIMx_CR1寄存器) 和UG位(TIMx_EGR寄存器)是事实上的控制位,并且只能被软件修改(UG位仍被自动清除)。只 要CEN位被写成’1’,预分频器的时钟就由内部时钟CK_INT提供。 下图显示了控制电路和向上计数器在一般模式下,不带预分频器时的操作。 图118 一般模式下的控制电路,内部时钟分频因子为1 外部时钟源模式1 当TIMx_SMCR寄存器的SMS=111时,此模式被选中。计数器可以在选定输入端的每个上升沿 或下降沿计数。 263/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 图119 TI2外部时钟连接例子 STM32F10xxx参考手册 注: 例如,要配置向上计数器在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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 图121 外部触发输入框图 STM32F10xxx参考手册 例如,要配置在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 计数器在每2个ETR上升沿计数一次。 在ETR的上升沿和计数器实际时钟之间的延时取决于在ETRP信号端的重新同步电路。 图122 外部时钟模式2下的控制电路 14.3.4 捕获/比较通道 每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器),包括捕获的输入部分 (数字滤波、多路复用和预分频器),和输出部分(比较器和输出控制)。 下面几张图是一个捕获/比较通道概览。 输入部分对相应的TIx输入信号采样,并产生一个滤波后的信号TIxF。然后,一个带极性选择的 边缘检测器产生一个信号(TIxFPx),它可以作为从模式控制器的输入触发或者作为捕获控制。该 信号通过预分频进入捕获寄存器(ICxPS)。 265/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 图123 捕获/比较通道(如:通道1输入部分) STM32F10xxx参考手册 输出部分产生一个中间波形OCxRef(高有效)作为基准,链的末端决定最终输出信号的极性。 图124 捕获/比较通道1的主电路 图125 捕获/比较通道的输出部分(通道1) 捕获/比较模块由一个预装载寄存器和一个影子寄存器组成。读写过程仅操作预装载寄存器。 266/754 参照2009年12月 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输入。 ● 这2个ICx信号为边沿有效,但是极性相反。 ● 其中一个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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 ● 配置从模式控制器为复位模式:置TIMx_SMCR中的SMS=100。 ● 使能捕获:置TIMx_CCER寄存器中CC1E=1且CC2E=1。 图126 PWM输入模式时序 由 于 只 有 TI1FP1 和 TI2FP2 连 到 了 从 模 式 控 制 器 , 所 以 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寄存器是否需要使用预装载寄存器。 在输出比较模式下,更新事件UEV对OCxREF和OCx输出没有影响。 同步的精度可以达到计数器的一个计数周期。输出比较模式(在单脉冲模式下)也能用来输出一个 单脉冲。 268/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 输出比较模式的配置步骤: 1. 选择计数器时钟(内部,外部,预分频器) 2. 将相应的数据写入TIMx_ARR和TIMx_CCRx寄存器中 3. 如果要产生一个中断请求和/或一个DMA请求,设置CCxIE位和/或CCxDE位。 4. 选择输出模式,例如当计数器CNT与CCRx匹配时翻转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_CNT和TIMx_CCRx始终在进行比较,(依据计数器的计数 方 向 ) 以 确 定 是 否 符 合 TIMx_CCRx ≤ TIMx_CNT 或 者 TIMx_CNT ≤ TIMx_CCRx 。 然 而 为 了 与 OCREF_CLR的功能(在下一个PWM周期之前,ETR信号上的一个外部事件能够清除OCxREF) 一致,OCxREF信号只能在下述条件下产生: ● 当比较的结果改变,或 269/754 参照2009年12月 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_CNTTIMx_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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 图129 中央对齐的PWM波形(APR=8) STM32F10xxx参考手册 使用中央对齐模式的提示: ● 进入中央对齐模式时,使用当前的向上/向下计数配置;这就意味着计数器向上还是向下计 数取决于TIMx_CR1寄存器中DIR位的当前值。此外,软件不能同时修改DIR和CMS位。 ● 不推荐当运行在中央对齐模式时改写计数器,因为这会产生不可预知的结果。特别地: ─ 如果写入计数器的值大于自动重加载的值(TIMx_CNT>TIMx_ARR),则方向不会被更新。 例如,如果计数器正在向上计数,它就会继续向上计数。 ─ 如果将0或者TIMx_ARR的值写入计数器,方向被更新,但不产生更新事件UEV。 ● 使用中央对齐模式最保险的方法,就是在启动计数器之前产生一个软件更新(设置 TIMx_EGR 位中的UG位),不要在计数进行过程中修改计数器的值。 14.3.10 单脉冲模式 单脉冲模式(OPM)是前述众多模式的一个特例。这种模式允许计数器响应一个激励,并在一个 程序可控的延时之后,产生一个脉宽可程序控制的脉冲。 可 以 通 过 从 模 式 控 制 器 启 动 计 数 器 , 在 输 出 比 较 模 式 或 者 PWM 模 式 下 产 生 波 形 。 设 置 TIMx_CR1寄存器中的OPM位将选择单脉冲模式,这样可以让计数器自动地在产生下一个更新 事件UEV时停止。 仅当比较值与计数器的初始值不同时,才能产生一个脉冲。启动之前(当定时器正在等待触发), 必须如下配置: 271/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 向上计数方式:CNT < CCRx ≤ ARR (特别地,0 < CCRx), 向下计数方式:CNT > CCRx。 图130 单脉冲模式的例子 STM32F10xxx参考手册 例如,你需要在从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寄存器中的DIR和CMS位应该置低。 因为只需一个脉冲,所以必须设置TIMx_CR1寄存器中的OPM=’1’,在下一个更新事件(当计数 器从自动装载值翻转到0)时停止计数。 特殊情况:OCx快速使能: 在单脉冲模式下,在TIx输入脚的边沿检测逻辑设置CEN位以启动计数器。然后计数器和比较值 间的比较操作产生了输出的转换。但是这些操作需要一定的时钟周期,因此它限制了可得到的 最小延时tDELAY。 如果要以最小延时输出波形,可以设置TIMx_CCMRx寄存器中的OCxFE位;此时OCxREF(和 OCx)被强制响应激励而不再依赖比较的结果,输出的波形与比较匹配时的波形一样。OCxFE只 在通道配置为PWM1和PWM2模式时起作用。 272/754 参照2009年12月 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. 必须禁止外部时钟模式2:TIMx_SMCR寄存器中的ECE=’0’。 3. 外部触发极性(ETP)和外部触发滤波器(ETF)可以根据需要配置。 下图显示了当ETRF输入变为高时,对应不同OCxCE的值,OCxREF信号的动作。在这个例子 中,定时器TIMx被置于PWM模式。 图131 清除TIMx的OCxREF 14.3.12 编码器接口模式 选择编码器接口模式的方法是:如果计数器只在TI2的边沿计数,则置TIMx_SMCR寄存器中的 SMS=001;如果只在TI1边沿计数,则置SMS=010;如果计数器同时在TI1和TI2边沿计数,则 置SMS=011。 通过设置TIMx_CCER寄存器中的CC1P和CC2P位,可以选择TI1和TI2极性;如果需要,还可以 对输入滤波器编程。 两个输入TI1和TI2被用来作为增量编码器的接口。参看表77,假定计数器已经启动(TIMx_CR1 寄存器中的CEN=’1’),计数器由每次在TI1FP1或TI2FP2上的有效跳变驱动。TI1FP1和TI2FP2 是TI1和TI2在通过输入滤波器和极性控制后的信号;如果没有滤波和变相,则TI1FP1=TI1, TI2FP2=TI2。根据两个输入信号的跳变顺序,产生了计数脉冲和方向信号。依据两个输入信号 的跳变顺序,计数器向上或向下计数,同时硬件对TIMx_CR1寄存器的DIR位进行相应的设置。 不管计数器是依靠TI1计数、依靠TI2计数或者同时依靠TI1和TI2计数。在任一输入端(TI1或者 TI2)的跳变都会重新计算DIR位。 编码器接口模式基本上相当于使用了一个带有方向选择的外部时钟。这意味着计数器只在0到 TIMx_ARR寄存器的自动装载值之间连续计数(根据方向,或是0到ARR计数,或是ARR到0计 数)。所以在开始计数之前必须配置TIMx_ARR;同样,捕获器、比较器、预分频器、触发输出 特性等仍工作如常。 在这个模式下,计数器依照增量编码器的速度和方向被自动的修改,因此计数器的内容始终指 示着编码器的位置。计数方向与相连的传感器旋转的方向对应。下表列出了所有可能的组合, 假设TI1和TI2不同时变换。 273/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 表77 计数方向与编码器信号的关系 有效边沿 相对信号的电平 (TI1FP1对应TI2, TI2FP2对应TI1) 高 仅在TI1计数 低 高 仅在TI2计数 低 高 在TI1和TI2上计数 低 TI1FP1信号 上升 下降 向下计数 向上计数 不计数 不计数 向下计数 向上计数 向上计数 向下计数 不计数 不计数 向上计数 向下计数 TI2FP2信号 上升 下降 不计数 不计数 向上计数 向下计数 向上计数 向下计数 不计数 不计数 向下计数 向上计数 向下计数 向上计数 一个外部的增量编码器可以直接与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 编码器模式下的计数器操作实例 274/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 下图为当IC1FP1极性反相时计数器的操作实例(CC1P=’1’,其他配置与上例相同) 图133 IC1FP1反相的编码器接口模式实例 当定时器配置成编码器接口模式时,提供传感器当前位置的信息。使用第二个配置在捕获模式 的定时器,可以测量两个编码器事件的间隔,获得动态的信息(速度,加速度,减速度)。指示机 械零点的编码器输出可被用做此目的。根据两个事件间的间隔,可以按照固定的时间读出计数 器。如果可能的话,你可以把计数器的值锁存到第三个输入捕获寄存器(捕获信号必须是周期的 并且可以由另一个定时器产生);也可以通过一个由实时时钟产生的DMA请求来读取它的值。 14.3.13 定时器输入异或功能 TIMx_CR2寄存器中的TI1S位,允许通道1的输入滤波器连接到一个异或门的输出端,异或门的 3个输入端为TIMx_CH1、TIMx_CH2和TIMx_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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 图134 复位模式下的控制电路 STM32F10xxx参考手册 从模式:门控模式 按照选中的输入端电平使能计数器。 在如下的例子中,计数器只在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 参照2009年12月 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 使用一个定时器作为另一个定时器的预分频器 图138 主/从定时器的例子 STM32F10xxx参考手册 注: 注: 如:可以配置定时器1作为定时器2的预分频器。参考图138,进行下述操作: ● 配置定时器1为主模式,它可以在每一个更新事件UEV时输出一个周期性的触发信号。在 TIM1_CR2寄存器的MMS=’010’时,每当产生一个更新事件时在TRGO1上输出一个上升沿 信号。 ● 连接定时器1的TRGO1输出至定时器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) ● 配置定时器1的OC1REF波形(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 定时器1的OC1REF控制定时器2 278/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 在图139的例子中,在定时器2启动之前,它们的计数器和预分频器未被初始化,因此它们从当 前的数值开始计数。可以在启动定时器1之前复位2个定时器,使它们从给定的数值开始,即在 定时器计数器中写入需要的任意数值。写TIMx_EGR寄存器的UG位即可复位定时器。 在下一个例子中,需要同步定时器1和定时器2。定时器1是主模式并从0开始,定时器2是从模式 并从0xE7开始;2个定时器的预分频器系数相同。写’0’到TIM1_CR1的CEN位将禁止定时器1, 定时器2随即停止。 ● 配置定时器1为主模式,送出输出比较1参考信号(OC1REF)做为触发输出(TIM1_CR2寄存 器的MMS=100)。 ● 配置定时器1的OC1REF波形(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)按照分频的内部时钟开始计数。在收到触发信号 时,定时器2的CEN位被自动地置’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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 图141 使用定时器1的更新触发定时器2 STM32F10xxx参考手册 在上一个例子中,可以在启动计数之前初始化两个计数器。图142显示在与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个定时器 这个例子中当定时器1的TI1输入上升时使能定时器1,使能定时器1的同时使能定时器2,参见图 138。为保证计数器的对齐,定时器1必须配置为主/从模式(对应TI1为从,对应定时器2为主): ● 配置定时器1为主模式,送出它的使能做为触发输出(TIM1_CR2寄存器的MMS=’001’)。 280/754 参照2009年12月 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’)。 当定时器1的TI1上出现一个上升沿时,两个定时器同步地按照内部时钟开始计数,两个TIF标志 也同时被设置。 在这个例子中,在启动之前两个定时器都被初始化(设置相应的UG位),两个计数器都从0开始, 但可以通过写入任意一个计数器寄存器(TIMx_CNT)在定时器间插入一个偏移。下图中能看到主/ 从模式下在定时器1的CNT_EN和CK_PSC之间有个延迟。 图143 使用定时器1的TI1输入触发定时器1和定时器2 14.3.16 调试模式 当微控制器进入调试模式(Cortex-M3核心停止),根据DBG模块中DBG_TIMx_STOP的设置, TIMx计数器或者继续正常操作,或者停止。详见随后第29.16.2节: 支持定时器、看门狗、 bxCAN和I2C的调试。 281/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 14.4 TIMx寄存器描述 关于在寄存器描述里面所用到的缩写,详见第1.1节。 可以用半字(16位)或字(32位)的方式操作这些外设寄存器。 14.4.1 控制寄存器 1(TIMx_CR1) 偏移地址:0x00 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CKD[1:0] ARPE CMS[1:0] DIR OPM URS UDIS CEN rw rw rw rw rw rw rw rw rw rw 位15:10 保留,始终读为0。 位9:8 CKD[1:0]: 时钟分频因子 (Clock division) 定义在定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例。 00:tDTS = tCK_INT 01:tDTS = 2 x tCK_INT 10:tDTS = 4 x tCK_INT 11:保留 位7 ARPE:自动重装载预装载允许位 (Auto-reload preload enable) 0:TIMx_ARR寄存器没有缓冲; 1:TIMx_ARR寄存器被装入缓冲器。 位6:5 CMS[1:0]:选择中央对齐模式 (Center-aligned mode selection) 00:边沿对齐模式。计数器依据方向位(DIR)向上或向下计数。 01:中央对齐模式1。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器 中CCxS=00)的输出比较中断标志位,只在计数器向下计数时被设置。 10:中央对齐模式2。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器 中CCxS=00)的输出比较中断标志位,只在计数器向上计数时被设置。 11:中央对齐模式3。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器 中CCxS=00)的输出比较中断标志位,在计数器向上和向下计数时均被设置。 注:在计数器开启时(CEN=1),不允许从边沿对齐模式转换到中央对齐模式。 位4 DIR:方向 (Direction) 0:计数器向上计数; 1:计数器向下计数。 注:当计数器配置为中央对齐模式或编码器模式时,该位为只读。 位3 OPM:单脉冲模式 (One pulse mode) 0:在发生更新事件时,计数器不停止; 1:在发生下一次更新事件(清除CEN位)时,计数器停止。 位2 URS:更新请求源 (Update request source) 软件通过该位选择UEV事件的源 0:如果使能了更新中断或DMA请求,则下述任一事件产生更新中断或DMA请求: − 计数器溢出/下溢 − 设置UG位 − 从模式控制器产生的更新 1:如果使能了更新中断或DMA请求,则只有计数器溢出/下溢才产生更新中断或DMA请求。 282/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 位1 UDIS:禁止更新 (Update disable) 软件通过该位允许/禁止UEV事件的产生 0:允许UEV。更新(UEV)事件由下述任一事件产生: − 计数器溢出/下溢 − 设置UG位 − 从模式控制器产生的更新 具有缓存的寄存器被装入它们的预装载值。(译注:更新影子寄存器) 1:禁止UEV。不产生更新事件,影子寄存器(ARR、PSC、CCRx)保持它们的值。如果设置了 UG位或从模式控制器发出了一个硬件复位,则计数器和预分频器被重新初始化。 位0 CEN:使能计数器 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 位15:8 位7 位6:4 位3 位2:0 保留 TI1S MMS[2:0] CCDS 保留 rw rw rw rw rw 保留,始终读为0。 TI1S:TI1选择 (TI1 selection) 0:TIMx_CH1引脚连到TI1输入; 1:TIMx_CH1、TIMx_CH2和TIMx_CH3引脚经异或后连到TI1输入。 见上一章13.3.18的与霍尔传感器的接口一节。 MMS[2:0]:主模式选择 (Master mode selection) 这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选择 0:当发生CCx事件时,送出CCx的DMA请求; 1:当发生更新事件时,送出CCx的DMA请求。 保留,始终读为0。 283/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 14.4.3 从模式控制寄存器(TIMx_SMCR) 偏移地址:0x08 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ETP ECE ETPS[1:0] ETF[3:0] MSM TS[2:0] 保留 SMS[2:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15 ETP:外部触发极性 (External trigger polarity) 该位选择是用ETR还是ETR的反相来作为触发操作 0:ETR不反相,高电平或上升沿有效; 1:ETR被反相,低电平或下降沿有效。 位14 ECE:外部时钟使能位 (External clock enable) 该位启用外部时钟模式2 0:禁止外部时钟模式2; 1:使能外部时钟模式2。计数器由ETRF信号上的任意有效边沿驱动。 注1:设置ECE位与选择外部时钟模式1并将TRGI连到ETRF(SMS=111和TS=111)具有相同功 效。 注2:下述从模式可以与外部时钟模式2同时使用:复位模式、门控模式和触发模式;但是,这 时TRGI不能连到ETRF(TS位不能是’111’)。 注3:外部时钟模式1和外部时钟模式2同时被使能时,外部时钟的输入是ETRF。 位13:12 ETPS[1:0]:外部触发预分频 (External trigger prescaler) 外部触发信号ETRP的频率必须最多是CK_INT频率的1/4。当输入较快的外部时钟时,可以使 用预分频降低ETRP的频率。 00:关闭预分频; 01:ETRP频率除以2; 10:ETRP频率除以4; 11:ETRP频率除以8。 位11:8 位7 ETF[3:0]:外部触发滤波 (External trigger filter) 这些位定义了对ETRP信号采样的频率和对ETRP数字滤波的带宽。实际上,数字滤波器是一个 事件计数器,它记录到N个事件后会产生一个输出的跳变。 0000:无滤波器,以fDTS采样 1000:采样频率fSAMPLING=fDTS/8,N=6 0001:采样频率fSAMPLING=fCK_INT,N=2 1001:采样频率fSAMPLING=fDTS/8,N=8 0010:采样频率fSAMPLING=fCK_INT,N=4 1010:采样频率fSAMPLING=fDTS/16,N=5 0011:采样频率fSAMPLING=fCK_INT,N=8 1011:采样频率fSAMPLING=fDTS/16,N=6 0100:采样频率fSAMPLING=fDTS/2,N=6 1100:采样频率fSAMPLING=fDTS/16,N=8 0101:采样频率fSAMPLING=fDTS/2,N=8 1101:采样频率fSAMPLING=fDTS/32,N=5 0110:采样频率fSAMPLING=fDTS/4,N=6 1110:采样频率fSAMPLING=fDTS/32,N=6 0111:采样频率fSAMPLING=fDTS/4,N=8 1111:采样频率fSAMPLING=fDTS/32,N=8 MSM:主/从模式 (Master/slave mode) 0:无作用; 1:触发输入(TRGI)上的事件被延迟了,以允许在当前定时器(通过TRGO)与它的从定时器间的 完美同步。这对要求把几个定时器同步到一个单一的外部事件时是非常有用的。 284/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 位6:4 位3 位2:0 TS[2:0]:触发选择 (Trigger selection) 这3位选择用于同步计数器的触发输入。 000:内部触发0(ITR0),TIM1 100:TI1的边沿检测器(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)时被改变,以避免在改变时产生错误的边沿检测。 保留,始终读为0。 SMS[2:0]:从模式选择 (Slave mode selection) 当选择了外部信号,触发信号(TRGI)的有效边沿与选中的外部输入极性相关(见输入控制寄存器 和控制寄存器的说明) 000:关闭从模式 – 如果CEN=1,则预分频器直接由内部时钟驱动。 001:编码器模式1 – 根据TI1FP1的电平,计数器在TI2FP2的边沿向上/下计数。 010:编码器模式2 – 根据TI2FP2的电平,计数器在TI1FP1的边沿向上/下计数。 011:编码器模式3 – 根据另一个信号的输入电平,计数器在TI1FP1和TI2FP2的边沿向上/下计 数。 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) TIM2 TIM1 TIM8 TIM3 TIM3 TIM1 TIM2 TIM5 TIM4 TIM1 TIM2 TIM3 TIM5 TIM2 TIM3 TIM4 1. 如果某个产品中没有相应的定时器,则对应的触发信号ITRx也不存在。 ITR3 (TS = 011) TIM4 TIM4 TIM8 TIM8 14.4.4 DMA/中断使能寄存器(TIMx_DIER) 偏移地址:0x0C 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 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。 位14 TDE:允许触发DMA请求 (Trigger DMA request enable) 0:禁止触发DMA请求; 1:允许触发DMA请求。 位13 保留,始终读为0。 位12 CC4DE:允许捕获/比较4的DMA请求 (Capture/Compare 4 DMA request enable) 0:禁止捕获/比较4的DMA请求; 1:允许捕获/比较4的DMA请求。 285/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 位11 位10 位9 位8 位7 位6 位5 位4 位3 位2 位1 位0 CC3DE:允许捕获/比较3的DMA请求 (Capture/Compare 3 DMA request enable) 0:禁止捕获/比较3的DMA请求; 1:允许捕获/比较3的DMA请求。 CC2DE:允许捕获/比较2的DMA请求 (Capture/Compare 2 DMA request enable) 0:禁止捕获/比较2的DMA请求; 1:允许捕获/比较2的DMA请求。 CC1DE:允许捕获/比较1的DMA请求 (Capture/Compare 1 DMA request enable) 0:禁止捕获/比较1的DMA请求; 1:允许捕获/比较1的DMA请求。 UDE:允许更新的DMA请求 (Update DMA request enable) 0:禁止更新的DMA请求; 1:允许更新的DMA请求。 保留,始终读为0。 TIE:触发中断使能 (Trigger interrupt enable) 0:禁止触发中断; 1:使能触发中断。 保留,始终读为0。 CC4IE:允许捕获/比较4中断 (Capture/Compare 4 interrupt enable) 0:禁止捕获/比较4中断; 1:允许捕获/比较4中断。 CC3IE:允许捕获/比较3中断 (Capture/Compare 3 interrupt enable) 0:禁止捕获/比较3中断; 1:允许捕获/比较3中断。 CC2IE:允许捕获/比较2中断 (Capture/Compare 2 interrupt enable) 0:禁止捕获/比较2中断; 1:允许捕获/比较2中断。 CC1IE:允许捕获/比较1中断 (Capture/Compare 1 interrupt enable) 0:禁止捕获/比较1中断; 1:允许捕获/比较1中断。 UIE:允许更新中断 (Update interrupt enable) 0:禁止更新中断; 1:允许更新中断。 14.4.5 状态寄存器(TIMx_SR) 偏移地址:0x10 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 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。 位12 CC4OF:捕获/比较4重复捕获标记 (Capture/Compare 4 overcapture flag) 参见CC1OF描述。 位11 CC3OF:捕获/比较3重复捕获标记 (Capture/Compare 3 overcapture flag) 参见CC1OF描述。 位10 CC2OF:捕获/比较2重复捕获标记 (Capture/Compare 2 overcapture flag) 参见CC1OF描述。 286/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 位9 位8:7 位6 位5 位4 位3 位2 位1 位0 CC1OF:捕获/比较1重复捕获标记 (Capture/Compare 1 overcapture flag) 仅当相应的通道被配置为输入捕获时,该标记可由硬件置’1’。写’0’可清除该位。 0:无重复捕获产生; 1:当计数器的值被捕获到TIMx_CCR1寄存器时,CC1IF的状态已经为’1’。 保留,始终读为0。 TIF:触发器中断标记 (Trigger interrupt flag) 当发生触发事件(当从模式控制器处于除门控模式外的其它模式时,在TRGI输入端检测到有效 边沿,或门控模式下的任一边沿)时由硬件对该位置’1’。它由软件清’0’。 0:无触发器事件产生; 1:触发器中断等待响应。 保留,始终读为0。 CC4IF:捕获/比较4 中断标记 (Capture/Compare 4 interrupt flag) 参考CC1IF描述。 CC3IF:捕获/比较3 中断标记 (Capture/Compare 3 interrupt flag) 参考CC1IF描述。 CC2IF:捕获/比较2 中断标记 (Capture/Compare 2 interrupt flag) 参考CC1IF描述。 CC1IF:捕获/比较1 中断标记 (Capture/Compare 1 interrupt flag) 如果通道CC1配置为输出模式: 当计数器值与比较值匹配时该位由硬件置’1’,但在中心对称模式下除外(参考TIMx_CR1寄存器 的CMS位)。它由软件清’0’。 0:无匹配发生; 1:TIMx_CNT的值与TIMx_CCR1的值匹配。 如果通道CC1配置为输入模式: 当捕获事件发生时该位由硬件置’1’,它由软件清’0’或通过读TIMx_CCR1清’0’。 0:无输入捕获产生; 1:计数器值已被捕获(拷贝)至TIMx_CCR1(在IC1上检测到与所选极性相同的边沿)。 UIF:更新中断标记 (Update interrupt flag) 当产生更新事件时该位由硬件置’1’。它由软件清’0’。 0:无更新事件产生; 1:更新中断等待响应。当寄存器被更新时该位由硬件置’1’: − 若TIMx_CR1寄存器的UDIS=0、URS=0,当TIMx_EGR寄存器的UG=1时产生更新事件 (软件对计数器CNT重新初始化); − 若TIMx_CR1寄存器的UDIS=0、URS=0,当计数器CNT被触发事件重初始化时产生更新 事件。(参考同步控制寄存器的说明) 14.4.6 事件产生寄存器(TIMx_EGR) 偏移地址:0x14 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 TG 保留 CC4G CC3G CC2G CC1G UG w w w w w w 位15:7 位6 位5 保留,始终读为0。 TG:产生触发事件 (Trigger generation) 该位由软件置’1’,用于产生一个触发事件,由硬件自动清’0’。 0:无动作; 1:TIMx_SR寄存器的TIF=1,若开启对应的中断和DMA,则产生相应的中断和DMA。 保留,始终读为0。 287/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 位4 CC4G:产生捕获/比较4事件 (Capture/compare 4 generation) 参考CC1G描述。 位3 CC3G:产生捕获/比较3事件 (Capture/compare 3 generation) 参考CC1G描述。 位2 CC2G:产生捕获/比较2事件 (Capture/compare 2 generation) 参考CC1G描述。 位1 CC1G:产生捕获/比较1事件 (Capture/compare 1 generation) 该位由软件置’1’,用于产生一个捕获/比较事件,由硬件自动清’0’。 0:无动作; 1:在通道CC1上产生一个捕获/比较事件: 若通道CC1配置为输出: 设置CC1IF=1,若开启对应的中断和DMA,则产生相应的中断和DMA。 若通道CC1配置为输入: 当前的计数器值捕获至TIMx_CCR1寄存器;设置CC1IF=1,若开启对应的中断和DMA,则产 生相应的中断和DMA。若CC1IF已经为1,则设置CC1OF=1。 位0 UG:产生更新事件 (Update generation) 该位由软件置’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 OC2M[2:0] IC2F[3:0] rw rw rw rw OC2PE OC2FE IC2PSC[1:0] rw rw CC2S[1:0] rw rw OC1CE OC1M[2:0] IC1F[3:0] rw rw rw rw OC1PE OC1FE IC1PSC[1:0] rw rw CC1S[1:0] rw rw 输出比较模式: 位15 位14:12 位11 位10 位9:8 OC2CE:输出比较2清0使能 (Output compare 2 clear enable) OC2M[2:0]:输出比较2模式 (Output compare 2 mode) OC2PE:输出比较2预装载使能 (Output compare 2 preload enable) OC2FE:输出比较2快速使能 (Output compare 2 fast enable) CC2S[1:0]:捕获/比较2选择 (Capture/Compare 2 selection) 该位定义通道的方向(输入/输出),及输入脚的选择: 00:CC2通道被配置为输出; 01:CC2通道被配置为输入,IC2映射在TI2上; 10:CC2通道被配置为输入,IC2映射在TI1上; 11:CC2通道被配置为输入,IC2映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC2S仅在通道关闭时(TIMx_CCER寄存器的CC2E=’0’)才是可写的。 288/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 位7 位6:4 位3 位2 位1:0 STM32F10xxx参考手册 OC1CE:输出比较1清0使能 (Output compare 1 clear enable) 0:OC1REF 不受ETRF输入的影响; 1:一旦检测到ETRF输入高电平,清除OC1REF=0。 OC1M[2:0]:输出比较1模式 (Output compare 1 enable) 该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为高。 110:PWM模式1- 在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为无效电平(OC1REF=0),否 则为有效电平(OC1REF=1)。 111:PWM模式2- 在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电 平。 注1:一旦LOCK级别设为3(TIMx_BDTR寄存器中的LOCK位)并且CC1S=’00’(该通道配置成输 出)则该位不能被修改。 注2:在PWM模式1或PWM模式2中,只有当比较结果改变了或在输出比较模式中从冻结模式 切换到PWM模式时,OC1REF电平才改变。 OC1PE:输出比较1预装载使能 (Output compare 1 preload enable) 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) 该位用于加快CC输出对触发器输入事件的响应。 0:根据计数器与CCR1的值,CC1正常操作,即使触发器是打开的。当触发器的输入出现一个 有效沿时,激活CC1输出的最小延时为5个时钟周期。 1:输入到触发器的有效沿的作用就象发生了一次比较匹配。因此,OC被设置为比较电平而与 比较结果无关。采样触发器的有效沿和CC1输出间的延时被缩短为3个时钟周期。 该位只在通道被配置成PWM1或PWM2模式时起作用。 CC1S[1:0]:捕获/比较1 选择 (Capture/Compare 1 selection) 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC1通道被配置为输出; 01:CC1通道被配置为输入,IC1映射在TI1上; 10:CC1通道被配置为输入,IC1映射在TI2上; 11:CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=’0’)才是可写的。 输入捕获模式: 位15:12 位11:10 IC2F[3:0]:输入捕获2滤波器 (Input capture 2 filter) IC2PSC[1:0]:输入/捕获2预分频器 (input capture 2 prescaler) 289/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 位9:8 位7:4 位3:2 位1:0 CC2S[1:0]:捕获/比较2选择 (Capture/compare 2 selection) 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC2通道被配置为输出; 01:CC2通道被配置为输入,IC2映射在TI2上; 10:CC2通道被配置为输入,IC2映射在TI1上; 11:CC2通道被配置为输入,IC2映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC2S仅在通道关闭时(TIMx_CCER寄存器的CC2E=’0’)才是可写的。 IC1F[3:0]:输入捕获1滤波器 (Input capture 1 filter) 这几位定义了TI1输入的采样频率及数字滤波器长度。数字滤波器由一个事件计数器组成,它记 录到N个事件后会产生一个输出的跳变: 0000:无滤波器,以fDTS采样 1000:采样频率fSAMPLING=fDTS/8,N=6 0001:采样频率fSAMPLING=fCK_INT,N=2 1001:采样频率fSAMPLING=fDTS/8,N=8 0010:采样频率fSAMPLING=fCK_INT,N=4 1010:采样频率fSAMPLING=fDTS/16,N=5 0011:采样频率fSAMPLING=fCK_INT,N=8 1011:采样频率fSAMPLING=fDTS/16,N=6 0100:采样频率fSAMPLING=fDTS/2,N=6 1100:采样频率fSAMPLING=fDTS/16,N=8 0101:采样频率fSAMPLING=fDTS/2,N=8 1101:采样频率fSAMPLING=fDTS/32,N=5 0110:采样频率fSAMPLING=fDTS/4,N=6 1110:采样频率fSAMPLING=fDTS/32,N=6 0111:采样频率fSAMPLING=fDTS/4,N=8 1111:采样频率fSAMPLING=fDTS/32,N=8 注:在现在的芯片版本中,当ICxF[3:0]=1、2或3时,公式中的fDTS由CK_INT替代。 IC1PSC[1:0]:输入/捕获1预分频器 (Input capture 1 prescaler) 这2位定义了CC1输入(IC1)的预分频系数。 一旦CC1E=’0’(TIMx_CCER寄存器中),则预分频器复位。 00:无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获; 01:每2个事件触发一次捕获; 10:每4个事件触发一次捕获; 11:每8个事件触发一次捕获。 CC1S[1:0]:捕获/比较1选择 (Capture/Compare 1 selection) 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC1通道被配置为输出; 01:CC1通道被配置为输入,IC1映射在TI1上; 10:CC1通道被配置为输入,IC1映射在TI2上; 11:CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=’0’)才是可写的。 14.4.8 捕获/比较模式寄存器 2(TIMx_CCMR2) 15 OC4CE rw 偏移地址:0x1C 复位值:0x0000 参看以上CCMR1寄存器的描述 14 13 12 11 10 9 8 OC4M[2:0] IC4F[3:0] rw rw rw OC4PE OC4FE IC4PSC[1:0] rw rw CC4S[1:0] rw rw 7 OC3CE rw 6 5 4 OC3M[2:0] IC3F[3:0] rw rw rw 3 2 OC3PE OC3FE IC3PSC[1:0] rw rw 1 0 CC3S[1:0] rw rw 输出比较模式: 位15 位14:12 OC4CE:输出比较4清0使能 (Output compare 4 clear enable) OC4M[2:0]:输出比较4模式 (Output compare 4 mode) 290/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) 位11 位10 位9:8 位7 位6:4 位3 位2 位1:0 STM32F10xxx参考手册 OC4PE:输出比较4预装载使能 (Output compare 4 preload enable) OC4FE:输出比较4快速使能 (Output compare 4 fast enable) CC4S[1:0]:捕获/比较4选择 (Capture/Compare 4 selection) 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC4通道被配置为输出; 01:CC4通道被配置为输入,IC4映射在TI4上; 10:CC4通道被配置为输入,IC4映射在TI3上; 11:CC4通道被配置为输入,IC4映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC4S仅在通道关闭时(TIMx_CCER寄存器的CC4E=’0’)才是可写的。 OC3CE:输出比较3清0使能 (Output compare 3 clear enable) OC3M[2:0]:输出比较3模式 (Output compare 3 mode) OC3PE:输出比较3预装载使能 (Output compare 3 preload enable) OC3FE:输出比较3快速使能 (Output compare 3 fast enable) CC3S[1:0]:捕获/比较3选择 (Capture/Compare 3 selection) 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC3通道被配置为输出; 01:CC3通道被配置为输入,IC3映射在TI3上; 10:CC3通道被配置为输入,IC3映射在TI4上; 11:CC3通道被配置为输入,IC3映射在TRGI上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC3S仅在通道关闭时(TIMx_CCER寄存器的CC3E=’0’)才是可写的。 输入捕获模式: 位15:12 位11:10 位9:8 位7:4 位3:2 位1:0 IC4F[3:0]:输入捕获4滤波器 (Input capture 4 filter) IC4PSC[1:0]:输入/捕获4预分频器 (input capture 4 prescaler) CC4S[1:0]:捕获/比较4选择 (Capture/compare 4 selection) 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC4通道被配置为输出; 01:CC4通道被配置为输入,IC4映射在TI4上; 10:CC4通道被配置为输入,IC4映射在TI3上; 11:CC4通道被配置为输入,IC4映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC4S仅在通道关闭时(TIMx_CCER寄存器的CC4E=’0’)才是可写的。 IC3F[3:0]:输入捕获3滤波器 (Input capture 3 filter) IC3PSC[1:0]:输入/捕获3预分频器 (Input capture 3 prescaler) CC3S[1:0]:捕获/比较3选择 (Capture/Compare 3 selection) 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC3通道被配置为输出; 01:CC3通道被配置为输入,IC3映射在TI3上; 10:CC3通道被配置为输入,IC3映射在TI4上; 11:CC3通道被配置为输入,IC3映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。 注:CC3S仅在通道关闭时(TIMx_CCER寄存器的CC3E=’0’)才是可写的。 291/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 14.4.9 捕获/比较使能寄存器(TIMx_CCER) 偏移地址:0x20 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CC4P rw 位15:14 位13 位12 位11:10 位9 位8 位7:6 位5 位4 位3:2 位1 位0 CC4E 保留 CC3P CC3E 保留 CC2P CC2E 保留 rw rw rw rw rw 保留,始终读为0。 CC4P:输入/捕获4输出极性 (Capture/Compare 4 output polarity) 参考CC1P的描述。 CC4E:输入/捕获4输出使能 (Capture/Compare 4 output enable) 参考CC1E 的描述。 保留,始终读为0。 CC3P:输入/捕获3输出极性 (Capture/Compare 3 output polarity) 参考CC1P的描述。 CC3E:输入/捕获3输出使能 (Capture/Compare 3 output enable) 参考CC1E 的描述。 保留,始终读为0。 CC2P:输入/捕获2输出极性 (Capture/Compare 2 output polarity) 参考CC1P的描述。 CC2E:输入/捕获2输出使能 (Capture/Compare 2 output enable) 参考CC1E的描述。 保留,始终读为0。 CC1P:输入/捕获1输出极性 (Capture/Compare 1 output polarity) CC1通道配置为输出: 0:OC1高电平有效 1:OC1低电平有效 CC1通道配置为输入: 该位选择是IC1还是IC1的反相信号作为触发或捕获信号。 0:不反相:捕获发生在IC1的上升沿;当用作外部触发器时,IC1不反相。 1:反相:捕获发生在IC1的下降沿;当用作外部触发器时,IC1反相。 CC1E:输入/捕获1输出使能 (Capture/Compare 1 output enable) CC1通道配置为输出: 0: 关闭- OC1禁止输出。 1: 开启- OC1信号输出到对应的输出引脚。 CC1通道配置为输入: 该位决定了计数器的值是否能捕获入TIMx_CCR1寄存器。 0:捕获禁止; 0:捕获使能。 CC1P CC1E rw rw 注: 表79 标准OCx通道的输出控制位 CCxE位 OCx输出状态 0 禁止输出(OCx=0,OCx_EN=0) 1 OCx = OCxREF + 极性,OCx_EN=1 连接到标准OCx通道的外部I/O引脚状态,取决于OCx通道状态和GPIO以及AFIO寄存器。 292/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 14.4.10 计数器(TIMx_CNT) 偏移地址:0x24 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CNT[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 CNT[15:0]:计数器的值 (Counter value) 14.4.11 预分频器(TIMx_PSC) 偏移地址:0x28 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PSC[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 PSC[15:0]:预分频器的值 (Prescaler value) 计数器的时钟频率CK_CNT等于fCK_PSC/(PSC[15:0]+1)。 PSC包含了当更新事件产生时装入当前预分频器寄存器的值。 14.4.12 自动重装载寄存器(TIMx_ARR) 偏移地址:0x2C 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ARR[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 ARR[15:0]: 自动重装载的值 (Auto reload value) ARR包含了将要传送至实际的自动重装载寄存器的数值。 详细参考14.3.1节:有关ARR的更新和动作。 当自动重装载的值为空时,计数器不工作。 14.4.13 捕获/比较寄存器 1(TIMx_CCR1) 偏移地址:0x34 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR1[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 CCR1[15:0]: 捕获/比较1的值 (Capture/Compare 1 value) 若CC1通道配置为输出: CCR1包含了装入当前捕获/比较1寄存器的值(预装载值)。 如果在TIMx_CCMR1寄存器(OC1PE位)中未选择预装载特性,写入的数值会被立即传输至当前 寄存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较1寄存器中。 当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC1端口上产生输出信号。 若CC1通道配置为输入: CCR1包含了由上一次输入捕获1事件(IC1)传输的计数器值。 293/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 14.4.14 捕获/比较寄存器 2(TIMx_CCR2) 偏移地址:0x38 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR2[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 CCR2[15:0]: 捕获/比较2的值 (Capture/Compare 2 value) 若CC2通道配置为输出: CCR2包含了装入当前捕获/比较2寄存器的值(预装载值)。 如果在TIMx_CCMR2寄存器(OC2PE位)中未选择预装载特性,写入的数值会被立即传输至当前 寄存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较2寄存器中。 当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC2端口上产生输出信号。 若CC2通道配置为输入: CCR2包含了由上一次输入捕获2事件(IC2)传输的计数器值。 14.4.15 捕获/比较寄存器 3(TIMx_CCR3) 偏移地址:0x3C 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR3[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 CCR3[15:0]: 捕获/比较3的值 (Capture/Compare 3 value) 若CC3通道配置为输出: CCR3包含了装入当前捕获/比较3寄存器的值(预装载值)。 如果在TIMx_CCMR3寄存器(OC3PE位)中未选择预装载特性,写入的数值会被立即传输至当前 寄存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较3寄存器中。 当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC3端口上产生输出信号。 若CC3通道配置为输入: CCR3包含了由上一次输入捕获3事件(IC3)传输的计数器值。 14.4.16 捕获/比较寄存器 4(TIMx_CCR4) 偏移地址:0x40 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR4[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 CCR4[15:0]: 捕获/比较4的值 (Capture/Compare 4 value) 若CC4通道配置为输出: CCR4包含了装入当前捕获/比较4寄存器的值(预装载值)。 如果在TIMx_CCMR4寄存器(OC4PE位)中未选择预装载特性,写入的数值会被立即传输至当前 寄存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较4寄存器中。 当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC4端口上产生输出信号。 若CC4通道配置为输入: CCR4包含了由上一次输入捕获4事件(IC4)传输的计数器值。 294/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 通用定时器(TIMx) STM32F10xxx参考手册 14.4.17 DMA控制寄存器(TIMx_DCR) 偏移地址:0x48 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 位15:13 位12:8 位7:5 位4:0 DBL[4:0] 保留 DBA[4:0] rw rw rw rw rw rw rw rw rw rw 保留,始终读为0。 DBL[4:0]: DMA连续传送长度 (DMA burst length) 这些位定义了DMA在连续模式下的传送长度(当对TIMx_DMAR寄存器进行读或写时,定时器则 进行一次连续传送),即:定义传输的字节数目: 00000:1个字节 00001:2个字节 00010:3个字节 ...... ...... 10001:18个字节 保留,始终读为0。 DBA[4:0]: DMA基地址 (DMA base address) 这些位定义了DMA在连续模式下的基地址(当对TIMx_DMAR寄存器进行读或写时),DBA定义 为从TIMx_CR1寄存器所在地址开始的偏移量: 00000:TIMx_CR1, 00001:TIMx_CR2, 00010:TIMx_SMCR, ...... 14.4.18 连续模式的DMA地址(TIMx_DMAR) 偏移地址:0x4C 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DMAB[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 DMAB[15:0]: DMA连续传送寄存器 (DMA register for burst accesses) 对TIMx_DMAR寄存器的读或写会导致对以下地址所在寄存器的存取操作: TIMx_CR1地址 + DBA + DMA索引,其中: “TIMx_CR1地址”是控制寄存器1(TIMx_CR1)所在的地址; “DBA”是TIMx_DCR寄存器中定义的基地址; “DMA索引”是由DMA自动控制的偏移量,它取决于TIMx_DCR寄存器中定义的DBL。 295/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 CEN 0 UIE UIF 通用定时器(TIMx) STM32F10xxx参考手册 14.4.19 TIMx寄存器图 下表中将TIMx的所有寄存器映射到一个16位可寻址(编址)空间。 表80 TIMx – 寄存器图和复位值 UDIS 1 URS 2 OPM 3 DIR 4 5 6 MSM TI1S ARPE 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 偏移 寄存器 000h 004h 008h TIMx_CR1 复位值 TIMx_CR2 复位值 TIMx_SMCR 复位值 保留 保留 保留 ETP CKD [1:0] CMS [1:0] 0000000000 CCDS MMS [2:0] 保留 00000 ECE ETPS [1:0] EFT[3:0] TS [2:0] SMS [2:0] 000000000000 000 CC1G CC1IF CC1IE OC1FE CC2G CC2IF CC2IE OC1PE CC3G CC3IF CC3IE 保留 CC4G CC4IF CC4IE 保留 保留 保留 TIE UDE CC1OF CC1DE CC2OF CC2DE CC3OF CC3DE CC4OF CC4DE TDE 00Ch TIMx_DIER 复位值 保留 保留 0 00000 0 00000 保留 TIF 010h 014h 018h 01Ch 020h 024h 028h TIMx_SR 复位值 TIMx_EGR 复位值 TIMx_CCMR1 输出比较模式 复位值 TIMx_CCMR1 输入捕获模式 复位值 TIMx_CCMR2 输出比较模式 复位值 TIMx_CCMR2 输入捕获模式 复位值 TIMx_CCER 复位值 TIMx_CNT 复位值 TIMx_PSC 复位值 保留 保留 保留 保留 保留 保留 保留 保留 保留 OC4CE OC2CE 保留 0000 0 00000 UG TG OC1CE 保留 0 00000 OC2FE OC2PE OC2M [2:0] CC2S [1:0] OC1M [2:0] CC1S [1:0] 0000000000000000 IC2F [3:0] IC2 PSC [1:0] CC2S [1:0] IC1F [3:0] IC1 PSC [1:0] CC1S [1:0] 0000000000000000 OC4M [2:0] CC4S [1:0] OC3M [2:0] CC3S [1:0] OC3FE OC3PE OC3CE OC4FE OC4PE 0000000000000000 IC4F [3:0] IC4 PSC [1:0] CC4S [1:0] IC3F [3:0] IC3 PSC [1:0] CC3S [1:0] 0000000000000000 CC1P CC2E CC2P CC3E CC3P CC4E CC4P 保留 保留 保留 00 00 00 00 CNT[15:0] 0000000000000000 PSC[15:0] 0000000000000000 CC1E 296/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 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) 偏移 寄存器 02Ch 030h TIMx_ARR 复位值 保留 保留 034h 038h 03Ch 040h 044h TIMx_CCR1 复位值 TIMx_CCR2 复位值 TIMx_CCR3 复位值 TIMx_CCR4 复位值 保留 保留 保留 保留 保留 048h TIMx_DCR 复位值 保留 04Ch TIMx_DMAR 复位值 保留 有关寄存器的起始地址,参见表1。 STM32F10xxx参考手册 ARR[15:0] 0000000000000000 CCR1[15:0] 0000000000000000 CCR2[15:0] 0000000000000000 CCR3[15:0] 0000000000000000 CCR4[15:0] 0000000000000000 DBL[4:0] 保留 DBA[4:0] 00000 00000 DMAB[15:0] 0000000000000000 297/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 基本定时器(TIM6和TIM7) STM32F10xxx参考手册 15 基本定时器(TIM6和TIM7) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 本章描述的模块仅适用于大容量的STM32F101xx和STM32F103xx系列,和互联型产品。 15.1 TIM6和TIM7简介 基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。 它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它 们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。 这2个定时器是互相独立的,不共享任何资源。 15.2 TIM6和TIM7的主要特性 TIM6和TIM7定时器的主要功能包括: ● 16位自动重装载累加计数器 ● 16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1~65536之间的任意数值 分频 ● 触发DAC的同步电路 ● 在更新事件(计数器溢出)时产生中断/DMA请求 图144 基本定时器框图 298/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 基本定时器(TIM6和TIM7) STM32F10xxx参考手册 15.3 TIM6和TIM7的功能 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滞后一个时钟周期。 预分频器 预分频可以以系数介于1至65536之间的任意数值对计数器时钟分频。它是通过一个16位寄存器 (TIMx_PSC)的计数实现分频。因为TIMx_PSC控制寄存器具有缓冲,可以在运行过程中改变它 的数值,新的预分频数值将在下一个更新事件时起作用。 以下两图是在运行过程中改变预分频系数的例子。 图145 预分频系数从1变到2的计数器时序图 299/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 基本定时器(TIM6和TIM7) 图146 预分频系数从1变到4的计数器时序图 STM32F10xxx参考手册 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 基本定时器(TIM6和TIM7) 图148 计数器时序图,内部时钟分频系数为2 STM32F10xxx参考手册 图149 计数器时序图,内部时钟分频系数为4 图150 计数器时序图,内部时钟分频系数为N 301/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 基本定时器(TIM6和TIM7) 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 基本定时器(TIM6和TIM7) 图153 普通模式时序图,内部时钟分频系数为1 STM32F10xxx参考手册 15.3.4 调试模式 当微控制器进入调试模式(Cortex-M3核心停止)时,根据DBG模块中的配置位DBG_TIMx_STOP 的设置,TIMx计数器或者继续计数或者停止工作。详见第29.16.2节。 15.4 TIM6和TIM7寄存器 有关寄存器描述中用到的缩写,请参考第1.1节。 可以用半字(16位)或字(32位)的方式操作这些外设寄存器。 15.4.1 TIM6 和TIM7 控制寄存器 1(TIMx_CR1) 偏移地址:0x00 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 位15:8 位7 位6:4 位3 位2 保留 res ARPE rw 保留 res OPM URS UDIS CEN rw rw rw rw 保留,始终读为0。 ARPE:自动重装载预装载使能 (Auto-reload preload enable) 0:TIMx_ARR寄存器没有缓冲 1:TIMx_ARR寄存器具有缓冲 保留,始终读为0。 OPM:单脉冲模式 (One-pulse mode) 0:在发生更新事件时,计数器不停止 1:在发生下次更新事件时,计数器停止计数(清除CEN位)。 URS:更新请求源 (Update request source) 该位由软件设置和清除,以选择UEV事件的请求源。 0:如果使能了中断或DMA,以下任一事件可以产生一个更新中断或DMA请求: - 计数器上溢或下溢 - 设置UG位 - 通过从模式控制器产生的更新 1:如果使能了中断或DMA,只有计数器上溢或下溢可以产生更新中断或DMA请求。 303/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 基本定时器(TIM6和TIM7) STM32F10xxx参考手册 位1 UDIS:禁止更新 (Update disable) 该位由软件设置和清除,以使能或禁止UEV事件的产生。 0:UEV使能。更新事件(UEV)可以由下列事件产生: - 计数器上溢或下溢 - 设置UG位 - 通过从模式控制器产生的更新 产生更新事件后,带缓冲的寄存器被加载为预加载数值。 1:禁止UEV。不产生更新事件(UEV),影子寄存器保持它的内容(ARR、PSC)。但是如果设置 了UG位或从模式控制器产生了一个硬件复位,则计数器和预分频器将被重新初始化。 位0 CEN:计数器使能 (Counter enable) 0:关闭计数器 1:使能计数器 注:门控模式只能在软件已经设置了CEN位时有效,而触发模式可以自动地由硬件设置CEN 位。 在单脉冲模式下,当产生更新事件时CEN被自动清除。 15.4.2 TIM6 和TIM7 控制寄存器 2(TIMx_CR2) 偏移地址:0x04 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 res MMS[2:0] rw 保留 res 位15:7 位6:4 位3:0 保留,始终读为0。 MMS:主模式选择 (Master mode selection) 这些位用于选择在主模式下向从定时器发送的同步信息(TRGO),有以下几种组合: 000:复位 – 使用TIMx_EGR寄存器的UG位作为触发输出(TRGO)。如果触发输入产生了复位 (从模式控制器配置为复位模式),则相对于实际的复位信号,TRGO上的信号有一定的延迟。 001:使能 – 计数器使能信号CNT_EN被用作为触发输出(TRGO)。它可用于在同一时刻启动多 个定时器,或控制使能从定时器的时机。计数器使能信号是通过CEN控制位和配置为门控模式 时的触发输入的’逻辑或’产生。 当计数器使能信号是通过触发输入控制时,在TRGO输出上会有一些延迟,除非选择了主/从模 式(见TIMx_SMCR寄存器的MSM位)。 010:更新 – 更新事件被用作为触发输出(TRGO)。例如一个主定时器可以作为从定时器的预分 频器使用。 保留,始终读为0。 15.4.3 TIM6 和TIM7 DMA/中断使能寄存器(TIMx_DIER) 偏移地址:0x0C 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 UDE 保留 UIE res rw res rw 位15:9 保留,始终读为0。 位8 UDE:更新DMA请求使能 (Update DMA request enable) 0:禁止更新DMA请求 1:使能更新DMA请求 位7:1 保留,始终读为0。 304/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 基本定时器(TIM6和TIM7) STM32F10xxx参考手册 位0 UIE:更新中断使能 (Update interrupt enable) 0:禁止更新中断 1:使能更新中断 15.4.4 TIM6 和TIM7 状态寄存器(TIMx_SR) 偏移地址:0x10 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 位15:1 位0 保留 res UIF rc w0 保留,始终读为0。 UIF:更新中断标志 (Update interrupt flag) 硬件在更新中断时设置该位,它由软件清除。 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 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 位15:1 位0 保留 UG res w 保留,始终读为0。 UG:产生更新事件 (Update generation) 该位由软件设置,由硬件自动清除。 0:无作用 1:重新初始化定时器的计数器并产生对寄存器的更新。注意:预分频器也被清除(但预分频系 数不变)。 15.4.6 TIM6 和TIM7 计数器(TIMx_CNT) 偏移地址:0x24 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CNT[15:0] rw 位15:0 CNT[15:0]:计数器数值 (Counter value) 305/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 基本定时器(TIM6和TIM7) STM32F10xxx参考手册 15.4.7 TIM6 和TIM7 预分频器(TIMx_PSC) 偏移地址:0x28 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PSC[15:0] rw 位15:0 PSC[15:0]:预分频器数值 (Prescaler value) 计数器的时钟频率CK_CNT等于fCK_PSC/(PSC[15:0]+1)。 在每一次更新事件时,PSC的数值被传送到实际的预分频寄存器中。 15.4.8 TIM6 和TIM7 自动重装载寄存器(TIMx_ARR) 偏移地址:0x2C 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ARR[15:0] rw 位15:0 ARR[15:0]:自动重装载数值 (Prescaler value) ARR的数值将传送到实际的自动重装载寄存器中。 关于ARR的更新和作用,详见15.3.1。 如果自动重装载数值为0,则计数器停止。 306/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 ARPE 7 6 5 4 OPM 3 URS 2 UDIS 1 CEN 0 UDE UG UIF UIE 基本定时器(TIM6和TIM7) STM32F10xxx参考手册 15.4.9 TIM6 和TIM7 寄存器图 下表中将TIMx的所有寄存器映射到一个16位可寻址(编址)空间。 表81 TIM6和TIM7– 寄存器图和复位值 偏移 寄存器 000h TIMx_CR1 复位值 004h 008h TIMx_CR2 复位值 00Ch 010h 014h 018h TIMx_DIER 复位值 TIMx_SR 复位值 TIMx_EGR 复位值 01Ch 020h 024h TIMx_CNT 复位值 保留 028h TIMx_PSC 复位值 保留 02Ch TIMx_ARR 复位值 保留 有关寄存器的起始地址,参见表1。 保留 保留 保留 保留 0 0000 MMS [2:0] 保留 000 保留 保留 0 0 保留 0 保留 0 保留 保留 保留 CNT[15:0] 0000000000000000 PSC[15:0] 0000000000000000 ARR[15:0] 0000000000000000 307/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 实时时钟(RTC) STM32F10xxx参考手册 16 实时时钟(RTC) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 除非特别说明,本章描述的模块适用于整个STM32F10xxx微控制器系列。 16.1 RTC简介 实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可 提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒 后,RTC的设置和时间维持不变。 系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操 作。执行以下操作将使能对后备寄存器和RTC的访问: ● 设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟 ● 设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问。 16.2 主要特性 ● 可编程的预分频系数:分频系数最高为220。 ● 32位的可编程计数器,可用于较长时间段的测量。 ● 2个分离的时钟:用于APB1接口的PCLK1和RTC时钟(RTC时钟的频率必须小于PCLK1时钟 频率的四分之一以上)。 ● 可以选择以下三种RTC的时钟源: ─ HSE时钟除以128; ─ LSE振荡器时钟; ─ LSI振荡器时钟(详见6.2.8节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_CLK。RTC的预分频模块包含了一个20位的 可 编 程 分 频 器 (RTC 预 分 频 器 ) 。 如 果 在 RTC_CR 寄 存 器 中 设 置 了 相 应 的 允 许 位 , 则 在 每 个 308/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 实时时钟(RTC) STM32F10xxx参考手册 TR_CLK周期中RTC产生一个中断(秒中断)。第二个模块是一个32位的可编程计数器,可被初始 化为当前的系统时间。系统时间按TR_CLK周期累加并与存储在RTC_ALR寄存器中的可编程时 间相比较,如果RTC_CR控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。 图154 简化的RTC框图 16.3.2 复位过程 除了RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器外,所有的系统寄存器都由系统复 位或电源复位进行异步复位。 RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器仅能通过备份域复位信号复位,详见第 6.1.3节。 16.3.3 读RTC寄存器 注: RTC核完全独立于RTC APB1接口。 软件通过APB1接口访问RTC的预分频值、计数器值和闹钟值。但是,相关的可读寄存器只在与 RTC APB1时钟进行重新同步的RTC时钟的上升沿被更新。RTC标志也是如此的。 这意味着,如果APB1接口曾经被关闭,而读操作又是在刚刚重新开启APB1之后,则在第一次 的内部寄存器更新之前,从APB1上读出的RTC寄存器数值可能被破坏了(通常读到0)。下述几种 情况下能够发生这种情形: ● 发生系统复位或电源复位 ● 系统刚从待机模式唤醒(参见第4.3节:低功耗模式)。 ● 系统刚从停机模式唤醒(参见第4.3节:低功耗模式)。 所有以上情况中,APB1接口被禁止时(复位、无时钟或断电)RTC核仍保持运行状态。 因此,若在读取RTC寄存器时,RTC的APB1接口曾经处于禁止状态,则软件首先必须等待 RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置’1’。 RTC的 APB1接口不受WFI和WFE等低功耗模式的影响。 309/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 实时时钟(RTC) STM32F10xxx参考手册 16.3.4 配置RTC寄存器 必 须 设 置 RTC_CRL 寄 存 器 中 的 CNF 位 , 使 RTC 进 入 配 置 模 式 后 , 才 能 写 入 RTC_PRL 、 RTC_CNT、RTC_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标志位被清除时,写操作才能进行,这个过程至少需要3个RTCCLK周期。 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=0003,ALARM=00004 图156 RTC溢出波形图示例,PR=0003 310/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 实时时钟(RTC) STM32F10xxx参考手册 16.4 RTC寄存器描述 关于寄存器描述中的缩略词,请参考1.1节。 可以用半字(16位)或字(32位)的方式操作这些外设寄存器。 16.4.1 RTC控制寄存器高位(RTC_CRH) 地址偏移量:0x00 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 OWIE ALRIE SECIE rw rw rw 位15:3 保留,被硬件强制为0。 位2 OWIE:允许溢出中断位 (Overflow interrupt enable) 0:屏蔽(不允许)溢出中断 1:允许溢出中断 位1 ALRIE:允许闹钟中断 (Alarm interrupt enable) 0:屏蔽(不允许)闹钟中断 1:允许闹钟中断 位0 SECIE:允许秒中断 (Second interrupt enable) 0:屏蔽(不允许)秒中断 1:允许秒中断 这些位用来屏蔽中断请求。注意:系统复位后所有的中断被屏蔽,因此可通过写RTC寄存器来 确保在初始化后没有挂起的中断请求。当外设正在完成前一次写操作时(标志位RTOFF=0),不 能对RTC_CRH寄存器进行写操作。 RTC功能由这个控制寄存器控制。一些位的写操作必须经过一个特殊的配置过程来完成(见 16.3.4节)。 16.4.2 RTC控制寄存器低位(RTC_CRL) 偏移地址:0x04 复位值:0x0020 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 位15:6 位5 位4 保留 RTOFF CNF RSF OWF ALRF SECF r rw rc w0 rc w0 rc w0 rc w0 保留,被硬件强制为0。 RTOFF:RTC操作关闭 (RTC operation OFF) RTC模块利用这位来指示对其寄存器进行的最后一次操作的状态,指示操作是否完成。若此位 为’0’,则表示无法对任何的RTC寄存器进行写操作。此位为只读位。 0:上一次对RTC寄存器的写操作仍在进行; 1:上一次对RTC寄存器的写操作已经完成。 CNF:配置标志 (Configuration flag) 此位必须由软件置’1’以进入配置模式,从而允许向RTC_CNT、RTC_ALR或RTC_PRL寄存器 写入数据。只有当此位在被置’1’并重新由软件清’0’后,才会执行写操作。 0:退出配置模式(开始更新RTC寄存器); 1:进入配置模式。 311/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 实时时钟(RTC) STM32F10xxx参考手册 注:1 2 3 4 5 6 位3 RSF:寄存器同步标志 (Registers synchronized flag) 每当RTC_CNT寄存器和RTC_DIV寄存器由软件更新或清’0’时,此位由硬件置’1’。在APB1复位 后,或APB1时钟停止后,此位必须由软件清’0’。要进行任何的读操作之前,用户程序必须等待 这位被硬件置’1’,以确保RTC_CNT、RTC_ALR或RTC_PRL已经被同步。 0:寄存器尚未被同步; 1:寄存器已经被同步。 位2 OWF:溢出标志 (Overflow flag) 当32位可编程计数器溢出时,此位由硬件置’1’。如果RTC_CRH寄存器中OWIE=1,则产生中 断。此位只能由软件清’0’。对此位写’1’是无效的。 0:无溢出; 1:32位可编程计数器溢出。 位1 ALRF:闹钟标志 (Alarm flag) 当32位可编程计数器达到RTC_ALR寄存器所设置的预定值,此位由硬件置’1’。如果RTC_CRH 寄存器中ALRIE=1,则产生中断。此位只能由软件清’0’。对此位写’1’是无效的。 0:无闹钟; 1:有闹钟。 位0 SECF:秒标志 (Second flag) 当32位可编程预分频器溢出时,此位由硬件置’1’同时RTC计数器加1。因此,此标志为分辨率可 编程的RTC计数器提供一个周期性的信号(通常为1秒)。如果RTC_CRH寄存器中SECIE=1,则 产生中断。此位只能由软件清除。对此位写’1’是无效的。 0:秒标志条件不成立; 1:秒标志条件成立。 RTC 的 功 能 由 这 个 控 制 寄 存 器 控 制 。 当 前 一 个 写 操 作 还 未 完 成 时 (RTOFF=0 时 , 详 见 16.3.4 节),不能写RTC_CR寄存器。 任何标志位都将保持挂起状态,直到适当的RTC_CR请求位被软件复位,表示所请求的中断已 经被接受。 在复位时禁止所有中断,无挂起的中断请求,可以对RTC寄存器进行写操作。 当APB1时钟不运行时,OWF、ALRF、SECF和RSF位不被更新。 OWF、ALRF、SECF和RSF位只能由硬件置位,由软件来清零。 若ALRF=1且ALRIE=1,则允许产生RTC全局中断。如果在EXTI控制器中允许产生EXTI线 17 中断,则允许产生RTC全局中断和RTC闹钟中断。 若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 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 位15:6 保留,被硬件强制为0。 PRL[19:16] w w w w 312/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 实时时钟(RTC) STM32F10xxx参考手册 位3:0 PRL[19:16]:RTC预分频装载值高位 (RTC prescaler reload value high) 根据以下公式,这些位用来定义计数器的时钟频率: fTR_CLK = fRTCCLK/(PRL[19:0]+1) 注:不推荐使用0值,否则无法正确的产生RTC中断和标志位。 RTC预分频装载寄存器低位(RTC_PRLL) 偏移地址:0x0C 只写(参见16.3.4节) 复位值:0x8000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PRL[15:0] w w w w w w w w w w w w w w w w 注: 位15:0 PRL[15:0]:RTC预分频装载值低位 根据以下公式,这些位用来定义计数器的时钟频率: 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_PRL或RTC_CNT寄存 器中的值发生改变后,由硬件重新装载。 RTC预分频器余数寄存器高位(RTC_DIVH) 偏移地址:0x10 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 RTC_DIV[19:16] r r r r 位15:4 保留 位3:0 RTC_DIV[19:16]:RTC时钟分频器余数高位 (RTC clock divider high) RTC预分频器余数寄存器低位(RTC_DIVL) 偏移地址:0x14 复位值:0x8000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RTC_DIV[15:0] r r r r r r r r r r r r r r r r 位15:0 RTC_DIV[15:0]:RTC时钟器余数低位 (RTC clock divider low) 16.4.5 RTC计数器寄存器 (RTC_CNTH / RTC_CNTL) RTC核有一个32位可编程的计数器,可通过两个16位的寄存器访问。计数器以预分频器产生的 TR_CLK 时 间 基 准 为 参 考 进 行 计 数 。 RTC_CNT 寄 存 器 用 来 存 放 计 数 器 的 计 数 值 。 他 们 受 RTC_CR 的 位 RTOFF 写 保 护 , 仅 当 RTOFF 值 为 ’1’ 时 , 允 许 写 操 作 。 在 高 或 低 寄 存 器 (RTC_CNTH或RTC_CNTL)上的写操作,能够直接装载到相应的可编程计数器,并且重新装载 RTC预分频器。当进行读操作时,直接返回计数器内的计数值(系统时间)。 313/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 实时时钟(RTC) STM32F10xxx参考手册 RTC计数器寄存器高位(RTC_CNTH) 偏移地址:0x18 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RTC_CNT[31:16] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 RTC_CNT[31:16]:RTC计数器高位 (RTC counter high) 可通过读RTC_CNTH寄存器来获得RTC计数器当前值的高位部分。要对此寄存器进行写操作 前,必须先进入配置模式(参见16.3.4节)。 RTC计数器寄存器低位(RTC_CNTL) 偏移地址:0x1C 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RTC_CNT[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位15:0 RTC_CNT[15:0]:RTC计数器低位。 可通过读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 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RTC_ALR[31:16] w w w w w w w w w w w w w w w w 位15:0 RTC_ALR[31:16]:RTC闹钟值高位 (RTC alarm high) 此寄存器用来保存由软件写入的闹钟时间的高位部分。要对此寄存器进行写操作,必须先进入 配置模式(参见16.3.4节)。 RTC闹钟寄存器低位(RTC_ALRL) 偏移地址:0x24 只写(参见16.3.4节) 复位值:0xFFFF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RTC_ALR[15:0] w w w w w w w w w w w w w w w w 位15:0 RTC_ALR[15:0]:RTC闹钟值低位 (RTC alarm low) 此寄存器用来保存由软件写入的闹钟时间的低位部分。要对此寄存器进行写操作,必须先进入 配置模式(参见16.3.4节)。 314/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 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 OWIE 2 ALRIE 1 SECIE 0 RTOFF CNF RSF OWF ALRF SECF 实时时钟(RTC) STM32F10xxx参考手册 16.4.7 RTC寄存器映像 RTC寄存器是16位可寻址寄存器,具体描述如下: 表82 RTC-寄存器映像和复位值 偏移 寄存器 000h RTC_CRH 复位值 004h RTC_CRL 复位值 008h 00Ch 010h 014h 018h RTC_PRLH 复位值 RTC_PRLL 复位值 RTC_DIVH 复位值 RTC_DIVL 复位值 RTC_CNTH 复位值 保留 保留 保留 保留 01Ch RTC_CNTL 复位值 保留 020h RTC_ALRH 复位值 保留 024h RTC_ALRL 复位值 保留 有关寄存器的起始地址,参见表1。 保留 000 保留 保留 000000 PRL[19:16] 0000 PRL[15:0] 1000000000000000 DIV[31:16] 0000000000000000 DIV[15:0] 1000000000000000 CNT[31:16] 0000000000000000 CNT[15:0] 0000000000000000 ALR[31:16] 1111111111111111 ALR[15:0] 1111111111111111 315/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 独立看门狗(IWDG) STM32F10xxx参考手册 17 独立看门狗(IWDG) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 除非特别说明,本章描述的模块适用于整个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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 独立看门狗(IWDG) 图157 独立看门狗框图 STM32F10xxx参考手册 注: 注: 看门狗功能处于VDD供电区,即在停机和待机模式时仍能正常工作。 表83 看门狗超时时间(40kHz的输入时钟(LSI))(1) 预分频系数 PR[2:0]位 最短时间(ms) RL[11:0] = 0x000 最长时间(ms) RL[11:0] = 0xFFF /4 0 0.1 409.6 /8 1 /16 2 0.2 819.2 0.4 1638.4 /32 3 0.8 3276.8 /64 4 1.6 6553.6 /128 5 3.2 13107.2 /256 (6或7) 6.4 26214.4 这些时间是按照40kHz时钟给出。实际上,MCU内部的RC频率会在30kHz到60kHz之间变化。 此外,即使RC振荡器的频率是精确的,确切的时序仍然依赖于APB接口时钟与RC振荡器时钟 之间的相位差,因此总会有一个完整的RC周期是不确定的。 通过对LSI进行校准可获得相对精确的看门狗超时时间。有关LSI校准的问题,详见6.2.5节。 17.4 IWDG寄存器描述 关于在寄存器描述里面所用到的缩写,详见第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 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 KEY[15:0] w w w w w w w w w w w w w w w w 位31:16 保留,始终读为0。 位15:0 KEY[15:0]: 键值(只写寄存器,读出值为0x0000) (Key value) 软件必须以一定的间隔写入0xAAAA,否则,当计数器为0时,看门狗会产生复位。 写入0x5555表示允许访问IWDG_PR和IWDG_RLR寄存器。(见17.3.2节) 写入0xCCCC,启动看门狗工作(若选择了硬件看门狗则不受此命令字限制)。 317/754 参照2009年12月 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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 位31:3 位2:0 保留 PR[2:0] rw rw rw 保留,始终读为0。 PR[2:0]: 预分频因子 (Prescaler divider) 这些位具有写保护设置,参见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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 位31:12 位11:0 RL[11:0] rw rw rw rw rw rw rw rw rw rw rw rw 保留,始终读为0。 RL[11:0]: 看门狗计数器重装载值 (Watchdog counter reload value) 这些位具有写保护功能,参看17.3.2节。用于定义看门狗计数器的重装载值,每当向IWDG_KR 寄存器写入0xAAAA时,重装载值会被传送到计数器中。随后计数器从这个值开始递减计数。 看门狗超时周期可通过此重装载值和时钟预分频值来计算,参照表83。 只有当IWDG_SR寄存器中的RVU位为0时,才能对此寄存器进行修改。 注:对此寄存器进行读操作,将从VDD电压域返回预分频值。如果写操作正在进行,则读回的 值可能是无效的。因此,只有当IWDG_SR寄存器的RVU位为0时,读出的值才有效。 318/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 独立看门狗(IWDG) STM32F10xxx参考手册 17.4.4 状态寄存器(IWDG_SR) 地址偏移:0x0C 复位值: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 注: 保留 RVU PVU 位31:2 保留。 r r 位1 RVU: 看门狗计数器重装载值更新 (Watchdog counter reload value update) 此位由硬件置’1’用来指示重装载值的更新正在进行中。当在VDD域中的重装载更新结束后,此 位由硬件清’0’(最多需5个40kHz的RC周期)。重装载值只有在RVU位被清’0’后才可更新。 位0 PVU: 看门狗预分频值更新 (Watchdog prescaler value update) 此位由硬件置’1’用来指示预分频值的更新正在进行中。当在VDD域中的预分频值更新结束后, 此位由硬件清’0’(最多需5个40kHz的RC周期)。预分频值只有在PVU位被清’0’后才可更新。 如果在应用程序中使用了多个重装载值或预分频值,则必须在RVU位被清除后才能重新改变预 装载值,在PVU位被清除后才能重新改变预分频值。然而,在预分频和/或重装值更新后,不 必等待RVU或PVU复位,可继续执行下面的代码。(即是在低功耗模式下,此写操作仍会被继 续执行完成。) 17.4.5 IWDG寄存器映像 表84 IWDG寄存器映像和复位值 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 偏移 寄存器 000h 004h 008h IWDG_KR 复位值 IWDG_PR 复位值 IWDG_RLR 复位值 保留 保留 00Ch IWDG_SR 复位值 有关寄存器的起始地址,参见表1。 9 KEY[15:0] 0000000000000000 PR[2:0] 保留 000 RL[11:0] 111111111111 保留 00 8 7 6 5 4 3 2 RVU 1 PVU 0 319/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 窗口看门狗(WWDG) STM32F10xxx参考手册 18 窗口看门狗(WWDG) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 除非特别说明,本章描述的模块适用于整个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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 窗口看门狗(WWDG) STM32F10xxx参考手册 注: 应用程序在正常运行过程中必须定期地写入WWDG_CR寄存器以防止MCU发生复位。只有当计 数器值小于窗口寄存器的值时,才能进行写操作。储存在WWDG_CR寄存器中的数值必须在 0xFF和0xC0之间: ● 启动看门狗 在系统复位后,看门狗总是处于关闭状态,设置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 如何编写看门狗超时程序 可以使用0提供的公式计算窗口看门狗的超时时间。 警告:当写入 WWDG_CR 寄存器时,始终置 T6 位为’1’以避免立即产生一个复位。 图159 窗口看门狗时序图 计算超时的公式如下: TWWDG = TPCLK1 x 4096 x 2WDGTB x (T[5:0] + 1); 其中: TWWDG:WWDG超时时间 TPCLK1:APB1以ms为单位的时钟间隔 在PCLK1 = 36MHz时的最小-最大超时值 WDGTB 最小超时值 0 113µs 1 227µs 2 455µs 3 910µs (ms) 最大超时值 7.28ms 14.56ms 29.12ms 58.25ms 321/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 窗口看门狗(WWDG) STM32F10xxx参考手册 18.5 调试模式 当微控制器进入调试模式时(Cortex-M3核心停止),根据调试模块中的DBG_WWDG_STOP 配 置位的状态,WWDG的计数器能够继续工作或停止。详见第29.16.2节。 18.6 寄存器描述 关于在寄存器描述里面所用到的缩写,详见第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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 位31:8 位7 位6:0 保留 WDGA T6 T5 T4 T3 T2 T1 T0 rs rw rw rw rw rw rw rw 保留。 WDGA: 激活位 (Activation bit) 此位由软件置’1’,但仅能由硬件在复位后清’0’。当WDGA=1时,看门狗可以产生复位。 0:禁止看门狗 1:启用看门狗 T[6:0]: 7位计数器(MSB至LSB) (7-bit counter) 这些位用来存储看门狗的计数器值。每(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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 EWI WDG TB1 WDG TB0 W6 W5 W4 W3 W2 W1 W0 rs rw rw rw rw rw rw rw rw rw 位31:8 保留。 位9 EWI: 提前唤醒中断 (Early wakeup interrupt) 此位若置’1’,则当计数器值达到40h,即产生中断。 此中断只能由硬件在复位后清除。 位8:7 WDGTB[1:0]: 时基 (Timer base) 预分频器的时基可以设置如下: 00: CK计时器时钟(PCLK1除以4096)除以1 01: CK计时器时钟(PCLK1除以4096)除以2 10: CK计时器时钟(PCLK1除以4096)除以4 11: CK计时器时钟(PCLK1除以4096)除以8 位6:0 W[6:0]: 7位窗口值 (7-bit window value) 这些位包含了用来与递减计数器进行比较用的窗口值。 322/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 窗口看门狗(WWDG) STM32F10xxx参考手册 18.6.3 状态寄存器(WWDG_SR) 地址偏移量:0x08 复位值:0x00 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 位31:1 位0 保留 EWIF rc w0 保留。 EWIF: 提前唤醒中断标志 (Early wakeup interrupt flag) 当计数器值达到40h时,此位由硬件置’1’。它必须通过软件写’0’来清除。对此位写’1’无效。若 中断未被使能,此位也会被置’1’。 18.6.4 WWDG寄存器映像 表85 WWDG寄存器映像和复位值 偏移 寄存器 1 2 3 4 5 6 WDGTB0 WDGA 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 000h WWDG_CR 复位值 保留 004h WWDG_CFR 复位值 保留 008h WWDG_SR 复位值 保留 有关寄存器的起始地址,参见表1。 EWI WDGTB1 T[6:0] 01111111 W[6:0] 0001111111 0 0 EWIF 323/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 19 灵活的静态存储器控制器(FSMC) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 本章内容只适用于大容量产品。 19.1 FSMC功能描述 FSMC模块能够与同步或异步存储器和16位PC存储器卡接口,它的主要作用是: ● 将AHB传输信号转换到适当的外部设备协议 ● 满足访问外部设备的时序要求 所有的外部存储器共享控制器输出的地址、数据和控制信号,每个外部设备可以通过一个唯一 的片选信号加以区分。FSMC在任一时刻只访问一个外部设备。 FSMC具有下列主要功能: ● 具有静态存储器接口的器件包括: ─ 静态随机存储器(SRAM) ─ 只读存储器(ROM) ─ NOR闪存 ─ PSRAM(4个存储器块) ● 两个NAND闪存块,支持硬件ECC并可检测多达8K字节数据 ● 16位的PC卡兼容设备 ● 支持对同步器件的成组(Burst)访问模式,如NOR闪存和PSRAM ● 8或16位数据总线 ● 每一个存储器块都有独立的片选控制 ● 每一个存储器块都可以独立配置 ● 时序可编程以支持各种不同的器件: ─ 等待周期可编程(多达15个周期) ─ 总线恢复周期可编程(多达15个周期) ─ 输出使能和写使能延迟可编程(多达15周期) ─ 独立的读写时序和协议,可支持宽范围的存储器和时序 ● PSRAM和SRAM器件使用的写使能和字节选择输出 ● 将32位的AHB访问请求,转换到连续的16位或8位的,对外部16位或8位器件的访问 ● 具有16个字,每个字32位宽的写入FIFO,允许在写入较慢存储器时释放AHB进行其它操 作。在开始一次新的FSMC操作前,FIFO要先被清空。 通常在系统复位或上电时,应该设置好所有定义外部存储器类型和特性的FSMC寄存器,并保持 它们的内容不变;当然,也可以在任何时候改变这些设置。 19.2 框图 FSMC包含四个主要模块: ● AHB接口(包含FSMC配置寄存器) ● NOR闪存和PSRAM控制器 324/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) ● NAND闪存和PC卡控制器 ● 外部设备接口 FSMC框图如下: 图160 FSMC框图 STM32F10xxx参考手册 19.3 AHB接口 AHB接口为内部CPU和其它总线控制设备访问外部静态存储器提供了通道。 AHB操作被转换到外部设备的操作。当选择的外部存储器的数据通道是16或8位时,在AHB上的 32位数据会被分割成连续的16或8位的操作。 AHB时钟(HCLK)是FSMC的参考时钟。 19.3.1 支持的存储器和操作 一般的操作规则 请求AHB操作的数据宽度可以是8位、16位或32位,而外部设备则是固定的数据宽度,此时需要 保障实现数据传输的一致性。 因此,FSMC执行下述操作规则: ● AHB操作的数据宽度与存储器数据宽度相同:无数据传输一致性的问题。 ● AHB操作的数据宽度大于存储器的数据宽度:此时FSMC将AHB操作分割成几个连续的较小 数据宽度的存储器操作,以适应外部设备的数据宽度。 325/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 ● AHB操作的数据宽度小于存储器的数据宽度: 依据外部设备的类型,异步的数据传输有可能不一致。 ─ 与具有字节选择功能的存储器(SRAM、ROM、PSRAM等)进行异步传输时,FSMC执行 读写操作并通过它的字节通道BL[1:0]访问正确的数据。 ─ 与不具有字节选择功能的存储器(NOR和16位NAND等)进行异步传输时,即需要对16位宽 的闪存存储器进行字节访问;显然不能对存储器进行字节模式访问(只允许16位的数据传 输),因此: a. 不允许进行写操作 b. 可以进行读操作(控制器读出完整的16位存储器数据,只使用需要的字节)。 配置寄存器 FSMC由一组寄存器进行配置。19.5.6节详细描述了NOR闪存和PSRAM控制器寄存器。19.6.7 节详细描述了NAND闪存和PC卡寄存器。 19.4 外部设备地址映像 从FSMC的角度看,可以把外部存储器划分为固定大小为256M字节的四个存储块,见下图。 ● 存储块1用于访问最多4个NOR闪存或PSRAM存储设备。这个存储区被划分为4个 NOR/PSRAM区并有4个专用的片选。 ● 存储块2和3用于访问NAND闪存设备,每个存储块连接一个NAND闪存。 ● 存储块4用于访问PC卡设备 每一个存储块上的存储器类型是由用户在配置寄存器中定义的。 图161 FSMC存储块 326/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 19.4.1 NOR和PSRAM地址映像 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为模的地 址读取(典型的N为8或16,可以通过NOR闪存的配置寄存器设置)。此种情况下,可以把存 储器的非对齐访问模式设置为与AHB相同的模式。 如果存储器的非对齐访问模式不能设置为与AHB相同的模式,应该通过FSMC配置寄存器的相 应位禁止非对齐访问,并把非对齐的访问请求分开成两个连续的访问操作。 19.4.2 NAND和PC卡地址映像 三个存储块可以用于NAND或PC卡的操作,每个存储块被划分为下述访问空间: 表88 存储器映像和时序寄存器 起始地址 结束地址 FSMC存储块 存储空间 时序寄存器 0x9C00 0000 0x9800 0000 0x9000 0000 0x9FFF FFFF 0x9BFF FFFF 0x93FF FFFF 块4 – PC卡 I/O 属性 通用 FSMC_PIO4(0xB0) FSMC_PATT4(0xAC) FSMC_PMEM4(0xA8) 0x8800 0000 0x8000 0000 0x8BFF FFFF 0x83FF FFFF 块3 – NAND闪存 属性 通用 FSMC_PATT3(0x8C) FSMC_PMEM3(0x88) 0x7800 0000 0x7000 0000 0x7BFF FFFF 0x73FF FFFF 块2 – NAND闪存 属性 通用 FSMC_PATT2(0x6C) FSMC_PMEM2(0x68) 对于NAND闪存存储器,通用和属性空间又可以在低256K字节部分划分为3个区(见表89) ● 数据区(通用/属性空间的前64K字节区域) ● 命令区(通用/属性空间的第2个64K字节区域) ● 地址区(通用/属性空间的第2个128K字节区域) 327/754 参照2009年12月 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地址可以有4或5个字节(依实际的存储器容量而定),需要连续地执行对地址区的 写才能输出完整的操作地址。 ● 读写数据:软件只需对数据区的任意一个地址写入或读出数据即可。 因为NAND闪存存储器自动地累加其内部的操作地址,读写数据时没有必要变换数据区的地址, 即不必对连续的地址区操作。 19.5 NOR闪存和PSRAM控制器 FSMC可以产生适当的信号时序,驱动下述类型的存储器: ● 异步SRAM和ROM ─ 8位 ─ 16位 ─ 32位 ● PSRAM(Cellular RAM) ─ 异步模式 ─ 突发模式 ● NOR闪存 ─ 异步模式或突发模式 ─ 复用模式或非复用模式 FSMC对每个存储块输出一个唯一的片选信号NE[4:1],所有其它的(地址、数据和控制)信号则是 共享的。 在同步方式中,FSMC向选中的外部设备产生时钟(CLK),该时钟的频率是HCLK时钟的整除因 子。每个存储块的大小固定为64M字节。 每个存储块都有专门的寄存器控制(见19.6.7节)。 可编程的存储器参数包括访问时序(见下表)、是否支持非对齐数据存取和等待周期管理(只针对 突发模式下访问PSRAM和NOR闪存)。 表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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 19.5.1 外部存储器接口信号 表91、表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闪存,复用接口 表92 复用NOR闪存接口 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 RAM既CRAM)) NOE 输出 输出使能 NWE 输出 写使能 NL(=NADV) 输出 地址有效(存储器信号名称为:NADV) NWAIT 输入 PSRAM要求FSMC等待的信号 NBL[1] 输出 高字节使能(存储器信号名称为:NUB) NBL[0] 输出 低字节使能(存储器信号名称为:NLB) PSRAM存储器是按16位的字寻址,最大容量达64M字节(26条地址线)。 329/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 19.5.2 支持的存储器及其操作 下表列出了支持的存储器、访问模式和操作方式,FSMC不支持阴影部分的操作方式。 表94 FSMC支持的NOR闪存/PSRAM存储器和操作方式 存储器 模式 读/写 AHB数据 宽度 存储器数据 宽度 是否支持 注释 异步 读 8 16 支持 异步 写 8 16 不支持 异步 读 16 16 支持 NOR闪存 异步 写 16 (总线复用 异步 读 32 和非总线 异步 写 32 复用) 异步页 读 - 16 支持 16 支持 分成2次FSMC访问 16 支持 分成2次FSMC访问 16 不支持 不支持这种模式 同步 读 8 16 不支持 同步 读 16 16 支持 同步 读 32 16 支持 异步 读 8 16 支持 异步 写 8 16 支持 使用字节信号NBL[1:0] 异步 读 16 16 支持 异步 写 16 16 支持 异步 读 32 PSRAM (总线复用 异步 写 32 和非总线 异步页 读 - 复用) 同步 读 8 16 支持 分成2次FSMC访问 16 支持 分成2次FSMC访问 16 不支持 不支持这种模式 16 不支持 同步 读 16 16 支持 同步 读 32 16 支持 同步 写 8 16 同步 写 16/32 16 支持 支持 使用字节信号NBL[1:0] SRAM和 异步 读 8/16/32 8/16 ROM 异步 写 8/16/32 8/16 支持 支持 使用字节信号NBL[1:0] 使用字节信号NBL[1:0] 19.5.3 时序规则 信号同步 ● 所有的控制器输出信号在内部时钟(HCLK)的上升沿变化 ● 在同步写模式(PSRAM)下,输出的数据在存储器时钟(CLK)的下降沿变化。 19.5.4 NOR闪存和PSRAM控制器时序图 异步静态存储器(NOR闪存和PSRAM) ● 所有信号由内部时钟HCLK保持同步,但该时钟不会输出到存储器; ● FSMC始终在片选信号NE失效前对数据线采样,这样能够保证符合存储器的数据保持时序 (片选失效至数据失效的间隔,通常最小为0ns); ● 当设置了扩展模式,可以在读和写时混合使用模式A、B、C和D(例如,允许以模式A进行 读,而以模式B进行写)。 330/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) 模式1 —— SRAM/CRAM 图162 模式1读操作 STM32F10xxx参考手册 图163 模式1写操作 在写操作的最后一个HCLK周期可以保证NWE上升沿后地址和数据的保持时间,因为存在这个 HCLK周期,DATAST的数值必须大于0(DATAST > 0)。 331/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 表95 FSMC_BCRx位域(模式1) 位编号 31-15 14-10 9 8 7 6 5-4 3-2 1 0 位名称 WAITPOL BURSTEN FACCEN MWID MTYP MUXEN MBKEN 设置的数值 0x0000 0x0 仅当位15为’1’时有意义。 0x0 需要时设置 需要时设置,不包含10(NOR闪存) 0x0 0x1 表96 FSMC_BTRx位域(模式1) 位编号 位名称 设置的数值 31-16 0x0000 15-8 DATAST 操作的第2个阶段的长度,写操作为(DATAST+1个HCLK周期),读操作为 (DATAST+3个HCLK周期)。这个域不能为0,至少为1。 7-4 0x0 3-0 ADDSET 操作的第1个阶段的长度(ADDSET+1个HCLK周期)。 模式A —— SRAM/PSRAM(CRAM) OE翻转 图164 模式A读操作 332/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) 图165 模式A写操作 STM32F10xxx参考手册 模式A与模式1的区别是NOE的变化和相互独立的读写时序。 表97 FSMC_BCRx位域(模式A) 位编号 31-16 15 14 13-10 9 8 7 6 5-4 3-2 1 0 位名称 EXTMOD WAITPOL BURSTEN FACCEN MWID MTYP MUXEN MBKEN 设置的数值 0x0000 0x0 0x1 0x0 仅当位15为’1’时有意义。 0x0 需要时设置 需要时设置,不包含10(NOR闪存) 0x0 0x1 表98 FSMC_BTRx位域(模式A) 位编号 31-30 29-28 27-16 15-8 7-4 3-0 位名称 设置的数值 0x0 ACCMOD 0x0 0x000 DATAST 读操作的第2个阶段的长度(DATAST+3个HCLK周期)。这个域不能为0(至少为1)。 0x0 ADDSET 读操作的第1个阶段的长度(ADDSET+1个HCLK周期)。 333/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 表99 FSMC_BWTRx位域(模式A) 位编号 31-30 29-28 27-16 15-8 7-4 3-0 位名称 设置的数值 0x0 ACCMOD 0x0 0x000 DATAST 写操作的第2个阶段的长度(DATAST+1个HCLK周期)。这个域不能为0(至少为1)。 0x0 ADDSET 写操作的第1个阶段的长度(ADDSET+1个HCLK周期)。 334/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) 模式2/B —— NOR闪存 图166 模式2/B读操作 STM32F10xxx参考手册 图167 模式2写操作 335/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) 图168 模式B写操作 STM32F10xxx参考手册 模式2/B与模式1相比较,不同的是NADV的变化,且在扩展模式下(模式B)读写时序相互独立。 表100 FSMC_BCRx位域(模式2/B ) 位编号 31-15 14 13-10 9 8 7 6 5-4 3-2 1 0 位名称 EXTMOD WAITPOL BURSTEN FACCEN MWID MTYP MUXEN MBKEN 0x0000 模式B:0x1;模式2:0x0 0x0 仅当位15为’1’时有意义。 0x0 0x1 需要时设置 10(NOR闪存) 0x0 0x1 设置的数值 表101 FSMC_BTRx位域(模式2/B) 位编号 31-30 29-28 27-16 15-8 7-4 3-0 位名称 ACCMOD DATAST ADDSET 设置的数值 0x0 如果使用了扩展模式,设置为0x1 0x000 读操作的第2个阶段的长度(DATAST+3个HCLK周期)。这个域不能为0(至少为1)。 0x0 读操作的第1个阶段的长度(ADDSET+1个HCLK周期)。 336/754 参照2009年12月 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+1个HCLK周期)。这个域不能为0(至少为1)。 7-4 0x0 3-0 ADDSET 写操作的第1个阶段的长度(ADDSET+1个HCLK周期)。 注: 只有当设置了扩展模式时(模式B),FSMC_BWTRx才有效,否则该寄存器的内容不起作用。 337/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) 模式C —— NOR闪存 - OE翻转 图169 模式C读操作 STM32F10xxx参考手册 图170 模式C写操作 模式C与模式1不同的是,NOE和NADV的翻转变化,以及独立的读写时序。 338/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 表103 FSMC_BCRx位域(模式C) 位编号 位名称 31-15 0x0000 14 EXTMOD 0x1 13-10 9 0x0 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 15-8 0x000 DATAST 读操作的第2个阶段的长度(DATAST+3个HCLK周期)。这个域不能为0(至少为1)。 7-4 0x0 3-0 ADDSET 读操作的第1个阶段的长度(ADDSET+1个HCLK周期)。 表105 FSMC_BWTRx位域(模式C) 位编号 位名称 设置的数值 31-30 29-28 0x0 ACCMOD 0x2 27-16 15-8 0x000 DATAST 写操作的第2个阶段的长度(DATAST+1个HCLK周期)。这个域不能为0(至少为1)。 7-4 0x0 3-0 ADDSET 写操作的第1个阶段的长度(ADDSET+1个HCLK周期)。 339/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) 模式D —— 带地址扩展的异步操作 图171 模式D读操作 STM32F10xxx参考手册 图172 模式D写操作 模式D与模式1不同的是NADV的翻转变化,NOE的翻转出现在NADV翻转之后,并且具有独立 的读写时序。 340/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 表106 FSMC_BCRx位域(模式D) 位编号 位名称 31-15 0x0000 14 EXTMOD 0x1 13-10 9 0x0 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 15-8 0x000 DATAST 读操作的第2个阶段的长度(DATAST+3个HCLK周期)。这个域不能为0(至少为1)。 7-4 ADDHLD 读操作的中间阶段的长度(ADDHLD+1个HCLK周期)。 3-0 ADDSET 读操作的第1个阶段的长度(ADDSET+1个HCLK周期)。 表108 FSMC_BWTRx位域(模式D) 位编号 位名称 设置的数值 31-30 0x0 29-28 ACCMOD 0x2 27-16 15-8 0x000 DATAST 写操作的第2个阶段的长度(DATAST+1个HCLK周期)。这个域不能为0(至少为1)。 7-4 ADDHLD 写操作的中间阶段的长度(ADDHLD+1个HCLK周期)。 3-0 ADDSET 写操作的第1个阶段的长度(ADDSET+1个HCLK周期)。 341/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) 复用模式 —— 地址/数据复用的NOR闪存异步操作 图173 复用读操作 STM32F10xxx参考手册 (1) 总线恢复延迟(BUSTURN+1)与连续 2 次读操作之间在内部产生的延迟有部分重叠,因此 BUSTURN≤5 时将不影响输出时序。 图174 复用写操作 复用模式与模式D不同的是地址的低16位出现在数据总线上。 342/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 表109 FSMC_BCRx位域(复用模式) 位编号 位名称 31-15 0x0000 14 EXTMOD 0x0 13-10 9 0x0 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+1个HCLK周期)。 15-8 DATAST 操 作 的 第 2 个阶 段 的 长 度,读 操 作 为 (DATAST+3 个 HCLK 周 期 ) ,写 操作 为 (DATAST+1个HCLK周期)。这个域不能为0(至少为1)。 7-4 ADDHLD 操作的中间阶段的长度(ADDHLD+1个HCLK周期)。这个域不能为0(至少为1)。 3-0 ADDSET 操作的第1个阶段的长度(ADDSET+1个HCLK周期)。 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会分成2次16位传输,执行一次长度为2的成组传输;最后一个数据传输完毕时撤消片选 信号。 343/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 显然,从效率上讲这种传输方式(与异步读相比)不是最有效的;但是一次随机的异步访问需要重 新配置存储器访问模式,这同样需要较长时间。 等待管理 对于同步的NOR闪存成组访问,在预置的保持时间(DATLAT+1个CLK时钟周期)之后,需检测 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在每个片选上都支持这2种NOR闪存的 等待状态配置。 图175 同步的总线复用读模式 – NOR, PSRAM(CRAM) BL信号没有显示在图中,对于NOR闪存BL应该为高;对于PSRAM(CRAM),BL应该为低。 344/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 表111 FSMC_BCRx位域(同步模式) 位编号 31-20 19 18-15 14 13 12 11 10 9 8 7 6 5-4 3-2 1 0 位名称 CBURSTRW EXTMOD WAITEN WREN WAITCFG WRAPMOD WAITPOL BURSTEN FWPRLVL FACCEN MWID MTYP MUXEN MBKEN 设置的数值 0x0000 对同步读模式不起作用 0x0 0x0 当此位为高时,不管存储器的等待数值是多少,FSMC视数据保 持阶段结束后的第一个数据有效。 对同步读模式不起作用 根据存储器特性设置 根据存储器特性设置 根据存储器特性设置 0x1 设置此位防止存储器被意外写 根据存储器设置 根据需要设置 0x1 或 0x2 根据需要设置 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) 图176 同步写模式 – PSRAM(CRAM) STM32F10xxx参考手册 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) 表114 FSMC_BTRx位域(同步模式) 位编号 31-30 27-24 23-20 19-16 15-8 7-4 3-0 位名称 - DATLAT CLKDIV BUSTURN DATAST ADDHLD ADDSET 设置的数值 0x0 数据保持时间 0x0 – 得到CLK = HCLK(不支持) 0x1 – 得到CLK = 2 x HCLK 不起作用 不起作用 不起作用 不起作用 STM32F10xxx参考手册 19.5.6 NOR闪存和PSRAM控制器寄存器 必须以字(32位)的方式操作这些外设寄存器。 SRAM/NOR闪存片选控制寄存器 1…4 (FSMC_BCR1…4) 地址偏移:0xA000 0000 + 8 * (x-1), x=1…4 复位值:0x0000 30DX 这个寄存器包含了每个存储器块的控制信息,可以用于SRAM、ROM、异步或成组传输的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 保留 保留 MWID MTYP 位19 位14 位13 位12 res rw res rw rw rw rw rw rw rw res rw rw rw rw rw CBURSTRW:成组写使能位 (Write burst enable) 对于Cellular RAM,该位使能写操作的同步成组传输协议。 对于处于成组传输模式的闪存存储器,这一位允许/禁止通过NWAIT信号插入等待状态。读操作的 同步成组传输协议使能位是FSMC_BCRx寄存器的BURSTEN位。 0:写操作始终处于异步模式 1:写操作为同步模式 EXTMOD:扩展模式使能 (Extended mode enable) 该位允许FSMC使用FSMC_BWTR寄存器,即允许读和写使用不同的时序。 0:不使用FSMC_BWTR寄存器,这是复位后的默认状态。 1:FSMC使用FSMC_BWTR寄存器。 WAITEN:等待使能位 (Wait enable bit) 当闪存存储器处于成组传输模式时,这一位允许/禁止通过NWAIT信号插入等待状态。 0:禁用NWAIT信号,在设置的闪存保持周期之后不会检测NWAIT信号插入等待状态。 1:使用NWAIT信号,在设置的闪存保持周期之后根据NWAIT信号插入等待状态;这是复位后的默 认状态。 WREN:写使能位 (Write enable bit) 该位指示FSMC是否允许/禁止对存储器的写操作。 0:禁止FSMC对存储器的写操作,否则产生一个AHB错误。 1:允许FSMC对存储器的写操作;这是复位后的默认状态。 347/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 位11 位10 位9 位8 位7 位6 位5:4 位3:2 位1 位0 WAITCFG:配置等待时序 (Wait timing configuration) 当闪存存储器处于成组传输模式时,NWAIT信号指示从闪存存储器出来的数据是否有效或是否需 要插入等待周期。该位决定存储器是在等待状态之前的一个时钟周期产生NWAIT信号,还是在等 待状态期间产生NWAIT信号。 0:NWAIT信号在等待状态前的一个数据周期有效;这是复位后的默认状态。 1:NWAIT信号在等待状态期间有效(不适用于Cellular RAM)。 WRAPMOD:支持非对齐的成组模式 (Wrapped burst mode support) 该位决定控制器是否支持把非对齐的AHB成组操作分割成2次线性操作;该位仅在存储器的成组模 式下有效。 0:不允许直接的非对齐成组操作;这是复位后的默认状态。 1:允许直接的非对齐成组操作。 WAITPOL:等待信号极性 (Wait signal polarity bit) 设置存储器产生的等待信号的极性;该位仅在存储器的成组模式下有效。 0:NWAIT等待信号为低时有效;这是复位后的默认状态。 1:NWAIT等待信号为高时有效。 BURSTEN:成组模式使能 (Burst enable bit) 允许对闪存存储器进行成组模式访问;该位仅在闪存存储器的同步成组模式下有效。 0:禁用成组访问模式;这是复位后的默认状态。 1:使用成组访问模式。 保留。 FACCEN:闪存访问使能 (Flash access enable) 允许对NOR闪存存储器的访问操作。 0:禁止对NOR闪存存储器的访问操作. 1:允许对NOR闪存存储器的访问操作。 MWID:存储器数据总线宽度 (Memory databus width) 定义外部存储器总线的宽度,适用于所有类型的存储器。 00:8位, 01:16位(复位后的默认状态), 10:保留,不能用 11:保留,不能用 MTYP:存储器类型 (Memory type) 定义外部存储器的类型: 00:SRAM、ROM(存储器块2...4在复位后的默认值) 01:PSRAM(Cellular RAM: CRAM) 10:NOR闪存(存储器块1在复位后的默认值) 11:保留 MUXEN:地址/数据复用使能位 (Address/data multiplexing enable bit) 当设置了该位后,地址的低16位和数据将共用数据总线,该位仅对NOR和PSRM存储器有效。 0:地址/数据不复用。 1:地址/数据复用数据总线;这是复位后的默认状态。 MBKEN:存储器块使能位 (Memory bank enable bit) 开启对应的存储器块。复位后存储器块1是开启的,其它所有存储器块为禁用。访问一个禁用的存 储器块将在AHB总线上产生一个错误。 0:禁用对应的存储器块。 1:启用对应的存储器块。 348/754 参照2009年12月 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 这个寄存器包含了每个存储器块的控制信息,可以用于SRAM、ROM和NOR闪存存储器。如果 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 ACCMOD 保留 DATLAT CLKDIV BUSTURN DATAST ADDHLD ADDSET res rw rw rw rw rw rw rw 位29:28 位27:24 位23:20 位19:16 位15:8 ACCMOD:访问模式 (Access mode) 定义异步访问模式。这2位只在FSMC_BCRx寄存器的EXTMOD位为1时起作用。 00:访问模式A 01:访问模式B 10:访问模式C 11:访问模式D DATLAT(见本表格下面的注释):(同步成组式NOR闪存的)数据保持时间 (Data latency (for synchronous burst NOR Flash)) 处于同步成组模式的NOR闪存,需要定义在读取第一个数据之前等待的存储器周期数目。 这个时间参数不是以HCLK表示,而是以闪存时钟(CLK)表示。在访问异步NOR闪存、SRAM或 ROM时,这个参数不起作用。操作CRAM时,这个参数必须为0。 0000:第一个数据的保持时间为2个CLK时钟周期 …… 1111:第一个数据的保持时间为17个CLK时钟周期(这是复位后的默认数值)。 CLKDIV:时钟分频比(CLK信号) (Clock divide ratio (for CLK signal)) 定义CLK时钟输出信号的周期,以HCLK周期数表示: 0000:保留 0001:1个CLK周期=2个HCLK周期 0010:1个CLK周期=3个HCLK周期 …… 1111:1个CLK周期=16个HCLK周期(这是复位后的默认数值)。 在访问异步NOR闪存、SRAM或ROM时,这个参数不起作用。 BUSTURN:总线恢复时间 (Bus turnaround phase duration) 这些位用于定义一次读操作之后在总线上的延迟(仅适用于总线复用模式的NOR闪存操作),一 次读操作之后控制器需要在数据总线上为下次操作送出地址,这个延迟就是为了防止总线冲 突。如果扩展的存储器系统不包含总线复用模式的存储器,或最慢的存储器可以在6个HCLK时 钟周期内将数据总线恢复到高阻状态,可以设置这个参数为其最小值。 0000:总线恢复时间=1个HCLK时钟周期 …… 1111:总线恢复时间=16个HCLK时钟周期(这是复位后的默认数值)。 DATAST:数据保持时间 (Data-phase duration) 这些位定义数据的保持时间(见图162至图174),适用于SRAM、ROM和异步总线复用模式的 NOR闪存操作。 0000 0000:保留 0000 0001:DATAST保持时间=2个HCLK时钟周期 0000 0010:DATAST保持时间=3个HCLK时钟周期 …… 1111 1111:DATAST保持时间=256个HCLK时钟周期(这是复位后的默认数值)。 对于每一种存储器类型和访问方式的数据保持时间,请参考对应的图表(见图162至图174)。 例如:模式1、读操作、DATAST=1:数据保持时间=DATAST+3=4个HCLK时钟周期。 349/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 位7:4 ADDHLD:地址保持时间 (Address-hold phase duration) 这些位定义地址的保持时间(见图171至图174),适用于SRAM、ROM和异步总线复用模式的 NOR闪存操作。 0000:ADDHLD保持时间=1个HCLK时钟周期 …… 1111:ADDHLD保持时间=16个HCLK时钟周期(这是复位后的默认数值)。 注:在同步操作中,这个参数不起作用,地址保持时间始终是1个存储器时钟周期。 注: 位3:0 ADDSET:地址建立时间 (Address setup phase duration) 这些位定义地址的建立时间(见图162至图174),适用于SRAM、ROM和异步总线复用模式的 NOR闪存操作。 0000:ADDSET建立时间=1个HCLK时钟周期 …… 1111:ADDSET建立时间=16个HCLK时钟周期(这是复位后的默认数值)。 对于每一种存储器类型和访问方式的地址建立时间,请参考对应的图表(见图162至图174)。 例如:模式2、读操作、ADDSET=1:地址建立时间=ADDSET+1=2个HCLK时钟周期 注:在同步操作中,这个参数不起作用,地址建立时间始终是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 这个寄存器包含了每个存储器块的控制信息,可以用于SRAM、ROM和NOR闪存存储器。如果 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 ACCMOD 保留 DATLAT CLKDIV 保留 DATAST ADDHLD ADDSET res rw rw rw res rw rw rw 位29:28 位27:24 ACCMOD:访问模式 (Access mode) 定义异步访问模式。这2位只在FSMC_BCRx寄存器的EXTMOD位为1时起作用。 00:访问模式A 01:访问模式B 10:访问模式C 11:访问模式D DATLAT:(NOR闪存的同步成组模式)数据保持时间 (Data latency (for synchronous burst NOR Flash)) 处于同步成组模式的NOR闪存,需要定义在读取第一个数据之前等待的存储器周期数目。 0000:第一个数据的保持时间为2个CLK时钟周期 …… 1111:第一个数据的保持时间为17个CLK时钟周期(这是复位后的默认数值)。 注:这个时间参数不是以HCLK表示,而是以闪存时钟(CLK)表示。 注:在访问异步NOR闪存、SRAM或ROM时,这个参数不起作用。 注:操作CRAM时,这个参数必须为0。 350/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 位23:20 位19:16 位15:8 位7:4 位3:0 CLKDIV:时钟分频比(CLK信号) (Clock divide ratio (for CLK signal)) 定义CLK时钟输出信号的周期,以HCLK周期数表示: 0000:保留 0001:1个CLK周期=2个HCLK周期 0010:1个CLK周期=3个HCLK周期 …… 1111:1个CLK周期=16个HCLK周期(这是复位后的默认数值)。 在访问异步NOR闪存、SRAM或ROM时,这个参数不起作用。 保留 DATAST:数据保持时间 (Data-phase duration) 这些位定义数据的保持时间(见图162至图174),适用于SRAM、ROM和异步总线复用模式的 NOR闪存操作。 0000 0000:保留 0000 0001:DATAST保持时间=2个HCLK时钟周期 0000 0010:DATAST保持时间=3个HCLK时钟周期 …… 1111 1111:DATAST保持时间=256个HCLK时钟周期(这是复位后的默认数值)。 ADDHLD:地址保持时间 (Address-hold phase duration) 这些位定义地址的保持时间(见图171至图174),适用于SRAM、ROM和异步总线复用模式的 NOR闪存操作。 0000:保留 0001:ADDHLD保持时间=2个HCLK时钟周期 0010:ADDHLD保持时间=3个HCLK时钟周期 …… 1111:ADDHLD保持时间=16个HCLK时钟周期(这是复位后的默认数值)。 注:在同步NOR闪存操作中,这个参数不起作用,地址保持时间始终是1个闪存时钟周期。 ADDSET:地址建立时间 (Address setup phase duration) 这些位以HCLK周期数定义地址的建立时间(见图162至图174),适用于SRAM、ROM和异步总 线复用模式的NOR闪存操作。 0000:ADDSET建立时间=1个HCLK时钟周期 …… 1111:ADDSET建立时间=16个HCLK时钟周期(这是复位后的默认数值)。 注:在同步NOR闪存操作中,这个参数不起作用,地址建立时间始终是1个闪存时钟周期。 351/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 19.6 NAND闪存和PC卡控制器 FSMC可以为下列类型的设备产生合适的信号时序: ● NAND闪存 ─ 8位 ─ 16位 ● 与16位PC卡兼容的设备 NAND/PC卡控制器能够控制3个外部存储块,存储块2和存储块3支持NAND闪存,存储块4支持 PC卡设备。 每个存储块由专门的寄存器配置(见19.6.7节),可编程的存储器参数包括操作时序和ECC配置。 表115 可编程NAND/PC卡操作参数 参数 功能 操作模式 单位 最小 最大 存储器建立时间 发出命令之前建立地址的(HCLK)时钟周期数目 读/写 1 256 存储器等待时间 发出命令的最短持续时间(HCLK周期数目) 读/写 1 256 AHB 时 存储器保持时间 在发送命令结束后保持地址的(HCLK)时钟周期 数目,写操作时也是数据的保持时间 读/写 钟周期 1 (HCLK) 255 存储器数据总线 高阻时间 启动写操作之后保持数据总线为高阻态的时间 写 0 255 19.6.1 外部存储器接口信号 注意: 下表列出了用于接口NAND闪存和PC卡的典型信号线。 当在I/O模式下使用PC卡或CF卡,在整个操作期间NIOS16输入引脚必须保持接地电平,否则 FSMC可能不能正常操作。即NIOS16输入引脚一定不能连接到卡上,但可以直接接地(仅允许16 位访问)。 前缀’N’代表对应的信号线为低电平有效。 8位NAND闪存 表116 8位NAND闪存 FSMC信号名称 输入/输出 功能 A[17] 输出 NAND闪存地址锁存允许信号(ALE) A[16] 输出 NAND闪存命令锁存允许信号(CLE) D[7:0] 入/出 8位复用的、双向地址/数据总线 NCE[x] 输出 片选,x = 2,3 NOE(=NRE) 输出 输出使能(存储器端信号名称:读使能,NRE) NWE 输出 写使能 NWAIT/INT[3:2] 输入 NAND闪存就绪/繁忙,输入至FSMC的信号 FSMC可以根据需要产生多个地址周期,理论上FSMC不限制可以访问的NAND容量。 16位NAND闪存 表117 16位NAND闪存 FSMC信号名称 A[17] A[16] D[15:0] NCE[x] 输入/输出 输出 输出 入/出 输出 功能 NAND闪存地址锁存允许信号(ALE) NAND闪存命令锁存允许信号(CLE) 16位复用的、双向地址/数据总线 片选,x = 2,3 352/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 NOE(=NRE) 输出 输出使能(存储器端信号名称:读使能,NRE) NWE 输出 写使能 NWAIT/INT[3:2] 输入 NAND闪存就绪/繁忙,输入至FSMC的信号 FSMC可以根据需要产生多个地址周期,理论上FSMC不限制可以访问的NAND容量。 表118 16位PC卡 FSMC信号名称 A[10:0] NIOS16 NIORD NIOWR NREG D[15:0] NCE4_1 NCE4_2 NOE NWE NWAIT INTR 输入/输出 输出 输入 输出 输出 输出 入/出 输出 输出 输出 输出 输入 输入 功能 地址总线 I/O空间的数据传输宽度(仅适合16位传输) I/O空间的输出使能 I/O空间的写使能 指示操作是在通用或属性空间的寄存器信号 双向数据总线 片选1 片选2(指示操作是16位还是8位) 输出使能 写使能 进入FSMC的PC卡等待信号(存储器信号为IORDY) 进入FSMC的PC卡中断信号(仅适合可以产生中断的PC卡) CD 输入 PC卡存在的检测信号 19.6.2 NAND闪存/PC卡支持的存储器及其操作 下表列出了支持的设备、操作模式和操作方式。在表格中有阴影的部分表示NAND闪存/PC卡控 制器不支持对应的操作方式。 表119 支持的存储器及其操作 存储器 模式 异步 读/写 读 AHB数据宽度 8 存储器数据宽度 8 是否支持 支持 注释 异步 写 8 8 支持 8位 异步 读 16 NAND 异步 写 16 异步 读 32 异步 写 32 异步 读 8 8 支持 分成2次FSMC访问 8 支持 分成2次FSMC访问 8 支持 分成4次FSMC访问 8 支持 分成4次FSMC访问 16 支持 异步 写 8 16 不支持 16位 异步 读 16 NAND 异步 写 16 16 支持 16 支持 异步 读 32 异步 写 32 16 支持 分成2次FSMC访问 16 支持 分成2次FSMC访问 19.6.3 NAND闪存、ATA和PC卡时序图 每个PC卡/CF卡和NAND闪存存储器块都是通过一组寄存器管理: ● 控制寄存器:FSMC_PCRx ● 中断状态寄存器:FSMC_SRx ● ECC寄存器:FSMC_ECCRx 353/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 ● 通用存储器空间的时序寄存器:FSMC_PMEMx ● 属性存储器空间的时序寄存器:FSMC_PATTx ● I/O空间的时序寄存器:FSMC_PIOx 每 一 个 时 序 控 制 寄 存 器 都 包 含 3 个 参 数 , 用 于 定 义 PC 卡 /CF 或 NAND 闪 存 操 作 中 三 个 阶 段 的 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_PCRx和FSMC_PMEMx寄存器配置和使能相应的存 储器块,对于某些NAND闪存可能还要操作FSMC_PATTx寄存器(见19.6.5节——NAND 闪存预等待功能)。需要配置的位包括:PWID指示NAND闪存的数据总线宽度, PTYP=1,PWAITEN=1,PBKEN=1,参见FSMC_PMEM2..4寄存器的时序配置。 2. CPU在通用存储空间写入闪存命令字节(例如对于Samsung的NAND闪存,该字节为 0x00),在写信号有效期间(NWE的低脉冲)NAND闪存的CLE输入变为有效(高电平),这时 CPU写的字节被NAND闪存识别为一个命令。一旦NAND闪存锁存了这个命令,随后的页 读操作不必再发送相同的命令。 3. CPU在通用存储器空间或属性空间写入四个字节(较小容量的NAND闪存可能只需要三个 字节)作为读操作的开始地址(STARTAD),以64Mbx8的NAND闪存为例,按照 STARTAD[7:0]、STARTAD[16:9]、STARTAD[24:17]和STARTAD[25] 的顺序写入。在写 信号有效期间(NWE的低脉冲)NAND闪存的ALE输入变为有效(高电平),这时CPU写的字 354/754 参照2009年12月 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信号变低,如下图: 图178 操作CE敏感型NAND闪存 1. CPU写字节命令0x00至0x7001 0000 2. CPU写NAND的地址A7~A0至0x7002 0000 3. CPU写NAND的地址A16~A9至0x7002 0000 4. CPU写NAND的地址A24~A17至0x7002 0000 5. CPU写NAND的地址A25至0x7802 0000:这时FSMC使用FSMC_PATT2的时序定义执行写操作,此时 ATTHOLD≥7 (这里:(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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 19.6.6 NAND闪存的纠错码ECC计算(NAND闪存) FSMC的PC卡控制器包含了2个纠错码计算的硬件模块,存储块2和3各有一个。该模块可以用 于减小CPU在处理纠错码时的软件工作量。 有两个相同的寄存器分别对应存储块2和存储块3,存储块4没有包含硬件的ECC计算模块。 FSMC中实现的纠错码(ECC)算法可以在读或写NAND闪存时,在每256、512、1024、2048、 4096或8192个字节中,矫正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 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 ECCEN PTYP PBKEN PWAITEN 保留 保留 ECCPS TAR TCLR 保留 PWID res rw rw rw res rw rw rw rw rw res 位19:17 位16:13 ECCPS:ECC页面大小 (ECC page size) 定义扩展的ECC页面大小: 000:256字节; 001:512字节; 010:1024字节; 011:2048字节; 100:4096字节; 101:8192字节。 TAR:ALE至RE的延迟 (ALE to RE delay) 以AHB时钟周期(HCLK)为单位设置从ALE变低至RE变低的时间。 时间计算:t_ar = (TAR + SET + 4) x THCLK,这里THCLK表示HCLK周期长度 0000:1个HCLK周期(默认值); …… 1111: 16个HCLK周期。 注:根据不同的地址空间,SET是MEMSET或是ATTSET。 356/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 位12:9 TCLR:CLE至RE的延迟 (CLE to RE delay) 以AHB时钟周期(HCLK)为单位设置从CLE变低至RE变低的时间。 时间计算:t_clr = (TCLR + SET + 4) x THCLK,这里THCLK表示HCLK周期长度 0000:1个HCLK周期(默认值); …… 1111: 16个HCLK周期。 注:根据不同的地址空间,SET是MEMSET或是ATTSET。 位8:7 保留 位6 ECCEN:ECC计算电路使能位 (ECC computation logic enable bit) 0:关闭并复位ECC电路(复位后的默认值); 1:使能ECC电路。 位5:4 PWID:数据总线宽度 (Databus width) 定义外部NAND闪存数据总线的宽度。 00:8位(复位后的默认值); 01:16位(PC卡必须使用此设置); 10:保留,不要使用; 11:保留,不要使用。 位3 PTYP:存储器类型 (Memory type) 定义对应的存储器块上连接的存储器类型。 0:PC卡、CF卡、CF+卡或PCMCIA; 1:NAND闪存(复位后的默认值)。 位2 PBKEN:PC卡/NAND存储器块使能位 (PC Card/NAND Flash memory bank enable bit) 使能存储器块。访问一个未使能的存储器块会产生一个AHB总线错误。 0:关闭对应的存储器块(复位后的默认值); 1:使能对应的存储器块。 位1 PWAITEN:等待功能使能位 (Wait feature enable bit) 使能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,在FSMC从FIFO传送数据到存储器时施放 AHB的带宽并操作其他外设。 为了计算ECC的需要,该寄存器有一个指示位反映了FIFO的状态。数据写到存储器时同时进行 ECC计算,因此软件必须等待FIFO变空后才能读到正确的ECC数值。 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 FEMPT IFEN ILEN IREN IFS ILS IRS 保留 res r rw rw rw rw rw rw 357/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 位6 FEMPT:FIFO空标志 (FIFO empty) 只读位,指示FIFO状态 0:FIFO不空; 1:FIFO空。 位5 IFEN:中断下降沿检测使能 (Interrupt falling edge detection enable bit) 0:关闭中断下降沿检测请求; 1:使能中断下降沿检测请求。 位4 ILEN:中断高电平检测使能 (Interrupt high-level detection enable bit) 0:关闭中断高电平检测请求; 1:使能中断高电平检测请求。 位3 IREN:上升沿中断检测使能 (Interrupt rising edge detection enable bit) 0:关闭中断上升沿检测请求; 1:使能中断上升沿检测请求。 位2 IFS:中断下降沿状态 (Interrupt falling edge status) 该位由硬件设置,软件清除。 0:没有产生中断下降沿; 1:产生了中断下降沿。 位1 IRS:中断高电平状态 (Interrupt high-level status) 该位由硬件设置,软件清除。 0:没有产生中断高电平; 1:产生了中断高电平。 位0 IRS:中断上升沿状态 (Interrupt rising edge status) 该位由硬件设置,软件清除。 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的时序参数,这些参 数适用于在通用存储空间操作16位PC卡/CF卡,或发送NAND闪存的命令、地址和进行数据的 读写操作。 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 MEMHIZx MEMHOLDx MEMWAITx MEMSETx rw rw rw rw 位31:24 位23:16 MEMHIZx:在通用空间x数据总线的高阻时间 (Common memory x databus HiZ time) 当在通用存储空间x开始执行对PC卡/NAND闪存的写操作后,数据总线需要保持一段时间的高 阻状态,该参数以HCLK时钟周期数目(NAND类型时+1)定义数据总线高阻态的时间。这个参数 仅对写操作有效。 0000 0000:(0x00)PC卡为0个HCLK周期 / NAND闪存为1个HCLK周期; …… 1111 1111:(0xFF)PC卡为255个HCLK周期 / NAND闪存为256个HCLK周期,这是复位后的默 认值。 MEMHOLDx:在通用空间x的保持时间 (Common memory x hold time) 当在通用存储空间x对PC卡/NAND闪存进行读或写操作时,该参数以HCLK时钟周期数目定义 了发送命令(NWE、NOE变高)后,地址信号(对于写操作则是数据信号)保持的时间。 0000 0000:保留; 0000 0001:1个HCLK周期; …… 1111 1111:255个HCLK周期(复位后的默认值)。 358/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 位15:8 MEMWAITx:在通用空间x的等待时间 (Common memory x wait time) 当在通用存储空间x对PC卡/NAND闪存进行读或写操作时,该参数以HCLK(+1)时钟周期数目定 义了保持命令(NWE、NOE为低)的最小时间。当该参数定义的时间结束时,如果等待信号 (NWAIT)有效(低),则命令的保持时间会被拉长。 0000 0000:保留; 0000 0001:2个HCLK周期(加上由NWAIT信号变低引入的等待周期); …… 1111 1111:256个HCLK周期(加上由卡的NWAIT信号变低引入的等待周期),这是复位后的默 认值。 位7:0 MEMSETx:在通用空间x的建立时间 (Common memory x setup time) 当在通用存储空间x对PC卡/NAND闪存进行读或写操作时,该参数以HCLK(操作PC卡时+1, 操作NAND闪存时+2)时钟周期数目定义了发送命令(NWE、NOE变低)之前建立地址信号的时 间。 0000 0000:PC卡为1个HCLK周期 / NAND闪存为2个HCLK周期; …… 1111 1111:PC卡为256个HCLK周期 / NAND闪存为257个HCLK周期,这是复位后的默认值。 属性存储空间时序寄存器 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的时序参 数,这些参数适用于在属性存储空间操作8位PC卡/CF卡(每个AHB操作被分解为一系列的8位操 作),或在NAND闪存的最后一个地址写操作的时序与其它操作不同的时候(关于就绪/繁忙的管 理,参见19.6.5节)。 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 ATTHIZx rw ATTHOLDx rw ATTWAITx rw ATTSETx rw 位31:24 位23:16 位15:8 ATTHIZx:在属性空间x数据总线的高阻时间 (Attribute memory x databus HiZ time) 当在属性存储空间x开始执行对PC卡/NAND闪存的写操作后,数据总线需要保持一段时间的高 阻状态,该参数以HCLK时钟周期数目定义数据总线高阻态的时间。这个参数仅对写操作有 效。 0000 0000:0个HCLK周期; …… 1111 1111:255个HCLK周期(复位后的默认值)。 ATTHOLDx:在属性空间x的保持时间 (Attribute memory x hold time) 当在属性存储空间x对PC卡/NAND闪存进行读或写操作时,该参数以HCLK时钟周期数目定义 了发送命令(NWE、NOE变高)后,地址信号(对于写操作则是数据信号)保持的时间。 0000 0000:保留; 0000 0001:1个HCLK周期; …… 1111 1111:255个HCLK周期(复位后的默认值)。 ATTWAITx:在属性空间x的等待时间 (Attribute memory x wait time) 当在属性存储空间x对PC卡/NAND闪存进行读或写操作时,该参数以HCLK(+1)时钟周期数目定 义了保持命 令(NWE、NOE 为低)的最 小 时间。当该 参 数定义的时 间 结束时如果 等 待信号 (NWAIT)有效(低),则命令的保持时间会被拉长。 0000 0000:1个HCLK周期(加上由NWAIT信号变低引入的等待周期); …… 1111 1111:256个HCLK周期(加上由卡的NWAIT信号变低引入的等待周期)(复位后的默认 值)。 359/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 位7:0 ATTSETx:在属性空间x的建立时间 (Attribute memory x setup time) 当在属性存储空间x对PC卡/NAND闪存进行读或写操作时,该参数以HCLK(+1)时钟周期数目定 义了发送命令(NWE、NOE变低)之前建立地址信号的时间。 0000 0000:1个HCLK周期; …… 1111 1111:256个HCLK周期(复位后的默认值)。 I/O空间时序寄存器4 (FSMC_PIO4) 地址偏移:0xA000 0000 + 0xB0 复位值:0xFCFC FCFC FSMC_PIO4寄存器包含了在I/O空间操作16位PC卡/CF卡的时序参数。 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 IOHIZx rw IOHOLDx rw IOWAITx rw IOSETx rw 位31:24 IOHIZx:在I/O空间x数据总线的高阻时间 (I/O x databus HiZ time) 当在I/O空间x开始执行对PC卡的写操作后,数据总线需要保持一段时间的高阻状态,该参数以 HCLK时钟周期数目定义数据总线高阻态的时间。这个参数仅对写操作有效。 0000 0000:0个HCLK周期; …… 1111 1111:255个HCLK周期(复位后的默认值)。 位23:16 IOHOLDx:在I/O空间x的保持时间 (I/O x hold time) 当 在 I/O 空 间 x 对PC 卡 进 行 读或写 操作 时 ,该参 数以 HCLK 时钟 周期 数目定 义了 发 送命令 (NWE、NOE变高)后,地址信号(对于写操作则是数据信号)保持的时间。 0000 0000:保留 0000 0001:1个HCLK周期; …… 1111 1111:255个HCLK周期(复位后的默认值)。 位15:8 IOWAITx:在I/O空间x的等待时间 (I/O x wait time) 当在I/O空间x对PC卡进行读或写操作时,该参数以HCLK(+1)时钟周期数目定义了保持命令 (SMNWE、SMNOE为低)的最小时间。当该参数定义的时间结束时,如果等待信号(NWAIT)有 效(低),则命令的保持时间会被拉长。 0000 0000:保留,不要使用这个数值; 0000 0001:2个HCLK周期(加上由NWAIT信号变低引入的等待周期); …… 1111 1111:256个HCLK周期(加上由卡的NWAIT信号变低引入的等待周期)(复位后的默认 值)。 位7:0 IOSETx:在I/O空间x的建立时间 (I/O x setup time) 当在I/O空间x对PC卡进行读或写操作时,该参数以HCLK(+1)时钟周期数目定义了发送命令 (NWE、NOE变低)之前建立地址信号的时间。 0000 0000:1个HCLK周期; …… 1111 1111:256个HCLK周期(复位后的默认值)。 ECC结果寄存器2/3 (FSMC_ECCR2/3) 地址偏移:0xA000 0000 + 0x54 + 0x20 * (x-1), x=2或3 复位值:0x0000 0000 这2个寄存器包含了由FSMC控制器的ECC计算模块得到的纠错码的当前数值,每个NAND闪存 存储器块有一个ECC计算模块。当CPU在正确的地址(见19.6.6节)读/写NAND闪存的数据时, ECC模块会自动地处理写入或读出的数据。根据FSMC_PCRx中ECCPS域的设置,在读出了每 页的最后一个字节后,CPU必须读出FSMC_ECCx寄存器中的ECC数值,并与记录在NAND闪 存后备区域的数据进行比较,据此判断该页的数据是否正确并在可能的情况下,实行矫正。在 360/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 读出FSMC_ECCRx寄存器的数值后应设置ECCEN位为’0’清除它的内容。需要计算一个新的数 据页时,再次设置ECCEN为’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 ECCx r 位31:0 ECCx:ECC结果 ECC计算电路产生的计算结果。下表显示了这些位的内容。 表120 ECC结果有效位 ECCPS[2:0] 000 001 010 011 100 101 页大小(字节) 256 512 1024 2048 4096 8192 ECC有效位 ECC[21:0] ECC[23:0] ECC[25:0] ECC[27:0] ECC[29:0] ECC[31:0] 361/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 灵活的静态存储器控制器(FSMC) STM32F10xxx参考手册 19.7 注: FSMC寄存器地址映象 本节为译者整理所得,原英文版本没有这一节。 图2-1 偏移 000h 004h 008h 00Ch 010h 014h 018h 01Ch FSMC寄存器地址映象 寄存器名称 FSMC_BCR1 FSMC_BTR1 FSMC_BCR2 FSMC_BTR2 FSMC_BCR3 FSMC_BTR3 FSMC_BCR4 FSMC_BTR4 复位值 0x0000 30DB 0x0FFF FFFF 0x0000 30D2 0x0FFF FFFF 0x0000 30D2 0x0FFF FFFF 0x0000 30D2 0x0FFF FFFF 说明 SRAM/NOR闪存片选控制寄存器 1 SRAM/NOR闪存片选时序寄存器 1 SRAM/NOR闪存片选控制寄存器 2 SRAM/NOR闪存片选时序寄存器 2 SRAM/NOR闪存片选控制寄存器 3 SRAM/NOR闪存片选时序寄存器 3 SRAM/NOR闪存片选控制寄存器 4 SRAM/NOR闪存片选时序寄存器 4 060h 064h 068h 06Ch FSMC_PCR2 FSMC_SR2 FSMC_PMEM2 FSMC_PATT2 0x0000 0018 0x0000 0040 0xFCFC FCFC 0xFCFC FCFC PC卡/NAND闪存控制寄存器 2 FIFO状态和中断寄存器 2 通用存储空间时序寄存器 2 属性存储空间时序寄存器 2 080h 084h 088h 08Ch FSMC_PCR3 FSMC_SR3 FSMC_PMEM3 FSMC_PATT3 0x0000 0018 0x0000 0040 0xFCFC FCFC 0xFCFC FCFC PC卡/NAND闪存控制寄存器 3 FIFO状态和中断寄存器 3 通用存储空间时序寄存器 3 属性存储空间时序寄存器 3 0A0h 0A4h 0A8h 0ACh 0B0h FSMC_PCR4 FSMC_SR4 FSMC_PMEM4 FSMC_PATT4 FSMC_PIO4 0x0000 0018 0x0000 0040 0xFCFC FCFC 0xFCFC FCFC 0xFCFC FCFC PC卡/NAND闪存控制寄存器 4 FIFO状态和中断寄存器 4 通用存储空间时序寄存器 4 属性存储空间时序寄存器 4 I/O存储空间时序寄存器 4 104h 10Ch 114h 11Ch FSMC_BWTR1 FSMC_BWTR2 FSMC_BWTR3 FSMC_BWTR4 0x0FFF FFFF 0x0FFF FFFF 0x0FFF FFFF 0x0FFF FFFF SRAM/NOR闪存写时序寄存器 1 SRAM/NOR闪存写时序寄存器 2 SRAM/NOR闪存写时序寄存器 3 SRAM/NOR闪存写时序寄存器 4 362/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 20 SDIO接口(SDIO) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 本章内容只适用于大容量产品。 20.1 SDIO主要功能 注: SD/SDIO MMC卡主机模块(SDIO)在AHB外设总线和多媒体卡(MMC)、SD存储卡、SDIO卡和 CE-ATA设备间提供了操作接口。 多媒体卡系统规格书由MMCA技术委员会发布,可以在多媒体卡协会的网站上(www.mmca.org) 获得。 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) 图179 SDIO“无响应”和“无数据”操作 STM32F10xxx参考手册 图180 SDIO(多)数据块读操作 图181 SDIO(多)数据块写操作 注: 当有Busy(繁忙)信号时,SDIO(SDIO_D0被拉低)将不会发送任何数据。 364/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) 图182 SDIO连续读操作 图183 SDIO连续写操作 STM32F10xxx参考手册 365/754 参照2009年12月 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_D0、SDIO_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协议,时钟频率可以在0MHz至20MHz间变化;对于多媒体卡V4.0/4.2协议,时钟频率可 以在0MHz至48MHz间变化;对于SD或SD I/O卡,时钟频率可以在0MHz至25MHz间变化。 SDIO使用两个时钟信号: ● SDIO适配器时钟(SDIOCLK=HCLK) ● AHB总线时钟(HCLK/2) 下表适用于多媒体卡/SD/SD I/O卡总线: 表121 SDIO引脚定义 引脚 方向 说明 SDIO_CK SDIO_CMD SDIO_D[7:0] 输出 双向 双向 多媒体卡/SD/SDIO卡时钟。这是从主机至卡的时钟线。 多媒体卡/SD/SDIO卡命令。这是双向的命令/响应信号线。 多媒体卡/SD/SDIO卡数据。这些是双向的数据总线。 366/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) 20.3.1 SDIO适配器 下图是简化的SDIO适配器框图: 图185 SDIO适配器 STM32F10xxx参考手册 注: SDIO适配器是多媒体/加密数字存储卡总线的主设备(主机),用于连接一组多媒体卡或加密数字 存储卡,它包含以下5个部分: ● 适配器寄存器模块 ● 控制单元 ● 命令通道 ● 数据通道 ● 数据FIFO 适配器寄存器和FIFO使用AHB总线一侧的时钟(HCLK/2),控制单元、命令通道和数据通道使用 SDIO适配器一侧的时钟(SDIOCLK)。 适配器寄存器模块 适配器寄存器模块包含所有系统寄存器。该模块还产生清除多媒体卡中静态标记的信号,当在 SDIO清除寄存器中的相应位写’1’时会产生清除信号。 控制单元 控制单元包含电源管理功能和为存储器卡提供的时钟分频。 共有三种电源阶段: ● 电源关闭 ● 电源启动 ● 电源开 367/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) 图186 控制单元 STM32F10xxx参考手册 上图为控制单元的框图,有电源管理和时钟管理子单元。 在电源关闭和电源启动阶段,电源管理子单元会关闭卡总线上的输出信号。 时钟管理子单元产生和控制SDIO_CK信号。SDIO_CK输出可以使用时钟分频或时钟旁路模式。 下述情况下没有时钟输出: ● 复位后 ● 在电源关闭和电源启动阶段 ● 当启动了省电模式并且卡总线处于空闲状态(命令通道和数据通道子单元进入空闲阶段后的8 个时钟周期) 命令通道 命令通道单元向卡发送命令并从卡接收响应。 图187 SDIO适配器命令通道 ● 命令通道状态机(CPSM) ─ 当写入命令寄存器并设置了使能位,开始发送命令。命令发送完成时,命令通道状态机 (CPSM)设置状态标志并在不需要响应时进入空闲状态(见下图)。当收到响应后,接收到 的CRC码将会与内部产生的CRC码比较,然后设置相应的状态标志。 368/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) 图188 命令通道状态机(CPSM) STM32F10xxx参考手册 注: 注: 当进入等待(Wait)状态时,命令定时器开始运行;当CPSM进入接收(Receive)状态之前,产生了 超时,则设置超时标志并进入空闲(Idle)状态。 命令超时固定为64个SDIO_CK时钟周期。 如果在命令寄存器设置了中断位,则关闭定时器,CPSM等待某一个卡发出的中断请求。如果 命令寄存器中设置挂起位,CPSM进入挂起(Pend)状态并等待数据通道子单元发出的CmdPend 信号,在检测到CmdPend信号时,CPSM进入发送(Send)状态,这将触发数据计数器发送停止 命令的功能。 CPSM保持在空闲状态至少8个SDIO_CK周期,以满足NCC和NRC时序限制。NCC是两个主机命令 间的最小间隔;NRC是主机命令与卡响应之间的最小间隔。 图189 SDIO命令传输 ● 命令格式 ─ 命令:命令是用于开始一项操作。主机向一个指定的卡或所有的卡发出带地址的命令或广 播命令(广播命令只适合于MMC V3.31或之前的版本)。命令在CMD线上串行传送。所有 命令的长度固定为48位,下表给出了多媒体卡、SD存储卡和SDIO卡上一般的命令格式。 369/754 参照2009年12月 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 - CID或CSD(包含内部CRC7) 0 1 1 结束位 命令寄存器包含命令索引(发至卡的6位)和命令类型;命令本身决定了是否需要响应和响应的类 型、48位还是136位(见20.9.4节)。命令通道中的状态标志示于下表: 表125 命令通道状态标志 标志 说明 CMDREND CCRCFAIL CMDSENT CTIMEOUT 响应的CRC正确 响应的CRC错误 命令(不需要响应的命令)已经送出 响应超时 CMDACT 正在发送命令 370/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 CRC发生器计算CRC码之前所有位的CRC校验和,包括开始位、发送位、命令索引和命令参数 (或卡状态)。对于长响应格式,CRC校验和计算的是CID或CSD的前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_S或Wait_R状态: ● 发送:DPSM进入Wait_S状态。如果发送FIFO中有数据,则DPSM进入发送状态,同时数 据通道子单元开始向卡发送数据。 ● 接收:DPSM进入Wait_R状态并等待开始位;当收到开始位时,DPSM进入接收状态,同 时数据通道子单元开始从卡接收数据。 数据通道状态机(DPSM) DPSM工作在SDIO_CK频率,卡总线信号与SDIO_CK的上升沿同步。DPSM有6个状态,如下 图所示: 371/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) 图191 数据通道状态机(DPSM) STM32F10xxx参考手册 注: ● 空闲(Idle):数据通道不工作,SDIO_D[7:0]输出处于高阻状态。当写入数据控制寄存器并设 置使能位时,DPSM为数据计数器加载新的数值,并依据数据方向位进入Wait_S或Wait_R 状态。 ● Wait_R:如果数据计数器等于0,当接收FIFO为空时DPSM进入到空闲(Idle)状态。如果数 据计数器不等于0,DPSM等待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:如果数据计数器为0,DPSM进入空闲状态;否则DPSM等待数据FIFO空标志消失 后,进入发送状态。 DPSM会在Wait_S状态保持至少2个时钟周期,以满足NWR的时序要求,NWR是接收到卡的响应 至主机开始数据传输的间隔。 ● 发送(Send):DPSM开始发送数据到卡设备。根据数据控制寄存器中传输模式位的设置,数 据传输模式可以是块传输或流传输: ─ 在块模式下,当数据块计数器达到0时,DPSM发送内部产生的CRC码,然后是结束位, 并进入繁忙状态。 372/754 参照2009年12月 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 数据令牌格式 说明 块数据 流数据 开始位 0 0 数据 - CRC16 有 无 结束位 1 1 数据FIFO 数据FIFO(先进先出)子单元是一个具有发送和接收单元的数据缓冲区。 FIFO包含一个每字32位宽、共32个字的数据缓冲区,和发送与接收电路。因为数据FIFO工作在 AHB时钟区域(HCLK/2),所有与SDIO时钟区域(SDIOCLK)连接的信号都进行了重新同步。 依据TXACT和RXACT标志,可以关闭FIFO、使能发送或使能接收。TXACT和RXACT由数据通 道子单元设置而且是互斥的: ─ 当TXACT有效时,发送FIFO代表发送电路和数据缓冲区 ─ 当RXACT有效时,接收FIFO代表接收电路和数据缓冲区 ● 发送FIFO:当使能了SDIO的发送功能,数据可以通过AHB接口写入发送FIFO。 发送FIFO有32个连续的地址。发送FIFO中有一个数据输出寄存器,包含读指针指向的数据 字。当数据通道子单元装填了移位寄存器后,它移动读指针至下个数据并传输出数据。 如果未使能发送FIFO,所有的状态标志均处于无效状态。当发送数据时,数据通道子单元 设置TXACT为有效。 表127 发送FIFO状态标志 标志 说明 TXFIFOF 当所有32个发送FIFO字都有有效的数据时,该标志为高。 TXFIFOE 当所有32个发送FIFO字都没有有效的数据时,该标志为高。 TXFIFOHE 当8个或更多发送FIFO字为空时,该标志为高。该标志可以作为DMA请求。 TXDAVL 当发送FIFO包含有效数据时,该标志为高。该标志的意思刚好与TXFIFOE相反。 TXUNDERR 当发生下溢错误时,该标志为高。写入SDIO清除寄存器时清除该标志。 ● 接收FIFO:当数据通道子单元接收到一个数据字,它会把数据写入FIFO,写操作结束后, 写指针自动加一;在另一端,有一个读指针始终指向FIFO中的当前数据。如果关闭了接收 FIFO,所有的状态标志会被清除,读写指针也被复位。在接收到数据时数据通道子单元设 置RXACT。下表列出了接收FIFO的状态标志。通过32个连续的地址可以访问接收FIFO。 表128 接收FIFO状态标志 标志 说明 RXFIFOF 当所有32个接收FIFO字都有有效的数据时,该标志为高。 373/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 RXFIFOE RXFIFOHF RXDAVL RXOVERR 当所有32个接收FIFO字都没有有效的数据时,该标志为高。 当8个或更多接收FIFO字有有效的数据时,该标志为高。该标志可以作为DMA请求。 当接收FIFO包含有效数据时,该标志为高。该标志的意思刚好与RTXFIFOE相反。 当发生上溢错误时,该标志为高。写入SDIO清除寄存器时清除该标志。 20.3.2 SDIO AHB接口 AHB接口产生中断和DMA请求,并访问SDIO接口寄存器和数据FIFO。它包含一个数据通道、 寄存器译码器和中断/DMA控制逻辑。 SDIO中断 当至少有一个选中的状态标志为高时,中断控制逻辑产生中断请求。有一个屏蔽寄存器用于选 择可以产生中断的条件,如果设置了相应的屏蔽标志,则对应的状态标志可以产生中断。 SDIO/DMA接口:在SDIO和存储器之间数据传输的过程 在下面的例子中,主机控制器使用CMD24(WRITE_BLOCK)从主机传送512字节到MMC卡, DMA控制器用于从存储器向SDIO的FIFO填充数据。 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 参照2009年12月 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位与命令线上的数据 不相符的卡必须停止发送,并等待下一个识别周期。最终只有一个卡能够成功地传送完整 的CID至SDIO卡主机并进入识别状态。 7. SDIO卡主机发送SET_RELATIVE_ADDR(CMD3)命令至这个卡,这个新的地址被称为相 对卡地址(RCA),它比CID短,用于对卡寻址。至此,这个卡转入待机状态,并不再响应 新的识别过程,同时它的输出驱动从开路转变为推挽模式。 8. SDIO卡主机重复上述步骤5至7,直到收到超时条件。 对于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卡主机对所有激活的卡重复上述步骤5至7。 对于SD I/O卡而言,卡识别过程如下: 1. 总线被激活 2. SDIO卡主机发送IO_SEND_OP_COND(CMD5)命令 3. 得到的响应是卡的操作条件寄存器的内容 4. 不兼容的卡会被置于非激活状态 375/754 参照2009年12月 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位。 设置CID和CSD寄存器不需要事先设置块长度,传送的数据也是通过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 参照2009年12月 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 参照2009年12月 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_PROT和CLR_WRITE_PROT命令控制指 定组的保护,SEND_WRITE_PROT命令与单数据块读命令类似,卡送出一个包含32个写保护 位(代表从指定地址开始的32个写保护组)的数据块,跟着一个16位的CRC码。写保护命令的地 址域是一个以字节为单位的组地址。 卡将截断所有组大小以下的地址。 机械写保护开关 在卡的侧面有一个机械的滑动开关,允许用户设置或清除卡的写保护。当滑动开关置于小窗口 打开的位置时,卡处于写保护状态,当滑动开关置于小窗口关闭的位置时,可以更改卡中内 容。在卡的插槽上的对应部位也有一个开关指示SDIO卡主机模块,卡是否处于写保护状态。卡 的内部电路不知道写保护开关的位置。 密码保护 密码保护功能允许SDIO卡主机模块使用密码对卡实行上锁或解锁。密码存储在128位的PWD寄 存器中,它的长度设置在8位的PWD_LEN寄存器中。这些寄存器是不可挥发的,即掉电后它们 的内容不丢失。已上锁的卡能够响应和执行相应的命令,即允许SDIO卡主机模块执行复位、初 始化和查询状态等操作,但不允许操作卡中的数据。当设置了密码后(即PWD_LEN的数值不为 0),上电后卡自动处于上锁状态。正如CSD和CID寄存器写命令,上锁/解锁命令仅在传输状态 下有效,在这个状态下,命令中没有地址参数,但卡已经被选中。卡的上锁/解锁命令具有单数 据块写命令的结构和总线操作类型,传输的数据块包含所有命令所需要的信息(密码设置模式、 PWD内容和上锁/解锁指示)。在发送卡的上锁/解锁命令之前,命令数据块的长度由SDIO卡主机 模块定义,,命令结构示于表142。 位的设置如下: ● ERASE:设置该位将执行强制擦除,所有其它位必须为0,只发送命令字节。 ● LOCK_UNLOCK:设置该位锁住卡,LOCK_UNLOCK与SET_PWD可以同时设置,但不能 与CLR_PWD同时设置。 ● CLR_PWD:设置该位清除密码数据。 ● SET_PWD:设置该位将密码数据保存至存储器。 ● PWD_LEN:以字节为单位定义密码的长度。 378/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 ● PWD:密码(依不同的命令,新的密码或正在使用的密码) 以下几节列出了设置/清除密码、上锁/解锁和强制擦除的命令序列。 设置密码 1. 选择一个卡(SELECT/DESELECT_CARD,CMD7)。 2. 定义要在8位的卡上锁/解锁模式下发送的数据块长度(SET_BLOCKLEN,CMD16),8位 的PWD_LEN,新密码的字节数目。当更换了密码后,发送命令的数据块长度必须同时考 虑新旧密码的长度。 3. 以合适的数据块长度在数据线上发送LOCK/UNLOCK(CMD42)命令,并包含16位的CRC 码。数据块包含了操作模式(SET_PWD=1)、长度(PWD_LEN)和密码(PWD)。当更换了密 码后,长度数值(PWD_LEN)包含了新旧两个密码的长度,PWD域包含了旧的密码(正在 使用的)和新的密码。 4. 当旧的密码匹配后,新的密码和它的长度被分别存储在PWD和PWD_LEN域。如果送出 的旧密码与期望的密码(长度或内容)不吻合,则设置状态寄存器中的 LOCK_UNLOCK_FAILED错误位,同时密码不变。 密码长度域(PWD_LEN)指示当前是否设置了密码,如果该域为非零,则表示使用了密码,卡在 上电时自动上锁。在不断电的情况下,如果设置了密码,可以通过设置LOCK_UNLOCK位或发 送一个额外的上锁命令,立即锁住卡。 清除密码 1. 选择一个卡(SELECT/DESELECT_CARD,CMD7)。 2. 定义要在8位的卡上锁/解锁模式下发送的数据块长度(SET_BLOCKLEN,CMD16),8位 的PWD_LEN,当前使用密码的字节数目。 3. 当密码匹配后,PWD域被清除同时PWD_LEN被设为0。如果送出的密码与期望的密码(长 度或内容)不吻合,则设置状态寄存器中的LOCK_UNLOCK_FAILED错误位,同时密码不 变。 卡上锁 1. 选择一个卡(SELECT/DESELECT_CARD,CMD7) 2. 定义要在8位的卡上锁/解锁模式(见表142的字节0)下发送的数据块长度 (SET_BLOCKLEN,CMD16),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_CARD,CMD7) 2. 定义要在8位的卡上锁/解锁模式(见表142的字节0)下发送的数据块长度 (SET_BLOCKLEN,CMD16),8位的PWD_LEN,和当前密码的字节数目。 3. 以合适的数据块长度在数据线上发送LOCK/UNLOCK(CMD42)命令,并包含16位的CRC 码。数据块包含了操作模式(LOCK_UNLOCK=0)、长度(PWD_LEN)和密码(PWD)。 4. 当密码匹配后,卡锁被解除,同时状态寄存器中的CARD_IS_LOCKED位被清除。如果送 出的密码与期望的密码(长度或内容)不吻合,则设置状态寄存器中的 LOCK_UNLOCK_FAILED错误位,同时卡仍保持上锁状态。 379/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 解锁状态只在当前的供电过程中有效,只要不清除PWD域,下次上电后卡会被自动上锁。 试图对已经解了锁的卡执行解锁操作会导致操作失败,并设置状态寄存器中的 LOCK_UNLOCK_FAILED错误位。 强制擦除 如果用户忘记了密码(PWD的内容),可以在清除卡中的所有内容后使用卡。强制擦除操作擦除 所有卡中的数据和密码。 1. 选择一个卡(SELECT/DESELECT_CARD,CMD7) 2. 设置发送的数据块长度(SET_BLOCKLEN,CMD16)为1,仅发送8位的卡上锁/解锁字节 (见表142的字节0)。 3. 以合适的数据块长度在数据线上发送LOCK/UNLOCK(CMD42)命令,并包含16位的CRC 码。数据块包含了操作模式(ERASE=1)所有其它位为0。 4. 当ERASE位是数据域中仅有的位时,卡中的所有内容将被擦除,包括PWD和PWD_LEN 域,同时卡不再被上锁。如果有任何其它位不为0,则设置状态寄存器中的 LOCK_UNLOCK_FAILED错误位,卡中的数据保持不变,同时卡仍保持上锁状态。 试图对已经解了锁的卡执行擦除操作会导致操作失败,并设置状态寄存器中的 LOCK_UNLOCK_FAILED错误位。 20.4.11 卡状态寄存器 响应格式R1包含了一个32位的卡状态域,这个域是用于向卡主机发送卡的状态信息(这些信息有 可能存在本地的状态寄存器中)。除非特别说明,卡返回的状态始终是与之前的命令相关的。 表129定义了不同的状态信息。表中有关类型和清除条件域的缩写定义如下: 类型: ● E: 错误位 ● S: 状态位 ● R: 检测位,并依据实际的命令响应而设置 ● X: 检测位,在命令的执行中设置。SDIO卡主机通过发送状态命令读出这些位而查询卡的状 态。 清除条件: ● A: 依据卡的当前状态 ● B: 始终与之前的命令相关。接收到正确的命令即可清除(具有一个命令的延迟)。 ● C: 读即可清除 表129 卡状态 位 名称 类型 数值 说明 清除 条件 31 ADDRESS_OUT_OF_RANGE E R X ‘0’= 无错误 ‘1’= 错误 30 ADDRESS_MISALIGN ‘0’= 无错误 ‘1’= 错误 29 BLOCK_LEN_ERROR ‘0’= 无错误 ‘1’= 错误 命令中的地址参数超出了卡的允许范围。 C 一个多数据块或数据流读/写操作(即使从一个合法的 地址开始)试图读或写超出卡的容量的部分。 命令中的地址参数(与当前的数据块长度对照)定义的 C 第一个数据块未与卡的物理块对齐。 一个多数据块或数据流读/写操作(即使从一个合法的 地址开始)试图读或写未与物理块对齐的数据块。 SET_BLOCKLEN命令的参数超出了卡的最大允许范 C 围,或先前定义的数据块长度对于当前命令来说是非 法的(例如:主机发出一个写命令,当前的块长度小 于卡所允许的最小长度,同时又不允许写入部分数据 块)。 380/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 28 ERASE_SEQ_ERROR 27 ERASE_PARAM 26 WP_VIOLATION 25 CARD_IS_LOCKED 24 LOCK_UNLOCK_FAILED 23 COM_CRC_ERROR 22 ILLEGAL_COMMAND 21 CARD_ECC_FAILED 20 CC_ERROR 19 ERROR 18 保留 17 保留 16 CID/CSD_OVERWRITE 15 WP_ERASE_SKIP 14 CARD_ECC_DISABLED 13 ERASE_RESET 12:9 CURRENT_STATE 8 READY_FOR_DATA 7 SWITCH_ERROR ‘0’= 无错误 ‘1’= 错误 E X ‘0’= 无错误 ‘1’= 错误 E X ‘0’= 无错误 ‘1’= 错误 S R ‘0’= 卡未锁 ‘1’= 卡已锁 E X ‘0’= 无错误 ‘1’= 错误 E R ‘0’= 无错误 ‘1’= 错误 E R ‘0’= 无错误 ‘1’= 错误 E X ‘0’= 成功 ‘1’= 失败 E R ‘0’= 无错误 ‘1’= 错误 E X ‘0’= 无错误 ‘1’= 错误 发送擦除命令的顺序错误。 C 擦除时选择了非法的擦除组。 C 试图对一个写保护的数据块编程。 C 当设置了该位,表示卡已经被锁住。 A 在上锁/解锁中有命令的顺序错误或检测到密码错 C 误。 之前的命令中CRC校验错误。 B 对于当前的卡状态,命令非法。 B 卡的内部实施了ECC校验,但在更正数据时失败。 C (标准中未定义)卡内部发生错误,与主机的命令无 C 关。 产生了与执行上一个主机命令相关的(标准中未定义) C 卡内部的错误(例如:读或写错误)。 E X ‘0’= 无错误 ‘1’= 错误 可以是任何一个下述的错误: C 已经写入了CID寄存器,不能覆盖 CSD的只读部分与卡的内容不匹配 试图进行拷贝或永久写保护的反向操作,即恢 复原状或解除写保护。 E X ‘0’= 未保护 ‘1’= 已保护 遇到已经存在的写保护数据块,仅有部分地址空间被 C 擦除。 S X ‘0’= 允许 执行命令时没有使用内部的ECC。 A ‘1’= 不允许 ‘0’= 清除 ‘1’= 设置 因 为 收 到 一 个 擦 除 顺 序 之 外 的 命 令 ( 非 CMD35 、 C CMD36、CMD38或CMD13命令),进入擦除过程的 序列被中止。 S R 0 = 空闲 1 = 就绪 2 = 识别 当收到命令时卡内状态机的状态。如果命令的执行导 B 致状态的变化,这个变化将会在下个命令的响应中反 映出来。这四个位按十进制数0至15解释。 3 = 待机 4 = 发送 5 = 数据 6 = 接收 7 = 编程 8 = 断开 9 = 忙测试 10~15 = 保留 S R ‘0’= 未就绪 ‘1’= 就绪 与总线上的缓冲器空的信号相对应。 E X ‘0’= 无错误 ‘1’= 转换错 卡没有按照SWITCH命令的要求转换到希望的模式。 B 381/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 6 保留 5 APP_CMD 4 保留给SD I/O卡 3 AKE_SEQ_ERROR 2 保留给与应用相关的命令。 1,0 保留给生产厂家的测试模式。 S R ‘0’= 不允许 ‘1’= 允许 E R ‘0’= 无错误 ‘1’= 错误 卡期望ACMD,或指示命令已经被解释为ACMD命 C 令。 验证的顺序有错误。 C 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状态 位 名称 类型 数值 说明 清除 条件 511:510 DAT_BUS_WIDTH 509 SECURED_MODE 508:496 保留 S R ‘00’= 1(默认) ‘01’= 保留 ‘10’= 4位宽 ‘11’= 保留 S R ‘0’= 未处于保密模式 ‘1’= 处于保密模式 由 SET_BUS_WIDTH 命 令 定 义 A 的当前数据总线宽度。 卡处于保密操作模式(详见“SD A 保密规范”)。 495:480 SD_CARD_TYPE S R ‘00xxh’= 在物 理规范版 本1.01 这个域的低8位可以在未来定义 A ~2.00的SD存储器卡('x'表示任 SD存储卡的不同变种(每个位可 意值)。已定义的卡有: 以用于定义不同的SD类型)。高8 '0000'= 通用SD读写卡 '0001'= SD ROM卡 位可以用于定义那些不遵守当前 的SD物理层规范的SD卡。 479:448 SIZE_OF_PROTECTED_AREA S R 受保护的区域大小(见以下说明) (见以下说明) A 447:440 SPEED_CLASS S R 卡的速度类型(见以下说明) (见以下说明) A 439:432 PERFORMANCE_MOVE S R 以1MB/秒为单位的传输性能(见 (见以下说明) A 以下说明) 431:428 AU_SIZE S R AU的大小(见以下说明) (见以下说明) A 427:424 保留 423:408 ERASE_SIZE S R 一次可以擦除的AU数目 (见以下说明) A 382/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 407:402 ERASE_TIMEOUT S R 擦 除 UNIT_OF_ERASE_AU 指 (见以下说明) A 定的范围的超时数值 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 01h 02h 03h 04h~FFh 数值定义 类型0 类型2 类型4 类型6 保留 PERFORMANCE_MOVE 这8位以1MB/秒为单位指示移动性能(Pm)。如果卡不用RU(纪录单位)移动数据,应该认为Pm是 无穷大。设置这个域为FFh表示无穷大。 表132 移动性能代码 PERFORMANCE_MOVE 00h 01h 02h …… FEh FFh 数值定义 未定义 1MB/秒 2MB/秒 …… 254MB/秒 无穷大 AU_SIZE 这4位指示AU的长度,数值是16K字节为单位2的幂次的倍数。 表133 AU_SIZE代码 AU_SIZE 00h 01h 02h 03h 04h 05h 数值定义 未定义 16KB 32KB 64KB 128KB 256KB 383/754 参照2009年12月 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 最大的AU长度 512KB 1MB 2MB 4MB ERASE_SIZE 这个16位域给出了NERASE,当NERASE个AU被擦除时,ERASE_TIMEOUT定义了超时时间。主 机应该确定适当的一次操作中擦除的AU数目,这样主机可以显示擦除操作的进度。如果该域为 0,则不支持擦除的超时计算。 表135 ERASE_SIZE代码 ERASE_SIZE 数值定义 0000h 不支持擦除的超时计算 0001h 0002h 0003h 1个AU 2个AU 3个AU …… FFFFh …… 65535个AU 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_SIZE和ERASE_TIMEOUT同为0时这个数值没有意义。 表137 擦除偏移代码 ERASE_OFFSET 数值定义 0 0秒 1 1秒 2 2秒 3 3秒 384/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 20.4.13 SD的I/O模式 SD的I/O中断 为了让SD I/O卡能够中断多媒体卡/SD模块,在SD接口上有一个具有中断功能的引脚——第8 脚,在4位SD模式下这个脚是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操作都具有中断阶段,单个数据块操作的中断阶段定义与多个数据块传输操作 的中断阶段定义不同。 SD的I/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)命令。 如果要使用生产厂商自定义的ACMD,SD卡主机需要做以下操作: 1. 发送APP_CMD(CMD55)命令 卡送回响应给多媒体/SD卡模块,指示设置了APP_CMD位并等待ACMD命令。 385/754 参照2009年12月 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_BLOCK,CMD17)相同;这时命令的参数表示数据传输的方向而不是地址,数 据块具有用户自定义的格式和意义。 发送GEN_CMD(CMD56)命令之前,卡必须被选中(状态机处于传输状态),数据块的长度由 SET_BLOCKLEN(CMD16)定义。GEN_CMD(CMD56)命令的响应是R1b格式。 命令类型 应用相关命令和通用命令有四种不同的类型: 1. 广播命令(BC):发送到所有卡,没有响应返回。 2. 带响应的广播命令(BCR):发送到所有卡,同时收到从所有卡返回的响应。 3. 带寻址(点对点)的命令(AC):发送到选中的卡,在SDIO_D信号线上不包括数据传输。 4. 带寻址(点对点)的数据传输命令(AC):发送到选中的卡,在SDIO_D信号线上包含数据传 输。 命令格式 命令格式参见表122。 多媒体卡/SD卡模块的命令 表138 基于块传输的写命令 CMD索 引 类型 参数 [31:16] = 0 CMD23 ac [15:0] = 数据块数目 CMD24 adtc [31:0] = 数据地址 CMD25 adtc [31:0] = 数据地址 CMD26 adtc [31:0] = 填充位 CMD27 adtc [31:0] = 填充位 CMD28 ac [31:0] = 数据地址 CMD29 ac [31:0] = 数据地址 CMD30 adtc [31:0] = 写保护数据地址 CMD31 保留 响应 格式 缩写 说明 R1 SET_BLOCK_COUNT 定义在随后的多块读或写命令中需要传输 块的数目。 R1 WRITE_BLOCK 按照SET_BLOCKLEN命令选择的长度写 一个块。 收到一个STOP_TRANSMISSION命令或 R1 WRITE_MULTIPLE_BLOCK 达到了指定的块数目之前,连续地写数据 块。 R1 PROGRAM_CID 对卡的识别寄存器编程。对于每个卡只能 发送一次这个命令。卡中有硬件机制防止 多次的编程操作。通常该命令保留给生产 厂商。 R1 PROGRAM_CSD 对卡的CSD中可编程的位编程。 R1b SET_WRITE_PROT 如果卡有写保护功能,该命令设置指定组 的写保护位。写保护特性设置在卡的特殊 数据区(WP_GRP_SIZE)。 R1b CLR_WRITE_PROT 如果卡有写保护功能,该命令清除指定组 的写保护位。 R1 SEND_WRITE_PROT 如果卡有写保护功能,该命令要求卡发送 写保护位的状态。 386/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 表139 基于块传输的写保护命令 CMD索引 类型 参数 响应 格式 缩写 说明 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索引 类型 参数 CMD39 [31:16] = RCA [15] = 寄存器写标志 ac [14:8] = 寄存器地址 [7:0] = 寄存器数据 CMD40 bcr [31:0] = 填充位 CMD41 保留。 响应 格式 缩写 R4 FAST_IO R5 GO_IRQ_STATE 说明 用于写和读8位(寄存器)数据域。该命令指定 一个卡和寄存器,如果设置了写标志还提供 写入的数据。R4响应包含从指定寄存器读出 的数据。该命令访问未在多媒体卡标准中定 义的与应用相关的寄存器。 置系统于中断模式。 表142 上锁命令 CMD索引 类型 参数 CMD42 adtc [31:0] = 填充位 CMD43 … 保留。 CMD54 响应 格式 缩写 R1b LOCK_UNLOCK 说明 设置/清除密码或对卡上锁/解锁。数据块 的长度由SET_BLOCKLEN命令设置。 表143 应用相关命令 CMD索引 类型 参数 [31:16] = RCA CMD55 ac [15:0] = 填充位 响应 格式 缩写 R1 APP_CMD 说明 指示卡下一个命令是应用相关命令而不是 一个标准命令。 387/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 [31:1] = 填充位 CMD56 adtc [0] = RD/WR CMD57 … CMD59 CMD60 … CMD63 保留。 保留给生产厂商。 在通用或应用相关命令中,或者用于向卡 中传输一个数据块,或者用于从卡中读取 一个数据块。数据块的长度由 SET_BLOCKLEN命令设置。 20.5 响应格式 所有的响应是通过MCCMD命令在SDIO_CMD信号线上传输。响应的传输总是从对应响应字的 位串的最左面开始,响应字的长度与响应的类型相关。 一个响应总是有一个起始位(始终为0),跟随着传输的方向位(卡=0)。下表中标示为x的数值表示 一个可变的部分。除了R3响应类型,所有的响应都有CRC保护。每一个命令码字都有一个结束 位(始终为1)。 共有5种响应类型,它们的格式定义如下: 20.5.1 R1(普通响应命令) 代码长度=48位。位45:40指示要响应的命令索引,它的数值介于0至63之间。卡的状态由32位 进行编码。 表144 R1响应 位 47 46 [45:40] [39:8] [7:1] 0 域宽度 1 1 6 32 7 1 数值 0 0 X X X 1 说明 开始位 传输位 命令索引 卡状态 CRC7 结束位 20.5.2 R1b 与R1格式相同,但可以选择在数据线上发送一个繁忙信号。收到这些命令后,依据收到命令之 前的状态,卡可能变为繁忙。 20.5.3 R2(CID、CSD寄存器) 代码长度=136位。CID寄存器的内容将作为CMD2和CMD10的响应发出。CSD寄存器的内容将 作为CMD9的响应发出。卡只送出CID和CSD的位[127…1],在接收端这些寄存器的位0被响应 的结束位所取代。卡通过拉低MCDAT指示它正在进行擦除操作;实际擦除操作的时间可能非常 长,主机可以发送CMD7命令不选中这个卡。 表145 R2响应 位 135 134 [133:128] [127:1] 0 域宽度 1 1 6 127 1 数值 0 0 ‘111111’ X 1 说明 开始位 传输位 命令索引 卡状态 结束位 388/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 20.5.4 R3(OCR寄存器) 代码长度=48位。OCR寄存器的内容将作为CMD1的响应发出。电平代码的定义是:限制的电压 窗口 = 低,卡繁忙 = 低。 表146 R3响应 位 47 46 [45:40] [39:8] [7:1] 0 域宽度 1 1 6 32 7 1 数值 0 0 ‘111111’ X ‘1111111’ 1 说明 开始位 传输位 保留 OCR寄存器 保留 结束位 20.5.5 R4(快速I/O) 代码长度=48位。参数域包含指定卡的RCA、需要读出或写入寄存器的地址、和它的内容。 表147 R4响应 位 域宽度 数值 说明 47 1 0 开始位 46 1 0 传输位 [45:40] 6 ‘111111’ 保留 [31:16] 16 [39:8]参数域 [15:8] 8 X RCA X 寄存器地址 [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 [39:8]参数域 35 1 X I/O功能数目 X 当前存储器 [34:32] 3 X 填充位 [31:8] 24 [7:1] 7 X I/O ORC X 保留 0 1 1 结束位 当一个SD I/O卡收到命令CMD5,卡的I/O部分被使能并能够正常地响应所有后续的命令。I/O卡 的使能状态将保持到下一次复位、断电或收到I/O复位的CMD52命令。注意,一个只包含存储器 功能的SD卡可以响应CMD5命令,它的正确响应可以是:当前存储器=1,I/O功能数目=0。按照 SD存储器卡规范版本1.0设计的只包含存储器功能的SD卡,可以检测到CMD5命令为一个非法 389/754 参照2009年12月 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 [39:8]参 [31:16] 16 数域 [15:0] 16 ‘111111’ X X CMD40 成功的卡或主机的RCA[31:16] 未定义。可以作为中断数据。 [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 [39:8]参 [31:16] 16 数域 [15:0] 16 X 成功的卡或主机的RCA[31: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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 SDIO_DCTRL[8]=1),同时数据传输方向是从卡至SDIO主机(SDIO_DCTRL[1]=1),DPSM将直 接从空闲进入读等待状态。在读等待状态时,2个SDIO_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_CK的SDIO读等待操作 如果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即可进入空闲状态。 暂停读操作:DPSM在Wait_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-ATA的CMD61命令支持这些操作。 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]中的“非中断使 能位”,CPSM在Waitcpl状态下等待命令完成信号。 当在CMD信号上收到’0’,CPSM进入空闲状态。在个7位周期之内不能发送新命令。然后,在最 后5个周期(上述7个周期之外),在推挽模式下CMD信号变为’1’。 391/754 参照2009年12月 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 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 保留 res PWRCTRL rw 注意: 位31:2 保留,始终读为0。 位1:0 PWRCTRL:电源控制位 (Power supply control bits) 这些位用于定义卡时钟的当前功能状态: 00:电源关闭,卡的时钟停止。 01:保留。 10:保留的上电状态。 11:上电状态,卡的时钟开启。 写数据后的7个HCLK时钟周期内,不能写入这个寄存器。 20.9.2 SDIO时钟控制寄存器(SDIO_CLKCR) 地址偏移:0x04 复位值:0x0000 0000 SDIO_CLKCR寄存器控制SDIO_CK输出时钟。 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 HWFC_EN NEGEDGE WIDBUS BYPASS PWRSAV CLKEN 保留 位31:15 res 保留,始终读为0。 rw rw rw rw rw rw CLKDIV r/w 392/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 位14 HWFC_EN:硬件流控制使能 (HW Flow Control enable) 0:关闭硬件流控制 1:使能硬件流控制 当使能硬件流控制后,关于TXFIFOE和RXFIFOF中断信号的意义请参考20.9.11节的SDIO状态 寄存器的定义。 位13 NEGEDGE:SDIO_CK相位选择位 (SDIO_CK dephasing selection bit) 0:在主时钟SDIOCLK的上升沿产生SDIO_CK。 1:在主时钟SDIOCLK的下降沿产生SDIO_CK。 位12:11 WIDBUS:宽总线模式使能位 (Wide bus mode enable bit) 00:默认总线模式,使用SDIO_D0。 01:4位总线模式,使用SDIO_D[3:0]。 10:8位总线模式,使用SDIO_D[7:0]。 位10 BYPASS:旁路时钟分频器 (Clock divider bypass enable bit) 0:关闭旁路:驱动SDIO_CK输出信号之前,依据CLKDIV数值对SDIOCLK分频。 1:使能旁路:SDIOCLK直接驱动SDIO_CK输出信号。 位9 PWRSAV:省电配置位 (Power saving configuration bit) 为了省电,当总线为空闲时,设置PWRSAV位可以关闭SDIO_CK时钟输出。 0:始终输出SDIO_CK。 1:仅在有总线活动时才输出SDIO_CK。 位8 CLKEN:时钟使能位 (Clock enable bit) 0:SDIO_CK关闭。 1:SDIO_CK使能。 注意: 位7:1 CLKDIV:时钟分频系数 (Clock divide factor) 这个域定义了输入时钟(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位命令参数,它将作为命令的一部分发送到卡中。 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 位31:0 CMDARG rw CMDARG:命令参数 (Command argument) 命令参数是发送到卡中命令的一部分,如果一个命令包含一个参数,必须在写命令到命令寄存 器之前加载这个寄存器。 20.9.4 SDIO命令寄存器(SDIO_CMD) 地址偏移:0x0C 复位值:0x0000 0000 SDIO_CMD寄存器包含命令索引和命令类型位。命令索引是作为命令的一部分发送到卡中。命 令类型位控制命令通道状态机(CPSM)。 393/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) 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 CE_ATACMD nIEN ENCMDcompl SDIOSuspend CPSMEN WAITPEND WAITINT WAITRESP 保留 CMDINDEX res rw rw rw rw rw rw rw rw rw rw 位31:15 保留,始终读为0 位14 ATACMD:CE-ATA命令 (CE-ATA command) 如果设置该位,CPSM转至CMD61。 位13 nIEN:不使能中断 (not interrupt enable) 如果未设置该位,则使能CE-ATA设备的中断。 位12 ENCMDcompl:使能CMD完成 (Enable CMD completion) 如果设置该位,则使能命令完成信号。 位11 SDIOSuspend:SD I/O暂停命令 (SD I/O suspend command) 如果设置该位,则将要发送的命令是一个暂停命令(只能用于SDIO卡)。 位10 CPSMEN:命令通道状态机(CPSM)使能位 (Command path state machine (CPSM) Enable bit) 如果设置该位,则使能CPSM。 位9 WAITPEND:CPSM等待数据传输结束(CmdPend内部信号) (CPSM Waits for ends of data transfer (CmdPend internal signal)) 如果设置该位,则CPSM在开始发送一个命令之前等待数据传输结束。 位8 WAITINT:CPSM等待中断请求 (CPSM waits for interrupt request) 如果设置该位,则CPSM关闭命令超时控制并等待中断请求。 位7:6 WAITRESP:等待响应位 (Wait for response bits) 这2位指示CPSM是否需要等待响应,如果需要等待响应,则指示响应类型。 00:无响应,期待CMDSENT标志 01:短响应,期待CMDREND或CCRCFAIL标志 10:无响应,期待CMDSENT标志 11:长响应,期待CMDREND或CCRCFAIL标志 注意: 位5:0 CMDINDEX:命令索引 (Command index) 命令索引是作为命令的一部分发送到卡中。 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 保留 res RESPCMD r 位31:6 保留,始终读为0 394/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 位5:0 RESPCMD:响应的命令索引 (Response command index) 只读位,包含最后收到的命令响应中的命令索引。 20.9.6 SDIO响应 1..4 寄存器(SDIO_RESPx) 地址偏移:0x14 + 4*(x-1),其中 x = 1..4 复位值:0x0000 0000 SDIO_RESP1/2/3/4寄存器包含卡的状态,即收到响应的部分信息。 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 CARDSTATUSx r 位31:0 CARDSTATUSx:见下表。 根据响应状态,卡的状态长度是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,则设置超时标志。 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 DATATIME rw 注意 位31:0 DATATIME:数据超时时间 (Data timeout period) 以卡总线时钟周期为单位的数据超时时间。 在写入数据控制寄存器进行数据传输之前,必须先写入数据定时器寄存器和数据长度寄存器。 20.9.8 SDIO数据长度寄存器(SDIO_DLEN) 地址偏移:0x28 复位值:0x0000 0000 SDIO_DLEN寄存器包含需要传输的数据字节长度。当数据传输开始时,这个数值被加载到数据 计数器中。 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 保留 res DATALENGTH rw 位31:25 保留,始终读为0。 395/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 注意 位24:0 DATALENGTH:数据长度 (Data length value) 要传输的数据字节数目。 对于块数据传输,数据长度寄存器中的数值必须是数据块长度(见SDIO_DCTRL)的倍数。在写 入数据控制寄存器进行数据传输之前,必须先写入数据定时器寄存器和数据长度寄存器。 20.9.9 SDIO数据控制寄存器(SDIO_DCTRL) 地址偏移:0x2C 复位值:0x0000 0000 SDIO_DCTRL寄存器控制数据通道状态机(DPSM)。 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 SDIOEN RWMOD RWSTOP RWSTART DMAEN DTMODE DTDIR DTEN 保留 DBLOCKSIZE 位31:12 位11 位10 位9 位8 位7:4 位3 位2 位1 res rw rw rw rw rw rw rw rw rw 保留,始终读为0。 SDIOEN:SD I/O使能功能 (SD I/O enable functions) 如果设置了该位,则DPSM执行SD I/O卡特定的操作。 RWMOD:读等待模式 (Read wait mode) 0:停止SDIO_CK控制读等待; 1:使用SDIO_D2控制读等待。 RWSTOP:读等待停止 (Read wait stop) 0:如果设置了RWSTART,执行读等待; 1:如果设置了RWSTART,停止读等待。 RWSTART:读等待开始 (Read wait start) 设置该位开始读等待操作。 DBLOCKSIZE:数据块长度 (Data block size) 当选择了块数据传输模式,该域定义数据块长度: 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:保留。 DMAEN:DMA使能位 (DMA enable bit) 0:关闭DMA; 1:使能DMA。 DTMODE:数据传输模式 (Data transfer mode selection) 0:块数据传输; 1:流数据传输。 DTDIR:数据传输方向 (Data transfer direction selection) 0:控制器至卡; 1:卡至控制器。 396/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 注意 位0 DTEN:数据传输使能位 (Data transfer enabled bit) 如果设置该位为1,则开始数据传输。根据DTSIR方向位,DPSM进入Wait_S或Wait_R状态, 如果在传输的一开始就设置了RWSTART位,则DPSM进入读等待状态。不需要在数据传输结 束后清除使能位,但必须更改SDIO_DCTRL以允许新的数据传输。 写数据后的7个HCLK时钟周期内不能写入这个寄存器。 20.9.10 SDIO数据计数器寄存器(SDIO_DCOUNT) 地址偏移:0x30 复位值:0x0000 0000 当DPSM从空闲状态进入Wait_R或Wait_S状态时,SDIO_DCOUNT寄存器从数据长度寄存器加 载数值(见SDIO_DLEN),在数据传输过程中,该计数器的数值递减直到减为0,然后DPSM进入 空闲状态并设置数据状态结束标志DATAEND。 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 保留 res DATACOUNT r 注意 位31:25 保留,始终读为0。 位24:0 DATACOUNT:数据计数数值 (Data count value) 读这个寄存器时返回待传输的数据字节数,写这个寄存器无作用。 只能在数据传输结束时读这个寄存器。 20.9.11 SDIO状态寄存器(SDIO_STA) 地址偏移:0x34 复位值:0x0000 0000 SDIO_STA是一个只读寄存器,它包含两类标志: ● 静态标志(位[23:22、10:0]):写入SDIO中断清除寄存器(见SDIO_ICR),可以清除这些位。 ● 动态标志(位[21:11]):这些位的状态变化根据它们对应的那部分逻辑而变化(例如:FIFO满 和空标志变高或变低随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 CEATAEND SDIOIT RXDAVL TXDAVL RXFIFOE TXFIFOE RXFIFOF TXFIFOF RXFIFOHF TXFIFOHE RXACT TXACT CMDACT DBCKEND STBITERR DATAEND CMDSENT CMDREND RXOVERR TXUNDERR DTMEOUT CTIMEOUT DCRCFAIL CCRCFAIL 保留 res 位31:24 位23 位22 位21 位20 位19 位18 位17 位16 位15 rrrrrrrrrrrrrrrrrrrrrrrr 保留,始终读为0。 CEATAEND:在CMD61接收到CE-ATA命令完成信号 (CE-ATA command completion signal received for CMD61) SDIOIT:收到SDIO中断 (SDIO interrupt received) RXDVAL:在接收FIFO中的数据可用 (Data available in receive FIFO) TXDVAL:在发送FIFO中的数据可用 (Data available in transmit FIFO) RXFIFOE:接收FIFO空 (Receive FIFO empty) TXFIFOE:发送FIFO空 (Transmit FIFO empty) 若使用了硬件流控制,当FIFO包含2个字时,TXFIFOE信号变为有效。 RXFIFOF:接收FIFO满 (Receive FIFO full) 若使用了硬件流控制,当FIFO还差2个字满时,RXFIFOF信号变为有效。 TXFIFOF:发送FIFO满 (Transmit FIFO full) RXFIFOHF:接收FIFO半满 (Receive FIFO half full):FIFO中至少还有8个字。 397/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 位14 位13 位12 位11 位10 位9 位8 位7 位6 位5 位4 位3 位2 位1 位0 TXFIFOHE:发送FIFO半空 (Transmit FIFO half empty):FIFO中至少还可以写入8个字。 RXACT:正在接收数据 (Data receive in progress) TXACT:正在发送数据 (Data transmit in progress) CMDACT:正在传输命令 (Command transfer in progress) DBCKEND : 已 发 送 / 接 收 数 据 块 (CRC 检 测 成 功 ) (Data block sent/received (CRC check passed)) STBITERR:在宽总线模式,没有在所有数据信号上检测到起始位 (Start bit not detected on all data signals in wide bus mode) DATAEND : 数 据 结 束 ( 数 据 计 数 器 , SDIO_DCOUNT = 0) (Data end (data counter, SDIDCOUNT, is zero)) CMDSENT:命令已发送(不需要响应) (Command sent (no response required)) CMDREND:已接收到响应(CRC检测成功) (Command response) RXOVERR:接收FIFO上溢错误 (Received FIFO overrun error) TXUNDERR:发送FIFO下溢错误 (Transmit FIFO underrun error) DTIMEOUT:数据超时 (Data timeout) CTIMEOUT:命令响应超时 (Command response timeout) 命令超时时间是一个固定的值,为64个SDIO_CK时钟周期。 DCRCFAIL:已发送/接收数据块(CRC检测失败) (Data block sent/received) CCRCFAIL:已收到命令响应(CRC检测失败) (Command response received) 20.9.12 SDIO清除中断寄存器(SDIO_ICR) 地址偏移:0x38 复位值:0x0000 0000 SDIO_ICR是一个只写寄存器,在对应寄存器位写’1’将清除SDIO_STA状态寄存器中的对应位。 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 CEATAENDC SDIOITC DBCKENDC STBITERRC DATAENDC CMDSENTC CMDRENDC RXOVERRC TXUNDERRC DTMEOUTC CTIMEOUTC DCRCFAILC CCRCFAILC 保留 保留 res 位31:24 位23 位22 位21:11 位10 位9 位8 位7 位6 rw rw res rw rw rw rw rw rw rw rw rw rw rw 保留,始终读为0。 CEATAENDC:CEATAEND标志清除位 (CEATAEND flag clear bit) 软件设置该位以清除CEATAEND标志。 SDIOITC:SDIOIT标志清除位 (SDIOIT flag clear bit) 软件设置该位以清除SDIOIT标志。 保留,始终读为0。 DBCKENDC:DBCKEND标志清除位 (DBCKEND flag clear bit) 软件设置该位以清除DBCKEND标志。 STBITERRC:STBITERR标志清除位 (STBITERR flag clear bit) 软件设置该位以清除STBITERR标志。 DATAENDC:DATAEND标志清除位 (DATAEND flag clear bit) 软件设置该位以清除DATAEND标志。 CMDSENTC:CMDSENT标志清除位 (CMDSENT flag clear bit) 软件设置该位以清除CMDSENT标志。 CMDRENDC:CMDREND标志清除位 (CMDREND flag clear bit) 软件设置该位以清除CMDREND标志。 398/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 位5 RXOVERRC:RXOVERR标志清除位 (RXOVERR flag clear bit) 软件设置该位以清除RXOVERR标志。 位4 TXUNDERRC:TXUNDERR标志清除位 (TXUNDERR flag clear bit) 软件设置该位以清除TXUNDERR标志。 位3 DTIMEOUTC:DTIMEOUT标志清除位 (DTIMEOUT flag clear bit) 软件设置该位以清除DTIMEOUT标志。 位2 CTIMEOUT:CTIMEOUT标志清除位 (CTIMEOUT flag clear bit) 软件设置该位以清除CTIMEOUT标志。 位1 DCRCFAILC:DCRCFAIL标志清除位 (DCRCFAIL flag clear bit) 软件设置该位以清除DCRCFAIL标志。 位0 CCRCFAILC:CCRCFAIL标志清除位。(CCRCFAILflag clear bit) 软件设置该位以清除CCRCFAIL标志。 20.9.13 SDIO中断屏蔽寄存器(SDIO_MASK) 地址偏移:0x3C 复位值:0x0000 0000 在对应位置’1’,SDIO_MASK中断屏蔽寄存器决定哪一个状态位产生中断。 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 CEATAENDIE SDIOITIE RXDAVLIE TXDAVLIE RXFIFOEIE TXFIFOEIE RXFIFOFIE TXFIFOFIE RXFIFOHFIE TXFIFOHEIE RXACTIE TXACTIE CMDACTIE DBCKENDIE STBITERRIE DATAENDIE CMDSENTIE CMDRENDIE RXOVERRIE TXUNDERRIE DTMEOUTIE CTIMEOUTIE DCRCFAILIE CCRCFAILIE 保留 res 位31:24 位23 位22 位21 位20 位19 rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 保留,始终读为0。 CEATAENDIE:允许接收到CE-ATA命令完成信号产生中断 (CE-ATA command completion signal received interrupt enable) 由软件设置/清除该位,允许/关闭在收到CE-ATA命令完成信号产生中断功能。 0:收到CE-ATA命令完成信号时不产生中断 1:收到CE-ATA命令完成信号时产生中断 SDIOITIE:允许SDIO模式中断已接收中断 (SDIO mode interrupt received interrupt enable) 由软件设置/清除该位,允许/关闭SDIO模式中断已接收中断功能。 1:SDIO模式中断已接收不产生中断 0:SDIO模式中断已接收产生中断 RXDVALIE:接收FIFO中的数据有效产生中断 (Data available in Rx FIFO interrupt enable) 由软件设置/清除该位,允许/关闭接收FIFO中的数据有效中断。 0:接收FIFO中的数据有效不产生中断 1:接收FIFO中的数据有效产生中断 TXDVALIE:发送FIFO中的数据有效产生中断 (Data available in Rx FIFO interrupt enable) 由软件设置/清除该位,允许/关闭发送FIFO中的数据有效中断。 0:发送FIFO中的数据有效不产生中断 1:发送FIFO中的数据有效产生中断 RXFIFOEIE:接收FIFO空产生中断 (Rx FIFO empty interrupt enable) 由软件设置/清除该位,允许/关闭接收FIFO空中断。 0:接收FIFO空不产生中断 1:接收FIFO空产生中断 399/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) 位18 位17 位16 位15 位14 位13 位12 位11 位10 位9 位8 位7 STM32F10xxx参考手册 TXFIFOEIE:发送FIFO空产生中断 (Tx FIFO empty interrupt enable) 由软件设置/清除该位,允许/关闭发送FIFO空中断。 0:发送FIFO空不产生中断 1:发送FIFO空产生中断 RXFIFOFIE:接收FIFO满产生中断 (Rx FIFO full interrupt enable) 由软件设置/清除该位,允许/关闭接收FIFO满中断。 0:接收FIFO满不产生中断 1:接收FIFO满产生中断 TXFIFOFIE:发送FIFO满产生中断 (Tx FIFO full interrupt enable) 由软件设置/清除该位,允许/关闭发送FIFO满中断。 0:发送FIFO满不产生中断 1:发送FIFO满产生中断 RXFIFOHFIE:接收FIFO半满产生中断 (Rx FIFO half full interrupt enable) 由软件设置/清除该位,允许/关闭接收FIFO半满中断。 0:接收FIFO半满不产生中断 1:接收FIFO半满产生中断 TXFIFOHE:发送FIFO半空产生中断 (Tx FIFO half empty interrupt enable) 由软件设置/清除该位,允许/关闭发送FIFO半空中断。 0:发送FIFO半空不产生中断 1:发送FIFO半空产生中断 RXACTIE:正在接收数据产生中断 (Data receive acting interrupt enable) 由软件设置/清除该位,允许/关闭正在接收数据中断。 0:正在接收数据不产生中断 1:正在接收数据产生中断 TXACTIE:正在发送数据产生中断 (Data transmit acting interrupt enable) 由软件设置/清除该位,允许/关闭正在发送数据中断。 0:正在发送数据不产生中断 1:正在发送数据产生中断 CMDACTIE:正在传输命令产生中断 (Command acting interrupt enable) 由软件设置/清除该位,允许/关闭正在传输命令中断。 0:正在传输命令不产生中断 1:正在传输命令产生中断 DBCKENDIE:数据块传输结束产生中断 (Data block end interrupt enable) 由软件设置/清除该位,允许/关闭数据块传输结束中断。 0:数据块传输结束不产生中断 1:数据块传输结束产生中断 STBITERRIE:起始位错误产生中断 (Start bit error interrupt enable) 由软件设置/清除该位,允许/关闭起始位错误中断。 0:起始位错误不产生中断 1:起始位错误产生中断 DATAENDIE:数据传输结束产生中断 (Data end interrupt enable) 由软件设置/清除该位,允许/关闭数据传输结束中断。 0:数据传输结束不产生中断 1:数据传输结束产生中断 CMDSENTIE:命令已发送产生中断 (Command sent interrupt enable) 由软件设置/清除该位,允许/关闭命令已发送中断。 0:命令已发送不产生中断 1:命令已发送产生中断 400/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SDIO接口(SDIO) STM32F10xxx参考手册 位6 CMDRENDIE:接收到响应产生中断 (Command response received interrupt enable) 由软件设置/清除该位,允许/关闭接收到响应中断。 0:接收到响应不产生中断 1:接收到响应产生中断 位5 RXOVERRIE:接收FIFO上溢错误产生中断 (Rx FIFO overrun error interrupt enable) 由软件设置/清除该位,允许/关闭接收FIFO上溢错误中断。 0:接收FIFO上溢错误不产生中断 1:接收FIFO上溢错误产生中断 位4 TXUNDERRIE:发送FIFO下溢错误产生中断 (Tx FIFO underrun error interrupt enable) 由软件设置/清除该位,允许/关闭发送FIFO下溢错误中断。 0:发送FIFO下溢错误不产生中断 1:发送FIFO下溢错误产生中断 位3 DTIMEOUTIE:数据超时产生中断 (Data timeout interrupt enable) 由软件设置/清除该位,允许/关闭数据超时中断。 0:数据超时不产生中断 1:数据超时产生中断 位2 CTIMEOUTIE:命令超时产生中断 (Command timeout interrupt enable) 由软件设置/清除该位,允许/关闭命令超时中断。 0:命令超时不产生中断 1:命令超时产生中断 位1 DCRCFAILIE:数据块CRC检测失败产生中断 (Data CRC fail interrupt enable) 由软件设置/清除该位,允许/关闭数据块CRC检测失败中断。 0:数据块CRC检测失败不产生中断 1:数据块CRC检测失败产生中断 位0 CCRCFAILIE:命令CRC检测失败产生中断 (Command CRC fail interrupt enable) 由软件设置/清除该位,允许/关闭命令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个字节被当成一个字处理。 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 保留 res 位31:24 位23:0 FIFOCOUNT r 保留,始终读为0。 FIFOCOUNT:将要写入FIFO或将要从FIFO读出数据字的数目。 20.9.15 SDIO数据FIFO寄存器(SDIO_FIFO) 地址偏移:0x80 复位值:0x0000 0000 接收和发送FIFO是32位的宽度读或写一组寄存器,它在连续的32个地址上包含32个寄存器, CPU可以使用FIFO读写多个操作数。 401/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 1 0 SDIO接口(SDIO) 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 FIFODATA rw 位31:0 FIFODATA:接收或发送FIFO数据 (Receive and transmit FIFO data) FIFO数据占据32个32位的字,地址为: (SDIO基址 + 0x80) 至 (SDIO基址 + 0xFC) 20.9.16 SDIO寄存器映像 下表是SDIO寄存器的总结。 表152 SDIO寄存器映像 2 3 4 5 6 7 8 9 偏移 寄存器 10 12 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0x00 SDIO_POWER 保留 PWRCTRL CLKEN PWRSAV BYPASS WIDBUS NEGEDGE HWFC_EN 0x04 0x08 SDIO_CLKCR SDIO_ARG 0x0C SDIO_CMD 0x10 0x14 0x18 0x1C 0x20 0x24 0x28 SDIO_RESPCMD SDIO_RESP1 SDIO_RESP2 SDIO_RESP3 SDIO_RESP4 SDIO_DTIMER SDIO_DLEN 0x2C SDIO_DCTRL 0x30 SDIO_DCOUNT 0x34 SDIO_STA 保留 保留 保留 保留 CMDARG 保留 保留 CARDSTATUS1 CARDSTATUS2 CARDSTATUS3 CARDSTATUS4 DATATIME DATALENGTH 保留 DATACOUNT CE-ATACMD nIEN ENCMDcompl SDIOsuspend CPSMEN WAITPEND WAITINT WAITRESP CLKDIV CMDINDEX RESPCMD DBLOCKSIZE CMDACT TXACT RXACT TXFIFOHE RXFIFOHF TXFIFOF RXFIFOF TXFIFOE RXFIFOE TXDAVL RXDAVL 0x38 SDIO_ICR 保留 保留 SDIOEN RWMOD RWSTOP RWSTART DMAEN DTMODE DTDIR DTEN CCRCFAILIE CCRCFAILC CCRCFAIL DCRCFAILIE DCRCFAILC DCRCFAIL CTIMEOUTIE CTIMEOUTC CTIMEOUT DTMEOUTIE DTMEOUTC DTMEOUT TXUNDERRIE TXUNDERRC TXUNDERR RXOVERRIE RXOVERRC RXOVERR CMDRENDIE CMDRENDC CMDREND CMDSENTIE CMDSENTC CMDSENT DATAENDIE DATAENDC DATAEND STBITERRIE STBITERRC STBITERR DBCKENDIE DBCKENDC DBCKEND SDIOITIE SDIOITC SDIOIT CEATAENDIE CEATAENDC CEATAEND CMDACTIE TXACTIE RXACTIE TXFIFOHEIE RXFIFOHFIE TXFIFOFIE RXFIFOFIE TXFIFOEIE RXFIFOEIE TXDAVLIE RXDAVLIE 0x3C SDIO_MASK 保留 0x48 0x80 SDIO_FIFOCNT SDIO_FIFO 保留 有关寄存器的起始地址,参见表1。 FIFOCOUNT FIFODATA 402/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 USB全速设备接口(USB) STM32F10xxx参考手册 21 USB全速设备接口(USB) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 本章描述的模块适用于增强型STM32F103xx和USB型STM32F102xx系列。 21.1 USB简介 USB外设实现了USB2.0全速总线和APB1总线间的接口。 USB外设支持USB挂起/恢复操作,可以停止设备时钟实现低功耗。 21.2 USB主要特征 注: ● 符合USB2.0全速设备的技术规范 ● 可配置1到8个USB端点 ● CRC(循环冗余校验)生成/校验,反向不归零(NRZI)编码/解码和位填充 ● 支持同步传输 ● 支持批量/同步端点的双缓冲区机制 ● 支持USB挂起/恢复操作 ● 帧锁定时钟脉冲生成 USB和CAN共用一个专用的512字节的SRAM存储器用于数据的发送和接收,因此不能同时使用 USB和CAN(共享的SRAM被USB和CAN模块互斥地访问)。USB和CAN可以同时用于一个应用 中但不能在同一个时间使用。 下图是USB外设的方框图 403/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 USB全速设备接口(USB) 图192 USB设备框图 STM32F10xxx参考手册 21.3 USB功能描述 USB模块为PC主机和微控制器所实现的功能之间提供了符合USB规范的通信连接。PC主机和 微控制器之间的数据传输是通过共享一专用的数据缓冲区来完成的,该数据缓冲区能被USB外 设直接访问。这块专用数据缓冲区的大小由所使用的端点数目和每个端点最大的数据分组大小 所决定,每个端点最大可使用512字节缓冲区,最多可用于16个单向或8个双向端点。USB模块 同PC主机通信,根据USB规范实现令牌分组的检测,数据发送/接收的处理,和握手分组的处 理。整个传输的格式由硬件完成,其中包括CRC的生成和校验。 每个端点都有一个缓冲区描述块,描述该端点使用的缓冲区地址、大小和需要传输的字节数。 当USB模块识别出一个有效的功能/端点的令牌分组时,(如果需要传输数据并且端点已配置)随 之发生相关的数据传输。USB模块通过一个内部的16位寄存器实现端口与专用缓冲区的数据交 换。在所有的数据传输完成后,如果需要,则根据传输的方向,发送或接收适当的握手分组。 在数据传输结束时,USB模块将触发与端点相关的中断,通过读状态寄存器和/或者利用不同的 中断处理程序,微控制器可以确定: ● 哪个端点需要得到服务 404/754 参照2009年12月 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字节,由256个16位的字构成。 ● 仲裁器:该部件负责处理来自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 参照2009年12月 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标准定义为48MHz。APB1总线的时钟可以大于或者小 于这个频率。 为满足USB数据传输率和分组缓冲区接口的系统需求,APB1总线时钟的频率必须大于8MHz, 以避免数据缓冲区溢出或不满 每个端点对应于两个分组缓冲区(一般一个用于发送,另一个用于接收)。这些缓冲区可以位于整 个分组存储区的任意位置,因为它们的地址和长度都定义在缓冲区描述表中,而缓冲区描述表 也同样位于分组缓冲区中,其地址由寄存器确定。 缓冲区描述表的每个表项都关联到一个端点寄存器,它由4个16位的字组成,因此缓冲区描述表 的起始地址按8字节对齐(寄存器的最低3位总是’000’)。第21.5.3节详细介绍缓冲区描述表表项。 如果是非同步非双缓冲的单向端点,只需要一个分组缓冲区(即发送方向上的分组缓冲区)。 406/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 USB全速设备接口(USB) STM32F10xxx参考手册 其他未用到的端点或某个未使用的方向上的缓冲区描述表项可以用于其他用途。同步和双缓冲 批量端点有特殊的分组缓冲区处理方法(请分别参考第21.4.4节:同步传输和第21.4.3节:双缓 冲端点)。下图描述了缓冲区描述表项和分组缓冲区区域的关系。 图193 分组缓冲区对应的缓冲区描述表项定位 不管是接收还是发送,分组缓冲区都是从底部开始使用的。USB模块不会改变超出当前分配到 的缓冲区区域以外的其他缓冲区的内容。如果缓冲区收到一个比自己大的数据分组,它只会接 收最大为自身大小的数据,其他的丢掉,即发生了所谓的缓冲区溢出异常。 端点初始化 初始化端点的第一步是把适当的值写到ADDRn_TX或ADDRn_RX寄存器中,以便USB模块能找 到要传输的数据或准备好接收数据的缓冲区。USB_EpnR寄存器的EP_TYPE位确定端点的基本 类型,EP_KIND位确定端点的特殊特性。作为发送方,需要设置USB_EpnR寄存器的STAT_TX 位来使能端点,并配置COUNTn_TX位决定发送长度。作为接收方,需要设置STAT_RX位来使 能端点,并且设置BL_SIZE和NUM_BLOCK位,确定接收缓冲区的大小,以检测缓冲区溢出的 异常。对于非同步非双缓冲批量传输的单向端点,只需要设置一个传输方向上的寄存器。一旦 端 点 被 使 能 , 应 用 程 序 就 不 能 再 修 改 USB_EpnR 寄 存 器 的 值 和 ADDRn_TX / ADDRn_RX, COUNTn_TX / COUNTn_RX所在的位置,因为这些值会被硬件实时修改。当数据传输完成时, CTR中断会产生,此时上述寄存器可以被访问,并重新使能新的传输。 IN分组(用于数据发送) 当接收到一IN令牌分组时,如果接收到的地址和一个配置好的端点地址相符合的话,USB模块 将会根据缓冲区描述表的表项,访问相应的ADDRn_TX和COUNTn_TX寄存器,并将这些寄存 器中的数值存储到内部的16位寄存器ADDR和COUNT(应用程序无法访问)中。此时,USB模块 开始根据DTOG_TX位发送DATA0或DATA1分组,并访问缓冲区(请参考’分组缓冲区的结构和用 途’段落)。在IN分组传输完毕之后,从缓冲区读到的第一个字节将被装载到输出移位寄存器中, 并开始发送。最后一个数据字节发送完成之后,计算好的CRC将被发送。如果收到的分组所对 407/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 USB全速设备接口(USB) STM32F10xxx参考手册 应的端点是无效的,将根据USB_EpnR寄存器上的STAT_TX位发送NAK或STALL握手分组而不 发送数据。 ADDR内部寄存器被用作当前缓冲区的指针,COUNT寄存器用于记录剩下未传输的字节数。 USB总线使用低字节在先的方式传输从缓冲区中读出的数据。数据从ADDRn_TX指向的数据分 组缓冲区开始读取,长度为COUNTn_TX/2个字。如果发送的数据分组为奇数个字节,则只使用 最后一个字的低8位。 在 接 收 到 主机 响 应 的 ACK 后 , USB_EpnR 寄 存 器 的 值 有 以下 更 新 : DTOG_TX 位 被 翻 转 , STAT_TX位为’10’,使端点无效,CTR_TX位被置位。应用程序需要通过USB_ISTR寄存器的 EP_ID和DIR位识别产生中断的USB端点。CTR_TX事件的中断服务程序需要首先清除中断标志 位,然后准备好需要发送的数据缓冲区,更新COUNTn_TX为下次需要传输的字节数,最后再 设置STAT_TX位为’11’(端点有效),再次使能数据传输。当STAT_TX位为’10’时(端点为NAK状 态),任何发送到该端点的IN请求都会被NAK,USB主机会重发IN请求直到该端点确认请求有 效。上述操作过程是必需遵守的,以避免丢失紧随上一次CTR中断请求的下一个IN传输请求。 OUT分组和SETUP分组(用于数据接收) USB模块对这两种分组的处理方式基本相同;对SETUP分组的特殊处理将在下面关于控制传输 部分详细说明。当接收到一个OUT或SETUP 分组时,如果地址和某个有效端点的地址相匹配, USB模块将访问缓冲区描述表,找到与该端点相关的ADDRn_RX和COUNTn_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位发送NAK或STALL分组,数据将不会被写入接收缓冲区。 ADDRn_RX的值决定接收缓冲区的起始地址,长度由包含CRC的数据分组的长度(即有效数据长 度+2)决定,但不能超过BL_SIZE和NUM_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_ID和DIR位识别是哪个端点的中断请求。在处理CTR_RX中断事件时,应用程序首先要 确定传输的类型(根据USB_EPnR寄存器的SETUP位),同时清除中断标志位,然后读相关的缓 冲区描述表表项指向的COUNTn_RX寄存器,获得此次传输的总字节数。处理完接收到的数据 后,应用程序需要将USB_EpnR中的STAT_RX位置成’11’,使能下一次的的传输。当STAT_RX 位为’10’时(NAK),任何一个发送到端点上的OUT请求都会被NAK,PC主机将不断重发被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 参照2009年12月 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分组。因此,以NAK或STALL分组响应主机的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标准不仅为不同的传输模式定义了不同的端点类型,而且对这些数据传输所需要的系统要 求做了描述。其中,批量端点适用于在主机PC和USB设备之间传输大批量的数据,因为主机可 以在一帧内利用尽可能多的带宽批量传输数据,使传输效率得到提高。然而,当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寄存器中有2个DTOG位,而USB模块只使 用其中的一位来标识硬件所使用的缓冲区,因此,应用程序可使用另一位来标识当前正在使用 哪个缓冲区,这个新的标识被称为SW_BUF位。下表列出了双缓冲批量端点在实现发送和接收 操作时,USB_EPNR寄存器的DTOG位和SW_BUF位之间的关系。 表153 双缓冲批量端点缓冲区标识定义 缓冲区标识位 作为发送端点 作为接收端点 DTOG SW_BUF DTOG_TX(USB_EPnR寄存器的第6位) USB_EPnR寄存器的第14位 DTOG_RX(USB_EPnR寄存器的第14位) USB_EPnR寄存器的第6位 409/754 参照2009年12月 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 IN端点 0 1 0 ADDRn_TX_1 / COUNTn_TX_1 ADDRn_TX_0 / COUNTn_TX_0 0 无(1) ADDRn_TX_0 / COUNTn_TX_0 1 无(1) ADDRn_TX_0 / COUNTn_TX_0 0 1 ADDRn_RX_0 / COUNTn_RX_0 ADDRn_RX_1 / COUNTn_RX_1 1 OUT端点 0 1 1. 端点处于NAK状态 0 ADDRn_RX_1 / COUNTn_RX_1 ADDRn_RX_0 / COUNTn_RX_0 0 无(1) ADDRn_RX_0 / COUNTn_RX_0 1 无(1) ADDRn_RX_0 / COUNTn_RX_0 可以通过以下方式设置一个双缓冲批量端点: ● 将USB_EPnR寄存器的EP_TYPE位设为’00’,定义端点为批量端点 ● 将USB_EPnR寄存器的EP_KIND位设为’1’,定义端点为双缓冲端点 应用程序根据传输开始时用到的缓冲区来初始化DTOG和SW_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位用来标识发送同步端点),见下表。 410/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 USB全速设备接口(USB) STM32F10xxx参考手册 表155 同步端点的缓冲区使用标识 端点类型 DTOG位值 USB模块使用的缓冲区 IN端点 0 ADDRn_TX_0 / COUNTn_TX_0 1 ADDRn_TX_1 / COUNTn_TX_1 OUT端点 0 1 ADDRn_RX_0 / COUNTn_RX_0 ADDRn_RX_1 / COUNTn_RX_1 应用程序使用的缓冲区 ADDRn_TX_1 / COUNTn_TX_1 ADDRn_TX_0 / COUNTn_TX_0 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_RX或STAT_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寄存器的RXDP和RXDM位可以用来判断是什么触发了唤醒事件,如表156所 示,它还同时列出了各种情况软件应该采取的操作。如果需要的话,可以通过检测这两 位变成’10’(代表空闲总线状态)的时间来知道唤醒或复位事件的结束。此外,在复位事件 411/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 USB全速设备接口(USB) STM32F10xxx参考手册 结束时,USB_ISTR寄存器的RESET位被置为’1’,如果RESET中断被使能,就会产生中 断。此中断应该按正常的复位操作处理。 表156 唤醒事件检测 [RXDP,RXDM]的状态 00 10 01 11 唤醒事件 复位 无(总线干扰) 恢复挂起 未定义的值(总线干扰) 应用程序应执行的操作 无 恢复到挂起状态 无 恢复到挂起状态 注意: 设备可能不是被与USB模块相关的事件唤醒的(例如一个鼠标的移动可唤醒整个系统)。在这种情 况下,先将USB_CNTR寄存器的RESUME位置为’1’,然后在1ms-15ms之间再把它清为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 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CTRM PMA OVRM ERRM WKUPM SUSPM RESETM SOFM ESOFM rw rw rw rw rw rw rw rw 保留 RESUME FSUSP LP MODE PDMN FRES rw rw rw rw rw 位15 CTRM:正确传输(CTR)中断屏蔽位 (Correct transfer interrupt mask) 0:正确传输(CTR)中断禁止 1:正确传输(CTR)中断使能,在中断寄存器的相应位被置1时产生中断。 位14 PMAOVRM:分组缓冲区溢出中断屏蔽位 (Packet memory area over / underrun interrupt mask) 0:PMAOVR中断禁止 1:PMAOVR中断使能,在中断寄存器的相应位被置1时产生中断。 位13 ERRM:出错中断屏蔽位 (Error interrupt mask) 0:出错中断禁止 1:出错中断使能,在中断寄存器的相应位被置1时产生中断。 412/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 USB全速设备接口(USB) STM32F10xxx参考手册 位12 WKUPM:唤醒中断屏蔽位 (Wakeup interrupt mask) 0:唤醒中断禁止 1:唤醒中断使能,在中断寄存器的相应位被置1时产生中断。 位11 SUSPM:挂起中断屏蔽位 (Suspend mode interrupt mask) 0:挂起(SUSP)中断禁止 1:挂起(SUSP)中断使能,在中断寄存器的相应位被置1时产生中断。 位10 RESETM:USB复位中断屏蔽位 (USB reset interrupt mask) 0:USB RESET中断禁止 1:USB RESET中断使能,在中断寄存器的相应位被置1时产生中断。 位9 SOFM:帧首中断屏蔽位 (Start of frame interrupt mask) 0:SOF中断禁止 1:SOF中断使能,在中断寄存器的相应位被置1时产生中断。 位8 ESOFM:期望帧首中断屏蔽位 (Expected start of frame interrupt mask) 0:ESOF中断禁止 1:ESOF中断使能,在中断寄存器的相应位被置1时产生中断。 位4 RESUME:唤醒请求 (Resume request) 设置此位将向PC主机发送唤醒请求。根据USB协议,如果此位在1ms到15ms内保持有效,主 机将对USB模块实行唤醒操作。 位3 FSUSP:强制挂起 (Force suspend) 当USB总线上保持3ms没有数据通信时,SUSP中断会被触发,此时软件必需设置此位。 0:无效 1:进入挂起模式,USB模拟收发器的时钟和静态功耗仍然保持。如果需要进入低功耗状态(总 线供电类的设备),应用程序需要先置位FSUSP再置位LP_MODE。 位2 LP_MODE:低功耗模式 (Low-power mode) 此模式用于在USB挂起状态下降低功耗。在此模式下,除了外接上拉电阻的供电,其他的静态 功耗都被关闭,系统时钟将会停止或者降低到一定的频率来减少耗电。USB总线上的活动(唤醒 事件)将会复位此位(软件也可以复位此位)。 0:非低功耗模式 1:低功耗模式 位1 PDWN:断电模式 (Power down) 此模式用于彻底关闭USB模块。当此位被置位时,不能使用USB模块。 0:退出断电模式 1:进入断电模式 位0 FRES:强制USB复位 (Force USB Reset) 0:清除USB复位信号 1:对USB模块强制复位,类似于USB总线上的复位信号。USB模块将一直保持在复位状态下 直到软件清除此位。如果USB复位中断被使能,将产生一个复位中断。 USB中断状态寄存器(USB_ISTR) 地址偏移:0x44 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CTR PMA OVR ERR WKUP SUSP RESET SOF ESOF 保留 r rc w0 rc w0 rc w0 rc w0 rc w0 rc w0 rc w0 res DIR EP_ID[3:0] r r r r r 此寄存器包含所有中断源的状态信息,以供应用程序确认产生中断请求的事件。 寄存器的高8位各表示一个中断源。当相关事件发生时,这些位被硬件置位,如果USB_CNTR 寄存器上的相应位也被置位,则会产生相应的中断。中断服务程序需要检查每个位,在执行必 要的操作后必需清除相应的状态位,不然中断信号线一直保持为高,同样的中断会再次被触 发。如果同时多个中断标志被设置,也只会产生一个中断。 413/754 参照2009年12月 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’。对于该寄存器,不建议使用读出-修改-写入的流程,因为在读写操作之间,硬件可能 需要设置某些位,而这些位会在写入时被清零。 下面详细描述每个位: 位15 位14 位13 位12 位11 CTR:正确的传输 (Correct transfer) 此位在端点正确完成一次数据传输后由硬件置位。应用程序可以通过DIR和EP_ID位来识别是 哪个端点完成了正确的数据传输。 此位应用程序只读 PMAOVR:分组缓冲区溢出 (Packet memory area over / underrun) 此位在微控制器长时间没有响应一个访问USB分组缓冲区请求时由硬件置位。USB模块通常在 以下情况时置位该位:在接收过程中一个ACK握手分组没有被发送,或者在发送过程中发生了 比特填充错误,在以上两种情况下主机都会要求数据重传。在正常的数据传输中不会产生 PMAOVR中断。由于失败的传输都将由主机发起重传,应用程序就可以在这个中断的服务程序 中加速设备的其他操作,并准备重传。但这个中断不会在同步传输中产生(同步传输不支持重 传)因此数据可能会丢失。 此位应用程序可读可写,但只有写0有效,写1无效。 ERR:出错 (Error) 在下列错误发生时硬件会置位此位。 NANS:无应答。主机的应答超时。 CRC:循环冗余校验码错误。数据或令牌分组中的CRC校验出错。 BST:位填充错误。PID,数据或CRC中检测出位填充错误。 FVIO:帧格式错误。收到非标准帧(如EOP出现在错误的时刻,错误的令牌等)。 USB应用程序通常可以忽略这些错误,因为USB模块和主机在发生错误时都会启动重传机制。 此位产生的中断可以用于应用程序的开发阶段,可以用来监测USB总线的传输质量,标识用户 可能发生的错误(连接线松,环境干扰严重,USB线损坏等)。 此位应用程序可读可写,但只有写0有效,写1无效。 WKUP:唤醒请求 (Wakeup) 当USB模块处于挂起状态时,如果检测到唤醒信号,此位将由硬件置位。此时CTLR寄存器的 LP_MODE位将被清零,同时USB_WAKEUP被激活,通知设备的其他部分(如唤醒单元)将开始 唤醒过程。 此位应用程序可读可写,但只有写0有效,写1无效。 SUSP:挂起模块请求 (Suspend mode request) 此位在USB线上超过3ms没有信号传输时由硬件置位,用以指示一个来自USB总线的挂起请 求。USB复位后硬件立即使能对挂起信号的检测,但在挂起模式下(FSUSP=1)硬件不会再检 测挂起信号直到唤醒过程结束。 此位应用程序可读可写,但只有写0有效,写1无效。 414/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 USB全速设备接口(USB) STM32F10xxx参考手册 位10 位9 位8 RESET:USB复位请求 (USB reset request) 此位在USB模块检测到USB复位信号输入时由硬件置位。此时USB模块将复位内部协议状态 机,并在中断使能的情况下触发复位中断来响应复位信号。USB模块的发送和接收部分将被禁 止,直到此位被清除。所有的配置寄存器不会被复位,除非应用程序对他们清零。这用来保证 在复位后USB传输还可以立即正确执行。但设备的地址和端点寄存器会被USB复位所复位。 此位应用程序可读可写,但只有写0有效,写1无效。 SOF:帧首标志 (Start of frame) 此位在USB模块检测到总线上的SOF分组时由硬件置位,标志一个新的USB帧的开始。中断服 务程序可以通过检测SOF事件来完成与主机的1ms同步,并正确读出寄存器在收到SOF分组时 的更新内容(此功能在同步传输时非常有意义)。 此位应用程序可读可写,但只有写0有效,写1无效。 ESOF:期望帧首标识位 (Expected start of frame) 此位在USB模块未收到期望的SOF分组时由硬件置位。主机应该每毫秒都发送SOF分组,但如 果USB模块没有收到,挂起定时器将触发此中断。如果连续发生3次ESOF中断,也就是连续3 次未收到SOF分组,将产生SUSP中断。即使在挂起定时器未被锁定时发生SOF分组丢失,此 位也会被置位。 此位应用程序可读可写,但只有写0有效,写1无效。 位7:5 保留 位4 DIR:传输方向 (Direction of transaction) 此位在完成数据传输产生中断后由硬件根据传输方向写入。 如果DIR=0,相应端点的CTR_TX位被置位,标志一个IN分组(数据从USB模块传输到PC主机) 的传输完成。 如果DIR=1,相应端点的CTR_RX位被置位,标志一个OUT分组(数据从PC主机传输到USB模 块)的传输完成。如果CTR_TX位同时也被置位,就标志同时存在挂起的OUT分组和IN分组。 应用程序可以利用该信息访问USB_EPnR位对应的操作,它表示挂起中断传输方向的信息。 该位为只读 位3:0 EP_ID[3:0]:端点ID (Endpoint Identifier) 此位在USB模块完成数据传输产生中断后由硬件根据请求中断的端点号写入。如果同时有多个 端点的请求中断,硬件写入优先级最高的端点号。端点的优先级按以下方法定义:同步端点和 双缓冲批量端点具有高优先级,其他的端点为低优先级。如果多个同优先级的端点请求中断, 则根据端点号来确定优先级,即端点0具有最高优先级,端点号越小,优先级越高。应用程序 可以通过上述的优先级策略顺序处理端点的中断请求。 该位为只读。 USB帧编号寄存器(USB_FNR) 地址偏移:0x48 复位值:0x0XXX,X代表未定义数值 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RXDP RXDM LCK r r r 位15 位14 位13 位12:11 LSOF[1:0] FN[10:0] r r r r r r r r r r r r r RXDP:D+状态位 (Receive data + line status) 此位用于观察USB D+数据线的状态,可在挂起状态下检测唤醒条件的出现。 RXDM:D-状态位 (Receive data - line status) 此位用于观察USB D-数据线的状态,可在挂起状态下检测唤醒条件的出现。 LCK:锁定位 (Locked) USB模块在复位或唤醒序列结束后会检测SOF分组,如果连续检测到至少2个SOF分组,则硬 件会置位此位。此位一旦锁定,帧计数器将停止计数,一直等到USB模块复位或总线挂起时再 恢复计数。 LSOF[1:0]:帧首丢失标志位 (Lost SOF) 当ESOF事件发生时,硬件会将丢失的SOF分组的数目写入此位。如果再次收到SOF分组,引 脚会清除此位。 415/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 USB全速设备接口(USB) STM32F10xxx参考手册 位10:0 FN[10:0]:帧编号 (Frame number) 此部分记录了最新收到的SOF分组中的11位帧编号。主机每发送一个帧,帧编号都会自加,这 对于同步传输非常有意义。此部分发生SOF中断时更新。 USB设备地址寄存器(USB_DADDR) 地址偏移:0x4C 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 EF ADD[6:0] 位7 位6:0 rw rw rw rw rw rw rw rw EF:USB模块使能位 (Enable function) 此位在需要使能USB模块时由应用程序置位。如果此位为0,USB模块将停止工作,忽略所有 寄存器的设置,不响应任何USB通信。 ADD[6:0]:设备地址 (evice address) 此位记录了USB主机在枚举过程中为USB设备分配的地址值。该地址值和端点地址(EA)必需和 USB令牌分组中的地址信息匹配,才能在指定的端点进行正确的USB传输。 USB分组缓冲区描述表地址寄存器(USB_BTABLE) 地址偏移:0x50 复位值:0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 BTABLE[15:3] 保留 rw rw rw rw rw rw rw rw rw rw rw rw rw res 位15:3 BTABLE[15:3]:缓冲表 (Buffer table) 此位记录分组缓冲区描述表的起始地址。分组缓冲区描述表用来指示每个端点的分组缓冲区地 址和大小,按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] 地址偏移:0x00至0x1C 复位值:0x0000 15 CTR _RX rc w0 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DTOG _RX STAT_RX [1:0] SETUP EP TYPE[1:0] EP_ KIND CTR _TX DTOG _TX STAT_TX [1:0] t t t r rw rw rw rc w0 t t t EA[3:0] rw rw rw rw 当USB模块收到USB总线复位信号,或CTLR寄存器的FRES位置位时,USB模块将会复位。该 寄存器除了CTR_RX和CTR_TX位保持不变以处理紧随的USB传输外,其他位都被复位。每个 端点对应一个USB_EPnR寄存器,其中n为端点地址,即端点ID号。 对于此类寄存器应避免执行读出-修改-写入操作,因为在读和写操作之间,硬件可能会设置 某些位,而这些位又会在写入时被修改,导致应用程序错过相应的操作。因此,这些位都有一 个写入无效的值,建议用Load指令修改这些寄存器,以免应用程序修改了不需要修改的位。 416/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 USB全速设备接口(USB) STM32F10xxx参考手册 位15 位14 位13:12 位11 位10:9 位8 位7 CTR_RX:正确接收标志位 (Correct Transfer for reception) 此位在正确接收到OUT或SETUP分组时由硬件置位,应用程序只能对此位清零。如果CTRM 位已置位,相应的中断会产生。收到的是OUT分组还是SETUP分组可以通过下面描述的 SETUP位确定。以NAK或STALL结束的分组和出错的传输不会导致此位置位,因为没有真正 传输数据。 此位应用程序可读可写,但只有写0有效,写1无效。 DTOG_RX:用于数据接收的数据翻转位 (Data Toggle, for reception transfers) 对于非同步端点,此位由硬件设置,用于标记希望接收的下一个数据分组的Toggle位 (0=DATA0,1=DATA1)。在接收到PID(分组ID)正确的数据分组之后,USB模块发送ACK握手 分组,并翻转此位。对于控制端点,硬件在收到SETUP分组后清除此位。 对于双缓冲端点,此位还用于支持双缓冲区的交换(请参考21.4.3双缓冲端点)。 对于同步端点,由于仅发送DATA0,因此此位仅用于支持双缓冲区的交换(请参考21.4.4同步 传输)而不需进行翻转。同步传输不需要握手分组,因此硬件在收到数据分组后立即设置此 位。 应用程序可以对此位进行初始化(对于非控制端点,初始化是必需的),或者翻转此位用于特殊 用途。 此位应用程序可读可写,但写0无效,写1可以翻转此位。 STAT_RX[1:0]:用于数据接收的状态位 (Status bits, for reception transfers) 此位用于指示端点当前的状态,表157列出了端点的所有状态。当一次正确的OUT或SETUP数 据传输完成后(CTR_RX=1),硬件会自动设置此位为NAK状态,使应用程序有足够的时间在处 理完当前传输的数据后,响应下一个数据分组。 对于双缓冲批量端点,由于使用特殊的传输流量控制策略,因此根据使用的缓冲区状态控制传 输状态(请参考21.4.3双缓冲端点)。 对于同步端点,由于端点状态只能是有效或禁用,因此硬件不会在正确的传输之后设置此位。 如果应用程序将此位设为STALL或者NAK,USB模块响应的操作是未定义的。 此位应用程序可读可写,但写0无效,写1翻转此位。 SETUP:SETUP分组传输完成标志位 (Setup transaction completed) 此位在USB模块收到一个正确的SETUP分组后由硬件置位,只有控制端点才使用此位。在接 收完成后(CTR_RX=1),应用程序需要检测此位以判断完成的传输是否是SETUP分组。为了防 止中断服务程序在处理SETUP分组时下一个令牌分组修改了此位,只有CTR_RX为0时,此位 才可以被修改,CTR_RX为1时不能修改。 此位应用程序只读。 EP_TPYE[1:0]:端点类型位 (Endpoint type) 此位用于指示端点当前的类型,所有的端点类型都在表158中列出。所有的USB设备都必需包 含一个地址为0的控制端点,如果需要可以有其他地址的控制端点。只有控制端点才会有 SETUP传输,其他类型的端点无视此类传输。SETUP传输不能以NAK或STALL分组响应,如 果控制端点在收到SETUP分组时处于NAK状态,USB模块将不响应分组,就会出现接收错 误。如果控制端点处于STALL状态,SETUP分组会被正确接收,数据会被正确传输,并产生 一个正确传输完成的中断。控制端点的OUT分组安装普通端点的方式处理。 批量端点和中断端点的处理方式非常类似,仅在对EP_KIND位的处理上有差别。 同步端点的用法请参考21.4.4同步传输。 EP_KIND:端点特殊类型位 (Endpoint kind) 此位的需要和EP_TYPE位配合使用,具体的定义请参考表159。 DBL_BUF:应用程序设置此位能使能批量端点的双缓冲功能。详见21.4.3双缓冲端点。 STATUS_OUT:应用程序设置此位表示USB设备期望主机发送一个状态数据分组,此时,设 备对于任何长度不为0的数据分组都响应STALL分组。此功能仅用于控制端点,有利于提供应 用程序对于协议层错误的检测。如果STATUS_OUT位被清除,OUT分组可以包含任意长度的 数据。 CTR_TX:正确发送标志位 (Correct transfer for transmission) 此位由硬件在一个正确的IN分组传输完成后置位。如果CTRM位已被置位,会产生相应的中 断。应用程序需要在处理完该事件后清除此位。在IN分组结束时,如果主机响应NAK或STALL 则此位不会被置位,因为数据传输没有成功。 此位应用程序可读可写,但写0有效,写1无效。 417/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 USB全速设备接口(USB) STM32F10xxx参考手册 位6 位5:4 位3:0 DTOG_RX:发送数据翻转位 (Data Toggle, for transmission transfers) 对于非同步端点,此位用于指示下一个要传输的数据分组的Toggle位(0=DATA0, 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) 此位用于标识端点的当前状态,表160列出了所有的状态。应用程序可以翻转这些位来初始化 状态信息。在正确完成一次IN分组的传输后(CTR_TX=1),硬件会自动设置此位为NAK状态, 保证应用程序有足够的时间准备好数据响应后续的数据传输。 对于双缓冲批量端点,由于使用特殊的传输流量控制策略,是根据缓冲区的状态控制传输的状 态的(请参考21.4.3双缓冲端点)。 对于同步端点,由于端点的状态只能是有效或禁用,因此硬件不会在数据传输结束时改变端点 的状态。如果应用程序将此位设为STALL或者NAK,则USB模块后续的操作是未定义的。 此位应用程序可读可写,但写0无效,写1翻转此位。 EA[3:0]:端点地址 (Endpoint address) 应用程序必需设置此4位,在使能一个端点前为它定义一个地址。 表157 接收状态编码 STAT_RX[1:0] 描述 00 DISABLED:端点忽略所有的接收请求。 01 STALL:端点以STALL分组响应所有的接收请求。 10 NAK:端点以NAK分组响应所有的接收请求。 11 VALID:端点可用于接收。 表158 端点类型编码 EP_TYPE[1:0] 描述 00 BULK:批量端点 01 CONTROL:控制端点 10 ISO:同步端点 11 INTERRUPT:中断端点 表159 端点特殊类型定义 EP_TYPE[1:0] 00 BULK 01 CONTROL 10 ISO 11 INTERRUPT EP_KIND意义 DBL_BUF:双缓冲端点 STATUS_OUT 未使用 未使用 表160 发送状态编码 STAT_RX[1:0] 描述 00 DISABLED:端点忽略所有的发送请求。 01 STALL:端点以STALL分组响应所有的发送请求。 10 NAK:端点以NAK分组响应所有的发送请求。 11 VALID:端点可用于发送。 418/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 USB全速设备接口(USB) STM32F10xxx参考手册 21.5.3 缓冲区描述表 15 rw 15 注: 31 15 15 虽然缓冲区描述表位于分组缓冲区内,但仍可将它看作是特殊的寄存器,用以配置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 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADDRn_TX[15:1] - rw rw rw rw rw rw rw rw rw rw rw rw rw rw - 位15:1 ADDRn_TX[15:1]:发送缓冲区地址 (Transmission buffer address) 此位记录了收到下一个IN分组时,需要发送的数据所在的缓冲区起始地址。 位0 因为分组缓冲区的地址必须按字对齐,所以此位必须为’0’。 发送数据字节数寄存器 n(USB_COUNTn_TX) 地址偏移:[USB_BTABLE] + n×16 + 4 USB本地地址:[USB_BTABLE] + n×8 + 2 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - COUNTn_TX[9:0] rw rw rw rw rw rw rw rw rw rw 位15:10 由于USB模块支持的最大数据分组为1023个字节,所以USB模块忽略这些位。 位9:0 COUNTn_TX[9:0]: 发送数据字节数 (Transmission byte count) 此位记录了收到下一个IN分组时要传输的数据字节数。 双缓冲区和同步IN端点有两个USB_COUNTn_TX寄存器:分别为USB_COUNTn_TX_1和 USB_COUNTn_TX_0,内容如下: 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 - COUNTn_TX_1[9:0] rw rw rw rw rw rw rw rw rw rw 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - COUNTn_TX_0[9:0] rw rw rw rw rw rw rw rw rw rw 接收缓冲区地址寄存器 n(USB_ADDRn_RX) 地址偏移:[USB_BTABLE] + n×16 + 8 USB本地地址:[USB_BTABLE] + n×8 + 4 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADDRn_RX[15:1] - rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw - 位15:1 ADDRn_RX[15:1]:接收缓冲区地址 (Reception buffer address) 此位记录了收到下一个OUT或者SETUP分组时,用于保存数据的缓冲区起始地址。 位0 因为分组缓冲区的地址按字对齐,所以此位必需为’0’。 419/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 USB全速设备接口(USB) STM32F10xxx参考手册 15 BLSIZE rw 注: 31 BLSIZE _1 rw 15 BLSIZE _0 rw 接收数据字节数寄存器 n(USB_COUNTn_RX) 地址偏移:[USB_BTABLE] + n×16 + 12 USB本地地址:[USB_BTABLE] + n×8 + 6 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 NUM_BLOCK[4:0] COUNTn_RX[9:0] rw rw rw rw rw r r r r r r r r r r 该寄存器用于存放接收分组时需要使用到的两个参数。高6位定义了接收分组缓冲区的大小,以 便USB模块检测缓冲区的溢出。低10位则用于USB模块记录实际接收到的字节数。由于有效位 数的限制,缓冲区的大小由分配到的存储区块数表示,而存储区块的大小则由所需的缓冲区大 小决定。缓冲区的大小在设备枚举过程中定义,由端点描述符的参数maxPacketSize表述。(具 体信息请参考”USB 2.0协议规范”) 位15 BL_SIZE:存储区块的大小 (Block size) 此位用于定义决定缓冲区大小的存储区块的大小。 如果BL_SIZE=0,存储区块的大小为2字节,因此能分配的分组缓冲区的大小范围为2-62个 字节。 如果BL_SIZE=1,存储区块的大小为32字节,因此能分配的分组缓冲区的大小范围为32-512 字节,符合USB协议定义的最大分组长度限制。 位14:10 NUM_BLOCK[4:0]:存储区块的数目 (Number of blocks) 此位用以记录分配的存储区块的数目,从而决定最终使用的分组缓冲区的大小。具体请参考表 161 位9:0 COUNTn_RX[9:0]:接收到的字节数 (Reception byte count) 此位由USB模块写入,用以记录端点收到的最新的OUT或SETUP分组的实际字节数。 双缓冲区和同步IN端点有两个USB_COUNTn_RX寄存器:分别为USB_COUNTn_RX_1和 USB_COUNTn_TX_0,内容如下: 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 NUM_BLOCK_1[4:0] COUNTn_RX_1[9:0] rw rw rw rw rw r r r r r r r r r r 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 NUM_BLOCK_0[4:0] COUNTn_RX_0[9:0] rw rw rw rw rw r r r r r r r r r r 表161 分组缓冲区大小的定义 NUM_BLOCK[4:0]的值 00000 00001 00010 00011 … 01111 10000 10001 10010 … 11110 11111 BL_SIZE=0时的 分组缓冲区大小 不允许使用 2字节 4字节 6字节 … 30字节 32字节 34字节 36字节 … 60字节 62字节 当BL_SIZE=1时的 分组缓冲区大小 32字节 64字节 96字节 128字节 … 512字节 保留 保留 保留 … 保留 保留 420/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 421/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 保留 EA[3:0] 0000000000000000 EA[3:0] 0000000000000000 EA[3:0] 0000000000000000 EA[3:0] 0000000000000000 EA[3:0] 0000000000000000 EA[3:0] 0000000000000000 EA[3:0] 0000000000000000 EA[3:0] 0000000000000000 保留 保留 保留 保留 保留 保留 保留 保留 USB_EP0R 复位值 USB_EP1R 复位值 USB_EP2R 复位值 USB_EP3R 复位值 USB_EP4R 复位值 USB_EP5R 复位值 USB_EP6R 复位值 USB_EP7R 复位值 00h 04h 08h 0Ch 10h 14h 18h 1Ch 20h~ 3Fh CTR_RX DTOG_RX STAT_RX [1:0] SETUP EPTYPE [1:0] EP_KIND CTR_TX DTOG_TX STAT_TX [1:0] CTR_RX DTOG_RX STAT_RX [1:0] SETUP EPTYPE [1:0] EP_KIND CTR_TX DTOG_TX STAT_TX [1:0] CTR_RX DTOG_RX STAT_RX [1:0] SETUP EPTYPE [1:0] EP_KIND CTR_TX DTOG_TX STAT_TX [1:0] CTR_RX DTOG_RX STAT_RX [1:0] SETUP EPTYPE [1:0] EP_KIND CTR_TX DTOG_TX STAT_TX [1:0] CTR_RX DTOG_RX STAT_RX [1:0] SETUP EPTYPE [1:0] EP_KIND CTR_TX DTOG_TX STAT_TX [1:0] CTR_RX DTOG_RX STAT_RX [1:0] SETUP EPTYPE [1:0] EP_KIND CTR_TX DTOG_TX STAT_TX [1:0] CTR_RX DTOG_RX STAT_RX [1:0] SETUP EPTYPE [1:0] EP_KIND CTR_TX DTOG_TX STAT_TX [1:0] 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CTR_RX 15 DTOG_RX 14 STAT_RX 13 [1:0] 12 SETUP 11 EPTYPE 10 [1:0] 9 EP_KIND 8 CTR_TX 7 DTOG_TX 6 STAT_TX 5 [1:0] 4 3 2 1 0 寄存器 偏移 USB全速设备接口(USB) 21.5.4 USB寄存器映像 表162 USB寄存器映像和复位值 STM32F10xxx参考手册 FRES 0 USB全速设备接口(USB) 偏移 寄存器 23 24 25 26 27 28 29 30 31 USB_CNTR 40h 复位值 保留 USB_ISTR 44h 复位值 保留 USB_FNR 48h 复位值 保留 USB_DADDR 4Ch 复位值 保留 USB_BTABLE 50h 复位值 保留 关于寄存器的起始地址,请参见表1。 22 21 20 19 18 17 16 RXDP CTR CTRM 15 STM32F10xxx参考手册 PDWN 1 LPMODE 2 FSUSP 3 RESUME 4 5 6 7 ESOFM 8 SOFM 9 RESETM 10 SUSPM 11 WKUPM 12 ERRM 13 PMAOVR PMAOVRM 14 保留 RESET 0000000000000011 ESOF SOF SUSP WKUP ERR 保留 DIR EP_ID [3:0] 0000000000000000 LCK RXDM LSOF [1:0] FN[10:0] 00000XXXXXXXXXXX EF ADD[6:0] 保留 00000000 BTABLE[15:3] 保留 0000000000000 422/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 22 控制器局域网(bxCAN) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 本章描述的模块仅适用于互联型产品和增强型STM32F103xx系列。 22.1 bxCAN简介 bxCAN是基本扩展CAN(Basic Extended CAN)的缩写,它支持CAN协议2.0A和2.0B。它的设计 目标是,以最小的CPU负荷来高效处理大量收到的报文。它也支持报文发送的优先级要求(优先 级特性可软件配置)。 对于安全紧要的应用,bxCAN提供所有支持时间触发通信模式所需的硬件功能。 22.2 bxCAN主要特点 ● 支持CAN协议2.0A和2.0B主动模式 ● 波特率最高可达1兆位/秒 ● 支持时间触发通信功能 发送 ● 3个发送邮箱 ● 发送报文的优先级特性可软件配置 ● 记录发送SOF时刻的时间戳 接收 ● 3级深度的2个接收FIFO ● 可变的过滤器组: ─ 在互联型产品中,CAN1和CAN2分享28个过滤器组 ─ 其它STM32F103xx系列产品中有14个过滤器组 ● 标识符列表 ● FIFO溢出处理方式可配置 ● 记录接收SOF时刻的时间戳 时间触发通信模式 ● 禁止自动重传模式 ● 16位自由运行定时器 ● 可在最后2个数据字节发送时间戳 管理 ● 中断可屏蔽 ● 邮箱占用单独1块地址空间,便于提高软件效率 双CAN ● CAN1:是主bxCAN,它负责管理在从bxCAN和512字节的SRAM存储器之间的通信 ● CAN2:是从bxCAN,它不能直接访问SRAM存储器 ● 这2个bxCAN模块共享512字节的SRAM存储器(见图195) 423/754 参照2009年12月 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 接收FIFO 共有2个接收FIFO,每个FIFO都可以存放3个完整的报文。它们完全由硬件来管理。 图195 双CAN框图(互联型产品) 注:CAN2 的开始滤波器编号 n 是通过写入 CAN FMR 寄存器的 CAN2SB[5:0]配置的。 425/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 22.4 bxCAN工作模式 bxCAN有3个主要的工作模式:初始化、正常和睡眠模式。在硬件复位后,bxCAN工作在睡眠 模式以节省电能,同时CANTX引脚的内部上拉电阻被激活。软件通过对CAN_MCR寄存器的 INRQ或SLEEP位置’1’,可以请求bxCAN进入初始化或睡眠模式。一旦进入了初始化或睡眠模 式,bxCAN就对CAN_MSR寄存器的INAK或SLAK位置’1’来进行确认,同时内部上拉电阻被禁 用。当INAK和SLAK位都为’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。 在对SLEEP位清’0’后,睡眠模式的退出必须与CAN总线同步,请参考图196:bxCAN工作模式 。当硬件对SLAK位清’0’时,就确认了睡眠模式的退出。 426/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) 图196 bxCAN工作模式 STM32F10xxx参考手册 注: 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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) 图198 bxCAN工作在环回模式 STM32F10xxx参考手册 环回模式可用于自测试。为了避免外部的影响,在环回模式下CAN内核忽略确认错误(在数据/远 程帧的确认位时刻,不检测是否有显性位)。在环回模式下,bxCAN在内部把Tx输出回馈到Rx输 入上,而完全忽略CANRX引脚的实际状态。发送的报文可以在CANTX引脚上检测到。 22.5.3 环回静默模式 图199 bxCAN工作在环回静默模式 通过对CAN_BTR寄存器的LBKM和SILM位同时置’1’,可以选择环回静默模式。该模式可用于 “热自测试”,即可以像环回模式那样测试bxCAN,但却不会影响CANTX和CANRX所连接的 整个CAN系统。在环回静默模式下,CANRX引脚与CAN总线断开,同时CANTX引脚被驱动到 隐性位状态。 22.6 STM32F10xxx处于调试模式时 当微控制器处于调试模式时,Cortex-M3核心处于暂停状态,依据下述配置位的状态,bxCAN可 以继续正常工作或停止工作: ● 调试(DBG)模块中CAN1的DBG_CAN1_STOP位或CAN2的DBG_CAN2_STOP位。详见第 29.16.2节:支持定时器、看门狗、bxCAN和I2C的调试。 ● 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寄存器的RQCP和TXOK位置1,来表明一次成功发送。 428/754 参照2009年12月 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’,同时发送的结果反映在TXOK、ALST和TERR位上。 图200 发送邮箱状态 429/754 参照2009年12月 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节:标识符过滤。 图201 接收FIFO状态 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变 430/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 为挂号_3状态(FMP[1:0]=11b)。此时,软件必须对RFOM位设置1来释放邮箱,以便FIFO可以 有空间来存放下一个有效的报文;否则,下一个有效的报文到来时就会导致一个报文的丢失。 参见22.7.5节:报文存储 溢出 当FIFO处于挂号_3状态(即FIFO的3个邮箱都是满的),下一个有效的报文就会导致溢出,并且 一个报文会丢失。此时,硬件对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开销。每个过滤器组x由2个32位寄存器,CAN_FxR0和 CAN_FxR1组成。 可变的位宽 每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求。根据位宽的不同,每个过 滤器组可提供: ● 1个32位过滤器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位 ● 2个16位过滤器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位 可参见图202。 此外过滤器可配置为,屏蔽位模式和标识符列表模式。 屏蔽位模式 在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照 “必须匹配”或“不用关心”处理。 标识符列表模式 在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一 个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟过滤器标识符 相同。 过滤器组位宽和模式的设置 过 滤 器 组 可 以 通 过 相 应 的 CAN_FMR 寄 存 器 配 置 。 在 配 置 一 个 过 滤 器 组 前 , 必 须 通 过 清 除 CAN_FAR寄存器的FACT位,把它设置为禁用状态。通过设置CAN_FS1R的相应FSCx位,可 431/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 以配置一个过滤器组的位宽,请参见图202。通过CAN_FMR的FBMx位,可以配置对应的屏蔽/ 标识符寄存器的标识符列表模式或屏蔽位模式。 为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。 为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。 应用程序不用的过滤器组,应该保持在禁用状态。 过滤器组中的每个过滤器,都被编号为(叫做过滤器号)从0开始,到某个最大数值-取决于过滤 器组的模式和位宽的设置。 关于过滤器配置,参见下图。 图202 过滤器组位宽设置-寄存器组织 过滤器匹配序号 一 旦 收 到 的 报 文 被 存 入 FIFO , 就 可 被 应 用 程 序 访 问 。 通 常 情 况 下 , 报 文 中 的 数 据 被 拷 贝 到 SRAM中;为了把数据拷贝到合适的位置,应用程序需要根据报文的标识符来辨别不同的数 据。bxCAN提供了过滤器匹配序号,以简化这一辨别过程。 根据过滤器优先级规则,过滤器匹配序号和报文一起,被存入邮箱中。因此每个收到的报文, 都有与它相关联的过滤器匹配序号。 过滤器匹配序号可以通过下面两种方式来使用: ● 把过滤器匹配序号跟一系列所期望的值进行比较 ● 把过滤器匹配序号当作一个索引来访问目标地址 对于标识符列表模式下的过滤器(非屏蔽方式的过滤器),软件不需要直接跟标识符进行比较。 对于屏蔽位模式下的过滤器,软件只须对需要的那些屏蔽位(必须匹配的位)进行比较即可。 432/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 在给过滤器编号时,并不考虑过滤器组是否为激活状态。另外,每个FIFO各自对其关联的过滤 器进行编号。请参考下图的例子。 图203 过滤器编号的例子 过滤器优先级规则 根据过滤器的不同配置,有可能一个报文标识符能通过多个过滤器的过滤;在这种情况下,存 放在接收邮箱中的过滤器匹配序号,根据下列优先级规则来确定: ● 位宽为32位的过滤器,优先级高于位宽为16位的过滤器 ● 对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式 ● 位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高 433/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) 图204 过滤器机制的例子 STM32F10xxx参考手册 上面的例子说明了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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 面收到的报文留出存储空间。过滤器匹配序号存放在CAN_RDTxR寄存器的FMI域中。16位的时 间戳存放在CAN_RDTxR寄存器的TIME[15:0]域中。 表164 接收邮箱寄存器列表 相对接收邮箱基地址的偏移量 寄存器名 图205 0 4 8 12 CAN错误状态图 CAN_RIxR CAN_RDTxR CAN_RDLxR CAN_RDHxR 22.7.6 出错管理 注: CAN协议描述的出错管理,完全由硬件通过发送错误计数器(CAN_ESR寄存器里的TEC域),和 接收错误计数器(CAN_ESR寄存器里的REC域)来实现,其值根据错误的情况而增加或减少。关 于TEC和REC管理的详细信息,请参考CAN标准。 软件可以读出它们的值来判断CAN网络的稳定性。 此 外 , CAN_ESR 寄 存 器 提 供 了 当 前 错 误 状 态 的 详 细 信 息 。 通 过 设 置 CAN_IER 寄 存 器 ( 比 如 ERRIE位),当检测到出错时软件可以灵活地控制中断的产生。 离线恢复 当TEC大于255时,bxCAN就进入离线状态,同时CAN_ESR寄存器的BOFF位被置’1’。在离线 状态下,bxCAN无法接收和发送报文。 根据CAN_MCR寄存器中ABOM位的设置,bxCAN可以自动或在软件的请求下,从离线状态恢 复(变为错误主动状态)。在这两种情况下,bxCAN都必须等待一个CAN标准所描述的恢复过程 (CAN RX引脚上检测到128次11个连续的隐性位)。 如果ABOM位为’1’,bxCAN进入离线状态后,就自动开启恢复过程。 如果ABOM位为’0’,软件必须先请求bxCAN进入然后再退出初始化模式,随后恢复过程才被开 启。 在初始化模式下,bxCAN不会监视CAN RX引脚的状态,这样就不能完成恢复过程。为了完成 恢复过程,bxCAN必须工作在正常模式。 435/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 22.7.7 位时间特性 注: 位时间特性逻辑通过采样来监视串行的CAN总线,并且通过与帧起始位的边沿进行同步,及通 过与后面的边沿进行重新同步,来调整其采样点。 它的操作可以简单解释为,如下所述把名义上的每位时间分为3段: ● 同步段(SYNC_SEG):通常期望位的变化发生在该时间段内。其值固定为1个时间单元(1 x tCAN)。 ● 时间段1(BS1):定义采样点的位置。它包含CAN标准里的PROP_SEG和PHASE_SEG1。 其值可以编程为1到16个时间单元,但也可以被自动延长,以补偿因为网络中不同节点的频 率差异所造成的相位的正向漂移。 ● 时间段2(BS2):定义发送点的位置。它代表CAN标准里的PHASE_SEG2。其值可以编程为 1到8个时间单元,但也可以被自动缩短以补偿相位的负向漂移。 重新同步跳跃宽度(SJW)定义了,在每位中可以延长或缩短多少个时间单元的上限。其值可以编 程为1到4个时间单元。 有效跳变被定义为,当bxCAN自己没有发送隐性位时,从显性位到隐性位的第1次转变。 如果在时间段1(BS1)而不是在同步段(SYNC_SEG)检测到有效跳变,那么BS1的时间就被延长 最多SJW那么长,从而采样点被延迟了。 相反如果在时间段2(BS2)而不是在SYNC_SEG检测到有效跳变,那么BS2的时间就被缩短最多 SJW那么长,从而采样点被提前了。 为了避免软件的编程错误,对位时间特性寄存器(CAN_BTR)的设置,只能在bxCAN处于初始化 状态下进行。 关于CAN位时间特性和重同步机制的详细信息,请参考ISO11898标准。 图206 位时序 436/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) 图207 各种CAN帧 STM32F10xxx参考手册 437/754 参照2009年12月 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 参照2009年12月 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_FSxR和CAN_FFAR寄存器。 22.9.2 CAN控制和状态寄存器 31 15 RESET rs 有关寄存器说明中的缩写,参见1.1节。 CAN主控制寄存器 (CAN_MCR) 地址偏移量: 0x00 复位值: 0x0001 0002 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 DBF rw 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 TTCM ABOM AWUM NART RFLM TXFP SLEEP INRQ res rw rw rw rw rw rw rw rw 位31:15 位16 位15 位14:8 位7 位6 保留,硬件强制为0。 DBF:调试冻结 (Debug freeze) 0:在调试时,CAN照常工作 1:在调试时,冻结CAN的接收/发送。仍然可以正常地读写和控制接收FIFO。 RESET: bxCAN 软件复位 (bxCAN software master reset) 0:本外设正常工作; 1:对bxCAN进行强行复位,复位后bxCAN进入睡眠模式(FMP位和CAN_MCR寄存器被初始化 为其复位值)。此后硬件自动对该位清’0’。 保留,硬件强制为0。 TTCM: 时间触发通信模式 (Time triggered communication mode) 0:禁止时间触发通信模式; 1:允许时间触发通信模式。 注: 要想了解关于时间触发通信模式的更多信息,请参考22.7.2:时间触发通信模式。 ABOM: 自动离线(Bus-Off)管理 (Automatic bus-off management) 该位决定CAN硬件在什么条件下可以退出离线状态。 0:离线状态的退出过程是,软件对CAN_MCR寄存器的INRQ位进行置’1’随后清’0’后,一旦硬 件检测到128次11位连续的隐性位,则退出离线状态; 1:一旦硬件检测到128次11位连续的隐性位,则自动退出离线状态。 注: 关于离线状态的更多信息,请参考22.7.6:出错管理。 439/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 位5 AWUM: 自动唤醒模式 (Automatic wakeup mode) 该位决定CAN处在睡眠模式时由硬件还是软件唤醒 0:睡眠模式通过清除CAN_MCR寄存器的SLEEP位,由软件唤醒; 1:睡眠模式通过检测CAN报文,由硬件自动唤醒。唤醒的同时,硬件自动对CAN_MSR寄存 器的SLEEP和SLAK位清’0’ 。 位4 NART: 禁止报文自动重传 (No automatic retransmission) 0:按照CAN标准,CAN硬件在发送报文失败时会一直自动重传直到发送成功; 1:CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失)。 位3 RFLM: 接收FIFO锁定模式 (Receive FIFO locked mode) 0:在接收溢出时FIFO未被锁定,当接收FIFO的报文未被读出,下一个收到的报文会覆盖原有 的报文; 1:在接收溢出时FIFO被锁定,当接收FIFO的报文未被读出,下一个收到的报文会被丢弃。 位2 TXFP: 发送FIFO优先级 (Transmit FIFO priority) 当有多个报文同时在等待发送时,该位决定这些报文的发送顺序 0:优先级由报文的标识符来决定; 1:优先级由发送请求的顺序来决定。 位1 SLEEP: 睡眠模式请求 (Sleep mode request) 软件对该位置’1’可以请求CAN进入睡眠模式,一旦当前的CAN活动(发送或接收报文)结束, CAN就进入睡眠。 软件对该位清’0’使CAN退出睡眠模式。 当设置了AWUM位且在CAN Rx信号中检测出SOF位时,硬件对该位清’0’。 在复位后该位被置’1’,即CAN在复位后处于睡眠模式。 位0 INRQ: 初始化请求 (Initialization request) 软件对该位清’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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 位31:12 位11 位10 位9 位8 位7:5 RX SAMP RXM TXM 保留 r r r r 保留位,硬件强制为0 RX:CAN接收电平 (CAN Rx signal) 该位反映CAN接收引脚(CAN_RX)的实际电平。 SAMP:上次采样值 (Last sample point) CAN接收引脚的上次采样值(对应于当前接收位的值)。 RXM:接收模式 (Receive mode) 该位为’1’表示CAN当前为接收器。 TXM:发送模式 (Transmit mode) 该位为’1’表示CAN当前为发送器。 保留位,硬件强制为0。 SLAKI WKUI ERRI SLAK INAK rc w1 rc w1 rc w1 r r 440/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 31 LOW2 r 15 ABRQ1 rs 位4 SLAKI:睡眠确认中断 (Sleep acknowledge interrupt) 当SLKIE=1,一旦CAN进入睡眠模式硬件就对该位置’1,紧接着相应的中断被触发。当设置该 位为’1’时,如果设置了CAN_IER寄存器中的SLKIE位,将产生一个状态改变中断。 软件可对该位清’0’,当SLAK位被清’0’时硬件也对该位清’0’。 注: 当SLKIE=0, 不应该查询该位,而应该查询SLAK位来获知睡眠状态。 位3 WKUI:唤醒中断挂号 (Wakeup interrupt) 当CAN处于睡眠状态,一旦检测到帧起始位(SOF),硬件就置该位为’1’;并且如果CAN_IER寄 存器的WKUIE位为’1’,则产生一个状态改变中断。 该位由软件清’0’。 位2 ERRI:出错中断挂号 (Error interrupt) 当检测到错误时,CAN_ESR寄存器的某位被置’1’,如果CAN_IER寄存器的相应中断使能位也 被置’1’时,则硬件对该位置’1’;如果CAN_IER寄存器的ERRIE位为’1’,则产生状态改变中断。 该位由软件清’0’。 位1 SLAK:睡眠模式确认 该位由硬件置’1’,指示软件CAN模块正处于睡眠模式。 该位是对软件请求进入睡眠模式的确认 (对CAN_MCR寄存器的SLEEP位置’1’)。 当CAN退出睡眠模式时硬件对该位清’0’ (需要跟CAN总线同步)。 这里跟CAN总线同步是指,硬 件需要在CAN的RX引脚上检测到连续的11位隐性位。 注: 通过软件或硬件对CAN_MCR的SLEEP位清’0’,将启动退出睡眠模式的过程。有关清除 SLEEP位的详细信息,参见CAN_MCR寄存器的AWUM位的描述。 位0 INAK:初始化确认 该位由硬件置’1’,指示软件CAN模块正处于初始化模式。 该位是对软件请求进入初始化模式的 确认(对CAN_MCR寄存器的INRQ位置’1’)。 当CAN退出初始化模式时硬件对该位清’0’ (需要跟CAN总线同步)。这里跟CAN总线同步是指, 硬件需要在CAN的RX引脚上检测到连续的11位隐性位。 CAN发送状态寄存器 (CAN_TSR) 地址偏移量: 0x08 复位值: 0x1C00 0000 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 LOW1 LOW0 TME2 TME1 TME0 CODE[1:0] ABRQ2 保留 TERR2 ALST2 TXOK2 RQCP2 r r r r r r 14 13 12 11 10 9 r rs res rc w1 rc w1 rc w1 rc w1 8 7 6 5 4 3 2 1 0 保留 TERR1 ALST1 TXOK1 RQCP1 ABRQ0 res rc w1 rc w1 rc w1 rc w1 rs 保留 TERR0 ALST0 TXOK0 RQCP0 res rc w1 rc w1 rc w1 rc w1 位31 位30 LOW2: 邮箱2最低优先级标志 (Lowest priority flag for mailbox 2) 当多个邮箱在等待发送报文,且邮箱2的优先级最低时,硬件对该位置’1’。 LOW1: 邮箱1最低优先级标志 (Lowest priority flag for mailbox 1) 当多个邮箱在等待发送报文,且邮箱1的优先级最低时,硬件对该位置’1’。 位29 位28 位27 位26 LOW0: 邮箱0最低优先级标志 (Lowest priority flag for mailbox 0) 当多个邮箱在等待发送报文,且邮箱0的优先级最低时,硬件对该位置’1’。 注:如果只有1个邮箱在等待,则LOW[2:0]被清’0’。 TME2: 发送邮箱2空 (Transmit mailbox 2 empty) 当邮箱2中没有等待发送的报文时,硬件对该位置’1’。 TME1: 发送邮箱1空 (Transmit mailbox 1 empty) 当邮箱1中没有等待发送的报文时,硬件对该位置’1’。 TME0: 发送邮箱0空 (Transmit mailbox 0 empty) 当邮箱0中没有等待发送的报文时,硬件对该位置’1’。 441/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 位25:24 位23 位22:20 位19 位18 位17 位16 位15 位14:12 位11 位10 位9 位8 位7 位6:4 位3 位2 CODE[1:0]: 邮箱号 (Mailbox code) 当有至少1个发送邮箱为空时,这2位表示下一个空的发送邮箱号。 当所有的发送邮箱都为空时,这2位表示优先级最低的那个发送邮箱号。 ABRQ2: 邮箱2中止发送 (Abort request for mailbox 2) 软件对该位置’1’,可以中止邮箱2的发送请求,当邮箱2的发送报文被清除时硬件对该位清’0’。 如果邮箱2中没有等待发送的报文,则对该位置’1’没有任何效果。 保留位,硬件强制其值为0 TERR2: 邮箱2发送失败 (Transmission error of mailbox 2) 当邮箱2因为出错而导致发送失败时,对该位置’1’。 ALST2: 邮箱2仲裁丢失 (Arbitration lost for mailbox 2) 当邮箱2因为仲裁丢失而导致发送失败时,对该位置’1’。 TXOK2: 邮箱2发送成功 (Transmission OK of mailbox 2) 每次在邮箱2进行发送尝试后,硬件对该位进行更新: 0:上次发送尝试失败; 1:上次发送尝试成功。 当邮箱2的发送请求被成功完成后,硬件对该位置’1’。请参见图200。 RQCP2: 邮箱2请求完成 (Request completed mailbox 2) 当上次对邮箱2的请求(发送或中止)完成后,硬件对该位置’1’。 软件对该位写’1’可以对其清’0’;当硬件接收到发送请求时也对该位清’0’(CAN_TI2R 寄存器的 TXRQ位被置’1’)。 该位被清’0’时,邮箱2的其它发送状态位(TXOK2, ALST2和TERR2)也被清’0’。 ABRQ1: 邮箱1中止发送 (Abort request for mailbox 1) 软件对该位置’1’,可以中止邮箱1的发送请求,当邮箱1的发送报文被清除时硬件对该位清’0’。 如果邮箱1中没有等待发送的报文,则对该位置’1’没有任何效果。 保留位,硬件强制其值为0 TERR1: 邮箱1发送失败 (Transmission error of mailbox 1) 当邮箱1因为出错而导致发送失败时,对该位置’1’。 ALST1: 邮箱1仲裁丢失 (Arbitration lost for mailbox 1) 当邮箱1因为仲裁丢失而导致发送失败时,对该位置’1’。 TXOK1: 邮箱1发送成功 (Transmission OK of mailbox 1) 每次在邮箱1进行发送尝试后,硬件对该位进行更新: 0:上次发送尝试失败; 1:上次发送尝试成功。 当邮箱1的发送请求被成功完成后,硬件对该位置’1’。请参见图200。 RQCP1: 邮箱1请求完成 (Request completed mailbox 1) 当上次对邮箱1的请求(发送或中止)完成后,硬件对该位置’1’。 软件对该位写’1’可以对其清’0’;当硬件接收到发送请求时也对该位清’0’(CAN_TI1R 寄存器的 TXRQ位被置’1’)。 该位被清’0’时,邮箱1的其它发送状态位(TXOK1, ALST1和TERR1)也被清’0’。 ABRQ0: 邮箱0中止发送 (Abort request for mailbox 0) 软件对该位置’1’可以中止邮箱0的发送请求,当邮箱0的发送报文被清除时硬件对该位清’0’。 如果邮箱0中没有等待发送的报文,则对该位置1没有任何效果。 保留位,硬件强制其值为0 TERR0: 邮箱0发送失败 (Transmission error of mailbox 0) 当邮箱0因为出错而导致发送失败时,对该位置’1’。 ALST0: 邮箱0仲裁丢失 (Arbitration lost for mailbox 0) 当邮箱0因为仲裁丢失而导致发送失败时,对该位置’1’。 442/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 位1 TXOK0: 邮箱0发送成功 (Transmission OK of mailbox 0) 每次在邮箱0进行发送尝试后,硬件对该位进行更新: 0:上次发送尝试失败; 1:上次发送尝试成功。 当邮箱0的发送请求被成功完成后,硬件对该位置’1’。请参见图200。 位0 RQCP1: 邮箱0请求完成 (Request completed mailbox 0) 当上次对邮箱0的请求(发送或中止)完成后,硬件对该位置’1’。 软件对该位写’1’可以对其清’0’;当硬件接收到发送请求时也对该位清’0’(CAN_TI0R 寄存器的 TXRQ位被置’1’)。 该位被清’0’时,邮箱0的其它发送状态位(TXOK0, ALST0和TERR0)也被清’0’。 CAN接收FIFO 0寄存器 (CAN_RF0R) 地址偏移量: 0x0C 复位值: 0x00 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 保留 RFOM0 FOVR0 FULL0 保留 FMP0[1:0] res rs rc w1 rc w1 r r 位31:6 位5 位4 位3 位2 位1:0 保留位,硬件强制为0 RFOM0: 释放接收FIFO 0输出邮箱 (Release FIFO 0 output mailbox) 软件通过对该位置’1’来释放接收FIFO的输出邮箱。如果接收FIFO为空,那么对该位置’1’没有任 何效果,即只有当FIFO中有报文时对该位置’1’才有意义。如果FIFO中有2个以上的报文,由于 FIFO的特点,软件需要释放输出邮箱才能访问第2个报文。 当输出邮箱被释放时,硬件对该位清’0’。 FOVR0: FIFO 0溢出 (FIFO 0 overrun) 当FIFO 0已满,又收到新的报文且报文符合过滤条件,硬件对该位置’1’。 该位由软件清’0’。 FULL0: FIFO 0满 (FIFO 0 full) 当FIFO 0中有3个报文时,硬件对该位置’1’。 该位由软件清’0’。 保留位,硬件强制其值为0 FMP0[1:0]: FIFO 0 报文数目 (FIFO 0 message pending) FIFO 0报文数目这2位反映了当前接收FIFO 0中存放的报文数目。 每当1个新的报文被存入接收FIFO 0,硬件就对FMP0加1。 每当软件对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 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 RFOM1 FOVR1 FULL1 保留 FMP1[1:0] rs rc w1 rc w1 r r 位31:6 保留位,硬件强制为0 443/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 31 15 ERRIE rw 位5 位4 位3 位2 位1:0 RFOM1: 释放接收FIFO 1输出邮箱 (Release FIFO 1 output mailbox) 软件通过对该位置’1’来释放接收FIFO的输出邮箱。如果接收FIFO为空,那么对该位置’1’没有任 何效果,即只有当FIFO中有报文时对该位置’1’才有意义。如果FIFO中有2个以上的报文,由于 FIFO的特点,软件需要释放输出邮箱才能访问第2个报文。 当输出邮箱被释放时,硬件对该位清’0’。 FOVR1: FIFO 1 溢出 (FIFO 1 overrun) 当FIFO 1已满,又收到新的报文且报文符合过滤条件,硬件对该位置’1’。 该位由软件清’0’。 FULL1: FIFO 1 满 (FIFO 1 full) 当FIFO 1中有3个报文时,硬件对该位置’1’。 该位由软件清’0’。 保留位,硬件强制其值为0 FMP1[1:0]: FIFO 1报文数目 (FIFO 1 message pending) FIFO 1报文数目这2位反映了当前接收FIFO 1中存放的报文数目。 每当1个新的报文被存入接收FIFO 1,硬件就对FMP1加1。 每当软件对RFOM1位写1来释放输出邮箱,FMP1就被减1,直到其为0。 CAN中断使能寄存器 (CAN_IER) 地址偏移量: 0x14 复位值: 0x0000 0000 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 SLKIE WKUIE rw rw 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 res LECIE BOFIE EPVIE EWGIE 保留 FOVIE1 FFIE1 FMPIE1 FOVIE0 FFIE0 FMPIE0 TMEIE rw rw rw rw res rw rw rw rw rw rw rw 位31:18 位17 位16 位15 位14:12 位11 位10 位9 保留位,硬件强制为0 SLKIE:睡眠中断使能 (Sleep interrupt enable) 0:当SLAKI位被置’1’时,不产生中断; 1:当SLAKI位被置’1’时,产生中断。 WKUIE: 唤醒中断使能 (Wakeup interrupt enable) 0:当WKUI位被置’1’时,不产生中断; 1:当WKUI位被置’1’时,产生中断。 ERRIE: 错误中断使能 (Error interrupt enable) 0:当CAN_ESR寄存器有错误挂号时,不产生中断; 1:当CAN_ESR寄存器有错误挂号时,产生中断。 保留位,硬件强制为0。 LECIE: 上次错误号中断使能 (Last error code interrupt enable) 0:当检测到错误,硬件设置LEC[2:0]时,不设置ERRI位; 1:当检测到错误,硬件设置LEC[2:0]时,设置ERRI位为’1’。 BOFIE: 离线中断使能 (Bus-off interrupt enable) 0:当BOFF位被置’1’时,不设置ERRI位; 1:当BOFF位被置’1’时,设置ERRI位为’1’。 EPVIE: 错误被动中断使能 (Error Passive Interrupt Enable) 0:当EPVF位被置’1’时,不设置ERRI位; 1:当EPVF位被置’1’时,设置ERRI位为’1’。 444/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 位8 EWGIE: 错误警告中断使能 (Error warning interrupt enable) 0:当EWGF位被置’1’时,不设置ERRI位; 1:当EWGF位被置’1’时,设置ERRI位为’1’。 位7 保留位,硬件强制为0 位6 FOVIE1: FIFO 1溢出中断使能 (FIFO overrun interrupt enable) 0:当FIFO 1的FOVR位被置’1’时,不产生中断; 1:当FIFO 1的FOVR位被置’1’时,产生中断。 位5 FFIE1: FIFO 1满中断使能 (FIFO full interrupt enable) 0:当FIFO 1的FULL位被置’1’时,不产生中断; 1:当FIFO 1的FULL位被置’1’时,产生中断。 位4 FMPIE1: FIFO 1消息挂号中断使能 (FIFO message pending interrupt enable) 0:当FIFO 1的FMP[1:0]位为非0时,不产生中断; 1:当FIFO 1的FMP[1:0]位为非0时,产生中断。 位3 FOVIE0: FIFO 0溢出中断使能 (FIFO overrun interrupt enable) 0:当FIFO 0的FOVR位被置’1’时,不产生中断; 1:当FIFO 0的FOVR位被置’1’时,产生中断。 位2 FFIE0: FIFO 0满中断使能 (FIFO full interrupt enable) 0:当FIFO 0的FULL位被置’1’时,不产生中断; 1:当FIFO 0的FULL位被置’1’时,产生中断。 位1 FMPIE0: FIFO 0消息挂号中断使能 (FIFO message pending interrupt enable) 0:当FIFO 0的FMP[1:0]位为非0时,不产生中断; 1:当FIFO 0的FMP[1:0]位为非0时,产生中断。 位0 TMEIE: 发送邮箱空中断使能 (Transmit mailbox empty interrupt enable) 0:当RQCPx位被置’1’时,不产生中断; 1:当RQCPx位被置’1’时,产生中断。 注: 请参考22.8节bxCAN中断。 CAN错误状态寄存器 (CAN_ESR) 地址偏移量: 0x18 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 REC[7:0] TEC[7:0] r r r r r r r r r r r r r r r r 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 LEC[2:0] 保留 BOFF EPVF WEGF rw rw rw r r r 位31:24 位23:16 位15:7 REC[7:0]: 接收错误计数器 (Receive error counter) 这个计数器按照CAN协议的故障界定机制的接收部分实现。按照CAN的标准,当接收出错时, 根据出错的条件,该计数器加1或加8;而在每次接收成功后,该计数器减1,或当该计数器的 值大于127时,设置它的值为120。当该计数器的值超过127时,CAN进入错误被动状态。 TEC[7:0]: 9位发送错误计数器的低8位 (Least significant byte of the 9-bit transmit error counter) 与上面相似,这个计数器按照CAN协议的故障界定机制的发送部分实现。 保留位,硬件强制为0。 445/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 位6:4 位3 位2 位1 位0 LEC[2:0]: 上次错误代码 (Last error code) 在检测到CAN总线上发生错误时,硬件根据出错情况设置。当报文被正确发送或接收后,硬件 清除其值为’0’。 硬件没有使用错误代码7,软件可以设置该值,从而可以检测代码的更新。 000: 没有错误; 001: 位填充错; 010: 格式(Form)错; 011: 确认(ACK)错; 100: 隐性位错; 101: 显性位错; 110: CRC错; 111: 由软件设置。 保留位,硬件强制为0。 BOFF: 离线标志 (Bus-off flag) 当进入离线状态时,硬件对该位置’1’。当发送错误计数器TEC溢出,即大于255时,CAN进入 离线状态。请参考22.7.6。 EPVF: 错误被动标志 (Error passive flag) 当出错次数达到错误被动的阈值时,硬件对该位置’1’。 (接收错误计数器或发送错误计数器的值>127)。 EWGF: 错误警告标志 (Error warning flag) 当出错次数达到警告的阈值时,硬件对该位置’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 保留 SJW[1:0] 保留 TS2[2:0] TS1[3:0] rw rw res rw rw res rw rw rw rw rw rw rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 BRP[9:0] res rw rw rw rw rw rw rw rw rw rw 位31 位30 位29:26 位25:24 位23 位22:20 SILM: 静默模式(用于调试) (Silent mode (debug)) 0: 正常状态; 1: 静默模式。 LBKM: 环回模式(用于调试) (Loop back mode (debug)) 0: 禁止环回模式; 1: 允许环回模式。 保留位,硬件强制为0。 SJW[1:0]: 重新同步跳跃宽度 (Resynchronization jump width) 为了重新同步,该位域定义了CAN硬件在每位中可以延长或缩短多少个时间单元的上限。 tRJW = tCAN x (SJW[1:0] + 1)。 保留位,硬件强制为0。 TS2[2:0]: 时间段2 (Time segment 2) 该位域定义了时间段2占用了多少个时间单元 tBS2 = tCAN x (TS2[2:0] + 1)。 446/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 位19:16 位15:10 位9:0 TS1[3:0]: 时间段1 (Time segment 1) 该位域定义了时间段1占用了多少个时间单元 tBS1 = tCAN x (TS1[3:0] + 1) 关于位时间特性的详细信息,请参考22.7.7节位时间特性。 保留位,硬件强制其值为0。 BRP[9:0]: 波特率分频器 (Baud rate prescaler) 该位域定义了时间单元(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个寄存器。 注: 31 rw 15 rw 发送邮箱标识符寄存器 (CAN_TIxR) (x=0..2) 地址偏移量: 0x180,0x190,0x1A0 复位值: 0xXXXX XXXX,X=未定义位(除了第0位,复位时TXRQ=0) 1 当其所属的邮箱处在等待发送的状态时,该寄存器是写保护的 2 该寄存器实现了发送请求控制功能(第0位)-复位值为0 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 STID[10:0]/EXID[28:18] EXID[17:13] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 EXID[12:0] IDE RTR TXRQ rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:21 位20:3 STID[10:0]/EXID[28:18]: 标 准 标 识 符 或 扩 展 标 识 符 (Standard identifier or extended identifier) 依据IDE位的内容,这些位或是标准标识符,或是扩展身份标识的高字节。 EXID[17:0]: 扩展标识符 (Extended identifier) 扩展身份标识的低字节。 447/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 位2 IDE: 标识符选择 (Identifier extension) 该位决定发送邮箱中报文使用的标识符类型 0:使用标准标识符; 1:使用扩展标识符。 位1 RTR: 远程发送请求 (Remote transmission request) 0:数据帧; 1:远程帧。 位0 TXRQ: 发送数据请求 (Transmit mailbox request) 由软件对其置’1’,来请求发送邮箱的数据。当数据发送完成,邮箱为空时,硬件对其清’0’。 发送邮箱数据长度和时间戳寄存器 (CAN_TDTxR) (x=0..2) 当邮箱不在空置状态时,该寄存器的所有位为写保护。 地址偏移量:0x184,0x194,0x1A4 复位值:未定义 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TIME[15:0] 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 保留 TGT 保留 DLC[3:0] res rw res rw rw rw rw 位31:16 位15:9 位8 位7:4 位3:0 TIME[15:0]: 报文时间戳 (Message time stamp) 该域包含了,在发送该报文SOF的时刻,16位定时器的值。 保留位 TGT: 发送时间戳 (Transmit global time) 只有在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。 保留位。 DLC[15:0]: 发送数据长度 (Data length code) 该域指定了数据报文的数据长度或者远程帧请求的数据长度。1个报文包含0到8个字节数据, 而这由DLC决定。 发送邮箱低字节数据寄存器 (CAN_TDLxR) (x=0..2) 当邮箱不在空置状态时,该寄存器的所有位为写保护。 地址偏移量:0x188,0x198,0x1A8 复位值:未定义位 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DATA3[7:0] DATA2[7:0] 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 DATA1[7:0] DATA0[7:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:24 位23:16 DATA3[7:0] : 数据字节3 (Data byte 3) 报文的数据字节3。 DATA2[7:0] : 数据字节2 (Data byte 2) 报文的数据字节2。 448/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 31 rw 15 rw 注: 31 r 15 r 位15:8 位7:0 DATA1[7:0] : 数据字节1 (Data byte 1) 报文的数据字节1。 DATA0[7:0] : 数据字节0 (Data byte 0) 报文的数据字节0。 报文包含0到8个字节数据,且从字节0开始。 发送邮箱高字节数据寄存器 (CAN_TDHxR) (x=0..2) 当邮箱不在空置状态时,该寄存器的所有位为写保护。 地址偏移量:0x18C,0x19C,0x1AC 复位值:未定义位 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DATA7[7:0] DATA6[7:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATA5[7:0] DATA4[7:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位31:24 位23:16 位15:8 位7:0 DATA7[7:0] : 数据字节7 (Data byte 7) 报文的数据字节7 注: 如果CAN_MCR寄存器的TTCM位为’1’,且该邮箱的TGT位也为’1’,那么DATA7和DATA6 将被TIME时间戳代替。 DATA6[7:0] : 数据字节6 (Data byte 6) 报文的数据字节6。 DATA5[7:0] : 数据字节5 (Data byte 5) 报文的数据字节5。 DATA4[7:0] : 数据字节4 (Data byte 4) 报文的数据字节4。 接收FIFO邮箱标识符寄存器 (CAN_RIxR) (x=0..1) 地址偏移量:0x1B0,0x1C0 复位值:未定义位 所有接收邮箱寄存器都是只读的。 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 STID[10:0]/EXID[28:18] EXID[17:13] r r r r r r r r r r r r r r r 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 EXID[12:0] IDE RTR 保留 r r r r r r r r r r r r r r res 位31:21 位20:3 STID[10:0]/EXID[28:18]: 标 准 标 识 符 或 扩 展 标 识 符 (Standard identifier or extended identifier) 依据IDE位的内容,这些位或是标准标识符,或是扩展身份标识的高字节。 EXID[17:0]: 扩展标识符 (Extended identifier) 扩展标识符的低字节。 位2 IDE: 标识符选择 (Identifier extension) 该位决定接收邮箱中报文使用的标识符类型 0:使用标准标识符; 1:使用扩展标识符。 449/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 注: 31 r 15 r 注: 31 r 15 r 位1 RTR: 远程发送请求 (Remote transmission request) 0:数据帧; 1:远程帧。 位0 保留位。 接收FIFO邮箱数据长度和时间戳寄存器 (CAN_RDTxR) (x=0..1) 地址偏移量:0x1B4,0x1C4 复位值:未定义 所有接收邮箱寄存器都是只读的。 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TIME[15:0] r r r r r r r r r r r r r r r 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 FMI[7:0] 保留 DLC[3:0] r r r r r r r res r r r r 位31:16 位15:8 位7:4 位3:0 TIME[15:0]: 报文时间戳 (Message time stamp) 该域包含了,在接收该报文SOF的时刻,16位定时器的值。 FMI[15:0]: 过滤器匹配序号 (Filter match index) 这里是存在邮箱中的信息传送的过滤器序号。关于标识符过滤的细节,请参考22.7.4中有关过 滤器匹配序号。 保留位,硬件强制为0。 DLC[15:0]: 接收数据长度 (Data length code) 该域表明接收数据帧的数据长度(0~8)。对于远程帧请求,数据长度DLC恒为0。 接收FIFO邮箱低字节数据寄存器 (CAN_RDLxR) (x=0..1) 地址偏移量:0x1B8,0x1C8 复位值:未定义位 所有接收邮箱寄存器都是只读的。 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DATA3[7:0] DATA2[7:0] r r r r r r r r r r r r r r r 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATA1[7:0] DATA0[7:0] r r r r r r r r r r r r r r r 位31:24 位23:16 位15:8 位7:0 DATA3[7:0] : 数据字节3 (Data byte 3) 报文的数据字节3。 DATA2[7:0] : 数据字节2 (Data byte 2) 报文的数据字节2。 DATA1[7:0] : 数据字节1 (Data byte 1) 报文的数据字节1。 DATA0[7:0] : 数据字节0 (Data byte 0) 报文的数据字节0。 报文包含0到8个字节数据,且从字节0开始。 接收FIFO邮箱高字节数据寄存器 (CAN_RDHxR) (x=0..1) 地址偏移量:0x1BC,0x1CC 复位值:未定义位 450/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(bxCAN) STM32F10xxx参考手册 注: 所有接收邮箱寄存器都是只读的。 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DATA7[7:0] DATA6[7:0] r r r r r r r r r r r r r r r r 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATA5[7:0] DATA4[7:0] r r r r r r r r r r r r r r r r 位31:24 位23:16 位15:8 位7:0 DATA7[7:0] : 数据字节7 (Data byte 7) 报文的数据字节7 DATA6[7:0] : 数据字节6 (Data byte 6) 报文的数据字节6。 DATA5[7:0] : 数据字节5 (Data byte 5) 报文的数据字节5。 DATA4[7:0] : 数据字节4 (Data byte 4) 报文的数据字节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 保留 保留 CAN2SB[5:0] 保留 res rw res 位31:14 保留位,强制为复位值。 位13:8 CAN2SB[5:0]:CAN2开始组 (CAN2 start bank) 这些位由软件置’1’、清’0’。它们定义了CAN2(从)接口的开始组,范围是1~27。 注:这些位只出现在互联型产品中,其它产品中为保留位。 位7:1 保留位,强制为复位值。 位0 FINIT : 过滤器初始化模式 (Filter init mode) 针对所有过滤器组的初始化模式设置。 0: 过滤器组工作在正常模式; 1: 过滤器组工作在初始化模式。 CAN 过滤器模式寄存器 (CAN_FM1R) 注: 地址偏移量: 0x204 复位值: 0x0000 0000 只有在设置CAN_FMR(FINIT=1),使过滤器处于初始化模式下,才能对该寄存器写入。 0 FINIT rw FINIT rw 451/754 参照2009年12月 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 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 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:过滤器组位宽设置-寄存器组织。 位31:28 位13:0 保留位,硬件强制为0 FBMx : 过滤器模式 (Filter mode) 过滤器组x的工作模式。 0: 过滤器组x的2个32位寄存器工作在标识符屏蔽位模式; 1: 过滤器组x的2个32位寄存器工作在标识符列表模式。 注:位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 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 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 位13:0 保留位,硬件强制为0 FSCx : 过滤器位宽设置 (Filter scale configuration) 过滤器组x(13~0)的位宽。 0:过滤器位宽为2个16位; 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 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 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 位13:0 保留位,硬件强制为0。 FFAx : 过滤器位宽设置 (Filter FIFO assignment for filter x) 报文在通过了某过滤器的过滤后,将被存放到其关联的FIFO中。 0:过滤器被关联到FIFO0; 452/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 控制器局域网(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。 位13:0 FACTx :过滤器激活 (Filter active) 软 件 对 某 位 设 置 ’1’ 来 激 活 相 应 的 过 滤 器 。 只 有 对 FACTx 位 清 ’0’ , 或 对 CAN_FMR 寄 存 器 的 FINIT位设置’1’后,才能修改相应的过滤器寄存器x(CAN_FxR[0:1])。 0:过滤器被禁用; 1:过滤器被激活。 注:位27:14只出现在互联型产品中,其它产品为保留位。 CAN 过滤器组i的寄存器x (CAN_FiRx) (互联产品中i=0..27,其它产品中i=0..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 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 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 在所有的配置情况下: 注: 位31:0 FB[31:0]:过滤器位 (Filter bits) 标识符模式 寄存器的每位对应于所期望的标识符的相应位的电平。 0: 期望相应位为显性位; 1: 期望相应位为隐性位。 屏蔽位模式 寄存器的每位指示是否对应的标识符寄存器位一定要与期望的标识符的相应位一致。 0: 不关心,该位不用于比较; 1: 必须匹配,到来的标识符位必须与滤波器对应的标识符寄存器位相一致。 根据过滤器位宽和模式的不同设置,过滤器组中的两个寄存器的功能也不尽相同。关于过滤器 的映射,功能描述和屏蔽寄存器的关联,请参见22.7.4节标识符过滤。 屏蔽位模式下的屏蔽/标识符寄存器,跟标识符列表模式下的寄存器位定义相同。 关于过滤器组寄存器的地址,请参见表165。 453/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 DBF 16 RESET 15 14 13 12 11 10 9 8 TTCM 7 ABOM 6 AWUM 5 NART 4 RFLM 3 TXFP 2 SLEEP 1 INRQ 0 RX SAMP RXM TXM SLAKI WKUI ERRI SLAK INAK ABRQ2 TERR2 ALST2 TXOK2 RQCP2 ABRQ1 TERR1 ALST1 TXOK1 RQCP1 ABRQ0 TERR0 ALST0 TXOK0 RQCP0 控制器局域网(bxCAN) STM32F10xxx参考手册 22.9.5 bxCAN寄存器列表 关于寄存器的起始地址,参见 表1。在互联型产品中,0x200~0x31C之间的寄存器只出现在 CAN1中。 表165 bxCAN-寄存器列表及其复位值 偏移 寄存器 000h 004h 008h 00Ch 010h 014h 018h 01Ch 020h~ 17Fh 180h 184h 188h 18Ch CAN_MCR 复位值 CAN_MSR 复位值 CAN_TSR 复位值 CAN_RF0R 复位值 CAN_RF1F 复位值 CAN_IER 复位值 CAN_ESR 复位值 CAN_BTR 复位值 CAN_TI0R 复位值 CAN_TDT0R 复位值 CAN_TDL0R 复位值 CAN_TDH0R 复位值 SILM LBKM 保留 保留 保留 10 00000010 保留 LOW TME CODE [2:0] [2:0] [1:0] 保留 000111000 00000 保留 保留 保留 保留 1100 00010 00000 RFOM1 FOVR1 FULL1 保留 RFOM0 FOVR0 FULL0 保留 保留 0000 FMP0 [1:0] 000 00 FMP1 [1:0] 000 00 SLKIE WKUIE ERRIE 保留 000 REC[7:0] TEC[7:0] 0000000000000000 保留 SJW [1:0] TS2 [2:0] TS1[3:0] 00 00 0100011 保留 0000 保留 0000000 LEC [2:0] 000 000 保留 BRP[9:0] 0000000000 保留 STID[10:0]/EXUD[28:18] EXID[17:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0 TIME[15:0] 保留 保留 DLC[3:0] xxxxxxxxxxxxxxxx x xxxx DATA3[7:0] DATA2[7:0] DATA1[7:0] DATA0[7:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DATA7[7:0] DATA6[7:0] DATA5[7:0] DATA4[7:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx LECIE BOFIE EPVIE EWGIE 保留 FOVIE FFIE1 FMPIE FOVIE FFIE0 FMPIE TMEIE 保留 BOFF EPVF EWGF TGT IDE RTR TXRQ 454/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 TXRQ 0 TGT IDE RTR TXR 控制器局域网(bxCAN) STM32F10xxx参考手册 RTR 1 IDE 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 偏移 寄存器 190h 194h 198h 19Ch 1A0h 1A4h 1A8h 1ACh 1B0h 1B4h 1B8h 1BCh 1C0h 1C4h 1C8h 1CCh 1D0h~ 1FFh CAN_TI1R 复位值 CAN_TDT1R 复位值 CAN_TDL1R 复位值 CAN_TDH1R 复位值 CAN_TI2R 复位值 CAN_TDT2R 复位值 CAN_TDL2R 复位值 CAN_TDH2R 复位值 CAN_RI0R 复位值 CAN_RDT0R 复位值 CAN_RDL0R 复位值 CAN_RDH0R 复位值 CAN_RI1R 复位值 CAN_RDT1R 复位值 CAN_RDL1R 复位值 CAN_RDH1R 复位值 STID[10:0]/EXID[28:18] EXID[17:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0 TGT TIME[15:0] 保留 保留 DLC[3:0] xxxxxxxxxxxxxxxx x xxxx DATA3[7:0] DATA2[7:0] DATA1[7:0] DATA0[7:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DATA7[7:0] DATA6[7:0] DATA5[7:0] DATA4[7:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx STID[10:0]/EXID[28:18] EXID[17:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0 TIME[15:0] 保留 保留 DLC[3:0] xxxxxxxxxxxxxxxx x xxxx DATA3[7:0] DATA2[7:0] DATA1[7:0] DATA0[7:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DATA7[7:0] DATA6[7:0] DATA5[7:0] DATA4[7:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx STID[10:0]/EXID[28:18] EXID[17:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx TIME[15:0] FMI[7:0] 保留 DLC[3:0] xxxxxxxxxxxxxxxxxxxxxxxx xxxx DATA3[7:0] DATA2[7:0] DATA1[7:0] DATA0[7:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DATA7[7:0] DATA6[7:0] DATA5[7:0] DATA4[7:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx STID[10:0]/EXID[28:18] EXID[17:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx TIME[15:0] FMI[7:0] DLC[3:0] 保留 xxxxxxxxxxxxxxxxxxxxxxxx xxxx DATA3[7:0] DATA2[7:0] DATA1[7:0] DATA0[7:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DATA7[7:0] DATA6[7:0] DATA5[7:0] DATA4[7:0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 保留 IDE RTR 保留 IDE RTR 保留 455/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 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 FINIT 0 控制器局域网(bxCAN) STM32F10xxx参考手册 偏移 寄存器 200h 204h 208h CAN_FMR 复位值 CAN_FM1R 复位值 保留 CAN2SB[5:0] 保留 001110 1 保留 FBM[27:0] 0000000000000000000000000000 保留 20Ch 210h CAN_FS1R 复位值 保留 FSC[27:0] 0000000000000000000000000000 保留 214h 218h CAN_FFA1R 复位值 保留 FFA[27:0] 0000000000000000000000000000 保留 21Ch CAN_FA1R 复位值 保留 FACT[27:0] 0000000000000000000000000000 220h 保留 224~ 23Fh 保留 240h CAN_F0R1 FB[31:0] 复位值 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 244h CAN_F0R2 FB[31:0] 复位值 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 240h CAN_F1R1 FB[31:0] 复位值 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 244h CAN_F1R2 FB[31:0] 复位值 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx . . … . . . . … 318h CAN_F27R1 FB[31:0] 复位值 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 31Ch CAN_F27R2 FB[31:0] 复位值 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 456/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SPI接口 STM32F10xxx参考手册 23 串行外设接口(SPI) 小 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 16K 至 32K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 中 容 量 产 品 是 指 闪 存 存 储 器 容 量 在 64K 至 128K 字 节 之 间 的 STM32F101xx 、 STM32F102xx 和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 除非特别说明,本章描述的模块适用于整个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_CK与JTDO),因此这些引脚不受IO控制器控制,他们(在每次复位后) 被默认保留为JTAG用途。如果用户想把引脚配置给SPI3/I2S3,必须(在调试时)关闭 JTAG并切换至SWD接口,或者(在标准应用时)同时关闭JTAG和SWD接口。详见第 8.3.5节:JTAG/SWD复用功能重映射。 23.2 SPI和I2S主要特征 23.2.1 SPI特征 ● 3线全双工同步传输 ● 带或不带第三根双向数据线的双线单工同步传输 ● 8或16位传输帧格式选择 ● 主或从操作 ● 支持多主模式 ● 8个主模式波特率预分频系数(最大为fPCLK/2) ● 从模式频率 (最大为fPCLK/2) ● 主模式和从模式的快速通信 ● 主模式和从模式下均可以由软件或硬件进行NSS管理:主/从操作模式的动态改变 ● 可编程的时钟极性和相位 ● 可编程的数据顺序,MSB在前或LSB在前 ● 可触发中断的专用发送和接收标志 ● SPI总线忙状态标志 ● 支持可靠通信的硬件CRC ─ 在发送模式下,CRC值可以被作为最后一个字节发送 457/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SPI接口 STM32F10xxx参考手册 ─ 在全双工模式中对接收到的最后一个字节自动进行CRC校验 ● 可触发中断的主模式故障、过载以及CRC错误标志 ● 支持DMA功能的1字节发送和接收缓冲器:产生发送和接受请求 23.2.2 I2S功能 ● 单工通信(仅发送或接收) ● 主或者从操作 ● 8位线性可编程预分频器,获得精确的音频采样频率(8KHz到96kHz) ● 数据格式可以是16位,24位或者32位 ● 音频信道固定数据包帧为16位(16位数据帧)或32位(16、24或32位数据帧) ● 可编程的时钟极性(稳定态) ● 从发送模式下的下溢标志位和主/从接收模式下的溢出标志位 ● 16位数据寄存器用来发送和接收,在通道两端各有一个寄存器 ● 支持的I2S协议: ─ I2S飞利浦标准 ─ MSB对齐标准(左对齐) ─ LSB对齐标准(右对齐) ─ PCM标准(16位通道帧上带长或短帧同步或者16位数据帧扩展为32位通道帧) ● 数据方向总是MSB在先 ● 发送和接收都具有DMA能力 ● 主时钟可以输出到外部音频设备,比率固定为256xFs(Fs为音频采样频率) ● 在互联型产品中,两个I2S模块(I2S2和I2S3)有一个专用的PLL(PLL3),产生更加精准得时钟 458/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SPI接口 23.3 SPI功能描述 23.3.1 概述 SPI的方框图见下图。 图209 SPI框图 STM32F10xxx参考手册 通常SPI通过4个引脚与外部器件相连: ● MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。 ● MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。 ● SCK:串口时钟,作为主设备的输出,从设备的输入 ● NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为“片 选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。从设备的NSS 引脚可以由主设备的一个标准I/O引脚来驱动。一旦被使能(SSOE位),NSS引脚也可以作为 输出引脚,并在SPI处于主模式时拉低;此时,所有的SPI设备,如果它们的NSS引脚连接 到主设备的NSS引脚,则会检测到低电平,如果它们被设置为NSS硬件模式,就会自动进 入从设备状态。当配置为主设备、NSS配置为输入引脚(MSTR=1,SSOE=0)时,如果NSS 被拉低,则这个SPI设备进入主模式失败状态:即MSTR位被自动清除,此设备进入从模式 (参见) 下图是一个单主和单从设备互连的例子。 459/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SPI接口 图210 单主和单从应用 STM32F10xxx参考手册 1. 这里NSS引脚设置为输入 MOSI脚相互连接,MISO脚相互连接。这样,数据在主和从之间串行地传输(MSB位在前)。 通信总是由主设备发起。主设备通过MOSI脚把数据发送给从设备,从设备通过MISO引脚回传 数据。这意味全双工通信的数据输出和数据输入是用同一个时钟信号同步的;时钟信号由主设 备通过SCK脚提供。 从选择(NSS)脚管理 有2种NSS模式: ● 软件NSS模式:可以通过设置SPI_CR1寄存器的SSM位来使能这种模式(见图211)。在这种 模式下NSS引脚可以用作它用,而内部NSS信号电平可以通过写SPI_CR1的SSI位来驱动 ● 硬件NSS模式,分两种情况: ─ NSS输出被使能:当STM32F10xxx工作为主SPI,并且NSS输出已经通过SPI_CR2寄存 器的SSOE位使能,这时NSS引脚被拉低,所有NSS引脚与这个主SPI的NSS引脚相连并 配置为硬件NSS的SPI设备,将自动变成从SPI设备。 当一个SPI设备需要发送广播数据,它必须拉低NSS信号,以通知所有其它的设备它是主 设备;如果它不能拉低NSS,这意味着总线上有另外一个主设备在通信,这时将产生一个 硬件失败错误(Hard Fault)。 ─ NSS输出被关闭:允许操作于多主环境。 图211 硬件/软件的从选择管理 时钟信号的相位和极性 SPI_CR寄存器的CPOL和CPHA位,能够组合成四种可能的时序关系。CPOL(时钟极性)位控制 在没有数据传输时时钟的空闲状态电平,此位对主模式和从模式下的设备都有效。如果CPOL被 清’0’,SCK引脚在空闲状态保持低电平;如果CPOL被置’1’,SCK引脚在空闲状态保持高电平。 如果CPHA(时钟相位)位被置’1’,SCK时钟的第二个边沿(CPOL位为0时就是下降沿,CPOL位 为’1’时就是上升沿)进行数据位的采样,数据在第二个时钟边沿被锁存。如果CPHA位被清’0’, SCK时钟的第一边沿(CPOL位为’0’时就是下降沿,CPOL位为’1’时就是上升沿)进行数据位采 样,数据在第一个时钟边沿被锁存。 460/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SPI接口 STM32F10xxx参考手册 注意: CPOL时钟极性和CPHA时钟相位的组合选择数据捕捉的时钟边沿。 图212显示了SPI传输的4种CPHA和CPOL位组合。此图可以解释为主设备和从设备的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 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SPI接口 STM32F10xxx参考手册 23.3.2 配置SPI为从模式 注: 在从模式下,SCK引脚用于接收从主设备来的串行时钟。SPI_CR1寄存器中BR[2:0]的设置不影 响数据传输速率。 建议在主设备发送时钟之前使能SPI从设备,否则可能会发生意外的数据传输。在通信时钟的第 一个边沿到来之前或正在进行的通信结束之前,从设备的数据寄存器必须就绪。在使能从设备 和主设备之前,通信时钟的极性必须处于稳定的数值。 请按照以下步骤配置SPI为从模式: 配置步骤 1. 设置DFF位以定义数据帧格式为8位或16位。 2. 选择CPOL和CPHA位来定义数据传输和串行时钟之间的相位关系(见图212)。为保证正确 的数据传输,从设备和主设备的CPOL和CPHA位必须配置成相同的方式。 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. 选择CPOL和CPHA位,定义数据传输和串行时钟间的相位关系(见图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 参照2009年12月 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=0,RXONLY=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 参照2009年12月 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 参照2009年12月 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和图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模块。 也可以在响应RXNE或TXE标志的上升沿产生的中断的处理程序中实现这个过程。 图213 主模式、全双工模式下(BIDIMODE=0并且RXONLY=0)连续传输时,TXE/RXNE/BSY 的变化示意图 465/754 参照2009年12月 RM0008 Reference Manual 英文第10版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 SPI接口 STM32F10xxx参考手册 图214 从模式、全双工模式下(BIDIMODE=0并且RXONLY=0)连续传