首页资源分类嵌入式开发其它 > GD32F130中文手册

GD32F130中文手册

已有 454868个资源

下载专区

上传者其他资源

文档信息举报收藏

标    签: 中文手册GD32F130

分    享:

文档简介

GD32F130中文手册

文档预览

GigaDevice Semiconductor Inc. GD32F1x0 ARM® Cortex™-M3 32-bit MCU 用户手册 0 GD32F1x0 用户手册 目录 目录 ............................................................................................................................................1 图 ..............................................................................................................................................15 表 ..............................................................................................................................................21 1 系统及存储器架构 ..............................................................................................................23 1.1 ARM Cortex-M3 处理器 ....................................................................................................... 23 1.2 系统架构................................................................................................................................ 24 1.3 存储器映射 ............................................................................................................................ 25 1.3.1 位带操作 .................................................................................................................... 28 1.3.2 片上 SRAM ................................................................................................................ 28 1.3.3 片上闪存 .................................................................................................................... 28 1.4 引导配置................................................................................................................................ 29 1.5 系统配置寄存器 (SYSCFG).................................................................................................. 30 1.5.1 系统配置寄存器 1 (SYSCFG_R1)............................................................................. 30 1.5.2 EXTI 源选择寄存器 1 (SYSCFG_EXTISS1) ............................................................ 31 1.5.3 EXTI 源选择寄存器 2 (SYSCFG_EXTISS2) ............................................................ 32 1.5.4 EXTI 源选择寄存器 3 (SYSCFG_EXTISS3) ............................................................ 33 1.5.5 EXTI 源选择寄存器 4 (SYSCFG_EXTISS4) ............................................................ 34 1.5.6 系统配置寄存器 2 (SYSCFG_R2)............................................................................. 35 1.6 设备电子签名 ........................................................................................................................ 36 1.6.1 存储密度信息 ............................................................................................................. 36 1.6.2 设备唯一 ID (96 位/位域)........................................................................................... 37 2 电源控制 (PWR) ................................................................................................................39 2.1 简介....................................................................................................................................... 39 2.2 主要特点................................................................................................................................ 39 2.3 功能描述................................................................................................................................ 39 2.3.1 电池备份域................................................................................................................. 40 2.3.2 2.3.3 VDD/VDDA 电源域 ........................................................................................................ 41 1.2V 电源域................................................................................................................ 41 2.3.4 省电模式 .................................................................................................................... 42 2.4 PWR 寄存器 ......................................................................................................................... 43 2.4.1 电源控制寄存器 (PWR_CTLR) ................................................................................. 43 2.4.2 电源状态寄存器 (PWR_STR).................................................................................... 44 3 闪存存储器控制器 (FMC) ..................................................................................................46 3.1 简介....................................................................................................................................... 46 3.2 主要特征................................................................................................................................ 46 3.3 功能说明................................................................................................................................ 46 3.3.1 闪存存储器结构 ......................................................................................................... 46 3.3.2 读保护 ........................................................................................................................ 47 1 GD32F1x0 用户手册 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 FMC_CMR 寄存器解锁.............................................................................................. 47 页擦除 ........................................................................................................................ 47 整片擦除 .................................................................................................................... 48 主存储块编程 ............................................................................................................. 49 可选字节块擦除 ......................................................................................................... 50 3.3.8 可选字节块编程 ......................................................................................................... 51 3.3.9 可选字节块说明 ......................................................................................................... 51 3.3.10 页擦除/编程保护 ........................................................................................................ 52 3.3.11 安全保护 .................................................................................................................... 53 3.4 FMC 寄存器 .......................................................................................................................... 53 3.4.1 闪存保留寄存器 (FMC_RESR) ................................................................................. 53 3.4.2 闪存解锁寄存器 (FMC_UKEYR) ............................................................................... 54 3.4.3 闪存可选字节块解锁寄存器(FMC_OBKEYR) ....................................................... 54 3.4.4 闪存控制/状态寄存器 (FMC_CSR)............................................................................ 54 3.4.5 3.4.6 3.4.7 3.4.8 3.4.9 3.4.10 闪存命令寄存器 (FMC_CMR) ................................................................................... 55 闪存命令地址寄存器 (FMC_AR) ............................................................................... 57 闪存可选字节寄存器 (FMC_OPTR) .......................................................................... 57 闪存页擦除/编程保护寄存器 (FMC_WPR) ................................................................ 57 闪存等待状态控制寄存器 (FMC_WSCR) .................................................................. 58 闪存产品保留 ID 寄存器 1 (FMC_RES_ID1).............................................................. 58 3.4.11 闪存产品保留 ID 寄存器 2 (FMC_RES_ID2).............................................................. 59 4 复位和时钟控制单元 (RCC) ..............................................................................................60 4.1 复位控制单元 (RCU) ............................................................................................................ 60 4.1.1 简介............................................................................................................................ 60 4.1.2 功能说明 .................................................................................................................... 60 4.2 时钟控制单元 (CCU) ............................................................................................................ 61 4.2.1 简介............................................................................................................................ 61 4.2.2 主要特征 .................................................................................................................... 62 4.2.3 功能说明 .................................................................................................................... 63 4.3 RCC 寄存器 .......................................................................................................................... 66 4.3.1 总时钟控制寄存器 (RCC_GCCR) ............................................................................. 66 4.3.2 总体时钟配置寄存器 (RCC_GCFGR) ....................................................................... 67 4.3.3 总体时钟中断寄存器 (RCC_GCIR) ........................................................................... 71 4.3.4 APB2 复位控制寄存器 (RCC_APB2RCR) ................................................................ 73 4.3.5 APB1 复位控制寄存器 (RCC_APB1RCR) ............................................................... 75 4.3.6 AHB 时钟控制寄存器 (RCC_AHBCCR) ................................................................... 77 4.3.7 APB2 时钟控制寄存器 (RCC_APB2CCR) ................................................................ 79 4.3.8 APB1 时钟控制寄存器 (RCC_APB1CCR) ................................................................ 80 4.3.9 备份域控制寄存器 (RCC_BDCR).............................................................................. 83 4.3.10 总体控制/状态寄存器 (RCC_GCSR)......................................................................... 84 4.3.11 AHB 复位控制寄存器 (RCC_AHBRCR).................................................................... 86 4.3.12 总体时钟配置寄存器 2 (RCC_GCFGR2) .................................................................. 87 4.3.13 总体时钟配置寄存器 3 (RCC_GCFGR3) .................................................................. 88 2 4.3.14 4.3.15 4.3.16 4.3.17 4.3.18 4.3.19 GD32F1x0 用户手册 总体时钟控制寄存器 2 (RCC_GCCR2) .................................................................... 89 附加时钟控制寄存器 (RCC_ACCR) .......................................................................... 89 附加复位控制寄存器 (RCC_ARCR) .......................................................................... 90 电源解锁寄存器 (RCC_VC_KEY) ............................................................................. 90 RCC 深度睡眠模式电压寄存器 (RCC_DEEPSLEEP_VC)........................................ 91 RCC 掉电电压选择寄存器 (RCC_PDR_S) ............................................................... 91 5 通用和备用功能 I/Os (GPIO 和 AFIOs).............................................................................93 5.1 GPIO ..................................................................................................................................... 93 5.1.1 简介............................................................................................................................ 93 5.1.2 主要特点 .................................................................................................................... 93 5.1.3 功能描述 .................................................................................................................... 93 5.2 GPIO 寄存器 ......................................................................................................................... 98 5.2.1 GPIO 端口控制寄存器 (GPIOx_CTLR) (x=A..D,F) ................................................... 98 5.2.2 GPIO 端口输出模式寄存器 (GPIOx_OMODE) (x=A..D,F) ...................................... 100 5.2.3 GPIO 端口输出速度寄存器 (GPIOx_OSPD) (x=A..D,F) ........................................ 102 5.2.4 GPIO 端口上拉/下拉寄存器 (GPIOx_PUPD)(x=A..D,F)......................................... 103 5.2.5 GPIO 端口数据输入寄存器 (GPIOx_DIR) (x=A..D,F) ............................................. 105 5.2.6 GPIO 端口数据输出寄存器 (GPIOx_DOR) (x=A..D,F)............................................ 106 5.2.7 GPIO 端口位操作寄存器 (GPIOx_BOR) (x=A..D,F) .............................................. 106 5.2.8 GPIO 端口配置锁定寄存器 (GPIOx_LOCKR) (x=A,B)........................................... 107 5.2.9 GPIO 端口被用功能选择低位寄存器 (GPIOx_AFSL) (x=A,B,C) ............................ 107 5.2.10 GPIO 端口选择备用功能高位寄存器 (GPIOx_AFSH) (x=A,B,C) ........................... 108 5.2.11 GPIO 端口位清除寄存器 (GPIOx_BCR) (x=A..D,F)................................................110 6 循环冗余校验计算单元 (CRC) ......................................................................................... 111 6.1 简介...................................................................................................................................... 111 6.2 主要特征............................................................................................................................... 111 6.3 功能描述............................................................................................................................... 112 6.4 CRC 寄存器 ........................................................................................................................113 6.4.1 CRC 数据寄存器 (CRC_DTR).................................................................................113 6.4.2 CRC 独立数据寄存器 (CRC_FDTR) .......................................................................113 6.4.3 CRC 控制寄存器 (CRC_CTLR)...............................................................................114 6.4.4 CRC 初值寄存器 (CRC_IDTR)................................................................................114 7 中断和事件.......................................................................................................................116 7.1 介绍 ...................................................................................................................................... 116 7.2 主要特点............................................................................................................................... 116 7.3 功能描述............................................................................................................................... 116 7.3.1 NVIC 以及异常/中断处理 .........................................................................................116 7.3.2 外部中断及事件 (EXTI) ............................................................................................118 7.4 中断 EXTI 寄存器 ............................................................................................................... 120 7.4.1 中断使能寄存器 (EXTI_IER) ................................................................................... 120 7.4.2 事件使能寄存器 (EXTI_EER).................................................................................. 121 7.4.3 上升沿触发选择寄存器 (EXTI_RTE) ....................................................................... 121 7.4.4 下降沿触发选择寄存器 (EXTI_FTE) ....................................................................... 122 3 7.4.5 7.4.6 GD32F1x0 用户手册 软件中断事件寄存器 (EXTI_SIE) ............................................................................ 122 挂起寄存器 (EXTI_PD) ........................................................................................... 123 8 DMA 控制器 (DMA).........................................................................................................124 8.1 简介..................................................................................................................................... 124 8.2 主要特点.............................................................................................................................. 124 8.3 功能描述.............................................................................................................................. 124 8.3.1 DMA 传输................................................................................................................. 124 8.3.2 通道之间的仲裁 ....................................................................................................... 125 8.3.3 地址生成算法 ........................................................................................................... 125 8.3.4 循环模式 .................................................................................................................. 125 8.3.5 存储器到存储器模式 ................................................................................................ 126 8.3.6 中断请求 .................................................................................................................. 126 8.3.7 DMA 通道配置流程 .................................................................................................. 126 8.3.8 DMA 请求映射 ......................................................................................................... 127 8.4 DMA 寄存器 ........................................................................................................................ 128 8.4.1 DMA 中断状态寄存器 (DMA_IFR) .......................................................................... 128 8.4.2 DMA 中断标志清除寄存器 (DMA_ICR)................................................................... 129 8.4.3 DMA 通道 x 控制寄存器 (DMA_CTLRx) ................................................................. 130 8.4.4 DMA 通道 x 剩余计数器 (DMA_RCNTx) ................................................................ 131 8.4.5 DMA 通道 x 外设端基地址寄存器 (DMA_PBARx) .................................................. 131 8.4.6 DMA 通道 x 存储器端基地址寄存器 (DMA_MBARx) .............................................. 132 9 定时器 (TMx)...................................................................................................................133 9.1 高级定时器 (TM1) .............................................................................................................. 134 9.1.1 简介.......................................................................................................................... 134 9.1.2 主要特征 .................................................................................................................. 134 9.1.3 功能说明 .................................................................................................................. 134 9.2 TM1 寄存器 ......................................................................................................................... 162 9.2.1 TM1 控制寄存器 1 (TM1_CTLR1)............................................................................ 162 9.2.2 TM1 控制寄存器 2 (TM1_CTLR2)............................................................................ 164 9.2.3 TM1 从模式控制寄存器 (TIM1_SMC) ..................................................................... 165 9.2.4 TM1 DMA 和中断使能寄存器 (TM1_DIE) ............................................................... 167 9.2.5 TM1 状态寄存器 (TM1_STR).................................................................................. 169 9.2.6 TM1 事件产生寄存器 (TM1_EVG) .......................................................................... 170 9.2.7 TM1 通道控制寄存器 1 (TM1_CHCTLR1) ............................................................... 171 9.2.8 TM1 通道控制寄存器 2 (TM1_CHCTLR2) ............................................................... 174 9.2.9 TM1 通道使能寄存器 (TM1_CHE) .......................................................................... 176 9.2.10 TM1 计数器寄存器 (TM1_CNT) .............................................................................. 178 9.2.11 TM1 预分频寄存器 (TM1_PSC) .............................................................................. 178 9.2.12 TM1 计数器自动重载寄存器 (TM1_CARL) ............................................................. 178 9.2.13 TM1 重复计数寄存器 (TM1_CREP)........................................................................ 178 9.2.14 TM1 通道 1 捕获/比较寄存器 (TM1_CHCC1) ......................................................... 179 9.2.15 TM1 通道 2 捕获/比较寄存器 (TM1_CHCC2) ......................................................... 179 9.2.16 TM1 通道 3 捕获/比较寄存器 (TM1_CHCC3) ......................................................... 179 4 GD32F1x0 用户手册 9.2.17 TM1 通道 4 捕获/比较寄存器 (TM1_CHCC4) ......................................................... 180 9.2.18 TM1 中止和死区时间寄存器 (TM1_BKDT) ............................................................. 180 9.2.19 TM1 DMA 控制寄存器 (TM1_DCTLR) .................................................................... 182 9.2.20 TM1 DMA 传送寄存器 (TM1_DTRSF) .................................................................... 182 9.3 通用定时器 (TM2 和 TM3).................................................................................................. 183 9.3.1 简介.......................................................................................................................... 183 9.3.2 主要特性 .................................................................................................................. 183 9.3.3 功能说明 .................................................................................................................. 183 9.4 TM2 和 TM3 寄存器 ............................................................................................................ 203 9.4.1 TMx 控制寄存器 1 (TMx_CTLR1) ............................................................................ 203 9.4.2 TMx 控制寄存器 2 (TMx_CTLR2) ............................................................................ 204 9.4.3 TMx 从模式控制寄存器 (TIMx_SMC)...................................................................... 205 9.4.4 TMx DMA 和中断使能寄存器 (TMx_DIE)................................................................ 207 9.4.5 TMx DMA 和中断状态寄存器 (TMx_STR) .............................................................. 208 9.4.6 TMx 事件产生寄存器 (TMx_EVG)........................................................................... 209 9.4.7 TMx 通道控制寄存器 1 (TMx_CHCTLR1) ................................................................211 9.4.8 TM1 通道控制寄存器 2 (TM1_CHCTLR2) ............................................................... 214 9.4.9 TMx 通道使能寄存器 (TMx_CHE)........................................................................... 215 9.4.10 TMx 计数器寄存器 (TMx_CNT) .............................................................................. 217 9.4.11 TMx 预分频寄存器 (TMx_PSC) .............................................................................. 217 9.4.12 TMx 计数器自动重载寄存器 (TMx_CARL).............................................................. 218 9.4.13 TMx 通道 1 捕获/比较寄存器 (TMx_CHCC1).......................................................... 218 9.4.14 TMx 通道 2 捕获/比较寄存器 (TMx_CHCC2).......................................................... 218 9.4.15 TMx 通道 3 捕获/比较寄存器 (TMx_CHCC3).......................................................... 219 9.4.16 TMx 通道 4 捕获/比较寄存器 (TMx_CHCC4).......................................................... 219 9.4.17 TMx DMA 控制寄存器 (TMx_DCTLR) .................................................................... 219 9.4.18 TMx DMA 传送寄存器 (TMx_DTRSF) .................................................................... 220 9.5 基本定时器 (TM6) .............................................................................................................. 221 9.5.1 简介.......................................................................................................................... 221 9.5.2 主要特征 .................................................................................................................. 221 9.5.3 功能说明 .................................................................................................................. 221 9.6 TM6 寄存器 ......................................................................................................................... 224 9.6.1 TM6 控制寄存器 1 (TM6_CTLR1)............................................................................ 224 9.6.2 TM6 控制寄存器 2 (TM6_CTLR2)............................................................................ 225 9.6.3 TM6 DMA 和中断使能寄存器 (TM6_DIE) ............................................................... 225 9.6.4 TM6 状态寄存器 (TM6_STR).................................................................................. 226 9.6.5 TM6 事件产生寄存器 (TM6_EVG) .......................................................................... 226 9.6.6 TM6 计数器寄存器 (TM6_CNT) .............................................................................. 226 9.6.7 TM6 预分频寄存器 (TM6_PSC) .............................................................................. 227 9.6.8 TM6 计数器自动重载寄存器 (TM6_CARL) ............................................................. 227 9.7 通用定时器 (TM14) ............................................................................................................ 227 9.7.1 简介.......................................................................................................................... 227 9.7.2 主要特征 .................................................................................................................. 228 9.7.3 功能说明 .................................................................................................................. 228 5 GD32F1x0 用户手册 9.8 TM14 寄存器 ....................................................................................................................... 236 9.8.1 TMx 控制寄存器 1 (TMx_CTLR1) ............................................................................ 236 9.8.2 TMx 中断使能寄存器 (TMx_DIE) ............................................................................ 237 9.8.3 TMx DMA 和中断状态寄存器 (TMx_STR) .............................................................. 237 9.8.4 TMx 事件发生寄存器 (TMx_EVG)........................................................................... 238 9.8.5 TMx 通道控制寄存器 1 (TMx_CHCTLR1) ............................................................... 239 9.8.6 TMx 通道使能寄存器 (TMx_CHE)........................................................................... 241 9.8.7 TMx 计数器寄存器 (TMx_CNT) .............................................................................. 242 9.8.8 TMx 预分频寄存器 (TMx_PSC) .............................................................................. 242 9.8.9 TMx 计数器自动重载寄存器 (TMx_CARL).............................................................. 242 9.8.10 TMx 通道 1 捕获/比较寄存器 (TMx_CHCC1).......................................................... 242 9.8.11 TMx 通道输入重映射寄存器 (TMx_RMP) ............................................................... 243 9.9 通用定时器 (TM15) ............................................................................................................ 243 9.9.1 简介.......................................................................................................................... 243 9.9.2 主要特征 .................................................................................................................. 243 9.9.3 功能说明 .................................................................................................................. 244 9.10 TM15 寄存器 ....................................................................................................................... 263 9.10.1 TMx 控制寄存器 1 (TMx_CTLR1) ............................................................................ 263 9.10.2 TMx 控制寄存器 2 (TMx_CTLR2) ............................................................................ 264 9.10.3 TMx 从模式控制寄存器 (TMx_SMC)....................................................................... 265 9.10.4 TMx DMA 和中断使能寄存器 (TMx_DIE)................................................................ 266 9.10.5 TMx 状态寄存器 (TMx_STR) .................................................................................. 267 9.10.6 TMx 事件发生寄存器 (TMx_EVG)........................................................................... 268 9.10.7 TMx 通道控制寄存器 1 (TMx_CHCTLR1) ............................................................... 269 9.10.8 TMx 通道使能寄存器 (TMx_CHE)........................................................................... 273 9.10.9 TMx 计数器寄存器 (TMx_CNT) .............................................................................. 274 9.10.10 TMx 预分频寄存器 (TMx_PSC) .............................................................................. 274 9.10.11 TMx 计数器自动重载寄存器 (TMx_CARL).............................................................. 274 9.10.12 TMx 重复计数寄存器 (TMx_CREP) ........................................................................ 274 9.10.13 TMx 通道 1 捕获/比较寄存器 (TMx_CHCC1).......................................................... 275 9.10.14 TMx 通道 2 捕获/比较寄存器 (TMx_CHCC2).......................................................... 275 9.10.15 TMx 中止和死区时间寄存器 (TMx_BKDT).............................................................. 275 9.10.16 TMx DMA 控制寄存器 (TMx_DCTLR) .................................................................... 277 9.10.17 TMx DMA 传送寄存器 (TMx_DTRSF) .................................................................... 277 9.11 通用定时器 (TM16/TM17) .................................................................................................. 278 9.11.1 简介.......................................................................................................................... 278 9.11.2 主要特征 .................................................................................................................. 278 9.11.3 功能说明 .................................................................................................................. 278 9.12 TM16/TM17 寄存器............................................................................................................. 292 9.12.1 TMx 控制寄存器 1 (TMx_CTLR1) ............................................................................ 292 9.12.2 TMx 控制寄存器 2 (TMx_CTLR2) ............................................................................ 293 9.12.3 TMx DMA 和中断使能寄存器 (TMx_DIE)................................................................ 294 9.12.4 TMx 状态寄存器 (TMx_STR) .................................................................................. 294 9.12.5 TMx 事件发生寄存器 (TMx_EVG)........................................................................... 295 6 GD32F1x0 用户手册 9.12.6 TMx 通道控制寄存器 1 (TMx_CHCTLR1) ............................................................... 296 9.12.7 TMx 通道使能寄存器 (TMx_CHE)........................................................................... 299 9.12.8 TMx 计数器寄存器 (TMx_CNT) .............................................................................. 300 9.12.9 TMx 预分频寄存器 (TMx_PSC) .............................................................................. 300 9.12.10 TMx 计数器自动重载寄存器 (TMx_CARL).............................................................. 300 9.12.11 TMx 重复计数寄存器 (TMx_CREP) ........................................................................ 301 9.12.12 TMx 通道 1 捕获/比较寄存器 (TMx_CHCC1).......................................................... 301 9.12.13 TMx 中止和死区时间寄存器 (TMx_BKDT).............................................................. 301 9.12.14 TMx DMA 控制寄存器 (TMx_DCTLR) .................................................................... 303 9.12.15 TMx DMA 传送寄存器 (TMx_DTRSF) .................................................................... 303 10 红外线接口 (IFRR) .......................................................................................................304 10.1 简介..................................................................................................................................... 304 10.2 主要特征.............................................................................................................................. 304 10.3 功能描述.............................................................................................................................. 304 11 看门狗 (WDG)..............................................................................................................306 11.1 独立看门狗 (IWDG) ............................................................................................................ 306 11.1.1 简介.......................................................................................................................... 306 11.1.2 主要特性 .................................................................................................................. 306 11.1.3 功能说明 .................................................................................................................. 306 11.2 独立看门狗寄存器 ............................................................................................................... 308 11.2.1 控制寄存器 (IWDG_CTLR) ..................................................................................... 308 11.2.2 预分频寄存器 (IWDG_PSR).................................................................................... 308 11.2.3 重加载寄存器 (IWDG_RLDR) ................................................................................. 309 11.2.4 状态寄存器 (IWDG_STR) ....................................................................................... 309 11.2.5 窗口寄存器 (IWDG_WND) ...................................................................................... 310 11.3 窗口看门狗 (WWDG) ......................................................................................................... 310 11.3.1 简介.......................................................................................................................... 310 11.3.2 主要特性 ...................................................................................................................311 11.3.3 功能说明 ...................................................................................................................311 11.4 窗口看门狗寄存器 ............................................................................................................... 312 11.4.1 控制寄存器 (WWDG_CTLR) ................................................................................... 312 11.4.2 配置寄存器 (WWDG_CFR) ..................................................................................... 313 11.4.3 状态寄存器 (WWDG_STR) ..................................................................................... 313 12 模拟数字转换器 (ADC) ................................................................................................315 12.1 介绍..................................................................................................................................... 315 12.2 ADC 主要特征 .................................................................................................................... 315 12.3 ADC 引脚和内部信号 ......................................................................................................... 315 12.4 ADC 功能描述 .................................................................................................................... 316 12.4.1 校准(ADC_CLB) ...................................................................................................... 316 12.4.2 双时钟域架构 ........................................................................................................... 317 12.4.3 规则组和注入组通道 ................................................................................................ 317 12.4.4 转换模式 .................................................................................................................. 317 12.4.5 模拟看门狗............................................................................................................... 320 7 GD32F1x0 用户手册 12.4.6 注入通道管理 ........................................................................................................... 320 12.4.7 数据对齐 .................................................................................................................. 321 12.4.8 可编程的采样时间 .................................................................................................... 321 12.4.9 外部触发 .................................................................................................................. 321 12.4.10 DMA 请求 ................................................................................................................ 322 12.4.11 温度传感器和内部参考电压 VREF ............................................................................. 322 12.4.12 电池电压监测 ........................................................................................................... 322 12.4.13 ADC 中断 ................................................................................................................. 322 12.5 ADC 寄存器......................................................................................................................... 322 12.5.1 12.5.2 12.5.3 12.5.4 12.5.5 12.5.6 ADC 状态寄存器 (ADC_STR) ................................................................................. 322 ADC 控制寄存器 1 (ADC_CTLR1).......................................................................... 323 ADC 控制寄存器 2 (ADC_CTLR2).......................................................................... 325 ADC 采样时间寄存器 1 (ADC_SPT1) .................................................................... 327 ADC 采样时间寄存器 2 (ADC_SPT2) .................................................................... 327 ADC 注入通道数据偏移寄存器 x (ADC_ICOSx) (x=1..4)........................................ 328 12.5.7 ADC 看门狗高阈值寄存器 (ADC_AWHT) ............................................................... 328 12.5.8 ADC 看门狗低阈值寄存器 (ADC_AWLT) ............................................................... 329 12.5.9 ADC 规则序列寄存器 1 (ADC_RSQ1) .................................................................... 329 12.5.10 ADC 规则序列寄存器 2 (ADC_RSQ2) .................................................................... 329 12.5.11 ADC 规则序列寄存器 3 (ADC_RSQ3) .................................................................... 330 12.5.12 ADC 注入序列寄存器 (ADC_ISQ)........................................................................... 330 12.5.13 ADC 注入数据寄存器 x (ADC_IDTRx) (x= 1..4)...................................................... 331 12.5.14 ADC 规则数据寄存器 (ADC_RDTR) ...................................................................... 331 13 数-模转换器 (DAC) ......................................................................................................332 13.1 DAC 简介 ........................................................................................................................... 332 13.2 DAC 主要特性 .................................................................................................................... 332 13.3 DAC 功能描述 .................................................................................................................... 333 13.3.1 使能 DAC 通道 ........................................................................................................ 333 13.3.2 使能 DAC 输出缓存................................................................................................. 333 13.3.3 DAC 数据格式 ......................................................................................................... 333 13.3.4 DAC 转换 ................................................................................................................ 334 13.3.5 DAC 输出电压 ......................................................................................................... 334 13.3.6 DMA 请求 ................................................................................................................ 334 13.3.7 DAC 触发 ................................................................................................................. 334 13.4 DAC 寄存器........................................................................................................................ 335 13.4.1 DAC 控制寄存器 (DAC_CTLR) .............................................................................. 335 13.4.2 DAC 软件触发寄存器 (DAC_SWTR) ..................................................................... 336 13.4.3 DAC 12 位右对齐数据保持寄存器 (DAC_DHR12R) ............................................... 336 13.4.4 DAC 12 位左对齐数据保持寄存器 (DAC_DHR12L)................................................ 337 13.4.5 DAC 8 位右对齐数据保持寄存器 (DAC_DHR8R) ................................................... 337 13.4.6 DAC 数据输出寄存器 (DAC_DOR) ........................................................................ 337 13.4.7 DAC 状态寄存器 (DAC_STR) ................................................................................ 338 14 I2C 接口........................................................................................................................339 8 GD32F1x0 用户手册 14.1 简介..................................................................................................................................... 339 14.2 主要功能.............................................................................................................................. 339 14.3 功能说明.............................................................................................................................. 339 14.3.1 SDA 线和 SCL 线..................................................................................................... 340 14.3.2 数据有效性............................................................................................................... 340 14.3.3 开始和停止状态 ....................................................................................................... 341 14.3.4 时钟同步 .................................................................................................................. 341 14.3.5 仲裁.......................................................................................................................... 342 14.3.6 I2C 通讯流程............................................................................................................ 342 14.3.7 软件编程模型 ........................................................................................................... 343 14.3.8 报文错误校验 ........................................................................................................... 351 14.3.9 SMBus 支持 ............................................................................................................. 352 14.3.10 状态、错误和中断 .................................................................................................... 353 14.4 I2C 寄存器.......................................................................................................................... 353 14.4.1 14.4.2 14.4.3 14.4.4 14.4.5 14.4.6 I2C 控制寄存器 1 (I2C_CTLR1)............................................................................... 353 I2C 控制寄存器 2 (I2C_CTLR2)............................................................................... 355 I2C 本机地址寄存器 1 (I2C_AR1) ............................................................................ 356 I2C 本机地址寄存器 2 (I2C_AR2) ............................................................................ 356 I2C 传输缓冲区寄存器 (I2C_DTR) .......................................................................... 357 I2C 传输状态寄存器 1 (I2C_STR1).......................................................................... 357 14.4.7 I2C 传输状态寄存器 2 (I2C_STR2).......................................................................... 359 14.4.8 I2C 时钟配置寄存器 (I2C_CLKR) ........................................................................... 360 14.4.9 I2C 上升时间寄存器 (I2C_RTR).............................................................................. 361 15 串行外设接口 / 片上音频接口 (SPI/I2S) .....................................................................362 15.1 简介..................................................................................................................................... 362 15.2 主要特性.............................................................................................................................. 362 15.2.1 SPI 特点................................................................................................................... 362 15.2.2 I2S 特性 .................................................................................................................. 363 15.3 SPI 功能说明....................................................................................................................... 363 15.3.1 引脚配置 .................................................................................................................. 363 15.3.2 SPI 从模式 .............................................................................................................. 366 15.3.3 SPI 主模式 ............................................................................................................... 366 15.3.4 SPI 单工通信........................................................................................................... 367 15.3.5 数据接收和发送流程 ................................................................................................ 367 15.3.6 CRC 校验................................................................................................................. 368 15.3.7 状态标志和错误标志 ................................................................................................ 368 15.3.8 停止 SPI................................................................................................................... 369 15.3.9 DMA 请求................................................................................................................. 370 15.3.10 SPI 中断................................................................................................................... 371 15.4 I2S 功能说明 ....................................................................................................................... 372 15.4.1 一般描述 .................................................................................................................. 372 15.4.2 支持的音频标准 ....................................................................................................... 372 15.4.3 时钟生成器............................................................................................................... 379 9 GD32F1x0 用户手册 15.4.4 运行.......................................................................................................................... 381 15.4.5 DMA 功能 ................................................................................................................ 384 15.5 SPI 寄存器 ......................................................................................................................... 384 15.5.1 SPI 控制寄存器 1 (SPI_CTLR1) .............................................................................. 384 15.5.2 SPI 控制寄存器 2 (SPI_CTLR2) ............................................................................. 386 15.5.3 SPI 状态寄存器 (SPI_STR)..................................................................................... 387 15.5.4 SPI 数据寄存器 (SPI_DTR) .................................................................................... 388 15.5.5 15.5.6 15.5.7 15.5.8 15.5.9 SPI CRC 多项式寄存器 (SPI_CPR)........................................................................ 389 SPI 接收 CRC 寄存器 (SPI_RCR) .......................................................................... 389 SPI 发送 CRC 寄存器 (SPI_TCR) .......................................................................... 389 SPI I2S 控制寄存器 (SPI_I2SCTLR)....................................................................... 390 SPI I2S 时钟预分频寄存器 (SPI_I2SCKP).............................................................. 391 16 比较器 (CMP) ..............................................................................................................393 16.1 CMP 说明............................................................................................................................ 393 16.2 CMP 主要特性..................................................................................................................... 393 16.3 CMP 功能说明..................................................................................................................... 393 16.3.1 比较器时钟和复位 .................................................................................................... 394 16.3.2 比较器输入输出 ....................................................................................................... 394 16.3.3 比较器电源模式 ....................................................................................................... 395 16.3.4 比较器迟滞............................................................................................................... 395 16.3.5 比较器寄存器写保护 ................................................................................................ 395 16.4 CMP 寄存器 ........................................................................................................................ 395 16.4.1 CMP 控制和状态寄存器 (CMP_CSR) ..................................................................... 395 17 通用同步异步收发器 (USART) ....................................................................................399 17.1 简介..................................................................................................................................... 399 17.2 主要特点.............................................................................................................................. 399 17.3 功能描述.............................................................................................................................. 401 17.3.1 USART 发送器 ........................................................................................................ 402 17.3.2 USART 接收器 ........................................................................................................ 403 17.3.3 接收错误 .................................................................................................................. 404 17.3.4 波特率发生............................................................................................................... 404 17.3.5 自动波特率检测 ....................................................................................................... 404 17.3.6 多处理器通信 ........................................................................................................... 405 17.3.7 ModBus 通信 ........................................................................................................... 405 17.3.8 LIN 模式 ................................................................................................................... 405 17.3.9 半双工通信模式 ....................................................................................................... 406 17.3.10 同步通信模式 ........................................................................................................... 406 17.3.11 智能卡(ISO7816)模式 .............................................................................................. 407 17.3.12 串行红外(IrDA SIR)编解码功能模块.................................................................... 408 17.3.13 硬件流控制............................................................................................................... 409 17.3.14 DMA 请求................................................................................................................. 412 17.3.15 从 Deepsleep 模式唤醒............................................................................................ 412 17.3.16 USART 中断............................................................................................................ 412 10 GD32F1x0 用户手册 17.4 USART 寄存器 .................................................................................................................... 414 17.4.1 USART 控制寄存器 1 (USART_CTLR1)................................................................. 414 17.4.2 USART 控制寄存器 2 (USART_CTLR2)................................................................. 416 17.4.3 USART 控制寄存器 3 (USART_CTLR3) ................................................................ 418 17.4.4 USART 波特率寄存器 (USART_BRR) ................................................................... 421 17.4.5 USART 保护时间和预分频器寄存器 (USART_GTPR) ........................................... 422 17.4.6 USART 接收超时寄存器 (USART_RTR)................................................................ 422 17.4.7 USART 请求寄存器 (USART_CMD) ...................................................................... 423 17.4.8 USART 状态寄存器 (USART_STR) ....................................................................... 424 17.4.9 USART 状态标志清除寄存器 (USART_SCR) ........................................................ 427 17.4.10 USART 数据接收寄存器 (USART_RDTR).............................................................. 429 17.4.11 USART 数据发送寄存器 (USART_TDTR) ............................................................. 429 18 MCU 调试 (MCUDBG).................................................................................................430 18.1 简介..................................................................................................................................... 430 18.2 功能描述.............................................................................................................................. 430 18.2.1 省电模式的调试支持 ................................................................................................ 430 18.2.2 定时器,I2C,RTC,WWDG 与 IWDG 的调试支持................................................ 430 18.3 MCUDBG 寄存器 ............................................................................................................... 430 18.3.1 MCUDBG ID 寄存器 (MCUDBG_IDR).................................................................... 430 18.3.2 MCUDBG 控制寄存器 1 (MCUDBG_CTLR1)......................................................... 431 18.3.3 MCUDBG 控制寄存器 2 (MCUDBG_CTLR2) ........................................................ 433 19 通用串行总线全速设备接口 (USB 2.0 FS)...................................................................435 19.1 简介..................................................................................................................................... 435 19.2 主要特性.............................................................................................................................. 435 19.3 实现..................................................................................................................................... 435 19.4 信号描述.............................................................................................................................. 436 19.5 功能描述.............................................................................................................................. 436 19.5.1 模块图 ...................................................................................................................... 436 19.5.2 基本功能 .................................................................................................................. 437 19.5.3 操作流程 .................................................................................................................. 438 19.5.4 USB 中断 ................................................................................................................ 442 19.5.5 同步传输 .................................................................................................................. 442 19.5.6 复位事件 .................................................................................................................. 442 19.5.7 挂起/恢复事件 .......................................................................................................... 443 19.5.8 链接电源管理 (LPM) 级别 L1 ................................................................................. 443 19.6 USB 寄存器 ........................................................................................................................ 443 19.6.1 USB 控制寄存器 (USB_CTLR) .............................................................................. 443 19.6.2 USB 中断标志寄存器 (USB_IFR)............................................................................ 445 19.6.3 USB 状态寄存器 (USB_SR)................................................................................... 446 19.6.4 USB 设备地址寄存器 (USB_AR)............................................................................ 446 19.6.5 USB 缓冲器地址寄存器 (USB_BAR) ..................................................................... 447 19.6.6 USB 端点 n 控制/状态寄存器 (USB_EPnCSR), n=[0..7]........................................ 447 19.6.7 USB 发送缓冲地址寄存器 n (USB_TXARn)........................................................... 448 11 GD32F1x0 用户手册 19.6.8 USB 发送字节数目寄存器 n (USB_TXCNTn) ......................................................... 449 19.6.9 USB 接收缓冲器地址寄存器 n (USB_RXARn)....................................................... 449 19.6.10 USB 接收字节数目寄存器 n (USB_RXCNTRn) ...................................................... 449 19.6.11 USB 子端点 n 寄存器 (USB_SUBEPnR), n=[0..7] ................................................. 450 19.6.12 USB LPM 控制寄存器 (USB_LPMCNTR) .............................................................. 450 19.6.13 USB LPM 中断状态寄存器 (USB_LPMISTR) ........................................................ 451 20 实时时钟 (RTC) ...........................................................................................................452 20.1 简介..................................................................................................................................... 452 20.2 主要特点.............................................................................................................................. 452 20.3 功能描述.............................................................................................................................. 452 20.3.1 RTC 框图 ................................................................................................................. 452 20.3.2 RTC 管脚 ................................................................................................................. 454 20.3.3 时钟和预分频 ........................................................................................................... 455 20.3.4 实时时钟和日历 ....................................................................................................... 455 20.3.5 位域可屏蔽可配置的闹钟 ......................................................................................... 455 20.3.6 RTC 初始化和配置................................................................................................... 456 20.3.7 读取日历 .................................................................................................................. 457 20.3.8 复位 RTC ................................................................................................................. 458 20.3.9 RTC 同步 ................................................................................................................. 458 20.3.10 RTC 参考时钟检测 .................................................................................................. 459 20.3.11 RTC 平滑数字校准 .................................................................................................. 459 20.3.12 时间戳功能............................................................................................................... 461 20.3.13 侵入检测 .................................................................................................................. 461 20.3.14 校准时钟输出 ........................................................................................................... 462 20.3.15 闹钟输出 .................................................................................................................. 462 20.4 RTC 省电模式管理 .............................................................................................................. 463 20.5 RTC 中断 ............................................................................................................................ 463 20.6 RTC 寄存器 ........................................................................................................................ 463 20.6.1 RTC 时间寄存器 (RTC_TR) ................................................................................... 463 20.6.2 RTC 日期寄存器 (RTC_DR)................................................................................... 464 20.6.3 RTC 控制寄存器 (RTC_CTLR) .............................................................................. 465 20.6.4 RTC 状态和标志寄存器 (RTC_STR)...................................................................... 467 20.6.5 RTC 预分频寄存器 (RTC_PSCR) ........................................................................... 468 20.6.6 RTC 警报寄存器 (RTC_ALRMR) ........................................................................... 469 20.6.7 RTC 写保护 (RTC_WPR)....................................................................................... 470 20.6.8 RTC 亚秒寄存器 (RTC_SSR) ................................................................................ 470 20.6.9 RTC 移位功能控制寄存器 (RTC_SHIFTCTLR) ..................................................... 471 20.6.10 RTC 时间戳时间寄存器 (RTC_TSTR) ................................................................... 471 20.6.11 RTC 时间戳日期寄存器 (RTC_TSDR) ................................................................... 472 20.6.12 RTC 时间戳亚秒寄存器 (RTC_TSSSR) ................................................................. 473 20.6.13 RTC 校准配置寄存器 (RTC_CCR)......................................................................... 473 20.6.14 RTC 侵入和复用功能配置寄存器 (RTC_TAFCR) ................................................... 474 20.6.15 RTC 闹钟亚秒寄存器 (RTC_ALARMSSR)............................................................. 476 12 GD32F1x0 用户手册 20.6.16 RTC 备份寄存器 (RTC_BKPxR)(x=0,1,2,3,4)........................................................ 477 21 触摸传感控制器 (TSI) ..................................................................................................478 21.1 简介..................................................................................................................................... 478 21.2 主要特点.............................................................................................................................. 478 21.3 功能描述.............................................................................................................................. 478 21.3.1 TSI 框图 .................................................................................................................. 478 21.3.2 触摸传感技术概述 .................................................................................................... 479 21.3.3 电荷转移序列 ........................................................................................................... 480 21.3.4 电荷转移序列状态机 ................................................................................................ 482 21.3.5 状态时钟和持续时间 ................................................................................................ 483 21.3.6 PIN 模式和 TSI 控制 ............................................................................................... 484 21.3.7 ASW 和迟滞模式..................................................................................................... 484 21.3.8 TSI 操作流 ............................................................................................................... 484 21.3.9 TSI 标志和中断 ....................................................................................................... 484 21.3.10 TSI GPIOs ............................................................................................................... 485 21.4 TSI 寄存器.......................................................................................................................... 485 21.4.1 TSI 控制寄存器 (TSI_CTLR) .................................................................................. 485 21.4.2 TSI 错误中断或标志中断使能寄存器 (TSI_IER)...................................................... 487 21.4.3 TSI 清错误或标志寄存器 (TSI_CEFR) .................................................................... 488 21.4.4 TSI 状态寄存器 (TSI_STR) .................................................................................... 488 21.4.5 TSI 引脚迟滞模式寄存器 (TSI_PHMR) ................................................................... 489 21.4.6 TSI 模拟开关寄存器 (TSI_ASWR) .......................................................................... 489 21.4.7 TSI 采样引脚寄存器 (TSI_SPR)............................................................................. 490 21.4.8 TSI 通道引脚寄存器 (TSI_CPR)............................................................................. 490 21.4.9 TSI 组控制寄存器 (TSI_GCTLR)............................................................................ 491 21.4.10 TSI 组 x 周期数寄存器 (TSI_GxCYCNR) ............................................................. 491 22 HDMI-CEC 控制器 (HDMI-CEC)..................................................................................493 22.1 简介..................................................................................................................................... 493 22.2 主要特征.............................................................................................................................. 493 22.3 功能说明.............................................................................................................................. 494 22.3.1 CEC 总线引脚 ......................................................................................................... 494 22.3.2 信息说明 .................................................................................................................. 494 22.3.3 位时序说明............................................................................................................... 495 22.3.4 仲裁.......................................................................................................................... 496 22.3.5 SFTOPT 位说明....................................................................................................... 496 22.4 错误定义.............................................................................................................................. 497 22.4.1 错误位 ...................................................................................................................... 497 22.4.2 帧错误 ...................................................................................................................... 497 22.4.3 位上升错误(BRE) ..................................................................................................... 497 22.4.4 短位错误 (SBPE) .................................................................................................... 497 22.4.5 长位错误(LBPE)....................................................................................................... 498 22.4.6 传输错误监测(TE) .................................................................................................... 499 22.5 HDMI-CEC 中断.................................................................................................................. 500 13 GD32F1x0 用户手册 22.6 HDMI-CEC 寄存器 ............................................................................................................. 500 22.6.1 CEC 控制寄存器 (CEC_CTLR)............................................................................... 500 22.6.2 CEC 设置寄存器 (CEC_SR) .................................................................................. 501 22.6.3 CEC 数据发送寄存器 (CEC_TDTR) ....................................................................... 503 22.6.4 CEC 数据接收寄存器 (CEC_RDTR) ....................................................................... 503 22.6.5 CEC 中断状态寄存器 (CEC_ISTR)......................................................................... 503 22.6.6 CEC 中断使能寄存器 (CEC_IER) ........................................................................... 505 23 版本历史 .......................................................................................................................508 14 GD32F1x0 用户手册 图 图 1. Cortex™-M3 框图 .......................................................................................................................... 24 图 2. GD32F1x0 系列系统结构 .............................................................................................................. 25 图 3. GD32F1x0 存储器映射 .................................................................................................................. 27 图 4. 引导模式.......................................................................................................................................... 29 图 5. 电源域概览...................................................................................................................................... 40 图 6. 上电复位/掉电复位波形图 ............................................................................................................. 41 图 7. 系统复位电路 .................................................................................................................................. 61 图 8. 标准 I/O 端口位的基本结构.......................................................................................................... 94 图 9. 浮空/上拉/下拉输入配置................................................................................................................ 96 图 10. 输出配置........................................................................................................................................ 96 图 11. 模拟高阻配置................................................................................................................................ 97 图 12. 配选功能配置................................................................................................................................ 98 图 13. CRC 计算单元框图..................................................................................................................... 112 图 14. EXTI 框图..................................................................................................................................... 119 图 15. DMA 中断产生逻辑..................................................................................................................... 126 图 16. DMA 请求映射............................................................................................................................. 127 图 17. 高级定时器框图.......................................................................................................................... 135 图 18. 当预分频器的参数从 1 变到 2 时,计数器的时序图............................................................. 135 图 19. 当预分频器的参数从 1 变到 4 时,计数器的时序图.............................................................. 136 图 20. 计数器时序图,内部时钟分频系数为 1................................................................................... 137 图 21.计数器时序图,内部时钟分频系数为 2..................................................................................... 137 图 22.计数器时序图,内部时钟分频系数为 4..................................................................................... 138 图 23.计数器时序图,内部时钟分频系数为 N .................................................................................... 138 图 24. 计数器时序图,当 ARPE=0 时更新事件 ................................................................................ 139 图 25.计数器时序图,当 ARPE=1 时更新事件 .................................................................................. 139 图 26.计数器时序图,内部时钟分频系数为 1..................................................................................... 140 图 27.计数器时序图,内部时钟分频系数为 2..................................................................................... 141 图 28.计数器时序图,内部时钟分频系数为 4..................................................................................... 141 图 29.计数器时序图,内部时钟分频系数为 N .................................................................................... 142 图 30.计数器时序图,不适用计数器时的更新事件 ............................................................................ 142 图 31.计数器时序图,内部时钟分频系数为 1, TMx_CARL = 0x5 ................................................... 143 图 32.计数器时序图,内部时钟分频系数为 2..................................................................................... 144 图 33.计数器时序图,内部时钟分频系数为 4, TMx_CARL=0x63 ................................................... 144 图 34.计数器时序图,内部时钟分频系数为 N .................................................................................... 145 图 35.计数器时序图, 当 ARPE=1 时的更新事件 ............................................................................... 145 图 36.计数器时序图, 当 ARPE=1 (计数器溢出)时的更新事件......................................................... 146 图 37. 不同模式及不同 TMx_CREP 寄存器设置下更新速率的例子 ............................................... 147 图 38. 内部时钟分频为 1 时正常模式下的控制电路.......................................................................... 147 图 39. 捕获/比较通道(例如:通道 1 输入级)...................................................................................... 149 图 40. 捕获/比较通道 1 主电路 ............................................................................................................ 149 15 GD32F1x0 用户手册 图 41.捕获/比较通道输出级 (通道 1 到 3).......................................................................................... 150 图 42.捕获/比较通道输出级 (通道 4)................................................................................................... 150 图 43. 输出比较模式,在 OC1 上切换................................................................................................ 150 图 44. 带有死区时间的互补输出.......................................................................................................... 151 图 45. 延迟大于负脉冲的死区时间波形.............................................................................................. 152 图 46. 延迟大于正脉冲的死区时间波形.............................................................................................. 152 图 47. 中止功能相应的输出表现.......................................................................................................... 153 图 48. 单脉冲模式.................................................................................................................................. 154 图 49. 编码器接口模式下计数器运行实例 .......................................................................................... 155 图 50. 带有 TI1FP1 极性转换的编码器接口模式下的例子............................................................... 155 图 51. 复位模式的控制电路.................................................................................................................. 156 图 52. 暂停模式下的控制电路.............................................................................................................. 157 图 53. 触发模式下的控制电路.............................................................................................................. 157 图 54. 定时器 1 主/从模式的例子 ........................................................................................................ 158 图 55. 用定时器 2 的使能输出触发定时器 1 ...................................................................................... 159 图 56. 用定时器 2 的更新来触发定时器 1 .......................................................................................... 159 图 57. 用定时器 2 的使能来选通定时器 1 .......................................................................................... 160 图 58. 用定时器 2 的 OC1REF 选通定时器 1 .................................................................................... 161 图 59. 用定时器 2 的 TI1 输入来触发定时器 1 和定时器 2............................................................... 162 图 60. 通用定时器框图(TM2 和 TM3) ................................................................................................. 183 图 61. 当预分频器的参数从 1 变到 2 时,计数器时序图 ................................................................. 184 图 62. 当预分频器的参数从 1 变到 4 时,计数器时序图 ................................................................. 184 图 63.计数器时序图,内部时钟分频系数为 1..................................................................................... 185 图 64.计数器时序图,内部时钟分频系数为 2..................................................................................... 186 图 65.计数器时序图,内部时钟分频系数为 4..................................................................................... 186 图 66.计数器时序图,内部时钟分频系数为 N .................................................................................... 187 图 67.计数器时序图, 当 ARPE=0 时的更新事件 ............................................................................... 187 图 68.计数器时序图, 当 ARPE=1 时的更新事件 ............................................................................... 188 图 69.计数器时序图,内部时钟分频系数为 1..................................................................................... 189 图 70.计数器时序图,内部时钟分频系数为 2..................................................................................... 189 图 71.计数器时序图,内部时钟分频系数为 4..................................................................................... 190 图 72.计数器时序图,内部时钟分频系数为 N .................................................................................... 190 图 73.计数器时序图, 不使用计数器时的更新事件............................................................................. 191 图 74.计数器时序图,内部时钟分频系数为 1, TMx_CARL = 0x5 ................................................... 192 图 75.计数器时序图,内部时钟分频系数为 2..................................................................................... 192 图 76.计数器时序图,内部时钟分频系数为 4, TMx_CARL=0x63 ................................................... 193 图 77.计数器时序图,内部时钟分频系数为 N .................................................................................... 193 图 78.计数器时序图, ARPE=1 时的更新事件 ..................................................................................... 194 图 79.计数器时序图, ARPE=1 (计数器溢出)时的更新事件............................................................... 194 图 80. 内部时钟分频为 1 时正常模式下的控制电路.......................................................................... 195 图 81. 捕获/比较通道(例如:通道 1 输入级)...................................................................................... 196 图 82. 捕获/比较通道 1 主电路 ............................................................................................................ 197 图 83. 捕获/比较通道输出级 (通道 1)................................................................................................. 197 图 84. 输出比较模式,在 OC1 上切换................................................................................................ 197 16 GD32F1x0 用户手册 图 85. 单脉冲模式.................................................................................................................................. 198 图 86. 编码器接口模式下计数器运行实例 .......................................................................................... 199 图 87. 带有 TI1FP1 极性转换的编码器接口模式下的例子............................................................... 200 图 88. 复位模式的控制电路.................................................................................................................. 201 图 89. 暂停模式下的控制电路.............................................................................................................. 201 图 90. 触发模式下的控制电路.............................................................................................................. 201 图 91. 定时器 2 主/从模式的例子 ........................................................................................................ 202 图 92. 通用定时器框图 (TM6) ............................................................................................................. 221 图 93. 当预分频器的参数从 1 变到 2 时,计数器时序图 ................................................................ 222 图 94. 当预分频器的参数从 1 变到 4 时,计数器时序图 ................................................................. 222 图 95. 内部时钟分频为 1 时正常模式下的控制电路.......................................................................... 223 图 96. 通用定时器框图 (TM14) ........................................................................................................... 228 图 97. 当预分频器的参数从 1 变到 2 时,计数器时序图 ................................................................ 229 图 98. 当预分频器的参数从 1 变到 4 时,计数器时序图 ................................................................. 229 图 99. 内部时钟分频为 1 时正常模式下的控制电路.......................................................................... 233 图 100. 捕获/比较通道(例如:输入级)................................................................................................ 234 图 101. 捕获/比较通道 1 主电路 .......................................................................................................... 234 图 102. 捕获/比较通道输出级 .............................................................................................................. 235 图 103. 输出比较模式,在 OC1 上切换 ............................................................................................. 235 图 104.计数器时序图,内部时钟分频系数为 1 .................................................................................. 230 图 105.计数器时序图,内部时钟分频系数为 2 .................................................................................. 230 图 106.计数器时序图,内部时钟分频系数为 4 .................................................................................. 231 图 107.计数器时序图,内部时钟分频系数为 N.................................................................................. 231 图 108.计数器时序图, 当 ARPE=0 时的更新事件 ............................................................................. 232 图 109.计数器时序图, 当 ARPE=1 时的更新事件 ............................................................................. 232 图 110. 通用定时器框图 (TM15)......................................................................................................... 244 图 111. 当预分频器的参数从 1 变到 2 时,计数器时序图 .............................................................. 245 图 112. 当预分频器的参数从 1 变到 4 时,计数器时序图 ............................................................... 245 图 113.计数器时序图,内部时钟分频系数为 1 .................................................................................. 246 图 114.计数器时序图,内部时钟分频系数为 2 .................................................................................. 246 图 115.计数器时序图,内部时钟分频系数为 4 .................................................................................. 247 图 116.计数器时序图,内部时钟分频系数为 N.................................................................................. 247 图 117.计数器时序图, 当 ARPE=0 时更新事件 ................................................................................. 248 图 118.计数器时序图, 当 ARPE=1 时更新事件 ................................................................................. 248 图 119. 不同模式及不同 TMx_CREP 寄存器设置下更新速率的例子............................................. 249 图 120. 内部时钟分频为 1 时正常模式下的控制电路 ....................................................................... 249 图 121. 捕获/比较通道(例如:通道 1 输入级).................................................................................... 250 图 122. 捕获/比较通道 1 主电路 .......................................................................................................... 251 图 123. 捕获/比较通道输出级(通道 1)................................................................................................ 251 图 124. 捕获/比较通道输出级(通道 2)................................................................................................ 252 图 125. 输出比较模式,在 OC1 上切换 ............................................................................................. 252 图 126. 带有死区时间的互补输出 ....................................................................................................... 253 图 127. 延迟大于负脉冲的死区时间波形............................................................................................ 253 图 128. 延迟大于正脉冲的死区时间波形............................................................................................ 254 17 GD32F1x0 用户手册 图 129. 响应中止的输出表现 ............................................................................................................... 254 图 130. 单脉冲模式 ............................................................................................................................... 256 图 131. 复位模式的控制电路 ............................................................................................................... 257 图 132. 暂停模式下的控制电路 ........................................................................................................... 257 图 133. 触发模式下的控制电路 ........................................................................................................... 258 图 134. 定时器 15 主从模式的例子 ..................................................................................................... 258 图 135. 用定时器 2 的使能输出触发定时器 15 .................................................................................. 259 图 136. 用定时器 2 的更新来触发定时器 15 ...................................................................................... 260 图 137. 用定时器 2 的使能来选通定时器 15 ...................................................................................... 260 图 138. 用定时器 2 的 OC1REF 选通定时器 15................................................................................ 261 图 139. 用定时器 2 的 TI1 输入来触发定时器 15 和定时器 2 .......................................................... 262 图 140. 通用定时器框图 (TM16/17) ................................................................................................... 279 图 141. 当预分频器的参数从 1 变到 2 时,计数器时序图 ............................................................... 280 图 142. 当预分频器的参数从 1 变到 4 时,计数器时序图 ............................................................... 280 图 143.计数器时序图,内部时钟分频系数为 1 .................................................................................. 281 图 144.计数器时序图,内部时钟分频系数为 2 .................................................................................. 281 图 145.计数器时序图,内部时钟分频系数为 4 .................................................................................. 282 图 146.计数器时序图,内部时钟分频系数为 N.................................................................................. 282 图 147.计数器时序图, 当 ARPE=0 时的更新事件 ............................................................................. 283 图 148.计数器时序图, 当 ARPE=1 时更新事件 ................................................................................. 283 图 149. 不同模式及不同 TMx_CREP 寄存器设置下更新速率的例子............................................. 284 图 150. 内部时钟分频为 1 时正常模式下的控制电路 ....................................................................... 285 图 151. 捕获/比较通道(例如:通道 1 输入级).................................................................................... 286 图 152. 捕获/比较通道 1 主电路 .......................................................................................................... 286 图 153. 捕获/比较通道输出级 (通道 1)............................................................................................... 287 图 154. 输出比较模式,在 OC1 上切换 ............................................................................................. 287 图 155. 带有死区时间的互补输出 ....................................................................................................... 288 图 156. 延迟大于负脉冲的死区时间波形............................................................................................ 288 图 157. 延迟大于正脉冲的死区时间波形............................................................................................ 289 图 158. 响应中止的输出表现 ............................................................................................................... 290 图 159. 单脉冲模式 ............................................................................................................................... 291 图 160. IFRR 输出时序图 1................................................................................................................... 304 图 161. IFRR 输出时序图 2................................................................................................................. 305 图 162. IFRR 输出时序图 3................................................................................................................... 305 图 163. 独立看门狗框图 ....................................................................................................................... 307 图 164. 窗口看门狗框图 ....................................................................................................................... 311 图 165. 窗口看门狗时序图 ................................................................................................................... 312 图 166. ADC 模块图 .............................................................................................................................. 316 图 167. 单次转换模式 ........................................................................................................................... 318 图 168. 持续转换模式, 禁用扫描 ........................................................................................................ 318 图 169. 持续转换模式, 使能扫描 ........................................................................................................ 319 图 170. 扫描转换模式 ........................................................................................................................... 319 图 171. 间断转换模式 ........................................................................................................................... 320 图 172. 数据对齐 ................................................................................................................................... 321 18 GD32F1x0 用户手册 图 173.DAC 通道模块框图 .................................................................................................................... 333 图 174. I2C 模块框图 .............................................................................................................................. 340 图 175. 数据有效性 ................................................................................................................................ 341 图 176. 开始和停止状态 ........................................................................................................................ 341 图 177. 时钟同步 .................................................................................................................................... 341 图 178. SDA 线仲裁 ................................................................................................................................ 342 图 179. 7 位地址的 I2C 通讯流程 .......................................................................................................... 342 图 180. 10 位地址的 I2C 通讯流程........................................................................................................ 343 图 181. 从机发送模式 ............................................................................................................................ 344 图 182. 从机接收模式 ............................................................................................................................ 345 图 183. 主机发送模式 ............................................................................................................................ 347 图 184. 主机接收使用方案 A 模式....................................................................................................... 349 图 185. 主机使用方案 B 接收模式....................................................................................................... 351 图 186. 单主/单从应用 .......................................................................................................................... 364 图 187. SPI 数据时钟时序图................................................................................................................. 365 图 188. 使用 DMA 发送......................................................................................................................... 371 图 189. 使用 DMA 接收......................................................................................................................... 371 图 190. I2S 框图 ..................................................................................................................................... 372 图 191. I2S 飞利浦标准时序图(DTLEN=00, CHLEN=0, CKPL=0).................................................. 373 图 192. I2S 飞利浦标准时序图(DTLEN=00, CHLEN=0, CKPL=1).................................................. 373 图 193. I2S 飞利浦标准时序图(DTLEN=10, CHLEN=1, CKPL=0).................................................. 373 图 194. I2S 飞利浦标准时序图(DTLEN=10, CHLEN=1, CKPL=1).................................................. 373 图 195. I2S 飞利浦标准时序图(DTLEN=01, CHLEN=1, CKPL=0).................................................. 374 图 196. I2S 飞利浦标准时序图(DTLEN=01, CHLEN=1, CKPL=1).................................................. 374 图 197. I2S 飞利浦标准时序图(DTLEN=00, CHLEN=1, CKPL=0).................................................. 374 图 198. I2S 飞利浦标准时序图(DTLEN=00, CHLEN=1, CKPL=1).................................................. 374 图 199. MSB 对齐标准时序图(DTLEN=00, CHLEN=0, CKPL=0) ................................................... 375 图 200. MSB 对齐标准时序图(DTLEN=00, CHLEN=0, CKPL=1) ................................................... 375 图 201. MSB 对齐标准时序图(DTLEN=10, CHLEN=1, CKPL=0) ................................................... 375 图 202. MSB 对齐标准时序图(DTLEN=10, CHLEN=1, CKPL=1) ................................................... 375 图 203. MSB 对齐标准时序图(DTLEN=01, CHLEN=1, CKPL=0) ................................................... 375 图 204. MSB 对齐标准时序图(DTLEN=01, CHLEN=1, CKPL=1) ................................................... 375 图 205. MSB 对齐标准时序图(DTLEN=00, CHLEN=1, CKPL=0) ................................................... 375 图 206. MSB 对齐标准时序图(DTLEN=00, CHLEN=1, CKPL=1) ................................................... 376 图 207. LSB 对齐标准时序图(DTLEN=01, CHLEN=1, CKPL=0) .................................................... 376 图 208. LSB 对齐标准时序图(DTLEN=01, CHLEN=1, CKPL=1) .................................................... 376 图 209. LSB 对齐标准时序图(DTLEN=00, CHLEN=1, CKPL=0) .................................................... 376 图 210. LSB 对齐标准时序图(DTLEN=00, CHLEN=1, CKPL=1) .................................................... 376 图 211. PCM 标准短帧同步模式时序图 (DTLEN=00, CHLEN=0, CKPL=0)................................. 377 图 212. PCM 标准短帧同步模式时序图 (DTLEN=00, CHLEN=0, CKPL=1)................................. 377 图 213. PCM 标准短帧同步模式时序图 (DTLEN=10, CHLEN=1, CKPL=0)................................. 377 图 214. PCM 标准短帧同步模式时序图 (DTLEN=10, CHLEN=1, CKPL=1)................................. 377 图 215. PCM 标准短帧同步模式时序图 (DTLEN=01, CHLEN=1, CKPL=0)................................. 377 图 216. PCM 标准短帧同步模式时序图 (DTLEN=01, CHLEN=1, CKPL=1)................................. 377 19 GD32F1x0 用户手册 图 217. PCM 标准短帧同步模式时序图 (DTLEN=00, CHLEN=1, CKPL=0)................................. 378 图 218. PCM 标准短帧同步模式时序图 (DTLEN=00, CHLEN=1, CKPL=1)................................. 378 图 219. PCM 标准长帧同步模式时序图 (DTLEN=00, CHLEN=0, CKPL=0) ................................ 378 图 220. PCM 标准长帧同步模式时序图 (DTLEN=00, CHLEN=0, CKPL=1) ................................ 378 图 221. PCM 标准长帧同步模式时序图 (DTLEN=10, CHLEN=1, CKPL=0) ................................ 378 图 222. PCM 标准长帧同步模式时序图 (DTLEN=10, CHLEN=1, CKPL=1) ................................ 378 图 223. PCM 标准长帧同步模式时序图 (DTLEN=01, CHLEN=1, CKPL=0) ................................ 378 图 224. PCM 标准长帧同步模式时序图 (DTLEN=01, CHLEN=1, CKPL=1) ................................ 379 图 225. PCM 标准长帧同步模式时序图 (DTLEN=00, CHLEN=1, CKPL=0) ................................ 379 图 226. PCM 标准长帧同步模式时序图 (DTLEN=00, CHLEN=1, CKPL=1) ................................ 379 图 227. I2S 时钟生成器框图 ................................................................................................................. 379 图 228 CMP 框图 ................................................................................................................................... 394 图 229. USART 模块内部框图.............................................................................................................. 402 图 230. USART 字符帧 (9 数据位和 1 停止位)................................................................................. 403 图 231. LIN 模式下的帧格式错误检测以及断开帧检测 ..................................................................... 406 图 232.同步模式下的 USART 示例 ..................................................................................................... 406 图 233. 8-bit 格式的 USART 同步通信波形 (LBCL=1) .................................................................... 407 图 234.ISO7816-3 帧格式 .................................................................................................................... 407 图 235. IrDA SIR ENDEC 模块 ............................................................................................................ 409 图 236. IrDA 数据调制 ........................................................................................................................... 409 图 237. 两个 USARTs 之间的硬件流控制 .......................................................................................... 411 图 238. 硬件流控 ................................................................................................................................... 411 图 239. USART 中断映射框图.............................................................................................................. 413 图 240. USB 外设模块图 ........................................................................................................................ 436 图 241.缓冲描述符表的用法示例 (USB_BAR = 0)............................................................................ 439 图 242. TSI 模块框图 ............................................................................................................................. 479 图 243.一个通道引脚的采样引脚的框图.............................................................................................. 480 图 244.电荷序列传输期间的采样 引脚的电压.................................................................................... 482 图 245. 电荷转移序列的有限状态机的状态转移图............................................................................ 482 图 246 HDMI-CEC 控制器框图 ........................................................................................................... 494 20 GD32F1x0 用户手册 表 表 1. Flash 模块组织 ................................................................................................................................ 29 表 2. 节电模式总结 .................................................................................................................................. 42 表 3. Cotrex-M3 中的 NVIC 异常类型.................................................................................................. 117 表 4. GD32F1x0 的中断向量表 ............................................................................................................ 117 表 5. EXTI 触发源................................................................................................................................... 119 表 6. DMA 传输操作............................................................................................................................... 125 表 7. DMA 中断事件............................................................................................................................... 126 表 8. 各 DMA 通道请求总结 ................................................................................................................ 128 表 9. 计数方向对编码器信号 ................................................................................................................ 155 表 10. 计数方向对编码器信号.............................................................................................................. 199 表 11.独立看门狗在 40 kHz (LSI)时的最小/最大暂停时间................................................................ 307 表 12. 36 MHz (fPCLK1)时的最大最小值................................................................................................ 312 表 13. ADC 内部信号 ............................................................................................................................ 315 表 14. ADC 引脚定义 ............................................................................................................................ 316 表 15. ADC 用于规则通道的外部触发 ................................................................................................. 321 表 16. ADC 用于注入通道的外部触发 ................................................................................................. 321 表 17. DAC 引脚 .................................................................................................................................... 333 表 18 DAC 的外部触发源 .................................................................................................................... 334 表 19. I2C 总线术语说明 ........................................................................................................................ 340 表 20. 事件状态标志位........................................................................................................................... 353 表 21. I2C 错误标志位 ........................................................................................................................... 353 表 22. SPI 中断请求 ............................................................................................................................... 371 表 23. I2S 比特率计算公式.................................................................................................................... 379 表 24. 音频采样率计算公式.................................................................................................................. 380 表 25.音频采样率配置和精度................................................................................................................ 380 表 26.各个运行模式下 I2S 接口信号的方向........................................................................................ 381 表 27. I2S 中断 ....................................................................................................................................... 382 表 28. USART 重要管脚描述 ............................................................................................................... 401 表 29. 停止位配置................................................................................................................................... 403 表 30. USART 中断请求 ....................................................................................................................... 412 表 31. GD32F1x0 USB 实现................................................................................................................. 436 表 32. GD32F1x0 USB 信号管脚 ........................................................................................................ 436 表 33. 双缓冲标志定义.......................................................................................................................... 441 表 34. 双缓冲的用法.............................................................................................................................. 441 表 35. 接收状态编码.............................................................................................................................. 448 表 36. 端点类型编码.............................................................................................................................. 448 表 37. 端点类别编码.............................................................................................................................. 448 表 38. 发送状态编码.............................................................................................................................. 448 表 39.电荷转移序列的详细步骤以及引脚和开关状态 ........................................................................ 480 .表 40.充电扩展状态的持续时间........................................................................................................... 483 21 GD32F1x0 用户手册 表 41. TSI 错误和标志位 ...................................................................................................................... 485 表 42. TSI 引脚 ....................................................................................................................................... 485 表 43.数据位时序参数表........................................................................................................................ 495 表 44.错误处理时序参数表.................................................................................................................... 498 表 45. TE 时序参数表 ........................................................................................................................... 499 表 46. 版本历史....................................................................................................................................... 508 22 GD32F1x0 用户手册 1 系统及存储器架构 GD32F1x0系列器件的系统架构包括了ARM® Cortex™-M3处理器,总线架构和存储器组织, 将在下面的章节中描述。Cortex™-M3处理器是新一代的处理器核心,它提供了许多新的功能。 高度集成以及各种先进的功能使Cortex™-M3处理器适用于需要微控制器具有高性能和低功耗 的市场产品。Cortex™-M3处理器包括3条AHB总线分别称为ICODE总线,DCode总线和系统 总线。Cortex™-M3处理器的所有存储访问,根据不同的目的和目标存储空间,都会在这三个 总线上执行。存储器的组织采用了哈弗结构,预先定义的存储器映射和高达4 GB的存储空间, 充分保证了系统的灵活性和可扩展性。 1.1 ARM Cortex-M3 处理器 Cortex™-M3处理器是一个通用的32位处理器,非常适合那些兼顾高性能和低功耗的应用领域。 它提供了许多新的功能,如Thumb-2指令集,硬件除法器,低延迟的中断响应时间,位带操作 和多条总线的同时访问。Cortex™-M3处理器基于ARMv7架构,同时支持Thumb和Thumb-2 指令集。下面列出了Cortex™-M3提供的一些系统外设:  内部总线矩阵,用于实现ICode总线, DCode总线, 系统总线, 专用总线(PPB)以及调试专 用总线(AHB-AP)的互联  嵌套式向量型中断控制器 (NVIC)  闪存地址重载及断点单元 (FPB)  数据观测点及跟踪单元(DWT)  指令跟踪宏单元 (ITM)  串行线和JTAG调试接口 (SWJ-DP)  跟踪端口接口单元 (TPIU) 下图显示了Cortex™-M3处理器框图。欲了解更多信息,请参阅ARM®Cortex™-M3技术参考 手册。 23 图 1. Cortex™-M3 框图 GD32F1x0 用户手册 1.2 系统架构 GD32F1x0系列器件的系统结构如下图所示。基于AMBA 3.0 AHB-LITE的多层总线互联矩阵使 得系统中的多个主机和从机之间的并行通信成为可能。在总线矩阵有四个主机,包括ICODE 总线,DCode总线,Cortex™-M3内核系统总线和DMA的系统总线。ICODE总线是指令总线, 用于将代码区域(为0x00000000〜0x1FFF的FFFF)的向量取到Cortex™-M3内核。DCode总线 用于数据加载和存储,也用于代码区的调试访问。系统总线用于系统区域的访问,包括取指令, 数据加载和存储,以及调试访问。系统区域包括内部SRAM区域和外设区域。总线矩阵包含5 个从机,包括闪存控制器的ICODE和DCode接口,内部SRAM,AHB1和AHB2。 AHB2与GPIO端口相连。AHB1与AHB外设相连。诸多AHB外设之中有两个AHB到APB的桥提 供了AHB1和两条APB总线之间的完全同步连接。这两条APB总线连接所有的APB外设。两条 APB总线都能够按最高频率72 MHz工作。 24 图 2. GD32F1x0系列系统结构 GD32F1x0 用户手册 TPIU SW ARM Cortex-M3 Processor Fmax: 72MHz NVIC GP DMA 7chs AHB Matrix ICode DCode System AHB2: Fmax = 72MHz GPIO Ports A, B, C, D, F SRAM Controller IBus DBus Flash Memory Controller SRAM Flash Memory AHB1: Fmax = 72MHz Touch Sensing Interface AHB to APB Bridge 2 CRC AHB to APB Bridge 1 RST/CLK Controller Powered by LDO (1.2V) 12-bit SAR ADC Comparator 1 Comparator 2 EXTI ADC USART1 SPI/I2S1 SYS Config CMP TM1 TM15 TM16 TM17 APB1: Fmax = 72MHz APB2: Fmax = 72MHz PWR IWDG WWDG RTC USB SRAM USB FS HDMI-CEC I2C1 I2C2 DAC USART2 SPI2 TM6 TM2 TM3 TM14 LDO 1.2V POR/PDR LVD PLL Fmax: 72MHz HSE 4-32MHz HSI 8MHz HSI14 14MHz LSI 40KHz Powered by VDD/VDDA 12-bit DAC 1.3 存储器映射 ARM®Cortex ™ -M3处理器采用哈佛结构,可以使用相互独立的总线来读取指令和加载/存储 数据。指令代码和数据都位于相同的存储器地址空间,但在不同的地址范围。程序存储器,数 据存储器,寄存器和I / O端口都在同一个线性的4 GB的地址空间之内。这是Cortex ™- M3的 最大地址范围,因为它的地址总线宽度是32位。此外,为了降低不同客户在相同应用时的软件 复杂度,存储映射是按Cortex ™ -M3处理器提供的规则预先定义的。ARM ®Cortex™-M3的自 带的系统外设也占用了一些地址空间。下图显示了GD32F1x0系列设备的存储映射,包括指令 代码,SRAM ,外设和其他预先定义的区域。为了简化了外设的地址译码,每个外设分配的 地址空间都是1KB 。APB1外设都位于从0x4000 0000到0x4000 FFFF的地址空间 ,而APB2 外设都位于从0x4001 0000到0x40017FFF的地址区域。从0x4002 0000到0x4002 FFFF的地址 25 GD32F1x0 用户手册 区域被AHB1外围设备所使用,从0x48000000到0x4800FFFF的地址区域被AHB2外围设备所 使用。 26 图 3. GD32F1x0存储器映射 0x1FFF FFFF 0x1FFF F80F 0x1FFF F800 0x1FFF EC00 reserved Option Bytes System memory reserved 0x0801 FFFF Flash memory 0x0800 0000 0x0000 0000 Aliased to Flash or system memory according to BOOT pins configuration 0xFFFF FFFF 7 reserved 0xE010 0000 Cortex-M3 Internal 0xE000 0000 Peripherals 6 reserved 0xC000 0000 5 reserved 0xA000 0000 4 0x8000 0000 reserved 3 0x6000 0000 2 0x5000 0000 0x4000 0000 1 0x2000 0000 reserved reserved Peripherals reserved SRAM 0 0x0000 0000 reserved GD32F1x0 用户手册 0x5000 0000 0x4800 1800 0x4800 1400 0x4800 1000 0x4800 0C00 0x4800 0800 0x4800 0400 0x4800 0000 0x4002 4400 0x4002 4000 0x4002 3400 0x4002 3000 0x4002 2400 0x4002 2000 0x4002 1400 0x4002 1000 0x4002 0400 0x4002 0000 0x4001 4C00 0x4001 4800 0x4001 4400 0x4001 4000 0x4001 3C00 0x4001 3800 0x4001 3400 0x4001 3000 0x4001 2C00 0x4001 2800 0x4001 2400 0x4001 0800 0x4001 0400 0x4001 0000 0x4000 C400 0x4000 C000 0x4000 7C00 0x4000 7800 0x4000 7400 0x4000 7000 0x4000 6400 0x4000 6000 0x4000 5C00 0x4000 5800 0x4000 5400 0x4000 4800 0x4000 4400 0x4000 4000 0x4000 3C00 0x4000 3800 0x4000 3400 0x4000 3000 0x4000 2C00 0x4000 2800 0x4000 2400 0x4000 2000 0x4000 1400 0x4000 1000 0x4000 0800 0x4000 0400 0x4000 0000 reserved Port F reserved Port D Port C Port B Port A reserved TSC reserved CRC reserved Flash Interface reserved RCC reserved DMA reserved TM17 TM16 TM15 reserved USART1 reserved SPI/I2S1 TM1 reserved ADC reserved EXTI SYSCFG + CMP reserved reserved reserved CEC DAC PWR reserved USB SRAM (512B) USB registers I2C2 I2C1 reserved USART2 reserved reserved SPI2 reserved IWDG WWDG RTC reserved TM14 reserved TM6 reserved TM3 TM2 27 1.3.1 1.3.2 1.3.3 位带操作 GD32F1x0 用户手册 支持了位带操作后,用户可以使用普通的加载/存储指令来对单一的比特进行读写。 Cortex™-M3处理器提供了两个支持位带操作的区域。其中一个是SRAM区的最低1MB范围, 第二个是片内外设区的最低1MB范围。这两个区域中的地址除了普通应用外,还有自己的―位 带别名区‖。位带别名区把每个比特扩展成一个32位的字。当用户访问位带别名区时,就可以 达到访问原始比特的目的。 下面的映射公式表明了位带别名区的每个32位字如何对应位带区的某个比特。 位带别名区地址 = 位带别名区基地址 + (字节偏移×32) + (位数×4) 其中:  位带别名区地址指的是位带区目标比特对应在位带别名区的地址  位带别名区基地址指的是位带别名区的起始地址  字节偏移指的是位带区目标比特所在的字节的字节地址偏移量  位数指的是目标比特在对应字节中的位置 例如, 要想访问0x2000 0200地址的第7位, 可访问的位带别名区地址是: 位别名地址= 0x2200 0000 + (0x200 * 32) + (7 * 4) = 0x2200 401C 如果对0x2200 401C 进行写操作,那么0x2000 0200 的第7位将会相应变化;如果对0x2200 401C进行读操作,那么视0x2000 0200 的第7位状态而返回0x0000 0001或0x0000 0000。 片上 SRAM GD32F1x0系列微控制器含有高达8KB的片上SRAM,起始地址为0x20000000。它支持8位, 16位和32位访问。为了增加存储器的鲁棒性,支持奇偶校验。用户可以通过用户可选字节(请 参考第3.3.9章可选字节)的OB_SRAM_PARITY_CHECK位来启用奇偶校验功能。当启用时, 如果校验失败,产生一个NMI中断。SRAM奇偶校验错误标志在系统配置寄存器2(SYSCFG_R2) 之中。如果系统配置寄存器2(SYSCFG_R2)的SRAM_PARITY_ERROR_LOCK位置1,错误标 志将被连接到定时器15/定时器16/定时器17的break输入端。 SRAM的真实数据宽度为36位,包括32位数据和4位奇偶校验(每字节1位)位。在写入时,奇偶 校验位被计算并存储到SRAM。当读取时,奇偶校验位会用SRAM读出的数据再计算一遍。计 算出的奇偶校验位将与读出的奇偶校验位(写入访问期间计算并存储的奇偶校验位)进行比较。 如果它们不相同,则奇偶校验失败。 注意: 如果启用了SRAM奇偶校验,建议通过软件在代码的开始初始化整个SRAM存储器,以 避免读取未初始化的位置时,得到的奇偶校验错误。 片上闪存 GD32F1x0系列微控制器提供高达128KB的片上闪存。片上闪存包括最大高达128 KB的主存模 块和3 KB容量的用于存储引导加载程序的信息模块。主存模块分为128页,每页的容量为1 KB。 下表显示了细节。 28 GD32F1x0 用户手册 表 1. Flash 模块组织 模块 名称 Page 0 Page 1 主存模块 Page 2 · · Page 127 信息模块 系统存储器 可选字节 地址 0x0800 0000 - 0x0800 03FF 0x0800 0400 - 0x0800 07FF 0x0800 0800 - 0x0800 0BFF · · 0x0801 FC00 - 0x0801 FFFF 0x1FFF EC00 - 0x1FFF F7FF 0x1FFF F800 - 0x1FFF F80F 尺寸 1 Kbytes 1 Kbytes 1 Kbytes · · 1 Kbytes 3 Kbytes 16 bytes 针对前32页的读访问可以实现每个周期读出32位数据的效率。针对后96页的读访问是通过一 个1k字节的cache进行的。当cache命中时,读数据会立即返回;否则,读数据要在2086个HCLK 周期后返回。读访问支持8位,16位和32位;写访问(编程)只支持16位和32位。片上闪存的 每一页都可以单独被擦除。整个主存模块也可以同时被擦除。 1.4 引导配置 GD32F1x0 系列微控制器提供了三种引导源,可以通过用户可选字节 nBOOT1 位(请参考第 3.3.9 章选项字节)和 BOOT0 进行选择。BOOT0 指的是复位后第 4 个系统时钟上升沿锁存的 BOOT0 引脚的值。通过 nBOOT1 和 BOOT0 选择引导源的细节列于下表中。 图 4. 引导模式 启动源选择 片上闪存的主存 片上闪存的系统存储器 片上SRAM 启动模式选择引脚 Boot1(1) Boot0 x 0 0 1 1 1 1. BOOT1值与nBOOT1值相反 上电后序列或系统复位后,ARM®Cortex™-M3处理器先从0x00000000地址获取栈顶值,再从 0x00000004地址获得引导代码的基地址,然后从引导代码的基地址开始执行程序。 根据所选的引导源,片上闪存的主存(开始于0x08000000的存储空间)或系统存储器(开始于 0x1FFFEC00的存储空间)会被映射到引导空间,即从0x00000000开始的地址空间。如果片上 SRAM(开始于0x20000000的存储空间)被选为引导源,用户必须在应用程序初始化代码中 通过修改NVIC异常向量表和偏移寄存器将向量表重置到SRAM中。 芯片内嵌的引导加载程序位于系统存储器中,用来对片上闪存的主存编程。在GD32F1x0系列 微控制器中,引导装载程序可通过以下串行接口之一工作:USART1或USART2。 29 1.5 系统配置寄存器 (SYSCFG) GD32F1x0 用户手册 1.5.1 31 30 系统配置寄存器 1 (SYSCFG_R1) 地址偏移: 0x00 复位值: 0x0000 000X (根据BOOT0引脚的状态和用户可选字节的nBOOT1的值,X表示 BOOT_MODE[1:0]可能为任意值) 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 PB9_HCCE rw 保留 15 14 13 12 11 10 9 8 765432 1 0 保留 TM17_ DMA_RMP rw TM16_ DMA_RMP rw USART1 _RX_DMA_ RMP rw USART1 _TX_DMA_ RMP rw ADC_ DMA_RMP rw 保留 BOOT_MODE r r 位/位域 名称 31:20 保留 描述 必须保持复位值 19 PB9_HCCE 18:13 保留 PB9引脚高电流能力使能 当该位为1时, PB9 引脚可以直接用来控制红外发光二极管. 0: PB9引脚高电流能力关闭 1: PB9引脚高电流能力开启,同时该引脚的速度控制被忽略 必须保持复位值 12 TM17_DMA_RMP Timer 17 DMA请求重映射使能 0: 不重映射 (TM17_CH1和TM17_UP DMA被映射在DMA通道1) 1: 重映射 (TM17_CH1和TM17_UP DMA被映射在DMA通道2) 11 TM16_DMA_RMP Timer 16 DMA 请求重映射使能 0: 不重映射(TM16_CH1和TM16_UP DMA被映射在DMA通道3) 1: 重映射 (TM16_CH1和TM16_UP DMA被映射在DMA通道4) 10 USART1_RX_DMA_R USART1_RX DMA 请求重映射使能 MP 0: 不重映射(USART1_RX DMA被映射在DMA通道3) 1: 重映射 (USART1_RX DMA被映射在DMA通道5) 9 USART1_TX_DMA_RM USART1_TX DMA 请求重映射使能 P 0: 不重映射(USART1_TX DMA被映射在DMA通道2) 1: 重映射 (USART1_TX DMA被映射在DMA通道4) 8 ADC_DMA_RMP ADC DMA 请求重映射使能 0: 不重映射(ADC DMA被映射在DMA通道1) 1: 重映射 (ADC DMA被映射在DMA通道2) 30 7:2 保留 1:0 BOOT_MODE [1:0] 必须保持复位值 GD32F1x0 用户手册 引导模式 (细节请参考1.4节Boot配置) Bit0对应BOOT0;bit1对应nBOOT1的值取反 x0: 从片上闪存的主存引导启动 01: 从片上闪存的系统存储器引导启动 11: 从片上SRAM引导启动 1.5.2 EXTI 源选择寄存器 1 (SYSCFG_EXTISS1) 地址偏移: 0x08 复位值: 0x0000 0000 31 30 29 28 15 14 13 12 EXTI3_SS [3:0] rw rw rw rw 27 26 25 24 23 22 21 20 保留 11 10 9 8 7 6 5 4 EXTI2_SS [3:0] EXTI1_SS [3:0] rw rw rw rw rw rw rw rw 19 18 17 16 3 2 1 0 EXTI0_SS [3:0] rw rw rw rw 位/位域 31:16 名称 保留 描述 必须保持复位值 15:12 11:8 7:4 EXTI3_SS EXTI2_SS EXTI1_SS EXTI 3源选择 X000: PA3引脚 X001: PB3引脚 X010: PC3引脚 X011: PD3引脚 X100: 保留 X101: PF3引脚 X110: 保留 X111: 保留 EXTI 2 源选择 X000: PA2引脚 X001: PB2引脚 X010: PC2引脚 X011: PD2引脚 X100: 保留 X101: PF2引脚 X110: 保留 X111: 保留 EXTI 1 源选择 X000: PA1引脚 X001: PB1引脚 31 X010: PC1引脚 X011: PD1引脚 X100: 保留 X101: PF1引脚 X110: 保留 X111: 保留 3:0 EXTI0_SS EXTI 0 源选择 X000: PA0引脚 X001: PB0引脚 X010: PC0引脚 X011: PD0引脚 X100: 保留 X101: PF0引脚 X110: 保留 X111: 保留 GD32F1x0 用户手册 1.5.3 EXTI 源选择寄存器 2 (SYSCFG_EXTISS2) 地址偏移: 0x0C 复位值: 0x0000 0000 31 30 29 28 15 14 13 12 EXTI7_SS [3:0] rw rw rw rw 27 26 25 24 23 22 21 20 保留 11 10 9 8 7 6 5 4 EXTI6_SS [3:0] EXTI5_SS [3:0] rw rw rw rw rw rw rw rw 19 18 17 16 3 2 1 0 EXTI4_SS [3:0] rw rw rw rw 位/位域 31:16 名称 保留 描述 必须保持复位值 15:12 11:8 EXTI7_SS EXTI6_SS EXTI 7 源选择 X000: PA7引脚 X001: PB7引脚 X010: PC7引脚 X011: PD7引脚 X100: 保留 X101: PF7引脚 X110: 保留 X111: 保留 EXTI 6 源选择 X000: PA6引脚 X001: PB6引脚 X010: PC6引脚 X011: PD6引脚 X100: 保留 32 X101: PF6引脚 X110: 保留 X111: 保留 7:4 EXTI5_SS EXTI 5源选择 X000: PA5引脚 X001: PB5引脚 X010: PC5引脚 X011: PD5引脚 X100: 保留 X101: PF5引脚 X110: 保留 X111: 保留 3:0 EXTI4_SS EXTI 4 源选择 X000: PA4引脚 X001: PB4引脚 X010: PC4引脚 X011: PD4引脚 X100: 保留 X101: PF4引脚 X110: 保留 X111: 保留 GD32F1x0 用户手册 1.5.4 EXTI 源选择寄存器 3 (SYSCFG_EXTISS3) 地址偏移: 0x10 复位值: 0x0000 0000 31 30 29 28 15 14 13 12 EXTI11_SS [3:0] rw rw rw rw 27 26 25 24 23 22 21 20 保留 11 10 9 8 7 6 5 4 EXTI10_SS [3:0] EXTI9_SS [3:0] rw rw rw rw rw rw rw rw 19 18 17 16 3 2 1 0 EXTI8_SS [3:0] rw rw rw rw 位/位域 31:16 名称 保留 描述 必须保持复位值 15:12 EXTI11_SS EXTI 11 源选择 X000: PA11引脚 X001: PB11引脚 X010: PC11引脚 X011: PD11引脚 X100: 保留 X101: PF11引脚 X110: 保留 X111: 保留 33 11:8 EXTI10_SS EXTI 10 源选择 X000: PA10引脚 X001: PB10引脚 X010: PC10引脚 X011: PD10引脚 X100: 保留 X101: PF10引脚 X110: 保留 X111: 保留 7:4 EXTI9_SS EXTI 9 源选择 X000: PA9引脚 X001: PB9引脚 X010: PC9引脚 X011: PD9 引脚 X100: 保留 X101: PF9引脚 X110: 保留 X111: 保留 3:0 EXTI8_SS EXTI 8 源选择 X000: PA8引脚 X001: PB8引脚 X010: PC8引脚 X011: PD8引脚 X100: 保留 X101: PF8引脚 X110: 保留 X111: 保留 GD32F1x0 用户手册 1.5.5 EXTI 源选择寄存器 4 (SYSCFG_EXTISS4) 地址偏移: 0x14 复位值: 0x0000 0000 31 30 29 28 15 14 13 12 EXTI15_SS [3:0] rw rw rw rw 27 26 25 24 23 22 21 20 保留 11 10 9 8 7 6 5 4 EXTI14_SS [3:0] EXTI13_SS [3:0] rw rw rw rw rw rw rw rw 19 18 17 16 3 2 1 0 EXTI12_SS [3:0] rw rw rw rw 位/位域 31:16 名称 保留 描述 必须保持复位值 15:12 EXTI15_SS EXTI 15 源选择 X000: PA15 引脚 X001: PB15 引脚 34 X010: PC15 引脚 X011: PD15 引脚 X100: 保留 X101: PF15 引脚 X110: 保留 X111: 保留 11:8 EXTI14_SS EXTI 14 源选择 X000: PA14 引脚 X001: PB14 引脚 X010: PC14 引脚 X011: PD14 引脚 X100: 保留 X101: PF14 引脚 X110: 保留 X111: 保留 7:4 EXTI13_SS EXTI 13 源选择 X000: PA13 引脚 X001: PB13 引脚 X010: PC13 引脚 X011: PD13 引脚 X100: 保留 X101: PF13 引脚 X110: 保留 X111: 保留 3:0 EXTI12_SS EXTI 12 源选择 X000: PA12 引脚 X001: PB12 引脚 X010: PC12 引脚 X011: PD12 引脚 X100: 保留 X101: PF12 引脚 X110: 保留 X111: 保留 GD32F1x0 用户手册 1.5.6 系统配置寄存器 2 (SYSCFG_R2) 地址偏移: 0x18 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 35 15 14 13 12 11 10 保留 GD32F1x0 用户手册 9 8 7 6 5 4 3 2 1 0 SRAM_PCEF rw 保留 LVD_ LOCK SRAM_ LOCK PARITY_ERROR_ UP_LOCK LOCK rw rw rw 位/位 域 31:9 名称 保留 8 SRAM_PCEF 7:3 保留 2 LVD_LOCK 1 SRAM_PARITY_ ERROR_LOCK 0 LOCKUP_LOCK 描述 必须保持复位值 SRAM 奇偶校验错误标志 当SRAM奇偶校验错误发生时,该位由硬件置1。该位由软件写1清零。 0: 没检测到SRAM奇偶校验错误 1: 检测到SRAM 奇偶校验错误 必须保持复位值 LVD锁定 该位由软件置1,在系统复位时才能清零 0: LVD中断从TM1/15/16/17的break输入端断开。PWR_CTLR寄存器的LVDE和 LVDT[2:0]可以被设置 1: LVD中断与TM1/15/16/17的break输入端连接。PWR_CTLR寄存器的LVDE和 LVDT[2:0]仅仅可读。 SRAM 奇偶校验错误锁定 该位由软件置1,在系统复位时才能清零 0: SRAM 奇偶校验错误从TM1/15/16/17的break输入端断开 1: SRAM 奇偶校验错误与TM1/15/16/17的break输入端连接 Cortex-M3 LOCKUP 输出锁定 该位由软件置1,在系统复位时才能清零 0: Cortex-M3 LOCKUP输出从TM1/15/16/17的break输入端断开 1: Cortex-M3 LOCKUP输出与TM1/15/16/17的break输入端连接 1.6 1.6.1 设备电子签名 设备的电子签名中包含的存储容量信息和96位的唯一设备ID。它被存储在片上闪存的信息模块 中。96位唯一设备ID对于每颗芯片而言都是唯一的。它可以用作序列号,或安全密钥的一部分, 等等。 存储密度信息 基地址: 0x1FFF F7E0 该值是原厂设定的,不能由用户修改. 36 GD32F1x0 用户手册 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 SRAM_DENSITY[15:0] r r r r r r r r r r r r r r r r 15 14 13 12 11 10 r r r r r r 9 8 7 6 5 4 3 2 1 0 FLASH_DENSITY[15:0] r r r r r r r r r r 位/位 名称 域 31:16 SRAM_DENSITY [15:0] 15:0 FLASH_DENSITY [15:0] 描述 SRAM 容量 该值表明芯片的片上SRAM容量,以KB为单位 例如: 0x0008表示 8 KB。 Flash存储器容量 该值表明芯片的片上闪存容量,以Kbytes为单位 例如: 0x0020表示32 KB。 1.6.2 设备唯一 ID (96 位/位域) 基地址: 0x1FFF F7AC 该值是原厂设定的,不能由用户修改. 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 UNIQUE_ID[31:16] r r r r r r r r r r r r r r r r 15 14 13 12 11 10 r r r r r r 9 8 7 6 5 4 3 2 1 0 UNIQUE_ID[15:0] r r r r r r r r r r 位/位 域 31:0 名称 UNIQUE_ID[31:0] 描述 设备唯一 ID 基地址: 0x1FFF F7B0 该值是原厂设定的,不能由用户修改. 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 UNIQUE_ID[63:48] 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 37 r r r r r r GD32F1x0 用户手册 UNIQUE_ID[47:32] r r r r r r r r r r 位/位 域 31:0 名称 UNIQUE_ID[63:32] 描述 设备唯一 ID 基地址: 0x1FFF F7B4 该值是原厂设定的,不能由用户修改. 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 UNIQUE_ID[95:80] r r r r r r r r r r r r r r r r 15 14 13 12 11 10 r r r r r r 9 8 7 6 5 4 3 2 1 0 UNIQUE_ID[79:64] r r r r r r r r r r 位/位 域 31:0 名称 UNIQUE_ID[95:64] 描述 唯一设备 ID 38 2 电源控制 (PWR) GD32F1x0 用户手册 2.1 简介 功耗是GD32F1x0系列设备中最重要的问题之一,因此在电源控制中提供了三种省电模式,包 括睡眠模式,深度睡眠模式和待机模式。这些模式使得应用程序可以在CPU运行时间要求、速 度和功耗的相互冲突中获得最佳折衷。如下图所示,GD32F1x0系列设备有三个电源域,包括 VDD域,1.2V域和备份域。VDD域由VDD引脚直接供电。在VDD域中嵌入了一个LDO,用来 产生1.2V电压为1.2V域供电。备份域中实现了一个电源切换器。当VDD电源开启时,备份域由 VDD引脚供电;当VDD电源关闭时,电源切换器可以将备份域的电源切换到VBAT引脚,此时 备份域由VBAT引脚(电池)供电。 2.2 主要特点  三个电源域: VBAT, VDD 和1.2V电源域  三种省电模式: 睡眠模式, 深度睡眠模式和待机模式  内部调压器提供1.2V电源  提供由VBAT供电的20字节的备份寄存器,在待机模式数据也不会丢失  提供低电压检测器,当电压低于所设定的阈值时能发出中断或事件  当VDD关闭的时,由VBAT(电池)为备份域供电  用于存储RTC校准值的校准寄存器 2.3 功能描述 下图提供了PWR及相关电源域的结构框图。 39 图 5. 电源域概览 GD32F1x0 用户手册 VBAT VDD PA0 PC13 NRST VDDA IWDG 3.3V Power Switch WKUP1 WKUP2 WKUP3 PWR CTRL WKUP4 VBAK WKUP5 Backup Domain LSE BPOR RTC BREG APB INTF2 APB INTF1 SLEEPING SLEEPDEEP Cortex-M3 HSE POR/PDR LDO VDD Domain 1.2V AHB IPs APB IPs 1.2V Domain 3.3V HSI HSI14 VDDA Domain LSI ADC PLL DAC LVD Comparator 2.3.1 LVD: Low Voltage Detector POR: Power On Reset LDO: Voltage Regulator PDR: Power Down Reset BREG: Backup Registers BPOR: VBAK Power On Reset 电池备份域 该备份域包含BPOR(备份域上电复位),BREG(备份寄存器),RTC(实时时钟),LSE(低速外部 晶体振荡器),以及三个PAD,包括PC13,PC14,PC15。它可由内部电源切换器来选择VDD 供电或VBAT(电池)供电。为了保留备份寄存器的内容并支持RTC正常工作,当VDD关闭时, VBAT引脚可以连接至电池或其他电源等备份源供电。电源切换器是由VDD域掉电复位电路控制 的。对于没有外部电池的应用,建议将VBAT引脚通过100nF的外部陶瓷去耦电容连接到VDD 引脚上。 备份域的复位源包括BPOR和备份域软件复位。在VBAK没有完全上电时,BPOR信号强制设 备处于复位状态。应用软件可以通过设置RCC_BDCR寄存器BKPRST位来触发备份域软件复 位。 RTC的时钟源可以是低速内部RC振荡器(LSI)或低速外部晶体振荡器(LSE)。当VDD被关闭时, RTC只能选择LSE作时钟源。在通过WFI/WFE指令进入省电模式之前,Cortex™-M3需要通过 比较寄存器设置预期的唤醒时间并启用唤醒功能,以实现RTC定时器唤醒事件。进入省电模式 一定时间之后,当经过的时间与预设的唤醒时间匹配时,RTC将报警并唤醒设备。RTC的配置 和操作的细节将在RTC章节来描述。 备份域内提供了5个32位寄存器,多达20个字节,给用户存储应用数据。这些寄存器是由VBAK 供电的,即使VDD电源关闭,这些寄存器也不会掉电。备份寄存器的复位源只有被备份域上电 复位和备份域软件复位。 40 2.3.2 VDD/VDDA 电源域 GD32F1x0 用户手册 大多数模拟模块都位于 VDDA 电源域,包括 HSI(高速内部 RC 振荡器), HSI14(14MHz 频率的 高速内部 RC 振荡器),LSI(低速内部 RC 振荡器),PLL(锁相环),ADC(模数转换器),DAC(数 模转换器),LVD(低电压检测器)和比较器。此外,LDO(电压调整器),POR /PDR(上电/掉电复 位),HSE(高速外部晶体振荡器),IWDG(独立看门狗),功耗控制逻辑,除 PC13、PC14 和 PC15 之外的所有 PAD,都是在 VDD 域中实现的。LDO 用来给 1.2V 域供电。通常,数字电 路是由 VDD 供电的,而大多数模拟电路是由 VDDA 供电的。将模拟电路电源(VDDA)从 VDD 独 立出来的好处是,可以让模拟电路达到更好的性能,特别是提高了 ADC 和 DAC 的转换精度。 VDDA 的电压可以等于或高于 VDD。VDDA 可以从外部连接到 VDD,但必须通过外部滤波电路连接, 以避免 VDDA 上的噪声。否则,如果 VDDA 和 VDD 不同,VDDA 电压必须始终高于 VDD。在这种 情况下,为了安全起见,可在 VDD 和 VDDA 之间使用外部肖特基二极管。 LVD 的功能是检测 VDD 或 VDDA 供电电压是否低于低电压检测阈值。该功能由电源控制寄存 器(PWR_CTLR)进行配置。LVDE 位控制 LVD 功能是否开启,而 LVDT[2:0]位用来选择低电压 检测阈值,阈值的范围在 2.2V 到 2.9V 之间。低电压状态标志(LVDF)位于电源状态寄存器 (PWR_STR)。另外,低电压检测事件也被连接到了 EXTI 的第 16 线。用户可以通过配置 EXTI 的第 16 线产生相应的中断。 POR/ PDR 电路的功能是检测 VDD/VDDA 并在电压低于特定阈值时产生电源复位信号复位除备 份域之外的整个芯片。下图显示了供电电压和电源复位信号之间的关系。 VPOR 表示上电复位 的阈值电压,VPDR 表示掉电复位的阈值电压。 VPDR 是可配置的。通过 RCC_PDR_S 寄存器 的 PDR_S 位可以从两个值之间选择选择一个作为 VPDR(参见 4.3.19 章节 RCC 寄存器)。当选 择较低的值时,强烈建议不要对片上闪存做编程或擦除操作,因为这些操作在电压低至接近该 阈值时可能会失败。 图 6. 上电复位/掉电复位波形图 VDD/VDDA 2.3.3 VPOR VPDR Vhyst tRSTTEMPO t Power Reset (Active Low) 1.2V 电源域 Cortex™-M3处理器,AHB/ APB外设等主要功能均位于1.2V电源域。一旦1.2V电压上电,POR 将在1.2V电源域产生复位序列。 41 2.3.4 省电模式 GD32F1x0 用户手册 系统复位或电源复位后,GD32F1x0的所有电源域全部处于供电状态。用户可以通过减慢系统 时钟(HCLK,PCLK1,PCLK2)或关闭未使用的外设的时钟来实现较低的功耗。此外,三种省 电模式可以实现更低的功耗。它们是睡眠模式,深度睡眠模式和待机模式。 睡眠模式 睡眠模式与Cortex™-M3的休眠模式相对应。休眠模式只关闭Cortex™-M3的时钟。如需进入 睡眠模式,只要清除Cortex™-M3系统控制寄存器中的SLEEPDEEP位,并执行一条WFI或WFE 指令即可。如果睡眠模式是通过执行WFI指令进入的,任何中断都可以唤醒系统。如果睡眠模 式是通过执行WFE指令进入的,任何唤醒事件都可以唤醒系统。由于无需在进入或退出中断上 浪费时间,该模式所需的唤醒时间最短。 深度睡眠模式 深度睡眠模式与 Cortex™-M3 的深度睡眠模式相对应。深度睡眠模式会关闭 1.2V 域中的所有 时钟以及包括 HSI、HSI14、HSE 和 PLL 的所有时钟生成电路。PWR_CTLR 寄存器的 LDOLP 位可以控制 LDO 工作在正常模式或低功耗模式。进入深度睡眠模式的步骤是,先将 Cortex™-M3 系统控制寄存器的 SLEEPDEEP 位置 1,再清除 PWR_CTLR 寄存器的 SDBM 位,然后执行 WFI 或 WFE 指令。来自 EXTI 的任何中断或唤醒事件可以将系统从深度睡眠模 式中唤醒。刚退出深度睡眠模式时,HSI 被选中作为系统时钟。请注意,如果 LDO 工作在低 功耗模式,退出深度睡眠模式需要花费更多的时间。 待机模式 待机模式是基于 Cortex™-M3 的深度睡眠模式实现的。待机模式会关闭整个 1.2V 域的供电, 同时 LDO 和包括 HIS、HSI14、HSE 和 PLL 的所有时钟生成电路也会被关闭。进入待机模式 的步骤是,先将 Cortex™-M3 系统控制寄存器的 SLEEPDEEP 位置 1,再将 PWR_CTLR 寄 存器的 SDBM 位置 1,然后执行 WFI 或 WFE 指令。待机模式有五个唤醒源,包括来自 NRST 引脚的外部复位,RTC 报警,IWDG 复位,WKUP1 或 WKUP2 引脚的上升沿。待机模式可以 达到最低的功耗,但唤醒时间最长。另外,一旦进入待机模式,SRAM 和寄存器(除了备份寄 存器)的内容都会丢失。退出待机模式时,会发生上电复位,复位之后 Cortex™-M3 将从 0x00000000 地址开始执行指令代码。 表 2. 节电模式总结 模式 睡眠 Description 仅关闭 CPU 时钟 LDO 状态 配置 进入指令 唤醒 开启 SLEEPDEEP = 0 WFI 或 WFE 若通过 WFI 进入,则 深度睡眠 待机 1. 关闭 1.2V 电源域的所 1. 关闭 1.2V 电源域的 有时钟 供电 2. 关闭 HSI, HSI14, HSE 和 PLL 开启或低功耗模式 2. 关闭 HSI, HSI14, HSE 和 PLL 关闭 SLEEPDEEP = 1 SLEEPDEEP = 1 SDBM = 0 WFI 或 WFE 来自 EXTI 的任何中断或事 SDBM = 1 WFI 或 WFE 1. NRST 引脚 42 唤醒延迟 GD32F1x0 用户手册 任何中断均可唤醒; 件 若通过 WFE 进入,则 任何事件均可唤醒 HSI 唤醒时间 如果 LDO 处于低功耗模式 无 的话,需增加 LDO 唤醒时 间 2. RTC 报警 3. IWDG 复位 4. WKUP1 引脚 5. WKUP2 引脚 上电序列 2.4 PWR 寄存器 外设寄存器可以接受16位或32位访问。 2.4.1 31 30 15 14 电源控制寄存器 (PWR_CTLR) 地址偏移: 0x00 复位值: 0x0000 0000 (从待机模式唤醒后复位) 29 28 27 13 12 11 保留 26 25 24 23 保留 10 9 8 7 BKPWE rw 22 6 LVDT rw 21 20 19 18 17 16 5 4 3 2 1 0 LVDE SBFR WUFR SDBM LDOLP rw rc_w1 rc_w1 rw rw 位/位域 31:9 8 名称 保留 BKPWE 7:5 LVDT[2:0] 4 LVDE 描述 必须保持复位值 备份域写使能 0:禁止对备份域寄存器的写操作 1:允许对备份域寄存器的写操作 复位之后, 任何对备份域寄存器的写操作都将被禁止。如需对备份域寄存器做写操作, 需先将该位置1。 低电压检测器阈值 000: 2.2V 001: 2.3V 010: 2.4V 011: 2.5V 100: 2.6V 101: 2.7V 110: 2.8V 111: 2.9V 低电压检测器使能 0: 关闭低电压检测器 43 1: 开启低电压检测器 GD32F1x0 用户手册 3 SBFR 待机标志复位 0: 无影响 1: 复位待机标志 读该位,始终返回0 2 WUFR 唤醒标志复位 0: 无影响 1: 复位唤醒标志 读该位,始终返回0 1 SDBM 待机模式 0: 当Cortex™-M3 进入深度睡眠模式时,系统进入深度睡眠模式 1: 当Cortex™-M3 进入深度睡眠模式时,系统进入待机模式 0 LDOLP LDO低功耗模式 0: 当系统进入深度睡眠模式时,LDO仍正常工作 1: 当系统进入深度睡眠模式时,LDO进入低功耗模式 注意: 在深度睡眠模式下,个别外设可能会开启HSI时钟来做一些工作。在这种情况下, 如果LDO正处于低功耗模式,LDO会自动从低功耗模式切换到正常工作模式,并保持正 常工作模式,直到外设工作完毕。 2.4.2 电源状态寄存器 (PWR_STR) 地址偏移: 0x04 复位值: 0x0000 0000 (从待机模式唤醒后不复位) 31 30 29 28 27 15 14 13 12 11 保留 26 25 24 23 保留 10 9 8 7 WUPE2 WUPE1 rw rw 22 21 6 5 保留 20 19 18 17 16 4 3 2 1 0 LVDF SBF WUF r r r 位/位域 31:10 9 名称 保留 WUPE2 8 WUPE1 描述 必须保持复位值 WKUP2引脚唤醒使能 0:关闭WKUP2引脚唤醒功能 1:开启WKUP2引脚唤醒功能 如果WUPE2在进入省电模式之前置1,WKUP2引脚的上升沿会将系统从省电模式唤醒。 由于WKUP2引脚为高电平有效,当WUPE2为高时,WKUP2引脚将设置为输入下拉模 式。 WKUP1 引脚唤醒使能 0:关闭WKUP1引脚唤醒功能 1:开启WKUP1引脚唤醒功能 44 7:3 保留 2 LVDF 1 SBF 0 WUF GD32F1x0 用户手册 如果WUPE1在进入省电模式之前置1,WKUP1引脚的上升沿会将系统从省电模式唤醒。 由于WKUP1引脚为高电平有效,当WUPE1为高时,WKUP1引脚将设置为输入下拉模 式。 必须保持复位值 低电压状态标志 0: 低电压事件没出现 (VDD高于设定的LVD阈值) 1: 低电压事件出现 (VDD等于或低于LVD阈值) 待机标志 0: 设备没进入过待机模式 1: 设备曾进入过待机模式 该位只能由POR/PDR或通过设置PWR_CTLR寄存器的SBFR位来清零。 唤醒标志 0: 没有收到唤醒事件 1: 收到来自WKUP引脚或RTC报警的唤醒事件 该位只能由POR/PDR或通过设置PWR_CTLR寄存器的SBFR位来清零。 45 3 3.1 3.2 3.3 3.3.1 闪存存储器控制器 (FMC) GD32F1x0 用户手册 简介 闪存存储器控制器,FMC,提供了所有需要的片上闪存存储功能。在32K字节空间内,CPU执 行指令零等待。FMC也提供了页擦除,整片擦除,以及闪存存储区的32位字或16为半字编程。 主要特征  高达128K字节片上闪存存储器可用于存储指令或数据  32K字节空间内CPU执行指令零等待  从闪存取32K ~ 128K地址内字节数据有比较长的延迟  3K字节启动器信息块  16字节可选字节块用于用户需求。  每页1K字节  32位字或16为半字编程,支持页擦除和整片擦除  有闪存读保护功能,阻止非法代码或数据进入  有页擦除和页编程保护功能,阻止意外操作 功能说明 闪存存储器结构 闪存存储器包括多达128K字节的主闪存,按128页每页1K字节分块,还有一个3K字节的信息 块用于启动器。主闪存存储器的128页每页都可以单独擦除。闪存存储器的基地址和大小见下 表。 Flash区 主存储块 名称 页0 页1 页2 . . . 页 128 地址 0x0800 0000 - 0x0800 03FF 0x0800 0400 - 0x0800 07FF 0x0800 0800 - 0x0800 0BFF . . . 0x0800 FC00 - 0x0800 FFFF 大小 (字节) 1KB 1KB 1KB . . . 1KB 46 3.3.2 3.3.3 3.3.4 信息快 可选字节块 启动器 可选字节 GD32F1x0 用户手册 0x1FFF EC00- 0x1FFF F7FF 3KB 0x1FFF F800 - 0x1FFF F80F 16B 注意: 信息快存储了启动器信息,不能被用户编程或擦除 读保护 Flash可以像普遍存储空间一样直接寻址访问。对flash的取指令和取数据都是通过CPU的IBUS 或DBUS来完成。 32K字节的嵌入式SRAM存储了最开始的32K字节闪存存储器的数据,所以在32K字节空间内读 零等待。从闪存取32K ~ 128K字节指令有一个长延迟。 FMC_CMR 寄存器解锁 复位后,FMC_CMR寄存器进入锁定状态,LK位置为1(OPTR位除外,此位用于重加载可选 字 节 ) 。 通过 先 后 向 FMC_UKEYR 寄存 器 写 入 0x45670123和0xCDEF89AB , 可 以 使得 FMC_CMR解锁。两次写操作后,FMC_CMR寄存器的LK位被硬件清0。可以通过软件设置 FMC_CMR寄存器的LK位为1再次锁定FMC_CMR寄存器。任何对FMC_UKEYR寄存器的错误 操作都会将LK位置1,从而锁FMC_CMR寄存器,引发一个总线错误。 FMC_CMR寄存器的OBPG位和OBER位可以被FMC_OBKEYR寄存器锁定。解锁过程也是两 次写操作,向FMC_UKEYR寄存器先后写入 0x45670123和0xCDEF89AB,然后将FMC_CMR 寄存器的OBWE位置1。软件可以将FMC_CMR的OBWE位清0来锁定FMC_CMR的OBPG位和 OBER位。 页擦除 FMC的页擦除功能使一个主闪存存储页的内容初始化为高电平。 每一页都可以被独立擦除, 不影响其他页内容。FMC擦除页步骤如下。 ▀ 确保FMC_CMR寄存器不处于锁定状态。 ▀ 检查FMC_CSR寄存器的BUSY位来判定没有闪存存储器是否处于运行状态。 ▀ 当BUSY为0时,写页地址到FMC_AR寄存器 ▀ 写页擦除命令到FMC_CMR寄存器的PE位(置1)。 ▀ 通过将FMC_CMR寄存器的START位置1来发送页擦除命令到FMC。 ▀ 检查FMC_CMR寄存器的BUSY位来判断擦除指令是否执行完毕。 ▀ 如果需要,使用DBUS读并验证该页。 当页擦除成功执行,FMC_CSR寄存器的ENDF位和FMC_CMR寄存器的ENDIE位被置1, FMC从而将触发一个中断。当目标擦除页被用来取指令或访问数据时,软件可能失去控制,相 应的擦除操作无效,但FMC将不提供任何通知,因此确保目标擦除页地址的正确性是很有必要 的。如果FMC_CMR寄存器的ERIE位被置1,FMC将触发一次闪存操作错误中断。软件可以检 查FMC_CSR寄存器的PGEF位来监测中断处理器的状况。FMC_CSR寄存器的ENDF位预示操 作的结束。下图显示了页擦除操作流程。 47 Start Is the LK bit is 0 No Yes No Is the BUSY bit is 0 Yes Set the FMC_AR, PE bit Unlock the FMC_CMR GD32F1x0 用户手册 Send the command to FMC by set START bit 3.3.5 No Is the BUSY bit is 0 Yes Finish 整片擦除 FMC提供了整片擦除功能可以初始化主存储块区内容。具体步骤如下: ▀确保FMC_CMR寄存器不处于锁定状态。 ▀检查FMC_CSR寄存器的BUSY位来判定没有闪存存储器是否处于运行状态。 ▀当BUSY为0时,写整片擦除命令到FMC_CMR寄存器的ME位(置1)。 ▀ 通过将FMC_CMR寄存器的START位置1来发送整片擦除命令到FMC。 ▀检查FMC_CMR寄存器的BUSY位来判断擦除指令是否执行完毕。 ▀如果需要,使用DBUS读取该页进行验证。 当整片擦除成功执行,FMC_CSR寄存器的ENDF位和FMC_CMR寄存器的ENDIE位被置1, FMC从而将触发一个中断。由于所有的闪存数据都将被复位为0xFFFF_FFFF,可以通过运行 在SRAM中的程序或使用调试工具直接访问FMC寄存器来实现整片擦除操作。FMC_CSR寄存 器的ENDF位预示操作的结束。下图显示了整片擦除操作流程。 48 GD32F1x0 用户手册 Start Is the LK bit is 0 No Yes No Is the BUSY bit is 0 Yes Set the ME bit Unlock the FMC_CMR Send the command to FMC by set START bit 3.3.6 No Is the BUSY bit is 0 Yes Finish 主存储块编程 FMC提供了一个32位字/16位半字编程功能,用来修改闪存主存储块内容。下面的步骤显示了 字编程操作寄存器过程。 ▀确保FMC_CMR寄存器不处于锁定状态。 ▀检查FMC_CSR寄存器的BUSY位来判定没有闪存存储器是否处于运行状态。 ▀当BUSY为0时,写字编程命令到FMC_CMR寄存器的PG位。 ▀ DBUS写一个32位字/16位半字到预期地址 ▀检查FMC_CMR寄存器的BUSY位来判断擦除指令是否执行完毕。 ▀ DBUS访问闪存存储器验证操作结果。 当主存储块编程成功执行,FMC_CSR寄存器的ENDF位和FMC_CMR寄存器的ENDIE位被置1, FMC从而将触发一个中断。执行字/半字编程操作需要检查目的地址是否已经擦除。如果地址 没有被擦除,PGEF位将被置1,该页上的编程操作无效(当编程内容为0x0时,目的地址没有 49 GD32F1x0 用户手册 正常擦除,也可以正常编程)。如果FMC_CMR寄存器的ERIE位被置1,FMC将触发一次闪存 操 作 错 误 中 断 。 软 件 可 以 检 查 FMC_CSR 寄 存 器的 PGEF 位 来 监 测 中 断 处 理 器 的 状 况。 FMC_CSR寄存器的ENDF位预示操作的结束。(主存储块编程操作的起始地址是0x08000000) 下图显示了主存储块编程操作流程。 Start Is the LK bit is 0 No Yes No Is the BUSY bit is 0 Yes Set the PG bit Unlock the FMC_CMR Perform word/half word write by DBUS 3.3.7 No Is the BUSY bit is 0 Yes Finish 可选字节块擦除 FMC提供了一个擦除功能用来初始化闪存中的可选字节块。下面的步骤显示了可选字节块擦除 过程。  确保FMC_CMR寄存器不处于锁定状态  FMC_CMR寄存器的OBWE位置1。  检查FMC_CSR寄存器的BUSY位来判定没有闪存存储器是否处于运行状态。  写可选字节擦除命令到FMC_CMR寄存器的OBER位  通过将FMC_CMR寄存器的START位置1来发送可选字节擦除命令到FMC  检查FMC_CMR寄存器的BUSY位来判断擦除指令是否执行完毕。  DBUS访问闪存存储器验证操作结果。 当可选字节擦除成功执行,FMC_CSR寄存器的ENDF位和FMC_CMR寄存器的ENDIE位被置1, 50 3.3.8 3.3.9 GD32F1x0 用户手册 FMC从而将触发一个中断。FMC_CSR寄存器的ENDF位置1预示操作的结束。 可选字节块编程 FMC提供了一个32位字/16位半字编程功能,用来修改可选字节块内容。下面的步骤显示了可 选字节编程操作过程。  确保FMC_CMR寄存器不处于锁定状态  FMC_CMR寄存器的OBWE位置1。  检查FMC_CSR寄存器的BUSY位来判定没有闪存存储器是否处于运行状态。  写可选字节块编程命令到FMC_CMR寄存器的OBPG位  DBUS写一个32位字/16位半字到预期地址。  检查FMC_CMR寄存器的BUSY位来判断擦除指令是否执行完毕。  DBUS访问闪存存储器验证操作结果。 当可选字节擦除成功执行,FMC_CSR寄存器的ENDF位和FMC_CMR寄存器的ENDIE位被置1, FMC从而将触发一个中断。执行字/半字编程操作需要检查目的地址是否已经擦除。如果地址 没有被擦除,PGEF位将被置1,该页上的编程操作无效(当编程内容为0x0时,目的地址没有 正常擦除,也可以正常编程)。FMC_CSR寄存器的ENDF位预示操作的结束。 可选字节块说明 每次系统复位或将FMC_CMR寄存器的OPTR位置1时,闪存存储器的可选字节块重加载到 FMC_OPTR和FMC_WPR寄存器,可选字节工作。可选字节的补码和可选字节相反。当可选 字节重装载,如果可选字节的补码和可选字节不匹配,FMC_OPTR寄存器的OBER位将被置1, 可选字节被设置为0xFF。可选字节详情见下表。 地址 名称 说明 0x1fff f800 OB_RDPT 0x1fff f801 0x1fff f802 OB_RDPT_N OB_USER 可选字节安全保护值 0xA5 : 无保护 除了0xA5或0xCC的任何值 : 低级保护 0xCC : 高级保护 OB_RDPT补码值 用户定义的可选字节 [7]: 保留 [6]: OB_SRAM_PARITY_CHECK 0: 使能SRAM奇偶校验 1: 禁止SRAM奇偶校验 [5]: OB_VDDA_VISOR 0: 禁止VDDA监视器 1: 使能VDDA监视器 [4]: OB_BOOT1_n 0: BOOT1位是1 51 地址 0x1fff f803 0x1fff f804 0x1fff f805 0x1fff f806 0x1fff f807 0x1fff f808 0x1fff f809 0x1fff f80a 0x1fff f80b 名称 OB_USER_N OB_DATA[7:0] OB_DATA_N[7:0] OB_DATA[15:8] OB_DATA_N[15:8] OB_WP[7:0] OB_WP_N[7:0] OB_WP[15:8] OB_WP_N[15:8] GD32F1x0 用户手册 说明 1: BOOT1位是0 [3]: 保留 [2]: OB_STDBY_RSTn 0: 设置待机模式时产生复位而不是进入待机模式 1: 设置待机模式时进入待机模式而不产生复位 [1]: OB_DEEPSLEEP_RSTn 0: 设置深度睡眠模式时产生复位而不进入深度睡眠模 式 1: 设置深度睡眠模式时进入深度睡眠模式而不产生复 位 [0]: OB_WDG_SW 0: 硬件自动设置窗口看门狗 1: 软件设置窗口看门狗 OB_USER补码值 用户定义数据位7到0 OB_DATA补码值的7到0位 用户定义数据位15到8 OB_DATA补码值的15到8位 页擦除/编程保护位的7到0位 OB_WP补码值的7到0位 页擦除/编程的保护位15到8位 OB_WP补码值的15到8位 3.3.10 页擦除/编程保护 FMC的页擦除/编程保护功能来可以阻止对闪存存储器的意外操作。当FMC对被保护的页进行 页擦除或编程操作时,操作本身无效且FMC_CSR寄存器的WPEF位将被置1。如果WPEF位被 置1且ERIE位也被置1来使能相应的中断,FMC将触发闪存操作错误中断来引起CPU重视。配 置可选字节的OB_WP [15:0]位为0可以单独使能每个页保护功能。如果在可选字节区域执行了 页擦除操作,所有的闪存存储器页保护功能都将被禁止。当对可选字节的OB_WP位置1或清0 时,需要将FMC_CMR寄存器的OPTR位置1或系统复位来重加载OB_WP位。下表显示了将 OB_WP [15:0]位置0使能了哪些页保护。 OB_WP bit OB_WP[0] OB_WP[1] OB_WP[2] . . . OB_WP[14] OB_WP[15] 被保护的页 页0 ~ 页 3 页4 ~ 页 7 页8 ~ 页 11 . . . 页56 ~ 页59 页60 ~ 页127 52 GD32F1x0 用户手册 3.3.11 安全保护 FMC提供了一个安全保护功能来阻止非法代码或数据进入闪存存储器。此功能可以很好地保护 软件和固件免受非法用户的操作。有三个保护级别。 无保护:当将OB_RDPT字节和它的补码设置为0xA55A,不执行保护。主存储块和可选字节块 可以被所有操作进入。 低级别保护:当设置OB_RDPT字节和它的补码值为任何值除了0xA55A或0xCC33,执行低级 别保护。主闪存仅仅能被使用者的代码进入。在调试模式下,从SRAM中启动或从启动加载器 启动,所有对主存储块的操作都被禁止。如果在调试模式下,从SRAM启动或从启动器启动时, 读主存储块将产生总线错误。如果在调试模式下,从SRAM启动或从启动器启动时,对主存储 块编程或擦除操作,FMC_CSR寄存器的PGEF位将被置1。低级别保护下,可选择字节块可以 被任意操作进入。如果将OB_RDPT字节和它的补码设置为0xA55A,进入无保护级别,将执行 主存储块全片擦除操作。 高级别保护:当设置OB_RDPT字节和它的补码值为0xCC33,进入高级别保护,调试模式, 从SRAM启动或从启动器启动都被禁止。所有的操作来源于用户代码。主存储块可以执行所有 操作。可选字节块不能被擦除,OB_RDPT字节和它的补码值不能被重编程。因此,如果设置 保护级别为高,不能转换为低级保护和无保护。 3.4 FMC 寄存器 3.4.1 闪存保留寄存器 (FMC_RESR) 地址偏移: 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 保留 WSCNT rw rw rw rw rw 位 区域 31:3 保留 说明 2:0 WSCNT 等待状态计数寄存器 硬件置1和清0. WSEN位被置1时WSCNT位有效 000 : 不增加等待状态 001: 增加1个等待状态 010: 增加2个等待状态 011 ~ 111 : 保留 53 GD32F1x0 用户手册 3.4.2 闪存解锁寄存器 (FMC_UKEYR) 地址偏移: 0x04 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 UKEY[31:16] w w w w w w w w w w w w w w w w 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 UKEY[15:0] w w w w w w w w w w w w w w w w 位 区域 31:0 UKEY[31:0] 说明 FMC_CMR解锁寄存器 这些位仅能被软件写 写解锁值到UKEY[31:0]可以解锁 FMC_CMR寄存器 3.4.3 闪存可选字节块解锁寄存器(FMC_OBKEYR) 地址偏移: 0x08 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 OBKEY[31:16] w w w w w w w w w w w w w w w w 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OBKEY[15:0] w w w w w w w w w w w w w w w w 位 区域 31:0 OBKEY[31:0] 说明 FMC_CMR可选字节操作解锁寄存器 这些位仅能被软件写 写解锁值到OBKEY[31:0]解锁FMC_CMR寄存器的可选字节命令 3.4.4 闪存控制/状态寄存器 (FMC_CSR) 地址偏移: 0x0C 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 54 GD32F1x0 用户手册 15 14 13 12 11 10 9 保留 8 7 6 5 4 3 2 1 0 ENDF WPEF Res. PGEF Res. BUSY rw rw rw r 位 区域 31:6 保留 5 ENDF 4 WPEF 3 保留 2 PGEF 1 保留 0 BUSY 说明 操作结束标志位 操作成功执行后,此位被硬件置1,软件写1清0。 擦除/编程保护错误标志位 在受保护的页上擦除/编程操作时,此位被硬件置1,软件写1清0。 编程错误标志位 当被编程区域状态不为0xFFFF时对闪存编程,此位被硬件置1,软件写1清0。 闪存忙标志 当闪存操作正在进行时,此位被置1。当操作结束或者出错,此位被清0。 3.4.5 闪存命令寄存器 (FMC_CMR) 地址偏移: 0x10 复位值: 0x0000 0080 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 15 14 13 12 11 10 9 8 OPTR ENDIE ERIE OBWE rw rw rw rw 7 6 5 4 3 LK START OBER OBPG rw rw rw rw 2 1 0 ME PE PG rw rw rw 位 31:14 13 区域 保留 OPTR 12 ENDIE 说明 可选字节重加载位 软件置1 0: 没有作用 1: 强制可选字节重装载,产生系统复位 操作结束中断使能位 软件置1和清0 0: 无硬件中断产生 1: 使能操作结束中断 55 11 保留 10 ERIE 9 OBWE 8 保留 7 LK 6 START 5 OBER 4 OBPG 3 保留 2 ME 1 PE 0 PG GD32F1x0 用户手册 出错中断使能位 软件置1和清0 0: 无硬件中断产生. 1: 使能出错中断 可选字节擦除/编程使能位 当正确的序列写入FMC_OBKEYR寄存器,此位由硬件置1。此位可以被软件清 0。 锁FMC_CMR寄存器标志位 当正确的序列写入FMC_UKEYR寄存器,此位由硬件清0,此位可以由软件置1。 发送擦除命令到FMC位 软件置1可以发送擦除命令到FMC。当BUSY位被清0时,此位由硬件清0。 可选字节擦除命令位 软件置1和清0 0: 无作用 1: 可选字节擦除命令 可选字节编程命令位 软件置1和清0 0: 无作用 1: 可选字节编程命令 主存储块整片擦除命令位 软件置1和清0 0: 无作用 1: 主存储块整片擦除命令 主存储块页擦除命令位 软件置1和清0 0: 无作用 1: 主存储块页擦除命令 主存储块页编程命令位 软件置1和清0 0: 无作用 1: 主存储块页编程命令 56 3.4.6 闪存命令地址寄存器 (FMC_AR) 地址偏移: 0x14 复位值: 0x0000 0080 GD32F1x0 用户手册 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 AR[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 AR[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 31:0 AR[31:0] 说明 闪存命令地址位 软件置位 AR 位是闪存擦除命令的地址 3.4.7 闪存可选字节寄存器 (FMC_OPTR) 地址偏移: 0x1C 复位值: 0xXXXX XX0X 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 OB_DATA 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 OB_USER 保留 PLEVEL OBER r r r r r r r r r r r 位 31:16 15:8 2:1 区域 OB_DATA[15:0] OB_USER PLEVEL 0 OBER 说明 系统复位后保存可选字节块的OB_DATA[15:0]部分 系统复位后保存可选字节块的OB_USER字节 安全保护级别 00: 无保护 01: 低保护级别 11: 高保护级别 可选字节读错误位 当可选字节和它的补码不匹配时此位由硬件置1,可选字节被设置为0xFF. 3.4.8 闪存页擦除/编程保护寄存器 (FMC_WPR) 地址偏移: 0x20 57 复位值: 0x0000 XXXX GD32F1x0 用户手册 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 OB_WP[15:0] r r r r r r r r r r r r r r r r 位 31:24 区域 OB_WP[15:0] 说明 系统复位后保存可选字节块的OB_WP[15:0]部分 3.4.9 闪存等待状态控制寄存器 (FMC_WSCR) 地址偏移: 0xFC 复位值: 0xXXXX XXXX 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 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 保留 WSEN r r r r r r r r r r r r r r r r 位 区域 0 WSEN 说明 FMC等待状态使能寄存器 此位由软件置1和清0。此位也被FMC_UKEYR寄存器保护。需要写0x45670123 和0xCDEF89AB到FMC_UKEYR寄存器。 0: 从闪存取指无等待状态 1: 从闪存取指增加等待状态 3.4.10 闪存产品保留 ID 寄存器 1 (FMC_RES_ID1) 地址偏移: 0x100 复位值: 0xXXXX XXXX 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 RES_ID1[31:16] 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 RES_ID1[15:0] r r r r r r r r r r r r r r r r 58 位 区域 31:0 RES_ID1 说明 产品保留 ID寄存器1 GD32F1x0 用户手册 这些位只读 上电后这些位始终不能改变,芯片生产以后只能被一次编程 3.4.11 闪存产品保留 ID 寄存器 2 (FMC_RES_ID2) 地址偏移: 0x104 复位值: 0xXXXX XXXX 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 RES_ID2[31:16] 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 RES_ID2[15:0] r r r r r r r r r r r r r r r r 位 区域 31:0 RES_ID2 说明 产品保留ID寄存器2 只读 上电后这些位始终不能改变,芯片生产以后只能被一次编程 59 4 4.1 4.1.1 4.1.2 复位和时钟控制单元 (RCC) GD32F1x0 用户手册 复位控制单元 (RCU) 简介 GD32F1x0 复位控制包括三种复位控制:电源复位、系统复位和备份域复位。电源复位又称 为冷复位,电源启动时复位除了备份域的所有系统。除了SW-DP控制器和备份域,系统复位 将复位处理器内核和外设IP部分。备份域复位复位备份区域。复位被外部信号、内部事件和复 位发生器触发。接下章节将详细介绍这些复位。 功能说明 电源复位 当以下事件中之一发生时,产生电源复位:1、上电/掉电复位(POR/PDR 复位)2、从待机模式 中返回后由内部复位发生器产生。电源复位复位所有的寄存器除了备份域。电源复位为低电平 有效,当内部LDO电源基准将提供好1.2V电压时,电源复位无效。复位入口矢量被固定在地址 0x0000_0004。 系统复位 当发生以下任一事件时,产生一个系统复位:  上电复位 (PORRESETn)  外部引脚复位 (NRST)  窗口看门狗计数终止 (WWDG_RSTn)  独立看门狗计数终止 (IWDG_RSTn)  Cortex™-M3的中断应用和复位控制寄存器中的SYSRESETREQ位置‗1‘ (SW_RSTn)  可选负载字节复位 (OBL_RSTn)  用户选择字节寄存器OB_STDBY_RSTn设置为0,并且进入待机模式时 (OB_STDBY_RSTn)  用户选择字节寄存器OB_DEEPSLEEP_RSTn设置为0,并且进入深度睡眠模式时 (OB_DEEPSLEEP_RSTn) 系统复位脉冲发生器保证每一个复位源(外部或内部)都能有至少20μs的低电平脉冲延时。 60 图 7. 系统复位电路 GD32F1x0 用户手册 4.2 4.2.1 NRST Filter PORRESETn WWDG_RSTn IWDG_RSTn SW_RSTn OB_STDBY_RSTn OB_STOP_RSTn OBL_RSTn min 20 us pulse generator System Reset 备份域复位 当以下事件之一发生时,产生备份域复位。1、设置备份域控制寄存器中的BKPRST位为‗1‘;2、 备份域电源上电复位(在VDD和VBAT两者掉电的前提下,VDD或VBAT上电)。 时钟控制单元 (CCU) 简介 时钟控制单元提供了一系列频率的时钟功能,包括一个内部高速8M RC 振荡器时钟(HSI),一 个内部高速14M RC 振荡器时钟(HSI14),一个外部高速晶体振荡器时钟(HSE),一个内部低 速 RC 振荡器时钟(LSI),一个外部低速晶体振荡器时钟(LSE),一个锁相环(PLL),一个HSE 时钟监视器,时钟预分频器,时钟多路复用器和时钟选通电路。 AHB、APB和Cortex™-M3时钟都源自系统时钟(CK_SYS),系统时钟的时钟源为HSI, HSE或 PLL 。系统时钟的最大运行时钟频率可以达到72MHz。独立看门狗定时器和实时时钟(RTC) 使用LSI或LSE作为时钟源。 61 GD32F1x0 用户手册 8 MHz HSI RC 4-32 MHz HSE XTAL 32.768 KHz LSE OSC 40 KHz LSI RC / 2 HSEPRED V ÷1,2. ..16 SCS[1:0 ] CK_HSI 00 0 PLL CK_PLL 1 CK_SYS 1 0 72 MHz max PLLSEL PLLEN 01 CK_HSE Clock Monitor AHB Prescaler ÷1,2...512 CK_AHB 72 MHz max /32 11 0 1 10 RTCSRC[1:0] CK_RTC (to RTC) CK_IWDG (to IWDG) CK_OUT ÷1,2,4...128 CKOUTDIV 0 CK_HSI14 CK_LSI CK_LSE CK_SYS CK_HSI CK_HSE *1,2 CK_PLL CK_LSE 1 ÷24 4 0 CECSEL CK_CEC (to CEC) USB Prescaler ÷1,1.5,2 FLITF enable (by hardware) AHB enable TIM2,3,6,14 ÷[apb1 prescaler/2] CK_USB (to USB) CK_I2S (to I2S) CK_FLITF (to FLITF) HCLK (to AHB bus,Cortex-M3,SRAM,DMA) CK_CST ÷8 (to Cortex-M3 SysTick) FCLK (free running clock) TIMX enable CK_TIMX to TIM2,3,6,14 APB1 Prescaler ÷1,2,4,8,16 TIM1,15,16,1 7 ÷[apb2 prescaler/2] CK_APB1 72 MHz max Peripheral enable PCLK1 to APB1 peripherals TIM1 enable CK_TIM1 to TIM1,15,16,17 APB2 Prescaler ÷1,2,4,8,16 CK_APB2 72 MHz max Peripheral enable PCLK2 to APB2 peripherals ADC Prescaler ÷2,4,8,12,16 14 MHz HSI RC 1 CK_ADCX to ADC1 0 14 MHz max ADCSEL CK_HSI 11 CK_LSE 10 0 CK_SYS 1 00 CK_USART t1o USART1 4.2.2 预分频器可以配置AHB、APB2和APB1域的时钟频率。AHB和APB2/APB1域的最高时钟频率 为72MHz。RCC通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。 通过对SysTick控制与状态寄存器的设置,可选择上述时钟或Cortex(HCLK)时钟作为SysTick 时钟。 ADC时钟由APB2时钟经2、4、6、8、12或16分频后获得,也可以通过设置全局时钟配置寄存 器3(RCC_GCFDGR3)的ADCSEL位选择HSI14时钟,USART1的时钟可以选择HSI时钟、LSE 时钟或者APB2时钟,通过设置全局时钟配置寄存器3(RCC_GCFDGR3)的USART1SEL位来 选 择 。 CEC 时 钟 可 以 选 择 HSI 时 钟 244 分 频 或 者 LSE 时 钟 , 通 过 设 置 全 局 时 钟 配 置 寄 存 器 3(RCC_GCFDGR3)的CECSEL 位来选择。 RTC时钟可以选择LSE时钟或者LSI时钟或者HSE时钟32分频,通过设置备用域控制寄存器 (RCC_BDCR)的RTCSEL 位来选择。 IWDG时钟可以选择LSI时钟,当IWDG启动时强制选择。 如果APB时钟分频系数为1,定时器的时钟频率与所在APB总线频率一致。否则,定时器的时 钟频率被设为与其相连的APB总线频率的2倍。 主要特征  4到32 MHz外部高速晶体振荡器 (HSE) 62 4.2.3  8 MHz内部高速RC振荡器 (HSI)  14 MHz内部高速RC振荡器 (HSI14)  32,768 Hz外部低速晶体振荡器 (LSE)  40 kHz内部低速RC振荡器 (LSI)  PLL 时钟源可以是HSE或HSI  HSE时钟可监视 GD32F1x0 用户手册 功能说明 高速外部晶体振荡器时钟(HSE) 4到32MHz的外部振荡器可为系统提供更为精确的主时钟。带有特定频率的晶体必须靠近两 个HSE的引脚。和晶体连接的外部电阻和电容必须根据所选择的振荡器来调整。 OSCIN OSCOUT Crystal C1 C2 HSE晶体可以通过设置时钟控制寄存器GCCR的HSEEN位来启动或关闭。在时钟控制寄存器 RCC_CR中的HSESTB位用来指示高速外部振荡器是否稳定。在启动时,直到这一位被硬件置 ‗1‘,时钟才被释放出来。这个特定的延迟时间又称启动时间。当HSE时钟稳定后,如果在时钟 中断寄存器RCC_GCIR中的相应中断使能位HSESTBIE位被置‗1‘,将会产生相应中断。在这一 点上,HSE时钟可以被直接用作系统时钟源或者PLL输入时钟。 将时钟控制寄存器RCC_GCCR的HSEBPS和HSEEN位置‗1‘可以设置外部时钟旁路模式。 CK_HSE等于驱动OSC_IN管脚的外部时钟。 高速内部8MHz RC振荡器时钟 (HSI) 高速内部8MHz RC振荡器时钟,简称HSI时钟,拥有8MHz的固定频率,设备上电后CPU默认 选择的时钟源就是HSI时钟。HSI RC振荡器能够在不需要任何外部器件的条件下提供更低成本 类型的时钟源。HSI晶体可以通过设置时钟控制寄存器(RCC_GCCR)中的HSIEN位被启动和关 闭。时钟控制寄存器RCC_GCCR中的HSIRSTB位用来指示HSI内部RC振荡器是否稳定。HSI 振荡器的启动时间比HSE晶体振荡器要更短。如果时钟中断寄存器RCC_GCIR中的相应中断 使能位HSISTBIE被置‗1‘,在HSI稳定以后,将产生一个中断。HSI时钟也可用作PLL输入时钟。 工厂会校准HSI时钟频率的精度,但是它的精度仍然比HSE时钟要差。用户需求、环境条件和 成本将决定选择哪个时钟作为系统时钟源。 如果HSE或者PLL是系统时钟源,为了最大程度减小系统从深度睡眠模式启动的时间,系统从 63 GD32F1x0 用户手册 深度睡眠模式初始唤醒的时候硬件强制HSI时钟作为系统时钟。 锁相环 (PLL) 内部锁相环PLL通过对输入参考频率为4~32MHz的时钟基准2 ~32倍频,可以提供16~72 MHz 的时钟输出。 PLL可以通过设置时钟控制寄存器(RCC_GCCR)中的PLLEN位被启动和关闭。时钟控制寄存 器RCC_GCCR中的PLLSTB位用来指示PLL时钟是否稳定。如果时钟中断寄存器RCC_GCIR 中的相应中断使能位PLLSTBIE被置‗1‘,在PLL稳定以后,将产生一个中断。 高速内部14M RC振荡器时钟 (HSI14) 高速内部14M RC振荡器时钟 (HSI14)有一个固定的频率14MHz,专门用作ADC时钟。HSI14 可以通过设置时钟控制寄存器2(RCC_GCCR2)中的HSI14EN位被启动和关闭。时钟控制寄存 器 2RCC_GCCR2 中 的 HSI14RSTB 位 用 来 指 示 HSI14 时 钟 是 否 稳 定 。 如 果 时 钟 中 断 寄 存 器 RCC_GCIR中的相应中断使能位HSI14STBIE被置‗1‘,在HSI14稳定以后,将产生一个中断。 低速外部晶体振荡器时钟(LSE) LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟电路提供一个低功耗 且精确的时钟源。LSE时钟可以通过设置备份域控制寄存器(RCC_BDCR)中的LSEEN位被启 动和关闭。备份域控制寄存器RCC_BDCR中的LSESTB位用来指示LSE时钟是否稳定。如果 时钟中断寄存器RCC_GCIR中的相应中断使能位LSESTBIE被置‗1‘,在LSE稳定以后,将产生 一个中断。 将备份域控制寄存器RCC_BDCR 的LSEBPS和LSEEN位置‗1‘可以选择外部时钟旁路模式。 CK_LSE与连到OSC32_IN 脚上外部时钟信号一致。 低速内部RC振荡器时钟(LSI) LSI RC振荡器时钟担当一个低功耗时钟源的角色,它的时钟频率大约40 kHz,为独立看门狗 和实时时钟电路提供时钟。LSI提供低成本的时钟源,因为不需要外部器件。LSI RC振荡器可 以 通 过 设 置 控 制 / 状 态 寄 存 器 RCC_GCSR 中 的 LSIEN 位 被 启 动 和 关 闭 。 控 制 / 状 态 寄 存 器 RCC_GCSR中的LSISTB位用来指示LSI时钟是否稳定。如果控制/状态寄存器RCC_GCSR中 的相应中断使能位LSISTBIE被置‗1‘,在LSI稳定以后,将产生一个中断。 系统时钟 (CK_SYS) 选择 系统复位后,HSI时钟被选为系统时钟,改变时钟配置寄存器RCC_GCFGR 中的系统时钟变 换位SCS可以切换系统时钟源为HSE或PLL。当SCS的值改变,系统时钟将使用原来的时钟源 继续运行直到转换的目标时钟源稳定。当一个时钟源被直接或通过PLL间接作为系统时钟时, 它将不能被停止。 HSE 时钟监视器(CKM) 设置时钟控制寄存器RCC_GCCR中的HSE时钟监视使能位CKMEN,HSE可以使能时钟监视 功能。该功能必须在HSE启动延迟完毕后使能,在HSE停止后禁止。 一旦监测到HSE故障, HSE将自动被禁止,时钟中断寄存器RCC_GCIR中的HSE时钟阻塞标志位CKMF将被置‗1‘,产 生HSE故障事件。这个故障引发的中断和Cortex-M3的不可屏蔽中断相连。如果HSE被选作系 统或PLL的时钟源,HSE故障将促使选择HSI为系统时钟源且PLL将被自动禁止。 64 时钟输出功能 GD32F1x0 用户手册 时钟输出功能输出从32 kHz到54 MHz的时钟。通过设置时钟配置寄存器RCC_GCFGR中的 CKOUT时钟源选择位能够选择不同的时钟信号。相应的GPIO引脚应该被配置成复用功能 CKOUTSEL 000 001 010 011 100 101 110 111 时钟源 无时钟 CK_HSI14 CK_LSI CK_LSE CK_SYS CK_HSI CK_HSE CK_PLL or CK_PLL/2 I/O(AFIO)模式来输出选择的时钟信号。 通过配置时钟配置寄存器RCC_GCFGR的CKOUTDIV[2:0]位,可以将输出时钟按比例分频, 进而降低CKOUT频率。 深度睡眠模式时钟控制 当mcu工作在深度睡眠模式时,HDMI CEC或USART1能唤醒mcu,前提是它们的时钟是由LSE 时钟提供且LSE时钟被使能。 如果HDMI CEC或USART1时钟选择HSI时钟并且工作在深度睡眠模式,它们有能力开启或关 闭HSI时钟,HDMI CEC 或USART1采用HSI时钟作为工作时钟来唤醒深度睡眠模式。 电压控制 掉电选择寄存器(RCC_PDR_VC)中的PDR_S位可以控制掉电复位。如果PDR_S 位是0, VDD低于2.6V的时候电源掉电复位生效。如果PDR_S 位是1,VDD低于1.8V的时候掉电复位 生效。在PDR_S 位是1时,并且VDD低于2.6V时,闪存编程和擦除不能使用。 深度睡眠模式电压寄存器(RCC_DEEPSLEEP_VC)中的DEEPSLEEP_VC[2:0]位可以控制内 核在深度睡眠模式下的电压。 DEEPSLEEP_VC[2:0] 000 001 010 011 100 ~ 111 深度睡眠模式电压(V) 1.2 1.1 1.0 0.9 保留 RCC_PDR_VC和RCC_DEEPSLEEP_VC寄存器被电源解锁寄存器(RCC_VC_KEY)保护。只 有在写0x1A2B3C4D到RCC_VC_KEY后,RCC_PDR_VC和RCC_DEEPSLEEP_VC寄存器才 能被写入。 65 4.3 RCC 寄存器 GD32F1x0 用户手册 4.3.1 总时钟控制寄存器 (RCC_GCCR) 地址偏移: 0x00 复位值: 0x0000 XX83 X 表示未定义。 31 30 29 28 27 26 25 24 23 保留 PLLSTB PLLEN r rw 15 14 13 12 11 10 9 8 7 HSICALIB r r r r r r r 位 位域 说明 r rw 31:26 保留 必须保持复位值 22 21 20 保留 6 5 4 HSIADJ rw rw rw 19 18 17 16 CKMEN HSEBPS HSESTB HSEEN r rw r rw 3 2 1 0 保留 HSISTB HSIEN rw r rw 25 PLLSTB PLL 时钟稳定标志位 硬件置‗1‘来指示PLL输出时钟是否稳定待用。 0: PLL没稳定 1: PLL稳定 24 PLLEN PLL 使能 软件置位或复位。如果PLL时钟作为系统时钟的时候该位不能被复位。进入停止或待机模 式时硬件自动复位。 0: PLL被关闭 1: PLL被打开 23:20 保留 必须保持复位值. 19 CKMEN HSE时钟监视使能 0: 禁止外部4 ~ 32 MHz 晶体振荡器(HSE) 时钟监视器 1: 使能外部4 ~ 32 MHz 晶体振荡器(HSE) 时钟监视器 当硬件监测到HSE时钟一直停留在低或者高的状态,内部硬件将切换系统时钟到HSI RC 时钟。恢复原来系统时钟的方式有以下几种:外部复位,上电复位,软件清CKSF位。 注意:使能HSE时钟监视器以后,硬件无视控制位HSIEN的状态,自动使能HSI时钟。 18 HSEBPS 外部晶体振荡器(HSE)时钟旁路模式使能 只有在HSEEN 位为0时HSEBPS位才可写。 0: 禁止HSE旁路模式 1:使能HSE旁路模式 HSE输出时钟等于输入时钟 17 HSESTB 外部晶体振荡器(HSE)时钟稳定状态标志位 硬件置‗1‘来指示HSE振荡器时钟是否稳定待用 0: HSE 振荡器未稳定 66 1: HSE 振荡器已稳定 GD32F1x0 用户手册 16 HSEEN 外部高速振荡器时钟使能 软件置‗1‘或清‗0‘。如果HSE时钟或者PLL输入时钟作为系统时钟,该位不能被复位。进入 停止或待机模式时硬件自动复位。 0: 禁止外部4 ~ 32 MHz晶体振荡器 1: 使能外部4 ~ 32 MHz 晶体振荡器 15:8 HSICALIB 高速内部振荡器校准值寄存器 上电时自动加载这些位 7:3 HSIADJ 高速内部振荡器时钟调整值 2 保留 这些位由软件置位,最终调整值为HSIADJ当前值加上HSICALIB[7:0]位的值。最终调整值 应该调整HSI到8 MHz ± 1%。 必须保持复位值. 1 HSISTB 高速内部(HSI)时钟稳定状态标志位 硬件置‗1‘来指示HSI振荡器时钟是否稳定待用 0: HSI 振荡器未稳定 1: HSI 振荡器已稳定 0 HSIEN 高速内部振荡器使能 软件复位置位。如果HSI时钟用作系统时钟时该位不能被复位。当从待机和深度睡眠模式 返回或用作系统时钟的HSE振荡器发生故障时,该位由硬件置1 来启动HSI 振荡器。 0: 内部8 MHz RC 振荡器关闭 1: 内部8 MHz RC 振荡器开启 4.3.2 总体时钟配置寄存器 (RCC_GCFGR) 地址偏移: 0x04 复位值: 0x0000 0000 31 30 29 28 27 PLLDV CKOUTDIV PLLMF[4] rw rw rw rw rw 15 14 13 12 11 ADCPS[1:0] APB2PS rw rw rw rw rw 26 25 24 CKOUTSEL rw rw rw 10 9 8 APB1PS rw rw rw 23 22 21 USBPS rw rw rw 7 6 5 AHBPS rw rw rw 20 19 18 PLLMF[3:0] rw rw rw 4 3 2 SCSS rw r r 17 16 PLLPREDV PLLSEL rw rw 1 0 SCS rw rw 位 位域 说明 31 PLLDV CK_PLL 1或2分频来用作CK_OUT 0: CK_PLL 2分频用作CK_OUT 1: CK_PLL用作CK_OUT 67 30:28 27 26:24 23:22 21:18 CKOUTDIV PLLMF[4] CKOUTSEL USBPS PLLMF[3:0] GD32F1x0 用户手册 CK_OUT分频器,来降低CK_OUT频率 CK_OUT的选择参考GCFGR的26:24位 000: CK_OUT不分频 001: CK_OUT2分频 010: CK_OUT4分频 011: CK_OUT8分频 100: CK_OUT16分频 101: CK_OUT32分频 110: CK_OUT64分频 111: CK_OUT128分频 PLLMF 寄存器第4位 见GCFGR的21:18位 CKOUT 时钟源选择 软件置位或清零。 000: 没有时钟被选择 001: 选择高速14M内部振荡器时钟 010: 选择低速内部振荡器时钟 011: 选择外部低速振荡器时钟 100: 选择系统时钟 101:选择内部高速8M振荡器时钟 110: 选择外部高速振荡器时钟 111: 依赖于PLLDV选择(CK_PLL / 2)或的CK_PLL USB时钟预分频选择 软件置位或清零来控制USB时钟预分频值。USB时钟必须为48MHz.。如果USB时钟使 能这些位不能被复位。 00: 选择(CK_PLL / 1.5) 01: 选择CK_PLL 10: 选择(CK_PLL / 2.5) 11: 选择(CK_PLL / 2) PLL 倍频因子 软件写这些位包括GCFGR的27位来确定PLL的倍频因子 注意:PLL输出频率不能超过72 MHz。 00000: (PLL时钟源 x 2) 00001: (PLL时钟源 x 3) 00010: (PLL时钟源 x 4) 00011: (PLL时钟源 x 5) 00100: (PLL时钟源 x 6) 00101: (PLL时钟源 x 7) 00110: (PLL时钟源 x 8) 00111: (PLL时钟源 x 9) 01000: (PLL时钟源 x 10) 68 17 16 15:14 13:11 PLLPREDV PLLSEL ADCPS[1:0] APB2PS 01001: (PLL时钟源 x 11) 01010: (PLL时钟源 x 12) 01011: (PLL时钟源 x 13) 01100: (PLL时钟源 x 14) 01101: (PLL时钟源 x 15) 01110: (PLL时钟源 x 16) 01111: (PLL时钟源 x 16) 10000: (PLL时钟源 x 17) 10001: (PLL时钟源 x 18) 10010: (PLL时钟源 x 19) 10011: (PLL时钟源 x 20) 10100: (PLL时钟源 x 21) 10101: (PLL时钟源 x 22) 10110: (PLL时钟源 x 23) 10111: (PLL时钟源 x 24) 11000: (PLL时钟源 x 25) 11001: (PLL时钟源 x 26) 11010: (PLL时钟源 x 27) 11011: (PLL时钟源 x 28) 11100: (PLL时钟源 x 29) 11101: (PLL时钟源 x 30) 11110: (PLL时钟源 x 31) 11111: (PLL时钟源 x 32) GD32F1x0 用户手册 HSE分频器作为PLL输入。该位与时钟配置寄存器2(RCC_GCFGR2) 中的 HSEPREDV[0]位是一样的。参考RCC_CGFGR2的HSEPREDV位说明。 由软件置1或清0来分频或不分频HSE后,当作PLL输入时钟源 0: 选择HSE时钟 1: HSE时钟二分频 PLL 时钟源选择 软件置1或清0来控制PLL时钟源 0: 选择HSI二分频为PLL时钟源 1: 选择HSE为PLL时钟源 ADC 时钟预分频选择 软件清0和置1 00: 选择APB2时钟2分频 01: 选择APB2时钟4分频 10: 选择APB2时钟6分频 11: 选择APB2时钟8分频 APB2 预分频选择 软件置1和清0来控制APB2时钟分频因子 0xx: 选择AHB时钟不分频 69 100: 选择AHB时钟2分频 101: 选择AHB时钟4分频 110: 选择AHB时钟8分频 111: 选择AHB时钟16分频 GD32F1x0 用户手册 10:8 APB1PS APB1 预分频选择 软件设置和清除来控制APB1时钟分频因子。 0xx: 选择AHB时钟不分频 100: 选择AHB时钟2分频 101: 选择AHB时钟4分频 110: 选择AHB时钟8分频 111: 选择AHB时钟16分频 7:4 AHBPS AHB 预分频选择 软件设置和清除来控制AHB时钟分频因子 0xxx: 选择CK_SYS系统时钟不分频 1000: 选择CK_SYS系统时钟2分频 1001: 选择CK_SYS系统时钟4分频 1010: 选择CK_SYS系统时钟8分频 1011: 选择CK_SYS系统时钟16分频 1100: 选择CK_SYS系统时钟64分频 1101: 选择CK_SYS系统时钟128分频 1110: 选择CK_SYS系统时钟256分频 1111: 选择CK_SYS系统时钟512分频 3:2 SCSS 系统时钟转换状态 硬件设置和清除指示系统当前时钟源 00: 选择CK_HIS作为CK_SYS 系统时钟源 01: 选择CK_HSE作为CK_SYS 系统时钟源 10: 选择CK_PLL作为CK_SYS 系统时钟源 11: 保留 1:0 SCS 系统时钟转换 软件设置选择系统时钟源。由于CK_SYS的改变有固有的延迟,需要软件读SCSS位来 确保转换是否结束。在从停止或待机模式中返回时,或作为系统时钟或PLL时钟源的HSE 出现故障时,强制选择HSI作为系统时钟。 00: 选择HSI时钟作为CK_SYS系统时钟源 01: 选择HSE时钟作为CK_SYS系统时钟源 10: 选择PLL作为CK_SYS系统时钟源 11: 保留 70 4.3.3 总体时钟中断寄存器 (RCC_GCIR) 地址偏移: 0x08 复位值: 0x0000 0000 GD32F1x0 用户手册 31 30 29 15 14 13 保留 HSI14 STBIE rw 28 27 26 25 24 23 22 保留 CKMR 保留 w 12 11 10 9 8 PLL HSE HSI LSE LSI STBIE STBIE STBIE STBIE STBIE rw rw rw rw rw 7 CKMF r 21 HSI14 STBR w 6 保留 20 19 18 17 16 PLL HSE HSI LSE LSI STBR STBR STBR STBR STBR w w w w w 5 4 3 2 1 0 HSI14 PLL HSE HSI LSE LSI STBF STBF STBF STBF STBF STBF r r r r r r 位 31:24 23 22 21 20 19 18 17 位域 保留 CKMR 保留 HSI14STBR PLLSTBR HSESTBR HSISTBR LSESTBR 说明 必须保持复位值 HSE时钟阻塞中断复位 软件写1复位CKMF标志位 0: 不复位CKMF标志位 1: 复位CKMF标志位 必须保持复位值 HSI14时钟稳定中断复位 软件写1复位HSI14STBF标志位 0:不复位HSI14STBF标志位 1:复位HSI14STBF标志位 PLL稳定中断复位 软件写1复位PLLSTBF标志位 0: 不复位PLLSTBF标志位 1: 复位PLLSTBF标志位 HSE时钟稳定中断复位 软件写1复位HSESTBF标志位. 0: 不复位HSESTBF标志位 1: 复位HSESTBF标志位 HSI时钟稳定中断复位 软件写1复位HSISTBF标志位. 0: 不复位HSISTBF标志位 1: 复位HSISTBF标志位 LSE时钟稳定中断复位 71 16 15:14 13 12 11 10 9 8 7 LSISTBR 保留 HSI14STBIE PLLSTBIE HSESTBIE HSISTBIE LSESTBIE LSISTBIE CKMF 软件写1复位LSESTBF标志位. 0: 不复位LSESTBF标志位 1: 复位LSERDYF标志位 GD32F1x0 用户手册 LSI时钟稳定中断复位 软件写1复位LSIRDYF标志位. 0: 不复位LSISTBF标志位 1: 复位LSIRDYF标志位 必须保持复位值 HSI14时钟稳定中断使能 软件置1和清0来使能/禁止HSI14时钟稳定中断. 0: 禁止HSI14时钟稳定中断 1: 使能HSI14时钟稳定中断 PLL时钟稳定中断使能 软件置1和清0来使能/禁止PLL时钟稳定中断. 0: 禁止PLL时钟稳定中断 1: 使能PLL时钟稳定中断 HSE时钟稳定中断使能 软件置1和清0来使能/禁止 HSE 时钟稳定中断 0: 禁止HSE时钟稳定中断 1: 使能HSE时钟稳定中断 HSI时钟稳定中断使能 软件置1和清0来使能/禁止 HSI 时钟稳定中断 0: 禁止HSI时钟稳定中断 1: 使能HSI时钟稳定中断 LSE时钟稳定中断使能 LSE时钟稳定中断使能/禁止控制 0: 禁止LSE时钟稳定中断 1: 使能LSE时钟稳定中断 LSI时钟稳定中断使能 LSI时钟稳定中断使能/禁止控制 0: 禁止LSI时钟稳定中断 1: 使能LSI时钟稳定中断 HSE时钟阻塞中断标志位 当HSE时钟阻塞时硬件置1 软件置CKMR=1时清除该位 0: 时钟运行正常 72 1: HSE时钟阻塞 GD32F1x0 用户手册 6 保留 必须保持复位值. 5 HSI14STBF HSI14 时钟稳定中断标志位 当HSI14时钟稳定且HSI14STBIE位被置1时由硬件置1 软件置HSI14STBR=1时清除该位。 0: 无HSI14时钟稳定中断产生 1: HSI14时钟稳定中断发生 4 PLLSTBF PLL 时钟稳定中断标志位 当PLL时钟稳定且PLLSTBIE位被置1时由硬件置1 软件置PLLSTBR=1时清除该位 0: 无PLL时钟稳定中断产生 1: 产生PLL 时钟稳定中断 3 HSESTBF HSE时钟稳定中断标志位 当外部4 ~ 16 MHz晶体振荡器时钟稳定且HSESTBIE位被置1时由硬件置1 软件置HSESTBR=1时清除该位 0: 无HSE时钟稳定中断发生 1: 发生HSE时钟稳定中断 2 HSISTBF HSI时钟稳定中断标志位 当内部8 MHz RC振荡器时钟稳定且HSISTBIE位被置1时由硬件置1 软件置HSISTBR=1时清除该位 0: 无HSI时钟稳定中断产生 1: 产生HSI时钟稳定中断 1 LSESTBF LSE 时钟稳定中断标志位 当外部32.768KHz晶体振荡器时钟稳定且LSESTBIE为被置1时由硬件置1 软件置LSESTBR=1时清除该位 0: 无LSE时钟稳定中断发生 1: 发生LSE时钟稳定中断 0 LSISTBF LSI时钟稳定中断标志位 当内部32kHz RC振荡器时钟稳定且LSISTBIE位被置1时由硬件置1 软件置LSISTBR =1时清除该位 0: 无LSI时钟稳定中断产生 1: 产生LSI时钟稳定中断 4.3.4 APB2 复位控制寄存器 (RCC_APB2RCR) 地址偏移: 0x0C 73 复位值: 0x00000 0000 GD32F1x0 用户手册 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 TM17 RST TM16 RST TM15 RST rw rw rw 15 14 13 12 11 10 9 87 6 5 4 3 2 1 0 保留 USART1 RST 保留 SPI1 RST TM1 RST 保留 ADC1 RST 保留 CFG RST rw rw rw rw rw 位 31:19 位域 保留 说明 必须保持复位值 18 TM17RST Timer 17定时器复位 由软件置1或清0 0: 无复位 1: 复位TIMER 17定时器 17 TM16RST Timer 16定时器复位 由软件置1或清0. 0: 无复位 1: 复位TIMER 16定时器 16 TM15RST Timer 15定时器复位 由软件置1或清0. 0: 无复位 1: 复位TIMER 15定时器 14 USART1RST USART1 复位 由软件置1或清0. 0: 无复位 1: 复位USART1 13 保留 必须保持复位值 12 SPI1RST SPI1复位 由软件置1或清0. 0: 无复位 1: 复位SPI1 11 TM1RST Timer 1定时器复位 由软件置1或清0. 0: 无复位 74 1: 复位TIMER 1定时器 10 保留 必须保持复位值 9 ADC1RST ADC 1复位 由软件置1或清0. 0: 无复位 1:复位ADC 1 8:1 保留 必须保持复位值 0 CFGRST 系统配置复位 由软件置1或清0. 0: 无复位 1: 复位系统配置模块 GD32F1x0 用户手册 4.3.5 APB1 复位控制寄存器 (RCC_APB1RCR) 地址偏移: 0x10 复位值: 0x0000 0000 31 保留 15 SPI3 RST rw 30 29 28 CEC DAC PWR RST RST RST rw rw rw 14 13 12 SPI2 RST 保留 rw 27 11 WWDG RST rw 26 25 保留 10 9 保留 24 8 TM14 RST rw 23 USB RST rw 7 22 I2C2 RST rw 6 保留 21 20 I2C1 RST rw 5 4 TM6 RST rw 19 18 保留 3 2 保留 17 USART 2RST rw 1 TM3 RST rw 16 保留 0 TM2 RST rw 位 位域 31 保留 说明 必须保持复位值 30 CECRST HDMI CEC复位 由软件置1或清0. 0: 无复位 1: 复位HDMI CEC单元 29 DACRST DAC复位 由软件置1或清0. 0: 无复位 1: 复位DAC单元 75 28 27:24 23 22 21 20:18 17 16 15 14 13:12 11 PWRRST 保留 USBRST I2C2RST I2C1RST 保留 USART2RST 保留 SPI3RST SPI2RST 保留 WWDGRST 电源控制复位 由软件置1或清0. 0: 无复位 1: 复位电源控制单元 必须保持复位值 USB复位 由软件置1或清0. 0: 无复位 1: 复位USB I2C2复位 由软件置1或清0. 0: 无复位 1: 复位I2C2 I2C1 复位 由软件置1或清0. 0: 无复位 1: 复位I2C1 必须保持复位值 USART2 复位 由软件置1或清0. 0: 无复位 1: 复位USART2 必须保持复位值 SPI3 复位 由软件置1或清0. 0: 无复位 1: 复位SPI3 SPI2 复位 由软件置1或清0. 0: 无复位 1: 复位SPI2 必须保持复位值 窗口看门狗复位 由软件置1或清0. GD32F1x0 用户手册 76 0: 无复位 1: 复位窗口看门狗 10:9 保留 必须保持复位值 8 TM14RST TM14定时器复位 由软件置1或清0. 0: 无复位 1: 复位TM14定时器 7:5 保留 必须保持复位值 4 TM6RST TM6定时器复位 由软件置1或清0. 0: 无复位 1: 复位TM6定时器 3:2 保留 必须保持复位值 1 TM3RST TM3定时器复位 由软件置1或清0. 0: 无复位 1: 复位TM3定时器 0 TM2RST TM2定时器复位 由软件置1或清0. 0: 无复位 1: 复位TM2定时器 GD32F1x0 用户手册 4.3.6 31 30 15 14 AHB 时钟控制寄存器 (RCC_AHBCCR) 地址偏移: 0x14 复位值: 0x0000 0014 29 28 27 26 25 保留 13 12 11 10 9 保留. 24 23 22 21 20 19 18 17 16 TSIEN 保留 PFEN 保留 PDEN PCEN PBEN PAEN 保留 rw rw rw rw rw rw 8 7 6 5 4 3 2 1 0 CRC EN 保留 FMC EN 保留 SRAM EN 保留 DMA1 EN rw rw rw rw 位 位域 说明 77 31:25 24 保留 TSIEN 23 保留 22 PFEN 21 保留 20 PDEN 19 PCEN 18 PBEN 17 PAEN 16:7 保留 6 CRCEN 5 保留 4 FMCEN 必须保持复位值 TSI时钟使能 由软件置1或清0. 0: TSI时钟关闭 1: TSI时钟开启 必须保持复位值 GPIOF时钟使能 由软件置1或清0. 0: GPIOF时钟关闭 1: GPIOF时钟开启 必须保持复位值 GPIOD时钟使能 由软件置1或清0. 0: GPIOD时钟关闭 1: GPIOD时钟开启 GPIOC时钟使能 由软件置1或清0. 0: GPIOC时钟关闭 1: GPIOC时钟开启 GPIOB时钟使能 由软件置1或清0. 0: GPIOB时钟关闭 1: GPIOB时钟开启 GPIOA时钟使能 由软件置1或清0. 0: GPIOA时钟关闭 1: GPIOA时钟开启 必须保持复位值 CRC 时钟使能 由软件置1或清0. 0: CRC时钟关闭 1: CRC时钟开启 必须保持复位值 FLITF时钟使能 GD32F1x0 用户手册 78 GD32F1x0 用户手册 由软件置1或清0来开启/关闭在睡眠模式下的FLITF时钟 0: 关闭睡眠模式下的FLITF时钟 1: 开启睡眠模式下的FLITF时钟 3 保留 必须保持复位值 2 SRAMEN SRAM接口时钟使能 由软件置1或清0 to来开启/关闭在睡眠模式下的SRAM时钟 0: 关闭睡眠模式下的SRAM接口时钟 1: 开启睡眠模式下的SRAM接口时钟 1 保留 必须保持复位值 0 DMA1EN DMA1时钟使能 由软件置1或清0 0: 关闭DMA1时钟 1: 开启DMA1时钟 4.3.7 APB2 时钟控制寄存器 (RCC_APB2CCR) 地址偏移: 0x18 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 保留 15 14 13 12 11 10 9 87 6 保留 USART1 EN 保留 SPI1 EN TM1 EN 保留 ADC1 EN rw rw rw rw 5 4 保留 19 18 17 16 TM17 TM16 TM15 EN EN EN rw rw rw 3 2 1 0 CFG EN rw 位 31:19 18 位域 保留 TM17EN 17 TM16EN 说明 必须保持复位值 TM17定时器时钟使能 由软件置1或清0. 0: 关闭TM17定时器时钟 1: 开启TM17定时器时钟 TM16定时器时钟使能 由软件置1或清0. 0: 关闭TM16定时器时钟 79 1: 开启TM16定时器时钟 16 TM15EN TM15定时器时钟使能 由软件置1或清0. 0: 关闭TM15定时器时钟 1: 开启TM15定时器时钟 14 USART1EN USART1时钟使能 由软件置1或清0. 0:关闭USART1时钟 1: 开启USART1时钟 13 保留 必须保持复位值 12 SPI1EN SPI1时钟使能 由软件置1或清0. 0: 关闭SPI1时钟 1: 开启SPI1时钟 11 TM1EN TM1定时器时钟使能 由软件置1或清0. 0: 关闭TM1定时器时钟 1: 开启TM1定时器时钟 10 保留 必须保持复位值 9 ADC1EN ADC 1接口时钟使能 由软件置1或清0. 0: 关闭ADC 1接口时钟 1: 开启ADC 1接口时钟 8:1 保留 必须保持复位值 0 CFGEN 系统配置时钟使能 由软件置1或清0. 0: 关闭系统配置模块时钟 1: 开启系统配置模块时钟 GD32F1x0 用户手册 4.3.8 APB1 时钟控制寄存器 (RCC_APB1CCR) 地址偏移: 0x1C 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 80 保留 15 SPI3 EN rw CEC DAC PWR EN EN EN rw rw rw 14 13 12 SPI2 EN 保留 rw 11 WWDG EN rw 保留 10 9 保留 8 TIM14 EN rw USB EN rw 7 I2C2 EN rw 6 保留 GD32F1x0 用户手册 I2C1 EN rw 5 4 TIM6 EN rw 保留 3 2 保留 USART 2EN rw 1 TM3 EN rw 保留 0 TM2 EN rw 位 位域 31 保留 30 CECEN 29 DACEN 28 PWREN 27:24 23 保留 USBEN 22 I2C2EN 21 I2C1EN 说明 必须保持复位值 HDMI CEC接口时钟使能 由软件置1或清0. 0: 关闭HDMI CEC接口时钟 1: 开启HDMI CEC接口时钟 DAC接口时钟使能 由软件置1或清0. 0: 关闭DAC接口时钟 1: 开启DAC接口时钟 电源接口时钟使能 由软件置1或清0. 0: 关闭电源接口时钟 1: 开启电源接口时钟 必须保持复位值 USB时钟使能 由软件置1或清0. 0: 关闭USB时钟 1: 开启USB时钟 I2C2时钟使能 由软件置1或清0. 0: 关闭I2C2时钟 1: 开启I2C2时钟 I2C1时钟使能 由软件置1或清0. 0: 关闭I2C1时钟 1: 开启I2C1时钟 81 20:18 17 16 15 14 13:12 11 10:9 8 7:5 4 3:2 1 保留 USART2EN 保留 SPI3EN SPI2EN 保留 WWDGEN 保留 TM14EN 保留 TM6EN 保留 TM3EN 必须保持复位值 USART2时钟使能 由软件置1或清0. 0:关闭USART2时钟 1:开启USART2时钟 必须保持复位值 SPI3时钟使能 由软件置1或清0. 0: 关闭SPI3时钟 1: 开启SPI3时钟 SPI2时钟使能 由软件置1或清0. 0: 关闭SPI2时钟 1: 开启SPI2时钟 必须保持复位值 窗口看门狗时钟使能 由软件置1或清0. 0: 关闭窗口看门狗时钟 1: 开启窗口看门狗时钟 必须保持复位值 TM14定时器时钟使能 由软件置1或清0. 0: 关闭TM14定时器时钟 1: 开启TM14定时器时钟 必须保持复位值 TM6定时器时钟使能 由软件置1或清0. 0: 关闭TM6定时器时钟 1: 开启TM6定时器时钟 必须保持复位值 TM3定时器时钟使能 由软件置1或清0. 0: 关闭TM3定时器时钟 1: 开启TM3定时器时钟 GD32F1x0 用户手册 82 0 TM2EN TM2定时器时钟使能 由软件置1或清0. 0: 关闭TM2定时器时钟 1: 开启TM2定时器时钟 GD32F1x0 用户手册 4.3.9 注意: 备份域控制寄存器 (RCC_BDCR) 地址偏移: 0x20 复位值: 0x0000 0018, 由备份域复位电路复位 备份域控制寄存器(BDCR)的LSEEN, LSEBPS, RTCSEL和RTCEN位仅在备份域复位后才清0。 只有在电源控制寄存器(PWR_CTLR)中的DBP位置1后才能对这些位进行改动。 31 30 15 14 RTCEN rw 29 28 27 13 12 11 保留 26 25 24 23 22 21 保留 10 9 8 7 6 5 RTCSEL[1:0] 保留 rw rw 20 19 4 3 LSEDRI rw rw 18 17 2 1 LSEBPS LSESTB rw r 16 BKPRST rw 0 LSEEN rw 位 31:15 位域 保留 说明 必须保持复位值 16 BKPRST 备份域复位 由软件置1或清0. 0: 无复位 1: 复位备份域 15 RTCEN RTC时钟使能 由软件置1或清0. 0: 关闭RTC时钟 1: 开启RTC时钟 14:10 保留 必须保持复位值 9:8 RTCSEL[1:0] RTC时钟入口选择 软件置位或清除来控制PLL时钟源 00: 没有时钟 01: 选择LSE时钟作为RTC时钟源 10: 选择LSI时钟作为RTC时钟源 11: 选择HSE时钟32分频作为RTC时钟源 7:5 保留 必须保持复位值 83 4:3 LSEDRI LSE驱动能力 GD32F1x0 用户手册 软件置位或清除。当复位备份域时,会重装载缺省值 00: 弱驱动能力 01: 中低驱动能力 10: 中高驱动能力 11: 强驱动能力 (复位后的缺省值) 注: LSEDRI在旁路模式下无效 2 LSEBPS LSE旁路模式使能 软件置1和清0 0: 禁止LSE旁路模式 1: 使能LSE旁路模式 1 LSESTB 外部低速振荡器稳定状态位 硬件置1来指示LSE输出时钟是否稳定待用。 0: LSE未稳定 1: LSE已稳定 0 LSEEN LSE使能 软件置1和清0. 0: 关闭LSE 1: 开启LSE 4.3.10 总体控制/状态寄存器 (RCC_GCSR) 地址偏移: 0x24 复位值: 0x0C00 0000, 除复位标志外由系统复位清除,复位标志只能由电源复位清除。 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 LP RSTF WWDG RSTF IWDG RSTF SW RSTF PWR RSTF EP RSTF OBL RSTF RSTFC V12 RSTF 保留 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 保留 LSISTB LSIEN r rw 位 位域 说明 31 LPRSTF 低功耗复位标志位 停止/待机复位发生时由硬件置1 由软件通过写RSTFC位来清除该位 0: 无低功耗管理复位发生 84 1: 发生低功耗管理复位 30 WWDGRSTF 窗口看门狗定时器复位标志位 GD32F1x0 用户手册 窗口看门狗定时器复位发生时由硬件置1 由软件通过写RSTFC位来清除该位 0: 无窗口看门狗复位发生 1: 发生窗口看门狗复位 29 IWDGRSTF 独立看门狗定时器复位标志位 独立看门狗复位发生时由硬件置1 由软件通过写RSTFC位来清除该位 0: 无独立看门狗定时器复位发生 1: 发生独立看门狗定时器复位 28 SWRSTF 软件复位标志位 软件复位发生时由硬件置1 由软件通过写RSTFC位来清除该位 0: 无软件复位发生 1: 发生软件复位 27 PWRRSTF 电源复位标志位 电源复位发生时由硬件置1 由软件通过写RSTFC位来清除该位 0: 无电源复位发生 1: 发生电源复位 26 EPRSTF 外部引脚复位标志位 当有外部引脚复位发生时由硬件置1 由软件通过写RSTFC位来清除该位 0: 无外部引脚复位发生 1: 发生外部引脚复位 25 OBLRSTF 可选字节装载器复位标志位 可选字节装载器装载字节时由硬件置1 由软件通过写RSTFC位来清除该位 0: 无选项字节装载器复位发生 1: 发生选项字节装载器复位 24 RSTFC 清除复位标志位 由软件置1来清除所有复位标志位 0: 无作用 1: 清除复位标志位 23 V12RSTF V12域电源复位标志位 85 22:2 保留 1 LSISTB 0 LSIEN 当有V12域电源复位发生时由硬件置1 由软件通过写RSTFC位来清除该位 0: 无V12域电源复位发生 1: 发生V12域电源复位 必须保持复位值. LSI时钟稳定状态位 该位由硬件置1指示LSI输出时钟是否稳定待用 0: LSI时钟未稳定 1: LSI时钟已稳定 LSI时钟使能 软件置1和清0. 0: 关闭LSI时钟 1: 开启LSI时钟 GD32F1x0 用户手册 4.3.11 31 30 15 14 AHB 复位控制寄存器 (RCC_AHBRCR) 地址偏移: 0x28 复位值: 0x0000 0000 29 28 27 26 25 保留 13 12 11 10 9 24 23 TSTRST 保留 rw 8 7 保留. 22 21 PFRST 保留 rw 6 5 20 19 18 17 PDRST PCRST PBRST PARST rw rw rw rw 4 3 2 1 16 保留 0 位 31:25 位域 保留 说明 必须保持复位值 24 TSTRST TSI单元复位 由软件置1或清0. 0: 无作用 1: 复位TSI单元 23 保留 必须保持复位值 22 PFRST GPIOF复位 由软件置1或清0. 0: 无作用 1: 复位GPIOF口 86 21 保留 20 PDRST 19 PCRST 18 PBRST 17 PARST 16:0 保留 必须保持复位值 GPIOD复位 由软件置1或清0. 0: 无作用 1: 复位GPIOD口 GPIOC复位 由软件置1或清0. 0: 无作用 1: 复位GPIOC口 GPIOB复位 由软件置1或清0. 0: 无作用 1: 复位GPIOB口 GPIOA复位 由软件置1或清0. 0: 无作用 1: 复位GPIOA口 必须保持复位值 GD32F1x0 用户手册 4.3.12 总体时钟配置寄存器 2 (RCC_GCFGR2) 地址偏移: 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 保留 HSEPREDV rw rw rw rw 位 位域 31:4 保留 说明 必须保持复位值 3:0 HSEPREDV HSE时钟作为PLL输入源分频因子 由软件置1或清0。这些位仅能在PLL关闭时改写。 注:HSEPREDV的位0 与RCC_GCFGR的位17的功能相同 ,修改RCC_GCFGR的位17 同时改变这里的位0,HSE时钟分频因子为 (HSEPREDV + 1) 87 0000: HSE 作为PLL的输入,不分频 0001: HSE 作为PLL的输入2分频 0010: HSE 作为PLL的输入3分频 0011: HSE 作为PLL的输入4分频 0100: HSE 作为PLL的输入5分频 0101: HSE 作为PLL的输入6分频 0110: HSE 作为PLL的输入7分频 0111: HSE 作为PLL的输入8分频 1000: HSE 作为PLL的输入9分频 1001: HSE 作为PLL的输入10分频 1010: HSE 作为PLL的输入11分频 1011: HSE 作为PLL的输入12分频 1100: HSE 作为PLL的输入13分频 1101: HSE 作为PLL的输入14分频 1110: HSE 作为PLL的输入15分频 1111: HSE 作为PLL的输入16分频 GD32F1x0 用户手册 4.3.13 总体时钟配置寄存器 3 (RCC_GCFGR3) 地址偏移: 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 ADC SEL 保留 CEC SEL rw rw 4 3 保留 2 1 0 USART1 SEL rw rw 位 位域 31:9 保留 说明 必须保持复位值 8 ADCSEL ADC时钟源选择 由软件置1或清0. 0: ADC时钟源选择HSI14时钟 1: ADC时钟源选择APB2时钟2/4/6/8分频. 6 CECSEL CEC时钟源选择 由软件置1或清0. 0: CEC时钟选择HSI时钟244分频 1: CEC时钟选择LSE时钟 1:0 USART1SEL USART1时钟源选择 88 由软件置1或清0. 00: USART1时钟选择APB2时钟 01: USART1时钟选择系统时钟 10: USART1时钟选择LSE时钟 11: USART1时钟选择HSI时钟 GD32F1x0 用户手册 4.3.14 总体时钟控制寄存器 2 (RCC_GCCR2) 地址偏移: 0x34 复位值: 0x0000 XX80 X未定义 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 15 14 13 12 11 10 9 8 HSI14CALIB r r r r r r r r 位 位域 说明 31:16 保留 必须保持复位值 7 6 5 4 3 2 1 0 HSI14ADJ 保留 HSI14 HSI14 STB EN rw rw rw rw rw r rw 15:8 HSI14CALIB HSI14时钟校准 启动时这些位会被自动初始化为出厂校准参数 7:3 HSI14ADJ HSI14 时钟调整 2 保留 这些位由软件设定,最终调整值为(HSI14ADJ)位的值加上HSI14CALIB[7:0]位的值。 最终调整值应该把HSI14 调整到14MHz ±1%。 必须保持复位值. 1 HSI14STB HSI14时钟稳定标志位 由硬件置1来指示内部HSI14 振荡器已经稳定可用。 0: HSI14振荡器未稳定 1: HSI14振荡器已稳定 0 HSI14EN HSI14时钟使能 软件置1和清0. 0: 关闭HSI14时钟 1: 开启HSI14时钟 4.3.15 附加时钟控制寄存器 (RCC_ACCR) 地址偏移: 0xF8 复位值: 0x0000 0000 . 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 89 GD32F1x0 用户手册 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 保留 位 位域 31:1 保留 0 I2C3EN 说明 必须保持复位值 I2C3时钟单元使能 由软件置1或清0 0: 关闭I2C3时钟单元 1: 开启I2C3时钟单元 1 0 I2C3EN rw 4.3.16 附加复位控制寄存器 (RCC_ARCR) 地址偏移: 0xFC 复位值: 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 保留 位 位域 31:1 保留 0 I2C3RST 说明 必须保持复位值 I2C3单元复位 由软件置1或清0 0: 无作用 1: 复位I2C3单元 1 0 I2C3RST rw 4.3.17 电源解锁寄存器 (RCC_VC_KEY) 地址偏移: 0x100 复位值: 0x0000 0000. 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 KEY[31:16] w w w w w w w w w w w w w w w w 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 90 GD32F1x0 用户手册 KEY[15:0] w w w w w w w w w w w w w w w w 位 位域 说明 31:0 KEY RCC_PDR_VC和RCC_DEEPSLEEP_VC 解锁 寄存器 这些位只能被软件写,读的话全是0。只有在向RCC_VC_KEY 寄存器写0x1A2B3C4D 后,RCC_PDR_VC 和RCC_DEEPSLEEP_VC 寄存器才能被写。 4.3.18 RCC 深度睡眠模式电压寄存器 (RCC_DEEPSLEEP_VC) 地址偏移: 0x134 复位值: 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 保留 位 位域 31:3 保留 说明 必须保持复位值 2:0 DEEPSLEEP_VC 深度睡眠模式电压寄存器 这些位由软件置位和清除 000 : 在深度睡眠模式下内核电压为1.2V 001 : 在深度睡眠模式下内核电压为1.1V 010 : 在深度睡眠模式下内核电压为1.0V 011 : 在深度睡眠模式下内核电压为0.9V 100~111 : 保留 2 1 0 DEEPSLEEP_VC rw rw rw 4.3.19 RCC 掉电电压选择寄存器 (RCC_PDR_S) 地址偏移: 0x138 复位值: 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 保留 位 位域 31:1 保留 说明 必须保持复位值 1 0 PDR_S rw 91 0 PDR_S 掉电电压选择寄存器 由软件置1或清0 0: 掉电电压为2.6V 1: 掉电电压为1.8V GD32F1x0 用户手册 92 5 5.1 5.1.1 5.1.2 5.1.3 GD32F1x0 用户手册 通用和备用功能 I/Os (GPIO 和 AFIOs) GPIO 简介 最多可支持 55 个通用 I/O 管脚, (GPIO), 称为 PA0 ~ PA15 和 PB0 ~ PB15, PC0 ~ PC15, PD2, PF0/PF1, PF4 ~ PF7 设备用其来实现逻辑输入/输出功能。每个 GPIO 端口有相关的控制和配 置寄存器以满足特定应用的需求。 GPIO 端口和和其他的备用功能(AFs)复用同一管脚,在特定的封装下获得最大的的灵活性。 GPIO 管脚通过配置相关的寄存器可以用作备用功能管脚,不管是备用功能输入还是备用功能 输出。 每一个 GPIO 可以软件配置为输出(推挽或开漏), 输入,外设备用功能或模拟模式。每一个 GPIO 管脚可以配置为上拉,下拉或无上拉/下拉。除了模拟模式外,所有的管脚 GPIOs 都具备大电 流驱动能力。 主要特点  输入/输出方向控制  施密特触发器输入功能使能控制  每个管脚弱上拉/下拉功能  输出推挽/开漏使能控制  输出置位/复位控制  输出驱动速度选择  模拟输入/输出配置  备用功能输入/输出配置  端口配置锁定 功能描述 每一个通用 I/O端口通过GPIO32位 配置寄存器(GPIOx_CTLR)可以配置为GPIO输入,GPIO 输出, AF功能或模拟模式。AFIO输入输出通过AFIO输出使能来选择。 当端口是输出(GPIO 输出或AFIO输出)的时候, 它可以通过GPIO输出模式寄存器(GPIOx_OMODE)被配置为推挽 或开漏模式。并且这个端口的最大速度可以通过GPIO输出速度寄存器 (GPIOx_OSPD)配置。. 每个端口可以通过GPIO上下拉寄存器 (GPIOx_PUPD)配置为悬空(无上拉或下拉) , 上拉或下 拉功能. 93 PAD TYPE X GPIO 输入 悬空 上拉 下拉 推挽 悬空 上拉 GPIO 输出 开漏 下拉 悬空 上拉 下拉 X AFIO 输入 悬空 上拉 下拉 推挽 悬空 上拉 AFIO 输出 开漏 下拉 悬空 上拉 下拉 ANALOG X X GD32F1x0 用户手册 CTLRn 00 OMODEn X PUPDn 00 01 10 01 0 00 01 10 1 00 01 10 10 X 00 01 10 10 0 00 01 10 1 00 01 10 11 X XX 下图是I/O管脚的基本结构 图 8. 标准 I/O端口位的基本结构 Write Bit Set/Clear Registers Read/Write Output Data Registe r Alternate Function Output Output Control Output driver Alternate Function Input Read Analog Input Input Data Register Input driver Schmitt trigger Vdd Vdd Vdd Vss I/O pin Vss Vss 94 GPIO 管脚配置 GD32F1x0 用户手册 在复位期间或复位之后,备用功能并未激活。GPIO 端口都被配置成输入悬空模式,这种输入 禁用上拉(PU)/下拉(PD)电阻。但是复位后,串行线调试位于输入 PU/PD 模式: PA14: SWCLK在输入下拉模式 PA13: SWDIO在输入上拉模式 GPIO管脚可以配置为输入或输出。并且所有的GPIO管脚都有一个内部的弱上拉和弱下拉可以 选择。当GPIO管脚可配置为输入管脚时, 外部管脚上的数据在每个AHB2时钟周期时 都会装 载到数据输入寄存器 (GPIO_DIR). 当GPIO管脚被配置为输出管脚, 用户可以配置端口的速度。并选择输出驱动的模式: 推挽或开 漏模式. 输出寄存器的值(GPIO_DOR) 将会在 I/O管脚上输出。 当需要对GPIO_DOR进行按位写操作时不需关中断, 用户可以修改一位或几位通过写‗1‘到位 操作寄存器 (GPIO_BOR, 或专用于清0的GPIO_BCR) ,此过程仅需要一个最小的AHB2写访 问。其他位不受影响。 备用功能 (AF) 当端口被配置为AFIO (CTLRn到―10‖位,CTLRn在GPIOx_CTLR寄存器里), 这个端口被用作 外设备用功能。每个端口可以通过GPIO 备用功能选择寄存器(GPIOx_AFSL, GPIOx_AFSH), 有16个备用功能可以配置。每个端口的详细的备用功能分配在设备用户手册里详细介绍。 附加功能 一些管脚有附加的功能, 他们优先于GPIO寄存器中配置。 当用作ADC或DAC复用功能的时候, 管脚必须被配置成模拟模式。 当用作RTC, WKUPx和振荡器附加功能时, 通过相关的RTC, PWR和RCC寄存器,端口类型被自动的设置。当这些端口被用作附加功能时,正常的GPIO功 能被禁用。 输入配置 当GPIO管脚被用作输入:  输入施密特触发器将激活  可以选择弱上拉和弱下拉电阻  I/O 管脚上的数据在每个AHB2周期都会被采样并输入到数据输入寄存器  输出缓冲器禁用 下图显示了I/O端口位的配置 95 图 9. 浮空/上拉/下拉输入配置 Read Input Data Register Schmitt trigger Input driver GD32F1x0 用户手册 Vdd Vdd I/O pin Vss Vss 输出配置 当GPIO管脚被用作输出:  输入施密特触发器将激活  可以选择弱上拉和弱下拉电阻  输出缓冲器被使能: – 开漏模式: 输出寄存器的 ―0‖将使N-MOS管道导通但是输出寄存器―1‖将使得管脚处 于高阻状态。 – 推挽模式: 输出寄存器的 ―0‖将使N-MOS管道导通但是输出寄存器―1‖将使P-MOS管 道导通  在推挽模式下,对数据输出寄存器的读访问将返回上次写入的值  在开漏模式下,对数据输入寄存器的访问将返回I/O的状态 下图是 I/O 端口位的输出配置 图 10. 输出配置 Write Bit Set/Clear Registers Read/Write Output Data Registe r Output Control Output driver Vdd Vdd Vdd Vss I/O pin Read Input Data Regist er Schmitt trigger Input driver Vss Vss 96 模拟配置 当GPIO管脚被用作模拟配置:  弱上拉和下拉电阻电阻禁用  输出缓冲器禁用.  输入施密特触发器未激活  读数据输入寄存器将获得―0‖. 下图是模拟高阻配置 图 11. 模拟高阻配置 Read Analog Input Input Data Register off Schmitt trigger Input driver GD32F1x0 用户手册 Vdd Vss Vdd / Vdd_FT I/O pin Vss 备用功能(AF) 配置 为了适合不同的器件封装,GPIO 支持由软件将一些备用功能应用到部分其他管脚上. 当被配置为备用功能:  输出缓冲器将开启为开漏或推挽配置  输出缓冲器由外设驱动  输入施密特触发器将激活  可以选择弱上拉和下拉电阻  I/O管脚上的数据在每个AHB2周期都会被采样并输入数据输入寄存器  在开漏模式下,对数据输入寄存器的访问将返回I/O的状态  在推挽模式下,对数据输出寄存器的读访问将返回上次写入的值 下图是I/O端口位的备用功能配置 97 图 12. 配选功能配置 GD32F1x0 用户手册 Vdd Alternate Function Output Output Control Output driver Vss Alternate Function Input Read Input Data Regist er Input driver Schmitt trigger Vdd Vdd I/O pin Vss Vss GPIO 锁定功能 锁定机制可以保护 IO的配置 这 个 被 保 护 寄 存 器 是 GPIOx_CTLR, GPIOx_OMODE, GPIOx_OSPD, GPIOx_PUPD, GPIOx_AFSL和GPIOx_AFSH. 通过32位锁定寄存器(GPIOx_LOCKR)可以锁定I/O配置. 当 LOCK 序列已经被应用在相应端口位上, 不能改变锁定寄存器的值直到下一次复位。它被推荐 用在一个功率模块驱动的配置时。 5.2 GPIO 寄存器 5.2.1 GPIO 端口控制寄存器 (GPIOx_CTLR) (x=A..D,F) 地址偏移: 0x00 复位值:端口 A 0x2800 0000; 其他端口 0x0000 0000 31 30 CTLR15[1:0] rw rw 15 14 CTLR7[1:0] rw rw 29 28 CTLR14[1:0] rw rw 13 12 CTLR6[1:0] rw rw 27 26 CTLR13[1:0] rw rw 11 10 CTLR5[1:0] rw rw 25 24 CTLR12[1:0] rw rw 9 8 CTLR4[1:0] rw rw 23 22 CTLR11[1:0] rw rw 7 6 CTLR3[1:0] rw rw 21 20 CTLR10[1:0] rw rw 5 4 CTLR2[1:0] rw rw 19 18 CTLR9[1:0] rw rw 3 2 CTLR1[1:0] rw rw 17 16 CTLR8[1:0] rw rw 1 0 CTLR0[1:0] rw rw 位/位域 31:30 名称 CTLR15[1:0] 29:28 CTLR14[1:0] 描述 Pin 15配置位 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 14配置位 98 27:26 CTLR13[1:0] 25:24 CTLR12[1:0] 23:22 CTLR11[1:0] 21:20 CTLR10[1:0] 19:18 CTLR9[1:0] 17:16 CTLR8[1:0] 15:14 CTLR7[1:0] 13:12 CTLR6[1:0] 11:10 CTLR5[1:0] 9:8 CTLR4[1:0] 7:6 CTLR3[1:0] 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 13配置位 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 12配置位 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 11配置位 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 10配置位 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 9配置位 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 8配置位 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 7配置位 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 6配置位 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 5配置位 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 4配置位 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 3配置位 GD32F1x0 用户手册 99 5:4 CTLR2[1:0] 3:2 CTLR1[1:0] 1:0 CTLR0[1:0] 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 2配置位 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 1配置位 这些位由软件置位和清除 参照 CTLR0[1:0]的描述 Pin 0配置位 这些位由软件置位和清除 00: 输入模式 (复位状态) 01: GPIO输出模式 10: 备用功能模式 11: 模拟模式 GD32F1x0 用户手册 5.2.2 GPIO 端口输出模式寄存器 (GPIOx_OMODE) (x=A..D,F) 地址偏移: 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 OM15 OM14 OM13 OM12 OM11 OM10 OM9 OM8 OM7 OM6 OM5 OM4 OM3 OM2 rw rw rw rw rw rw rw rw rw rw rw rw rw rw 1 OM1 rw 0 OM0 rw 位/位域 31:16 15 名称 保留 OM15 14 OM14 描述 Pin 15 输出模式位 这些位由软件置位和清除 参照 OM0 的描述 Pin 14 输出模式位 这些位由软件置位和清除 参照 OM0 的描述 13 OM13 12 OM12 Pin 13 输出模式位 这些位由软件置位和清除 参照 OM0 的描述 Pin 12 输出模式位 100 11 OM11 10 OM10 9 OM9 8 OM8 7 OM7 6 OM6 5 OM5 4 OM4 3 OM3 2 OM2 1 OM1 0 OM0 这些位由软件置位和清除 参照 OM0 的描述 Pin 11 输出模式位 这些位由软件置位和清除 参照 OM0 的描述 Pin 10 输出模式位 这些位由软件置位和清除 参照 OM0 的描述 Pin 9 输出模式位 这些位由软件置位和清除 参照 OM0 的描述 Pin 8 输出模式位 这些位由软件置位和清除 参照 OM0 的描述 Pin 7 输出模式位 这些位由软件置位和清除 参照 OM0 的描述 Pin 6 输出模式位 这些位由软件置位和清除 参照 OM0 的描述 Pin 5 输出模式位 这些位由软件置位和清除 参照 OM0 的描述 Pin 4 输出模式位 这些位由软件置位和清除 参照 OM0 的描述 Pin 3 输出模式位 这些位由软件置位和清除 参照 OM0 的描述 Pin 2 输出模式位 这些位由软件置位和清除 参照 OM0 的描述 Pin 1 输出模式位 这些位由软件置位和清除 参照 OM0 的描述 Pin 0 输出模式位 这些位由软件置位和清除 GD32F1x0 用户手册 101 0 : 推挽输出模式 (复位) 1: 开漏输出模式 GD32F1x0 用户手册 5.2.3 GPIO 端口输出速度寄存器 (GPIOx_OSPD) (x=A..D,F) 地址偏移: 0x08 复位值:端口 A 0x0C00 0000; 其他端口 0x0000 0000. 31 30 OSPD15[1:0] rw rw 15 14 OSPD7[1:0] rw rw 29 28 OSPD14[1:0] rw rw 13 12 OSPD6[1:0] rw rw 27 26 OSPD13[1:0] rw rw 11 10 OSPD5[1:0] rw rw 25 24 OSPD12[1:0] rw rw 9 8 OSPD4[1:0] rw rw 23 22 OSPD11[1:0] rw rw 7 6 OSPD3[1:0] rw rw 21 20 OSPD10[1:0] rw rw 5 4 OSPD2[1:0] rw rw 19 18 OSPD9[1:0] rw rw 3 2 OSPD1[1:0] rw rw 17 16 OSPD8[1:0] rw rw 1 0 OSPD0[1:0] rw rw 位/位域 31:30 名称 OSPD15[1:0] 描述 Pin 15 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 29:28 OSPD14[1:0] Pin 14 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 27:26 OSPD13[1:0] Pin 13 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 25:24 OSPD12[1:0] Pin 12 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 23:22 OSPD11[1:0] Pin 11 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 21:20 OSPD10[1:0] Pin 10 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 19:18 OSPD9[1:0] Pin 9 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 102 17:16 OSPD8[1:0] 15:14 OSPD7[1:0] 13:12 OSPD6[1:0] 11:10 OSPD5[1:0] 9:8 OSPD4[1:0] 7:6 OSPD3[1:0] 5:4 OSPD2[1:0] 3:2 OSPD1[1:0] 1:0 OSPD0[1:0] Pin 8 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 Pin 7 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 Pin 6 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 Pin 5 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 Pin 4 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 Pin 3 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 Pin 2 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 Pin 1 输出最大速度位 这些位由软件置位和清除 参照 OSPD0[1:0]的描述 Pin 0 输出最大速度位 这些位由软件置位和清除 x0: 输出最大速度2M (复位状态) 01: 输出最大速度10M 11: 输出最大速度50M GD32F1x0 用户手册 5.2.4 GPIO 端口上拉/下拉寄存器 (GPIOx_PUPD)(x=A..D,F) 地址偏移: 0x0C 复位值: 端口 A0x2400 0000; 其他端口 0x0000 0000. 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 103 PUPD15[1:0] rw rw 15 14 PUPD7[1:0] rw rw PUPD14[1:0] rw rw 13 12 PUPD6[1:0] rw rw PUPD13[1:0] rw rw 11 10 PUPD5[1:0] rw rw PUPD12[1:0] rw rw 9 8 PUPD4[1:0] rw rw PUPD11[1:0] rw rw 7 6 PUPD3[1:0] rw rw GD32F1x0 用户手册 PUPD10[1:0] rw rw 5 4 PUPD2[1:0] rw rw PUPD9[1:0] rw rw 3 2 PUPD1[1:0] rw rw PUPD8[1:0] rw rw 1 0 PUPD0[1:0] rw rw 位/位域 31:30 名称 PUPD15[1:0] 29:28 PUPD14[1:0] 27:26 PUPD13[1:0] 25:24 PUPD12[1:0] 23:22 PUPD11[1:0] 21:20 PUPD10[1:0] 19:18 PUPD9[1:0] 17:16 PUPD8[1:0] 15:14 PUPD7[1:0] 描述 Pin 15 上拉或下拉位 这些位由软件置位和清除 参照 PUPD0[1:0]的描述 Pin 14 上拉或下拉位 这些位由软件置位和清除 参照 PUPD0[1:0]的描述 Pin 13 上拉或下拉位 这些位由软件置位和清除 参照 PUPD0[1:0]的描述 Pin 12 上拉或下拉位 这些位由软件置位和清除 参照 PUPD0[1:0]的描述 Pin 11 上拉或下拉位 这些位由软件置位和清除 参照 PUPD0[1:0]的描述 Pin 10 上拉或下拉位 这些位由软件置位和清除 参照 PUPD0[1:0]的描述 Pin 9 上拉或下拉位 这些位由软件置位和清除 参照 PUPD0[1:0]的描述 Pin 8 上拉或下拉位 这些位由软件置位和清除 参照 PUPD0[1:0]的描述 Pin 7 上拉或下拉位 这些位由软件置位和清除 参照 PUPD0[1:0]的描述 104 13:12 PUPD6[1:0] 11:10 PUPD5[1:0] 9:8 PUPD4[1:0] 7:6 PUPD3[1:0] 5:4 PUPD2[1:0] 3:2 PUPD1[1:0] 1:0 PUPD0[1:0] Pin 6 上拉或下拉位 这些位由软件置位和清除 GD32F1x0 用户手册 参照 PUPD0[1:0]的描述 Pin 5 上拉或下拉位 这些位由软件置位和清除 参照 PUPD0[1:0]的描述 Pin 4 上拉或下拉位 这些位由软件置位和清除 参照 PUPD0[1:0]的描述 Pin 3 上拉或下拉位 这些位由软件置位和清除 参照 PUPD0[1:0]的描述 Pin 2 上拉或下拉位 这些位由软件置位和清除 参照 PUPD0[1:0]的描述 Pin 1 上拉或下拉位 这些位由软件置位和清除 参照 PUPD0[1:0]的描述 Pin 0 上拉或下拉位 这些位由软件置位和清除 00: 悬空模式, 无上拉和下拉(复位状态) 01:上拉模式的端口 10: 下拉模式的端口 11: 保留 5.2.5 GPIO 端口数据输入寄存器 (GPIOx_DIR) (x=A..D,F) 地址偏移: 0x10 复位值: 0x0000 XXXX 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 15 DIR15 r 14 DIR14 r 13 DIR13 r 12 DIR12 r 11 DIR11 r 10 DIR10 r 9 DIR9 r 8 DIR8 r 7 DIR7 r 6 DIR6 r 5 DIR5 r 4 DIR4 r 3 DIR3 r 2 DIR2 r 1 DIR1 r 0 DIR0 r 位/位域 名称 的描述s 105 31:16 15:0 保留 DIR[15:0] Port 输入数据 这些位由硬件置位和清除 0:输入信号低电平 1:输入信号高电平 GD32F1x0 用户手册 5.2.6 GPIO 端口数据输出寄存器 (GPIOx_DOR) (x=A..D,F) 地址偏移: 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 DOR15 DOR14 DOR13 DOR12 DOR11 DOR10 DOR9 DOR8 DOR7 DOR6 DOR5 DOR4 DOR3 DOR2 DOR1 DOR0 rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位/位域 31:16 15:0 名称 保留 DOR[15:0] 描述 Port数据输出 这些位由软件置位和清除 0: Pin输出低电平 1: Pin输出高电平 5.2.7 GPIO 端口位操作寄存器 (GPIOx_BOR) (x=A..D,F) 地址偏移: 0x18 复位值: 0x0000 0000 31 30 CR15 CR14 w w 15 14 BOR15 BOR14 w w 29 CR13 w 13 BOR13 w 28 CR12 w 12 BOR12 w 27 26 25 24 CR11 CR10 CR9 CR8 w w w w 11 10 9 8 BOR11 BOR10 BOR9 BOR8 w w w w 23 CR7 w 7 BOR7 w 22 CR6 w 6 BOR6 w 21 CR5 w 5 BOR5 w 20 CR4 w 4 BOR4 w 19 CR3 w 3 BOR3 w 18 CR2 w 2 BOR2 w 17 CR1 w 1 BOR1 w 16 CR0 w 0 BOR0 w 位/位域 31:16 名称 CRx 15:0 BORx 描述 Port 清除位 这些位由软件置位和清除 0: 相应的DORx位无变化 1: 清除相应的DORx位 Port 置位 106 这些位由软件置位和清除 0: 相应的DORx位无变化 1: 置位相应的DORx位 GD32F1x0 用户手册 5.2.8 GPIO 端口配置锁定寄存器 (GPIOx_LOCKR) (x=A,B) 地址偏移: 0x1C 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 LKK rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 LK15 LK14 LK13 LK12 LK11 LK10 LK9 LK8 LK7 LK6 LK5 LK4 LK3 LK2 LK1 LK0 rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位/位域 31:17 16 名称 保留 LKK 15:0 LKx 的描述s 锁定键 该位仅仅可以设置Lock Key 写序列置位.总可以读. 0: 端口配置锁键没有激活 1: 端口配置锁键激活 GPIO_LOCKR 寄存器锁定直到一个MCU复位 LOCK键写序列 写 1→写 0→写1→ 读0→读1 注意: LCK[15:0]的值必须保持在 LOCK Key写序列期间 Port 锁定位 0 ~ 15 这些位由软件置位和清除 0: 端口配置没有锁定 1: 端口配置锁定 5.2.9 GPIO 端口备用功能选择低位寄存器 (GPIOx_AFSL) (x=A,B,C) 地址偏移: 0x20 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 AFSL7[3:0] AFSL6[3:0] AFSL5[3:0] AFSL4[3:0] rw rw rw rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 AFSL3[3:0] AFSL2[3:0] AFSL1[3:0] AFSL0[3:0] rw rw rw rw 107 位/位域 31:28 名称 AFSL7[3:0] 27:24 AFSL6[3:0] 23:20 AFSL5[3:0] 19:16 AFSL4[3:0] 15:12 AFSL3[3:0] 11:8 AFSL2[3:0] 7:4 AFSL1[3:0] 3:0 AFSL0[3:0] 描述 Pin7 选择备用功能 这些位由软件置位和清除 参照 AFSL0 [3:0]的描述 Pin 6 选择备用功能 这些位由软件置位和清除 参照 AFSL0 [3:0]的描述 Pin 5 选择备用功能 这些位由软件置位和清除 参照 AFSL0 [3:0]的描述 Pin 4 选择备用功能 这些位由软件置位和清除 参照 AFSL0 [3:0]的描述 Pin 3 选择备用功能 这些位由软件置位和清除 参照 AFSL0 [3:0]的描述 Pin 2 选择备用功能 这些位由软件置位和清除 参照 AFSL0 [3:0]的描述 Pin 1 选择备用功能 这些位由软件置位和清除 参照 AFSL0 [3:0]的描述 Pin 0 选择备用功能 这些位由软件置位和清除 0000: AF0 被选 (复位值) 0001: AF1 被选 0010: AF2 被选 0011: AF3 被选 0100: AF4 被选 (Port A,B only) 0101: AF5 被选 (Port A,B only) 0110: AF6 被选 (Port A,B only) 0111: AF7 被选 (Port A,B only) 1000 ~ 1111: 保留 GD32F1x0 用户手册 5.2.10 GPIO 端口选择备用功能高位寄存器 (GPIOx_AFSH) (x=A,B,C) 地址偏移: 0x24 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 108 AFSH15[3:0] rw 15 14 13 12 AFSH11[3:0] rw 位/位域 31:28 名称 AFSH15[3:0] 27:24 AFSH14[3:0] 23:20 AFSH13[3:0] 19:16 AFSH12[3:0] 15:12 AFSH11[3:0] 11:8 AFSH10[3:0] 7:4 AFSH9[3:0] 3:0 AFSH8[3:0] GD32F1x0 用户手册 AFSH14[3:0] AFSH13[3:0] AFSH12[3:0] rw rw rw 11 10 9 8 7 6 5 4 3 2 1 0 AFSH10[3:0] AFSH9[3:0] AFSH8[3:0] rw rw rw 描述 Pin 15 选择备用功能 这些位由软件置位和清除 参照 AFSH8[3:0] 的描述 Pin 14 选择备用功能 这些位由软件置位和清除 参照 AFSH8[3:0] 的描述 Pin 13 选择备用功能 这些位由软件置位和清除 参照 AFSH8[3:0] 的描述 Pin 12 选择备用功能 这些位由软件置位和清除 参照 AFSH8[3:0] 的描述 Pin 1 选择备用功能 这些位由软件置位和清除 参照 AFSH8[3:0] 的描述 Pin 10 选择备用功能 这些位由软件置位和清除 参照 AFSH8[3:0] 的描述 Pin 9 选择备用功能 这些位由软件置位和清除 参照 AFSH8[3:0] 的描述 Pin 8 选择备用功能 这些位由软件置位和清除 0000: AF0 被选 (复位值) 0001: AF1 被选 0010: AF2 被选 0011: AF3 被选 0100: AF4 被选 (Port A,B only) 0101: AF5 被选 (Port A,B only) 0110: AF6 被选 (Port A,B only) 0111: AF7 被选 (Port A,B only) 109 1000 ~ 1111: 保留 GD32F1x0 用户手册 5.2.11 GPIO 端口位清除寄存器 (GPIOx_BCR) (x=A..D,F) 地址偏移: 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 CR15 CR14 CR13 CR12 CR11 CR10 CR9 CR8 CR7 CR6 CR5 CR4 CR3 CR2 CR1 CR0 w w w w w w w w w w w w w w w w 位/位域 31:16 15:0 名称 保留 CRx 描述 Port清除位 这些位由软件置位和清除 0: 对应的DORx位没改变 1: 清对应的DORx位 110 6 6.1 6.2 循环冗余校验计算单元 (CRC) GD32F1x0 用户手册 简介 循环冗余校验码是一种用在数字网络和存储设备上的差错校验码,可以校验原始数据的偶然误 差。 CRC 计算单元能用固定的多项式来计算 32/16/8 位的 CRC 校验码。 主要特征  32/16/8位数据输入,32位数据输出。从输入数据到得出计算结果,对于 32/16/8位的输入数据长度,计算周期分别为4/2/1个AHB时钟周期。  配有与计算无关的独立8位寄存器,可以供其他任何外设使用。  固定的计算多项式:0x4C11DB7 X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2+ X +1 该 32 位 CRC 多项式是一个与以太网计算多项式相同的多项式。  内嵌1个32位的输入缓冲器用于提高总线效率。  可选I/O数据的逆序与否。  用户可设置的计算初值,可使计算更灵活。 111 图 13. CRC计算单元框图 Data Input Reversible Option GD32F1x0 用户手册 Input Data Register Reversible Option AHB BUS Interface Data Output Reversible Option Data Access CRC Calculation Unit Fixed polynomial 0x4C11DB7 Output Data Register (32 bit) Reversible Option Free Purpose 8 bit Register 6.3 功能描述 该单元有两个功能:  CRC计算单元可以用来计算32位的原始数据,CRC_DTR寄存器接收原始数据并存储计算 结果。 如果不通过软件设置CRC_CTLR 寄存器的方式来清除CRC_DTR 寄存器,新输入的原始 数据将会基于前一次CRC_DTR 寄存器中的结果进行计算。 对于32/16/8位的数据长度,CRC的计算分别要花费4/2/1个AHB的时钟周期。在此期间, 因为32位输入缓存的原因,AHB总线将不会被挂起。  此模块提供了一个8位的独立寄存器CRC_FDTR。 CRC_FDTR与CRC计算无关,任何时候都可以进行独立的读写操作。  逆序功能可以交换输入输出数据的位序。 输入数据可选择三种逆序形式。 以原始数据0x1A2B3C4D为例: 1) 按位逆序: 112 6.4 GD32F1x0 用户手册 32位数据被分成四组,组内完成颠倒。逆序后的数据为: 0x58D43CB2 2) 按半字逆序: 32位数据被分成两组,组内完成颠倒。逆序后的数据为: 0xD458B23C 3) 按字逆序: 32位数据被分成一组,组内完成颠倒,逆序后的数据为: 0xB23CD458 对于输出数据来说,逆序形式为按字逆序。 例如:当REV_O=1,计算结果0x22CC4488将被逆序成0x11223344。  多重输入数据大小支持功能可以使用户在组合计算数据上有更大的灵活度。 例如:6位的输入数据能组合成一个字或一个半字,同时也能被组合成3个半字。  用户可配置的初始计算数据功能可让CRC以用户设置值开始计算。 CRC 寄存器 6.4.1 CRC 数据寄存器 (CRC_DTR) 地址偏移: 0x00 复位值: 0xFFFF FFFF 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DATA[31:16] rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATA[15:0] rw 位 位域 31:0 DATA 描述 CRC 计算结果位 软件可读可写 该寄存器用于接收待计算的新数据,直接将其写入即可。 刚写入的数据不能被读出来因 为读取该寄存器得到的是上次CRC计算的结果。如果输入的计算数据不足4个字节,那 么有效字节只针对输入有意义的字节。 6.4.2 CRC 独立数据寄存器 (CRC_FDTR) 地址偏移:0x04 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 113 GD32F1x0 用户手册 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 FDR[7:0] rw 位 位域 描述 31:8 保留 保持复位值 7:0 FDR[7:0] 独立数据寄存器位 软件可读可写 这些位与CRC计算无关。该字节能被任何其他外设用于其他任何目的。该字节不受 CRC_CTLR 寄存器的影响。 6.4.3 31 30 CRC 控制寄存器 (CRC_CTLR) 地址偏移: 0x08 复位值: 0x0000 0000 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 Rev_O Rev_I[1:0] RESET rw rw rs 位 31:8 位域 保留 描述 保持复位值 7 Rev_O 翻转输出数据功能 0:输出数据不翻转 1:输出数据按32位翻转 6:5 Rev_I[1:0] 翻转输入数据功能 0x0:输入数据不翻转 0x1:输入数据按字节翻转 0x2:输入数据按半字翻转 0x3:输入数据按字翻转 4:1 保留 保持复位值 0 RESET 该位用来复位CRC_DTR寄存器,并将RTC_IDAR寄存器中的更新到CRC_DTR寄存器中, 然后自动清零。该位对CRC_FDTR寄存器没有影响。 软件可读写 6.4.4 CRC 初值寄存器 (CRC_IDTR) 地址偏移: 0x10 复位值: 0xFFFF FFFF 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 114 15 14 13 12 11 10 IDAR [31:16] rw 9 8 7 6 IDAR[15:0] rw GD32F1x0 用户手册 5 4 3 2 1 0 位 位域 31:0 IDAR 描述 配置CRC初值 CRC_CTLR寄存器的RESET位置位后,CRC_DTR寄存器的值将被更新为此寄存器的 值。 115 7 中断和事件 GD32F1x0 用户手册 7.1 介绍 Cortex-M3 集成了嵌套式矢量型中断控制器(Nested Vectored Interrupt Controller (NVIC))来 实现高效的异常和中断处理。 NVIC 实现了低延迟的异常和中断处理,以及电源管理控制。 它和内核是紧密耦合的。更多关于NVIC的说明请参考《Cortex-M3技术参考手册》。 GD32F1x0 也提供了一个外部中断/事件控制器(EXTI),包括 22 个相互独立的边沿检测电路并 且能够向处理器内核产生中断请求或唤醒事件。 EXTI 有三种触发类型:上升沿触发,下降沿 触发和任意沿触发。EXTI 中的每一个边沿检测电路都可以独立配置和屏蔽。 7.2 主要特点 7.3  Cortex-M3 系统异常  38 种可屏蔽的外设中断  4 位中断优先级配置位—共提供16个中断优先等级  高效的中断处理  支持异常抢占和咬尾中断  将系统从省电模式唤醒  外中断中有22个相互独立的边沿检测电路  3 种触发类型: 上升沿触发,下降沿触发和任意沿触发  软件中断或事件触发  可配置的触发源 功能描述 7.3.1 NVIC 以及异常/中断处理 ARM Cortex-M3 处理器和嵌套式矢量型中断控制器(NVIC) 在处理(Handler)模式下对所有异 常进行优先级区分以及处理。当异常发生时,系统自动将当前处理器工作状态压栈,在执行完 中断服务子程序 (ISR)后自动将其出栈. 取向量是和当前工作态压栈并行进行的, 从而提高了中断入口效率。处理器支持咬尾中断, 可 实现背靠背中断,大大削减了反复切换工作态所带来的开销。下表列出了所有的异常类型。 116 表 3. Cotrex-M3 中的 NVIC 异常类型 异常类型 向量编号 优先级(a) 向量地址 - 0 - 0x0000_0000 复位 1 -3 0x0000_0004 NMI 2 -2 0x0000_0008 硬件故障 3 -1 0x0000_000C 存储器管 4 可编程设置 理 0x0000_0010 总线故障 5 可编程设置 0x0000_0014 用法故障 6 可编程设置 0x0000_0018 GD32F1x0 用户手册 描述 保留 复位 不可屏蔽中断 各种硬件级别的故障 存储器管理 预取指故障,存储器访问故障 未定义的指令或非法状态 - 7-10 - 0x0000_001C -0x0000_002B 保留 服务调用 调试监控 挂起服务 系统节拍 中断 11 12 13 14 15 16-67 可编程设置 可编程设置 可编程设置 可编程设置 可编程设置 0x0000_002C 0x0000_0030 0x0000_0034 0x0000_0038 0x0000_003C 0x0000_0040 - 0x0000_010C 通过 SWI 指令实现系统的服务调用 调试监控器 保留 可挂起的系统服务请求 系统节拍定时器 外设中断 (详见下表) 表 4. GD32F1x0 的中断向量表 中断编号 向量编号 外设中断描述 IRQ 0 16 窗口式看门狗中断 IRQ 1 17 通过 EXTI 线检测的 LVD 中断 IRQ 2 18 RTC 全局中断 IRQ 3 19 Flash 全局中断 IRQ 4 20 RCC 全局中断 IRQ 5 21 EXTI 线 0-1 中断 IRQ 6 22 EXTI 线 2-3 中断 IRQ 7 23 EXTI 线 4-15 中断 IRQ 8 24 TSI 全局中断 IRQ 9 25 DMA 通道 1 全局中断 IRQ 10 26 DMA 通道 2-3 全局中断 IRQ 11 27 DMA 通道 4-5 全局中断 IRQ 12 28 ADC 和 Comparator 1-2 中断 IRQ 13 29 TIM1 停止, 更新, 触发和通信中断 IRQ 14 30 TIM1 捕获比较中断 IRQ 15 31 TIM2 全局中断 IRQ 16 32 TIM3 全局中断 IRQ 17 33 TIM6 和 DAC 全局中断 IRQ 18 34 保留 IRQ 19 35 TIM14 全局中断 IRQ 20 36 TIM15 全局中断 向量地址 0x0000_0040 0x0000_0044 0x0000_0048 0x0000_004C 0x0000_0050 0x0000_0054 0x0000_0058 0x0000_005C 0x0000_0060 0x0000_0064 0x0000_0068 0x0000_006C 0x0000_0070 0x0000_0074 0x0000_0078 0x0000_007C 0x0000_0080 0x0000_0084 0x0000_0088 0x0000_008C 0x0000_0090 117 7.3.2 中断编号 IRQ 21 IRQ 22 IRQ 23 IRQ 24 IRQ 25 IRQ 26 IRQ 27 IRQ 28 IRQ 29 IRQ 30 IRQ 31 IRQ 32 IRQ 33 IRQ 34 IRQ 35 IRQ 36 IRQ 37 IRQ 38 IRQ 39-41 IRQ 42 IRQ 43-47 IRQ 48 IRQ 49-50 IRQ 51 向量编号 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55-57 58 59-63 64 65-66 67 GD32F1x0 用户手册 外设中断描述 向量地址 TIM16 全局中断 0x0000_0094 TIM17 全局中断 0x0000_0098 I2C1 事件中断 0x0000_009C I2C2 事件中断 SPI1 全局中断 0x0000_00A0 0x0000_00A4 SPI2 全局中断 0x0000_00A8 USART1 全局中断 0x0000_00AC USART2 全局中断 0x0000_00B0 保留 0x0000_00B4 CEC 全局中断 0x0000_00B8 保留 0x0000_00BC I2C1 错误中断 保留 0x0000_00C0 0x0000_00C4 I2C2 错误中断 I2C3 事件中断 I2C3 错误中断 USB 低优先级中断 0x0000_00C8 0x0000_00CC 0x0000_00D0 0x0000_00D4 USB 高优先级中断 0x0000_00D8 保留 0x0000_00DC0x0000_00E4 通过 EXTI 线 18 产生的 USB 唤醒中断 0x0000_00E8 保留 0x0000_00EC0x0000_00FC DMA 通道 6-7 全局中断 0x0000_0100 保留 0x0000_01040x0000_0108 SPI3 全局中断 0x0000_010C 外部中断及事件 (EXTI) EXTI包含22个相互独立的边沿检测电路并且可以向处理器产生24个中断请求或事件唤醒. 针 对这22个边沿检测电路,EXTI提供3种触发类型: 上升沿触发,下降沿触发和任意沿触发。 EXTI 中每个边沿检测电路都可以分别予以配置或屏蔽。 下图为EXTI的内部框图。 118 图 14. EXTI框图 极性控制 GD32F1x0 用户手册 软件触发 EXTI Line0~23 边沿检测 中断屏蔽控制 至 NVIC 事件产生 事件屏蔽控制 至唤醒单元 EXTI的触发源包括来自I/O管脚的16 根线以及来自内部模块的8根线。(包括 LVD, RTC, USB, USART,CEC和CMP,详情请参考表5)。通过配置SYSCFG模块的SYSCFG_EXTISSx寄存 器,所有的GPIO管脚都可能选作EXTI的触发源,具体细节请参考第一章中系统配置寄存器的 相关内容。 除了中断,EXTI还可以向处理器提供事件信号。The Cortex-M3 内核完全支持等待中断(WFI), 等待事件(WFE)和发送事件(SEV)指令。GD32F1x0有一个唤醒中断控制器(WIC), 用户可以放 心的让处理器和NVIC进入功耗极低的休眠模式,由WIC来识别中断和事件以及判断优先级。 当某些预期的事件发生时,EXTI能唤醒处理器及整个系统,例如一个特定的I/O 管脚电平翻转 或者RTC闹钟动作。 来自内部的触发源CEC和USART也能产生事件以唤醒系统。但是,为了使处理器能从深度睡 眠模式唤醒CPU,这两个模块要产生一个同步的中断。通过设置EXTI模块的IER和EER寄存器, 可以屏蔽上述两个内部触发线。 表 5. EXTI触发源 EXTI 线编号 触发源 归属 0 PA0 / PB0 / PC0 / PF0 外部 1 PA1 / PB1 / PC1 / PF1 外部 2 PA2 / PB2 / PC2 / PD2 外部 3 PA3 / PB3 / PC3 外部 119 7.4 EXTI 线编号 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 触发源 PA4 / PB4 / PC4 / PF4 PA5 / PB5 / PC5 / PF5 PA6 / PB6 / PC6 / PF6 PA7 / PB7 / PC7 / PF7 PA8 / PB8 / PC8 PA9 / PB9 / PC9 PA10 / PB10 / PC10 PA11 / PB11 / PC11 PA12 / PB12/ PC12 PA13 / PB13 / PC13 PA14 / PB14 / PC14 PA15 / PB15 / PC15 LVD RTC 闹钟 USB 唤醒 RTC 干预和时间戳 保留 比较器 1 输出 比较器 2 输出 保留 保留 USART1 唤醒 保留 CEC 唤醒 中断 EXTI 寄存器 GD32F1x0 用户手册 归属 外部 外部 外部 外部 外部 外部 外部 外部 外部 外部 外部 外部 外部 外部 外部 外部 保留 外部 外部 保留 保留 内部 保留 内部 7.4.1 中断使能寄存器 (EXTI_IER) 地址偏移: 0x00 复位值: 0x0F90 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 IER27 IER26 IER25 IER24 IER23 IER22 IER21 IER20 IER19 IER18 IER17 IER16 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 IER15 IER14 IER13 IER12 IER11 IER10 IER9 IER8 IER7 IER6 IER5 IER4 IER3 IER2 IER1 IER0 rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位/位域 31:28 名称 保留 描述 必须保留复位值 120 27: 0 IERx 中断屏蔽控制 0: 第x 线中断被屏蔽 1: 第x 线中断未被屏蔽 GD32F1x0 用户手册 7.4.2 事件使能寄存器 (EXTI_EER) 地址偏移: 0x04 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 EER27 EER26 EER25 EER24 EER23 EER22 EER21 EER20 EER19 EER18 EER17 EER16 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 EER15 EER14 EER13 EER12 EER11 EER10 EER9 EER8 EER7 EER6 EER5 EER4 EER3 EER2 EER1 EER0 rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位/位域 31:28 名称 保留 27: 0 EERx 描述 必须保留复位值 事件屏蔽控制 0: 第x线事件被屏蔽 1: 第x线事件未被屏蔽 7.4.3 上升沿触发选择寄存器 (EXTI_RTE) 地址偏移: 0x08 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 保留 RTE22 RTE21 rw rw 15 14 13 12 11 10 9 8 7 6 5 RTE15 RTE14 RTE13 RTE12 RTE11 RTE10 RTE9 RTE8 RTE7 RTE6 RTE5 rw rw rw rw rw rw rw rw rw rw rw 20 保留 4 RTE4 rw 19 18 17 16 RTE19 RTE18 RTE17 RTE16 rw rw rw rw 3 2 1 0 RTE3 RTE2 RTE1 RTE0 rw rw rw rw 位/位域 名称 31:23 保留 22:21 RTEx 20 19: 0 保留 RTEx 描述 必须保留复位值 上升沿触发配置 0: 禁止线x上升沿触发 1: 允许线x上升沿触发(中断和事件) 必须保留复位值 上升沿触发配置 0: 禁止线x上升沿触发 121 1: 允许线x上升沿触发(中断和事件) GD32F1x0 用户手册 7.4.4 下降沿触发选择寄存器 (EXTI_FTE) 地址偏移:0x0C 复位值:0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 保留 FTE22 FTE21 rw rw 15 14 13 12 11 10 9 8 7 6 5 FTE15 FTE14 FTE13 FTE12 FTE11 FTE10 FTE9 FTE8 FTE7 FTE6 FTE5 rw rw rw rw rw rw rw rw rw rw rw 20 保留 4 FTE4 rw 19 18 17 16 FTE19 FTE18 FTE17 FTE16 rw rw rw rw 3 2 1 0 FTE3 FTE2 FTE1 FTE0 rw rw rw rw 位/位域 名称 31: 23 保留 22: 21 FTEx 20 19: 0 保留 FTEx 描述 必须保留复位值 下降沿触发配置 0: 禁止线x下降沿触发 1: 允许线x下降沿触发(中断和事件) 必须保留复位值 下降沿触发配置 0: 禁止线x下降沿触发 1: 允许线x下降沿触发(中断和事件) 7.4.5 软件中断事件寄存器 (EXTI_SIE) 地址偏移: 0x10 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 SIE22 SIE21 保留 SIE19 SIE18 SIE17 SIE16 rw rw rw rw rw rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SIE15 SIE14 SIE13 SIE12 SIE11 SIE10 SIE9 SIE8 SIE7 SIE6 SIE5 SIE4 SIE3 SIE2 SIE1 SIE0 rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位/位域 31:23 名称 保留 22: 21 SIEx 描述 必须保留复位值 中断/事件软件触发 0: 禁用EXTIx软件中断/事件请求 1: 激活EXTIx软件中断/事件请求 122 20 19: 0 保留 SIEx 必须保留复位值 中断/事件软件触发 0: 禁用EXTIx软件中断/事件请求 1: 激活EXTIx软件中断/事件请求 GD32F1x0 用户手册 7.4.6 挂起寄存器 (EXTI_PD) 地址偏移: 0x14 复位值:未定义 31 30 29 28 27 26 25 保留 15 14 13 12 11 10 9 PD15 PD14 PD13 PD12 PD11 PD10 PD9 rw rw rw rw rw rw rw 24 8 PD8 rw 23 22 21 PD22 PD21 rw rw 7 6 5 PD7 PD6 PD5 rw rw rw 20 保留 4 PD4 rw 19 18 17 16 PD19 PD18 PD17 PD16 rw rw rw rw 3 2 1 0 PD3 PD2 PD1 PD0 rw rw rw rw 位/位域 名称 31: 23 保留 22: 21 PDx 20 19: 0 保留 PDx 描述 必须保留复位值 中断/事件挂起状态 0: EXIT线x没有发生触发请求 1: EXIT线x已触发,对这些位写1,可将其清0。 必须保留复位值 中断/事件挂起状态 0: EXIT线x没有发生触发请求 1: EXIT线x已触发,对这些位写1,可将其清0。 123 8 8.1 8.2 8.3 8.3.1 DMA 控制器 (DMA) GD32F1x0 用户手册 简介 直接存储器访问 (DMA) 控制器的功能是自动完成外设与存储器之间的数据传输。通过DMA 控制器,数据可以在外设和存储器之间以及存储器与存储器之间快速传输,无需CPU的干涉。 从而使CPU可以专注在处理其他系统功能上。DMA控制器有7个通道。每个通道都是专门用来 处理一个或多个外设的存储器访问请求的。DMA控制器内部实现了一个仲裁器,用来仲裁多个 请求的优先级。 DMA控制器和Cortex™-M3内核共享系统总线。当DMA和CPU访问同样的地址空间时,DMA 访问可能会阻挡CPU访问几个总线周期。总线矩阵中实现了循环仲裁算法来分配DMA与CPU 的访问权,它可以确保CPU得到至少一半的系统总线带宽。 主要特点  传输数据长度可编程配置,最大到 65536  7 个通道,并且每个通道都可配置  AHB 和 APB 外设,片上闪存和片上 SRAM 都可以作为访问的源端和目的端  每个通道连接固定的硬件 DMA 请求  DMA 通道请求的优先级由软件配置和通道编号决定  支持外设到存储器,存储器到外设,存储器到存储器的数据传输  每个通道都具有三个类型的事件标志和一个单独的中断请求  每个通道都可配置源端和目的端的传输尺寸 功能描述 DMA 传输 DMA控制器和外设之间的握手机制是基于请求信号和应答信号的。请求信号表示外设请求 DMA访问,而应答信号表示DMA控制器已经访问了外设。当DMA控制器同时收到两个或更多 的请求时,哪个请求被服务取决于对应通道优先级高低。每个DMA传输包含两个操作,一是将 数据从源端读到DMA,一是将数据从 DMA写到目的端。源地址和目的地址是 DMA基于 DMA_PBARx,DMA_MBARx和DMA_CTLRx寄存器的配置自动计算的。详情请参考第8.3.3 章节。DMA_RCNTx 寄存器控制传输数据的数量。DMA_CTLRx寄存器的PSIZE和MSIZE位, 决定每次传输要传多少个字节。假设DMA_RCNT是4,PNAGA和MNAGA都被置1,结合PSIZE 和MSIZE的各种配置,DMA传输的操作详见下表。 124 8.3.2 8.3.3 8.3.4 表 6. DMA 传输操作 Transfer size Source Destination 32 bits 32 bits 32 bits 16 bits 32 bits 8 bits 16 bits 32 bits 16 bits 16 bits 16 bits 8 bits 8 bits 32 bits 8 bits 16 bits 8 bits 8 bits GD32F1x0 用户手册 Transfer operations Source 1: Read B3B2B1B0[31:0] @0x0 2: Read B7B6B5B4[31:0] @0x4 3: Read BBBAB9B8[31:0] @0x8 4: Read BFBEBDBC[31:0] @0xC 1: Read B3B2B1B0[31:0] @0x0 2: Read B7B6B5B4[31:0] @0x4 3: Read BBBAB9B8[31:0] @0x8 4: Read BFBEBDBC[31:0] @0xC 1: Read B3B2B1B0[31:0] @0x0 2: Read B7B6B5B4[31:0] @0x4 3: Read BBBAB9B8[31:0] @0x8 4: Read BFBEBDBC[31:0] @0xC 1: Read B1B0[15:0] @0x0 2: Read B3B2[15:0] @0x2 3: Read B5B4[15:0] @0x4 4: Read B7B6[15:0] @0x6 1: Read B1B0[15:0] @0x0 2: Read B3B2[15:0] @0x2 3: Read B5B4[15:0] @0x4 4: Read B7B6[15:0] @0x6 1: Read B1B0[15:0] @0x0 2: Read B3B2[15:0] @0x2 3: Read B5B4[15:0] @0x4 4: Read B7B6[15:0] @0x6 1: Read B0[7:0] @0x0 2: Read B1[7:0] @0x1 3: Read B2[7:0] @0x2 4: Read B3[7:0] @0x3 1: Read B0[7:0] @0x0 2: Read B1[7:0] @0x1 3: Read B2[7:0] @0x2 4: Read B3[7:0] @0x3 1: Read B0[7:0] @0x0 2: Read B1[7:0] @0x1 3: Read B2[7:0] @0x2 4: Read B3[7:0] @0x3 Destination 1: Write B3B2B1B0[31:0] @0x0 2: Write B7B6B5B4[31:0] @0x4 3: Write BBBAB9B8[31:0] @0x8 4: Write BFBEBDBC[31:0] @0xC 1: Write B1B0[7:0] @0x0 2: Write B5B4[7:0] @0x2 3: Write B9B8[7:0] @0x4 4: Write BDBC[7:0] @0x6 1: Write B0[7:0] @0x0 2: Write B4[7:0] @0x1 3: Write B8[7:0] @0x2 4: Write BC[7:0] @0x3 1: Write 0000B1B0[31:0] @0x0 2: Write 0000B3B2[31:0] @0x4 3: Write 0000B5B4[31:0] @0x8 4: Write 0000B7B6[31:0] @0xC 1: Write B1B0[15:0] @0x0 2: Write B3B2[15:0] @0x2 3: Write B5B4[15:0] @0x4 4: Write B7B6[15:0] @0x6 1: Write B0[7:0] @0x0 2: Write B2[7:0] @0x1 3: Write B4[7:0] @0x2 4: Write B6[7:0] @0x3 1: Write 000000B0[31:0] @0x0 2: Write 000000B1[31:0] @0x4 3: Write 000000B2[31:0] @0x8 4: Write 000000B3[31:0] @0xC 1, Write 00B0[15:0] @0x0 2, Write 00B1[15:0] @0x2 3, Write 00B2[15:0] @0x4 4, Write 00B3[15:0] @0x6 1, Write B0[7:0] @0x0 2, Write B1[7:0] @0x1 3, Write B2[7:0] @0x2 4, Write B3[7:0] @0x3 通道之间的仲裁 当同时收到两个或多个请求时,仲裁器根据通道的优先级决定哪一个请求被服务。 优先级分 两个层次:软件优先级和硬件优先级。软件优先级通过DMA_CTLRx寄存器的PRIO[1:0]位来 配置。软件优先级分―低‖、―中‖、―高‖和―极高‖四个等级。而硬件优先级是固定的。编号较低的 通道比编号较高的通道有更高的硬件优先级。例如,通道1的硬件优先级高于通道3。仲裁器比 较优先级时会优先看软件优先级。如果两个通道的软件优先级不同,软件优先级较高的通道被 服务。如果两个通道的软件优先级相同,硬件优先级较高的通道被服务。 地址生成算法 DMA_CTLRx 寄存器的 PSIZE 和 MSIZE 位用来配置传输数据的尺寸。DMA_CTLRx 寄存器的 PNAGA 和 MNAGA 位用来配置地址生成算法。DMA 控制器支持两种地址生成算法,分别是 固定地址模式和递增地址模式。在固定地址模式下,下一个地址始终等价于当前地址。在递增 地址模式下,下一个地址根据传输数据的尺寸在当前地址的基础上递增 1 或 2 或 4。 循环模式 循环模式用于处理循环的数据流(例如,ADC 扫描模式)。通过 DMA_CTLRx 寄存器的 CIRC 位可以使能该功能。在循环模式下,通道的剩余计数器每当达到 0 时都会自动重装载为初始设 定值,所以 DMA 会一直工作。 125 8.3.5 8.3.6 8.3.7 存储器到存储器模式 GD32F1x0 用户手册 通过 DMA_CTLRx 寄存器的 MEMTOMEM 位可以使能存储器到存储器模式。在此模式下,DMA 通道传输数据时不依赖外设的请求信号。一旦 DMA_CTLRx 寄存器的 CHEN 位被置 1,DMA 通道就立即开始传输数据,直到 DMA_RCNTx 寄存器达到 0,DMA 通道才会停止。 中断请求 每个 DMA 通道都有一个专用的中断。中断事件有三种类型:传输完成,传输完成一半和传输 错误。当通道上的任意类型中断事件发生时,如果对应的中断使能位是开启的,就会产生中断。 每一个中断事件都在 DMA_IFR 寄存器中有专用的标志位,在 DMA_ICR 寄存器中有专用的清 除位,在 DMA_CTLRx 寄存器中有专用的使能位。下表描述了其对应关系。 表 7. DMA 中断事件 中断事件 传输完成 传输完成一半 传输错误 标志位 TCIF HTIF ERRIF 清除位 TCIC HTIC ERRIC 使能位 TCIE HTIE ERRIE 图 15. DMA中断产生逻辑 TCIFx TCIEx and HTIFx HTIEx and or INTERRUPTx ERRIFx ERRIEx and 注意: ―x‖表示通道编号 (x=1…7). 当 DMA 控制器访问保留的地址空间时,传输错误事件发生。此时硬件会自动将 DMA_CTLRx 寄存器的 CHEN 位清零,通道随之关闭。 DMA 通道配置流程 下面给出了配置 DMA 通道的步骤: 1. 通过 DMA_PBARx 寄存器设置外设地址 2. 通过 DMA_MBARx 寄存器设置存储器地址 3. 通过 DMA_RCNTx 寄存器设置传输数据的总数 4. 通过 DMA_CTLRx 寄存器设置软件优先级,传输方向,模式类型,数据尺寸和中断类型。 5. 将 DMA_CTLRx 寄存器的 CHEN 位配置成 1 126 8.3.8 GD32F1x0 用户手册 DMA 请求映射 几个来自外设的请求可以被映射到同一个 DMA 通道。他们会先经过逻辑或运算再进入 DMA。 详情请参考下图。通过设置对应的外设的寄存器,每一个外设的请求都可以独立的开启或关闭。 用户必须确保,在同一时间,对于同一通道来说,只有一个外设的请求是开启的。 图 16. DMA请求映射 Hardware priority Channel 1 or or MEMTOMEM1 ADC(1) TM2_CH3 TM17_CH1(1) TM17_UP(1) high Channel 2 or or MEMTOMEM2 Channel 3 or or MEMTOMEM3 Channel 4 or or MEMTOMEM4 Channel 5 or or MEMTOMEM5 ADC(2) SPI1_RX USART1_TX(1) I2C1_TX TM1_CH1 TM2_UP TM3_CH3 TM17_CH1(2) TM17_UP(2) SPI1_TX USART1_RX(1) I2C1_RX TM1_CH2 TM2_CH2 TM3_CH4 TM3_UP TM6_UP DAC TM16_CH1(1) TM16_UP(1) SPI2_RX USART1_TX(2) USART2_TX I2C2_TX TM1_CH4 TM1_TRIG TM1_COM TM2_CH4 TM3_CH1 TM3_TRIG TM16_CH1(2) TM16_UP(2) SPI2_TX USART1_RX(2) USART2_RX I2C2_RX TM1_CH3 TM1_UP TM2_CH1 TM15_CH1 TM15_UP TM15_TRIG TM15_CH2 Channel 6 or or MEMTOMEM6 low SPI3_RX I2C3_TX Channel 7 or or MEMTOMEM7 SPI3_TX I2C3_RX 127 外设 ADC SPI/I2S USART I2C TM1 TM2 TM3 TM6/DAC TM15 TM16 TM17 GD32F1x0 用户手册 1. 当 SYSCFG_R1 寄存器中的对应重映射控制位被清 0 时,此请求被映射到该通道 2. 当 SYSCFG_R1 寄存器中的对应重映射控制位被置 1 时,此请求被映射到该通道 下表列出了每个通道支持的来自外设的请求。 表 8. 各 DMA 通道请求总结 通道 7 通道 6 通道 5 ● ● ● SPI3_TX ● I2C3_RX SPI3_RX ● I2C3_TX SPI2_TX USART1_RX(2 ) USART2_RX I2C2_RX ● ● TM1_CH3 TM1_UP ● ● TM2_CH1 ● ● ● ● ● ● TM15_CH1 ● ● TM15_UP TM15_TRIG TM15_COM ● ● ● ● ● ● 通道 4 ● SPI2_RX USART1_TX(2) USART2_TX I2C2_TX TM1_CH4 TM1_TRIG TM1_COM TM2_CH4 TM3_CH1 TM3_TRIG ● ● TM16_CH1(2) TM16_UP(2) ● 通道 3 ● SPI1_TX USART1_RX(1) I2C1_RX TM1_CH2 TM2_CH2 TM3_CH4 TM3_UP TM6_UP DAC ● TM16_CH1(1) TM16_UP(1) ● 通道 2 ADC(2) SPI1_RX 通道 1 ADC(1) ● USART1_TX(1) ● I2C1_TX ● TM1_CH1 ● TM2_UP TM3_CH3 ● TM2_CH3 ● ● ● ● ● TM17_CH1(2) TM17_UP(2) ● TM17_CH1(1) TM17_UP(1) 8.4 DMA 寄存器 8.4.1 DMA 中断状态寄存器 (DMA_IFR) 地址偏移: 0x00 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 ERRIF7 HTIF7 TCIF7 GIF7 ERRIF6 HTIF6 TCIF6 GIF6 ERRIF5 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 ERRIF4 HTIF4 TCIF4 GIF4 ERRIF3 HTIF3 TCIF3 GIF3 ERRIF2 HTIF2 TCIF2 GIF2 ERRIF1 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 ERRIFx 通道x (x=1…7)的错误标志 由硬件置1;通过配置DMA_ICR寄存器,软件清0 0: 通道x没有发生错误 1: 通道x发生错误 26/22/18/ HTIFx 通道x (x=1…7)的传输一半完成标志 128 14/10/6/2 25/21/17/ 13/9/5/1 TCIFx 24/20/16/ 12/8/4/0 GIFx GD32F1x0 用户手册 由硬件置1;通过配置DMA_ICR寄存器,软件清0 0: 通道x一半数目的传输没有完成 1: 通道x一半数目的传输已经完成 通道x (x=1…7)的传输完成标志 由硬件置1;通过配置DMA_ICR寄存器,软件清0 0: 通道x (x=1…7)的传输没有完成 1: 通道x (x=1…7)的传输已经完成 通道x (x=1…7)的全局中断标志 由硬件置1;通过配置DMA_ICR寄存器,软件清0 0: 通道x没有发生ERRIF, HTIF或TCIF 1: 通道x至少发生ERRIF, HTIF或TCIF之一 8.4.2 DMA 中断标志清除寄存器 (DMA_ICR) 地址偏移: 0x04 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 ERRIC7 HTIC7 TCIC7 GIC7 ERRIC6 HTIC6 TCIC6 GIC6 ERRIC5 HTIC5 TCIC5 GIC5 w w w w w w w w w w w w 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ERRIC4 HTIC4 TCIC4 GIC4 ERRIC3 HTIC3 TCIC3 GIC3 ERRIC2 HTIC2 TCIC2 GIC2 ERRIC1 HTIC1 TCIC1 GIC1 w w w w w w w w w w w w w w w w 位/位域 31:28 27/23/19/ 15/11/7/3 名称 保留 ERRICx 26/22/18/ 14/10/6/2 HTICx 25/21/17/ 13/9/5/1 TCICx 24/20/16/ 12/8/4/0 GICx 描述 保留在复位值 清除通道x (x=1…7)的错误标志 0: 无影响 1: 清零DMA_IFR寄存器的ERRIFx位 清除通道x (x=1…7)的传输一半完成标志 0: 无影响 1: 清零DMA_IFR寄存器的HTIFx位 清除通道x (x=1…7)的传输完成标志 0: 无影响 1: 清零DMA_IFR寄存器的TCIFx位 清除通道x (x=1…7)的全局中断标志 0: 无影响 1: 清零DMA_IFR寄存器的GIFx, ERRIFx, HTIFx 和TCIFx位 129 8.4.3 DMA 通道 x 控制寄存器 (DMA_CTLRx) x = 1..7, 其中x是通道编号 地址偏移: 0x08 + 0d20 × (x – 1) 复位值: 0x0000 0000 GD32F1x0 用户手册 31 15 保留 30 14 MEMTO MEM rw 29 28 27 26 25 24 13 12 11 10 9 8 23 22 保留 7 6 21 20 19 18 17 5 4 3 2 1 PRIO[1:0] MSIZE[1:0] PSIZE[1:0] MNAGA PNAGA CIRC DIR ERRIE HTIE TCIE rw rw rw rw rw rw rw rw rw rw rw rw rw 16 0 CHEN rw 位/位域 31:15 名称 保留 描述 保留在复位值 14 MEMTOMEM 存储器到存储器模式 0: 关闭存储器到存储器模式 1: 开启存储器到存储器模式 13:12 PRIO[1:0] 该通道的软件优先级 00: 低 01: 中 10: 高 11: 极高 11:10 MSIZE[1:0] 存储器端的传输数据尺寸 00: 8-bit 01: 16-bit 10: 32-bit 11: 保留 9:8 PSIZE[1:0] 外设端的传输数据尺寸 00: 8-bit 01: 16-bit 10: 32-bit 11: 保留 7 MNAGA 存储器端的地址生成算法 0: 固定地址模式 1: 递增地址模式 6 PNAGA 外设端的地址生成算法 0: 固定地址模式 1: 递增地址模式 5 CIRC 循环模式 0: 关闭循环模式 1: 开启循环模式 130 4 DIR 通道的数据传输方向 0: 从外设端读数据,写往存储器端 1: 从存储器端读数据,写往外设端 3 ERRIE 通道错误中断使能位 0: 关闭通道错误中断 1: 开启通道错误中断 2 HTIE 通道传输一半完成中断使能位 0: 关闭传输一半完成中断 1: 开启传输一半完成中断 1 TCIE 通道传输完成中断使能位 0: 关闭传输完成中断 1: 开启传输完成中断 0 CHEN 通道使能 0: 关闭通道 1: 开启通道 GD32F1x0 用户手册 8.4.4 DMA 通道 x 剩余计数器 (DMA_RCNTx) x = 1..7, 其中x是通道编号 地址偏移: 0x0C + 0d20 × (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 RCNT[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位/位域 31:16 15:0 名称 保留 RCNT[15:0] 描述 必须保留复位值 剩余计数器 该寄存器表示还剩多少数据没传完。它只在相应通道关闭时才接受写访问。一旦相应通 道开启,它就变为只读寄存器,在每个DMA传输之后递减1。如果该寄存器为0,无论通 道开启与否,都不会有数据传输。如果该通道工作在循环模式下,一旦通道的传输任务 完成,该寄存器会被自动重装载为初始设置值。 8.4.5 DMA 通道 x 外设端基地址寄存器 (DMA_PBARx) x = 1..7, 其中x是通道编号 地址偏移: 0x10 + 0d20 × (x – 1) 复位值: 0x0000 0000 注意: 该寄存器应在相应通道关闭时配置。 131 GD32F1x0 用户手册 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PBAR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PBAR[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位/位域 31:0 名称 PBAR[31:0] 描述 外设端基地址 当PSIZE为01时,PBAR[0]被忽略,访问自动与16位地址对齐。 当PSIZE为10时,PBAR[1:0]被忽略,访问自动与32位地址对齐。 8.4.6 注意: DMA 通道 x 存储器端基地址寄存器 (DMA_MBARx) x = 1..7, 其中x是通道编号 地址偏移: 0x14 + 0d20 × (x – 1) 复位值: 0x0000 0000 该寄存器应在相应通道关闭时配置。 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 MBAR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MBAR[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位/位域 31:0 名称 MBAR[31:0] 描述 存储器端基地址 当MSIZE为01时,MBAR[0]被忽略,访问自动与16位地址对齐。 当MSIZE为10时,MBAR[1:0]被忽略,访问自动与32位地址对齐。 132 9 定时器 (TMx) 定时器 定时器(TMx)分为六个类型 TM1 TM2/3 类型 高级 通用(1) GD32F1x0 用户手册 TM6 基本 TM14 通用(2) TM15 通用(3) TM16/17 通用(4) 预分频器 16 位 16 位 16 位 16 位 计数模式 向上,向下,中 向上,向下,中 间对齐 间对齐 只有向上 只有向上 可重复性 ● × × × 捕获/比较 4 通道数 输出互补 & ● 时滞 4 0 1 × × × 中止输入 ● × × × 16 位 只有向上 ● 2 ● ● 16 位 只有向上 ● 1 ● ● 单脉冲 ● ● × × ● ● 正交译码器 ● ● × × × × 从设备控制器 ● ● × × ● tm15_trgo->it0 tm2_trgo->it0 内部连接 tm2_trgo->it1 tm3_trgo->it2 TRGO TO tm3_trgo->it1 ●* × DAC 0->it2 0->it3 0->it3 Debug 模式 ● ● ● ● ● DMA ● ● ● × ● * TM2: tm1_trgo->it0; tm15_trgo->it1; tm3_trgo->it2; 0->it3; TM3: tm1_trgo->it0; tm2_trgo->it1; tm15_trgo->it2; 0->it3; × × ● ● 133 9.1 9.1.1 9.1.2 9.1.3 高级定时器 (TM1) GD32F1x0 用户手册 简介 高级定时器TM1可以用于大量高级控制的场合。它包括一个16位的向上/向下计数器,4个16 位的捕捉/比较寄存器(TM1_CHCC),1个16位的自动装载计数器寄存器(TM1_CARL)和一些控 制寄存器。它适合多种用途,包括通用定时器,输入信号脉冲宽度测量或者产生输出波形例如 单脉冲输出或PWM输出。TM1支持带有两个输入的编码器接口。 高级定时器(TM1)和通用定时器(TMx)完全独立,它们不共享资源但是可以同步。 主要特征  16位向下、向上、向下/上自动装载计数器  16位可编程的预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值  多达4个独立通道,支持以下功能:输入捕获,输出比较,PWM波形产生(边缘或中间对 齐模式),单脉冲模式输出  允许在指定数目的计数器周期之后更新定时器寄存器并重新计数  中止(Break)输入信号可以将模块的输出信号置于一个指定状态  更新事件,输入捕获事件,输出比较事件,中止输入,触发事件可以产生中断/DMA  死区时间可编程的互补输出  使用外部信号控制定时器和定时器互联的同步电路  编码器接口控制器带有两个正交输入译码器  TM1主从模式控制器 功能说明 下图提供了高级定时器内部配置细节 134 图 17. 高级定时器框图 GD32F1x0 用户手册 ETI CH1 CH2 CH3 CH4 BKIN Polarity Selection Edge Detector Prescaler XOR Polarity Selection Input Filter ITR0 ITR1 ITR2 ITR3 TI1F_ED TI1FP1 TI2FP1 Trigger Controller Mode Slave Controller Encoder Interface Input Filter Edge Detector Prescaler TRG_OUTPUT Reset, Enable, Up/Down, Count Prescaler Counter AutoReload Register Repetition counter Repeat Register Capture Register Compare 1 Register DTG Output Control CH1 CH1_N CH2 CH2_N CH3 CH3_N CH4 预分频计数器 预分频器可以将定时器(PCLK)的时钟频率按1到65536之间的任意值分频给计数器(CNT_CLK) 使用。分频系数受预分频寄存器TM1_PSC控制,这个控制寄存器带有缓冲器,它能够在运行 时被改变。新的预分频器的参数在下一次更新事件到来时被采用。 图 18. 当预分频器的参数从1变到2 时,计数器的时序图 PCLK EN CNT_CLK CNT_REG Reload Pulse Prescaler CR Prescaler BUF Prescaler CNT F7 F8 F9 FA FB FC 01 02 03 04 修改预分频系数 0 1 0 1 0 01 0101 01 135 GD32F1x0 用户手册 图 19. 当预分频器的参数从1变到4时,计数器的时序图 PCLK EN CNT_CLK CNT_REG Reload Pulse Prescaler CR Prescaler BUF Prescaler CNT F7 F8 F9 FA FB FC 00 01 修改预分频系数 0 3 0 3 0 01 2301 23 向上计数模式 在向上计数模式中,计数器从0计数到自动加载值(TM1_CARL寄存器),然后重新从0开始计数。 如果使用了重复计数器功能,在向上计数达到设置的重复计数次数加1(TMx_CREP+1)时, 才产生更新事件,否则每次计数器溢出时都会产生更新事件。向上计数模式中,TM1_CTLR1 寄存器中的计数方向控制位应该被设置成0。 可以将TM1_EVG寄存器的UPG位置1来设置更新事件,计数值会被清0,并产生更新事件。 设置TM1_CTLR1寄存器的UPDIS位可以禁止更新事件。 一旦发生更新事件,所有的寄存器(重复计数器,自动重载寄存器,预分频寄存器)都将被更新。 下图给出一些例子,当TMx_CARL=0x63时计数器在不同时钟频率下计数器的动作 136 图 20. 计数器时序图,内部时钟分频系数为1 GD32F1x0 用户手册 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 5E 5F 60 61 62 63 00 01 02 03 04 05 06 07 图 21.计数器时序图,内部时钟分频系数为2 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 61 62 63 00 01 02 03 04 137 图 22.计数器时序图,内部时钟分频系数为4 GD32F1x0 用户手册 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 62 63 00 01 图 23.计数器时序图,内部时钟分频系数为N PCLK CNT_CLK CNT_REG 31 32 00 overflow Update event (UPE) Update interrupt flag (UPIF) 138 图 24. 计数器时序图,当ARSE=0时更新事件 GD32F1x0 用户手册 PCLK EN CNT_CLK CNT_REG 5E 5F 60 61 62 63 00 01 02 03 04 05 06 07 overflow Update event (UPE) Update interrupt flag (UPIF) Auto-reload register 65 63 修改 CARL 的值 图 25.计数器时序图,当ARSE=1时更新事件 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) Auto-reload register Auto-reload shadow register 60 61 62 63 64 65 00 01 02 03 04 05 06 07 65 63 修改 CARL 的值 65 63 139 向下计数模式 GD32F1x0 用户手册 在向下模式中,计数器从自动装入的值(TM1_CARL寄存器的值) 开始向下计数到0,然后从自 动装入的值重新开始。如果使用了重复计数器,当向下计数达到重复计数寄存器中设定的次数 加1(TMx_CREP+1)后,才产生更新事件,否则每次计数器下溢时都会产生更新事件。向下 计数模式中,TM1_CTLR1寄存器中的计数方向控制位DIR应该被置1。 将TM1_EVG寄存器的UPG位置1可以产生更新事件,更新事件会将计数值初始化为计数器重 载值。 将TM1_CTLR1寄存器的UPDIS位置1将禁止更新事件。 一旦产生更新事件,所有的寄存器(重复计数器,自动重载寄存器,预分频寄存器)都将被更新。 下图给出一些例子,当TMx_CARL=0x63时计数器在不同时钟频率下计数器的动作。 图 26.计数器时序图,内部时钟分频系数为1 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 05 04 03 02 01 00 63 62 61 60 5F 5E 5D 5C 140 图 27.计数器时序图,内部时钟分频系数为2 GD32F1x0 用户手册 PCLK EN CNT_CLK CNT_REG 002 001 000 063 062 061 060 05F overflow Update event (UPE) Update interrupt flag (UPIF) 图 28.计数器时序图,内部时钟分频系数为4 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 001 000 063 062 141 图 29.计数器时序图,内部时钟分频系数为N PCLK CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 030 02F GD32F1x0 用户手册 063 图 30.计数器时序图,不使用计数器时的更新事件 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) Auto-reload register 05 04 03 02 01 00 63 62 61 60 5F 5E 5D 5C 65 63 修改 CARL 的值 中央对齐计数模式 在中央对齐模式,计数器从0开始计数到自动加载的值,然后向下计数到0。向上计数模式中, 定时器模块在计数器计数到自动加载值-1产生一个上溢事件;向下计数模式中,定时器模块在 计数器计数到1时产生一个下溢事件。TM1_CTLR1寄存器中的计数方向控制位DIR只读,且指 示了中间对齐模式下的计数方向。计数方向被硬件自动更新。 将TM1_EVG寄存器的UPG位置1可以初始化计数值为0,并产生一个更新事件,而无需考虑计 142 数器在中央模式下是向上计数还是向下计数。 GD32F1x0 用户手册 当向下计数(TM1_CTLR1寄存器的CAM为―01‖)时发生下溢事件或向上计数时发生上溢事件 (TM1_CTLR1寄存器的CAM为―10‖),或者二者同时发生(TM1_CTLR1寄存器的CAM为―11‖), TM1_EVG寄存器的UPIF位能被置1。 将TM1_CTLR1寄存器的UPDIS位置1可以禁止更新事件 一旦产生更新事件,所有的寄存器(重复计数器,自动重载寄存器,预分频寄存器)都将被更新。 下图给出一些例子,当TMx_CARL=0x5时计数器在不同时钟频率下计数器的动作 图 31.计数器时序图,内部时钟分频系数为1, TMx_CARL = 0x5 PCLK EN CNT_CLK CNT_REG underflow overflow Update event (UPE) Update interrupt flag (UPIF) 04 03 02 01 00 01 02 03 04 05 04 03 02 01 143 图 32.计数器时序图,内部时钟分频系数为2 GD32F1x0 用户手册 PCLK EN CNT_CLK CNT_REG 003 002 001 000 001 002 003 004 underflow Update event (UPE) Update interrupt flag (UPIF) 图 33.计数器时序图,内部时钟分频系数为4, TMx_CARL=0x63 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 061 062 063 062 144 图 34.计数器时序图,内部时钟分频系数为N GD32F1x0 用户手册 PCLK CNT_CLK CNT_REG underflow Update event (UPE) Update interrupt flag (UPIF) 030 02F 001 000 图 35.计数器时序图, 当ARSE=1 (计数器下溢)时的更新事件 PCLK EN CNT_CLK CNT_REG underflow Update event (UPE) Update interrupt flag (UPIF) Auto-reload register Auto-reload shadow register 06 05 04 03 02 01 00 01 02 03 04 05 06 07 65 63 修改 CARL 的值 65 63 145 GD32F1x0 用户手册 图 36.计数器时序图, 当ARSE=1 (计数器上溢)时的更新事件 PCLK EN CNT_CLK CNT_REG 7A 7B 7C 7D 7E 7F 63 62 61 60 5F 5E 5D 5C overflow Update event (UPE) Update interrupt flag (UPIF) Auto-reload register Auto-reload shadow register 80 63 修改 CARL 的值 65 63 重复计数器 重复计数器是用来在N+1个计数周期之后产生更新事件(N为TM1_CREP寄存器的CREP)。向 上计数模式下,重复计数器在每次计数器上溢时递减;向下计数模式下,重复计数器在每次计 数器下溢时递减;在中央对齐模式下,重复计数器在计数器上溢和下溢时递减。 将TM1_EVG寄存器的UPG位置1可以重载TM1_CREP寄存器中CREP的值并产生一个更新事 件。 在中央对齐模式下,如果CREP为奇数值,一旦CREP寄存器被写入并且计数器已经启动,每 次溢出和下溢时都发生更新事件。如果CREP在计数器开始之前被写入,在上溢时发送更新事 件;如果CERP在计数器开始之后被写入,则在下溢时发生更新事件。 146 GD32F1x0 用户手册 图 37. 不同模式及不同TMx_CREP寄存器设置下更新速率的例子 Center-aligned mode Upcounting Edge-aligned mode Downcounting Edge-aligned mode CREP = 0 CREP= 1 时钟选择 决定内部预分频计数器时钟源的定时器模块时钟控制器的描述如下。  内部定时器时钟PCLK 如果禁止了从模式,默认用来驱动计数器预分频器的内部时钟源是APB2时钟CK_APB2。如果 使能从模式控制器(将TM1_SMC寄存器的SMC区域设置为包括0x1, 0x2, 0x3和0x7),预分频器 被其他时钟源(由TM1_SMC寄存器的TRGS区域选择,说明如下)驱动。当从模式选择位SMC 被设置为0x4, 0x5和0x6,计数器预分频器时钟源由内部时钟PCLK提供。 图 38. 内部时钟分频为1时正常模式下的控制电路 PCLK EN UPG Reload Pulse CNT_CLK CNT_REG 17 18 19 20 21 22 23 00 01 02 03 04 05 06  正交译码器 TM1_SMC寄存器的SMC区域应该被设置为0x1, 0x2或0x3来选择正交译码器模式。正交译码 器功能使用TM1_CH1和TM1_CH2引脚的两个输入状态产生时钟脉冲驱动计数器预分频器。内 部时钟源信号的每次转变时计数方向控制位DIR也被硬件自动改变。输入信号源可以只来源于 TM1_CH1引脚,只来源于TM1_CH1引脚或者TM1_CH1和TM1_CH2引脚。 147  内部触发输入 (ITI) GD32F1x0 用户手册 计数器预分频器能在ITI信号的每个上升沿和下降沿计数。此模式可以通过设置TM1_SMC寄存 器 的 SMC 区 域 为 0x6 来 选 择 , 此 时 计 数 器 将 作 为 一 个 事 件 计 数 器 。 输 入 事 件 ITI 能 通 过 设 置 TRGS区域选择。当ITI信号被选为时钟源,内部边沿监测电路将在每个ITI信号上升沿或下降沿 产生一个时钟脉冲来驱动计数器预分频器。  外部输入引脚 (TIx) 外部引脚TM1_TIx信号的上升沿和下降沿能驱动计数器预分频器计数。此模式可以通过设置 SMC 区 域 为 0x7 及 设 置 TRGS 区 域 为 0x4, 0x5 或 0x6 来 选 择 。 注 意 TIx源 于 数 字 滤 波 器 对 TM1_TIx采样。  外部输入触发 (ETIF) 外部引脚TM1_ ETI信号的每个上升沿或下降沿能驱动计数器预分频器计数。此模式可以通过 设置TM1_SMC寄存器的ECM2E位为1来选择。其他选择ETIF信号作为时钟源的方式为设置 SMC区域为0x6和设置TRGS区域为0X7。注意DTIF信号源于数字滤波器对TM1_ETI引脚信号 的采样。如果选择ETIF信号为时钟源,触发控制器包括边沿监测电路将在每个DTIF信号上升 沿产生一个时钟脉冲来为计数器预分频器提供时钟。 捕获/比较通道 TM1拥有四个独立的通道用于捕获输入或比较输出是否匹配。每个通道都围绕一个通道捕获比 较寄存器建立,包括一个输入级,通道控制器和输出级。  输入捕获级 输入级包括一个数字滤波器,一个通道极性选择,边沿检测和一个通道预分频器。通道1的输 入信号(TI1)可以选择来自TM1_CH1信号或者TM1_CH1, TM1_CH2和TM1_CH3信号异或后 的信号。通道输入信号(TIx)被一个数字滤波器采样来产生一个滤波输入信号TIxF。然后通道极 性和边沿监测模块产生一个TIxFP1或TIxFP2信号,来实现输入捕捉功能。通道输入预分频寄 存器(CHx_ICP)可以设置有效输入事件数目。 148 图 39. 捕获/比较通道(例如:通道1输入级) GD32F1x0 用户手册 TI1 filter fDTS downcounter CH1ICF[3:0] CHCTLR1 TI1F_Rising 0 Edge Detector TI1F_Falling 1 CH1P/ CH1NP CHE TI1FP1 TI2FP1 TRC 01 IC1 10 11 divider /1, /2, /4, /8 CH1M[ 1:0 ] CHCTLR1 CH1ICP[1:0] CHCTLR1 CH1E CHE  通道控制器 定时器有4个独立的通道用来捕获输入或输出匹配比较 用于输入捕获模式下,当捕获事件发生时,TM1_CHCCx 影子寄存器首先捕获计数值然后传 送到TM1_CHCCx 预装载寄存器中。 用于输出匹配比较模式下,TM1_CHCCx预装载寄存器的值被复制到相应的影子寄存器中,然 后计数值和影子寄存器的值比较。 图 40. 捕获/比较通道1主电路 CHCC1 CH1M[0] CH1M[1] CH1ICP CH1E CH1G TM_EVG APB BUS MCU-peripheral interface Capture/compare preload register Capture/compare shadow register Counter CNT>CHCC1 CNT=CHCC1 CHCC1 CH1M[0] CH1M[1] CH1OSE UPE 149  输出级 GD32F1x0 用户手册 TM1有四个用于匹配比较、单脉冲输出和PWM输出功能的通道。 图 41.捕获/比较通道输出级 (通道1到 3) ETI CNT>CHCC1 CNT=CHCC1 Output mode controller CH1OCE CH1OM[2:0] CHCTLR1 Dead-time generator DT[7:0] BKDT CHE CH1M[ 1:0 ] x0 10 11 CHE CH1P 0 1 CHE CH1E Output OC enable circuit 11 10 x0 CH1M[ 1:0 ] CHCTLR1 0 1 CH1NP CHE Output enable circuit OC_N CHE CH1NE BKDT POE ROS IOS 图 42.捕获/比较通道输出级 (通道4) ETI CNT>CHCC1 CNT=CHCC1 Output mode controller CH4OCE CH4OM[2:0] CHCTLR1 图 43. 输出比较模式,在OC1上切换 0 1 CH4P CHE Output enable OC circuit CHE CHxE BKDT POE ROS CNT_REG 0039 003A 003B B200 B201 CHCC1 oc1ref=OC1 003A B201 修改CHCC1`的值到 0xB201 当CNT_REG的值达到CHCC1 的值后,会产生输出中断 通道用于输入捕获时,当一个有效输入信号的边沿跳变时,计数值被捕获到捕获/比较寄存器 (TM1_CHCCx)中。一旦捕获事件发生,TM1_STR寄存器的CHxIF标志位被置1。如果CHxIF 150 GD32F1x0 用户手册 位已经被置1,还没来得及被软件清除,此通道上又有另一个捕获事件发生,相应通道捕获溢 出标志位CHxOF将被置1。一旦捕获事件发生,CHxDE位决定了是否产生DMA请求,CHxIE 位决定了是否产生中断。 输入捕获模式也可以用于TM1_CHx(TIx)引脚的信号脉宽测量。 通道输出参考信号 当TM1用于输出匹配比较模式下,设置CHxOM位可以定义OCxREF信号(通道x输出参考信号) 类型。OCxREF信号有一些输出功能类型,包括,设置CHxOM=0x00可以保持原始电平,设 置CHxOM=0x01可以将OCxREF信号设置为高电平,设置CHxOM=0x02可以将OCxREF信号 设置为低电平,在计数值和TM1_CHCCx寄存器的值匹配时,设置CHxOM=0x03可以翻转输出 信号。 PWM模式1和PWM模式2输出是另一种类型的OCxREF输出,具体设置是通过设置CHxOM =0x06 或 0x07 来 完 成 的 。 在 这 些 模 式 中 , OCxREF 信 号 电 平 的 改 变 取 决 于 计 数 方 向 , 以 及 TM1_CHCCx寄存器值和计数值之间的关系。详情参考相应位定义。 设置CHxOM=0x04或0x05可以实现OCxREF信号的强制输出功能。输出比较信号能够直接由 软件强置为有效或无效状态,而不依赖于输出比较寄存器和计数器间的比较结果。 当 ETIF 信 号 源 于 外 部 TM1_ ETI 引 脚 且 被 设 置 为 高 电 平 ( 设 置 TM1_CHCTLR1 寄 存 器 的 CHxOCE位为1)时,OCxREF信号被强制变为低电平。直到下一次更新事件发生,OCxREF信 号才会回到它的有效状态。 互补输出及死区时间 TM1 可 以 输 出 两 路 互 补 信 号 。 互 补 信 号 OCx 和 OCxN 由 一 些 控 制 位 的 组 合 实 现 : 寄 存 器 TM1_CHE的CHxE位和CHxNE位,寄存器TM1_BKDT和TM1_CTLR2的POE, ISOx, ISOxN, IOS和ROS位。输出极性由TM1_CHE寄存器的CHxP位和CHxNP位决定。 如果CHxE, CHxNE和POE位都为1,会插入死区时间。OCx输出的上升沿和OCxREF的上升沿 相比有一个延迟;OCxN输出的上升沿和OCxREF的下降沿相比有一个延迟。延迟的值是一个 8位的死区时间计数器,由TM1_BKDT寄存器的DT区域决定。如果延迟值大于有效输出(OCx 或OCxN)宽度,将不会产生相应信号脉冲。 图 44. 带有死区时间的互补输出 OCxREF OCx OCxN Dead_time Dead_time 151 图 45. 延迟大于负脉冲的死区时间波形 OCxREF OCx OCxN GD32F1x0 用户手册 Dead_time 图 46. 延迟大于正脉冲的死区时间波形 OCxREF OCx OCxN Dead_time 中止功能 使用中止功能时,输出OCx和OCxN信号电平被以下位控制,TM1_BKDT寄存器的POE, IOS 和ROS 位,TM1_CTLR2寄存器的ISOx 和ISOxN位。中止事件发生时,OCx和OCxN信号输 出不能在同一时间同时处于有效电平上。中止源既可以是中止输入引脚又可以是一个HSE时钟 失败事件。时钟失败事件由RCC中的时钟监视器(CKM)产生。将TM1_BKDT寄存器的BRKE位 置1可以使能中止功能。TM1_BKDT寄存器的BRKP位决定了中止输入极性。 发生中止时,POE位被异步清除,一旦POE位为0,配置TM1_CTLR2寄存器的ISOx位驱动输 出OCx和OCxN的电平。如果IOS=0,定时器释放输出使能,否则输出使能仍然为高。起初互 补输出被置于复位状态,然后死区时间产生器重新被激活,以便在一个死区时间后驱动输出, 输出电平由ISOx和ISOxN位配置。 发生中止时,TM1_STR寄存器的BKIF位被置1。如果BKIE=1,中断产生。如果BKDE=1,发 送一个DMA请求。 152 图 47. 中止功能相应的输出表现 GD32F1x0 用户手册 Break_In OCxREF OCx OCxN not implemented CCxP=0,ISOx=1 OCx OCxN not implemented CCxP=0,ISOx=0 OCx OCxN not implemented CCxP=1,ISOx=1 OCx OCxN not implemented CCxP=0,ISOx=1 OCx OCxN delay delay delay OCxE=1, CCxP=0,ISOx=0,CCxNE=1,CCxNP=0,ISOxN=1 OCx OCxN delay delay delay OCxE=1, CCxP=0,ISOx=1,CCxNE=1,CCxNP=1,ISOxN=1 OCx OCxN OCxE=1, CCxP=0,ISOx=0,CCxNE=0,CCxNP=0,ISOxN=1 OCx OCxN OCxE=1, CCxP=0,ISOx=1,CCxNE=0,CCxNP=0,ISOxN=0 OCx OCxN OCxE=1, CCxP=0,CCxNE=0,CCxNP=0,ISOx=0,ISOxN=0 or ISOx=0,ISOxN=1 单脉冲模式 一旦设置定时器运行在单脉冲模式下,没有必要设置TM1_CTLR1寄存器的定时器使能位 CEN=1来使能计数器。触发信号沿或者软件写CEN=1都可以产生一个脉冲,此后CEN位一直 保持为1直到更新事件发生或者CEN位被软件写0。如果CEN位被软件清0,计数器停止工作, 计数值被保持。如果CEN值被硬件更新事件自动清0,计数器将被再次初始化。 单 脉 冲 模 式 下 , 将 CEN 位 置 1 产 生 的 触 发 有 效 边 沿 会 使 能 计 数 器 。 然 而 , 执 行 计 数 值 和 TM1_CHCCx寄存器值的比较结果依然存在一些时钟延迟。为了最大限度减少延迟,用户可以 将TM1_CHCTLR1寄存器的CHxOEF位置1。单脉冲模式下,触发上升沿产生之后,OCxREF 信 号将被立即强制转换为另一种状态,因为不考虑比较结果的比较匹配事件发生。只有输出通道 配置为PWM1或PWM2输出运行模式下时 CHxOEF位才可用,触发源来源于触发信号。 153 图 48. 单脉冲模式 TI2 OC1REF OC1 TIM_CNT CARL CCR GD32F1x0 用户手册 T 正交译码器 正交译码器功能使用两个源于TM1_CH1和TM1_CH2引脚的正交输入TI1和TI2各自相互作用 产生计数值。在每个输入源改变期间,DIR位被硬件自动改变。输入源可以是只有TI1,只有 TI2或TI1和TI2。选择模式可以设置SMC=0x01, 0x02或0x03来完成。改变计数方向的机制如下 图所示。正交译码器可以用作一个带有方向选择的外部时钟,意味着计数器在内部从0到重载 值持续计数。因此,用户必须在计数器开始计数前配置TM1_CARL寄存器。 154 表 9. 计数方向对编码器信号 计数模式 电平 GD32F1x0 用户手册 TI1FP1 上升 下降 TI2FP2 上升 下降 只有TI1 只有TI2 TI1和TI2 TI2FP=1 TI2FP=0 TI1FP=1 TI1FP=0 TI2FP=1 TI2FP=0 TI1FP=1 TI1FP=0 向下 向上 向下 向上 X X 向上 向下 向上 向下 X X 向上 向下 X X 向上 向下 向下 向上 X X 向下 向上 注意: "-" 意思是"无计数"; "X" 意思是不可能. 图 49. 编码器接口模式下计数器运行实例 TI1 TI2 Count UP down 图 50. 带有TI1FP1极性转换的编码器接口模式下的例子 TI1 TI2 Count down UP 155 从控制器 GD32F1x0 用户手册 TM1能够在多种模式下和一个外部的触发同步,包括复位模式,暂停模式和触发模式。模式选 择通过设置TM1_SMC寄存器的SMC区域来完成。这些模式的触发输入可以通过TMx_SMC寄 存器的TRGS区域来选择,下面以TI1信号为例。从控制器运行模式参见附加章节。  复位模式 在TI1信号的上升沿来临时,计数器和它的预分频器能够重新被初始化,此时更新事件生成寄 存器位UPG将自动被硬件置位,触发事件标志位被置1,然后计数器和它的预分频器被初始化。 尽管UPG位被硬件置1,更新事件可能并不会发生,它取决于更新事件禁止控制位UPDIS是否 为1。如果UPDIS被置1,将不产生更新事件,然而当TI1上升沿来临时计数器和它的预分频器 仍将被初始化。如果TM1_CTLR1寄存器的UPDIS位为0,更新事件在TI1上升沿来临后发生, 所有的预加载寄存器将被更新,TI1的上升沿和CNT_REG被清零之间的延时取决于TI1的同步 电路。 图 51. 复位模式的控制电路 CNT_CLK CNT_REG TI1 UPG TRGIF 60 61 62 63 00 01 02 03 04 00 01 02 03 04  暂停模式 暂停模式下,选择的TI1输入信号电平用来控制计数器开启/停止运行。当选择的TI1信号为高电 平时计数器开始计数,当TI1信号变为低电平时停止计数。此处计数器将保持它的当前值不变 且不再被重启。 156 图 52. 暂停模式下的控制电路 CNT_CLK CNT_REG 52 53 54 55 56 TI1 EN TRGIF GD32F1x0 用户手册 57 58 59  触发模式 计数器被禁止计数之后,当TI1上升沿来临时计数器可以重新开始计数。当一个TI1上升沿来临, 计数器从当前值开始计数。注意TI1信号仅用来使能计数器计数,不能控制计数器停止计数。 图 53. 触发模式下的控制电路 CNT_CLK CNT_REG 56 TI1 EN TRGIF 57 58 59 5A 5B 5C 5D 5E 5F 定时器互连 定时器互相之间可以级联或者同步。可以通过配置一个定时器工作在主模式另一个定时器工作 在从模式来实现。下图显示了一些主从模式触发选择的例子。 下图显示了当定时器 1 配置为从模式时的触发选择 157 图 54. 定时器1主/从模式的例子 GD32F1x0 用户手册 TIMER1 TIMER 15 Prescaler Counter Master mode TRGO1 IT0 TRGS control TIMER 2 Master Prescaler Counter mode TRGO1 IT1 control TIMER 3 Prescaler Counter Master mode control TRGO1 Trigger Slave mode IT2 selection control Prescaler Counter TI1F_ED TI1FP1 TI2FP2 ETIF trigger selection 其他互连的例子:  定时器 2 作为定时器 1 的预分频器 参考下图连接配置定时器2为定时器1的预分频器,按以下步骤去做: 1. 配置定时器2为主模式,选择其更新事件(UPE)为触发输出 (配置TM2_CTLR2寄存器的 MMC=010)。定时器2在每次计数器溢出时,输出一个周期信号。 2. 配置定时器2周期 (TM2_CARL寄存器). 3. 选择定时器1输入触发源为定时器2 (配置TM1_SMC寄存器的TRGS=001). 4. 配置定时器1在外部时钟模式1 (配置TM1_SMC寄存器的SMC=111). 5. 写1到CEN位启动定时器1 (TM1_CTLR1寄存器). 6. 写1到CEN位启动定时器 2 (TM2_CTLR1寄存器).  用定时器 2 的使能/更新信号来启动定时器 1 用定时器2的使能信号来启动定时器1,参见下图,在定时器2的使能输出触发的分频内部时钟 下,定时器1从当前值开始计数。 当定时器1接收到触发信号,它的CEN位被自动置1,计数器计数直到关闭。两个计数器时钟频 率都是PCLK时钟经过预分频器3分频(fCNT_CLK = fPCLK/3)。按下面步骤进行: 1. 配置定时器2为主模式,发送它的使能信号作为触发输出(配置TM2_CTLR2寄存器的 MMC=001) 2. 配置定时器1选择输入触发来自定时器2 (配置TM1_SMC寄存器的TRGS=001). 158 GD32F1x0 用户手册 3. 配置定时器1在触发模式 (配置TM1_SMC寄存器的SMC=110). 4. 写1到CEN来开启定时器2 (TM2_CTLR1寄存器). 图 55. 用定时器2的使能输出触发定时器1 PCLK TIMER2_EN TIMER2_CNT_REG TIMER1_TRGIF TIMER1_CNT_REG 61 62 63 11 12 13 14 在这个例子中,我们也可以使用更新事件代替使能信号作为触发源。参考下图,按以下步骤进 行: 1. 配置定时器2在主模式下,发送它的更新事件(UPE)作为触发输出(配置TM2_CTLR2寄存器 的MMC=010). 2. 配置定时器2周期 (TM2_CARL寄存器). 3. 配置定时器1获取来自定时器2的输入触发信号 (配置TM1_SMC寄存器的TRGS=001). 4. 配置定时器1在触发模式 (配置TM1_SMC寄存器的SMC=110). 5. 写1到CEN位来启动定时器2 (TM2_CTLR1寄存器). 图 56. 用定时器2的更新来触发定时器1 PCLK TIMER2_UPE TIMER2_CNT_REG 62 63 00 01 02 TIMER1_TRGIF TIMER1_EN TIMER1_CNT_REG 11 12 13 14  使用定时器 2 的使能/OC1 参考信号来使能定时器 1 计数。 在这个例子中,我们使用定时器2的使能输出来控制定时器1的使能。参考下图,在定时器2被 使能后,定时器1在内部分频的时钟上开始计数。两个计数器的时钟频率都是由CK_INT时钟三 分频得来(fCK_CNT = CK_INT/3),按以下步骤做: 159 GD32F1x0 用户手册 1. 配置定时器2在主模式,配置其输出使能信号作为触发输出(配置TM2_CTLR2寄存器的 MMC=001). 2. 配置定时器1从定时器2获取输入触发 (配置TM1_SMC寄存器的TRGS=001). 3. 配置定时器1工作在暂停模式 (配置TM1_SMC寄存器的SMC=101). 4. 写1到CEN位来使能定时器1 (TM1_CTLR1寄存器) 5. 写1到CEN位来启动定时器2 (TM2_CTLR1寄存器). 6. 写0到CEN位来关闭Stop 定时器2 (TM2_CTLR1寄存器). 图 57. 用定时器2的使能来选通定时器1 PCLK TIMER2_EN TIMER2_CNT_REG TIMER1_TRGIF TIMER1_CNT_REG 61 62 63 11 12 13 这个例子中,我们也可以使用OCx_Ref代替使能信号输出作为触发源。按以下步骤做: 1. 配 置 定 时 器 2 在 主 模 式 下 , 配 置 其 输 出 比 较 1 参 考 信 号 (OC1REF) 为 触 发 输 出 ( 配 置 TM2_CTLR2寄存器的MMC=100). 2. 配置定时器2的OC1REF波形 (TM2_CHCTLR1寄存器). 3. 配置定时器1获取来自定时器2的输入触发 (配置TM1_SMC寄存器的TRGS=001). 4. 配置定时器1工作在暂停模式 (配置TM1_SMC寄存器的SMC=101). 5. 写1到CEN位来使能定时器1 (TM1_CTLR1寄存器). 6. 写1到CEN位来开启定时器 2 (TM2_CTLR1寄存器). 160 图 58. 用定时器2的OC1REF选通定时器1 GD32F1x0 用户手册 PCLK TIMER2_CNT_REG 60 61 62 63 00 01 TIMER2_OC1_REF TIMER1_TRGIF TIMER1_CNT_REG 11 12 13 14  使用一个外部触发来同步两个定时器 配置定时器2的使能信号触发定时器1的开启,配置定时器2的TI1输入信号上升沿来触发定时器 2。为了确保两个定时器同步开启,定时器2必须配置在主/从模式。按以下步骤做: 1. 配 置 定 时 器 2 工 作 在 从 模 式 来 获 取 来 自 TI1 的 触 发 输 入 ( 配 置 TM2_SMC 寄 存 器 的 TRGS=100). 2. 配置定时器2工作在触发模式 (配置TM2_SMC 寄存器的SMC=110). 3. 写MSM=1(TM2_SMC寄存器)来配置定时器2工作在主/从模式 4. 配置定时器1的触发输入来自定时器2 (配置TM1_SMC 寄存器的TRGS=001). 5. 配置定时器1工作在触发模式 (配置TM1_SMC 寄存器的SMC=110). 定时器2的TI1信号产生上升沿时,两个定时器的计数器在内部时钟下开始同步计数,二者的 TRGIF标志位都被置1。 161 图 59. 用定时器2的TI1输入来触发定时器1和定时器2 GD32F1x0 用户手册 PCLK TIMER2_TI1 TIMER2_TRGIF TIMER2_EN TIMER2_CK TIMER2_CNT_REG TIMER1_TRGIF TIMER1_EN TIMER1_CK TIMER1_CNT_REG 00 01 02 03 00 01 02 03 定时器 debug 模式 当微控制器在调试模式,若Cortex™-M3内核停止,且MCUDBG模块中DBG_TMx_STOP配置 位被置1,TMx计数器停止。 9.2 TM1 寄存器 9.2.1 TM1 控制寄存器 1 (TM1_CTLR1) 地址偏移: 0x00 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CDIV[1:0] ARSE CAM[1:0] DIR SPM UPS UPDIS CEN rw rw rw rw rw rw rw rw rw rw 位 15:10 9:8 区域 保留 CDIV 说明 必须保持复位值 时钟分频 软件配置CDIV位规定定时器时钟(PCLK) 和死区时间、采样时钟(DTS)之间的分频系数, 该位被死区时间产生器和数字滤波器使用 00: fDTS=fPCLK 162 01: fDTS= fPCLK /2 10: fDTS= fPCLK /4 11: 保留 GD32F1x0 用户手册 7 ARSE 自动重载影子使能 0: 禁止TMx_CARL寄存器的影子寄存器 1: 使能TMx_CARL寄存器的影子寄存器 6:5 CAM 中央对齐模式选择 00: 无中央对齐模式(边沿对齐模式). DIR位指定了计数方向 01: 中央对齐模式1. 计数器交替地向上和向下计数。通道的输出比较中断标志位配置为 输出模式(TMx_CHCTLRx寄存器中CHxM=00),只有在计数器向下计数时被置1。 10: 中央对齐 模式 2. 计数器交替地向上和向下计数. 通道的输出比较中断标志位配置 为输出模式(TMx_CHCTLRx寄存器中CHxM=00),只有在计数器向上计数时被置1。 11: 中央对齐 模式 3. 计数器交替地向上和向下计数. 通道的输出比较中断标志位配置 为输出模式(TMx_CHCTLRx寄存器中CHxM=00),在计数器向上和向下计数时都被置 1。 计数器开启时,不允许从边沿模式转换到中央对齐模式. 4 DIR 方向 0: 向上计数 1: 向下计数 当计数器配置为中央对齐模式或编码器模式时,该位为只读 3 SPM 单脉冲模式. 0: 在发生更新事件时,计数器不停止 1: 在发生下一次更新事件( 清除CEN 位)时,计数器停止 2 UPS 更新请求源 软件通过该位选择更新事件源 0: 使能后,下述任一事件产生更新中断或DMA请求: – UPG位被置1 – 计数器溢出/下溢 – 从模式控制器产生的更新 1: 使能后只有计数器溢出/ 下溢才产生更新中断或DMA 请求。 1 UPDIS 禁止更新 软件通过该位允许/ 禁止更新事件的产生 0: 允许更新事件产生。当以下事件之一发生时,更新事件产生,具有缓存的寄存器被装 入它们的预装载值: – UPG位被置1 – 计数器溢出/下溢 – 从模式控制器产生一个更新事件 1: 禁止更新事件。带有缓存的寄存器保持原有值,如果UPG位被置1或者从模式控制器 产生一个硬件复位事件,计数器和预分频器被重新初始化 0 CEN 使能计数器 163 GD32F1x0 用户手册 0: 禁止计数器 1: 使能计数器 在软件将CEN位置1后,外部时钟、暂停模式和编码器模式才能工作。触发模式可以自 动地通过硬件设置CEN位。 9.2.2 TM1 控制寄存器 2 (TM1_CTLR2) 地址偏移: 0x04 复位值: 0x0000 15 保留 14 ISO4 rw 13 ISO3N rw 12 ISO3 rw 11 ISO2N rw 10 9 8 ISO2 ISO1N ISO1 rw rw rw 7 TI1S rw 6 5 4 MMC[2:0] rw rw rw 3 2 1 0 DMAS CCUC 保留. CCSE rw rw rw 位 区域 15 保留 14 ISO4 13 ISO3N 12 ISO3 11 ISO2N 10 ISO2 9 ISO1N 8 ISO1 7 TI1S 6:4 MMC 说明 必须保持复位值 通道4的空闲输出状态 参见ISO1位 通道3的互补输出空闲状态 参见ISO1N位 通道3的空闲输出状态 参见ISO1位 通道2的互补输出空闲状态 参见ISO1N位 通道2的空闲输出状态 参见ISO1位 通道1的互补输出空闲状态 0: 当POE=0,OC1N=0. 1: 当POE=0,OC1N=1 只有当TMx_BKDT 寄存器的LK[1:0]位为00时此位才可以被修改 通道1的空闲输出状态 0: 当POE=0,OC1=0 1: 当POE=0,OC1=1 如果OC1N生效,一个死区时间后OC1输出改变。此位只有在TMx_BKDT 寄存器的 LK[1:0]位为00的时候可以被更改 通道1触发输入选择 0: 选择TMx_CH1引脚输入作为通道1触发输入 1: TMx_CH1、TMx_CH2 和TMx_CH3 引脚经异或后连到TI1输入 主模式控制 这些位控制TRGO信号的选择,主模式下发给从定时器用于同步功能 164 GD32F1x0 用户手册 000: 复位. TMx_EVG寄存器的UPG位被置1或从模式控制器产生复位触发一次TRGO 脉冲,后一种情况下,TRGO上的信号相对实际的复位会有一个延迟。 001: 使能. 此模式可用于同时启动多个定时器或控制在一段时间内使能从定时器。计数 器使能信号TIMERx_EN 被主模式控制器选为触发输出(TRGO)。当CEN控制位被置1或 者暂停模式下触发输入为高电平时,计数器使能信号被置1。当计数器使能信号受控于触 发输入时,TRGO 上会有一个延迟,除非选择了主/ 从模式。 010: 更新. 更新事件被主模式控制器选为触发输入 011: 捕获/比较脉冲.在发生一次捕获或一次比较成功时,主模式控制器产生一个TRGO 脉冲。 100: 比较. OC1REF 信号被用于作为触发输出 101: 比较. OC2REF 信号被用于作为触发输出 110: 比较. OC3REF 信号被用于作为触发输出 111: 比较. OC4REF 信号被用于作为触发输出 3 DMAS DMA请求源选择 0: 当通道x事件发生,发送通道x的DMA请求 1: 当更新事件发生,发送通道x的DMA请求 2 CCUC 捕获/比较控制影子寄存器更新控制 使能(CCSE=1)捕获/比较控制影子寄存器(CHxE、OCxNE和CMPxM 位)后,该位控制这 些影子寄存器更新的时间 0: CCUG位被置1时更新影子寄存器 1: 当CCUG位被置1或检测到TRGI上升沿时,影子寄存器更新 当通道没有互补输出时,此位无效。 1 保留 必须保持复位值. 0 CCSE 捕获/比较控制影子寄存器使能 0: 影子寄存器CHxE、CHxNE和CHxOM 位被禁止 1: 使能影子寄存器CHxE、CHxNE和CHxOM 位,当这些位被写时,只有当CCUG位被 置1时这些位才被更新 当通道没有互补输出时,此位无效。 9.2.3 TM1 从模式控制寄存器 (TIM1_SMC) 地址偏移: 0x08 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ETPL ECM2E ETPSC[1:0] ETFC[3:0] MSM TRGS[2:0] OCRC. SMC[2:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15 ETPL 说明 外部触发极性 该位选择用ETI还是ETI的反相来作为触发操作 0: ETI不反相,高电平或上升沿有效 165 14 ECM2E 13:12 ETPSC 11:8 ETFC 7 MSM 1: ETI被反相,低电平或下降沿有效 GD32F1x0 用户手册 外部时钟模式2使能 在外部时钟模式2,计数器由ETIF信号上的任意有效边沿驱动 0: 禁止外部时钟模式2 1: 使能外部时钟模式2 将ECM2E 位置1与选择外部时钟模式1并将TRGI连到ETIF(SMC=111和TRGS=111) 具有相同功效。 下述从模式可以与外部时钟模式2同时使用:复位模式,暂停模式和触发模式;但是, 这时TRGI不能是‗111‘。 外部时钟模式1和外部时钟模式2同时被使能时,外部时钟的输入是ETIF 外部触发预分频 外部触发信号ETIP的频率最多是TIMxCLK 频率的1/4。当输入较快的外部时钟时, 可以使用预分频降低ETIP 的频率。 00: 禁止预分频 01: ETIP频率除以2 10: ETIP频率除以4 11: ETIP频率除以8 外部触发滤波控制 数字滤波器是一个事件计数器,它记录到N个事件后会产生一个输出的跳变。这些位定 义了对ETIP信号采样的频率和对ETIP 数字滤波的带宽 0000: 无滤波器. fSAMP = fDTS, N=1. 0001: fSAMP= fPCLK, N=2. 0010: fSAMP= fPCLK, N=4. 0011: fSAMP= fPCLK, N=8. 0100: fSAMP=fDTS/2, N=6. 0101: fSAMP=fDTS/2, N=8. 0110: fSAMP=fDTS/4, N=6. 0111: fSAMP=fDTS/4, N=8. 1000: fSAMP=fDTS/8, N=6. 1001: fSAMP=fDTS/8, N=8. 1010: fSAMP=fDTS/16, N=5. 1011: fSAMP=fDTS/16, N=6. 1100: fSAMP=fDTS/16, N=8. 1101: fSAMP=fDTS/32, N=5. 1110: fSAMP=fDTS/32, N=6. 1111: fSAMP=fDTS/32, N=8. 主-从模式 主-从模式下输入触发上的事件被延迟了,以允许当前定时器和它的从设备通过TRGO完 美同步。如果想要在单个外部事件上同步一些定时器,此模式非常有用。 0: 禁止主-从模式 1: 使能主-从模式 166 6:4 TRGS 3 OCRC 2:0 SMC 触发选择 这些位选择用于同步计数器的触发输入 000: 内部触发输入0 (ITR0) TM15 001: 内部触发输入1 (ITR1) TM2 010: 内部触发输入2 (ITR2) TM3 011: 内部触发输入3 (ITR3) 保留 100: TI1的边沿标志位 (TI1F_ED) 101: 滤波后的通道1输入 (TI1FP1) 110: 滤波后的通道2输入 (TI2FP2) 111: 外部触发输入(ETIF) 从模式被使能后这些位不能改 GD32F1x0 用户手册 OCREF清零信号选择控制 0: OCREF_CLR作为OCREF的清零信号 1: ETIF 作为OCREF的清零信号 从模式控制 000: 关闭从模式. 如果CEN=1,则预分频器直接由内部时钟驱动 001: 编码器模式1. 根据TI1FP1的电平,计数器在TI2FP2的边沿向上/下计数 010: 编码器模式2. 根据TI2FP2的电平,计数器在TI1FP1的边沿向上/下计数 011: 编码器模式3. 根据另一个信号的输入电平,计数器在TI1FP1 和TI2FP2 的 边沿向上/ 下计数 100: 复位模式. 选中的触发输入的上升沿重新初始化计数器,并且更新影子寄存器 101: 暂停模式. 当触发输入为高时,计数器的时钟开启。一旦触发输入变为低,则计数 器停止 110: 触发模式. 计数器在触发输入TRGI 的上升沿启动。计数器不能被从模式控制器关 闭。 111: 外部时钟模式1. 选中的触发输入的上升沿驱动计数器 如果TI1F_ED 被选为触发输入时,不要使用暂停模式。这是因为,TI1F_ ED 在每次TI1F 变化时输出一个脉冲,然而暂停模式是要检查触发输入的电平 9.2.4 TM1 DMA 和中断使能寄存器 (TM1_DIE) 地址偏移: 0x0C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 32 1 0 保留 TRGDE CCUDE CH4DE CH3DE CH2DE CH1DE UPDE BKIE TRGIE CCUIE CH4IE CH3IE CH2IE CH1IE UPIE rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15 保留 说明 必须保持复位值. 14 TRGDE 触发DMA请求使能 0: 禁止触发DMA请求 1: 使能触发DMA请求 167 13 CCUDE 通道控制DMA更新请求使能 0: 禁止通道控制DMA更新请求 1: 使能通道控制DMA更新请求 12 CH4DE 通道4 DMA请求使能 0: 禁止通道4 DMA请求 1: 使能通道4 DMA请求 11 CH3DE 通道3 DMA请求使能 0: 禁止通道3 DMA请求 1: 使能通道3 DMA请求 10 CH2DE 通道2 DMA请求使能 0: 禁止通道2 DMA请求 1: 使能通道2 DMA请求 9 CH1DE 通道1 DMA请求使能 0: 禁止通道1 DMA请求 1: 使能通道1 DMA请求 8 UPDE 更新DMA请求使能 0: 禁止更新DMA请求 1: 使能更新DMA请求 7 BKIE 中止中断使能 0: 禁止中止中断 1: 使能中止中断 6 TRGIE 触发中断使能 0: 禁止触发中断 1: 使能触发中断 5 CCUIE 通道控制更新中断使能 0: 禁止通道控制更新中断 1: 使能通道控制更新中断 4 CH4IE 通道4中断使能 0: 禁止通道4中断 1: 使能通道4中断 3 CH3IE 通道3中断使能 0: 禁止通道3中断 1: 使能通道3中断 2 CH2IE 通道2中断使能 0: 禁止通道2中断 1: 使能通道2中断 1 CH1IE 通道1中断使能 0: 禁止通道1中断 GD32F1x0 用户手册 168 1: 使能通道1中断 0 UPIE 更新中断使能 0: 禁止更新中断 1: 使能更新中断 GD32F1x0 用户手册 9.2.5 TM1 状态寄存器 (TM1_STR) 地址偏移: 0x10 复位值: 0x0000 15 14 13 保留 12 CH4OF rc_w0 11 CH3OF rc_w0 10 CH2OF rc_w0 9 CH1OF rc_w0 8 7 保留. BKIF Res. rc_w0 6 TRGIF rc_w0 5 CCUIF rc_w0 4 CH4IF rc_w0 3 CH3IF rc_w0 2 CH2IF rc_w0 1 CH1IF rc_w0 0 UPIF rc_w0 位 15:13 12 区域 保留 CH4OF 11 CH3OF 10 CH2OF 9 CH1OF 8 保留 7 BKIF 6 TRGIF 5 CCUIF 说明 必须保持复位值. 通道4重复捕获标志 参见CH1OF描述 通道3重复捕获标志 参见CH1OF描述 通道2重复捕获标志 参见CH1OF描述 通道1重复捕获标志 当通道1被配置为输入模式时,在CH1IF标志位已经被置1后,捕获事件再次发生时,该 标志位可以由硬件置1。该标志位由软件清0。 0: 无重复捕获中断发生 1: 发生了重复捕获中断 必须保持复位值. 中止中断标志位 一旦中止输入有效,由硬件对该位置‗1‘。如果中止输入无效,则该位可由软件清‗0‘。 0: 无中止事件产生 1: 中止输入上检测到有效电平 触发中断标志 当发生触发事件时,此标志由硬件置1。此位由软件清0。当从模式控制器处于除暂停模 式外的其它模式时,在TRGI 输入端检测到有效边沿,产生触发事件。当从模式控制器 处于暂停模式时,TRGI的任意边沿都可以产生触发事件。 0: 无触发事件产生 1: 触发中断产生 通道控制更新中断标志 当通道控制更新事件发生时此标志位被硬件置1,此位由软件清0。 169 0: 无通道控制更新中断发生 1: 通道控制更新中断发生 GD32F1x0 用户手册 4 CH4IF 通道4中断标志 参见CH1IF描述 3 CH3IF 通道3中断标志 参见CH1IF描述 2 CH2IF 通道2中断标志 参见CH1IF描述 1 CH1IF 通道1中断标志 此标志由硬件置1软件清0。当通道1在输入模式下时,捕获事件发生时此标志位被置1; 当通道1在输出模式下时,此标志位在一个比较事件发生时被置1。 0: 无通道1中断发生 1: 通道1中断发生 0 UPIF 更新中断标志 此位在任何更新事件发生时由硬件置1,软件清0. 0: 无更新中断发生 1: 发生更新中断 9.2.6 15 14 TM1 事件产生寄存器 (TM1_EVG) 地址偏移: 0x14 复位值: 0x0000 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 BKG TRGG CCUG CH4G CH3G CH2G CH1G UPG w w w w w w w w 位 区域 15:8 保留 7 BKG 6 TRGG 5 CCUG 说明 必须保持复位值. 产生中止事件 该位由软件置1,用于产生一个中止事件,由硬件自动清0。当此位被置1时,POE位被 清0且BKIF位被置1,若开启对应的中断和DMA,则产生相应的中断和DMA传输。 0: 不产生中止事件 1: 产生中止事件 触发事件产生 此位由软件置1,由硬件自动清0. 当此位被置1,TMx_STR寄存器的TRGIF标志位被置1, 若开启对应的中断和DMA,则产生相应的中断和DMA传输。 0: 无触发事件产生 1: 产生触发事件 通道控制更新事件发生 170 GD32F1x0 用户手册 此位由软件置1,由硬件自动清0. 当此位被置1,通道控制寄存器 (CHxE, CHxNE and CHxOM位) 的互补输出被更新。 0: 不产生通道控制更新事件 1: 产生通道控制更新事件 4 CH4G 通道4捕获或比较事件发生 参见CH1G描述 3 CH3G 通道3捕获或比较事件发生 参见CH1G描述 2 CH2G 通道2捕获或比较事件发生 参见CH1G描述 1 CH1G 通道1捕获或比较事件发生 该位由软件置1,用于在通道1产生一个捕获/比较事件,由硬件自动清0。当此位被置1, CC1IF标志位被置1,若开启对应的中断和DMA,则发出相应的中断和DMA请求。此外, 如果通道1配置为输入模式,计数器的当前值被TM1_CHCC1寄存器捕获,如果CH1IF 标志位已经为1,则CH1OF标志位被置1。 0: 不产生通道1捕获或比较事件 1: 发生通道1捕获或比较事件 0 UPG 此位由软件置1,被硬件自动清0。当此位被置1,如果选择了中央对齐或向上计数模式, 计数器被清0。否则(向下计数模式)计数器将载入自动重载值,预分频计数器将同时被清 除。 0: 无更新事件产生 1: 产生更新事件 9.2.7 TM1 通道控制寄存器 1 (TM1_CHCTLR1) 地址偏移: 0x18 复位值: 0x0000 15 CH2 OCE rw 14 13 12 CH2OM[2:0] CH2ICF[3:0] rw rw rw 11 10 CH2 OSE CH2 OFE CH2ICP[1:0] rw rw 输出比较 模式: 9 8 CH2M[1:0] rw rw 7 CH1 OCE rw 6 5 4 CH1OM[2:0] CH1ICF[3:0] rw rw rw 位 区域 说明 15 CH2OCE 通道2输出比较清0使能 参见CH1OCE描述. 14:12 CH2OM 通道2输出比较模式 参见CH1OM描述 11 CH2OSE 通道2输出比较影子寄存器使能 3 2 CH1OSE CH1 OFE CH1ICP[1:0] rw rw 1 0 CH1M[1:0] rw rw 171 参见CH1OSE描述 GD32F1x0 用户手册 10 CH2OFE 通道2输出比较快速使能 参见CH1OFE描述 9:8 CH2M 通道2模式选择 这些位定义了通道的方向和输入信号的选择。只有当通道关闭(TM1_CHE寄存器的 CH2E位被清0)时这些位才可以写。 00: 通道2配置为输出 01: 通道2配置为输入,IC2映射在TI2上 10: 通道2配置为输入,IC2映射在TI1上 11: 通道2配置为输入,IC2映射在TRC上,此模式仅工作在内部触发器输入被选中时(由 TM_SMC寄存器的TRGS位选择)。 7 CH1OCE 通道1输出比较清0使能 当此位被置1,当检测到ETIF输入高电平时,OC1参考信号被清0 0: 使能通道1输出比较清零 1: 禁止通道1输出比较清零 6:4 CH1OM 通道1输出比较模式 此 位 定 义 了 输 出 参 考 信 号 OC1REF 的 动 作 , 而 OC1REF 决 定 了 OC1 、 OC1N 的 值 。 OC1REF高电平有效,而OC1、OC1N的有效电平取决于CH1P、CH1NP位。 000: 冻结. 输出比较寄存器TM1_CHCC1与计数器间的比较对OC1REF不起作用 001: 匹配时设置为高。当计数器的值与捕获/比较寄存器TM1_CHCC1相同时,强制 OC1REF为高。 010: 匹配时设置为低。当计数器的值与捕获/比较寄存器TM1_CHCC1相同时,强制 OC1REF为低。 011: 匹配时翻转。当计数器的值与捕获/比较寄存器TM1_CHCC1相同时,强制OC1REF 翻转。 100: 强制为低. 强制OC1REF为低电平 101: 强制为高. 强制OC1REF为高电平 110: PWM 模式1. 在向上计数时,一旦计数器值小于TM1_CHCC1时,OC1REF 为高 电平,否则为低电平。在向下计数时,一旦计数器的值大于TM1_CHCC1时,OC1REF 为 低电平,否则为高电平。 111: PWM 模式2. 在向上计数时,一旦计数器值小于TM1_CHCC1时,OC1REF 为低 电平,否则为高电平。在向下计数时,一旦计数器的值大于TM1_CHCC1时,OC1REF 为 高电平,否则为低电平。 在PWM模式1或PWM模式2中,只有当比较结果改变了或者输出比较模式中从冻结模式 切换到PWM模式时,OC1REF电平才改变。 当TMx_BKDT寄存器的LK[1:0]=11且CH1M=00时此位不能被改变。 3 CH1OSE 通道1输出比较影子寄存器使能 当此位被置1,TM1_CHCC1寄存器的影子寄存器被使能,影子寄存器在每次更新事件时 都会被更新。 0: 禁止通道1输出/比较影子寄存器 1: 使能通道1输出/比较影子寄存器 仅在单脉冲模式下(TM1_CTLR1寄存器的OPM=1),可以在未确认预装载寄存器情况下 172 2 1:0 位 15:12 11:10 9:8 7:4 CH1OFE CH1M GD32F1x0 用户手册 使用PWM 模式 当TMx_BKDT寄存器的LK[1:0]=11且CH1M=00时此位不能被改变. 通道1输出比较快速使能 该位用于通道配置为PWM模式时加快CC输出对触发输入事件的响应。输出通道将触发 输入信号的有效边沿作为一个比较匹配,OC 被设置为比较电平而与比较结果无关 0: 禁止通道1输出比较快速. 当触发器的输入有一个有效沿时,激活CC1输出的最小延 时为5个时钟周期 1: 使能通道1输出比较快速。当触发器的输入有一个有效沿时,激活CC1输出的最小延 时为3个时钟周期 通道1模式选择 这 些 位 定 义 了 输 入 的 方 向 和 输 入 信 号 的 选 择 。 只 有 当 通 道 关 闭 (TM1_CHE 寄 存 器 的 CH1E位被清0)时这些位才可写。. 00: 通道1配置为输出 01: 通道1配置为输入,IC1映射在TI1上 10: 通道1配置为输入,IC1映射在TI2上 11: 通道1配置为输入,IC1映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位) 输入捕获模式 区域 CH2ICF 说明 通道2输入捕获滤波控制 参见CH1ICF描述 CH2ICP 通道2输入捕获预分频器 参见CH1ICP描述 CH2M 通道2模式选择 此位定义了通道方向和输入信号的选择。只有在通道关闭(TM1_CHE寄存器的CH2E位 被清0)时这些位才可写. 00: 通道2配置为输出 01: 通道2配置为输入,IC2映射在TI2上 10: 通道2配置为输入,IC2映射在TI1上 11: 通道2配置为输入,IC2映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). CH1ICF 通道1输入捕获滤波控制 数字滤波器由一个事件计数器组成,它记录N个输入事件后会产生一个输出的跳变。这 些位定义了TI1输入信号的采样频率和数字滤波器的长度。 0000: 无滤波器,fSAMP= fDTS, N=1 0001: fSAMP= fPCLK, N=2 0010: fSAMP= fPCLK, N=4 0011: fSAMP= fPCLK, N=8 0100: fSAMP=fDTS/2, N=6 173 0101: fSAMP=fDTS/2, N=8 0110: fSAMP=fDTS/4, N=6 0111: fSAMP=fDTS/4, N=8 1000: fSAMP=fDTS/8, N=6 1001: fSAMP=fDTS/8, N=8 1010: fSAMP=fDTS/16, N=5 1011: fSAMP=fDTS/16, N=6 1100: fSAMP=fDTS/16, N=8 1101: fSAMP=fDTS/32, N=5 1110: fSAMP=fDTS/32, N=6 1111: fSAMP=fDTS/32, N=8 GD32F1x0 用户手册 3:2 CH1ICP 通道1输入捕获预分频器 这2位定义了CC1 输入的预分频系数。一旦CH1E =0(TM1_CHE寄存器中),则预分频器 复位。 00: 无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获 01: 每2个事件触发一次捕获 10: 每4个事件触发一次捕获 11: 每8个事件触发一次捕获 1:0 CH1M 通道1模式选择 这两位定义了通道方向和输入信号的选择。只有在通道关闭(TM1_CHE寄存器的CH1E 位被清0)时这些位才可写. 00: 通道1配置为输出 01: 通道1配置为输入,IC1映射在TI1上 10: 通道1配置为输入,IC1映射在TI2上 11: 通道1配置为输入,IC1映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). 9.2.8 TM1 通道控制寄存器 2 (TM1_CHCTLR2) 地址偏移: 0x1C 复位值: 0x0000 15 CH4 OCE rw 14 13 12 CH4OM[2:0] CH4ICF[3:0] rw rw rw 11 CH4 OSE 10 CH4 OFE CH4ICP[1:0] rw rw 输出比较模式 9 8 CH4M[1:0] rw rw 7 CH3 OCE rw 6 5 4 CH3OM[2:0] CH3ICF[3:0] rw rw rw 3 CH3 OSE 2 CH3 OFE CH3ICP[1:0] rw rw 1 0 CH3M[1:0] rw rw 位 15 14:12 区域 CH4OCE CH4OM 说明 通道4输出比较清0使能 参见CH1OCE描述. 通道4输出比较模式 174 11 10 9:8 7 6:4 3 2 1:0 位 15:12 11:10 9:8 CH4OSE CH4OFE CH4M CH3OCE CH3OM CH3OSE CH3OFE CH3M 参见CH1OM描述 GD32F1x0 用户手册 通道4输出比较影子寄存器使能 参见CH1OSE描述 通道4输出比较快速使能 参见CH1OFE描述 通道4模式选择 这两位定义了通道方向和输入信号的选择。只有在通道关闭(TM1_CHE寄存器的CH4E 位被清0)时这些位才可写. 00: 通道4配置为输出 01: 通道4配置为输入,IC4映射在TI4上 10: 通道4配置为输入,IC4映射在TI3上 11: 通道4配置为输入,IC4映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). 通道3输出比较清0使能. 参见CH1OCE描述. 通道3输出比较模式 参见CH1OM描述. 通道3输出比较影子寄存器使能 参见CH1OSE描述. 通道3输出比较快速使能 参见CH1OFE描述 通道1模式选择 这两位定义了通道方向和输入信号的选择。只有在通道关闭(TM1_CHE寄存器的CH3E 位被清0)时这些位才可写. 00: 通道3配置为输出 01: 通道3配置为输入,IC3映射在TI3上 10: 通道3配置为输入,IC3映射在TI4上 11: 通道3配置为输入,IC3映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TMx_SMC寄存器的TRGS位). 输入捕获模式 区域 CH4ICF 说明 通道4输入捕获滤波控制 参见CH1ICF描述 CH4ICP 通道4输入捕获预分频器 参见CH1ICP描述 CH4M 通道4模式选择 这两位定义了通道的方向和输入信号的选择。只有在通道关闭(TM1_CHE寄存器的 175 GD32F1x0 用户手册 CH4E位被清0)时这些位才可写。 00: 通道4配置为输出 01: 通道4配置为输入,IC4映射在TI4上 10: 通道4配置为输入,IC4映射在TI3上 11: 通道4配置为输入,IC4映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). 7:4 CH3ICF 通道3输入捕获滤波控制 参见CH1ICF描述 3:2 CH3ICP 通道3输入捕获预分频器 参见CH1ICP描述 1:0 CH3M 通道3 模式选择 这两位定义了通道的方向和输入信号的选择。只有在通道关闭(TM1_CHE寄存器的 CH3E位被清0)时这些位才可写。 00: 通道3配置为输出 01: 通道3配置为输入,IC3映射在TI3上 10: 通道3配置为输入,IC3映射在TI4上 11: 通道3配置为输入,IC3映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). 9.2.9 TM1 通道使能寄存器 (TM1_CHE) 地址偏移: 0x20 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CH4P CH4E CH3NP CH3NE CH3P CH3E CH2NP CH2NE CH2P CH2E CH1NP CH1NE CH1P CH1E rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 15:14 13 区域 保留 CH4P 12 CH4E 11 CH3NP 10 CH3NE 9 CH3P 说明 必须保持复位值. 通道4极性 参见CH1P描述 通道4使能 参见CH1E描述. 通道3互补输出极性 参见CH1NP描述 通道3互补输出使能 参见CH1NE描述 通道3极性 参见CH1P描述 176 8 CH3E 通道3使能 参见CH1E描述. GD32F1x0 用户手册 7 CH2NP 通道2互补输出极性 参见CH1NP描述. 6 CH2NE 通道2互补输出使能 参见CH1NE描述. 5 CH2P 通道2极性 参见CH1P描述 4 CH2E 通道2使能 参见CH1E描述. 3 CH1NP 通道1互补输出极性 当通道1配置为输出模式,此位定义了互补输出信号的极性。 0: 通道1高电平有效. 1: 通道1低电平有效. 当通道1配置为输入模式时,此位和CH1P联合使用,作为输入信号的极性选择控制信号, 详情请参照CH1P的说明 当TMx_BKDT寄存器的LK[1:0]=11或10 时此位不能被更改. 2 CH1NE 通道1互补输出使能 当通道1配置为输出模式时,将此位置1使能通道1的互补输出 0: 禁止通道1互补输出. 1: 使能通道1互补输出. 1 CH1P 通道1极性 当通道1配置为输出模式时,此位定义了输出信号极性。 0: 通道1高电平有效 1: 通道1低电平有效 当通道1配置为输入模式时, [CH1NP, CH1P] 作为输入信号的极性选择控制位,功能如下: [CH1NP==0, CH1P==0]: 把TIxFP1的上升沿作为捕获/触发的有效信号,并且TIxFP1不 会被翻转。 [CH1NP==0, CH1P==1]: 把TIxFP1的下降沿作为捕获/触发的有效信号,并且TIxFP1会 被翻转。 [CH1NP==1, CH1P==0]: 保留。不可设置。 [CH1NP==1, CH1P==1]: 把TIxFP1的上升沿和下降沿都作为捕获/触发的有效信号,并 且TIxFP1不会被翻转。 当TMx_BKDT寄存器的LK[1:0]=11或10 时此位不能被更改. 0 CH1E 通道1使能 当通道1配置为输入模式时,将此位置1使能OC1信号有效。当通道1配置为输出模式时, 将此位置1使能通道1上的捕获事件。 0: 禁止通道1. 1: 使能通道1. 177 9.2.10 TM1 计数器寄存器 (TM1_CNT) GD32F1x0 用户手册 地址偏移: 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 说明 这些位是当前的计数值。写操作能改变计数器值。 9.2.11 TM1 预分频寄存器 (TM1_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 说明 计数器时钟预分频值 计数器时钟等于PSC时钟除以 (PSC+1),每次当更新事件产生时,PSC 的值 被装入当前预分频寄存器 9.2.12 TM1 计数器自动重载寄存器 (TM1_CARL) 地址偏移: 0x2C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CARL[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15:0 CARL 说明 计数器自动重载值 这些位定义了计数器的自动重载值。 9.2.13 TM1 重复计数寄存器 (TM1_CREP) 地址偏移: 0x30 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 178 GD32F1x0 用户手册 保留 CREP[7:0] rw rw rw rw rw rw rw rw 位 区域 15:8 保留 7:0 CREP 说明 必须保持复位值. 重复计数器的值 这些位定义了更新事件的产生速率。重复计数器计数值减为0时产生更新事件。影子寄存 器的更新速率也会受这些位影响(前提是影子寄存器被使能) 9.2.14 TM1 通道 1 捕获/比较寄存器 (TM1_CHCC1) 地址偏移: 0x34 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CHCC1[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15:0 CHCC1 说明 通道1的捕获或比较值 当通道1配置为输入模式时,这些位决定了上次捕获事件的计数器值。并且本寄存器为只 读。 当通道1配置为输出模式时,这些位包含了即将和计数器比较的值。使能相应影子寄存器 后,影子寄存器值随每次更新事件更新。 9.2.15 TM1 通道 2 捕获/比较寄存器 (TM1_CHCC2) 地址偏移: 0x38 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CHCC2[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15:0 CHCC2 说明 通道2的捕获或比较值 当通道2配置为输入模式时,这些位决定了上次捕获事件的计数器值。并且本寄存器为只 读。 当通道2配置为输出模式时,这些位包含了即将和计数器比较的值。使能相应影子寄存器 后,影子寄存器值随每次更新事件更新。 9.2.16 TM1 通道 3 捕获/比较寄存器 (TM1_CHCC3) 地址偏移: 0x3C 179 复位值: 0x0000 GD32F1x0 用户手册 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CHCC3[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15:0 CHCC3 说明 通道3的捕获或比较值 当通道3配置为输入模式时,这些位决定了上次捕获事件的计数器值。并且本寄存器为只 读。 当通道3配置为输出模式时,这些位包含了即将和计数器比较的值。使能相应影子寄存器 后,影子寄存器值随每次更新事件更新。 9.2.17 TM1 通道 4 捕获/比较寄存器 (TM1_CHCC4) 地址偏移: 0x40 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CHCC4[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15:0 CHCC4 说明 通道4的捕获或比较值 当通道4配置为输入模式时,这些位决定了上次捕获事件的计数器值。并且本寄存器为只 读。 当通道4配置为输出模式时,这些位包含了即将和计数器比较的值。使能相应影子寄存器 后,影子寄存器值随每次更新事件更新。 9.2.18 TM1 中止和死区时间寄存器 (TM1_BKDT) 地址偏移: 0x44 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 POE OAE BRKP BRKE ROS IOS LK[1:0] DT[7:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15 POE 说明 主输出使能 根据OAE位的设置值,该位可以由软件清0或被硬件自动置1。一旦中止输入有效,该位 被硬件异步清0。如果一个通道配置为输出模式,如果设置了相应的使能位(TMx_CHE 寄存器的CHxE、CHxNE位),则开启OC 和OCN 输出。 0: 禁止OC 和OCN输出或强制为空闲状态. 180 14 OAE 13 BRKP 12 BRKE 11 ROS 10 IOS 9:8 LK 7:0 DT 1: 使能通道输出. GD32F1x0 用户手册 自动输出使能 此位定义了POE位是否可以被硬件自动置1。 0: POE位不能被硬件置1 1: 如果中止输入无效,下一次更新事件发生时,POE位能被硬件自动置1。 此位只有在TMx_BKDT寄存器的LK[1:0]=00时才可修改. 中止极性 此位定义了中止输入信号的极性。 0:中止输入低电平有效 1:中止输入高电平有效 中止使能 此位置1使能中止事件和CCS时钟失败事件输入. 0: 禁止中止输入 1: 使能中止输入 只有在TMx_BKDT寄存器的LK[1:0]=00时此位才可修改. 运行模式下―关闭状态‖配置 当POE位被置1,此位定义了通道(带有互补输出且配置为输出模式)的输出状态。 0: 当POE位被置1,通道输出信号 (OC/OCN)被禁止. 1: 当POE位被置1,通道输出信号 (OC/OCN)被使能,和TM1_CHE寄存器CHxE/CHxNE 位有关。 此位在TMx_BKDT寄存器的LK[1:0]=10或11时不能被更改. 空闲模式下―关闭状态‖配置 当POE位被清0,此位定义了已经配置为输出模式的通道的输出状态。 0: 当POE位被清0,通道输出信号(OC/OCN)被禁止. 1: 当POE位被清0,通道输出信号(OC/OCN)被使能,和TM1_CHE寄存器CHxE/CHxNE 位有关。 此位在TMx_BKDT寄存器的LK[1:0]=10或11时不能被更改. 锁定控制 这两位定义了寄存器的写保护特性. 00: 禁止锁定,无写保护. 01: 锁定模式1,TM1_CTLR2寄存器的ISOx/ISOxN位和TM1_BKDT寄存器的 BRKE/BRKP/OAE/DT 位写保护. 10: 锁定模式2. 除了锁定模式1下的寄存器,TMx_CHE寄存器的CHxP/CHxNP 位 (如 果相应通道配置为输出模式) 和TM1_BKDT寄存器的ROS/IOS 位写保护 11: 锁定模式3. 除了锁定模式2下的寄存器,TM1_CHCTRLx寄存器的 CHxOM/CHxOSE (如果相应通道配置为输出)位写保护。 系统复位后这两位只能被写一次,一旦TMx_BKDT寄存器被写入,这两位被写保护。 死区时间值 这些位定义了插入互补输出之间的死区持续时间。DT值和死区时间的关系如下: DT[7:5]=0xx: DT=DT[7:0]x tDT, tDT=tDTS. 181 GD32F1x0 用户手册 DT[7:5]=10x:DT=(64+DT[5:0])xtDT,tDT=tDTS*2. DT[7:5]=110: DT =(32+DT[4:0])xtDT, tDT=tDTS*8. DT[7:5]=111:DT =(32+DT[4:0])xtDT,tDT=tDTS*16. 此位只有在TMx_BKDT寄存器的LK[1:0]=00时才可修改. 9.2.19 TM1 DMA 控制寄存器 (TM1_DCTLR) 地址偏移: 0x48 复位值: 0x0000 15 14 13 保留 12 11 10 9 8 7 6 5 DBLTH[4:0] 保留 rw rw rw rw rw 4 3 2 1 0 DBAR[4:0] rw rw rw rw rw 位 15:14 12:8 区域 保留 DBLTH 7:5 保留 4:0 DBAR 说明 必须保持复位值. DMA连续传送长度 这5位定义了DMA 在连续模式下的传送长度( 当对TMx_DTRSF寄存器进行读或写 时,定时器则进行一次连续传送) 必须保持复位值. DMA基地址 这5位定义了DMA 传送的基地址( 当对TIMx_DTRSF寄存器进行读或写时,DBA定义为 从TIMx_CTLR1 寄存器所在地址开始的偏移量) 9.2.20 TM1 DMA 传送寄存器 (TM1_DTRSF) 地址偏移: 0x4C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DTRSF[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 15:0 区域 DTRSF 说明 DMA传送 对TM1_DTRSF寄存器的读或写会导致对从TMx_CTLR1 寄存器开始的以下地址范围所 在寄存器的访问: (DBAR + 连续传送计数器) x 4 连续传送计数器由硬件计算,范围为0到DBLTH. 182 9.3 9.3.1 9.3.2 9.3.3 通用定时器 (TM2 和 TM3) GD32F1x0 用户手册 简介 通 用 定 时 器 (TM2 和 TM3) 由 一 个 16 位 或 32 位 向 上 / 向 下 计 数 器 , 4 个 捕 获 / 比 较 寄 存 器 (TMx_CHCC),一个自动重载寄存器(TMx_CARL)和一些控制寄存器组成。它适合多种用途, 包括通用定时器,输入信号脉宽测量或输出波形产生(单脉冲或PWM输出)。TMx支持一个编码 器接口,该接口使用一个带有两路输入的译码器。 主要特性  16位 (TM3)或32位(TM2)向下,向上,向下/向上自动重载计数器  16位可配置的预分频器,计数器时钟频率的分频系数为1到65536的任何数值  多达4个独立通道,支持的功能包括输入捕获,比较匹配输出,PWM产生 (边沿或中央对 齐模式),以及单脉冲模式输出.  更新事件,输入捕获事件,输出比较事件,中止输入,触发事件可以产生中断/DMA  使用外部信号控制定时器和定时器互连的同步电路.  带有使用正交译码器的两路输入的编码器接口控制器  TMx 主/从模式控制 功能说明 下图提供了通用定时器的内部配置详情 图 60. 通用定时器框图(TM2和TM3) ETI CH1 CH2 CH3 CH4 Polarity Selection Edge Detector Prescaler Input Filter ITR0 ITR1 ITR2 ITR3 TI1F_ED TI1FP1 TI2FP1 Trigger Controller Mode Slave Controller Encoder Interface TRG_OUTPUT Reset, Enable, Up/Down, Count Prescaler Counter AutoReload Register XOR Input Filter Edge Detector Prescaler Capture Register Compare 1 Register Output Control CH1 CH2 CH3 CH4 183 预分频计数器 GD32F1x0 用户手册 预分频器可以将定时器(PCLK)的时钟频率按1到65536之间的任意值分频为计数器时钟(CNT_ CLK)。它是受预分频寄存器(TMx_PSC)控制,这个控制寄存器能够在工作时被改变。新的预 分频器参数在下一次更新事件到来时被采用。 图 61. 当预分频器的参数从1变到2时,计数器时序图 PCLK EN CNT_CLK CNT_REG Reload Pulse Prescaler CR Prescaler BUF Prescaler CNT F7 F8 F9 FA FB FC 01 02 03 04 修改预分频系数 0 1 0 1 0 01 0101 01 图 62. 当预分频器的参数从1变到4时,计数器时序图 PCLK EN CNT_CLK CNT_REG Reload Pulse Prescaler CR Prescaler BUF Prescaler CNT F7 F8 F9 FA FB FC 00 01 修改预分频系数 0 3 0 3 0 01 2301 23 184 向上计数模式 GD32F1x0 用户手册 在向上计数模式中,计数器从0计数到自动加载值 (TMx_CARL计数器的内容),然后重新从0 开始计数并且产生一个计数器溢出事件。向上计数模式中TMx_CTLR1寄存器的计数方向控制 位DIR应该被设置为0. 通过软件将TMx_EVG寄存器的UPG位置1可以产生更新事件,计数值将被初始化为0然后产生 更新事件。 将TMx_CTLR1寄存器的UPDIS位置1将禁止更新事件。 当更新事件发生时,所有的寄存器(自动重载寄存器,预分频寄存器)都被更新。 下图给出一些例子,当TMx_CARL=0x63时计数器在不同时钟频率下计数器的动作。 图 63.计数器时序图,内部时钟分频系数为 1 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 5E 5F 60 61 62 63 00 01 02 03 04 05 06 07 185 图 64.计数器时序图,内部时钟分频系数为2 GD32F1x0 用户手册 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 61 62 63 00 01 02 03 04 图 65.计数器时序图,内部时钟分频系数为 4 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 62 63 00 01 186 图 66.计数器时序图,内部时钟分频系数为 N PCLK CNT_CLK CNT_REG 31 32 00 overflow Update event (UPE) Update interrupt flag (UPIF) 图 67.计数器时序图, 当 ARSE=0 时的更新事件 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) Auto-reload register 5E 5F 60 61 62 63 00 01 02 03 04 05 06 07 65 63 修改 CARL的值 187 图 68.计数器时序图, 当ARSE=1时的更新事件 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) Auto-reload register Auto-reload shadow register 60 61 62 63 64 65 00 01 02 03 04 05 06 07 65 63 修改CARL的值 65 63 向下计数模式 此模式下,计数器自动从计数重载值(TMx_CARL寄存器的值)计数到0。一旦计数器计数到0, 计数器重启,从计数器重载值开始计数。TMx_CTLR1寄存器的计数方向控制位DIR在向下计 数模式中应该被置1。 通过软件将TMx_EVG寄存器的UPG位置1也可以产生更新事件,计数值将被初始化为计数器 重载值然后产生更新事件。 将TMx_CTLR1寄存器的UPDIS位置1将禁止更新事件。 当更新事件发生时,所有的寄存器(自动重载寄存器,预分频寄存器)都被更新。 下图给出一些例子,当TMx_CARL=0x63时计数器在不同时钟频率下计数器的动作。 188 图 69.计数器时序图,内部时钟分频系数为1 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 05 04 03 02 01 00 63 62 61 60 5F 5E 5D 5C 图 70.计数器时序图,内部时钟分频系数为 2 PCLK EN CNT_CLK CNT_REG 002 001 000 063 062 061 060 05F overflow Update event (UPE) Update interrupt flag (UPIF) 189 图 71.计数器时序图,内部时钟分频系数为4 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 001 000 063 062 图 72.计数器时序图,内部时钟分频系数为 N PCLK CNT_CLK CNT_REG 030 02F 063 overflow Update event (UPE) Update interrupt flag (UPIF) 190 图 73.计数器时序图, 不使用计数器时的更新事件 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) Auto-reload register 05 04 03 02 01 00 63 62 61 60 5F 5E 5D 5C 65 63 修改CARL的值 中央对齐计数模式 在中央对齐模式,计数器从0开始计数到自动加载的值,然后向下计数到0。向上计数模式中, 定时器模块在计数器计数到自动加载值-1产生一个上溢事件;向下计数模式中,定时器模块在 计数器计数到1时产生一个下溢事件。TMx_CTLR1寄存器中的计数方向控制位DIR只读,且决 定了中间对齐模式下的计数方向。计数方向被硬件自动更新。 将TMx_EVG寄存器的UPG位置1可以初始化计数值为0,并产生一个更新事件,而无需考虑计 数器在中央模式下是向上计数还是向下计数。 当向下计数(TMx_CTLR1寄存器的CAM为―01‖)时发生下溢事件或向上计数时发生上溢事件 (TMx_CTLR1寄存器的CAM为―10‖),或者二者同时发生(TMx_CTLR1寄存器的CAM为―11‖), TMx_EVG寄存器的UPIF位能被置1。 将TMx_CTLR1寄存器的UPDIS位置1可以禁止更新事件。 一旦产生更新事件,所有的寄存器(自动重载寄存器,预分频寄存器)都将被更新。 下图给出一些例子,当TMx_CARL=0x5时计数器在不同时钟频率下计数器的动作。 191 图 74.计数器时序图,内部时钟分频系数为1, TMx_CARL = 0x5 PCLK EN CNT_CLK CNT_REG underflow overflow Update event (UPE) Update interrupt flag (UPIF) 04 03 02 01 00 01 02 03 04 05 04 03 02 01 图 75.计数器时序图,内部时钟分频系数为 2 PCLK EN CNT_CLK CNT_REG 003 002 001 000 001 002 003 004 overflow Update event (UPE) Update interrupt flag (UPIF) 192 图 76.计数器时序图,内部时钟分频系数为4, TMx_CARL=0x63 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 061 062 063 062 图 77.计数器时序图,内部时钟分频系数为 N PCLK CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 030 02F 001 000 193 图 78.计数器时序图, ARSE=1(计数器下溢) 时的更新事件 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 06 05 04 03 02 01 00 01 02 03 04 05 06 07 Auto-reload register Auto-reload shadow register 65 63 修改 CARL 的值 65 63 图 79.计数器时序图, ARSE=1 (计数器上溢)时的更新事件 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 7A 7B 7C 7D 7E 7F 63 62 61 60 5F 5E 5D 5C Auto-reload register Auto-reload shadow register 80 63 修改 CARL 的值 65 63 194 时钟选择 GD32F1x0 用户手册 决定内部预分频计数器时钟源的定时器模块时钟控制器的描述如下。  内部定时器时钟PCLK 如果禁止了从模式,默认用来驱动计数器预分频器的内部时钟源是APB2时钟CK_APB2。如果 使能从模式控制器(将TMx_SMC寄存器的SMC区域设置为包括0x1, 0x2, 0x3和0x7),预分频器 被其他时钟源(由TMx_SMC寄存器的TRGS区域选择,说明如下)驱动。当从模式选择位SMC 被设置为0x4, 0x5和0x6,计数器预分频器时钟源由内部时钟PCLK提供。 图 80. 内部时钟分频为 1 时正常模式下的控制电路 PCLK EN UPG Reload Pulse CNT_CLK CNT_REG 17 18 19 20 21 22 23 00 01 02 03 04 05 06  正交译码器 TMx_SMC寄存器的SMC区域应该被设置为0x1, 0x2或0x3来选择正交译码器模式。正交译码 器功能使用TMx_CH1和TMx_CH2引脚的两个输入状态产生时钟脉冲驱动计数器预分频器。内 部时钟源信号的每次转变时计数方向控制位DIR也被硬件自动改变。输入信号源可以只来源于 TMx_CH1引脚,只来源于TMx_CH2引脚或者TMx_CH1和TMx_CH2引脚  内部触发输入 (ITI) 计数器预分频器能在ITI信号的每个上升沿和下降沿计数。此模式可以通过设置TMx_SMC寄存 器 的 SMC 区 域 为 0x6 来 选 择 , 此 时 计 数 器 将 作 为 一 个 事 件 计 数 器 。 输 入 事 件 ITI 能 通 过 设 置 TRGS区域选择。当ITI信号被选为时钟源,内部边沿监测电路将在每个ITI信号上升沿或下降沿 产生一个时钟脉冲来驱动计数器预分频器  外部输入引脚(TIx) 外部引脚TMx_TIx信号的上升沿和下降沿能驱动计数器预分频器计数。此模式可以通过设置 SMC区域为0x7及设置TRGS区域为0x4, 0x5或0x6来选择。注意TIx源于数字滤波器对TMx_TIx 采样  外部输入触发(ETIF) 195 GD32F1x0 用户手册 外部引脚TMx_ ETI信号的每个上升沿或下降沿能驱动计数器预分频器计数。此模式可以通过 设置TMx_SMC寄存器的ECM2E位为1来选择。其他选择ETIF信号作为时钟源的方式为设置 SMC区域为0x6和设置TRGS区域为0X7。注意ETIF信号源于数字滤波器对TMx_ETI引脚信号 的采样。如果选择ETIF信号为时钟源,触发控制器包括边沿监测电路将在每个ETIF信号上升 沿产生一个时钟脉冲来为计数器预分频器提供时钟 捕获/比较通道 TM2/3拥有四个独立的通道用于捕获输入或比较输出是否匹配。每个通道都围绕一个通道捕获 比较寄存器建立,包括一个输入级,通道控制器和输出级  输入捕获级 输入级包括一个数字滤波器,一个通道极性选择,边沿监测和一个通道预分频器。通道0的输 入信号(TI1)可以被选择来自TMx_CH1信号或者TMx_CH1, TMx_CH2和TMx_CH3信号的异或 信号。通道输入信号(TIx)被一个数字滤波器采样来产生一个滤波输入信号TIxF。然后通道极性 和边沿监测模块产生一个TIxFP1或TIxFP2信号,来实现输入捕捉功能。通道输入预分频寄存 器(CHxICP)可以设置有效输入事件数目 图 81. 捕获/比较通道(例如:通道1输入级) TI1 filter fDTS downcounter CH1ICF[3:0] CHCTLR1 TI1F_Rising 0 Edge Detector TI1F_Falling 1 CH1P/ CH1NP CHE TI1FP1 TI2FP1 TRC 01 IC1 10 11 divider /1, /2, /4, /8 CH1M[ 1:0 ] CHCTLR1 CH1ICP[1:0] CHCTLR1 CH1E CHE  通道控制器 TM2/3有4个独立的通道用来捕获输入或输出匹配比较 用于输入捕获模式下,当捕获事件发生时,TMx_CHCCx 影子寄存器首先捕获计数值然后传 送到TMx_CHCCx 预装载寄存器中。 用于输出匹配比较模式下,TMx_CHCCx预装载寄存器的值被复制到相应的影子寄存器中,然 后计数值和影子寄存器的值比较 196 图 82. 捕获/比较通道1主电路 APB BUS MCU-peripheral interface CHCC1 Capture/compare preload register CH1M[0] CH1M[1] CH1ICP CH1E CH1G TM_EVG Capture/compare shadow register Counter CNT>CHCC1 CNT=CHCC1 CHCC1 CH1M[0] CH1M[1] CH1OSE UPE  输出级 TM2/3有四个用于匹配比较、单脉冲和PWM输出功能的通道。 图 83. 捕获/比较通道输出级 (通道1) ETI CNT>CHCC1 CNT=CHCC1 Output mode controller CH1OM[2:0] CHCTLR1 0 1 CH1P CHE Output enable OC circuit CHE CHxE 图 84. 输出比较模式,在OC1上切换 CNT_REG 0039 003A 003B B200 B201 CHCC1 oc1ref=OC1 003A B201 修改CHCC1`的值到 0xB201 当CNT_REG的值达到CHCC1 的值后,会产生输出中断 197 GD32F1x0 用户手册 通道用于输入捕获时,当一个有效输入信号的边沿跳变时,计数值被捕获到捕获/比较寄存器 (TMx_CHCCx)中。一旦捕获事件发生,TMx_STR寄存器的CHxIF标志位被置1。如果CHxIF 位已经被置1,还没来得及被软件清除,此通道上又有另一个捕获事件发生,相应通道捕获溢 出标志位CHxOF将被置1。一旦捕获事件发生,CHxDE位决定了是否产生DMA请求,CHxIE 位决定了是否产生中断。 输入捕获模式也可以用于TMx_CHx(TIx)引脚的信号脉宽测量。 通道输出参考信号 当TMx用于输出匹配比较模式下,设置CHxOM位可以定义OCxREF信号(通道x输出参考信号) 类型。OCxREF信号有一些输出功能类型,包括,设置CHxOM=0x00可以保持原始电平,设 置CHxOM=0x01可以将OCxREF信号设置为高电平,设置CHxOM=0x02可以将OCxREF信号 设置为低电平,在计数值和TMx_CHCCx寄存器的值匹配时,设置CHxOM=0x03可以切换信号 PWM模式1和PWM模式2输出也是另一种类型的OCxREF输出,具体设置是通过设置CHxOM =0x06或0x07来完成的。在这些模式中,OCxREF信号电平的改变取决于根据计数方向,以及 TMx_CHCCx寄存器值和计数值之间的关系。详情参考相应位定义。 设置CHxOM=0x04或0x05可以实现OCxREF信号的强制输出功能。输出比较信号能够直接由 软件强置为有效或无效状态,而不依赖于输出比较寄存器和计数器间的比较结果。 当 ETIF 信 号 源 于 外 部 TMx_ ETI 引 脚 且 被 设 置 为 高 电 平 ( 设 置 TMx_CHCTLR1 寄 存 器 的 CHxOCE位为1)时,OCxREF信号被强制变为低电平。直到下一次更新事件发生,OCxREF 信 号才会回到它的有效状态。 单脉冲模式 一 旦 设 置 定 时 器 运 行 在 单 脉 冲 模 式 下 , 没 有 必 要 设 置 TMx_CTLR1 寄 存 器 的 定 时 器 使 能 位 CEN=1来使能计数器。触发信号沿或者软件写CEN=1都可以产生一个脉冲,此后CEN位一直 保持为1直到更新事件发生或者CEN位被软件写0。如果CEN位被软件清0,计数器停止工作, 计数值被保持。如果CEN值被硬件更新事件自动清0,计数器将被再次初始化。 单 脉 冲 模 式 下 , 将 CEN 位 置 1 产 生 的 触 发 有 效 边 沿 将 使 能 计 数 器 。 然 而 , 执 行 计 数 值 和 TMx_CHCCx寄存器值的比较结果依然存在一些时钟延迟。为了最大限度减少延迟,用户可以 将TMx_CHCTLR1寄存器的CHxOEF位置1。单脉冲模式下,触发上升沿产生之后,OCxREF 信 号将被立即强制转换为另一种状态,因为不考虑比较结果的比较匹配事件发生。只有输出通道 配置为PWM1或PWM2输出运行模式下时 CHxOEF位才可用,触发源来源于触发信号。 图 85. 单脉冲模式 198 TI2 OC1REF OC1 TIM_CNT CARL CCR GD32F1x0 用户手册 T 正交译码器 正交译码器功能使用两个源于TM1_CH1和TM1_CH2引脚的积分输入TI1和TI2各自相互作用 产生计数值。在每个输入源改变期间,DIR位被硬件自动改变。输入源可以是只有TI1,只有 TI2或TI1和TI2。选择模式可以设置SMC=0x01, 0x02或0x03来完成。改变计数方向的机制如下 图所示。正交译码器可以用作一个带有方向选择的外部时钟,意味着计数器在内部从0到重载 值持续计数。因此,用户必须在计数器开始计数前配置TM1_CARL寄存器。 表 10. 计数方向对编码器信号 计数模式 电平 TI1FP1 向上计数 向下计数 TI2FP2 向上计数 向下计数 只有TI1 只有TI2 TI1和TI2 TI2FP=1 TI2FP=0 TI1FP=1 TI1FP=0 TI2FP=1 TI2FP=0 TI1FP=1 TI1FP=0 向下 向上 向下 向上 X X 向上 向下 向上 向下 X X 向上 向下 X X 向上 向下 向下 向上 X X 向下 向上 注意: "-" 意思是"无计数"; "X" 意思是不可能 图 86. 编码器接口模式下计数器运行实例 199 GD32F1x0 用户手册 TI1 TI2 Count UP down 图 87. 带有 TI1FP1 极性转换的编码器接口模式下的例子 TI1 TI2 Count down UP 从控制器 TMx能够在多种模式下和一个外部的触发同步,包括复位模式,暂停模式和触发模式。模式选 择通过设置TMx_SMC寄存器的SMC区域来完成。这些模式的触发输入可以通过TMx_SMC寄 存器的TRGS区域来选择,下面以TI1信号为例。从控制器运行模式参见附加章节。  复位模式 在TI1信号的上升沿来临时,计数器和它的预分频器能够重新被初始化,此时更新事件的软件 产生位UPG将自动被硬件声明,触发事件标志位被置1,然后计数器和它的预分频器被重新初 始化。尽管UPG位被硬件置1,更新事件并不真的发生,它依赖于更新事件禁止控制位UPDIS 被置1与否。如果UPDIS被置1,禁止更新事件发生,将不产生更新事件,然而当TI1上升沿来 临时计数器和它的预分频器仍然被重新初始化。如果TMx_CTLR1寄存器的UPDIS位被清0, 使能更新事件发生,当TI1上升沿来临时更新事件将发生。所有的预加载寄存器将被更新。 200 图 88. 复位模式的控制电路 CNT_CLK CNT_REG TI1 UPG TRGIF 60 61 62 63 00 01 02 03 04 00 01 02 03 04  暂停模式 暂停模式下,选择的TI1输入信号电平用来控制计数器开启/停止运行。当选择的TI1信号为高电 平时计数器开始计数,当TI1信号变为低电平时停止计数。此处计数器将保持它的当前值且不 再被重启。 图 89. 暂停模式下的控制电路 CNT_CLK CNT_REG 52 53 54 55 56 TI1 EN TRGIF 57 58 59  触发模式 计数器被禁止计数之后,当TI1上升沿来临时计数器可以重新开始计数。当一个TI1上升沿来临, 计数器从当前值开始计数。注意TI1信号仅用来使能计数器重新计数,不能控制计数器停止计 数。 图 90. 触发模式下的控制电路 CNT_CLK CNT_REG 56 TI1 EN TRGIF 57 58 59 5A 5B 5C 5D 5E 5F 201 定时器互连 GD32F1x0 用户手册 定时器互相之间可以级联或者同步。可以通过配置一个定时器工作在主模式另一个定时器工作 在从模式来实现。下图显示了一些主从模式触发选择的例子。 下图显示了当定时器 x 配置为从模式时的触发选择。 图 91. 定时器 2 主/从模式的例子 TIMER 1 Prescaler Counter Master mode TRGO1 IT0 control TIMER2 TS TIMER 3 Prescaler Counter TIMER 4 Prescaler Counter Master mode control TRGO1 Master mode control TRGO1 IT2 Trigger selection Slave mode IT3 control Prescaler Counter TI1F_ED TI1FP1 TI2FP2 ETIF trigger selection 定时器 debug 模式 当微控制器在调试模式,若Cortex™-M3内核停止,且MCUDBG模块中DBG_TMx_STOP配置 位被置1,TMx计数器停止。 202 9.4 TM2 和 TM3 寄存器 GD32F1x0 用户手册 9.4.1 TMx 控制寄存器 1 (TMx_CTLR1) 地址偏移: 0x00 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CDIV[1:0] ARSE CAM[1:0] DIR SPM UPS UPDIS CEN rw rw rw rw rw rw rw rw rw rw 位 15:10 9:8 区域 保留 CDIV 7 ARSE 6:5 CAM 4 DIR 3 SPM 说明 必须保持复位值 时钟分频 软件配置CDIV位规定定时器时钟(PCLK) 和死区时间、采样时钟(DTS)之间的分频系数, 该位被死区时间产生器和数字滤波器使用 00: fDTS=fPCLK 01: fDTS= fPCLK /2 10: fDTS= fPCLK /4 11: 保留 自动重载影子使能 0: 禁止TMx_CARL寄存器的影子寄存器 1: 使能TMx_CARL寄存器的影子寄存器 中央对齐模式选择 00: 无中央对齐模式(边沿对齐模式)。 DIR位指定了计数方向 01: 中央对齐模式 1. 计数器交替地向上和向下计数。通道的输出比较中断标志位配置 为输出模式(TMx_CHCTLRx寄存器中CHxM=00),只有在计数器向下计数时被置1。 10: 中央对齐模式 2. 计数器交替地向上和向下计数. 通道的输出比较中断标志位配置 为输出模式(TMx_CHCTLRx寄存器中CHxM=00),只有在计数器向上计数时被置1。 11: 中央对齐模式 3. 计数器交替地向上和向下计数. 通道的输出比较中断标志位配置 为输出模式(TMx_CHCTLRx寄存器中CHxM=00),只有在计数器同时向上和向下计数 时被置1。 计数器开启时,不允许从边沿模式转换到中央对齐模式. 方向 0: 向上计数 1: 向下计数 当计数器配置为中央对齐模式或编码器模式时,该位为只读 单脉冲模式. 0: 在发生更新事件时,计数器不停止 1: 在发生下一次更新事件( 清除CEN 位)时,计数器停止 203 2 UPS GD32F1x0 用户手册 更新请求源 软件通过该位选择更新事件源 0: 使能后,下述任一事件产生更新中断或DMA请求: – UPG位被置1 – 计数器溢出/下溢 – 从模式控制器产生的更新 1: 使能后只有计数器溢出/ 下溢才产生更新中断或DMA 请求。 1 UPDIS 禁止更新 软件通过该位允许/ 禁止更新事件的产生 0: 允许更新事件产生。当以下事件之一发生时,更新事件产生,具有缓存的寄存器被装 入它们的预装载值: – UPG位被置1 – 计数器溢出/下溢 – 从模式控制器产生一个更新事件 1: 禁止更新事件。带有缓存的寄存器保持原有值,如果UPG位被置1或者从模式控制器 产生一个硬件复位事件,计数器和预分频器被重新初始化 0 CEN 使能计数器 0: 禁止计数器 1: 使能计数器 在软件将CEN 位后,外部时钟、暂停模式和编码器模式才能工作。触发模式可以自动 地通过硬件设置CEN位。 9.4.2 TMx 控制寄存器 2 (TMx_CTLR2) 地址偏移: 0x04 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 TI1S MMC[2:0] DMAS 保留 rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15:8 保留 7 TI1S 6:4 MMC 说明 必须保持复位值 通道1触发输入选择 0: 选择TMx_CH1引脚输入作为通道1触发输入 1: TMx_CH1、TMx_CH2 和TMx_CH3 引脚经异或后连到TI1输入 主模式控制 这些位控制TRGO信号的选择,主模式下发给从定时器用于同步功能 000: 复位. TMx_EVG寄存器的UPG位被置1或从模式控制器产生复位触发一次TRGO 脉冲,后一种情况下,TRGO上的信号相对实际的复位会有一个延迟。 001:使能. 此模式可用于同时启动多个定时器或控制在一段时间内使能从定时器。计数 器使能信号TIMERx_EN 被主模式控制器选为触发输出(TRGO)。当CEN控制位被置1或 204 3 DMAS 2:1 保留 GD32F1x0 用户手册 者暂停模式下触发输入为高电平时,计数器使能信号被置1。当计数器使能信号受控于触 发输入时,TRGO上会有一个延迟,除非选择了主/ 从模式。 010: 更新. 更新事件被主模式控制器选为触发输入 011: 捕获/比较脉冲.在发生一次捕获或一次比较成功时,主模式控制器产生一个TRGO 脉冲。 100: 比较. OC1REF 信号被用于作为触发输出 101: 比较. OC2REF 信号被用于作为触发输出 110: 比较. OC3REF 信号被用于作为触发输出 111: 比较. OC4REF 信号被用于作为触发输出 DMA请求源选择 0: 当通道x事件发生,发送通道x的DMA请求 1: 当更新事件发生,发送通道x的DMA请求 必须保持复位值. 9.4.3 TMx 从模式控制寄存器 (TIMx_SMC) 地址偏移: 0x08 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ETPL ECM2E ETPSC[1:0] ETFC[3:0] MSM TRGS[2:0] OCRC. SMC[2:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15 ETPL 14 ECM2E 13:12 ETPSC 说明 外部触发极性 该位选择用ETI还是ETI的反相来作为触发操作 0: ETI不反相,高电平或上升沿有效 1: ETI被反相,低电平或下降沿有效 外部时钟模式2使能 在外部时钟模式2,计数器由ETIF信号上的任意有效边沿驱动 0: 禁止外部时钟模式2 1: 使能外部时钟模式2 将ECM2E位置1与选择外部时钟模式1并将TRGI连到ETIF(SMC=111和TRGS=111) 具 有相同功效。 下述从模式可以与外部时钟模式2同时使用:复位模式,暂停模式和触发模式;但是, 这时TRGI不能是‗111‘。 外部时钟模式1和外部时钟模式2同时被使能时,外部时钟的输入是ETIF 外部触发预分频 外部触发信号ETIP的频率最多是TIMxCLK 频率的1/4。当输入较快的外部时钟时, 可以使用预分频降低ETIP 的频率。 00: 禁止预分频 01: ETIP频率除以2 205 11:8 ETFC 7 MSM 6:4 TRGS 10: ETIP频率除以4 11: ETIP频率除以8 GD32F1x0 用户手册 外部触发滤波控制 数字滤波器是一个事件计数器,它记录到N个事件后会产生一个输出的跳变。这些位定 义了对ETIP信号采样的频率和对ETIP 数字滤波的带宽 0000: 无滤波器. fSAMP=fDTS, N=1. 0001: fSAMP=fPCLK, N=2. 0010: fSAMP= fPCLK, N=4. 0011: fSAMP= fPCLK, N=8. 0100: fSAMP=fDTS/2, N=6. 0101: fSAMP=fDTS/2, N=8. 0110: fSAMP=fDTS/4, N=6. 0111: fSAMP=fDTS/4, N=8. 1000: fSAMP=fDTS/8, N=6. 1001: fSAMP=fDTS/8, N=8. 1010: fSAMP=fDTS/16, N=5. 1011: fSAMP=fDTS/16, N=6. 1100: fSAMP=fDTS/16, N=8. 1101: fSAMP=fDTS/32, N=5. 1110: fSAMP=fDTS/32, N=6. 1111: fSAMP=fDTS/32, N=8. 主-从模式 主-从模式下输入触发上的事件被延迟了,以允许当前定时器和它的从设备通过TRGO完 美同步。如果想要在单个外部事件上同步一些定时器,此模式非常有用。 0: 禁止主-从模式 1: 使能主-从模式 触发选择 这些位选择用于同步计数器的触发输入 000: 内部触发输入0 (ITR0) 001: 内部触发输入1 (ITR1) 010: 内部触发输入2 (ITR2) 011: 内部触发输入3 (ITR3) 100: TI1的边沿标志位 (TI1F_ED) 101: 滤波后的通道1输入 (TI1FP1) 110: 滤波后的通道2输入 (TI2FP2) 111: 外部触发输入(ETIF) 从模式被使能后这些位不能改 从 TM TM2 TM3 ITR0 (TS = 000) 定时器 1 定时器 1 ITR1 (TS = 001) 定时器 15 定时器 2 ITR2 (TS = 010) 定时器 3 定时器 15 ITR3 (TS = 011) 保留 保留 206 3 OCRC 2:0 SMC GD32F1x0 用户手册 OCREF清零信号选择控制 0: OCREF_CLR作为OCREF的清零信号 1: ETIF 作为OCREF的清零信号 从模式控制 000: 关闭从模式. 如果CEN=1,则预分频器直接由内部时钟驱动 001: 编码器模式1. 根据TI1FP1的电平,计数器在TI2FP2的边沿向上/下计数 010: 编码器模式2. 根据TI2FP2的电平,计数器在TI1FP1的边沿向上/下计数 011: 编码器模式3. 根据另一个信号的输入电平,计数器在TI1FP1和TI2FP2的 边沿向上/ 下计数 100: 复位模式. 选中的触发输入的上升沿重新初始化计数器,并且更新影子寄存器 101: 暂停模式. 当触发输入为高时,计数器的时钟开启。一旦触发输入变为低,则计数 器停止 110: 触发模式. 计数器在触发输入TRGI 的上升沿启动。计数器不能被从模式控制器关 闭。 111: 外部时钟模式1. 选中的触发输入的上升沿驱动计数器 如果TI1F_ED 被选为触发输入时,不要使用暂停模式。这是因为,TI1F_ ED 在每次TI1F 变化时输出一个脉冲,然而暂停模式是要检查触发输入的电平 9.4.4 TMx DMA 和中断使能寄存器 (TMx_DIE) 地址偏移: 0x0C 复位值: 0x0000 15 14 13 12 保留 TRGDE 保留 CH4DE rw rw 11 CH3DE rw 10 CH2DE rw 9 CH1DE rw 8 7 6 5 4 UPDE 保留 TRGIE 保留 CH4IE rw rw rw 3 2 1 0 CH3IE CH2IE CH1IE UPIE rw rw rw rw 位 区域 15 保留 说明 必须保持复位值. 14 TRGDE 触发DMA请求使能 0: 禁止触发DMA请求 1: 使能触发DMA请求 13 保留 必须保持复位值 12 CH4DE 通道4 DMA请求使能 0: 禁止通道4 DMA请求 1: 使能通道4 DMA请求 11 CH3DE 通道3 DMA请求使能 0: 禁止通道3 DMA请求 1: 使能通道3 DMA请求 10 CH2DE 通道2 DMA请求使能 0: 禁止通道2 DMA请求 207 1: 使能通道2 DMA请求 9 CH1DE 通道1 DMA请求使能 0: 禁止通道1 DMA请求 1: 使能通道1 DMA请求 8 UPDE 更新DMA请求使能 0: 禁止更新DMA请求 1: 使能更新DMA请求 7 保留 必须保持复位值 6 TRGIE 触发中断使能 0: 禁止触发中断 1: 使能触发中断 5 保留 必须保持复位值. 4 CH4IE 通道4中断使能 0: 禁止通道4中断 1: 使能通道4中断 3 CH3IE 通道3中断使能 0: 禁止通道3中断 1: 使能通道3中断 2 CH2IE 通道2中断使能 0: 禁止通道2中断 1: 使能通道2中断 1 CH1IE 通道1中断使能 0: 禁止通道1中断 1: 使能通道1中断 0 UPIE 更新中断使能 0: 禁止更新中断 1: 使能更新中断 GD32F1x0 用户手册 9.4.5 TMx DMA 和中断状态寄存器 (TMx_STR) 地址偏移: 0x10 复位值: 0x0000 15 14 13 保留 12 CH4OF rc_w0 11 CH3OF rc_w0 10 CH2OF rc_w0 9 CH1OF rc_w0 8 7 Res. Res. rc_w0 6 TRGIF rc_w0 5 Res. rc_w0 4 CH4IF rc_w0 3 CH3IF rc_w0 2 CH2IF rc_w0 1 CH1IF rc_w0 0 UPIF rc_w0 位 15:13 区域 保留 说明 必须保持复位值. 208 12 CH4OF 通道4重复捕获标志 参见CH1OF描述 GD32F1x0 用户手册 11 CH3OF 通道3重复捕获标志 参见CH1OF描述 10 CH2OF 通道2重复捕获标志 参见CH1OF描述 9 CH1OF 通道1重复捕获标志 当通道1被配置为输入模式时,在CH1IF标志位已经被置1后,捕获事件再次发生时,该 标志位可以由硬件置1。该标志位由软件清0。 0: 无重复捕获中断发生 1: 发生了重复捕获中断 8:7 保留 必须保持复位值. 6 TRGIF 触发中断标志 当发生触发事件时,此标志由硬件置1。此位由软件清0。当从模式控制器处于除暂停模 式外的其它模式时,在TRGI 输入端检测到有效边沿,产生触发事件。当从模式控制器 处于暂停模式时,TRGI的任意边沿都可以产生触发事件。 0: 无触发事件产生 1: 触发中断产生 5 保留 必须保持复位值. 4 CH4IF 通道4中断标志 参见CH1IF描述 3 CH3IF 通道3中断标志 参见CH1IF描述 2 CH2IF 通道2中断标志 参见CH1IF描述 1 CH1IF 通道1中断标志 此标志由硬件置1软件清0。当通道1在输入模式下时,捕获事件发生时此标志位被置1; 当通道1在输出模式下时,此标志位在一个比较事件发生时被置1。 0: 无通道1中断发生 1: 通道1中断发生 0 UPIF 更新中断标志 此位在任何更新事件发生时由硬件置1,软件清0. 0: 无更新中断发生 1: 发生更新中断 9.4.6 TMx 事件产生寄存器 (TMx_EVG) 地址偏移: 0x14 209 复位值: 0x0000 GD32F1x0 用户手册 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 BKG TRGG Res. CH4G CH3G CH2G CH1G UPG w w w w w w w w 位 区域 15:8 保留 7 BKG 6 TRGG 5 保留 4 CH4G 3 CH3G 2 CH2G 1 CH1G 0 UPG 说明 必须保持复位值. 产生中止事件 该位由软件置1,用于产生一个中止事件,由硬件自动清0。当此位被置1时,POE位被 清0且BKIF位被置1,若开启对应的中断和DMA,则产生相应的中断和DMA传输。 0: 不产生中止事件 1: 产生中止事件 触发事件产生 此位由软件置1,由硬件自动清0. 当此位被置1,TMx_STR寄存器的TRGIF标志位被置1, 若开启对应的中断和DMA,则产生相应的中断和DMA传输。 0: 无触发事件产生 1: 产生触发事件 必须保持复位值 通道4捕获或比较事件发生 参见CH1G描述 通道3捕获或比较事件发生 参见CH1G描述 通道2捕获或比较事件发生 参见CH1G描述 通道1捕获或比较事件发生 该位由软件置1,用于在通道1产生一个捕获/比较事件,由硬件自动清0。当此位被置1, CC1IF标志位被置1,若开启对应的中断和DMA,则发出相应的中断和DMA请求。此外, 如果通道1配置为输入模式,计数器的当前值被TMx_CHCC1寄存器捕获,如果CH1IF标 志位已经为1,则CH1OF标志位被置1。 0: 不产生通道1捕获或比较事件 1: 发生通道1捕获或比较事件 此位由软件置1,被硬件自动清0。当此位被置1,如果选择了中央对齐或向上计数模式, 计数器被清0。否则(向下计数模式)计数器将载入自动重载值,预分频计数器将同时被清 除。 0: 无更新事件产生 1: 产生更新事件 210 9.4.7 TMx 通道控制寄存器 1 (TMx_CHCTLR1) GD32F1x0 用户手册 地址偏移: 0x18 复位值: 0x0000 15 CH2 OCE rw 位 15 14 13 12 CH2OM[2:0] CH2ICF[3:0] rw rw rw 11 10 CH2 OSE CH2 OFE CH2ICP[1:0] rw rw 9 8 CH2M[1:0] rw rw 7 CH1 OCE rw 6 5 4 CH1OM[2:0] CH1ICF[3:0] rw rw rw 输出 比较 模式: 区域 CH2OCE 说明 通道2输出比较清0使能 参见CH1OCE描述. 3 2 CH1OSE CH1 OFE CH1ICP[1:0] rw rw 1 0 CH1M[1:0] rw rw 14:12 CH2OM 通道2输出比较模式 参见CH1OM描述. 11 CH2OSE 通道2输出比较影子寄存器使能 参见CH1OSE描述. 10 CH2OFE 通道2输出比较快速使能 参见CH1OFE描述 9:8 CH2M 通道2模式选择 这些位定义了通道的方向和输入信号的选择。只有当通道关闭(TMx_CHE寄存器的 CH2E位被清0)时这些位才可以写。 00: 通道2配置为输出 01: 通道2配置为输入,IC2映射在TI2上 10: 通道2配置为输入,IC2映射在TI1上 11: 通道2配置为输入,IC2映射在TRC上,此模式仅工作在内部触发器输入被选中时(由 TM_SMC寄存器的TRGS位选择). 7 CH1OCE 通道1输出比较清0使能 当此位被置1,当检测到ETIF输入高电平时,OC1参考信号被清0 0: 禁止通道1输出比较清零 1: 使能通道1输出比较清零 6:4 CH1OM 通道1输出比较模式 此位定义了输出参考信号OC1REF的动作,而OC1REF决定了OC1、OC1N的值。 OC1REF高电平有效,而OC1、OC1N的有效电平取决于CH1P、CH1NP位。 000: 冻结. 输出比较寄存器TMx_CHCC1与计数器间的比较对OC1REF不起作用 001: 匹配时设置为高。当计数器的值与捕获/比较寄存器TMx_CHCC1相同时,强制 OC1REF为高。 010: 匹配时设置为低。当计数器的值与捕获/比较寄存器TMx_CHCC1相同时,强制 OC1REF为低。 011: 匹配时翻转。当计数器的值与捕获/比较寄存器TMx_CHCC1相同时,强制OC1REF 211 3 2 1:0 位 15:12 11:10 CH1OSE CH1OFE CH1M GD32F1x0 用户手册 翻转。 100: 强制为低. 强制OC1REF为低电平 101: 强制为高. 强制OC1REF为高电平 110: PWM 模式1. 在向上计数时,一旦计数器值小于TMx_CHCC1时,OC1REF 为高 电平,否则为低电平。在向下计数时,一旦计数器的值大于TMx_CHCC1时,OC1REF 为 低电平,否则为高电平。 111: PWM 模式2. 在向上计数时,一旦计数器值小于TMx_CHCC1时,OC1REF 为低 电平,否则为高电平。在向下计数时,一旦计数器的值大于TMx_CHCC1时,OC1REF 为 高电平,否则为低电平。 在PWM模式1或PWM模式2中,只有当比较结果改变了或者输出比较模式中从冻结模式 切换到PWM模式时,OC1REF电平才改变。 当TMx_BKDT寄存器的LK[1:0]=11且CH1M=00时此位不能被改变。 通道1输出比较影子寄存器使能 当此位被置1,TMx_CHCC1寄存器的影子寄存器被使能,影子寄存器在每次更新事件时 都会被更新。 0: 禁止通道1输出/比较影子寄存器 1: 使能通道1输出/比较影子寄存器 仅在单脉冲模式下(TMx_CTLR1寄存器的OPM=1),可以在未确认预装载寄存器情况下 使用PWM 模式 当TMx_BKDT寄存器的LK[1:0]=11且CH1M=00时此位不能被改变.. 通道1输出比较快速使能 该位用于通道配置为PWM模式时加快CC输出对触发输入事件的响应。输出通道将触发 输入信号的有效边沿作为一个比较匹配,OC被设置为比较电平而与比较结果无关 0: 禁止通道1输出比较快速. 当触发器的输入有一个有效沿时,激活CC1输出的最小延 时为5个时钟周期 1: 使能通道1输出比较快速。当触发器的输入有一个有效沿时,激活CC1输出的最小延 时为3个时钟周期 通道1模式选择 这 些 位 定 义 了 输 入 的 方 向 和 输 入 信 号 的 选 择 。 只 有 当 通 道 关 闭 (TMx_CHE 寄 存 器 的 CH1E位被清0)时这些位才可写。. 00: 通道1配置为输出 01: 通道1配置为输入,IC1映射在TI1上 10: 通道1配置为输入,IC1映射在TI2上 11: 通道1配置为输入,IC1映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). 输入捕获模式 区域 CH2ICF 说明 通道2输入捕获滤波控制 参见CH1ICF描述 CH2ICP 通道2输入捕获预分频器 212 参见CH1ICP描述 GD32F1x0 用户手册 9:8 CH2M 通道2模式选择 此位定义了通道方向和输入信号的选择。只有在通道关闭(TMx_CHE寄存器的CH2E位 被清0)时这些位才可写. 00: 通道2配置为输出 01: 通道2配置为输入,IC2映射在TI2上 10: 通道2配置为输入,IC2映射在TI1上 11: 通道2配置为输入,IC2映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). 7:4 CH1ICF 通道1输入捕获滤波控制 数字滤波器由一个事件计数器组成,它记录N个输入事件后会产生一个输出的跳变。这 些位定义了TI1输入信号的采样频率和数字滤波器的长度。 0000: 无滤波器,fSAMP=fDTS, N=1 0001: fSAMP=fPCLK, N=2 0010: fSAMP= fPCLK, N=4 0011: fSAMP= fPCLK, N=8 0100: fSAMP=fDTS/2, N=6 0101: fSAMP=fDTS/2, N=8 0110: fSAMP=fDTS/4, N=6 0111: fSAMP=fDTS/4, N=8 1000: fSAMP=fDTS/8, N=6 1001: fSAMP=fDTS/8, N=8 1010: fSAMP=fDTS/16, N=5 1011: fSAMP=fDTS/16, N=6 1100: fSAMP=fDTS/16, N=8 1101: fSAMP=fDTS/32, N=5 1110: fSAMP=fDTS/32, N=6 1111: fSAMP=fDTS/32, N=8 3:2 CH1ICP 通道1输入捕获 prescaler 通道1输入捕获预分频器 这2位定义了CC1 输入的预分频系数。一旦CH1E =0(TMx_CHE寄存器中),则预分频器 复位。 00: 无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获 01: 每2个事件触发一次捕获 10: 每4个事件触发一次捕获 11: 每8个事件触发一次捕获 1:0 CH1M 通道1模式选择 这两位定义了通道方向和输入信号的选择。只有在通道关闭(TMx_CHE寄存器的CH1E 位被清0)时这些位才可写. 00: 通道1配置为输出 01: 通道1配置为输入,IC1映射在TI1上 10: 通道1配置为输入,IC1映射在TI2上 213 GD32F1x0 用户手册 11: 通道1配置为输入,IC1映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). 9.4.8 TM1 通道控制寄存器 2 (TM1_CHCTLR2) 地址偏移: 0x1C 复位值: 0x0000 15 CH4 OCE rw 14 13 12 CH4OM[2:0] CH4ICF[3:0] rw rw rw 11 CH4 OSE 10 CH4 OFE CH4ICP[1:0] rw rw 输出 比较 模式 9 8 CH4M[1:0] rw rw 7 CH3 OCE rw 6 5 4 CH3OM[2:0] CH3ICF[3:0] rw rw rw 3 CH3 OSE 2 CH3 OFE CH3ICP[1:0] rw rw 1 0 CH3M[1:0] rw rw 位 15 14:12 11 10 9:8 7 6:4 3 2 1:0 区域 CH4OCE CH4OM CH4OSE CH4OFE CH4M CH3OCE CH3OM CH3OSE CH3OFE CH3M 说明 通道4输出比较清0使能 参见CH1OCE描述 通道4输出比较模式 参见CH1OM描述. 通道4输出比较影子寄存器使能 参见CH1OSE描述 通道4输出比较快速使能 参见CH1OFE描述 通道4模式选择 这两位定义了通道方向和输入信号的选择。只有在通道关闭(TMx_CHE寄存器的CH4E 位被清0)时这些位才可写. 00: 通道4配置为输出 01: 通道4配置为输入,IC4映射在TI4上 10: 通道4配置为输入,IC4映射在TI3上 11: 通道4配置为输入,IC4映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). 通道3输出比较清0使能. 参见CH1OCE描述. 通道3输出比较模式 参见CH1OM描述 通道3输出比较影子寄存器使能 参见CH1OSE描述 通道3输出比较快速使能 参见CH1OFE描述. 通道1模式选择 214 GD32F1x0 用户手册 这两位定义了通道方向和输入信号的选择。只有在通道关闭(TMx_CHE寄存器的CH3E 位被清0)时这些位才可写. 00: 通道3配置为输出 01: 通道3配置为输入,IC3映射在TI3上 10: 通道3配置为输入,IC3映射在TI4上 11: 通道3配置为输入,IC3映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). 位 15:12 11:10 9:8 7:4 3:2 1:0 输入捕获模式 区域 CH4ICF 说明 通道4输入捕获滤波控制 参见CH1ICF描述 CH4ICP 通道4输入捕获预分频器 参见CH1ICP描述 CH4M 通道4模式选择 这两位定义了通道的方向和输入信号的选择。只有在通道关闭(TMx_CHE寄存器的 CH4E位被清0)时这些位才可写。 00: 通道4配置为输出 01: 通道4配置为输入,IC4映射在TI4上 10: 通道4配置为输入,IC4映射在TI3上 11: 通道4配置为输入,IC4映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). CH3ICF 通道3输入捕获滤波控制 参见CH1ICF描述 CH3ICP 通道3输入捕获预分频器 参见CH1ICP描述 CH3M 通道3 模式选择 这两位定义了通道的方向和输入信号的选择。只有在通道关闭(TMx_CHE寄存器的 CH3E位被清0)时这些位才可写。 00: 通道3配置为输出 01: 通道3配置为输入,IC3映射在TI3上 10: 通道3配置为输入,IC3映射在TI4上 11: 通道3配置为输入,IC3映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). 9.4.9 TMx 通道使能寄存器 (TMx_CHE) 地址偏移: 0x20 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 215 GD32F1x0 用户手册 CH4NP 保留 CH4P CH4E CH3NP 保留 CH3P CH3E CH2NP 保留 CH2P CH2E CH1NP 保留 CH1P CH1E rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 说明 15 CH4NP 通道4极性 参见CH1NP描述. 14 保留 必须保持复位值. 13 CH4P 通道4极性 参见CH1P描述. 12 CH4E 通道4使能 参见CH1E描述.. 11 CH3NP 通道3极性 参见CH1NP描述. 10 保留 必须保持复位值. 9 CH3P 通道3极性 参见CH1P描述. 8 CH3E 通道3使能 参见CH1E描述 7 CH2NP 通道2极性 参见CH1NP描述. 6 保留 必须保持复位值. 5 CH2P 通道2极性 参见CH1P描述. 4 CH2E 通道2使能 参见CH1E描述.. 3 CH1NP 通道1极性 当通道1配置为输出模式时,此位必须被设置为0。 当通道1配置为输入模式时,此位和CH1P联合使用,作为输入信号的极性选择控制信号, 详情请参照CH1P的说明。 2 保留 必须保持复位值. 1 CH1P 通道1极性 当通道1配置为输出模式时,此位定义了输出信号极性。 0: 通道1高电平有效 1: 通道1低电平有效 当通道1配置为输入模式时, [CH1NP, CH1P] 作为输入信号的极性选择控制位,功能如下: [CH1NP==0, CH1P==0]: 把TIxFP1的上升沿作为捕获/触发的有效信号,并且TIxFP1不 会被翻转。 216 GD32F1x0 用户手册 [CH1NP==0, CH1P==1]: 把TIxFP1的下降沿作为捕获/触发的有效信号,并且TIxFP1会 被翻转。 [CH1NP==1, CH1P==0]: 保留。不可设置。 [CH1NP==1, CH1P==1]: 把TIxFP1的上升沿和下降沿都作为捕获/触发的有效信号,并 且TIxFP1不会被翻转。 当TMx_BKDT寄存器的LK[1:0]=11或10时此位不能被更改. 0 CH1E 通道1使能 当通道1配置为输入模式时,将此位置1使能OC1信号有效。当通道1配置为输出模式时, 将此位置1使能通道1上的捕获事件。 0: 禁止通道1. 1: 使能通道1. 9.4.10 TMx 计数器寄存器 (TMx_CNT) 地址偏移: 0x24 复位值: 0x0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CNT[31:16] 仅 TM2 有高 16bit。 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 位 31:16 15:0 区域 CNT[31:16] CNT[15:0] 说明 这些位是当前的计数值,写操作能改变计数器值。仅TM2有高16bit。 这些位是当前的计数值,写操作能改变计数器值。 9.4.11 TMx 预分频寄存器 (TMx_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 说明 计数器时钟预分频值 计数器时钟等于PSC时钟除以 (PSC+1),每次当更新事件产生时,PSC 的值 被装入当前预分频寄存器 217 9.4.12 TMx 计数器自动重载寄存器 (TMx_CARL) 地址偏移: 0x2C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 CARL[15:0] rw rw rw rw rw rw rw rw rw rw GD32F1x0 用户手册 5 4 3 2 1 0 rw rw rw rw rw rw 位 区域 15:0 CARL 说明 计数器自动重载值 这些位定义了计数器的自动重载值. 9.4.13 TMx 通道 1 捕获/比较寄存器 (TMx_CHCC1) 地址偏移: 0x34 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CHCC1[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 15:0 区域 CHCC1 说明 通道1的捕获或比较值 当通道1配置为输入模式时,这些位决定了上次捕获事件的计数器值。并且本寄存器为只 读。 当通道1配置为输出模式时,这些位包含了即将和计数器比较的值。使能相应影子寄存器 后,影子寄存器值随每次更新事件更新。 9.4.14 TMx 通道 2 捕获/比较寄存器 (TMx_CHCC2) 地址偏移: 0x38 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CHCC2[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 15:0 区域 CHCC2 说明 通道2的捕获或比较值 当通道2配置为输入模式时,这些位决定了上次捕获事件的计数器值。并且本寄存器为只 读。 当通道2配置为输出模式时,这些位包含了即将和计数器比较的值。使能相应影子寄存器 后,影子寄存器值随每次更新事件更新。 218 9.4.15 TMx 通道 3 捕获/比较寄存器 (TMx_CHCC3) GD32F1x0 用户手册 地址偏移: 0x3C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CHCC3[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 15:0 区域 CHCC3 说明 通道3的捕获或比较值 当通道3配置为输入模式时,这些位决定了上次捕获事件的计数器值。并且本寄存器为只 读。 当通道3配置为输出模式时,这些位包含了即将和计数器比较的值。使能相应影子寄存器 后,影子寄存器值随每次更新事件更新。 9.4.16 TMx 通道 4 捕获/比较寄存器 (TMx_CHCC4) 地址偏移: 0x40 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CHCC4[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 15:0 区域 CHCC4 说明 通道4的捕获或比较值 当通道4配置为输入模式时,这些位决定了上次捕获事件的计数器值。并且本寄存器为只 读。 当通道4配置为输出模式时,这些位包含了即将和计数器比较的值。使能相应影子寄存器 后,影子寄存器值随每次更新事件更新。 9.4.17 TMx DMA 控制寄存器 (TMx_DCTLR) 地址偏移: 0x48 复位值: 0x0000 15 14 13 保留 12 11 10 9 8 7 6 5 DBLTH[4:0] 保留 rw rw rw rw rw 4 3 2 1 0 DBAR[4:0] rw rw rw rw rw 位 15:14 12:8 区域 保留 DBLTH 说明 必须保持复位值. DMA连续传送长度 219 7:5 保留 4:0 DBAR GD32F1x0 用户手册 这5位定义了DMA 在连续模式下的传送长度( 当对TMx_DTRSF寄存器进行读或写 时,定时器则进行一次连续传送) 必须保持复位值. DMA基地址 这5位定义了DMA 传送的基地址( 当对TIMx_DTRSF寄存器进行读或写时,DBA定义为 从TMx_CTLR1 寄存器所在地址开始的偏移量) 9.4.18 TMx DMA 传送寄存器 (TMx_DTRSF) 地址偏移: 0x4C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DTRSF[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 15:0 区域 DTRSF 说明 DMA传送 对TM1_DTRSF寄存器的读或写会导致对从TMx_CTLR1 寄存器开始的以下地址范围所 在寄存器的访问: (DBAR + 连续传送计数器) x 4 连续传送计数器由硬件计算,范围为0到DBLTH. 220 9.5 9.5.1 9.5.2 9.5.3 基本定时器 (TM6) GD32F1x0 用户手册 简介 通用定时器(TM6)由1个16位的计数自动重载寄存器 (TMx_CARL)和一些控制寄存器组成。可 以被用作通用定时器和为DAC (数字到模拟转换器)提供时钟. TM6的触发连接到DAC,可以触 发DAC。 主要特征  16位向上自动重载计数器  16位可编程的预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值  触发DAC的同步电路  更新事件产生中断/DMA 功能说明 下图提供了基本定时器内部配置细节图 图 92. 通用定时器框图 (TM6) TM6_CK From RCC TRG_OUTPUT Trigger Controller Reset, Enable, Up/Down, Count Prescaler AutoReload Register Counter 预分频计数器 预分频器可以将定时器(PCLK)的时钟频率按1到65536之间的任意值分频给计数器(CNT_CLK) 使用。分频系数受预分频寄存器TMx_PSC控制,这个控制寄存器带有缓冲器,它能够在运行 时被改变。新的预分频器的参数在下一次更新事件到来时被采用。 221 GD32F1x0 用户手册 图 93. 当预分频器的参数从1变到2 时,计数器时序图 PCLK EN CNT_CLK CNT_REG Reload Pulse Prescaler CR Prescaler BUF Prescaler CNT F7 F8 F9 FA FB FC 01 02 03 04 修改预分频系数 0 1 0 1 0 01 0101 01 图 94. 当预分频器的参数从1变到4时,计数器时序图 PCLK EN CNT_CLK CNT_REG Reload Pulse Prescaler CR Prescaler BUF Prescaler CNT F7 F8 F9 FA FB FC 00 01 修改预分频系数 0 3 0 3 0 01 2301 23 向上计数模式 在向上计数模式中,计数器从0计数到自动加载值(TMx_CARL寄存器的内容),然后重新从0开 始计数。每次计数器溢出时都会产生更新事件。 222 GD32F1x0 用户手册 可以将TMx_EVG寄存器的UPG位置1来设置更新事件,计数值被清0产生更新事件。 设置TMx_CTLR1寄存器的UPDIS位可以禁止更新事件 一旦发生更新事件,所有的寄存器(重复计数器,重载寄存器,预分频寄存器)都将被更新。 时钟选择 基本定时器只有唯一的时钟源RCC,为基本定时器提供内部时钟PCLK。计数器和预分频计数 器被这个内部时钟PCLK驱动。UPG如果被置位,将初始化计数器和预分频计数器。 图 95. 内部时钟分频为1时正常模式下的控制电路 PCLK EN UPG Reload Pulse CNT_CLK CNT_REG 17 18 19 20 21 22 23 00 01 02 03 04 05 06 定时器 debug 模式 当微控制器在调试模式,若Cortex™-M3内核停止,且MCUDBG模块中DBG_TMx_STOP配置 位被置1,TMx计数器停止。 223 9.6 TM6 寄存器 GD32F1x0 用户手册 9.6.1 TM6 控制寄存器 1 (TM6_CTLR1) 地址偏移: 0x00 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 ARSE 保留 SPM UPS UPDIS CEN rw rw rw rw rw 位 区域 15:8 保留 7 ARSE 3 SPM 2 UPS 1 UPDIS 0 CEN 说明 必须保持复位值 自动重载影子使能 0: 禁止TMx_CARL寄存器的影子寄存器 1: 使能TMx_CARL寄存器的影子寄存器 单脉冲模式. 0: 在发生更新事件时,计数器不停止 1: 在发生下一次更新事件( 清除CEN 位)时,计数器停止 更新请求源 软件通过该位选择更新事件源 0: 使能后,下述任一事件产生更新中断或DMA请求: – UPG位被置1 – 计数器溢出/下溢 – 从模式控制器产生的更新 1: 使能后只有计数器溢出/ 下溢才产生更新中断或DMA 请求。 禁止更新 软件通过该位允许/ 禁止更新事件的产生 0: 允许更新事件产生。当以下事件之一发生时,更新事件产生,具有缓存的寄存器被装 入它们的预装载值: – UPG位被置1 – 计数器溢出/下溢 – 从模式控制器产生一个更新事件 1: 禁止更新事件。带有缓存的寄存器保持原有值,如果UPG位被置1或者从模式控制器 产生一个硬件复位事件,计数器和预分频器被重新初始化 使能计数器 0: 禁止计数器 1: 使能计数器 在软件将CEN位置1后,外部时钟、暂停模式和编码器模式才能工作。触发模式可以自 动地通过硬件设置CEN位。 224 GD32F1x0 用户手册 9.6.2 TM6 控制寄存器 2 (TM6_CTLR2) 地址偏移: 0x04 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 MMC[2:0] 保留 rw rw rw 位 区域 15:7 保留 6:4 MMC 3:0 保留 说明 必须保持复位值 主模式控制 这些位控制TRGO信号的选择,主模式下发给从定时器用于同步功能 000: 复位. TMx_EVG寄存器的UG位被置1或从模式控制器产生复位触发一次TRGO脉 冲,后一种情况下,TRGO上的信号相对实际的复位会有一个延迟。 001: 使能. 此模式可用于同时启动多个定时器或控制在一段时间内使能从定时器。计数 器使能信号TIMERx_EN 被主模式控制器选为触发输出(TRGO)。当CEN控制位被置1或 者暂停模式下触发输入为高电平时,计数器使能信号被置1。当计数器使能信号受控于触 发输入时,TRGO 上会有一个延迟,除非选择了主/ 从模式。 010: 更新. 更新事件被主模式控制器选为触发输入 011: 捕获/比较脉冲.在发生一次捕获或一次比较成功时,主模式控制器产生一个TRGO 脉冲。 100: 比较. OC1REF 信号被用于作为触发输出 101: 比较. OC2REF 信号被用于作为触发输出 110: 比较. OC3REF 信号被用于作为触发输出 111: 比较. OC4REF 信号被用于作为触发输出 必须保持复位值 9.6.3 TM6 DMA 和中断使能寄存器 (TM6_DIE) 地址偏移: 0x0C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 32 1 0 保留 UPDE 保留 UPIE rw rw 位 区域 15:9 保留 说明 必须保持复位值. 8 UPDE 更新DMA请求使能 0: 禁止更新DMA请求 225 7:1 保留 0 UPIE 1: 使能更新DMA请求 必须保持复位值. 更新中断使能 0: 禁止更新中断 1: 使能更新中断 GD32F1x0 用户手册 9.6.4 TM6 状态寄存器 (TM6_STR) 地址偏移: 0x10 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 UPIF rc_w0 位 区域 15:1 保留 0 UPIF 说明 必须保持复位值. 更新中断标志 此位在任何更新事件发生时由硬件置1,软件清0. 0: 无更新中断发生 1: 发生更新中断 9.6.5 TM6 事件产生寄存器 (TM6_EVG) 地址偏移: 0x14 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 UPG w 位 区域 15:1 保留 0 UPG 说明 必须保持复位值. 此位由软件置1,被硬件自动清0。当此位被置1,如果选择了中央对齐或向上计数模式, 计数器被清0。否则(向下计数模式)计数器将载入自动重载值,预分频计数器将同时被清 除。 0: 无更新事件产生 1: 产生更新事件 9.6.6 TM6 计数器寄存器 (TM6_CNT) 地址偏移: 0x24 复位值: 0x0000 226 GD32F1x0 用户手册 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 说明 这些位是当前的计数值。写操作能改变计数器值。 9.6.7 TM6 预分频寄存器 (TM6_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 说明 计数器时钟预分频值 计数器时钟等于PSC时钟除以 (PSC+1),每次当更新事件产生时,PSC 的值 被装入当前预分频寄存器 9.6.8 TM6 计数器自动重载寄存器 (TM6_CARL) 地址偏移: 0x2C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CARL[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15:0 CARL 说明 计数器自动重载值 这些位定义了计数器的自动重载值 9.7 9.7.1 通用定时器 (TM14) 简介 通用定时器 (TM14)包括一个16位的向上计数器,1个捕捉/比较寄存器(TMx_CHCC),1个16 位的自动装载计数器寄存器(TMx_CARL)和一些控制寄存器。它适合多种用途,包括通用定时 器,输入信号脉冲宽度测量或者产生输出波形例如单脉冲输出或PWM输出。 227 9.7.2 9.7.3 主要特征 GD32F1x0 用户手册  16位向上自动重载计数器  16位可编程的预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值.  1个独立通道,支持以下功能:输入捕获,输出比较,PWM波形产生(边缘或中间对齐模 式).  更新事件,输入捕获事件,输出比较事件可以产生中断/DMA 功能说明 下图提供了通用定时器内部配置细节图 图 96. 通用定时器框图 (TM14) TM14_CK From RCC Trigger Controller Enable Prescaler Counter AutoReload Register CH1 Input Filter Edge Detector Prescaler Capture CRoemgipstaerre 1 Register Output Control CH1 预分频计数器 预分频器可以将定时器(PCLK)的时钟频率按1到65536之间的任意值分频给计数器(CNT_CLK) 使用。分频系数受预分频寄存器TMx_PSC控制,这个控制寄存器带有缓冲器,它能够在运行 时被改变。新的预分频器的参数在下一次更新事件到来时被采用。 228 GD32F1x0 用户手册 图 97. 当预分频器的参数从 1 变到 2 时,计数器时序图 PCLK EN CNT_CLK CNT_REG Reload Pulse Prescaler CR Prescaler BUF Prescaler CNT F7 F8 F9 FA FB FC 01 02 03 04 修改预分频系数 0 1 0 1 0 01 0101 01 图 98. 当预分频器的参数从1变到4时,计数器时序图 PCLK EN CNT_CLK CNT_REG Reload Pulse Prescaler CR Prescaler BUF Prescaler CNT F7 F8 F9 FA FB FC 00 01 修改预分频系数 0 3 0 3 0 01 2301 23 向上计数模式 在向上计数模式中,计数器从0计数到自动加载值,然后重新从0开始计数。每次计数器溢出时 都会产生更新事件。 229 GD32F1x0 用户手册 可以将TMx_EVG寄存器的UPG位置1来设置更新事件,计数值被清0产生更新事件。 设置TMx_CTLR1寄存器的UPDIS位可以禁止更新事件 一旦发生更新事件,所有的寄存器(自动重载寄存器,预分频寄存器)都将被更新。 下图给出一些例子,当TMx_CARL=0x63时计数器在不同时钟频率下计数器的动作。 图 99.计数器时序图,内部时钟分频系数为1 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 5E 5F 60 61 62 63 00 01 02 03 04 05 06 07 图 100.计数器时序图,内部时钟分频系数为2 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 61 62 63 00 01 02 03 04 230 图 101.计数器时序图,内部时钟分频系数为 4 GD32F1x0 用户手册 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 62 63 00 01 图 102.计数器时序图,内部时钟分频系数为N PCLK CNT_CLK CNT_REG 31 32 00 overflow Update event (UPE) Update interrupt flag (UPIF) 231 图 103.计数器时序图, 当ARSE=0时的更新事件 GD32F1x0 用户手册 PCLK EN CNT_CLK CNT_REG 5E 5F 60 61 62 63 00 01 02 03 04 05 06 07 overflow Update event (UPE) Update interrupt flag (UPIF) Auto-reload register 65 63 修改 CHAR的值 图 104.计数器时序图, 当ARSE=1时的更新事件 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) Auto-reload register Auto-reload shadow register 60 61 62 63 64 65 00 01 02 03 04 05 06 07 65 63 修改 CHAR 的值 65 63 232 时钟选择 GD32F1x0 用户手册 通用定时器只有唯一的时钟源RCC,为定时器提供内部时钟PCLK。计数器和预分频计数器被 这个内部时钟PCLK驱动。UPG如果被置位,将初始化计数器和预分频计数器。 图 105. 内部时钟分频为1时正常模式下的控制电路 PCLK EN UPG Reload Pulse CNT_CLK CNT_REG 17 18 19 20 21 22 23 00 01 02 03 04 05 06 捕获/比较通道 TM14拥有1个独立的通道用于捕获输入或比较输出是否匹配。每个通道都围绕一个通道捕获比 较寄存器建立,包括一个输入级,通道控制器和输出级。  输入捕获级 输入级包括一个数字滤波器,一个通道极性选择,边沿监测和一个通道预分频器。通道输入信 号(TI1)可以被选择来自TMx_CH1信号。通道输入信号(TIx)被一个数字滤波器采样来产生一个 滤波输入信号TIxF。然后通道极性和边沿监测模块产生一个TIxFP1或TIxFP2信号,来实现输 入捕捉功能。通道输入预分频寄存器(CHxICP)可以设置有效输入事件数目 233 图 106. 捕获/比较通道(例如:输入级) TI1 filter fDTS downcounter CH1ICF[3:0] CHCTLR1 TI1F_Rising 0 Edge Detector TI1F_Falling 1 CH1P/ CH1NP CHE TI1FP1 TI2FP1 TRC 01 IC1 10 11 divider /1, /2, /4, /8 CH1M[ 1:0 ] CHCTLR1 CH1ICP[1:0] CHCTLR1 CH1E CHE  通道控制器 TM14有1个独立的通道用来捕获输入或输出匹配比较 用于输入捕获模式下,当捕获事件发生时,TMx_CHCCx影子寄存器首先捕获计数值然后传送 到TM14_CHCCx预装载寄存器中。 用于输出匹配比较模式下,TMx_CHCCx预装载寄存器的值被复制到相应的影子寄存器中,然 后计数值和影子寄存器的值比较 图 107. 捕获/比较通道1主电路 CHCC1 CH1M[0] CH1M[1] CH1ICP CH1E CH1G TM_EVG APB BUS MCU-peripheral interface Capture/compare preload register Capture/compare shadow register Counter CNT>CHCC1 CNT=CHCC1 CHCC1 CH1M[0] CH1M[1] CH1OSE UPE  输出级 TM14有1个用于匹配比较或PWM输出功能的通道。 234 图 108. 捕获/比较通道输出级 GD32F1x0 用户手册 ETI CNT>CHCC1 CNT=CHCC1 Output mode controller CH1OM[2:0] CHCTLR1 图 109. 输出比较模式,在OC1上切换 0 1 CH4P CHE Output enable OC circuit CHE CHxE CNT_REG 0039 003A 003B B200 B201 CHCC1 oc1ref=OC1 003A B201 修改CHCC1`的值到 0xB201 当CNT_REG的值达到CHCC1 的值后,会产生输出中断 通道用于输入捕获时,当一个有效输入信号的边沿跳变时,计数值被捕获到捕获/比较寄存器 (TMx_CHCCx)中。一旦捕获事件发生,TMx_STR寄存器的CHxIF标志位被置1。如果CHxIF 位已经被置1,还没来得及被软件清除,此通道上又有另一个捕获事件发生,相应通道捕获溢 出标志位CHxOF将被置1。 输入捕获模式也可以用于TMx_CHx(TIx)引脚的信号脉宽测量。 通道输出参考信号 当TM14用于输出匹配比较模式下,设置CHxOM位可以定义OCxREF信号(通道x输出参考信号) 类型。OCxREF信号有一些输出功能类型,包括,设置CHxOM=0x00可以保持原始电平,设 置CHxOM=0x01可以将OCxREF信号设置为高电平,设置CHxOM=0x02可以将OCxREF信号 设置为低电平,在计数值和TM1_CHCCx寄存器的值匹配时,设置CHxOM=0x03可以切换信号 PWM模式1和PWM模式2输出也是另一种类型的OCxREF输出,具体设置是通过设置CHxOM =0x06或0x07来完成的。在这些模式中,OCxREF信号级别的改变取决于根据计数方向,以及 TMx_CHCCx寄存器值和计数值之间的关系。详情参考相应位定义。 设置CHxOM=0x04或0x05可以实现OCxREF信号的强制输出功能。输出比较信号能够直接由 软件强置为有效或无效状态,而不依赖于输出比较寄存器和计数器间的比较结果。 当 ETIF 信 号 源 于 外 部 TMx_ETI 引 脚 且 被 设 置 为 高 电 平 ( 设 置 TMx_CHCTLR1 寄 存 器 的 235 GD32F1x0 用户手册 CHxOCE位为1)时,OCxREF信号被强制变为低电平。直到下一次更新事件发生,OCxREF 信 号才会回到它的有效状态。 定时器 debug 模式 当微控制器在调试模式,若Cortex™-M3内核停止,且MCUDBG模块中DBG_TMx_STOP配置 位被置1,TMx计数器停止。 9.8 TM14 寄存器 9.8.1 TMx 控制寄存器 1 (TMx_CTLR1) 地址偏移: 0x00 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CDIV[1:0] ARSE 保留 UPS UPDIS CEN rw rw rw rw rw rw 位 15:10 9:8 区域 保留 CDIV 7 ARSE 6:3 保留 2 UPS 1 UPDIS 说明 必须保持复位值 时钟分频 软件配置CDIV位规定定时器时钟(PCLK) 和死区时间、采样时钟(DTS)之间的分频系数, 该位被死区时间产生器和数字滤波器使用 00: fDTS=fPCLK 01: fDTS= fPCLK /2 10: fDTS= fPCLK /4 11: 保留 自动重载影子使能 0: 禁止TMx_CARL寄存器的影子寄存器 1: 使能TMx_CARL寄存器的影子寄存器 必须保持复位值 更新请求源 软件通过该位选择更新事件源 0: 使能后,下述任一事件产生更新中断: – UPG位被置1 – 计数器溢出/下溢 – 从模式控制器产生的更新 1: 使能后只有计数器溢出/下溢才产生更新中断。 禁止更新 236 0 CEN GD32F1x0 用户手册 软件通过该位允许/ 禁止更新事件的产生 0: 允许更新事件产生。当以下事件之一发生时,更新事件产生,具有缓存的寄存器被装 入它们的预装载值: – UPG位被置1 – 计数器溢出/下溢 – 从模式控制器产生一个更新事件 1: 禁止更新事件。带有缓存的寄存器保持原有值,如果UPG位被置1或者从模式控制器 产生一个硬件复位事件,计数器和预分频器被重新初始化 使能计数器 0: 禁止计数器 1: 使能计数器 在软件将CEN位置1后,外部时钟、暂停模式和编码器模式才能工作。触发模式可以自 动地通过硬件设置CEN位。 9.8.2 TMx 中断使能寄存器 (TMx_DIE) 地址偏移: 0x0C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CH1IE UPIE rw rw 位 区域 15:2 保留 1 CH1IE 0 UPIE 说明 必须保持复位值. 通道1中断使能 0: 禁止通道1中断 1: 使能通道1中断 更新中断使能 0: 禁止更新中断 1: 使能更新中断 9.8.3 TMx DMA 和中断状态寄存器 (TMx_STR) 地址偏移: 0x10 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CH1OF 保留 CH1IF UPIF rc_w0 rc_w0 rc_w0 位 15:10 区域 保留 说明 必须保持复位值. 237 GD32F1x0 用户手册 9 CH1OF 通道1重复捕获标志 当通道1被配置为输入模式时,在CH1IF标志位已经被置1后,捕获事件再次发生时,该 标志位可以由硬件置1。该标志位由软件清0。 0: 无重复捕获中断发生 1: 发生了重复捕获中断 8:2 保留 必须保持复位值. 1 CH1IF 通道1中断标志 此标志由硬件置1软件清0。当通道1在输入模式下时,捕获事件发生时此标志位被置1; 当通道1在输出模式下时,此标志位在一个比较事件发生时被置1。 0: 无通道1中断发生 1: 通道1中断发生 0 UPIF 更新中断标志 此位在任何更新事件发生时由硬件置1,软件清0. 0: 无更新中断发生 1: 发生更新中断 9.8.4 TMx 事件发生寄存器 (TMx_EVG) 地址偏移: 0x14 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CH1G UPG w w 位 区域 15:2 保留 1 CH1G 0 UPG 说明 必须保持复位值. 通道1捕获或比较事件发生 该位由软件置1,用于在通道1产生一个捕获/比较事件,由硬件自动清0。当此位被置1, CC1IF标志位被置1,若开启对应的中断和DMA,则发出相应的中断和DMA请求。此外, 如果通道1配置为输入模式,计数器的当前值被TMx_CHCC1寄存器捕获,如果CH1IF标 志位已经为1,则CH1OF标志位被置1。 0: 不产生通道1捕获或比较事件 1: 发生通道1捕获或比较事件 此位由软件置1,被硬件自动清0。当此位被置1,如果选择了中央对齐或向上计数模式, 计数器被清0。否则(向下计数模式)计数器将载入自动重载值,预分频计数器将同时被清 除。 0: 无更新事件产生 1: 产生更新事件 238 9.8.5 TMx 通道控制寄存器 1 (TMx_CHCTLR1) GD32F1x0 用户手册 地址偏移: 0x18 复位值: 0x0000 15 位 15:8 7 14 13 12 11 10 9 8 7 6 5 4 3 2 保留 CH1 OCE CH1OM[2:0] CH1OSE CH1 OFE CH1ICF[3:0] CH1ICP[1:0] Res rw rw rw rw rw rw 输出 比较 模式: 区域 保留 CH1OCE 说明 必须保持复位值. 通道1输出比较清0使能 当此位被置1,当检测到ETIF输入高电平时,OC1参考信号被清0 0: 禁止通道1输出比较清零 1: 使能通道1输出比较清零 1 0 CH1M[1:0] rw rw 6:4 CH1OM 通道1输出比较模式 此位定义了输出参考信号OC1REF的动作,而OC1REF决定了OC1的值。OC1REF高电 平有效,而OC1的有效电平取决于CH1P位。 000: 冻结. 输出比较寄存器TMx_CHCC1与计数器间的比较对OC1REF不起作用 001: 匹配时设置为高。当计数器的值与捕获/比较寄存器TMx_CHCC1相同时,强制 OC1REF为高。 010: 匹配时设置为低。当计数器的值与捕获/比较寄存器TMx_CHCC1相同时,强制 OC1REF为低。 011: 匹配时翻转。当计数器的值与捕获/比较寄存器TMx_CHCC1相同时,强制OC1REF 翻转。 100: 强制为低. 强制OC1REF为低电平 101: 强制为高. 强制OC1REF为高电平 110: PWM 模式1. 在向上计数时,一旦计数器值小于TMx_CHCC1时,OC1REF 为高 电平,否则为低电平。在向下计数时,一旦计数器的值大于TMx_CHCC1时,OC1REF 为 低电平,否则为高电平。 111: PWM 模式2. 在向上计数时,一旦计数器值小于TMx_CHCC1时,OC1REF 为低 电平,否则为高电平。在向下计数时,一旦计数器的值大于TMx_CHCC1时,OC1REF 为 高电平,否则为低电平。 在PWM模式1或PWM模式2中,只有当比较结果改变了或者输出比较模式中从冻结模式 切换到PWM模式时,OC1REF电平才改变。 3 CH1OSE 通道1输出比较影子寄存器使能 当此位被置1,TMx_CHCC1寄存器的影子寄存器被使能,影子寄存器在每次更新事件时 都会被更新。 0: 禁止通道1输出/比较影子寄存器 1: 使能通道1输出/比较影子寄存器 仅在单脉冲模式下(TMx_CTLR1寄存器的OPM=1),可以在未确认预装载寄存器情况下 239 2 1:0 位 15:8 7:4 3:2 CH1OFE CH1M 使用PWM 模式 GD32F1x0 用户手册 通道1输出比较快速使能 该位用于通道配置为PWM模式时加快CC输出对触发输入事件的响应。输出通道将触发 输入信号的有效边沿作为一个比较匹配,OC 被设置为比较电平而与比较结果无关 0: 禁止通道1输出比较快速. 当触发器的输入有一个有效沿时,激活CC1输出的最小延 时为5个时钟周期 1: 使能通道1输出比较快速。当触发器的输入有一个有效沿时,激活CC1输出的最小延 时为3个时钟周期 通道1模式选择 这 些 位 定 义 了 输 入 的 方 向 和 输 入 信 号 的 选 择 。 只 有 当 通 道 关 闭 (TMx_CHE 寄 存 器 的 CH1E位被清0)时这些位才可写。. 00: 通道1配置为输出 01: 通道1配置为输入,IC1映射在TI1上 10: 通道1配置为输入,IC1映射在TI2上 11: 通道1配置为输入,IC1映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TMx_SMC寄存器的TRGS位) 输入捕获模式 区域 保留 说明 必须保持复位值 CH1ICF CH1ICP 通道1输入捕获滤波控制 数字滤波器由一个事件计数器组成,它记录N个输入事件后会产生一个输出的跳变。这 些位定义了TI1输入信号的采样频率和数字滤波器的长度。 0000: 无滤波器,fSAMP=fDTS, N=1 0001: fSAMP=fPCLK, N=2 0010: fSAMP= fPCLK, N=4 0011: fSAMP= fPCLK, N=8 0100: fSAMP=fDTS/2, N=6 0101: fSAMP=fDTS/2, N=8 0110: fSAMP=fDTS/4, N=6 0111: fSAMP=fDTS/4, N=8 1000: fSAMP=fDTS/8, N=6 1001: fSAMP=fDTS/8, N=8 1010: fSAMP=fDTS/16, N=5 1011: fSAMP=fDTS/16, N=6 1100: fSAMP=fDTS/16, N=8 1101: fSAMP=fDTS/32, N=5 1110: fSAMP=fDTS/32, N=6 1111: fSAMP=fDTS/32, N=8 通道1输入捕获预分频器 这2位定义了CC1 输入的预分频系数。一旦CH1E =0 (TM14_CHE寄存器中),则预分频 240 GD32F1x0 用户手册 器复位。 00: 无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获 01: 每2个事件触发一次捕获 10: 每4个事件触发一次捕获 11: 每8个事件触发一次捕获 1:0 CH1M 通道1模式选择 这两位定义了通道方向和输入信号的选择。只有在通道关闭(TMx_CHE寄存器的CH1E 位被清0)时这些位才可写. 00: 通道1配置为输出 01: 通道1配置为输入,IC1映射在TI1上 10: 通道1配置为输入,IC1映射在TI2上 11: 通道1配置为输入,IC1映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). 9.8.6 TMx 通道使能寄存器 (TMx_CHE) 地址偏移: 0x20 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 保留 5 4 3 2 1 0 CH1NP 保留. CH1P CH1E rw rw rw 位 区域 15:4 保留 3 CH1NP 2 保留 1 CH1P 0 CH1E 说明 必须保持复位值. 通道1互补输出极性 当通道1配置为输入模式,此位定义了互补输出信号的极性。 0: 通道1高电平有效. 1: 通道1低电平有效. 必须保持复位值. 通道1极性 当通道1配置为输入模式时,此位定义了IC1信号极性。当通道1配置为输出模式时,此 位定义了输出信号极性。 0: 通道1高电平有效 1: 通道1低电平有效 当TMx_BKDT寄存器的LK[1:0]=11或10时此位不能被更改. 通道1使能 当通道1配置为输入模式时,将此位置1使能OC1信号有效。当通道1配置为输出模式时, 将此位置1使能通道1上的捕获事件。 0: 禁止通道1. 1: 使能通道1. 241 9.8.7 TMx 计数器寄存器 (TMx_CNT) GD32F1x0 用户手册 地址偏移: 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 说明 这些位是当前的计数值。写操作能改变计数器值。 9.8.8 TMx 预分频寄存器 (TMx_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 说明 计数器时钟预分频值 计数器时钟等于PSC时钟除以 (PSC+1),每次当更新事件产生时,PSC 的值 被装入当前预分频寄存器 9.8.9 TMx 计数器自动重载寄存器 (TMx_CARL) 地址偏移: 0x2C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CARL[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15:0 CARL 说明 计数器自动重载值 这些位定义了计数器的自动重载值。 9.8.10 TMx 通道 1 捕获/比较寄存器 (TMx_CHCC1) 地址偏移: 0x34 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 242 GD32F1x0 用户手册 CHCC1[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 15:0 区域 CHCC1 说明 通道1的捕获或比较值 当通道1配置为输入模式时,这些位决定了上次捕获事件的计数器值。并且本寄存器为只 读。 当通道1配置为输出模式时,这些位包含了即将和计数器比较的值。使能相应影子寄存器 后,影子寄存器值随每次更新事件更新。 9.8.11 TMx 通道输入重映射寄存器 (TMx_RMP) 地址偏移: 0x50 复位值: 0x0000 15 14 13 12 11 10 9 8 7 保留 6 5 4 3 位 区域 15:2 保留 说明 必须保持复位值. 1:0 CH1RMP 通道1输入重映射 00: 通道1输入连接到GPIO(TM14_CH1_I) 01: 通道1输入连接到RTCCLK 10: 通道1输入连接到HSE/32时钟 11: 通道1输入连接到CKOUTSEL(受RCC_GCFGR控制) 2 1 0 CH1RMP rw rw 9.9 9.9.1 9.9.2 通用定时器 (TM15) 简介 通用定时器 (TM15)可以用于多种用途,它包括一个16位的向上计数器,2个捕捉/比较寄存器 (TMx_CHCC),1个16位的自动装载计数器寄存器(TMx_CARL)和一些控制寄存器。它适合多 种用途,包括通用定时器,输入信号脉冲宽度测量或者产生输出波形例如单脉冲输出或PWM 输出。 通用 (TM15) 定时器完全独立,它们不共享资源但是可以同步。 主要特征  16位向上自动重载计数器 243 9.9.3 GD32F1x0 用户手册  16位可编程的预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值.  2个独立通道,支持以下功能:输入捕获,输出比较,PWM波形产生(边缘或中间对齐模 式)和单脉冲模式输出.  允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器  中止输入信号可以将定时器输出信号置于复位状态或者一个已知状态  更新事件,输入捕获事件,输出比较事件,中止输入,触发事件可以产生中断/DMA  死区时间可编程的互补输出  使用外部信号控制定时器和定时器互联的同步电路  TM15 主从模式控制器 功能说明 下图提供了高级定时器内部配置细节 图 110. 通用定时器框图 (TM15) TM15_CK CH1 CH2 ITR0 ITR1 ITR2 ITR3 TI1F_ED TI1FP1 TI2FP1 Trigger Controller Mode Slave Controller TRG_OUTPUT Reset, Enable, Up/Down, Count Prescaler Counter AutoReload Register Repetition counter Repeat Register Input Filter Edge Detector Prescaler Capture Register Compare 1 Register DTG Output Control CH1 CH1_N CH2 BKIN Polarity Selection 预分频计数器 预分频器可以将定时器(PCLK)的时钟频率按1到65536之间的任意值分频给计数器(CNT_CLK) 使用。分频系数受预分频寄存器TMx_PSC控制,这个控制寄存器带有缓冲器,它能够在运行 时被改变。新的预分频器的参数在下一次更新事件到来时被采用。 244 GD32F1x0 用户手册 图 111. 当预分频器的参数从1变到2 时,计数器时序图 PCLK EN CNT_CLK CNT_REG Reload Pulse Prescaler CR Prescaler BUF Prescaler CNT F7 F8 F9 FA FB FC 01 02 03 04 修改预分频系数 0 1 0 1 0 01 0101 01 图 112. 当预分频器的参数从1变到4时,计数器时序图 PCLK EN CNT_CLK CNT_REG Reload Pulse Prescaler CR Prescaler BUF Prescaler CNT F7 F8 F9 FA FB FC 00 01 修改预分频系数 0 3 0 3 0 01 2301 23 向上计数模式 在向上计数模式中,计数器从0计数到自动加载值(TMx_CARL寄存器的内容),然后重新从0开 始计数。如果使用了重复计数器功能吗,在向上计数达到设置的重复计数次数加1 (TMx_CREP+1)时,才产生更新事件,否则每次计数器溢出时都会产生更新事件。 245 GD32F1x0 用户手册 可以将TMx_EVG寄存器的UPG位置1来设置更新事件,计数值被清0产生更新事件。 设置TMx_CTLR1寄存器的UPDIS位可以禁止更新事件。 一旦发生更新事件,所有的寄存器(重复计数器,自动重载寄存器,预分频寄存器)都将被更新。 下图给出一些例子,当TMx_CARL=0x63时计数器在不同时钟频率下计数器的动作。 图 113.计数器时序图,内部时钟分频系数为 1 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 5E 5F 60 61 62 63 00 01 02 03 04 05 06 07 图 114.计数器时序图,内部时钟分频系数为2 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 61 62 63 00 01 02 03 04 246 图 115.计数器时序图,内部时钟分频系数为 4 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 62 63 00 01 图 116.计数器时序图,内部时钟分频系数为N PCLK CNT_CLK CNT_REG 31 32 00 overflow Update event (UPE) Update interrupt flag (UPIF) 247 图 117.计数器时序图, 当 ARSE=0 时更新事件 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 5E 5F 60 61 62 63 00 01 02 03 04 05 06 07 Auto-reload register 65 63 修改 CARL 的值 图 118.计数器时序图, 当ARSE=1时更新事件 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 60 61 62 63 64 65 00 01 02 03 04 05 06 07 Auto-reload register Auto-reload shadow register 65 63 修改 CARL 的值 65 63 248 重复计数器 GD32F1x0 用户手册 仅仅在一个给定数字N+1(N为TMx_CREP寄存器的CREP)个循环周期的计数后,重复计数器 被用来产生更新事件或者更新定时器寄存器。向上计数模式下,重复计数器在每次计数器上溢 时递减;向下计数模式下,重复计数器在每次计数器下溢时递减;在中央对齐模式下,重复计 数器在计数器上溢和下溢时递减。 将TMx_EVG寄存器的UPG位置1可以重载TMx_CREP寄存器中CREP的值并产生一个更新事 件。 图 119. 不同模式及不同 TMx_CREP 寄存器设置下更新速率的例子 TM15 只有向上计数边沿对齐模式. Center-aligned mode Upcounting Edge-aligned mode Downcounting Edge-aligned mode CREP = 0 CREP = 1 时钟选择 决定内部预分频计数器时钟源的定时器模块时钟控制器的描述如下。  内部定时器时钟PCLK 如果禁止了从模式,默认用来驱动计数器预分频器的内部时钟源是APB2时钟CK_APB2。如果 使能从模式控制器(将TMx_SMC寄存器的SMC区域设置为包括0x1, 0x2, 0x3和0x7),预分频器 被其他时钟源(由TMx_SMC寄存器的TRGS区域选择,说明如下)锁定。当从模式选择位SMC 被设置为0x4,0x5或0x6,计数器预分频器时钟源由内部时钟PCLK提供。 图 120. 内部时钟分频为1时正常模式下的控制电路 249 GD32F1x0 用户手册 PCLK EN UG Reload Pulse CNT_CLK CNT_REG 17 18 19 20 21 22 23 00 01 02 03 04 05 06  内部触发输入(ITI) 计数器预分频器能在ITI信号的每个上升沿和下降沿计数。此模式可以通过设置TMx_SMC寄存 器 的 SMC 区 域 为 0x6 来 选 择 , 此 时 计 数 器 将 作 为 一 个 事 件 计 数 器 。 输 入 事 件 ITI 能 通 过 设 置 TRGS区域选择。当ITI信号被选为时钟源,内部边沿监测电路将在每个ITI信号上升沿或下降沿 产生一个时钟脉冲来驱动计数器预分频器。  外部输入引脚(TIx) 外部引脚TMx_TIx信号的上升沿和下降沿能驱动计数器预分频器计数。此模式可以通过设置 SMC区域为0x7及设置TRGS区域为0x4, 0x5或0x6来选择。注意TIx源于数字滤波器对TMx_TIx 采样。 捕获/比较通道 TM15拥有2个独立的通道用于捕获输入或比较输出是否匹配。每个通道都围绕一个通道捕获比 较寄存器建立,包括一个输入级,通道控制器和输出级。  输入捕获级 输入级包括一个数字滤波器,一个通道极性选择,边沿监测和一个通道预分频器。通道输入信 号(TIx)被一个数字滤波器采样来产生一个滤波输入信号TIxF。然后通道极性和边沿监测模块产 生一个TI1FP1或TI2FP1信号,来实现输入捕捉功能。通道输入预分频寄存器(CHxICP)可以设 置有效输入事件数目。 图 121. 捕获/比较通道(例如:通道1输入级) 250 GD32F1x0 用户手册 TI1 filter fDTS downcounter CH1ICF[3:0] CHCTLR1 TI1F_Rising 0 Edge Detector TI1F_Falling 1 CH1P/ CH1NP CHE TI1FP1 TI2FP1 TRC 01 IC1 10 11 divider /1, /2, /4, /8 CH1M[ 1:0 ] CHCTLR1 CH1ICP[1:0] CHCTLR1 CH1E CHE  通道控制器 TM15有2个独立的通道用来捕获输入或输出匹配比较 用于输入捕获模式下,当捕获事件发生时,TMx_CHCCx影子寄存器首先捕获计数值然后传送 到TMx_CHCCx预装载寄存器中。 用于输出匹配比较模式下,TMx_CHCCx预装载寄存器的值被复制到相应的影子寄存器中,然 后计数值和影子寄存器的值比较。 图 122. 捕获/比较通道1主电路 CHCC1 CH1M[0] CH1M[1] CH1ICP CH1E CH1G TM_EVG APB BUS MCU-peripheral interface Capture/compare preload register Capture/compare shadow register Counter CNT>CHCC1 CNT=CHCC1 CHCC1 CH1M[0] CH1M[1] CH1OSE UPE  输出级 TM15有2个用于匹配比较、单脉冲和PWM输出功能的通道。 图 123. 捕获/比较通道输出级(通道 1) 251 ETI CNT>CHCC1 CNT=CHCC1 Output mode controller CH1OCE CH1OM[2:0] CHCTLR1 Dead-time generator DT[7:0] BKDT CHE CH1M[ 1:0 ] x0 10 11 GD32F1x0 用户手册 CHE CH1P 0 1 CHE CH1E Output OC enable circuit 11 10 x0 CH1M[ 1:0 ] CHCTLR1 0 1 CH1NP CHE Output enable circuit OC_N CHE CH1NE BKDT POE ROS IOS 图 124. 捕获/比较通道输出级(通道 2) ETI CNT>CHCC2 CNT=CHCC2 Output mode controller CH2OCE CH2OM[2:0] CHCTLR2 0 1 CH2P CHE Output enable OC circuit CHE CHxE BKDT POE ROS 图 125. 输出比较模式,在OC1上切换 CNT_REG 0039 003A 003B B200 B201 CHCC1 oc1ref=OC1 003A B201 修改CHCC1`的值到 0xB201 当CNT_REG的值达到CHCC1 的值后,会产生输出中断 通道用于输入捕获时,当一个有效输入信号的边沿跳变时,计数值被捕获到捕获/比较寄存器 (TMx_CHCCx)中。一旦捕获事件发生,TMx_STR寄存器的CHxIF标志位被置1。如果CHxIF 位已经被置1,还没来得及被软件清除,此通道上又有另一个捕获事件发生,相应通道捕获溢 出标志位CHxOF将被置1。一旦捕获事件发生,CHxDE位决定了是否产生DMA请求,CHxIE 位决定了是否产生中断。 输入捕获模式也可以用于TMx_CHx(TIx)引脚的信号脉宽测量。 252 通道输出参考信号 当TM15用于输出匹配比较模式下,设置CHxOM位可以定义OCxREF信号(通道x输出参考信号) 类型。OCxREF信号有一些输出功能类型,包括,设置CHxOM=0x00可以保持原始电平,设 置CHxOM=0x01可以将OCxREF信号设置为高电平,设置CHxOM=0x02可以将OCxREF信号 设置为低电平,在计数值和TMx_CHCCx寄存器的值匹配时,设置CHxOM=0x03可以切换信号。 PWM模式1和PWM模式2输出也是另一种类型的OCxREF输出,具体设置是通过设置CHxOM =0x06或0x07来完成的。在这些模式中,OCxREF信号级别的改变取决于根据计数方向,以及 TMx_CHCCx寄存器值和计数值之间的关系。详情参考相应位定义。 设置CHxOM=0x04或0x05可以实现OCxREF信号的强制输出功能。输出比较信号能够直接由 软件强置为有效或无效状态,而不依赖于输出比较寄存器和计数器间的比较结果。 当 ETIF 信 号 源 于 外 部 TMx_ ETI 引 脚 且 被 设 置 为 高 电 平 ( 设 置 TMx_CHCTLR1 寄 存 器 的 CHxOCE位为1)时, OCxREF信号被强制变为低电平。直到下一次更新事件发生,OCxREF 信 号才会回到它的有效状态。 互补输出及死区时间 TM15可以输出两路互补信号。互补信号OCx和OCxN的生效由一些控制位的组合实现:寄存 器TMx_CHE的CHxE位和CHxNE位,寄存器TMx_BKDT和TMx_CTLR2的POE, ISOx, ISOxN, IOS和ROS位。输出极性由TMx_CHE寄存器的CHxP位和CHxNP位决定。 如果CHxE, CHxNE和POE位都为1,应该插入死区时间。OCx输出的上升沿和OCxREF的上升 沿相比有一个延迟;OCxN输出的上升沿和OCxREF的下降沿相比有一个延迟。延迟的值是一 个8位的死区时间计数器,由TM15_BKDT寄存器的DT区域决定。如果延迟值大于有效输出 (OCx或OCxN)宽度,将不会产生相应信号脉冲。 图 126. 带有死区时间的互补输出 OCxREF OCx OCxN Dead_time 图 127. 延迟大于负脉冲的死区时间波形 OCxREF OCx OCxN Dead_time Dead_time 253 图 128. 延迟大于正脉冲的死区时间波形 OCxREF OCx OCxN GD32F1x0 用户手册 Dead_time 中止功能 使用中止功能时,输出OCx和OCxN信号电平被以下位控制,TMx_BKDT寄存器的POE, IOS 和ROS 位,TMx_CTLR2寄存器的ISOx和ISOxN位。中止事件发生时,OCx和OCxN信号输出 不能在同一时间同时处于有效电平上。中止源既可以是中止输入引脚又可以是一个HSE时钟失 败事件。时钟失败事件由RCC中的时钟监视器(CKM)产生。将TMx_BKDT寄存器的BRKE位置 1可以使能中止功能。TMx_BKDT寄存器的BRKP位决定了中止输入极性。 发生中止时,POE位被异步地清除,一旦POE位为0,配置TMx_ CTLR2寄存器的ISOx位驱动 输出OCx和OCxN的电平。如果IOS=0,定时器释放输出使能,否则输出使能仍然为高。起初 互补输出被置于复位状态,然后死区时间产生器重新被激活,以便在一个死区时间后驱动输出, 输出电平由ISOx和ISOxN位配置。 发生中止时,TMx_STR寄存器的BKIF位被置1。如果BKIE=1,中断产生。如果BKDE=1,发 送一个DMA请求。 图 129. 响应中止的输出表现(中止输入高电平有效) 254 GD32F1x0 用户手册 Break_In OCxREF OCx OCxN not implemented CCxP=0,ISOx=1 OCx OCxN not implemented CCxP=0,ISOx=0 OCx OCxN not implemented CCxP=1,ISOx=1 OCx OCxN not implemented CCxP=0,ISOx=1 OCx OCxN delay delay delay OCxE=1, CCxP=0,ISOx=0,CCxNE=1,CCxNP=0,ISOxN=1 OCx OCxN delay delay delay OCxE=1, CCxP=0,ISOx=1,CCxNE=1,CCxNP=1,ISOxN=1 OCx OCxN OCxE=1, CCxP=0,ISOx=0,CCxNE=0,CCxNP=0,ISOxN=1 OCx OCxN OCxE=1, CCxP=0,ISOx=1,CCxNE=0,CCxNP=0,ISOxN=0 OCx OCxN OCxE=1, CCxP=0,CCxNE=0,CCxNP=0,ISOx=0,ISOxN=0 or ISOx=0,ISOxN=1 255 单脉冲模式 一 旦 设 置 定 时 器 运 行 在 单 脉 冲 模 式 下 , 没 有 必 要 设 置 TMx_CTLR1 寄 存 器 的 定 时 器 使 能 位 CEN=1来使能计数器。触发信号沿或者软件写CEN=1都可以产生一个脉冲,此后CEN位一直 保持为1直到更新事件发生或者CEN位被软件写0。如果CEN位被软件清0,计数器停止工作, 计数值被保持。如果CEN值被硬件更新事件自动清0,计数器将被再次初始化。 单 脉 冲 模 式 下 , 将 CEN 位 置 1 产 生 的 触 发 有 效 边 沿 将 使 能 计 数 器 。 然 而 , 执 行 计 数 值 和 TMx_CHCCx寄存器值的比较结果依然存在一些时钟延迟。为了最大限度减少延迟,用户可以 将TMx_CHCTLR1寄存器的CHxOEF位置1。单脉冲模式下,触发上升沿产生之后,OCxREF 信 号将被立即强制转换为另一种状态,因为不考虑比较结果的比较匹配事件发生。只有输出通道 配置为PWM1或PWM2输出运行模式下时 CHxOEF位才可用,触发源来源于触发信号。 图 130. 单脉冲模式 TI2 OC1REF OC1 TIM_CNT CARL CCR T 从控制器 TM15能够在多种模式下和一个外部的触发同步,包括复位模式,暂停模式和触发模式。模式 选择通过设置TMx_SMC寄存器的SMC区域来完成。这些模式的触发输入可以通过TMx_SMC 寄存器的TRGS区域来选择,下面以TI1信号为例。从控制器运行模式参见附加章节。  复位模式 在TI1信号的上升沿来临时,计数器和它的预分频器能够重新被初始化,此时更新事件生成寄 存器位UPG将自动被硬件声明,触发事件标志位被置1,然后计数器和它的预分频器被重新初 始化。尽管UPG位被硬件置1,更新事件并不真的发生,它依赖于更新事件禁止控制位UPDIS 被置1与否。如果UPDIS被置1,禁止更新事件发生,将不产生更新事件,然而当TI1上升沿来 临时计数器和它的预分频器仍然被重新初始化。如果TMx_CTLR1寄存器的UPDIS位被清0, 使能更新事件发生,当TI1上升沿来临时更新事件将发生。所有的预加载寄存器将被更新。 256 图 131. 复位模式的控制电路 GD32F1x0 用户手册 CNT_CLK CNT_REG TI1 UPG TRGIF 60 61 62 63 00 01 02 03 04 00 01 02 03 04  暂停模式 暂停模式下,选择的TI1输入信号电平用来控制计数器开启/停止运行。当选择的TI1信号为高电 平时计数器开始计数,当TI1信号变为低电平时停止计数。此处计数器将保持它的当前值且不 再被重启。 图 132. 暂停模式下的控制电路 CNT_CLK CNT_REG 52 53 54 55 56 TI1 EN TRGIF 57 58 59  触发模式 计数器被禁止计数之后,当TI1上升沿来临时计数器可以重新开始计数。当一个TI1上升沿来临, 计数器从当前值开始计数。注意TI1信号仅用来使能计数器重新计数,不能控制计数器停止计 数。 257 图 133. 触发模式下的控制电路 CNT_CLK CNT_REG 56 TI1 EN TRGIF 57 58 59 5A 5B 5C 5D 5E 5F 定时器互连 定时器互相之间可以级联或者同步。可以通过配置一个定时器工作在主模式另一个定时器工作 在从模式来实现。下图显示了一些主从模式触发选择的例子。 下图显示了当定时器15配置为从模式时的触发选择 图 134. 定时器 15 主从模式的例子 TIMER15 TIMER 2 Prescaler Counter Master mode TRGO1 IT0 TRGS control TIMER 3 Master Prescaler Counter mode TRGO1 IT1 control Trigger Slave mode selection control Prescaler Counter TI1F_ED TI1FP1 TI2FP2 ETIF trigger selection 258 其他互连的例子:  定时器 2 作为定时器 15 的预分频器 参考下图连接配置定时器2为定时器15的预分频器,按以下步骤去做: 1. 配置定时器2为主模式,选择其更新事件(UPE)为触发输出 (配置TM2_CTLR2寄存器的 MMC=010)。定时器2在每次计数器溢出时,输出一个周期信号。 2. 配置定时器2周期 (TM2_CARL寄存器)。 3. 选择定时器15输入触发源为定时器2 (配置TM15_SMC寄存器的TRGS=001)。 4. 配置定时器15在外部时钟模式1 (配置TM15_SMC寄存器的SMC=111)。 5. 写1到CEN位启动定时器15 (TM15_CTLR1寄存器)。 6. 写1到CEN位启动定时器2 (TM2_CTLR1寄存器)。  用定时器 2 的使能/更新信号来启动定时器 15 首先,用定时器2的使能输出来使能定时器15,参见下图,在定时器2的使能输出触发的分频内 部时钟下,定时器15从当前值开始计数。 当定时器15接收到触发信号,它的CEN位被自动置1,计数器计数直到关闭。两个计数器时钟 频率都是PCLK时钟经过预分频器3分频(fCNT_CLK = fPCLK/3)。按下面步骤进行: 1. 配置定时器2为主模式,发送它的使能信号作为触发输出(配置TM2_CTLR2寄存器的 MMC=001)。 2. 配置定时器15选择输入触发来自定时器2 (配置TM15_SMC寄存器的TRGS=000)。 3. 配置定时器15在触发模式 (配置TM15_SMC寄存器的SMC=110)。 4. 写1到CEN来开启定时器2 (TM2_CTLR1寄存器)。 图 135. 用定时器 2 的使能输出触发定时器 15 PCLK TIMER2_EN TIMER2_CNT_REG TIMER15_TRGIF TIMER15_CNT_REG 61 62 63 11 12 13 14 在这个例子中,我们也可以使用更新事件代替使能信号作为触发源。参考下图,按以下步骤进 行: 1. 配置定时器2在主模式下,发送它的更新事件(UPE)作为触发输出(配置TM2_CTLR2寄存器 的MMC=010). 2. 配置定时器2周期 (TM2_CARL寄存器)。 259 GD32F1x0 用户手册 3. 配置定时器15获取来自定时器2的输入触发信号 (配置TM15_SMC寄存器的TRGS=001)。 4. 配置定时器15在触发模式 (配置TM15_SMC寄存器的SMC=110)。 5. 写1到CEN位来启动定时器2 (TM2_CTLR1寄存器)。 图 136. 用定时器2的更新来触发定时器15 PCLK TIMER2_UPE TIMER2_CNT_REG 62 63 00 01 02 TIMER15_TRGIF TIMER15_EN TIMER15_CNT_REG 11 12 13 14  使用定时器 2 的使能/OC1 参考信号来使能定时器 15 计数。 在这个例子中,我们使用定时器2的使能输出来控制定时器15的使能。参考下图,在定时器2 被使能后,定时器15在内部分频的时钟上开始计数。两个计数器的时钟频率都是由PCLK时钟 三分频得来(fCNT_CLK=fPCLK/3),按以下步骤做: 1. 配置定时器2在主模式,配置其输出使能信号作为触发输出(配置TM2_CTLR2寄存器的 MMC=001)。 2. 配置定时器15从定时器2获取输入触发 (配置TM15_SMC寄存器的TRGS=001)。 3. 配置定时器15工作在暂停模式 (配置TM15_SMC寄存器的SMC=101)。 4. 写1到CEN位来使能定时器15 (TM15_CTLR1寄存器)。 5. 写1到CEN位来启动定时器2 (TM2_CTLR1寄存器)。 6. 写0到CEN位来停止定时器2 (TM2_CTLR1寄存器)。 图 137. 用定时器2的使能来选通定时器15 PCLK TIMER2_EN TIMER2_CNT_REG TIMER15_TRGIF TIMER15_CNT_REG 61 62 63 11 12 13 260 GD32F1x0 用户手册 这个例子中,我们也可以使用OCx_Ref代替使能信号输出作为触发源。按以下步骤做: 1. 配 置 定 时 器 2 在 主 模 式 下 , 配 置 其 输 出 比 较 1 参 考 信 号 (OC1REF) 为 触 发 输 出 ( 配 置 TM2_CTLR2寄存器的MMC=100). 2. 配置定时器2的OC1REF波形 (TM2_CHCTLR1寄存器). 3. 配置定时器15获取来自定时器2的输入触发 (配置TM15_SMC寄存器的TRGS=001). 4. 配置定时器15工作在暂停模式 (配置TM15_SMC寄存器的SMC=101). 5. 写1到CEN位来使能定时器15 (TM15_CTLR1寄存器). 6. 写1到CEN位来开启定时器 2 (TM2_CTLR1寄存器). 图 138. 用定时器2的OC1REF选通定时器15 PCLK TIMER2_CNT_REG 60 61 62 63 00 01 TIMER2_OC1_REF TIMER15_TRGIF TIMER15_CNT_REG 11 12 13 14  使用一个外部触发来同步两个定时器 配置定时器2的使能触发定时器15的开启,配置定时器2的TI1输入信号上升沿来触发定时器2。 为了确保两个定时器同步开启,定时器2必须配置在主/从模式。按以下步骤做: 1. 配 置 定 时 器 2 工 作 在 从 模 式 来 获 取 来 自 TI1 的 触 发 输 入 ( 配 置 TM2_SMC 寄 存 器 的 TRGS=100)。 2. 配置定时器2工作在触发模式 (配置TM2_SMC 寄存器的SMC=110)。 3. 写MSM=1(TM2_SMC寄存器)来配置定时器2工作在主/从模式。 4. 配置定时器15的触发输入来自定时器2 (配置TM15_SMC 寄存器的TRGS=001)。 5. 配置定时器15工作在触发模式 (配置TM2_SMC 寄存器的SMC=110)。 定时器2的TI1信号产生上升沿时,两个定时器的计数器在内部时钟下开始同步计数,二者的 TRGIF标志位都被置1。 261 图 139. 用定时器 2 的 TI1 输入来触发定时器 15 和定时器 2 PCLK TIMER2_TI1 TIMER2_TRGIF TIMER2_EN TIMER2_CK TIMER2_CNT_REG TIMER15_TRGIF TIMER15_EN TIMER15_CK TIMER15_CNT_REG 00 01 02 03 00 01 02 03 定时器 debug 模式 当微控制器在调试模式,若Cortex™-M3内核停止,且MCUDBG模块中DBG_TMx_STOP配置 位被置1,TMx计数器停止。 262 9.10 TM15 寄存器 GD32F1x0 用户手册 9.10.1 TMx 控制寄存器 1 (TMx_CTLR1) 地址偏移: 0x00 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CDIV[1:0] ARSE 保留 SPM UPS UPDIS CEN rw rw rw rw rw rw rw 位 15:10 9:8 区域 保留 CDIV 7 ARSE 6:4 保留 3 SPM 2 UPS 1 UPDIS 说明 必须保持复位值 时钟分频 软件配置CDIV位规定定时器时钟(PCLK) 和死区时间、采样时钟(DTS)之间的分频系数, 该位被死区时间产生器和数字滤波器使用 00: fDTS=fPCLK 01: fDTS= fPCLK /2 10: fDTS= fPCLK /4 11: 保留 自动重载影子使能 0: 禁止TMx_CARL寄存器的影子寄存器 1: 使能TMx_CARL寄存器的影子寄存器 必须保持复位值 单脉冲模式. 0: 在发生更新事件时,计数器不停止 1: 在发生下一次更新事件( 清除CEN 位)时,计数器停止 更新请求源 软件通过该位选择更新事件源 0: 使能后,下述任一事件产生更新中断或DMA请求: – UPG位被置1 – 计数器溢出/下溢 – 从模式控制器产生的更新 1: 使能后只有计数器溢出/下溢才产生更新中断或DMA 请求。 禁止更新 软件通过该位允许/ 禁止更新事件的产生 0: 允许更新事件产生。当以下事件之一发生时,更新事件产生,具有缓存的寄存器被装 入它们的预装载值: – UPG位被置1 – 计数器溢出/下溢 263 0 CEN GD32F1x0 用户手册 – 从模式控制器产生一个更新事件 1: 禁止更新事件。带有缓存的寄存器保持原有值,如果UPG位被置1或者从模式控制器 产生一个硬件复位事件,计数器和预分频器被重新初始化 使能计数器 0: 禁止计数器 1: 使能计数器 在软件将CEN位置1后,外部时钟、暂停模式和编码器模式才能工作。触发模式可以自 动地通过硬件设置CEN位。 9.10.2 TMx 控制寄存器 2 (TMx_CTLR2) 地址偏移: 0x04 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 ISO2 ISO1N ISO1 保留. MMC[2:0] DMAS CCUC 保留. CCSE rw rw rw rw rw rw rw rw rw 位 15:11 10 区域 保留 ISO2 9 ISO1N 8 ISO1 7 保留 6:4 MMC 说明 必须保持复位值 通道2的空闲输出状态 参见ISO1位 通道1的互补输出空闲状态 0: 当POE=0,OC1N=0. 1: 当POE=0,OC1N=1 只有当TMx_BKDT 寄存器的LK[1:0]位为00时此位才可以被修改 通道1的空闲输出状态 0: 当POE=0,OC1=0 1: 当POE=0,OC1=1 如果OC1N生效,一个死区时间后OC1输出改变。此位只有在TMx_BKDT 寄存器的 LK[1:0]位为00的时候可以被更改 必须保持复位值 主模式控制 这些位控制TRGO信号的选择,主模式下发给从定时器用于同步功能 000: 复位. TMx_EVG寄存器的UG位被置1或从模式控制器产生复位触发一次TRGO脉 冲,后一种情况下,TRGO上的信号相对实际的复位会有一个延迟。 001: 使能. 此模式可用于同时启动多个定时器或控制在一段时间内使能从定时器。计数 器使能信号CNT_EN 被主模式控制器选为触发输出(TRGO)。当CEN控制位被置1或者 暂停模式下触发输入为高电平时,计数器使能信号被置1。当计数器使能信号受控于触发 输入时,TRGO 上会有一个延迟,除非选择了主/ 从模式。 010: 更新. 更新事件被主模式控制器选为触发输入 264 GD32F1x0 用户手册 011: 捕获/比较脉冲.在发生一次捕获或一次比较成功时,主模式控制器产生一个TRGO 脉冲。 100: 比较. OC1REF信号被用于作为触发输出 101: 比较. OC2REF 信号被用于作为触发输出 110: 比较. OC3REF 信号被用于作为触发输出 111: 比较. OC4REF 信号被用于作为触发输出 3 DMAS DMA请求源选择 0: 当通道x事件发生,发送通道x的DMA请求 1: 当更新事件发生,发送通道x的DMA请求 2 CCUC 捕获/比较控制影子寄存器更新控制 使能(CCSE=1)捕获/比较控制影子寄存器(CHxE、CHxNE和CHxOM 位)后,该位控制这 些影子寄存器更新的时间 0: CCUG位被置1时更新影子寄存器 1: 当CCUG位被置1或检测到TRGI上升沿时,影子寄存器更新 当通道没有互补输出时,此位无效。. 1 保留 必须保持复位值. 0 CCSE 捕获/比较控制影子寄存器使能 0: 影子寄存器CHxE、CHxNE和CHxOM 位被禁止 1: 使能影子寄存器CHxE、CHxNE和CHxOM 位,当这些位被写时,只有当CCUG位被 置1时这些位才被更新 当通道没有互补输出时,此位无效。 9.10.3 TMx 从模式控制寄存器 (TMx_SMC) 地址偏移: 0x08 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MSM TRGS[2:0] 保留 SMC[2:0] rw rw rw rw rw rw rw 位 区域 15:8 保留 7 MSM 6:4 TRGS 说明 必须保持复位值. 主-从模式 主-从模式下输入触发上的事件被延迟了,以允许当前定时器和它的从设备通过TRGO完 美同步。如果想要在单个外部事件上同步一些定时器,此模式非常有用。 0: 禁止主-从模式 1: 使能主-从模式 触发选择 这些位选择用于同步计数器的触发输入 000: 内部触发输入0 (ITR0) TM2 001: 内部触发输入1 (ITR1) TM3 265 3 保留 2:0 SMC 010: 内部触发输入2 (ITR2) 保留 011: 内部触发输入3 (ITR3) 保留 100: TI1的边沿标志位 (TI1F_ED) 101: 滤波后的通道1输入 (TI1FP1) 110: 滤波后的通道2输入 (TI2FP2) 111: 外部触发输入(ETIF) 从模式被使能后这些位不能改 GD32F1x0 用户手册 必须保持复位值. 从模式控制 000: 关闭从模式. 如果CEN=1,则预分频器直接由内部时钟驱动 001: 保留,不要设置这个值。 010: 保留,不要设置这个值。 011: 保留,不要设置这个值。 100: 复位模式. 选中的触发输入的上升沿重新初始化计数器,并且更新影子寄存器 101: 暂停模式. 当触发输入为高时,计数器的时钟开启。一旦触发输入变为低,则计数 器停止 110: 触发模式. 计数器在触发输入TRGI 的上升沿启动。计数器不能被从模式控制器关 闭。 111: 外部时钟模式1. 选中的触发输入的上升沿驱动计数器 如果TI1F_ED 被选为触发输入时,不要使用暂停模式。这是因为,TI1F_ ED 在每次TI1F 变化时输出一个脉冲,然而暂停模式是要检查触发输入的电平 9.10.4 TMx DMA 和中断使能寄存器 (TMx_DIE) 地址偏移: 0x0C 复位值: 0x0000 15 14 13 保留 TRGDE rw rw 12 保留 rw 11 10 9 8 7 6 5 4 32 1 0 CH2DE CH1DE UPDE BKIE TRGIE CCUIE 保留 CH2IE CH1IE UPIE rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15 保留 14 TRGDE 13:11 10 保留 CH2DE 9 CH1DE 说明 必须保持复位值. 触发DMA请求使能 0: 禁止触发DMA请求 1: 使能触发DMA请求 必须保持复位值. 通道2 DMA请求使能 0: 禁止通道2 DMA请求 1: 使能通道2 DMA请求 通道1 DMA请求使能 266 0: 禁止通道1 DMA请求 1: 使能通道1 DMA请求 8 UPDE 更新DMA请求使能 0: 禁止更新DMA请求 1: 使能更新DMA请求 7 BKIE 中止中断使能 0: 禁止中止中断 1: 使能中止中断 6 TRGIE 触发中断使能 0: 禁止触发中断 1: 使能触发中断 5 CCUIE 通道控制更新中断使能 0: 禁止通道控制更新中断 1: 使能通道控制更新中断 4:3 保留 必须保持复位值. 2 CH2IE 通道2中断使能 0: 禁止通道2中断 1: 使能通道2中断 1 CH1IE 通道1中断使能 0: 禁止通道1中断 1: 使能通道1中断 0 UPIE 更新中断使能 0: 禁止更新中断 1: 使能更新中断 GD32F1x0 用户手册 9.10.5 TMx 状态寄存器 (TMx_STR) 地址偏移: 0x10 复位值: 0x0000 15 14 13 12 保留 11 10 9 8 7 6 5 CH2OF CH1OF 保留 BKIF TRGIF CCUIF rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 4 3 保留. 2 1 0 CH2IF CH1IF UPIF rc_w0 rc_w0 rc_w0 位 15:11 10 区域 保留 CH2OF 9 CH1OF 说明 必须保持复位值. 通道2重复捕获标志 参见CH1OF描述 通道1重复捕获标志 267 GD32F1x0 用户手册 当通道1被配置为输入模式时,在CH1IF标志位已经被置1后,捕获事件再次发生时,该 标志位可以由硬件置1。该标志位由软件清0。 0: 无重复捕获中断发生 1: 发生了重复捕获中断 8 保留 必须保持复位值. 7 BKIF 中止中断标志位 一旦中止输入有效,由硬件对该位置‗1‘。如果中止输入无效,则该位可由软件清‗0‘。 0: 无中止事件产生 1: 中止输入上检测到有效电平 6 TRGIF 触发中断标志 当发生触发事件时,此标志由硬件置1。此位由软件清0。当从模式控制器处于除暂停模 式外的其它模式时,在TRGI 输入端检测到有效边沿,产生触发事件。当从模式控制器 处于暂停模式时,TRGI的任意边沿都可以产生触发事件。 0: 无触发事件产生 1: 触发中断产生 5 CCUIF 通道控制更新中断标志 当通道控制更新事件发生时此标志位被硬件置1,此位由软件清0。 0: 无通道控制更新中断发生 1: 通道控制更新中断发生 4:3 保留 必须保持复位值. 2 CH2IF 通道2中断标志 参见CH1IF描述 1 CH1IF 通道1中断标志 此标志由硬件置1软件清0。当通道1在输入模式下时,捕获事件发生时此标志位被置1; 当通道1在输出模式下时,此标志位在一个比较事件发生时被置1。 0: 无通道1中断发生 1: 通道1中断发生 0 UPIF 更新中断标志 此位在任何更新事件发生时由硬件置1,软件清0. 0: 无更新中断发生 1: 发生更新中断 9.10.6 15 14 TMx 事件发生寄存器 (TMx_EVG) 地址偏移: 0x14 复位值: 0x0000 13 12 11 10 9 8 7 6 5 保留 BKG TRGG CCUG w w w 4 3 保留 2 1 0 CH2G CH1G UPG w w w 268 位 区域 15:8 保留 7 BKG 6 TRGG 5 CCUG 4:3 保留 2 CH2G 1 CH1G 0 UPG GD32F1x0 用户手册 说明 必须保持复位值. 产生中止事件 该位由软件置1,用于产生一个中止事件,由硬件自动清0。当此位被置1时,POE位被 清0且BKIF位被置1,若开启对应的中断和DMA,则产生相应的中断和DMA传输。 0: 不产生中止事件 1: 产生中止事件 触发事件产生 此位由软件置1,由硬件自动清0. 当此位被置1,TMx_STR寄存器的TRGIF标志位被置1, 若开启对应的中断和DMA,则产生相应的中断和DMA传输。 0: 无触发事件产生 1: 产生触发事件 通道控制更新事件发生 此位由软件置1,由硬件自动清0. 当此位被置1,通道控制寄存器 (CHxE, CHxNE和 CHxOM 位) 的互补输出被更新。 0: 不产生通道控制更新事件 1: 产生通道控制更新事件 必须保持复位值. 通道2捕获或比较事件发生 参见CH1G描述 通道1捕获或比较事件发生 该位由软件置1,用于在通道1产生一个捕获/比较事件,由硬件自动清0。当此位被置1, CC1IF标志位被置1,若开启对应的中断和DMA,则发出相应的中断和DMA请求。此外, 如果通道1配置为输入模式,计数器的当前值被TMx_CHCC1寄存器捕获,如果CH1IF标 志位已经为1,则CH1OF标志位被置1。 0: 不产生通道1捕获或比较事件 1: 发生通道1捕获或比较事件 此位由软件置1,被硬件自动清0。当此位被置1,如果选择了中央对齐或向上计数模式, 计数器被清0。否则(向下计数模式)计数器将载入自动重载值,预分频计数器将同时被清 除。 0: 无更新事件产生 1: 产生更新事件 9.10.7 TMx 通道控制寄存器 1 (TMx_CHCTLR1) 地址偏移: 0x18 复位值: 0x0000 269 15 CH2 OCE rw 14 13 12 CH2OM[2:0] CH2ICF[3:0] rw rw rw 11 10 CH2 OSE CH2 OFE CH2ICP[1:0] rw rw 输出 比较 模式: 9 8 CH2M[1:0] rw rw GD32F1x0 用户手册 7 CH1 OCE rw 6 5 4 CH1OM[2:0] CH1ICF[3:0] rw rw rw 3 2 CH1OSE CH1 OFE CH1ICP[1:0] rw rw 1 0 CH1M[1:0] rw rw 位 区域 说明 15 CH2OCE 通道2输出比较清0使能 参见CH1OCE描述. 14:12 CH2OM 通道2输出比较模式 参见CH1OM描述 11 CH2OSE 通道2输出比较影子寄存器使能 参见CH1OSE描述 10 CH2OFE 通道2输出比较快速使能 参见CH1OFE描述 9:8 CH2M 通道2模式选择 这些位定义了通道的方向和输入信号的选择。只有当通道关闭(TMx_CHE寄存器的 CH2E位被清0)时这些位才可以写。 00: 通道2配置为输出 01: 通道2配置为输入,IC2映射在TI2上 10: 通道2配置为输入,IC2映射在TI1上 11: 通道2配置为输入,IC2映射在TRC上,此模式仅工作在内部触发器输入被选中时(由 TM_SMC寄存器的TRGS位选择)。 7 CH1OCE 通道1输出比较清0使能 当此位被置1,当检测到ETIF输入高电平时,OC1参考信号被清0 0: 禁止通道1输出比较清零 1: 使能通道1输出比较清零 6:4 CH1OM 通道1输出比较模式 此 位 定 义 了 输 出 参 考 信 号 OC1REF 的 动 作 , 而 OC1REF 决 定 了 OC1 、 OC1N 的 值 。 OC1REF高电平有效,而OC1、OC1N的有效电平取决于CH1P、CH1NP位。 000: 冻结. 输出比较寄存器TMx_CHCC1与计数器间的比较对OC1REF不起作用 001: 匹配时设置为高。当计数器的值与捕获/比较寄存器TMx_CHCC1相同时,强制 OC1REF为高。 010: 匹配时设置为低。当计数器的值与捕获/比较寄存器TMx_CHCC1相同时,强制 OC1REF为低。 011: 匹配时翻转。当计数器的值与捕获/比较寄存器TMx_CHCC1相同时,强制OC1REF 翻转。 100: 强制为低. 强制OC1REF为低电平 101: 强制为高. 强制OC1REF为高电平 110: PWM 模式1. 在向上计数时,一旦计数器值小于TMx_CHCC1时,OC1REF 为高 270 3 2 1:0 位 15:12 11:10 9:8 CH1OSE CH1OFE CH1M GD32F1x0 用户手册 电平,否则为低电平。在向下计数时,一旦计数器的值大于TMx_CHCC1时,OC1REF 为 低电平,否则为高电平。 111: PWM 模式2. 在向上计数时,一旦计数器值小于TMx_CHCC1时,OC1REF 为低 电平,否则为高电平。在向下计数时,一旦计数器的值大于TMx_CHCC1时,OC1REF 为 高电平,否则为低电平。 在PWM模式1或PWM模式2中,只有当比较结果改变了或者输出比较模式中从冻 结模式切换到PWM模式时,OC1REF电平才改变。 当TMx_BKDT寄存器的LK[1:0]=11且CH1M=00时此位不能被改变。 通道1输出比较影子寄存器使能 当此位被置1,TMx_CHCC1寄存器的影子寄存器被使能,影子寄存器在每次更新事件时 都会被更新。 0: 禁止通道1输出/比较影子寄存器 1: 使能通道1输出/比较影子寄存器 仅在单脉冲模式下(TMx_CTLR1寄存器的OPM=1),可以在未确认预装载寄存器情况下 使用PWM 模式。 当TMx_BKDT寄存器的LK[1:0]=11且CH1M=00时此位不能被改变。 通道1输出比较快速使能 该位用于通道配置为PWM模式时加快CC1输出对触发输入事件的响应。输出通道将触发 输入信号的有效边沿作为一个比较匹配,OC1被设置为比较电平而与比较结果无关 0: 禁止通道1输出比较快速. 当触发器的输入有一个有效沿时,激活CC1输出的最小延 时为5个时钟周期 1: 使能通道1输出比较快速。当触发器的输入有一个有效沿时,激活CC1输出的最小延 时为3个时钟周期 通道1模式选择 这 些 位 定 义 了 输 入 的 方 向 和 输 入 信 号 的 选 择 。 只 有 当 通 道 关 闭 (TMx_CHE 寄 存 器 的 CH1E位被清0)时这些位才可写。. 00: 通道1配置为输出 01: 通道1配置为输入,IC1映射在TI1上 10: 通道1配置为输入,IC1映射在TI2上 11: 通道1配置为输入,IC1映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TMx_SMC寄存器的TRGS位)。 输入捕获模式 区域 CH2ICF 说明 通道2输入捕获滤波控制 参见CH1ICF描述 CH2ICP 通道2输入捕获预分频器 参见CH1ICP描述 CH2M 通道2模式选择 此位定义了通道方向和输入信号的选择。只有在通道关闭(TMx_CHE寄存器的CH2E位 271 GD32F1x0 用户手册 被清0)时这些位才可写. 00: 通道2配置为输出 01: 通道2配置为输入,IC2映射在TI2上 10: 通道2配置为输入,IC2映射在TI1上 11: 通道2配置为输入,IC2映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). 7:4 CH1ICF 通道1输入捕获滤波控制 数字滤波器由一个事件计数器组成,它记录N个输入事件后会产生一个输出的跳变。这 些位定义了TI1输入信号的采样频率和数字滤波器的长度。 0000: 无滤波器,fSAMP=fDTS, N=1 0001: fSAMP=fPCLK, N=2 0010: fSAMP= fPCLK, N=4 0011: fSAMP= fPCLK N=8 0100: fSAMP=fDTS/2, N=6 0101: fSAMP=fDTS/2, N=8 0110: fSAMP=fDTS/4, N=6 0111: fSAMP=fDTS/4, N=8 1000: fSAMP=fDTS/8, N=6 1001: fSAMP=fDTS/8, N=8 1010: fSAMP=fDTS/16, N=5 1011: fSAMP=fDTS/16, N=6 1100: fSAMP=fDTS/16, N=8 1101: fSAMP=fDTS/32, N=5 1110: fSAMP=fDTS/32, N=6 1111: fSAMP=fDTS/32, N=8 3:2 CH1ICP 通道1输入捕获预分频器 这2位定义了CC1 输入的预分频系数。一旦CH1E =0(TM15_CHE寄存器中),则预分频 器复位。 00: 无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获 01: 每2个事件触发一次捕获 10: 每4个事件触发一次捕获 11: 每8个事件触发一次捕获 1:0 CH1M 通道1模式选择 这两位定义了通道方向和输入信号的选择。只有在通道关闭(TMx_CHE寄存器的CH1E 位被清0)时这些位才可写. 00: 通道1配置为输出 01: 通道1配置为输入,IC1映射在TI1上 10: 通道1配置为输入,IC1映射在TI2上 11: 通道1配置为输入,IC1映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). 272 9.10.8 TMx 通道使能寄存器 (TMx_CHE) GD32F1x0 用户手册 地址偏移: 0x20 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CH2NP 保留. CH2P CH2E CH1NP CH1NE CH1P CH1E rw rw rw rw rw rw rw 位 区域 15:8 保留 7 CH2NP 6 保留 5 CH2P 4 CH2E 3 CH1NP 2 CH1NE 1 CH1P 0 CH1E 说明 必须保持复位值. 通道2互补输出极性 参见CH1NP描述. 必须保持复位值. 通道2极性 参见CH1P描述 通道2使能 参见CH1E描述 通道1互补输出极性 当通道1配置为输入模式,此位定义了互补输出信号的极性。 0: 通道1高电平有效. 1: 通道1低电平有效. 当TMx_BKDT寄存器的LK[1:0]=11或10时此位不能被更改 通道1互补输出使能 当通道1配置为输出模式时,将此位置1使能通道1的互补输出 0: 禁止通道1互补输出. 1: 使能通道1互补输出. 通道1极性 当通道1配置为输入模式时,此位定义了IC1信号极性。当通道1配置为输出模式时,此 位定义了输出信号极性。 0: 通道1高电平有效 1: 通道1低电平有效 当TMx_BKDT寄存器的LK[1:0]=11或10时此位不能被更改. 通道1使能 当通道1配置为输入模式时,将此位置1使能OC1信号有效。当通道1配置为输出模式时, 将此位置1使能通道1上的捕获事件。 0: 禁止通道1. 1: 使能通道1. 273 9.10.9 TMx 计数器寄存器 (TMx_CNT) GD32F1x0 用户手册 地址偏移: 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 说明 这些位是当前的计数值。写操作能改变计数器值。 9.10.10 TMx 预分频寄存器 (TMx_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 说明 计数器时钟预分频值 计数器时钟等于PSC时钟除以 (PSC+1),每次当更新事件产生时,PSC 的值 被装入当前预分频寄存器 9.10.11 TMx 计数器自动重载寄存器 (TMx_CARL) 地址偏移: 0x2C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CARL[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15:0 CARL 说明 计数器自动重载值 这些位定义了计数器的自动重载值。 9.10.12 TMx 重复计数寄存器 (TMx_CREP) 地址偏移: 0x30 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 274 GD32F1x0 用户手册 保留 CREP[7:0] rw rw rw rw rw rw rw rw 位 区域 15:8 保留 7:0 CREP 说明 必须保持复位值. 重复计数器的值 这些位定义了更新事件的产生速率。重复计数器计数值减为0时产生更新事件。影子寄存 器的更新速率也会受这些位影响(前提是影子寄存器被使能) 9.10.13 TMx 通道 1 捕获/比较寄存器 (TMx_CHCC1) 地址偏移: 0x34 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CHCC1[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15:0 CHCC1 说明 通道1的捕获或比较值 当通道1配置为输入模式时,这些位决定了上次捕获事件的计数器值。并且本寄存器为只 读。 当通道1配置为输出模式时,这些位包含了即将和计数器比较的值。使能相应影子寄存器 后,影子寄存器值随每次更新事件更新。 9.10.14 TMx 通道 2 捕获/比较寄存器 (TMx_CHCC2) 地址偏移: 0x38 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CHCC2[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15:0 CHCC2 说明 通道2的捕获或比较值 当通道2配置为输入模式时,这些位决定了上次捕获事件的计数器值。并且本寄存器为只 读。 当通道2配置为输出模式时,这些位包含了即将和计数器比较的值。使能相应影子寄存器 后,影子寄存器值随每次更新事件更新。 9.10.15 TMx 中止和死区时间寄存器 (TMx_BKDT) 地址偏移: 0x44 275 复位值: 0x0000 GD32F1x0 用户手册 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 POE OAE BRKP BRKE ROS IOS LK[1:0] DT[7:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15 POE 14 OAE 13 BRKP 12 BRKE 11 ROS 10 IOS 9:8 LK 说明 主输出使能 根据OAE位的设置值,该位可以由软件清0或被硬件自动置1。一旦中止输入有效,该位 被硬件异步清0。如果一个通道配置为输出模式,如果设置了相应的使能位(TMx_CHE 寄存器的CHxE、CHxNE位),则开启OC 和OCN 输出。 0: 禁止OC 和OCN输出或强制为空闲状态. 1: 使能通道输出. 自动输出使能 此位定义了POE位是否可以被硬件自动置1。 0: POE位不能被硬件置1 1: 如果中止输入无效,下一次更新事件发生时,POE位能被硬件自动置1。 此位只有在TMx_BKDT寄存器的LK[1:0]=00时才可修改. 中止极性 此位定义了中止输入信号的极性。 0:中止输入低电平有效 1:中止输入高电平有效 中止使能 此位置1使能中止事件和CCS时钟失败事件输入. 0: 禁止中止输入 1: 使能中止输入 只有在TMx_BKDT寄存器的LK[1:0]=00时此位才可修改 运行模式下―关闭状态‖配置 当POE位被置1,此位定义了通道(带有互补输出且配置为输出模式)的输出状态。 0: 当POE位被置1,通道输出信号 (OC/OCN)被禁止. 1: 当POE位被置1,通道输出信号 (OC/OCN)被使能,和TMx_CHE寄存器CHxE/CHxNE 位有关。 此位在TMx_BKDT寄存器的LK[1:0]=10或11时不能被更改. 空闲模式下―关闭状态‖配置 当POE位被清0,此位定义了已经配置为输出模式的通道的输出状态。 0: 当POE位被清0,通道输出信号(OC/OCN)被禁止. 1: 当POE位被清0,通道输出信号(OC/OCN)被使能,和TMx_CHE寄存器CHxE/CHxNE 位有关。 此位在TMx_BKDT寄存器的LK[1:0]=10或11时不能被更改. 锁定控制 这两位定义了寄存器的写保护特性. 276 7:0 DT GD32F1x0 用户手册 00: 禁止锁定,无写保护. 01: 锁定模式1,TMx_CTLR2寄存器的ISOx/ISOxN位和TMx_BKDT寄存器的 BRKE/BRKP/OAE/DT位写保护. 10: 锁定模式2. 除了锁定模式1下的寄存器,TMx_CHE寄存器的CHxP/CHxNP 位 (如 果相应通道配置为输出模式) 和TMx_BKDT寄存器的ROS/IOS 位写保护 11: 锁定模式3. 除了锁定模式2下的寄存器,TMx_CHCTRLx寄存器的 CHxOM/CHxOSE (如果相应通道配置为输出)位写保护。 系统复位后这两位只能被写一次,一旦TMx_BKDT寄存器被写入,这两位被写保护。 死区时间值 这些位定义了插入互补输出之间的死区持续时间。DT值和死区时间的关系如下: DT [7:5] =0xx: DT= DT [7:0] x tDT, tDT=tDTS. DT [7:5] =10x: DT= (64+DT [5:0]) xtDT, tDT=tDTS*2. DT [7:5] =110: DT = (32+DT [4:0]) xtDT, tDT=tDTS*8. DT [7:5] =111: DT = (32+DT [4:0])xtDT,tDT=tDTS*16. 此位只有在TMx_BKDT寄存器的LK[1:0]=00时才可修改. 9.10.16 TMx DMA 控制寄存器 (TMx_DCTLR) 地址偏移: 0x48 复位值: 0x0000 15 14 13 保留 12 11 10 9 8 7 6 5 4 3 2 1 0 DBLTH[4:0] 保留 DBAR[4:0] rw rw rw rw rw rw rw rw rw rw 位 15:14 12:8 区域 保留 DBLTH 7:5 保留 4:0 DBAR 说明 必须保持复位值. DMA连续传送长度 这5位定义了DMA 在连续模式下的传送长度( 当对TMx_DTRSF寄存器进行读或写 时,定时器则进行一次连续传送) 必须保持复位值. DMA基地址 这5位定义了DMA 传送的基地址( 当对TIMx_DTRSF寄存器进行读或写时,DBA定义为 从TMx_CTLR1 寄存器所在地址开始的偏移量) 9.10.17 TMx DMA 传送寄存器 (TMx_DTRSF) 地址偏移: 0x4C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DTRSF[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 277 位 15:0 区域 DTRSF GD32F1x0 用户手册 说明 DMA传送 对TMx_DTRSF寄存器的读或写会导致对从TMx_CTLR1 寄存器开始的以下地址范围所 在寄存器的访问: (DBAR + 连续传送计数器) x 4 连续传送计数器由硬件计算,范围为0到DBLTH. 9.11 通用定时器 (TM16/TM17) 9.11.1 9.11.2 9.11.3 简介 通用定时器TM16/TM17可以用于大量场合。它包括一个16位的向上计数器,2个16位的捕捉/ 比较寄存器(TMx_CHCC),1个16位的自动装载计数器寄存器(TMx_CARL)和一些控制寄存器。 它适合多种用途,包括通用定时器,输入信号脉冲宽度测量或者产生输出波形例如单脉冲输出 或PWM输出。 通用 (TM16/TM17) 定时器完全独立,它们不共享资源但是可以同步 主要特征  16位向上自动装载计数器  16位可编程的预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值  1个独立通道,支持以下功能:输入捕获,输出比较,PWM波形产生(边缘或中间对齐模 式),单脉冲模式输出。  允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器.  中止输入信号可以将定时器输出信号置于一个已知状态  更新事件,输入捕获事件,输出比较事件,中止输入可以产生中断/DMA  可编程的死区时间用于输出匹配 功能说明 下图提供了通用定时器内部配置细节. 278 图 140. 通用定时器框图 (TM16/17) GD32F1x0 用户手册 TM15_CK Counter Control Prescaler Counter AutoReload Register Repetition counter Repeat Register CH1 BKIN Polarity Selection Input Filter Edge Detector Prescaler Capture Register Compare 1 Register DTG Output Control CH1 CH1_N 预分频计数器 预分频器可以将定时器(PCLK)的时钟频率按1到65536之间的任意值分频给计数器(CNT_CLK) 使用。分频系数受预分频寄存器TMx_PSC控制,这个控制寄存器带有缓冲器,它能够在运行 时被改变。新的预分频器的参数在下一次更新事件到来时被采用。 279 GD32F1x0 用户手册 图 141. 当预分频器的参数从1变到2时,计数器时序图 PCLK EN CNT_CLK CNT_REG Reload Pulse Prescaler CR Prescaler BUF Prescaler CNT F7 F8 F9 FA FB FC 01 02 03 04 修改预分频系数 0 1 0 1 0 01 0101 01 图 142. 当预分频器的参数从1变到4时,计数器时序图 PCLK EN CNT_CLK CNT_REG Reload Pulse Prescaler CR Prescaler BUF Prescaler CNT F7 F8 F9 FA FB FC 00 01 修改预分频系数 0 3 0 3 0 01 2301 23 向上计数模式 在向上计数模式中,计数器从0计数到自动加载值(TMx_CARL寄存器的内容),然后重新从0开 始计数。如果使用了重复计数器功能吗,在向上计数达到设置的重复计数次数加1 (TMx_CREP+1)时,才产生更新事件,否则每次计数器溢出时都会产生更新事件。 280 GD32F1x0 用户手册 可以将TMx_EVG寄存器的UPG位置1来设置更新事件,计数值被清0产生更新事件。 设置TMx_CTLR1寄存器的UPDIS位可以禁止更新事件 一旦发生更新事件,所有的寄存器(重复计数器,自动重载寄存器,预分频寄存器)都将被更新。 下图给出一些例子,当TMx_CARL=0x63时计数器在不同时钟频率下计数器的动作 图 143.计数器时序图,内部时钟分频系数为 1 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 5E 5F 60 61 62 63 00 01 02 03 04 05 06 07 图 144.计数器时序图,内部时钟分频系数为2 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 61 62 63 00 01 02 03 04 281 图 145.计数器时序图,内部时钟分频系数为4 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) 62 63 00 01 图 146.计数器时序图,内部时钟分频系数为N PCLK CNT_CLK CNT_REG 31 32 00 overflow Update event (UPE) Update interrupt flag (UPIF) 282 图 147.计数器时序图, 当ARSE=0时的更新事件 GD32F1x0 用户手册 PCLK EN CNT_CLK CNT_REG 5E 5F 60 61 62 63 00 01 02 03 04 05 06 07 overflow Update event (UPE) Update interrupt flag (UPIF) Auto-reload register 65 63 修改 CARL 的值 图 148.计数器时序图, 当ARSE=1时更新事件 PCLK EN CNT_CLK CNT_REG overflow Update event (UPE) Update interrupt flag (UPIF) Auto-reload register Auto-reload shadow register 60 61 62 63 64 65 00 01 02 03 04 05 06 07 65 63 修改 CARL 的值 65 63 283 重复计数器 GD32F1x0 用户手册 仅仅在一个给定数字N+1(N为TMx_CREP寄存器的CREP)个循环周期的计数后,重复计数器 被用来产生更新事件或者更新定时器寄存器。向上计数模式下,重复计数器在每个计数器上溢 时递减;向下计数模式下,重复计数器在每个计数器下溢时递减;在中央对齐模式下,重复计 数器在计数器上溢和下溢时递减。 将TMx_EVG寄存器的UPG位置1可以重载TMx_CREP寄存器中CREP的值并产生一个更新事 件。 图 149. 不同模式及不同TMx_CREP寄存器设置下更新速率的例子 TM16/TM17 只有向上计数边沿对齐模式 Center-aligned mode Upcounting Edge-aligned mode Downcounting Edge-aligned mode CREP = 0 CREP = 1 时钟选择 决定内部预分频计数器时钟源的定时器模块时钟控制器的描述如下。  内部定时器时钟PCLK 由于没有从控制器,定时器唯一的时钟是PCLK。 284 图 150. 内部时钟分频为1时正常模式下的控制电路 PCLK EN UPG Reload Pulse CNT_CLK CNT_REG 17 18 19 20 21 22 23 00 01 02 03 04 05 06 捕获/比较通道 TM16/TM17拥有1个独立的通道用于捕获输入或比较输出是否匹配。每个通道都围绕一个通道 捕获比较寄存器建立,包括一个输入级,通道控制器和输出级。  输入捕获级 输入级包括一个数字滤波器,一个通道极性选择,边沿监测和一个通道预分频器。通道输入信 号(TIx)被一个数字滤波器采样来产生一个滤波输入信号TIxF。然后通道极性和边沿监测模块产 生一个TI1FP1或TI2FP1信号,来实现输入捕捉功能。通道输入预分频寄存器(CHxICP)可以设 置有效输入事件数目。 285 图 151. 捕获/比较通道(例如:通道1输入级) GD32F1x0 用户手册 TI1 filter fDTS downcounter CH1ICF[3:0] CHCTLR1 TI1F_Rising 0 Edge Detector TI1F_Falling 1 CH1P/ CH1NP CHE TI1FP1 TI2FP1 TRC 01 IC1 10 11 divider /1, /2, /4, /8 CH1M[ 1:0 ] CHCTLR1 CH1ICP[1:0] CHCTLR1 CH1E CHE  通道控制器 TM16/17有1个独立的通道用来捕获输入或输出匹配比较 用于输入捕获模式下,当捕获事件发生时,TMx_CHCCx 影子寄存器首先捕获计数值然后传 送到TMx_CHCCx 预装载寄存器中。 用于输出匹配比较模式下,TMx_CHCCx预装载寄存器的值被复制到相应的影子寄存器中,然 后计数值和影子寄存器的值比较。 图 152. 捕获/比较通道1主电路 CHCC1 CH1M[0] CH1M[1] CH1ICP CH1E CH1G TM_EVG APB BUS MCU-peripheral interface Capture/compare preload register Capture/compare shadow register Counter CNT>CHCC1 CNT=CHCC1 CHCC1 CH1M[0] CH1M[1] CH1OSE UPE 286  输出级 GD32F1x0 用户手册 TM16/17有1个用于匹配比较、单脉冲和PWM输出功能的通道. 图 153. 捕获/比较通道输出级 (通道1) ETI CNT>CHCC1 CNT=CHCC1 Output mode controller CH1OCE CH1OM[2:0] CHCTLR1 Dead-time generator DT[7:0] BKDT CHE CH1M[ 1:0 ] x0 10 11 CHE CH1P 0 1 CHE CH1E Output OC enable circuit 11 10 x0 CH1M[ 1:0 ] CHCTLR1 0 1 CH1NP CHE Output enable circuit OC_N CHE CH1NE BKDT POE ROS IOS 图 154. 输出比较模式,在OC1上切换 CNT_REG 0039 003A 003B B200 B201 CHCC1 oc1ref=OC1 003A B201 修改CHCC1的值到 0xB201 当CNT_REG的值达到CHCC1 的值后,OC1会翻转,如果中 断被使,会产生输出中断。 通道用于输入捕获时,当一个有效输入信号的边沿跳变时,计数值被捕获到捕获/比较寄存器 (TMx_CHCCx)中。一旦捕获事件发生,TMx_STR寄存器的CHxIF标志位被置1。如果CHxIF 位已经被置1,还没来得及被软件清除,此通道上又有另一个捕获事件发生,相应通道捕获溢 出标志位CHxOF将被置1。一旦捕获事件发生,CHxDE位决定了是否产生DMA请求,CHxIE 位决定了是否产生中断。 输入捕获模式也可以用于TMx_CHx(TIx)引脚的信号脉宽测量。 通道输出参考信号 当TM16/TM17用于输出匹配比较模式下,设置CHxOM位可以定义OCxREF信号(通道x输出参 考信号)类型。OCxREF信号有一些输出功能类型,包括,设置CHxOM=0x00可以保持原始电 287 GD32F1x0 用户手册 平,设置CHxOM=0x01可以将OCxREF信号设置为高电平,设置CHxOM=0x02可以将OCxREF 信号设置为低电平,在计数值和TMx_CHCCx寄存器的值匹配时,设置CHxOM=0x03可以切换 信号 PWM模式1和PWM模式2输出也是另一种类型的OCxREF输出,具体设置是通过设置CHxOM =0x06或0x07来完成的。在这些模式中,OCxREF信号级别的改变取决于根据计数方向,以及 TMx_CHCCx寄存器值和计数值之间的关系。详情参考相应位定义。 设置CHxOM=0x04或0x05可以实现OCxREF信号的强制输出功能。输出比较信号能够直接由 软件强置为有效或无效状态,而不依赖于输出比较寄存器和计数器间的比较结果。 当 ETIF 信 号 源 于 外 部 TMx_ETI 引 脚 且 被 设 置 为 高 电 平 ( 设 置 TMx_CHCTLR1 寄 存 器 的 CHxOCE位为1)时, OCxREF信号被强制变为低电平。直到下一次更新事件发生,OCxREF 信 号才会回到它的有效状态。 互补输出及死区时间 TM16/TM17可以输出两路互补信号。互补信号OCx和OCxN的生效由一些控制位的组合实现: 寄存器TMx_CHE的CHxE位和CHxNE位,寄存器TMx_BKDT和TMx_CTLR2的POE, ISOx, ISOxN, IOS和ROS位。输出极性由TMx_CHE寄存器的CHxP位和CHxNP位决定。 如果CHxE, CHxNE和POE位都为1,应该插入死区时间。OCx输出的上升沿和OCxREF的上升 沿相比有一个延迟;OCxN输出的上升沿和OCxREF的下降沿相比有一个延迟。延迟的值是一 个8位的死区时间计数器,由TMx_BKDT寄存器的DT区域决定。如果延迟值大于有效输出(OCx 或OCxN)宽度,将不会产生相应信号脉冲。 图 155. 带有死区时间的互补输出 OCxREF OCx OCxN Dead_time 图 156. 延迟大于负脉冲的死区时间波形 OCxREF OCx OCxN Dead_time Dead_time 288 图 157. 延迟大于正脉冲的死区时间波形 OCxREF OCx OCxN Dead_time 中止功能 使用中止功能时,输出OCx和OCxN信号电平被以下位控制,TMx_BKDT寄存器的POE, IOS 和ROS 位,TMx_CTLR2寄存器的ISOx 和ISOxN位。中止事件发生时,OCx和OCxN信号输 出不能在同一时间同时处于有效电平上。中止源既可以是中止输入引脚又可以是一个HSE时钟 失败事件。时钟失败事件由RCC中的时钟监视器(CKM)产生。将TMx_BKDT寄存器的BRKE位 置1可以使能中止功能。TMx_BKDT寄存器的BRKP位决定了中止输入极性。 发生中止时,POE位被异步地清除,一旦POE位为0,配置TMx_CR2寄存器的ISOx位驱动输 出OCx和OCxN的电平。如果IOS=0,定时器释放输出使能,否则输出使能仍然为高。起初互 补输出被置于复位状态,然后死区时间产生器重新被激活,以便在一个死区时间后驱动输出, 输出电平由ISOx和ISOxN位配置。 发生中止时,TMx_STR寄存器的BKIF位被置1。如果BKIE=1,中断产生。如果BKDE=1,发 送一个DMA请求。 289 图 158. 响应中止的输出表现(中止输入高电平有效) Break_In OCxREF OCx OCxN not implemented CCxP=0,ISOx=1 OCx OCxN not implemented CCxP=0,ISOx=0 OCx OCxN not implemented CCxP=1,ISOx=1 OCx OCxN not implemented CCxP=0,ISOx=1 OCx OCxN delay delay delay OCxE=1, CCxP=0,ISOx=0,CCxNE=1,CCxNP=0,ISOxN=1 OCx OCxN delay delay delay OCxE=1, CCxP=0,ISOx=1,CCxNE=1,CCxNP=1,ISOxN=1 OCx OCxN OCxE=1, CCxP=0,ISOx=0,CCxNE=0,CCxNP=0,ISOxN=1 OCx OCxN OCxE=1, CCxP=0,ISOx=1,CCxNE=0,CCxNP=0,ISOxN=0 OCx OCxN OCxE=1, CCxP=0,CCxNE=0,CCxNP=0,ISOx=0,ISOxN=0 or ISOx=0,ISOxN=1 单脉冲模式 一 旦 设 置 定 时 器 运 行 在 单 脉 冲 模 式 下 , 没 有 必 要 设 置 TMx_CTLR1 寄 存 器 的 定 时 器 使 能 位 CEN=1来使能计数器。触发信号沿或者软件写CEN=1都可以产生一个脉冲,此后CEN位一直 保持为1直到更新事件发生或者CEN位被软件写0。如果CEN位被软件清0,计数器停止工作, 计数值被保持。如果CEN值被硬件更新事件自动清0,计数器将被再次初始化。 单 脉 冲 模 式 下 , 将 CEN 位 置 1 产 生 的 触 发 有 效 边 沿 将 使 能 计 数 器 。 然 而 , 执 行 计 数 值 和 TMx_CHCCx寄存器值的比较结果依然存在一些时钟延迟。为了最大限度减少延迟,用户可以 将TMx_CHCTLR1寄存器的CHxOEF位置1。单脉冲模式下,触发上升沿产生之后,OCxREF 信 号将被立即强制转换为另一种状态,因为不考虑比较结果的比较匹配事件发生。只有输出通道 配置为PWM1或PWM2输出运行模式下时 CHxOEF位才可用,触发源来源于触发信号。 290 图 159. 单脉冲模式 TI2 OC1REF OC1 TIM_CNT CARL CCR GD32F1x0 用户手册 T 定时器 debug 模式 当微控制器在调试模式,若Cortex™-M3内核停止,且MCUDBG模块中DBG_TMx_STOP配置 位被置1,TMx计数器停止。 291 9.12 TM16/TM17 寄存器 GD32F1x0 用户手册 9.12.1 TMx 控制寄存器 1 (TMx_CTLR1) 地址偏移: 0x00 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CDIV[1:0] ARSE 保留 SPM UPS UPDIS CEN rw rw rw rw rw rw rw 位 15:10 9:8 区域 保留 CDIV 7 ARSE 6:4 保留 3 SPM 2 UPS 1 UPDIS 说明 必须保持复位值 时钟分频 软件配置CDIV位规定定时器时钟(PCLK) 和死区时间、采样时钟(DTS)之间的分频系数, 该位被死区时间产生器和数字滤波器使用 00: fDTRGS=fPCLK 01: fDTRGS=fPCLK/2 10: fDTRGS=fPCLK/4 11: 保留 自动重载影子使能 0: 禁止TMx_CARL寄存器的影子寄存器 1: 使能TMx_CARL寄存器的影子寄存器 必须保持复位值 单脉冲模式. 0: 在发生更新事件时,计数器不停止 1: 在发生下一次更新事件( 清除CEN 位)时,计数器停止 更新请求源 软件通过该位选择更新事件源 0: 使能后,下述任一事件产生更新中断或DMA请求: – UPG位被置1 – 计数器溢出/下溢 – 从模式控制器产生的更新 1: 使能后只有计数器溢出/下溢才产生更新中断或DMA 请求。 禁止更新 软件通过该位允许/ 禁止更新事件的产生 0: 允许更新事件产生。当以下事件之一发生时,更新事件产生,具有缓存的寄存器被装 入它们的预装载值: – UPG位被置1 – 计数器溢出/下溢 292 0 CEN GD32F1x0 用户手册 – 从模式控制器产生一个更新事件 1: 禁止更新事件。带有缓存的寄存器保持原有值,如果UG位被置1或者从模式控制器产 生一个硬件复位事件,计数器和预分频器被重新初始化 使能计数器 0: 禁止计数器 1: 使能计数器 在软件将CEN位置1后,外部时钟、暂停模式和编码器模式才能工作。触发模式可以自 动地通过硬件设置CEN位。 9.12.2 TMx 控制寄存器 2 (TMx_CTLR2) 地址偏移: 0x04 复位值: 0x0000 15 14 13 12 11 10 9 8 7 保留 ISO1N ISO1 rw rw 6 5 保留 4 3 2 1 0 DMAS CCUC Res. CCSE rw rw rw 位 15:11 9 区域 保留 ISO1N 8 ISO1 7:4 保留 3 DMAS 2 CCUC 1 保留 说明 必须保持复位值 通道1的互补输出空闲状态 0: 当POE=0,OC1N=0. 1: 当POE=0,OC1N=1 只有当TMx_BKDT 寄存器的LK[1:0]位为00时此位才可以被修改 通道1的空闲输出状态 0: 当POE=0,OC1=0 1: 当POE=0,OC1=1 如果OC1N生效,一个死区时间后OC1输出改变。此位只有在TMx_BKDT 寄存器的 LK[1:0]位为00的时候可以被更改 必须保持复位值 DMA请求源选择 0: 当通道x事件发生,发送通道x的DMA请求 1: 当更新事件发生,发送通道x的DMA请求 捕获/比较控制影子寄存器更新控制 使能(CCSE=1)捕获/比较控制影子寄存器(CHxE、OCxNE和CHXOM 位)后,该位控制 这些影子寄存器更新的时间 0: CCUG位被置1时更新影子寄存器 1: 当CCUG位被置1或检测到TRGI上升沿时,影子寄存器更新 当通道没有互补输出时,此位无效。 必须保持复位值. 293 GD32F1x0 用户手册 0 CCSE 捕获/比较控制影子寄存器使能 0: 影子寄存器CHxE、OCxNE和CHXOM 位被禁止 1: 使能影子寄存器CHxE、OCxNE和CHXOM 位,当这些位被写时,只有当CCUG位被 置1时这些位才被更新 当通道没有互补输出时,此位无效。 9.12.3 15 14 TMx DMA 和中断使能寄存器 (TMx_DIE) 地址偏移: 0x0C 复位值: 0x0000 13 12 11 10 9 8 7 6 5 4 保留 CH1DE UPDE BKIE 保留 CCUIE rw rw rw rw 32 保留 1 0 CH1IE UPIE rw rw 位 15:10 9 区域 保留 CH1DE 8 UPDE 7 BKIE 6 保留 5 CCUIE 4:2 保留 1 CH1IE 0 UPIE 说明 必须保持复位值. 通道1 DMA请求使能 0: 禁止通道1 DMA请求 1: 使能通道1 DMA请求 更新DMA请求使能 0: 禁止更新DMA请求 1: 使能更新DMA请求 中止中断使能 0: 禁止中止中断 1: 使能中止中断 必须保持复位值. 通道控制更新中断使能 0: 禁止通道控制更新中断 1: 使能通道控制更新中断 必须保持复位值. 通道1中断使能 0: 禁止通道1中断 1: 使能通道1中断 更新中断使能 0: 禁止更新中断 1: 使能更新中断 9.12.4 TMx 状态寄存器 (TMx_STR) 地址偏移: 0x10 294 复位值: 0x0000 GD32F1x0 用户手册 15 14 13 12 11 保留 10 9 8 7 6 5 4 CH1OF 保留 BKIF 保留. CCUIF rc_w0 rc_w0 3 保留 2 1 0 CH1IF UPIF rc_w0 rc_w0 位 15:11 10 区域 保留 CH2OF 9 CH1OF 8 保留 7 BKIF 6 保留 5 CCUIF 4:2 保留 1 CH1IF 0 UPIF 说明 必须保持复位值. 通道2重复捕获标志 参见CH1OF描述 通道1重复捕获标志 当通道1被配置为输入模式时,在CH1IF标志位已经被置1后,捕获事件再次发生时,该 标志位可以由硬件置1。该标志位由软件清0。 0: 无重复捕获中断发生 1: 发生了重复捕获中断 必须保持复位值. 中止中断标志位 一旦中止输入有效,由硬件对该位置‗1‘。如果中止输入无效,则该位可由软件清‗0‘。 0: 无中止事件产生 1: 中止输入上检测到有效电平 必须保持复位值. 通道控制更新中断标志 当通道控制更新事件发生时此标志位被硬件置1,此位由软件清0。 0: 无通道控制更新中断发生 1: 通道控制更新中断发生 必须保持复位值. 通道1中断标志 此标志由硬件置1软件清0。当通道1在输入模式下时,捕获事件发生时此标志位被置1; 当通道1在输出模式下时,此标志位在一个比较事件发生时被置1。 0: 无通道1中断发生 1: 通道1中断发生 更新中断标志 此位在任何更新事件发生时由硬件置1,软件清0. 0: 无更新中断发生 1: 发生更新中断 9.12.5 TMx 事件发生寄存器 (TMx_EVG) 地址偏移: 0x14 295 复位值: 0x0000 GD32F1x0 用户手册 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 BKG 保留 CCUG 保留 CH1G UPG w w w w 位 区域 15:8 保留 7 BKG 6 保留 5 CCUG 4:2 保留 1 CH1G 0 UPG 说明 必须保持复位值. 产生中止事件 该位由软件置1,用于产生一个中止事件,由硬件自动清0。当此位被置1时,POE位被 清0且BKIF位被置1,若开启对应的中断和DMA,则产生相应的中断和DMA传输。 0: 不产生中止事件 1: 产生中止事件 必须保持复位值. 通道控制更新事件发生 此位由软件置1,由硬件自动清0. 当此位被置1,通道控制寄存器 (CHxE, OCxNE和 CHXOM 位) 的互补输出被更新。 0: 不产生通道控制更新事件 1: 产生通道控制更新事件 必须保持复位值. 通道1捕获或比较事件发生 该位由软件置1,用于在通道1产生一个捕获/比较事件,由硬件自动清0。当此位被置1, CC1IF标志位被置1,若开启对应的中断和DMA,则发出相应的中断和DMA请求。此外, 如果通道1配置为输入模式,计数器的当前值被TM1_CHCC1寄存器捕获,如果CH1IF 标志位已经为1,则CH1OF标志位被置1。 0: 不产生通道1捕获或比较事件 1: 发生通道1捕获或比较事件 此位由软件置1,被硬件自动清0。当此位被置1,如果选择了中央对齐或向上计数模式, 计数器被清0。否则(向下计数模式)计数器将载入自动重载值,预分频计数器将同时被清 除。 0: 无更新事件产生 1: 产生更新事件 9.12.6 TMx 通道控制寄存器 1 (TMx_CHCTLR1) 地址偏移: 0x18 复位值: 0x0000 296 GD32F1x0 用户手册 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CH1 OCE CH1OM[2:0] CH1ICF[3:0] CH1OSE CH1 OFE CH1ICP[1:0] CH1M[1:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 输出 比较 模式: 位 区域 15:8 保留 说明 必须保持复位值. 7 CH1OCE 通道1输出比较清0使能 当此位被置1,当检测到ETIF输入高电平时,OC1参考信号被清0 0: 使能通道1输出比较清零 1: 禁止通道1输出比较清零 6:4 CH1OM 通道1输出比较模式 此 位 定 义 了 输 出 参 考 信 号 OC1REF 的 动 作 , 而 OC1REF 决 定 了 OC1 、 OC1N 的 值 。 OC1REF高电平有效,而OC1、OC1N的有效电平取决于CH1P、CH1NP位。 000: 冻结. 输出比较寄存器TMx_CHCC1与计数器间的比较对OC1REF不起作用 001: 匹配时设置为高。当计数器的值与捕获/比较寄存器TMx_CHCC1相同时,强制 OC1REF为高。 010: 匹配时设置为低。当计数器的值与捕获/比较寄存器TMx_CHCC1相同时,强制 OC1REF为低。 011: 匹配时翻转。当计数器的值与捕获/比较寄存器TMx_CHCC1相同时,强制OC1REF 翻转。 100: 强制为低. 强制OC1REF为低电平 101: 强制为高. 强制OC1REF为高电平 110: PWM 模式1. 在向上计数时,一旦计数器值小于TMx_CHCC1时,OC1REF 为高 电平,否则为低电平。在向下计数时,一旦计数器的值大于TMx_CHCC1时,OC1REF 为 低电平,否则为高电平。 111: PWM 模式2. 在向上计数时,一旦计数器值小于TMx_CHCC1时,OC1REF 为低 电平,否则为高电平。在向下计数时,一旦计数器的值大于TMx_CHCC1时,OC1REF 为 高电平,否则为低电平。 在PWM模式1或PWM模式2中,只有当比较结果改变了或者输出比较模式中从冻结模式 切换到PWM模式时,OC1REF电平才改变。 当TMx_BKDT寄存器的LK[1:0]=11且CH1M=00时此位不能被改变。 3 CH1OSE 通道1输出比较影子寄存器使能 当此位被置1,TMx_CHCC1寄存器的影子寄存器被使能,影子寄存器在每次更新事件时 都会被更新。 0: 禁止通道1输出/比较影子寄存器 1: 使能通道1输出/比较影子寄存器 仅在单脉冲模式下(TMx_CTLR1寄存器的OPM=1),可以在未确认预装载寄存器情况下 使用PWM 模式 当TMx_BKDT寄存器的LK[1:0]=11且CH1M=00时此位不能被改变. 297 2 1:0 位 15:8 7:4 3:2 CH1OFE CH1M GD32F1x0 用户手册 通道1输出比较快速使能 该位用于通道配置为PWM模式时加快CC输出对触发输入事件的响应。输出通道将触发 输入信号的有效边沿作为一个比较匹配,OC被设置为比较电平而与比较结果无关 0: 禁止通道1输出比较快速. 当触发器的输入有一个有效沿时,激活CC1输出的最小延 时为5个时钟周期 1: 使能通道1输出比较快速。当触发器的输入有一个有效沿时,激活CC1输出的最小延 时为3个时钟周期 通道1模式选择 这 些 位 定 义 了 输 入 的 方 向 和 输 入 信 号 的 选 择 。 只 有 当 通 道 关 闭 (TMx_CHE 寄 存 器 的 CH1E位被清0)时这些位才可写。. 00: 通道1配置为输出 01: 通道1配置为输入,IC1映射在TI1上 10: 通道1配置为输入,IC1映射在TI2上 11: 通道1配置为输入,IC1映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位). 输入捕获模式 区域 保留 说明 必须保持复位值. CH1ICF CH1ICP 通道1输入捕获滤波控制 数字滤波器由一个事件计数器组成,它记录N个输入事件后会产生一个输出的跳变。这 些位定义了TI1输入信号的采样频率和数字滤波器的长度。 0000: 无滤波器,fSAMP=fDTS, N=1 0001: fSAMP=fPCLK, N=2 0010: fSAMP=fPCLK, N=4 0011: fSAMP=fPCLK, N=8 0100: fSAMP=fDTS/2, N=6 0101: fSAMP=fDTS/2, N=8 0110: fSAMP=fDTS/4, N=6 0111: fSAMP=fDTS/4, N=8 1000: fSAMP=fDTS/8, N=6 1001: fSAMP=fDTS/8, N=8 1010: fSAMP=fDTS/16, N=5 1011: fSAMP=fDTS/16, N=6 1100: fSAMP=fDTS/16, N=8 1101: fSAMP=fDTS/32, N=5 1110: fSAMP=fDTS/32, N=6 1111: fSAMP=fDTS/32, N=8 通道1输入捕获预分频器 这2位定义了CC1 输入的预分频系数。一旦CH1E =0(TMx_CHE寄存器中),则预分频器 复位。 298 1:0 CH1M GD32F1x0 用户手册 00: 无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获 01: 每2个事件触发一次捕获 10: 每4个事件触发一次捕获 11: 每8个事件触发一次捕获 通道1模式选择 这两位定义了通道方向和输入信号的选择。只有在通道关闭(TMx_CHE寄存器的CH1E 位被清0)时这些位才可写. 00: 通道1配置为输出 01: 通道1配置为输入,IC1映射在TI1上 10: 通道1配置为输入,IC1映射在TI2上 11: 通道1配置为输入,IC1映射在TRC上. 此模式仅工作在内部触发输入被选中时(通过 设置TM_SMC寄存器的TRGS位) 9.12.7 TMx 通道使能寄存器 (TMx_CHE) 地址偏移: 0x20 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 保留 5 4 3 2 1 0 CH1NP CH1NE CH1P CH1E rw rw rw rw 位 区域 15:4 保留 3 CH1NP 2 CH1NE 1 CH1P 0 CH1E 说明 必须保持复位值. 通道1互补输出极性 当通道1配置为输入模式,此位定义了互补输出信号的极性。 0: 通道1高电平有效. 1: 通道1低电平有效. 当TMx_BKDT寄存器的LK[1:0]=11或10时此位不能被更改. 通道1互补输出使能 当通道1配置为输出模式时,将此位置1使能通道1的互补输出 0: 禁止通道1互补输出. 1: 使能通道1互补输出. 通道1极性 当通道1配置为输入模式时,此位定义了IC1信号极性。当通道1配置为输出模式时,此 位定义了输出信号极性。 0: 通道1高电平有效 1: 通道1低电平有效 当TMx_BKDT寄存器的LK[1:0]=11或10时此位不能被更改 通道1使能 当通道1配置为输入模式时,将此位置1使能OC1信号有效。当通道1配置为输出模式时, 将此位置1使能通道1上的捕获事件。 299 0: 禁止通道1. 1: 使能通道1. GD32F1x0 用户手册 9.12.8 TMx 计数器寄存器 (TMx_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 说明 这些位是当前的计数值。写操作能改变计数器值. 9.12.9 TMx 预分频寄存器 (TMx_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 说明 计数器时钟预分频值 计数器时钟等于PSC时钟除以 (PSC+1),每次当更新事件产生时,PSC 的值 被装入当前预分频寄存器 9.12.10 TMx 计数器自动重载寄存器 (TMx_CARL) 地址偏移: 0x2C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CARL[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15:0 CARL 说明 计数器自动重载值 这些位定义了计数器的自动重载值。 300 9.12.11 TMx 重复计数寄存器 (TMx_CREP) GD32F1x0 用户手册 地址偏移: 0x30 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 CREP[7:0] rw rw rw rw rw rw rw rw 位 区域 15:8 保留 7:0 CREP 说明 必须保持复位值. 重复计数器的值 这些位定义了更新事件的产生速率。重复计数器计数值减为0时产生更新事件。影子寄存 器的更新速率也会受这些位影响(前提是影子寄存器被使能) 9.12.12 TMx 通道 1 捕获/比较寄存器 (TMx_CHCC1) 地址偏移: 0x34 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CHCC1[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15:0 CHCC1 说明 通道1的捕获或比较值 当通道1配置为输入模式时,这些位决定了上次捕获事件的计数器值。并且本寄存器为只 读。 当通道1配置为输出模式时,这些位包含了即将和计数器比较的值。使能相应影子寄存器 后,影子寄存器值随每次更新事件更新。 9.12.13 TMx 中止和死区时间寄存器 (TMx_BKDT) 地址偏移: 0x44 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 POE OAE BRKP BRKE ROS IOS LK[1:0] DT[7:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15 POE 说明 主输出使能 根据OAE位的设置值,该位可以由软件清0或被硬件自动置1。一旦中止输入有效,该位 被硬件异步清0。如果一个通道配置为输出模式,如果设置了相应的使能位(TMx_CHE 寄存器的CHxE、CHxNE位),则开启OC 和OCN 输出。 301 14 OAE 13 BRKP 12 BRKE 11 ROS 10 IOS 9:8 LK 7:0 DT 0: 禁止OC 和OCN输出或强制为空闲状态. 1: 使能通道输出. GD32F1x0 用户手册 自动输出使能 此位定义了POE位是否可以被硬件自动置1。 0: POE位不能被硬件置1 1: 如果中止输入无效,下一次更新事件发生时,POE位能被硬件自动置1。 此位只有在TMx_BKDT寄存器的LK[1:0]=00时才可修改 中止极性 此位定义了中止输入信号的极性。 0:中止输入低电平有效 1:中止输入高电平有效 中止使能 此位置1使能中止事件和CCS时钟失败事件输入. 0: 禁止中止输入 1: 使能中止输入 只有在TMx_BKDT寄存器的LK[1:0]=00时此位才可修改.. 运行模式下―关闭状态‖配置 当POE位被置1,此位定义了通道(带有互补输出且配置为输出模式)的输出状态。 0: 当POE位被置1,通道输出信号 (OC/OCN)被禁止. 1: 当POE位被置1,通道输出信号 (OC/OCN)被使能,和TMx_CHE寄存器CHxE/CHxNE 位有关。 此位在TMx_BKDT寄存器的LK[1:0]=10或11时不能被更改. 空闲模式下―关闭状态‖配置 当POE位被清0,此位定义了已经配置为输出模式的通道的输出状态。 0: 当POE位被清0,通道输出信号(OC/OCN)被禁止. 1: 当POE位被清0,通道输出信号(OC/OCN)被使能,和TMx_CHE寄存器CHxE/CHxNE 位有关。 此位在TMx_BKDT寄存器的LK[1:0]=10或11时不能被更改. 锁定控制 这两位定义了寄存器的写保护特性. 00: 禁止锁定,无写保护. 01: 锁定模式1,TMx_CTLR2寄存器的ISOx/ISOxN位和TMx_BKDT寄存器的 BRKE/BRKP/OAE/DT 位写保护. 10: 锁定模式2. 除了锁定模式1下的寄存器,TMx_CHE寄存器的CHxP/CHxNP 位 (如 果相应通道配置为输出模式) 和TMx_BKDT寄存器的ROS/IOS 位写保护 11: 锁定模式3. 除了锁定模式2下的寄存器,TMx_CHCTRLx寄存器的 CHxOM/CHxOSE (如果相应通道配置为输出)位写保护。 系统复位后这两位只能被写一次,一旦TMx_BKDT寄存器被写入,这两位被写保护。 死区时间值 这些位定义了插入互补输出之间的死区持续时间。DT值和死区时间的关系如下: 302 GD32F1x0 用户手册 DT[7:5]=0xx: DT=DT[7:0]x tDT, tDT=tDTRGS. DT[7:5]=10x:DT=(64+DT[5:0])xtDT,tDT=tDTRGS*2. DT[7:5]=110: DT =(32+DT[4:0])xtDT, tDT=tDTRGS*8. DT[7:5]=111:DT =(32+DT[4:0])xtDT,tDT=tDTRGS*16. 此位只有在TMx_BKDT寄存器的LK[1:0]=00时才可修改. 9.12.14 TMx DMA 控制寄存器 (TMx_DCTLR) 地址偏移: 0x48 复位值: 0x0000 15 14 13 保留 12 11 10 9 8 7 6 5 4 3 2 1 0 DBLTH[4:0] 保留 DBAR[4:0] rw rw rw rw rw rw rw rw rw rw 位 15:14 12:8 区域 保留 DBLTH 7:5 保留 4:0 DBAR 说明 必须保持复位值. DMA连续传送长度 这5位定义了DMA在连续模式下的传送长度( 当对TMx_DTRSF寄存器进行读或写 时,定时器则进行一次连续传送) 必须保持复位值. DMA基地址 这5位定义了DMA 传送的基地址( 当对TIMx_DTRSF寄存器进行读或写时,DBA定义为 从TMx_CTLR1 寄存器所在地址开始的偏移量) 9.12.15 TMx DMA 传送寄存器 (TMx_DTRSF) 地址偏移: 0x4C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DTRSF[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 15:0 区域 DTRSF 说明 DMA传送 对TMx_DTRSF寄存器的读或写会导致对从TMx_CTLR1 寄存器开始的以下地址范围所 在寄存器的访问: (DBAR + 连续传送计数器) x 4 连续传送计数器由硬件计算,范围为0到DBLTH. 303 10 10.1 10.2 10.3 红外线接口 (IFRR) GD32F1x0 用户手册 简介 红外线接口(IFRR)用来控制发射红外光的LED,发送红外数据来执行红外遥控。 该模块无寄存器,受TM16定时器和TM17定时器控制。通过设置GPIO引脚为高速模式,你可 以提高模块的输出电流能力。 主要特征  GPIO 口的使能控制 IFRR 的输出使能  IFRR 输出信号由 TM16 定时器的通道 1 和 TM17 定时器的通道 1 决定。  为了获取正确的红外信号,TM16 定时器应该产生低频调制包络信号,TM17 应该产生高 频载波信号。  PB9 能够提供高电流输出驱动 LED 接口。 功能描述 IFRR模块整合了TM16定时器和TM17定时器的输出来产生红外信号。 1. 通过对TM16定时器的通道1编程输出低频PWM信号来产生调制包络信号,对TM17定时器 的通道1编程输出高频PWM信号来产生载波信号。产生信号之前需要开启这些通道。 2. 配置GPIO口为复用,并使能这些引脚。 3. 如果你想获得更高的驱动电流输出,需要将IFRR_OUT映射到PB9口上,并且在SYS_CFG 模式下通过相应寄存器设置PB9口为高速模式。 图160. IFRR输出时序图 1 注意: IFRR_OUT比TM17时钟通道1输出信号有一个APB时钟延迟 304 图 161. IFRR 输出时序图 2 注意: 载波的占空比可以被改变,在TM16定时器的通道1输出电平为高时,IFRR_OUT和 TM17定时器的通道1输出信号反相。 图 162. IFRR输出时序图3 注意: IFRR_OUT将保持TM17定时器通道1输出信号的完整,即使TM16定时器的包络信号无 效。 305 11 看门狗 (WDG) GD32F1x0 用户手册 11.1 11.1.1 11.1.2 11.1.3 独立看门狗 (IWDG) 简介 看门狗定时器是一个硬件计时电路,用来监测由软件故障导致的系统故障。GD32F1x0有两个 看门狗外设,独立看门狗和窗口看门狗。它们使用灵活,并提供了很高的安全水平和精准的时 间控制。两个看门狗都是用来解决软件故障问题的。当它的定时计数值达到了预设的门限的时 候,它会触发一个系统复位(对于窗口看门狗来说是个中断)。当处理器工作在调试模式的时候 看门狗定时计数器可以停止计数。独立看门狗寄存器的写保护功能可以防止意料之外的配置更 改。 独立看门狗(IWDG)有独立的时钟源 (LSI)。因此就算是主时钟失效了,它仍然能保持工作状态, 这非常适合于需要独立环境而对计时精度要求不高的场合。窗口看门狗 (WWDG)适用于需要 精确计时的场合。 另外,独立看门狗有一个可配置的窗口值,如果软件在计数器达到窗口值之前重装载计数器, 将产生一个复位请求。 主要特性  自由运行的12位向下计数器。  如果看门狗被使能,那么当向下计数器的值达到0时产生系统复位。  如果看门狗被使能,当向下计数器的值处于窗口值之外时,重装载会导致产生系统复位。  独立时钟源,独立看门狗在主时钟故障(例如待机和深度睡眠模式下)时仍能工作。  独立看门狗硬件控制位,可以用来控制是否在上电时自动启动独立看门狗。  独立看门狗调试模式配置位,可以用来控制当微控制器进入调试模式时(内核被暂停),独 立看门狗计数器是否继续运行。 功能说明 独立看门狗带有一个8级预分频器和一个12位的向下递减计数器。参考下图的独立看门狗的功 能模块。 306 图 163. 独立看门狗框图 状态:PUD LSI 预分频器 /4/8…256 12 位向下递减 计数器 复位 重装载 控制寄存器 重装载寄 存器 状态: RUD 向控制寄存器(IWDG_CTLR)中写0xCCCC可以开启独立看门狗,计数器开始向下计数。当计 数器记到0x000,产生一次复位。 在任何时候向控制寄存器中写0xAAAA都可以重装载计数器,重装载值来源于IWDG_RLDR 寄 存器。软件可以在计数器计数值达到0x000之前可以通过重装载计数器来阻止看门狗复位。 独立看门狗也能够工作在窗口看门狗模式下,只要在IWDG_WND寄存器中设置适当的值即可。 如果重加载操作执行的同时,看门狗计数器的值超出了窗口寄存器(IWDG_WND) 中存储的值, 也会引起系统复位。IWDG_WND的默认值是0x00000FFF, 所以如果没有改写它,那么窗口选 项默认是关闭的。窗口值一旦改变,立即就会引起看门狗计数器的一次重加载动作,将向下递 减计数器置为IWDG_RLDR 中的值,并复位预分频计数器。 如果在可选字节中(OB_USER)打开了" 硬件看门狗" 功能,那么在上电的时候看门狗就被自动 打开。软件应该在计数器达到0x000之前重装载计数器。 IWDG_PSR寄存器和IWDG_RLDR寄存器有写保护功能。想要写入数据到这些寄存器之前, 需要写0x5555到控制寄存器中。写其他任何值到控制寄存器中将会再次启动对这些寄存器的 写 保 护 。 当 预 分 频 器 寄 存 器 (IWDG_PSR) 或 者 重 装 载 寄 存 器 (IWDG_PSR) 更 新 时 , IWDG_STR寄存器的状态位应该被置1。 如果在MCU调试模块中的IWDG_HOLD位被清0,即使Cortex™-M3内核停止(调试模式下)独立 看门狗依然工作。如果IWDG_HOLD位被置1,独立看门狗将在调试模式下停止工作。 表 11.独立看门狗在 40 kHz (LSI)时的最小/最大暂停时间 预分频系数 PS[2:0] 位 最小暂停时间(ms) RL[11:0]=0x000 1/4 000 0.1 1/8 001 0.2 1/16 010 0.4 1/32 011 0.8 1/64 100 1.6 1/128 101 3.2 1/256 110 or 111 6.4 最大暂停时间 (ms) RL[11:0]=0xFFF 409.6 819.2 1638.4 3276.8 6553.6 13107.2 26214.4 307 11.2 校准LSI时钟可以使独立看门狗暂停时间更加精确。 独立看门狗寄存器 GD32F1x0 用户手册 11.2.1 控制寄存器 (IWDG_CTLR) 地址偏移: 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 CT[15:0] wo 位 31:16 15:0 位域 保留 CT[15:0] 说明 必须保持复位值 只可写,写入不同的值来产生不同的功能 0x5555: 关闭IWDG_PSR,IWDG_RLDR和IWDG_WND寄存器的写保护 0xCCCC: 开启独立看门狗计数器。计数减到0时产生中断。 0xAAAA: 重装载计数器 11.2.2 预分频寄存器 (IWDG_PSR) 地址偏移: 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 保留 PS[2:0] rw 位 位域 31:3 保留 2:0 PS[2:0] 说明 必须保持复位值 独立看门狗计时预分频选择。写这些位之前要通过向IWDG_CTLR寄存器写0x5555去除 写保护。在改写这个寄存器的过程中,IWDG_STR 寄存器的PUD位被置1,此时读取此 寄存器的值都是无效的。 000: 1/4 001: 1/8 010: 1/16 011: 1/32 100: 1/64 101: 1/128 110: 1/256 111: 1/256 308 GD32F1x0 用户手册 如果应用需要使用一些预分频系数,改变预分频值之前必须等到PUD位被清0。更新了 预分频寄存器中的值后,在代码持续执行之前不必等待PUD值被清零除非进入省电模 式。 11.2.3 重加载寄存器 (IWDG_RLDR) 地址偏移: 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 保留 RLD [11:0] rw 位 31:12 11:0 位域 保留 RLD[11:0] 说明 必须保持复位值 独立看门狗计数器重加载值,向IWDG_KR寄存器写入0xAAAA 的时候,这个值会被更 新到看门狗计数器中。 这些位有写保护功能。在写这些位之前需向IWDG_CTLR寄存器中写0x5555解除写保 护。 在改写这个寄存器的过程中,IWDG_STR 寄存器的RUD位被置1,从此寄存器中 读取的任何值都是无效的。 如果应用需要使用一些预分频系数,改变重加载值之前必须等到PUD位被清0。更新了 预分频寄存器中的值后,在代码持续执行之前不必等待PUD值被清零除非进入省电模 式。 11.2.4 状态寄存器 (IWDG_STR) 地址偏移: 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 保留 WUD ro RUD ro PUD ro 位 位域 31:2 保留 2 WUD 说明 必须保持复位值 看门狗计数器窗口值更新 IWDG_WND寄存器写操作时,该位被置1,此时读取IWDG_WND 寄存器的任何值都是 309 无效的。 GD32F1x0 用户手册 1 RUD 独立看门狗计数器重装载值更新 IWDG_RLDR寄存器写操作时,该位被置1,此时读取IWDG_RLDR寄存器的任何值都是 无效的。 0 PUD 独立看门狗预分频值更新 IWDG_PSR寄存器写操作时,该位被置1,此时读取IWDG_PSR寄存器的任何值都是无 效的。 11.2.5 31 窗口寄存器 (IWDG_WND) 地址偏移: 0x10 复位值:0x0000 0000 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 保留 WND[11:0] r 位 31:12 11:0 位域 保留 WND[11:0] 说明 必须保持复位值 看门狗计数器窗口值。这些位包含的是窗口值。当计数器计数值超过该寄存器中的值时, 重装载操作将会产生复位。在改变重装载值时,IWDG_SR寄存器中的WUD位必须位于 0状态。 这些位有写保护功能。在写这些位之前需向IWDG_CTLR寄存器中写0x5555解除写保 护。 如果应用需要使用窗口值,改变窗口值之前必须等到PUD位被清0。更新了窗口寄存器 中的值后,在代码持续执行之前不必等待PUD值被清零除非进入省电模式。 11.3 11.3.1 窗口看门狗 (WWDG) 简介 窗口看门狗(WWDG)用来监测由软件故障导致的系统故障。窗口看门狗开启后,7位向下递减 计数器值逐渐减小。计数值达到0x3F时会产生看门狗复位(T6位被清0)。在计数器计数值达到 窗口寄存器值之前,计数器的更新也会产生看门狗复位。因此软件需要在给定的区间内更新计 数器。窗口看门狗有一个提前唤醒中断,当计数器计数值达到0x40时,在中断使能的前提下看 门狗将产生一次中断。 窗口看门狗时钟是由APB1时钟预分频而来。 310 11.3.2 11.3.3 主要特性 GD32F1x0 用户手册  可编程的7位自由运行向下递减计数器  当窗口看门狗使能以后有条件的复位。当计数值达到0x3F,或者计数器在计数值比窗口 寄存器的值更高的时候更新的时候,都会产生看门狗复位。  提前唤醒中断(EWI): 如果看门狗打开,中断允许,计数值达到0x40的时候会产生中断。  窗口看门狗调试模式配置位,通过配置该位,可以使窗口看门狗在调试模式下选择停止还 是继续工作。 功能说明 如果窗口看门狗使能(将WWDG_CTLR寄存器的WDGEN位置1),计数值达到0x3F的时候产生 看门狗复位(CNT[6]位被清0)。在计数值达到窗口寄存器的值时,如果更新计数器也会产生看 门狗复位。 图 164. 窗口看门狗框图 PCLK1/4096 预分频系数 /1/2/4/8 WDGE 7 位递减计数器 CNT CNT[6]=0 复位 窗口 WIN CNT>WIN Write WWDG_CTLR 复位 软件应该通过写WWDG_CTLR寄存器的方式重装载递减计数器来阻止MCU复位。递减计数器 的值降到0x3F之前并且比窗口值更小的时候应该写WWDG_CTLR寄存器。重装载值必须在 0xFF和0xC0之间。 复位之后看门狗总是关闭的。软件可以向WWDG_CTLR的WDGEN写1开启看门狗。窗口看门 狗打开后,计数器始终递减计数,计数器的值应该大于0x3F,也就是说T6位应该被置位。 CNT[5:0] 决 定 了 两 次 重 加 载 的 最 大 间 隔 时 间 。 递 减 速 度 取 决 于 APB1 时 钟 和 预 分 频 器 (WWDG_CTLR)。配置寄存器 (WWDG_CFR)包含了窗口值(WIN[6:0]),递减计数器必须在它 的值小于窗口值大于0x3F的时候重装载,否则产生看门狗复位。 对WWDG_CFR寄存器的EWI位置1可以使能提前唤醒中断(EWI),当计数值达到0x40的时候该 中断产生。同时可以用相应的中断服务程序(ISR) 来触发特定的行为(例如通信或数据记录), 来分析软件故障的原因以及在器件复位的时候挽救重要数据。此外,软件重装载ISR中的计数 器来管理软件系统检查等等。在这种情况下,窗口看门狗将永远不会复位但是可以用于其他地 方。 向WWDG_STR寄存器的EWIF位写0可以清EWI中断。 311 图 165. 窗口看门狗时序图 CNT[6:0] Start 0x7F Write CNT WIN 0x3F Start 11.4 CNT[6]=0 产生复位 Write WWDG_CTLR when CNT>WIN cause reset cause a reset 计算窗口看门狗超时的公式如下: tWWDG = tPCLK1 × 4096 × 2PS × (cnt[5:0] + 1) (ms) 其中: tWWDG: WWDG超时时间 tPCLK1: APB1以ms为单位的时钟周期 tWWDG的最大值和最小值请参考下表 表 12. 36 MHz (fPCLK1)时的最大最小值 预分频系数 PS[1:0] 最小超时 CNT[6:0] =0x40 1/1 00 113 μs 1/2 01 227 μs 1/4 10 455 μs 1/8 11 910 μs 最大超时 CNT[6:0]=0x7F 7.28 ms 14.56 ms 29.12 ms 58.25 ms 如果MCU调试模块中的WWDG_HOLD位被清0,即使Cortex™-M3内核停止工作(调试模式下), 窗口看门狗也可以继续工作。当WWDG_HOLD位被置1时,窗口看门狗在调试模式下停止。 窗口看门狗寄存器 11.4.1 31 30 控制寄存器 (WWDG_CTLR) 地址偏移: 0x00 复位值:0x0000 007F 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 312 GD32F1x0 用户手册 保留 WDGEN rs CNT[6:0] rw 位 位域 31:8 保留 说明 必须保持复位值 7 WDGEN 开启窗口看门狗,硬件复位的时候清0,写0无效。 0: 关闭窗口看门狗 1: 开启窗口看门狗 6:0 CNT[6:0] 看门狗计数器的值。当计数值从0x40降到0x3F时,产生看门狗复位。当计数器值高于窗 口值的时候,写计数器可以产生看门狗复位。 11.4.2 配置寄存器 (WWDG_CFR) 地址偏移: 0x04 复位值:0x0000 007F 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 PS[1:0] rs rw WIN[6:0] rw 位 31:10 9 位域 保留 EWI 8:7 PS[1:0] 6:0 WIN[6:0] 说明 必须保持复位值 提前唤醒中断。如果该位被置1,计数值达到0x40时触发中断。该位由硬件复位清0,写 0没有任何作用。 看门狗计数器的预分频系数 00: PCLK1 / 4096 / 1 01: PCLK1 / 4096 / 2 10: PCLK1 / 4096 / 4 11: PCLK1 / 4096 / 8 窗口值,当看门狗计数器的值大于窗口值时,写看门狗计数器(WWDG_CTLR的T位)会 产生看门狗复位。 11.4.3 状态寄存器 (WWDG_STR) 地址偏移: 0x08 复位值:0x0000 0000 313 GD32F1x0 用户手册 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 保留 EWIF rw 位 位域 31:1 保留 0 EWIF 说明 必须保持复位值 提前唤醒中断标志位。当计数值达到0x40,即使中断没有被使能(WWDG_CFR中的EWI 位被清除)该位也会被硬件置1。这个bit可以通过写0清零,写1无效。 314 12 模拟数字转换器 (ADC) GD32F1x0 用户手册 12.1 12.2 12.3 介绍 12位ADC是一种采用逐次逼近方式的模拟数字转换器。它有多达19个通道,可测量16个外部 和3个内部信号源。模拟看门狗允许应用程序检测输入电压是否超出了用户设定的高低阈值。 各个通道的AD转换可以在单次、连续、扫描、或间断等模式下执行。ADC的结果可以左对齐 或右对齐方式存储在16位数据寄存器里。 ADC 主要特征  12位分辨率  ADC 转换时间:1.0 us (1MS/s)  双时钟域架构 (APB时钟和ADC时钟)  自校准时间:83个ADC时钟周期  可编程采样时间  数据寄存器可配置数据对齐方式  支持规则数据转换的DMA请求  模拟输入通道:16个外部模拟输入通道,1个内部温度传感通道(VSENSE),1个内部参考电 压输入通道(VREFINT),1个外部监测电池VBAT供电引脚输入通道  转换模式:单通道模式,扫描模式,连续模式,间断模式  模拟看门狗  ADC 供电要求:2.6V到3.6V  ADC 输入范围:VSSA ≤VIN ≤VDDA  规则转换和注入组转换完成,模拟看门狗都可以产生中断  规则通道和注入通道外部触发 ADC 引脚和内部信号 表 13. ADC 内部信号 内部信号名称 VSENSE VREFINT 信号类型 输入 输入 说明 内部温度传感器输出电压 内部参考输出电压 315 12.4 GD32F1x0 用户手册 VBAT/2 输入 VBAT 引脚输入电压除以2 表 14. ADC 引脚定义 名称 信号类型 VDDA(1) 输入,模拟供电电源 VSSA(1) ADCx_IN[15:0] 输入,模拟电源地 模拟信号 注释 模拟电源输入等于 VDD ,2.4 V ≤ VDDA ≤ 3.6 V 模拟地,等于 VSS 16 路模拟输入通道 1. VDDA 和 VSSA 必须分别连接到 VDD 和 VSS。 ADC 功能描述 下图给出了ADC模块图,上表给出了ADC引脚说明。 图 166. ADC 模块图 TIM1_TRGO TIM1_CH4 TIM2_TRGO TIM2_CH1 TIM3_CH4 TIM4_TRGO EXTI_15 SWICST TIM1_CH1 TIM1_CH2 TIM1_CH3 TIM2_CH2 TIM3_TRGO TIM4_CH4 EXTI_11 SWRCST ·· · ADC_IN0 ADC_IN1 ADC_IN15 GPIO VBAT/2 VSENSE VREF VREF+ VREFVDDA VSSA Regular channels Inserted channels Channel Mangement ADC_CAL self calibration eorc eoic watchdog Analog event watchdog Interrupt generator ADC Interrupt SAR ADC 12bit Analog block Injected data registers A (16 bits x 4) P B Regular data registers (16 bits) B U S 12.4.1 校准(ADC_CLB) ADC 带有校准功能。在 ADC 校准期间和校准未完成前,应用不能使用 ADC 模块。在 AD 转 换前应执行校准操作,清除比较器的偏移误差和电容不匹配误差的校准过程需要 83 个时钟周 期。由于生产过程存在中的差异,每一片芯片的这些误差都各不相同。 316 12.4.2 12.4.3 12.4.4 GD32F1x0 用户手册 校准是由软件设置 ADC_CLB=1 来实现初始化。在校准期间,ADC_CLB 位必须保持为‗1‘, 当校准完成后,该位被硬件清零。 当 ADC 运行条件改变(VDDA 改变是 ADC 偏移变化的最主要因素,其次是温度的改变),建议重 新做一次校准操作。 内部的模拟校准通过设置 ADC_CTLR2 寄存器的 RSTCLB 位来重置。 软件校准过程: 1. 确保 ADC_ON=1 2. 设置 RSTCLB (可选的) 3. 设置 ADC_CLB=1 4. 等待直到 ADC_CLB=0 双时钟域架构 除了 APB 接口时钟,ADC 的子模块时钟靠 ADC 时钟提供,该 ADC 时钟和 APB 时钟异步并 独立于 APB 时钟。 用户能够在低功耗运行时降低 PLCK 时钟频率,但是 ADC 仍能保持最佳运行状态。 想要更多 ADC 时钟产生的信息可以参考 RCC 4.2.1 部分。 规则组和注入组通道 ADC支持19个多路通道,可以把转换组织成两组:一个规则组通道和一个注入组通道。 规则组由多达16个转换组成,转换顺序由寄存器控制。ADC_RSQ1~ADC_RSQ3寄存器规定了 规则组的通道选择。ADC_RSQ1寄存器的RL[3:0]位规定了全部的转换序列长度。 注入组由多达4个转换组成,转换顺序由寄存器控制,ADC_ISQ寄存器规定了注入组的通道选 择。ADC_ISQ寄存器的IL[3:0]位规定了全部的转换序列长度。 转换模式 单次转换模式 单次转换模式下,ADC_RSQ1~ADC_RSQ3 寄存器组或者ADC_ISQ寄存器规定了通道的转换 顺序。一旦ADCON位被置‗1‘,当相应软件触发或者外部触发发生,单通道的规则组或注入组 完成一次采样和转换。单次转换结束后,转换数据将被存放于ADC_RDTR或ADC_IDTRx寄存 器中,EOC或者EOIC位将被置‗1‘。如果EOCIE或EOICIE位被置‗1‘,将产生一次中断。 317 图 167. 单次转换模式 GD32F1x0 用户手册 CH2 CH1 CH5 CH7 CH11 CH16 CH2 CH1 ··· Regular trigger EORC One circle of regular group, RL=6 Inserted trigger EOIC CH9 CH10 CH8 CH6 One circle of inserted group, IL=4 CH9 CH10 ··· Sample Convert 连续转换模式 对ADC_CTLR2 寄存器的CTN位置‗1‘可以使能连续转换模式。在此模式下,ADC执行由 ADC_RSQ1~ADC_RSQ3寄存器组或者ADC_ISQ寄存器规定的转换通道序列。一旦ADCON 位被置‗1‘,当相应软件触发或者外部触发产生时,规则组或者注入组的AD采样和转换按照指 定的通道一个接一个完成。转换数据保存在ADC_RDTR或ADC_IDTRx寄存器中。如果扫描模 式被禁止,在每个通道转换结束之后EOC或EOIC位将被置‗1‘。如果使能扫描模式,在每个规 则组或者注入组每次转换周期结束后EOC或EOIC位将被置‗1‘。如果EOCIE或EOICIE位被置‗1‘, 将产生中断。 图 168. 持续转换模式, 禁用扫描 Regular trigger ·· CH2 CH1 CH5 CH7 CH11 CH16 CH12 CH17 CH2 CH1 CH5 · EORC One circle of regular group, RL=8 Inserted trigger EOIC ·· CH9 CH10 CH8 CH6 CH9 CH10 · One circle of inserted group, IL=4 Sample Convert 318 GD32F1x0 用户手册 图 169. 持续转换模式, 使能扫描 ·· CH2 CH1 CH5 CH7 CH11 CH2 CH1 CH5 CH7 CH11 CH2 · Regular trigger EORC One circle of regular group, RL=5 Inserted trigger EOIC CH10 CH8 CH6 CH10 CH8 ·· CH6 CH10 · One circle of inserted group, IL=3 Sample Convert 扫描转换模式 扫描转换模式可以通过将ADC_CTLR1寄存器的SM位置‗1‘来使能。在此模式下,ADC扫描转 换所有被ADC_RSQ1~ADC_RSQ3寄存器或ADC_ISQ寄存器选中的所有通道。一旦ADCON 位被置‗1‘,当相应软件触发或者外部触发产生,规则组或注入组通道的ADC采样和转换一个接 一个地完成,直到规则组或注入组转换结束。转换数据存储在ADC_RDTR或ADC_IDTRx寄存 器中。规则组或注入组转换结束后,EOC或者EOIC位将被置‗1‘。如果EOCIE或EOICIE位被置 ‗1‘,将产生中断。ADC_CTLR2寄存器的DMA位在扫描模式下必须设置为‗1‘。 图 170. 扫描转换模式 Regular trigger CH2 CH1 CH5 CH7 CH11 CH16 CH12 CH17 ·· CH2 CH1 · EORC One circle of regular group, RL=8 Inserted trigger EOIC CH9 CH10 CH8 CH6 One circle of inserted group, IL=4 ·· CH9 CH10 · Sample Convert 间断模式 对于规则组来说,ADC_CTLR1寄存器的DISRC位置‗1‘使能间断转换模式。该模式下可以执行 一个短序列的n次转换(n<=8),此转换是ADC_RSQ1~RSQ3寄存器所选择的转换序列的一部分。 数值n由ADC_CR1寄存器的DISCNUM位给出。一个软件触发或者外部触发信号可以启动 ADC_RSQ1~ADC_RSQ3寄存器中选择的下一轮n次采样和转换,直到此序列所有的转换完成 319 12.4.5 12.4.6 GD32F1x0 用户手册 为止。每个规则组转换周期结束后,EOC位将被置‗1‘。EOCIE位被置‗1‘将产生一个中断。 对于注入组来说,ADC_CTLR1寄存器的DISIC位置‗1‘使能间断转换模式。该模式下可以执行 ADC_ISQ寄存器所选择的转换序列的一个通道进行转换。一个软件触发或者外部触发信号可 以启动ADC_ISQ寄存器中选择的下一个通道的转换,直到序列中所有的转换完成为止。每个 注入组转换周期结束后,EOIC位将被置‗1‘。EOICIE位被置‗1‘将产生一个中断。 必须避免同时为规则组和注入组设置间断模式,间断模式只能作用于一组转换。 图 171. 间断转换模式 Regular trigger EORC CH2 CH1 CH5 CH7 CH11 CH16 CH12 CH17 ·· CH2 CH1 CH5 · One circle of regular group, RL=8, DISNUM=3'b010 Inserted trigger EOIC CH9 CH10 CH8 One circle of inserted group, IL=3 ·· CH9 CH10 · Sample Convert 模拟看门狗 ADC_CTLR1 寄存器的 AWREN 和 AWIEN 位置‗1‘将分别使能规则组和注入组的模拟看门狗的 功能。如果 ADC 的模拟转换电压低于低阈值或高于高阈值时,ADC_STR 状态寄存器的 AWE 位将被置‗1‘。如果 AWEIE 位被置‗1‘,将产生中断。ADC_AWHT 和 ADC_AWLT 寄存器用来 设定高低阈值。内部数据的比较在对齐之前完成,因此阀值与 ADC_CTLR2 寄存器的 DAL 位 确定的对齐方式无关。ADC_CTLR1 寄存器的 AWREN,AWIEN,AWSSM 和 AWCS[4:0] 位 可以用来选择模拟看门狗监控单一通道或者多通道。 注入通道管理 自动注入 如果将 ADC_CTLR1 寄存器的 ICA 位置‗1‘,在规则组通道之后,注入组通道被自动转换。该 模式下注入组通道的外部触发不能被使能。该模式可以转换 ADC_RSQ1~ADC_RSQ3 和 ADC_ISQ 寄存器中设置的多至 20 个转换序列。除了 ICA 位之外,如果 CNT 位也被置‗1‘,常 规组通道将在注入组通道之后被自动转换。 不能同时使用自动注入和间断模式。 触发注入 清除ICA位并将SM位置‗1‘,在规则组通道转换期间如果软件触发或者外部触发发生,则启动触 发注入转换。这种情况下,ADC取消当前转换,注入通道序列被以扫描模式进行转换。注入通 道组转换结束后,规则组转换从上次被取消的转换处重新开始。 320 12.4.7 12.4.8 12.4.9 GD32F1x0 用户手册 数据对齐 ADC_CTLR2寄存器的DAL位确定转换后数据存储的对齐方式。 注入组通道转换的数据值已经减去了在ADC_ICOSn寄存器中定义的偏移量,因此结果可能是 一个负值。符号值是一个扩展值。 图 172. 数据对齐 Regular group data 0 0 0 0 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 Inserted group data Sign Sign Sign Sign D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 DAL=0 Regular group data D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 Inserted group data Sign D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 DAL=1 可编程的采样时间 ADC使用若干个ADC_CLK 周期对输入电压采样,采样周期数目可以通过ADC_SPT1和 ADC_SPT2寄存器的SPTn位更改。每个通道可以用不同的时间采样。总转换时间=采样时间 +12.5个ADC_CLK 周期。 外部触发 如果将ADC_CTLR2寄存器的ETERC或ETEIC位置‗1‘,外部触发信号的上升沿可以触发一次规 则组或注入组转换。ETSRC和ETSIC控制位可以用来确定8个可能事件中的哪一个,可以触发 规则和注入组的转换。 表 15. ADC 用于规则通道的外部触发 ETSRC [2:0] 触发源 000 TIM1_CH1 001 TIM1_CH2 010 TIM1_CH3 011 TIM2_CH2 100 TIM3_TRGO 101 TIM15_CH1 110 EXTI_11 111 SWRCST 触发类型 来自片上定时器的内部信号 外部信号 软件控制位 表 16. ADC 用于注入通道的外部触发 ETSRC[2:0] 触发源 000 TIM1_TRGO 触发类型 来自片上定时器的内部信号 321 12.4.10 12.4.11 12.4.12 12.4.13 GD32F1x0 用户手册 001 TIM1_CH4 010 TIM2_TRGO 011 TIM2_CH1 100 TIM3_CH4 101 TIM15_TRGO 110 EXTI_15 外部信号 111 SWICST 软件控制位 DMA 请求 因为规则通道转换的值储存在一个仅有的数据寄存器中,所以当转换多个规则通道时需要使用 DMA 。ADC 在规则组转换结束后产生一个 DMA 请求,DMA 接受到请求后可以将转换的数据 从 ADC_RDTR 寄存器传输到用户指定的目的地址。 温度传感器和内部参考电压 VREF 将ADC_CTLR2 寄存器的TSVREN位置‗1‘可以使能温度传感器通道(ADC1_CH16) 和 VREF 通道 (ADC1_CH17)。温度传感器可以用来测量器件周围的温度。传感器输出电压能被ADC转换成数字量。 建议设置温度传感器的采样时间为17.1µs。 温度传感器不用时,复位TSVREN 位可以将其置于关 电模式。 温度传感器的输出电压随温度线性变化,由于生产过程的多样化,温度变化曲线的偏移在不同 的芯片上会有不同(最多相差45 °C)。内部温度传感器更适合于检测温度的变化,而不是测量 绝对温度。如果需要测量精确的温度,应该使用一个外置的温度传感器。 内部电压参考(VREF)提供了一个稳定的(带隙基准)电压输出给ADC和比较器。VREF 内部连 接到ADC_IN17输入通道。 电池电压监测 ADC_CCR 寄存器的 VBATEN 位允许用户监测从 VBAT 引脚进来的备份电池电压。由于 VBAT 可能比 VDDA 高,为了确保 ADC 的正确操作,VBAT 引脚内部连接到二分压桥。当 VBATEN 置 ‗1‘时该桥自动开启,连接 VBAT/2 到 ADC_IN18 输入通道。因此,转换后的数值为 VBAT 数值的 一半。为了防止不必要的电池能量消耗,推荐仅在需要转换电池电压时才打开 2 分压桥。 ADC 中断 规则组和注入组转换结束和模拟看门狗状态位被置‗1‘的时候都能引发中断。独立的中断使能位 用于灵活设置ADC中断。 12.5 ADC 寄存器 12.5.1 ADC 状态寄存器 (ADC_STR) 地址偏移: 0x00 复位值: 0x0000 0000 322 GD32F1x0 用户手册 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 保留 STRC STIC EOIC EOC AWE rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 位 31:5 4 位域 保留 STRC 3 STIC 2 EOIC 1 EOC 0 AWE 描述 必须保持复位值 规则组转换开始标志 0:规则组转换没有开始 1:规则组转换开始 规则组转换开始时硬件置位 软件写‗0‘清除 注入组转换开始标志 0: 注入组转换没有开始 1: 注入组转换开始 注入组转换开始时硬件置位 软件写‗0‘清除 注入组转换结束标志 0: 注入组转换没有结束 1: 注入组转换结束 注入组转换结束时硬件置位 软件写‗0‘清除. 组转换结束标志 0:组转换没有结束 1:组转换结束 注入组或规则组转换结束时硬件置位 软件写‗0‘或读ADC_RDR 寄存器清除。 模拟看门狗事件标志 0: 没有模拟看门狗事件 1: 产生模拟看门狗事件 转换电压超过ADC_AWLT和 ADC_AWHT 寄存器设定的阈值时由硬件置‗1‘ 软件写‗0‘ 清除。 12.5.2 ADC 控制寄存器 1 (ADC_CTLR1) 地址偏移: 0x04 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 AWREN AWIEN 保留 rw rw rw rw rw rw 323 15 14 13 DISNUM[2:0] rw rw rw 12 11 10 9 8 7 DISIC DISRC ICA AWSSM SM EOICIE rw rw rw rw rw rw 6 AWEIE rw GD32F1x0 用户手册 5 4 3 2 1 0 EOCIE AWCS[4:0] rw rw rw rw rw rw 位 31:24 23 22 21:16 15:13 12 11 10 9 8 7 6 5 位域 保留 描述 必须保持复位值 AWREN 规则组看门狗使能 0: 规则组看门狗禁止 1: 规则组看门狗使能 AWIEN 注入组看门狗使能 0: 注入组看门狗禁止 1: 注入组看门狗使能 保留 必须保持复位值 DISNUM[2:0] 间断模式下的转换数目 触发后即将被转换的通道数目将变成DISNUM+1 DISIC 注入组间断模式 0: 注入组间断模式禁止 1: 注入组间断模式使能 DISRC 规则组间断模式 0: 规则组间断模式禁止 1: 规则组间断模式使能 ICA 注入组自动转换 0: 注入组自动转换禁止 1: 注入组自动转换使能 AWSSM 扫描模式下,模拟看门狗在单通道有效 0: 模拟看门狗在所有通道有效 1: 模拟看门狗在单通道有效 SM 扫描模式 0: 扫描模式使能 1: 扫描模式禁止 EOICIE EOIC中断使能 0: EOIC中断禁止 1: EOIC中断使能 AWEIE AWE中断使能 0: AWE中断禁止 1: AWE中断使能 EOCIE EOC中断使能 324 4:0 AWCS 0: EOC中断禁止 1: EOC中断使能 模拟看门狗通道选择 00000: ADC 通道0 00001: ADC 通道1 00010: ADC 通道2 …… 01111: ADC 通道15 1xx00: ADC 通道16 1xx01: ADC 通道17 1xx1x: ADC 通道18 ―x‖ 代表 0 or 1 GD32F1x0 用户手册 12.5.3 ADC 控制寄存器 2 (ADC_CTLR2) 地址偏移: 0x08 复位值: 0x0000 0000 31 30 29 28 27 26 25 保留 15 14 13 12 11 10 9 ETEIC ETSIC[2:0] DAL 保留. rw rw rw 24 VBA TEN rw 8 DMA rw 23 TSV REN rw 7 22 SWR CST rw 6 21 SWIC ST rw 5 保留 20 19 18 17 16 ETE ETSRC[2:0] 保留. RC rw rw rw rw 4 3 2 1 0 RSTCLB CLB CTN ADCON rw rw rw rw 位 31:24 24 位域 保留 VBATEN 23 TSVREN 22 SWRCST 21 SWICST 20 ETERC 描述 必须保持复位值 软件使能或禁止VBAT 通道. 0: VBAT 通道禁止 1: VBAT 通道使能 ADC1的通道16和17使能 0: ADC1的通道16和17禁止 1: ADC1的通道16和17使能 规则组转换开始. 如果ETSRC是111,该位置‗1‘开启规则组转换。转换开始后,软件置位,软硬件均可清 零。 注入组转换开始. 如果ETSIC是111,该位置‗1‘开启注入组转换。转换开始后,软件置位,软硬件均可清 零。 规则组外部触发使能 0: 规则组外部触发禁止 325 19:17 16 15 14:12 11 10:9 8 7:4 3 2 1: 规则组外部触发使能 GD32F1x0 用户手册 ETSRC[2:0] 规则组外部触发选择 000: 定时器1 CC1 001: 定时器1 CC2 010: 定时器1 CC3 011: 定时器2 CC2 100: 定时器3 TRGO 101: 定时器15 CC1 110: 中断线 11 111: SWRCST 保留 必须保持复位值 ETEIC 注入组外部触发使能 0:注入组外部触发禁止 1:注入组外部触发使能 ETSIC[2:0] 注入组外部触发选择 000: 定时器1 TRGO 001: 定时器1 CC4 010: 定时器2 TRGO 011: 定时器2 CC1 100: 定时器3 CC4 101: 定时器15 TRGO 110: 中断线15 111: SWICST DAL 数据对齐 0: 最低有效位对齐 1: 最高有效位对齐 保留 必须保持复位值 DMA DMA 请求使能 0: DMA请求禁止 1: DMA请求使能 保留 必须保持复位值 RSTCLB 校准复位 在校准寄存器初始化后该位可以软件置位和硬件清零。 0: 校准寄存器初始化结束. 1: 校准寄存器初始化开始 CLB ADC 校准 0: 校准结束 1: 校准开始 326 1 CTN 连续模式 0: 禁止连续模式 1: 使能连续模式 GD32F1x0 用户手册 0 ADCON 开启ADC。该位从‗0‘变成‗1‘将在稳定时间结束后唤醒ADC。当该位被置位以后,不改变 寄存器的其他位仅仅对该位写‗1‘, 将开启转换。 0: 禁止ADC关闭电源 1: 使能ADC 12.5.4 ADC 采样时间寄存器 1 (ADC_SPT1) 地址偏移: 0x0C 复位值: 0x0000 0000 31 30 29 28 27 26 25 保留 15 SPT 15[0] rw 14 13 12 SPT14[2:0] rw rw rw 11 10 9 SPT13[2:0] rw rw rw 24 23 22 21 20 19 18 17 16 SPT17[2:0] SPT16[2:0] SPT15[2:1] rw rw rw rw rw rw rw rw 8 7 6 5 4 3 2 1 0 SPT12[2:0] SPT11[2:0] SPT10[2:0] rw rw rw rw rw rw rw rw rw 位 31:24 23:0 位域 保留 SPTn[2:0] 描述 必须保持复位值 通道:采样时间 000: 1.5 周期 001: 7.5 周期 010: 13.5 周期 011: 28.5 周期 100: 41.5 周期 101: 55.5 周期 110: 71.5 周期 111: 239.5 周期 12.5.5 ADC 采样时间寄存器 2 (ADC_SPT2) 地址偏移: 0x10 复位值: 0x0000 0000 31 30 保留 15 14 SPT 5[0] rw rw 29 28 SPT9[2:0] rw rw 13 12 SPT4[2:0] rw rw 27 26 25 24 23 22 21 20 19 18 17 16 SPT8[2:0] SPT7[2:0] SPT6[2:0] SPT5[2:1] rw rw rw rw rw rw rw rw rw rw rw rw 11 10 9 8 7 6 5 4 3 2 1 0 SPT3[2:0] SPT2[2:0] SPT1[2:0] SPT0[2:0] rw rw rw rw rw rw rw rw rw rw rw rw 327 位 31:30 29:0 位域 保留 SPTn[2:0] 描述 必须保持复位值 通道 采样时间 000: 1.5 周期 001: 7.5 周期 010: 13.5 周期 011: 28.5 周期 100: 41.5 周期 101: 55.5 周期 110: 71.5 周期 111: 239.5 周期 GD32F1x0 用户手册 12.5.6 ADC 注入通道数据偏移寄存器 x (ADC_ICOSx) (x=1..4) 地址偏移: 0x14-0x20 复位值: 0x0000 0000 31 30 29 15 14 13 保留 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 12 11 10 9 8 7 6 5 4 3 2 1 0 ICOSn[11:0] rw rw rw rw rw rw rw rw rw rw rw rw 位 31:12 11:0 位域 保留 描述 必须保持复位值 ICOSn[11:0] 注入通道n的数据偏移 当转换注入通道时,这些位定义了用于从原始转换数据中减去的数值。转换的结果可以 在ADC_IDTRx寄存器中读出 12.5.7 ADC 看门狗高阈值寄存器 (ADC_AWHT) 地址偏移: 0x24 复位值: 0x0000 0FFF 31 30 29 15 14 13 保留 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 12 11 10 9 8 7 6 5 4 3 2 1 0 AWHT[11:0] rw rw rw rw rw rw rw rw rw rw rw rw 位 31:12 11:0 位域 保留 描述 必须保持复位值 AWHT[11:0] 模拟看门狗高阈值 328 这些定义了模拟看门狗的高阈值 GD32F1x0 用户手册 12.5.8 ADC 看门狗低阈值寄存器 (ADC_AWLT) 地址偏移: 0x28 复位值: 0x0000 0000 31 30 29 15 14 13 保留 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 12 11 10 9 8 7 6 5 4 3 2 1 0 AWLT[11:0] rw rw rw rw rw rw rw rw rw rw rw rw 位 31:12 11:0 位域 保留 AWLT[11:0] 描述 必须保持复位值 模拟看门狗低阈值 这些位定义了模拟看门狗的低阈值 12.5.9 ADC 规则序列寄存器 1 (ADC_RSQ1) 地址偏移: 0x2C 复位值: 0x0000 0000 31 30 15 14 RSQ16[0] rw rw 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 RL[3:0] RSQ16[4:1] rw rw rw rw rw rw rw rw 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RSQ15[4:0] RSQ14[4:0] RSQ13[4:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 31:24 23:20 19:0 位域 保留 RL RSQn[4:0] 描述 必须保持复位值 规则通道序列长度 规则通道转换序列中的总的通道数目为RL+1. 通道编号(0..18)写入这些位来选择规则通道的第n个转换的通道 12.5.10 ADC 规则序列寄存器 2 (ADC_RSQ2) 地址偏移: 0x30 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 RSQ12[4:0] RSQ11[4:0] RSQ10[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 329 RSQ10[0] rw rw GD32F1x0 用户手册 RSQ9[4:0] RSQ8[4:0] RSQ7[4:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 31:30 29:0 位域 保留 RSQn[4:0] 描述 必须保持复位值 通道编号(0..18) 写入这些位来选择规则通道的第n个转换的通道。 12.5.11 ADC 规则序列寄存器 3 (ADC_RSQ3) 地址偏移: 0x34 复位值: 0x0000 0000 31 30 保留 15 14 RSQ4[0] rw rw 29 28 27 26 25 24 23 22 21 20 19 18 17 16 RSQ6[4:0] RSQ5[4:0] RSQ4[4:1] rw rw rw rw rw rw rw rw rw rw rw rw rw rw 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RSQ3[4:0] RSQ2[4:0] RSQ1[4:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 31:30 29:0 位域 保留 RSQn[4:0] 描述 必须保持复位值 通道编号(0..18) 写入这些位来选择规则通道的第n个转换的通道 12.5.12 ADC 注入序列寄存器 (ADC_ISQ) 地址偏移: 0x38 复位值: 0x0000 0000 31 30 15 14 ISQ4[0] rw rw 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 IL[1:0] ISQ4[4:1] rw rw rw rw rw rw 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ISQ3[4:0] ISQ2[4:0] ISQ1[4:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 31:22 21:20 19:0 位域 保留 IL ISQn[4:0] 描述 必须保持复位值 注入通道序列长度 注入通道转换序列中的总的通道数目为IL+1 通道编号(0..18) 写入这些位来选择注入通道的第n个转换的通道 和规则通道转换序列不同的是,如果IL[1:0] 长度不足4,注入通道转换从(4-IL) 开始。 IL 注入通道次序 3 ISQ1 >> JSQ2 >> JSQ3 >> JSQ4 330 GD32F1x0 用户手册 2 ISQ2 >> JSQ3 >> JSQ4 1 ISQ3 >> JSQ4 0 ISQ4 12.5.13 ADC 注入数据寄存器 x (ADC_IDTRx) (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 IDTn[15:0] r r r r r r r r r r r r r r r r 位 31:16 15:0 位域 保留 IDTn[15:0] 描述 必须保持复位值 注入转换的数据n 这些位包含了注入通道的转换结果,只读。 12.5.14 ADC 规则数据寄存器 (ADC_RDTR) 地址偏移: 0x4C 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 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 RDTR[15:0] r r r r r r r r r r r r r r r r 位 31:16 15:0 位域 保留 RDTR[15:0] 描述 必须保持复位值 规则通道数据 这些位包含了规则通道的转换结果,只读。 331 13 数-模转换器 (DAC) GD32F1x0 用户手册 13.1 13.2 DAC 简介 数字-模拟转换模块(DAC)是12位电压输出的数字-模拟转换器。DAC可以与DMA控制器配合使 用。12位的DAC的输入数据可以被设置为左对齐或右对齐。可选择通过输出缓冲器来实现较高 的驱动电流。 DAC 主要特性 DAC 主要特性如下:  12位分辨率,数据左对齐或者右对齐。  DMA功能,支持DMA欠载出错检测。  转换同步更新。  外部触发转换。  可配置的内部缓存。  输入参考电压:VDDA DAC通道模块框图见图1。 DAC引脚描述见表17。 单个DAC通道的框图见图173,表17给出了引脚的说明。 332 图 173.DAC通道模块框图 GD32F1x0 用户手册 Trigger selectorx DMA requestx MUX2 X1 EXTI_9 DAC control register TSELx[2:0] SWTRIGx TIM6_TRGO TIM3_TRGO TIM15_TRGO TIM2_TRGO DMA ENx TENx DHRx 12-bit Control logic DOR 12-bit x 12-bit DAC BOF F Buff DAC_OU T VDDA VSSA 13.3 表 17. DAC 引脚 名称 注释 VDDA VSSA DAC_OUTx 模拟电源 模拟电源的地线 DAC 通道x的模拟输出 信号类型 输入,模拟电源 输入,模拟电源地 模拟输出信号 注:一旦使能DAC的通道1,相应的GPIO引脚(PA4)就会自动连接到DAC的模拟输出 (DAC_OUT)。PA4脚首先应设置为模拟输入(以避免寄生干扰和额外的功耗)。 DAC 功能描述 13.3.1 13.3.2 13.3.3 使能 DAC 通道 对 DAC_CTLR 寄存器的 DACEN 位置‗1‘即可打开对 DAC 通道的供电。经过一段启动时间 tWAKEUP,DAC 通道将被使能。 使能 DAC 输出缓存 DAC 集成了一个输出缓存,可以用来减少输出阻抗,无需外部运放即可直接驱动外部负载。 DAC 通道输出缓存可以通过设置 DAC_CTLR 寄存器的 BOFF 位来启用或者关闭。 DAC 数据格式 12位DAC的数据需要按照下文所述写入指定的寄存器: 1. 8位数据右对齐:软件须将数据写入寄存器DAC_DHR8R [7:0]位,实际存入寄存器 DACDHR[11:4]位。 333 13.3.4 13.3.5 13.3.6 13.3.7 GD32F1x0 用户手册 2. 12位数据右对齐:软件须将数据写入寄存器DAC_DHR12R[11:0]位,实际存入寄存器 DACDHR[11:0]位。 3. 12位数据左对齐:软件须将数据写入寄存器DAC_DHR12L[15:4]位,实际存入寄存器 DACDHR[11:0]位。 DAC 转换 任何输出到DAC通道等待转换的数据必须首先存在DHR寄存器里(DAC_DHR8R, DAC_DHR12R, DAC_DHR12L)。 如果没有选择硬件触发(寄存器DAC_CTLR的TEN位置‗0‘),存入DAC_DHR 寄存器的数据将 会自动传至寄存器DAC_DOR。如果选择硬件触发(寄存器DAC_CTLR的TEN位置‗1‘),数据传 输将在相应触发以后完成。 当DAC_DHR寄存器的数据加载到DAC_DOR寄存器,经过时间tSETTLING 以后,模拟输出 有效,tSETTLING 随着电源电压和模拟输出负载的不同会有所变化。 DAC 输出电压 DAC通道引脚的模拟输出电压满足以下关系: DAC 输出 = VDDA*DOR/4095 数字输入被线性地转化为模拟输出电压,其范围为0到VDDA。 DMA 请求 DAC通道具有DMA功能。 当 DMAENx 位被置‗1‘,如果有外部触发(不是软件触发)发生,则产生一个 DMA 请求。然后 DAC_DHR 寄存器内的数据被传送到 DAC_DOR 寄存器。 DAC 触发 如果 TENx 控制位被置‗1‘,DAC 转换可以由某一外部事件触发(定时器计数器,外部中断线)。 每次DAC接口检测到选定的触发输入的上升沿,最近存放在DAC_DHR寄存器里的数据会被传 送到DAC_DOR寄存器中去。 如果选择软件触发,一旦 SWTRIG 位被置‗1‘,转换即开始。一旦寄存器 DAC_DHR 中的数据 加载到寄存器 DAC_DOR,SWTRIG 位会被硬件清零。 表 18 DAC 的外部触发源 TSEL[2:0] 触发源 000 定时器6 TRGO事件 001 定时器3 TRGO事件 010 保留 011 定时器15 TRGO事件 100 定时器2 TRGO事件 触发类型 片上内部定时信号 334 GD32F1x0 用户手册 101 保留 110 EXTI线路9 外部信号 111 SWTRIG 软件触发 13.4 DAC 寄存器 13.4.1 DAC 控制寄存器 (DAC_CTLR) 地址偏移: 0x00 复位值: 0x0000 0000 31 30 15 14 保留 29 28 27 13 12 11 DMA DMA UDRIE EN 26 25 24 23 保留 10 9 8 7 保留 22 21 6 5 rw 20 19 4 3 TSEL rw rw 18 17 16 2 1 0 TEN rw BOFF rw DACEN rw 位 31:14 区域 保留 说明 必须保持复位值 13 DMAUDRIE DAC DMA 欠载中断使能 0: DAC DMA 欠载中断关闭 1: DAC DMA 欠载中断使能 12 DMAEN DAC 通道 1 DMA 使能 0: DAC DMA 模式关闭 1: DAC DMA 模式使能 11:6 保留 必须保持复位值 5:3 TSEL DAC 触发选择 该位只能在位 TEN=1 时使用,用于选择外部触发事件。 000: Timer 6 TRGO 事件 001: Timer 8 TRGO 事件 010: Timer 7 TRGO 事件 011: Timer 5 TRGO 事件 100: Timer 2 TRGO 事件 101: Timer 4 TRGO 事件 110: 外部中断线 9 111: 软件触发 2 TEN DAC 触发使能 该位由软件来置位和清除,用来使能和关闭 DAC 触发 0: DAC 触发关闭 335 1: DAC 触发使能 GD32F1x0 用户手册 1 BOFF 关闭 DAC 输出缓存 该位由软件来置位和清除,用来使能和关闭 DAC 输出缓存。 0: 使能 DAC 输出缓存 1: 关闭 DAC 输出缓存 0 DACEN DAC 使能 该位由软件来置位和清除,用来使能和关闭 DAC。. 0: 关闭 DAC 1: 使能 DAC 13.4.2 DAC 软件触发寄存器 (DAC_SWTR) 地址偏移: 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 保留 SWTR rw 位 区域 31:1 保留 0 SWTR 说明 必须保持复位值 DAC 软件触发 0: 关闭软件触发。 1: 使能软件触发。 13.4.3 DAC 12 位右对齐数据保持寄存器 (DAC_DHR12R) 地址偏移: 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 保留 DACDHR 31:12 区域 保留 rw rw rw rw rw rw rw rw rw rw rw rw 说明 必须保持复位值 11:0 DACDHR 12 位 DAC 右对齐数据 这些位由软件写入,表示 DAC 的 12 位数据。 336 13.4.4 GD32F1x0 用户手册 DAC 12 位左对齐数据保持寄存器 (DAC_DHR12L) 地址偏移: 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 DACDHR 保留 rw rw rw rw rw rw rw rw rw rw rw rw 位 31:16 15:4 3:0 区域 保留 DACDHR 保留 说明 必须保持复位值 12 位 DAC 左对齐数据 这些位由软件写入,表示 DAC 的 12 位数据。 必须保持复位值 13.4.5 31 30 15 14 DAC 8 位右对齐数据保持寄存器 (DAC_DHR8R) 地址偏移:0x10 复位值: 0x0000 0000 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 DACDHR[11:4] rw rw rw rw rw rw rw rw 位 区域 31:8 保留 说明 必须保持复位值 7:0 DACDHR[11:4] 8 位 DAC 右对齐数据 这些位由软件写入,表示 DAC 的 8 位数据 13.4.6 DAC 数据输出寄存器 (DAC_DOR) 地址偏移: 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 保留 DACDOR rw rw rw rw rw rw rw rw rw rw rw rw 337 位 31:12 0 区域 保留 DACDOR 说明 必须保持复位值 DAC 输出数据 只读,表示 DAC 的输出数据 GD32F1x0 用户手册 13.4.7 DAC 状态寄存器 (DAC_STR) 地址偏移:0x34 复位值: 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 保留 DMAUDR 保留 rw 位 31:14 13 12:0 区域 保留 DMAUDR 保留 说明 必须保持复位值 DAC 通道 1 的 DMA 欠载标志 该位由硬件置‗1‘,软件清‗0‘(通过写‗1‘) 0: 无 DMA 欠载出错发生 1: DMA 欠载出错发生 (DAC 的转换选择触发频率高于 DMA 的响应速度) 必须保持复位值 338 14 I2C 接口 GD32F1x0 用户手册 14.1 14.2 14.3 简介 I2C (集成电路间总线)模块提供了符合工业标准的两线串行制接口,可用于MCU和外部I2C设 备的通讯。 I2C总线使用两条串行线:串行数据线SDA和串行时钟线SCL。 I2C 接 口 模块实 现 了 I2C协议 的 标 速 模式 和 高 速 模式 , 具 备 CRC 计 算 和校验 功 能 、 支持 SMBus(系统管理总线)和PMBus (电源管理总线),此外还支持多主机I2C总线架构。I2C接口模 块也支持DMA模式,可有效减轻CPU的负担。 主要功能  并行总线至I2C总线协议的转换及接口  同一接口既可实现主机功能又可实现从机功能  主从机之间的双向数据传输  支持7位和10位的地址模式和广播寻址  支持I2C多主机模式  支持标速(最高100 kHz)和快速(最高400 kHz)  从机模式下可配置的SCL主动拉低  支持DMA模式  兼容SMBus 2.0和PMBus  两个中断:字节成功发送中断和错误事件中断  可选择的PEC (报文错误校验)生成和校验 功能说明 I2C接口的内部结构如下图所示。 339 图174. I2C模块框图 PEC 寄存器 SDA SDA控制 SCL SCL控制 CRC计算 移位寄存器 数据缓冲寄存器 APB 总线 SMBA 时序控制逻辑 控制寄存器 标志位 14.3.1 14.3.2 DMA/中断 表 19. I2C 总线术语说明 术语 说明 发送器 发送数据到总线的设备 接收器 从总线接收数据的设备 主机 初始化数据传输,产生时钟信号和结束数据传输的设备 从机 由主机寻址的设备 多主 不破坏信息的前提下同时控制总线的多个主机 同步 同步两个或更多设备之间的时钟信号的过程 仲裁 如果超过一个主机同时试图控制总线,只有一个主机被允许,且获胜主 机的信息不被破坏,保证上述的过程叫仲裁 SDA 线和 SCL 线 I2C模块有两条接口线:串行数据SDA线和串行时钟SCL线。连接到总线上的设备通过这两根 线互相传递信息。SDA和SCL都是双向线,通过一个电流源或者上拉电阻接到电源正极。当总 线空闲时,两条线都是高电平。连接到总线的设备输出极必须带开漏或者开集,以提供线与功 能。I2C总线上的数据在标准模式下可以达到100 kbit/s,在高速模式下可以达到400 kbit/s。由 于I2C总线上可能会连接不同工艺的设备,逻辑‗0‘和逻辑‗1‘的电平并不是固定的,取决于VDD 的实际电平。 数据有效性 时钟信号的高电平期间SDA线上的数据必须稳定。只有在时钟信号SCL变低的时候数据线SDA 340 14.3.3 14.3.4 GD32F1x0 用户手册 的电平状态才能跳变(如图175)。每个数据比特传输需要一个时钟脉冲。 图175. 数据有效性 SDA SCL 开始和停止状态 所有的数据传输起始于一个START(S)结束于一个STOP(P)(参见图176)。START起始位定义 为,在SCL为高时,SDA线上出现一个从高到低的电平转换。STOP结束位定义为,在SCL为 高时,SDA线上出现一个从低到高的电平转换。 图176. 开始和停止状态 SDA START SCL STOP SDA SCL 时钟同步 两个主机可以同时在空闲总线上开始传送数据,因此必须通过一些机制来决定哪个主机获取总 线的控制权,这一般是通过时钟同步和仲裁来完成的。单主机系统下不需要时钟同步和仲裁机 制。 时钟同步通过SCL线的线与来实现。这就是说SCL线的高到低切换会使器件开始数它们的低电 平周期,而且一旦主器件的时钟变低电平,它会使SCL 线保持这种状态直到到达时钟的高电 平(参见图177)。但是如果另一个时钟仍处于低电平周期,这个时钟的低到高切换不会改变SCL 线的状态。因此SCL 线被有最长低电平周期的器件保持低电平。此时低电平周期短的器件会 进入高电平的等待状态。 图1770.ns时钟同步 25ns 50ns 75ns CLK1 CLK2 SCL W ait Count 341 14.3.5 14.3.6 GD32F1x0 用户手册 仲裁 仲裁和同步一样,都是为了解决多主机情况下的总线控制冲突。仲裁的过程与从机无关。 只有在总线空闲的时候主机才可以启动传输。两个主机可能在START起始位的最短保持时间 内在总线上产生一个有效的START起始位,这种情况下需要仲裁来决定由哪个主机来完成传 输。 仲裁逐位进行,在每一位的仲裁期间,当SCL为高时,每个主机都检查SDA电平是否和自己发 送的相同。仲裁的过程需要持续很多位。理论上讲,如果两个主机所传输的内容完全相同,那 么他们能够成功传输而不出现错误。如果一个主机发送高电平但检测到SDA电平为低,则认为 自己仲裁失败并关闭自己的SDA输出驱动,而另一个主机则继续完成自己的传输。 图178. SDA线仲裁 SDA from master1 Arbitration Lost 1 0 1 1 SDA from master2 1 0 1 0 SDA 1 0 1 0 SCL I2C 通讯流程 每个I2C设备(不管是微控制器,LCD驱动,存储器或者键盘接口)都通过唯一的地址进行识别, 根据设备功能,他们既可以是发送器也可作为接收器。 I2C从机检测到I2C总线上的START起始位之后,就开始从总线上接收地址,之后会把从总线 接收到的地址和自身的地址(通过软件编程)进行比较,一旦两个地址相同,I2C从机将发送一个 确认应答(ACK),并响应总线的后续命令:发送或接受所要求的数据。此外,如果软件开启了 广播呼叫,则I2C从机始终对一个广播地址 (0x00)发送确认应答。I2C模块始终支持7位和10 位的地址。 I2C主机负责产生START起始位和STOP结束位来开始和结束一次传输,并且负责产生SCL时 钟。 图179. 7位地址的I2C通讯流程 S 从机地址 R/W A 数据 A 数据 A/Ā P 主机向从机发送 从机向主机发送 传输数据 (n字节+应答) A=应答确认 Ā=无应答确认 S = 起始位 P = 停止位 342 图180. 10位地址的I2C通讯流程 11110XX S 从地址前7位 R/W A1 从地址第2字节 A2 数据 A/Ā P 主机向从机发送 从机向主机发送 A=应答确认 Ā=无应答确认 S = 起始位 P = 停止位 传输数据 (n字节+应答) 14.3.7 软件编程模型 一个I2C设备例如LCD驱动器可能只是作为一个接收器,但是一个存储器既可以接收数据,也 能发送数据。除了按照发送/接收方来区分,I2C设备也分为数据传输的主机和从机。主机是指 负责初始化总线上数据的传输并产生时钟信号的设备,此时任何被寻址的设备都是从机。 不管I2C设备是主机还是从机,都可以发送或接收数据,因此,I2C设备有以下4种运行模式:  主机发送方  主机接收方  从机发送方  从机接收方 I2C模块支持以上四种模式。系统复位以后,I2C默认工作在从机模式下。通过软件配置使I2C 在总线上发送一个START起始位之后,I2C变为主机模式,软件配置在I2C总线上发送STOP 结束位后,I2C又变回从机模式。 从机发送模式下的软件操作流程 在从机模式下要发送数据到I2C总线,软件应该按照下面的步骤来运行操作: 1. 首先,软件应该使能I2C外设时钟,以及配置I2C_CTLR2中时钟相关寄存器来确保正确的 I2C时序。使能和配置以后,I2C运行在默认的从机模式状态,等待START起始位和地址。 2. 接收一个START起始位及随后的地址,地址可以是7位格式也可以是10位格式,I2C硬件 将I2C_STR1寄存器的ADDSEND位置1,此位应该被软件查询或者中断监视,发现置位后, 软件应该读I2C_STR1寄存器然后读I2C_STR2寄存器来清除ADDSEND位。如果地址是10 位格式,I2C主机应该接着产生一个RESTART并发送一个地址头到I2C总线。从机在检测 到 RESTART和 紧 接 着 的地 址 头 之 后会 继 续 将 ADDSEND 位 置1 。 软 件 也可 以 通 过读 I2C_STR1寄存器和接着读I2C_STR2寄存器来第二次清除ADDSEND位。 3. 现在I2C进入数据发送状态,由于移位寄存器和数据寄存器I2C_DTR都是空的,硬件将TBE 位置1。软件此时可以写入第一个字节数据到I2C_DTR寄存器,但是TBE位并没有被清0, 因为写入I2C_DTR寄存器的字节被立即移入内部移位寄存器。当移位寄存器非空的时候, I2C开始发送数据到I2C总线。 343 GD32F1x0 用户手册 4. 第一个字节的发送期间,软件可以写第二个字节到I2C_DTR,此时TBE位被清0,因为 I2C_DTR寄存器和移位寄存器不是空。 5. 第一个字节的发送完成之后,TBE被再次置起,软件可以写第三个字节到I2C_DTR,同时 TBE位被清0。在此之后,任何时候TBE被置1,只要依然有数据待被发送,软件都可以写 入一个字节到I2C_DTR寄存器。 6. 倒数第二个字节(N-2)发送期间,软件写最后一个数据到I2C_DTR寄存器来清除TBE标 志位,之后就再不用关心TBE的状态。TBE位会在倒数第二个字节发送完成后置起,直到 检测到STOP结束位时被清0。 7. 根据I2C协议,I2C主机将不会对接收到的最后一个字节发送应答,所以在最后一个字节发 送结束后,I2C从机的AE会置起以通知软件发送结束。软件写0到AE位可以清除此位。 图181. 从机发送模式 I2C总线状态 硬件行为 软件操作流程 空闲状态 主机产生开始条件(Start) 主机发送Header 从机发送响应 主机发送地址 从机发送响应 主机产生重启条件(Restart) 主机发送header 从机发送响应 SCL被从机拉低 从机发送第 1 个字节数据 主机发送响应 ……(数据传输) 从机发送第 N-2 个字节数据 主机发送响应 从机发送第 N-1 个字节数据 主机发送响应 从机发送第 N 个字节数据 主机不发送响应 主机产生停止条件 设置ADDSEND 再次设置ADDSEND 设置TBE 设置TBE 设置TBE 设置TBE 设置TBE 设置AE 清除TBE 1) 软件初始化 2) 清除ADDSEND 2) 再次清除ADDSEND 3) 写入第 1 字节数据到DTR 4) 写入第 2 字节数据到DTR 5) 写入第 3 字节数据到DTR 写入第 x 字节数据到DTR 6)写入第 N字节数据到DTR 7) 清除AE 从机接收模式下的软件流程 如下图所示,在从机模式下接收数据时,软件应该遵循这些步骤来操作: 344 GD32F1x0 用户手册 1. 首先,软件应该使能I2C外设时钟,以及配置I2C_CTLR2中时钟相关寄存器来确保正确的 I2C时序。使能和配置以后,I2C运行在默认的从机模式状态,等待START起始位以及地址。 2. 在接收到START起始条件和匹配的7位或10地址之后,I2C硬件将I2C状态寄存器的 ADDSEND位置1,此位应该通过软件轮询或者中断来检测,发现置起后,软件通过先读 I2C_STR1寄存器然后读I2C_STR2寄存器来清除ADDSEND位。一旦ADDSEND位被清0, I2C就开始接收来自I2C总线的数据。 3. 一旦接收到第一个字节,RBNE位被硬件置1,软件可以读取I2C_DTR寄存器的第一个字 节,此时RBNE位也被清0。 4. 任何时候RBNE被置1,软件可以从I2C_DTR寄存器读取一个字节。 5. 接收到最后一个字节后,RBNE被置1,软件可以读取最后的字节。 6. 当I2C检测到I2C总线上一个STOP结束位,STPDET位被置1,软件通过先读I2C_STR1寄 存器再写I2C_STR1寄存器来清除STPDET位。 图182. 从机接收模式 I2C总线状态 硬件行为 软件操作流程 空闲状态 主机产生开始条件(Start) 主机发送Header 从机发送响应 主机发送地址 从机发送响应 SCL被从机拉低 设置ADDSEND 1) 软件初始化 2) 清除ADDSEND 主机发送第 1 个字节数据 从机发送响应 ……(数据传输) 主机发送第 N个字节数据 从机发送响应 主机产生停止条件 设置RBNE 设置RBNE 设置RBNE 设置STPDET 3) 读取第 1 字节数据 4) 读取第 x 字节数据 5) 读取第N字节数据 6) 清除STPDET 主机发送模式下的软件流程 如下图所示,在主机模式下发送数据到I2C总线时,软件应该遵循这些步骤来运行I2C模块: 1. 首先,软件应该使能I2C外设时钟,以及配置I2C_CTLR2中时钟相关寄存器来确保正确的 I2C时序。使能和配置以后,I2C运行在默认的从机模式状态,等待START起始位,随后等 待I2C总线寻址。 2. 软件将GENSTA位置1,在I2C总线上产生一个START起始位 345 GD32F1x0 用户手册 3. 发送一个START起始位后, I2C硬件将I2C_STR1状态寄存器的SBSEND位置1然后进入 主机模式。现在软件应该读I2C_STR1寄存器然后写一个7位地址位或带有地址头的10位地 址位到I2C_DTR寄存器来清除SBSEND位。一旦SBSEND位被清0,I2C就开始发送地址 或者地址头到I2C总线。如果发送的地址是10位带地址头的地址,硬件在发送地址头的时 候会将ADD10SEND位置1,软件应该通过读 I2C_STR1寄存器然后写 10位低地址到 I2C_DTR来清除ADD10SEND位。 4. 7位或10位的地址位发送出去之后,I2C硬件将ADDSEND位置1,软件应该清除ADDSEND 位(通过读I2C_STR1寄存器然后读I2C_STR2寄存器)。 5. I2C进入数据发送状态,因为移位寄存器和数据寄存器I2C_DTR 都是空的,所以硬件将 TBE位置1。此时软件可以写第一个字节数据到I2C_DTR寄存器,但是TBE位此时不会被 清零,因为写入I2C_DTR寄存器的字节被立即移入内部移位寄存器。一旦移位寄存器非空, I2C就开始发送数据到总线。 6. 在第一个字节的发送过程中,软件可以写第二个字节到I2C_DTR,此时TBE会被清零。 7. 任何时候TBE被置1,软件都可以向I2C_DTR寄存器写入一个字节,只要还有数据待发送。 8. 在倒数第二个字节发送过程中,软件写入最后一个字节数据到I2C_DTR来清除TBE标志位, 此后就不用关心TBE位的状态。TBE位会在倒数第二个字节发送完成后被置起,直到发送 STOP结束位时被清零。 9. 最后一个字节发送结束后,I2C主机将BTC位置起,因为移位寄存器和I2C_DTR寄存器此 时都为空。软件此时应该配置GENSTP来发送一个STOP结束位,此后TBE和BTC状态位 都将被清0。 346 图183. 主机发送模式 I2C总线状态 空闲状态 主机产生开始条件(Start) SCL被主机拉低 主机发送Header 从机发送响应 SCL被主机拉低 主机发送地址 从机发送响应 SCL被主机拉低 主机发送第 1 个字节数据 从机发送响应 ……(数据传输) 主机发送第 N-2 个字节数据 从机发送响应 主机发送第 N-1 个字节数据 从机发送响应 主机发送第 N 个字节数据 从机发送响应 SCL被主机拉低 主机产生停止条件 硬件行为 设置SBSEND 设置ADD10SEND 设置ADDSEND 设置TBE 设置TBE 设置TBE 设置TBE 设置TBE 设置BTC 软件操作流程 1) 软件初始化 2) 设置GENSTA 3) 清除SBSEND 4) 清除ADD10SEND 4) 清除ADDSEND 5) 写入第 1 字节数据到DTR 6) 写入第 2 字节数据到DTR 7) 写入第 3 字节数据到DTR 写入第 x 字节数据到DTR 8)写入第 N字节数据到DTR 9) 设置GENSTP 主机接收模式下的软件流程 在主机接收模式下,主机需要为最后一个字节接收产生NACK,然后发送STOP结束位。因此, 需要额外注意以确保最后接收到数据的正确性。下面提供了两种针对主机接收模式的软件编程 方案,方案A需要保证软件能对I2C的中断进行快速响应,方案B则不需要。 方案 A 1. 首先,软件应该使能I2C外设时钟,以及配置I2C_CTLR2中时钟相关寄存器来确保正确的 I2C时序。使能和配置以后,I2C运行在默认的从机模式状态,等待START起始位,随后等 待I2C总线寻址。 2. 软件将GENSTA位置1,从而在I2C在总线上产生一个START起始位 3. 发送一个START起始位后,I2C硬件将将I2C_STR1状态寄存器的SBSEND位置1然后进入 主机模式。现在软件应该读I2C_STR1寄存器然后写一个7位地址位或带有地址头的10位地 址位到I2C_DTR寄存器来清除SBSEND位。一旦SBSEND位被清0,I2C就开始发送地址 或者地址头到I2C总线。如果发送的地址是10位带地址头的地址,硬件在发送地址头的时 347 GD32F1x0 用户手册 候会先将ADD10SEND位置1,软件应该通过读I2C_STR1寄存器然后写10位低地址到 I2C_DTR来清除ADD10SEND位。 4. 7位或10位的地址位发送出去之后,I2C硬件将ADDSEND位置1,软件应该清除ADDSEND 位,通过读I2C_STR1寄存器然后读I2C_STR2寄存器。如果地址是10位格式,软件应该再 次将GENSTA位置1来重新产生一个Restart。在START产生后,SBSEND位会被置1。软 件应该通过先读I2C_STR1然后写地址头到I2C_DTR来清除SBSEND位,然后地址头被发 到I2C总线,ADDSEND再次被置1。软件应该再次通过先读I2C_STR1然后读I2C_STR2 来清除ADDSEND位。 5. 一旦接收到第一个字节,硬件会将RBNE位置1。此时软件可以从I2C_DTR 寄存器读取第 一个字节,之后RBNE位被清0。 6. 此后任何时候RBNE被置1,软件就可以从I2C_DTR寄存器读取一个字节。 7. 接收完倒数第二个字节(N-1)数据之后,软件应该立即将ACKEN位清0,并将GENSTP位置 1,这一过程需要在最后一个字节接收完毕之前完成,以确保NACK发送给最后一个字节。 8. 最后一个字节接收完毕后,RBNE位被置1,软件可以读取最后一个字节。由于ACKEN已 经在前一步骤中被清0,I2C不再为最后一个字节发送ACK,并在最后一个字节发送完毕后 产生一个STOP结束位。 以上步骤要求字节数目N>1,如果N=1,步骤7应该在步骤4之后就执行,且需要在字节接收完 成之前完成。 348 图184. 主机接收使用方案 A模式 I2C总线状态 硬件行为 空闲状态 主机产生开始条件(Start) SCL被主机拉低 主机发送Header 从机发送响应 SCL被主机拉低 主机发送地址 从机发送响应 SCL被主机拉低 主机产生重启条件(Restart) SCL被主机拉低 主机发送Header 从机发送响应 SCL被主机拉低 从机发送第 1 个字节数据 主机发送响应 ……(数据传输) 从机发送第 N-1 个字节数据 主机发送响应 从机发送第 N 个字节数据 主机不发送响应 主机产生停止条件 设置SBSEND 设置ADD10SEND 设置ADDSEND 设置SBSEND 设置ADDSEND 设置RBNE 设置RBNE 设置RBNE 设置RBNE 软件操作流程 1) 软件初始化 2) 设置GENSTA 3) 清除SBSEND 4) 清除ADD10SEND 4) 清除ADDSEND 4) 再次设置GENSTA 4) 清除SBSEND 4) 清除ADDSEND 5) 读取第 1 字节数据 读取第 x 字节数据 6) 读取第 N-1 字节数据 7) 清除ACKEN,设置GENSTP 8) 读取第 N 字节数据 方案 B 1. 首先,软件应该使能I2C外设时钟,配置I2C_CTLR2中时钟相关寄存器来确保正确的I2C 时序。初始化完成之后,I2C运行在默认的从机模式状态,等待START起始位和地址。 2. 软件将GENSTA位置1从而产生一个起始位 3. 发送一个START起始位后,I2C硬件将I2C_STR1状态寄存器的SBSEND位置1然后进入主 机模式。现在软件应该读I2C_STR1寄存器然后写一个7位地址位或带有地址头的10位地址 位到I2C_DTR寄存器来清除SBSEND位。一旦SBSEND位被清0,I2C就开始发送地址或 者地址头到I2C总线。如果发送的地址是10位带地址头的地址,硬件在发送地址头的时候 会先将ADD10SEND位置1,软件应该通过读 I2C_STR1寄存器然后写 10位低地址到 I2C_DTR来清除ADD10SEND位。 4. 7位或10位的地址位发送出去之后,I2C硬件将ADDSEND位置1,软件应该清除ADDSEND 349 GD32F1x0 用户手册 位,通过读I2C_STR1寄存器然后读I2C_STR2寄存器。如果地址是10位格式,软件应该接 着将GENSTA位再次置1来产生一个开始条件(Restart),Restart被发送出去以后SBSEND 位被再次置1。软件应该通过先读I2C_STR1然后写地址头到I2C_DTR来清除SBSEND位, 然后地址头被发到I2C总线,ADDSEND再次被置1。软件应该再次通过先读I2C_STR1然 后读I2C_STR2来清除ADDSEND位。 5. 一旦第一个字节被接收,RBNE位会被硬件置1。此时软件可从I2C_DTR寄存器读取出第 一个字节,同时RBNE位被清0。 6. 此后任何时候,一旦RBNE位被置1,软件就可以从I2C_DTR寄存器读取一个字节的数据, 直到主机接收了N-3个字节。 7. 如图126所示,第N-2个字节还没被软件读出,之后第N-1个字节被接收,此时BTC和RBNE 都被置位,总线就会被主机锁死以阻止最后一个字节的接收。然后软件应该清除ACKEN 位。 8. 软件从I2C_DTR读出倒数第三个(N-2)字节数据,同时也将BTC位清0。此后第N-1个字 节从移位寄存器被移到I2C_DTR,总线得到释放然后开始接收最后一个字节,由于ACKEN 已经被清除,因此主机不会给最后一个字节数据发送ACK响应。 9. 最后一个字节接收完毕后,硬件再次把BTC位和RBNE置1,并拉低SCL,软件将GENSTP 位置1,主机发出一个STOP结束位。 10. 软件读取第N-1个字节,清除BTC。此后最后一个字节从移位寄存器被移动到I2C_DTR。 11. 软件读取最后一个字节,清除RBNE。 以上步骤需要字节数字N>2,N=1和N=2的情况近似。 N=1 在第4步,软件应该在清除 ADDSEND位之前将ACK位清0,在清除ADDSEND 位之后将 GENSTP位置1。当N=1时步骤5是最后一步。 N=2 在第2步,软件应该在GENSTA置1之前将POAP置1。在第4步,软件应该在清除ADDSEND 位之前将ACK位清0。在第5步,软件应该一直等到BTC位被置1然后将GENSTP位置1且读取 I2C_DTR两次。 350 14.3.8 图 185. 主机使用方案B接收模式 I2C总线状态 硬件行为 空闲状态 主机产生开始条件(Start) SCL被主机拉低 主机发送Header 从机发送响应 SCL被主机拉低 主机发送地址 从机发送响应 SCL被主机拉低 主机产生重启条件(Restart) SCL被主机拉低 主机发送Header 从机发送响应 SCL被主机拉低 从机发送第 1 个字节数据 主机发送响应 ……(数据传输) 从机发送第 N-2 个字节数据 主机发送响应 从机发送第 N-1 个字节数据 主机发送响应 SCL被主机拉低 从机发送第 N 个字节数据 主机不发送响应 SCL被主机拉低 主机产生停止条件 设置SBSEND 设置ADD10SEND 设置ADDSEND 设置SBSEND 设置ADDSEND 设置RBNE 设置RBNE 设置RBNE 设置RBNE和BTC 设置RBNE和BTC 软件操作流程 1) 软件初始化 2) 设置GENSTA 3) 清除SBSEND 4) 清除ADD10SEND 4) 清除ADDSEND 4) 再次设置GENSTA 4) 清除SBSEND 4) 清除ADDSEND 5) 读取第 1 字节数据 6) 读取第 N-3 字节数据 7) 清除ACKEN 8) 读取第 N-2 字节数据 7) 设置GENSTP 8) 读取第 N-1 字节数据 9) 读取第 N字节数据 DMA 模式下的配置模式。 按照前面的软件流程,每当TBE位和RBNE位被置1之后,软件都应该写或读一个字节,这样 将导致CPU的负荷较重。I2C的DMA功能可以在TBE或RBNE位置1时,自动进行一次写或读操 作,从而减轻了CPU的负荷,具体DMA的配置请参看DMA相关章节。 报文错误校验 I2C模块中有一个PEC模块,它使用CRC-8计算器来执行I2C数据的报文校验,CRC多项式为 351 14.3.9 GD32F1x0 用户手册 x8 + x2 + x + 1,和SMBus协议兼容。将PECEN位置1就可以使能PEC功能。PEC将会计算所 有通过I2C总线发送的数据(包括地址)。在非DMA模式下,软件可以通过配置PECTRANS 来控制I2C在最后一个字节发送完毕后发送PEC值,或者在接收完成后检查接收到的PEC值是 否正确。在DMA模式下,如果PECEN位被置1,I2C将自动发送或者检查PEC值。 SMBus 支持 系统管理总线(System Management Bus,简写为SMBus 或SMB)是一种结构简单的单端 双线制总线,可实现轻量级的通信需求。一般来说,SMBus 最常见于计算机主板,主要用于 电源传输ON/OFF 指令的通信。SMBus 是I2C 的一种衍生总线形式,主要用于计算机主板上 的低带宽设备间通信,尤其是与电源相关的芯片,例如笔记本电脑的可充电电池子系统(参见 Smart BatteryData)。 SMBus 协议 SMBus 上每个报文交互都遵从SMBus 协议中预定义的格式。SMBus 是I2C 规范中数据传输 格式的子集。只要I2C 设备可通过SMBus 协议之一进行访问,便视为兼容SMBus 规范。不 符合这些协议的I2C 设备,将无法被SMBus 和ACPI 规范所定义的标准方法访问。 地址解析协议 SMBus 采用了I2C 硬件以及I2C 的硬件寻址方式,但在I2C 的基础上增加了二级软件处理, 建立自己独特的系统。比较特别的是SMBus 规范包含一个地址解析协议,可用于实现动态地 址分配。动态识别硬件和软件使得总线设备能够支持热插拔,无需重启系统便能即插即用。总 线中的设备将被自动识别并分配唯一地址。这个优点非常有利于实现即插即用的用户界面。协 议中有个非常特别之处在于:系统的主机和所有其它设备能够有定义其名称和功能。 超时特性 SMBus 有一种超时特性:假如某个通信耗时太久,便会自动复位设备。这就解释了为什么最 小时钟周期为10 kHz——为了防止长时间锁死总线。I2C 在本质上可以视为一个―直流‖总线, 也就是说当主机正在访问从机的时候,假如从机正在执行一些子程序无法及时响应,从机可以 拉住主机的时钟。这样便可以提醒主机:从机正忙,但并不想放弃当前的通信。从机的当前任 务结束之后,将可以继续I2C 会话。I2C 总线协议中并没有限制这个延时的上限,但在SMBus 系统中,这个时间被限定为35 ms。按照SMBus 协议的假定,如果某个会话耗时太久,就意 味着总线出了问题,此时所有设备都应当复位以消除这种(问题)状态。这样就并不允许从设 备将时钟拉低太长时间。 报文错误校验 SMBus 2.0 以及1.1 都采用了报文错误校验(Packet Error Checking,缩写为PEC)。在这 种模式中,每次会话最后都将传输PEC(报文错误码)字节。该字节是按照CRC-8 校验和的 方式计算的,计算范围包括整个报文,包括地址以及读/写位。所采用的多项式为x8 + x2 + x + 1(CRC-8-ATMHEC 算法,初始化为0)。 352 14.3.10 SMBus 警报 GD32F1x0 用户手册 SMBus 还有一个额外的共享的中断信号,称为SMBALERT#。从机上发生事件后,可通过这 个信号通知主机来访问从机。SMBus 中还定义了较少见的―主机提醒协议(Host Notify Protocol)‖,基于I2C 多主模式实现类似的提醒功能,但是可以传递更多数据。 状态、错误和中断 I2C有一些状态和错误标志位和中断,通过设置一些寄存器位,便可以从这些标志触发中断(详 情参见I2C寄存器)。 表 20. 事件状态标志位 事件标志位名称 SBSEND ADDSEND ADD10SEND STPDET BTC TBE RBNE 说明 主机发送 START 起始位 地址发送和接收 10 位地址模式中地址头发送 监测到 STOP 结束位 字节发送结束 发送时 I2C_DTR 为空 接收时 I2C_DTR 非空 表 21. I2C 错误标志位 I2C 错误名称 BE LOSTARB RXORE AE PECE SMBTO SMBALTS 说明 总线错误 仲裁丢失 当禁用 SCL 拉低后,发生了溢出或下溢 没有接收到应答 CRC 值不相同 SMBus 模式下总线超时 SMBus 警报 14.4 I2C 寄存器 14.4.1 I2C 控制寄存器 1 (I2C_CTLR1) 地址偏移: 0x00 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SRESET 保留 SALT PECTRANS POAP ACKEN GENSTP GENSTA DISSTRC GCEN PECEN ARPEN SMBSEL 保留 SMBEN I2CEN rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 说明 15 SRESET 软件复位I2C,软件应该在I2C总线被释放时复位I2C 353 0: I2C未复位 1: I2C复位 GD32F1x0 用户手册 14 保留 必须保持复位值 13 SALT 软件置1和清0,硬件清0 0: 不通过SMBA发布警告 1: 通过SMBA引脚发送警告 12 PECTRANS PEC传输 软件置1和清0,硬件在以下条件下清除此位:PEC传输完成,监测到START/STOP结 束位, I2CEN=0 0: 不传输PEC值 1: 传输的PEC值 11 POAP ACK/PEC的位置含义 软件置1和清0,当I2CEN=0时,硬件清0 0: ACKEN位决定对当前正在接收的字节是否发送ACK;PECCTRNS位表明PEC 是否 处于移位寄存器中。 1: ACKEN位决定是否对下一个字节发送ACK, PECTRANS位表明下一个即将被接收 的字节是PEC。 10 ACKEN 是否发送ACK 软件置1和清0,当I2CEN=0时硬件清0 0: 不发送ACK 1: 发送ACK 9 GENSTP I2C总线上产生一个STOP结束位 软件置1和清0,SMBus超时时,硬件置1,监测到STOP结束位时,硬件清0。 0: 不发送STOP 1:发送STOP 8 GENSTA I2C总线上产生一个START起始位 软件置1和清0,当监测到START起始位或I2CEN=0时由硬件清0。 0: 不发送START 1: 发送START 7 DISSTRC 在从机模式下数据未就绪是否将SCL拉低 软件置1和清0. 0: 拉低SCL 1: 不拉低SCL 6 GCEN 是否响应对地址(0x00)的广播呼叫 0: 从机不响应广播呼叫 1: 从机将响应广播呼叫 5 PECEN PEC计算开关 0: PEC计算关闭 354 4 3 2 1 0 14.4.2 ARPEN SMBSEL 保留 SMBEN I2CEN 1: PEC计算打开 SMBus下ARP协议开关 0: 关闭ARP 1: 开启ARP SMBus类型选择 0: 从机 1: 主机 必须保持复位值 SMBus/I2C模式开关 0: I2C模式 1: SMBus模式 I2C外设使能 0: 禁用I2C 1: 使能I2C I2C 控制寄存器 2 (I2C_CTLR2) GD32F1x0 用户手册 地址偏移: 0x04 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 DMALST DMAON BIE EE EIE 保留 I2CCLK[5:0] rw rw rw rw rw rw rw rw rw rw rw 位 15:13 12 区域 保留 DMALST 11 DMAON 10 BIE 9 EE 说明 必须保持复位值 DMA最后传输标志位 0: 下一个DMA EOT不是最后传输 1: 下一个DMA EOT是最后传输 DMA模式开关 0: DMA模式关 1: DMA模式开 缓冲区中断使能 0:当TBE = 1或RBNE = 1时无中断 1: 如果ITEVTEN=1,当TBE = 1或RBNE = 1时产生中断 事件中断使能 0: 禁用事件中断 1: 使能事件中断,意味着当SBSEND、ADDSEND、ADD10SEND、STPDET或BTC标 志位有效或当BIE=1时TBE=1或RBNE=1时产生中断。 355 8 7:6 5:0 14.4.3 EIE 保留 I2CCLK[5:0] GD32F1x0 用户手册 错误中断使能 0: 禁用错误中断 1: 使能错误中断,意味着当BE、LOSTARB、AE、RXORE、 PECE、SMBTO或SMBALTS 标志位生效时产生中断。 必须保持复位值 I2C外设时钟频率 I2CCLK[5:0]应该是输入APB时钟频率,最低2MHz。 0h - 1h: 无时钟 2h - 36h: 2 MHz~36MHz 37h - 63h: 由于APB时钟限制,无时钟 I2C 本机地址寄存器 1 (I2C_AR1) 地址偏移: 0x08 复位值: 0x0000 15 14 ADDFORMAT rw 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 ADDRESS[9:8] ADDRESS[7:1] ADDRESS0 rw rw rw rw rw rw rw rw rw rw 位 15 14:10 9:8 7:1 0 区域 ADDFORMAT 说明 I2C从机地址模式 0: 7位地址 1: 10位地址 保留 必须保持复位值 ADDRESS[9:8] 10位地址的最高两位 ADDRESS[7:1] 7位地址或者10位地址的最低7位。 ADDRESS0 I2C地址的读/写位 14.4.4 I2C 本机地址寄存器 2 (I2C_AR2) 地址偏移: 0x0C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 ADDRESS2[7:1] DUADEN rw rw rw rw rw rw rw rw 位 区域 15:8 保留 说明 必须保持复位值 356 7:1 ADDRESS2[7:1] 从机在双重地址模式下第二个I2C地址 0 DUADEN 双重地址模式开关 0: 双重地址模式关 1: 双重地址模式开 GD32F1x0 用户手册 14.4.5 I2C 传输缓冲区寄存器 (I2C_DTR) 地址偏移: 0x10 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 TRB[7:0] rw rw rw rw rw rw rw rw 位 15:8 7:0 14.4.6 区域 保留 TRB[7:0] 说明 必须保持复位值 数据发送接收缓冲区 I2C 传输状态寄存器 1 (I2C_STR1) 地址偏移: 0x14 复位值: 0x0000 15 14 13 SMB ALTS SMBTO 保留 rc_w0 rc_w0 12 11 10 9 8 7 6 5 4 3 2 1 0 PECE RXORE AE LOSTARB BE TBE RBNE 保留 STPDET ADD10SEND BTC ADDSENDSBSEND rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 r r r r r r r 位 区域 说明 15 SMBALTS SMBus警报状态 硬件置1,软件写0清0。 0: SMBA引脚未被拉低(从机模式)或未监测到警报(主机模式) 1: SMBA引脚被拉低(从机模式)或监测到警报(主机模式) 14 SMBTO SMBus模式下超时信号 硬件置1,软件写0清0。 0: 无超时错误 1: 超时事件发生(SCL被拉低达25ms) 13 保留 必须保持复位值 12 PECE 接收数据时PEC错误 硬件置1,软件写0清0。 0: 接收到PEC且校验正确 1: 接收到PEC但检验错误,此时I2C将无视ACKEN位直接发送NACK 357 GD32F1x0 用户手册 11 RXORE 当禁用SCL 拉低功能后,在从机模式下发生了过载或欠载事件。在从机接收模式下, 假如DTR 中的最后一字节并未被读出,并且后续字节又接收完成,就会发生过载。在 从机发送模式下,假如当前字节已经发送完成,而DTR 仍然为空,就会发生欠载。 硬件置1,软件写0清0. 0: 无溢出和欠载错误发生 1: 发生溢出或欠载错误 10 AE 应答错误 硬件置1,软件写0清0. 0: 未发生应答错误 1: 发生了应答错误 9 LOSTARB 主机模式下仲裁丢失 硬件置1,软件写0清0. 0: 无仲裁丢失 1: 发生仲裁丢失,I2C模块返回从机模式。 8 BE 总线错误,表示I2C总线上发生了预料之外的START起始位t或STOP结束位。 硬件置1,软件写0清0. 0: 无总线错误 1: 发生了总线错误 7 TBE 发送期间I2C_DTR为空 硬件从I2C_DTR寄存器移动一个字节到移位寄存器之后将此位置1,软件写一个字节到 I2C_DTR 寄存器清除该位。如果移位寄存器和I2C_DTR寄存器都是空的,写I2C_DTR 寄存器将不会清除TBE位(详见主机/从机发送模式下的软件操作流程) 0: I2C_DTR非空 1: I2C_DTR空,软件可以写 6 RBNE 接收期间I2C_DTR非空 硬件从移位寄存器移动一个字节到I2C_DTR寄存器之后将此位置1,读此位可以清除此 位。如果BTC和RBNE都被声明,读I2C_DTR将不会清除RBNE,因为移位寄存器的字 节已经被立即移到I2C_DTR.(详见主机/从机接收模式下的软件操作流程) 0: I2C_DTR为空 1: I2C_DTR非空,软件可以读 5 保留 必须保持复位值 4 STPDET 从机模式下监测到STOP结束位 此位被硬件置1,先读I2C_STR1然后写CTLR1可以清除此位。 0: 从机模式下未监测到STOP结束位 1: 从机模式下监测到STOP结束位 3 ADD10SEND 主机模式下10位地址地址头被发送 该位由硬件置1,软件读I2C_STR1和写I2C_DTR清除此位 0: 主机模式下未发送10位地址的地址头 1: 主机模式下发送10位地址的地址头 358 2 BTC GD32F1x0 用户手册 字节发送结束 接收模式下,如果一个字节已经被移位寄存器接收但是此时I2C_DTR寄存器仍然是满 的;或者发送模式下,一个字节已经被移位寄存器发送但是I2C_DTR寄存器仍然是空的, 如果使能了SCL拉低功能,硬件就会置起BTC标志位。 此位由硬件置1,软件读I2C_STR1和读或写I2C_DTR寄存器清除此位。 0:未发生BTC 1: 发生了BTC 1 ADDSEND 主机模式下:成功发送了地址 从机模式下:接收到了地址并且和自身的地址匹配 此位由硬件置1,软件读I2C_STR1寄存器和读STR2清0。 0: 无地址被发送或接收 1: 地址在主机模式下被发送或从机模式下接收到匹配地址 0 SBSEND 主机模式下发送START起始位 此位由硬件置1,软件读I2C_STR1和写I2C_DTR清0。 0: 未发送START条件 1: START条件被发送 14.4.7 I2C 传输状态寄存器 2 (I2C_STR2) 15 14 r r 地址偏移: 0x18 复位值: 0x0000 13 12 11 10 9 ECV[7:0] r r r r r 8 7 6 5 4 3 2 1 0 DUMODF HSTSMB DEFSMB RXGC 保留. TRS I2CBSY MASTER r r r r r r r r 位 区域 说明 15:8 ECV[7:0] 当PEC使能后硬件计算出的PEC值。 7 DUMODF 从机模式下双标志位表明哪个地址和双地址模式匹配。 STOP或START起始位产生后或I2CEN=0时此位由硬件清0 0: 地址和OAR1匹配 1: 地址和OAR2匹配 6 HSTSMB 从机模式下监测到SMBus主机地址头 STOP或START起始位产生后或I2CEN=0时此位由硬件清0 0: 未监测到SMBus主机地址头 1: 监测到SMBus主机地址头 5 DEFSMB 从机模式下SMBus主机地址头 STOP或START起始位产生后或I2CEN=0时此位由硬件清0. 0: SMBus设备没有缺省地址 1: 从SMBus设备接收到一个缺省的地址 4 RXGC 是否接收到广播地址(00h) 359 3 2 1 0 14.4.8 保留 TRS I2CBSY MASTER GD32F1x0 用户手册 STOP或START起始位产生后或I2CEN=0时此位由硬件清0 0: 未接收到广播呼叫地址 1: 接收到广播呼叫地址(00h) 必须保持复位值 I2C作发送端还是接收端 STOP或START起始位产生后或I2CEN或LOSTARB=0时此位由硬件清0 0: 接收端 1: 发送端 忙标志 STOP结束位后硬件清0 0: 无I2C通讯 1: I2C正在通讯 表明I2C时钟在主机模式还是从机模式的标志位 STOP或START起始位产生后或I2CEN或LOSTARB=0时此位由硬件清0 0: 从机模式 1: 主机模式 I2C 时钟配置寄存器 (I2C_CLKR) 地址偏移: 0x1C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 FAST DTCY 保留 CLKC[11:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 区域 15 FAST 说明 主机模式下I2C速度选择 0: 标准速度 1: 快速 14 DTCY 快速模式下占空比 0:Tlow /Thigh = 2 1: Tlow /Thigh = 16/9 13:12 保留 必须保持复位值 11:0 CLKC[11:0] 主机模式下I2C时钟控制 标准速度模式下: Thigh = Tlow = CCR ∗ TPCLK 1 如果 DTCY=0,快速模式下: Thigh = CCR ∗ TPCLK 1 , Tlow = 2 ∗ CCR ∗ TPCLK 1 如果 DTCY=1,快速模式下: Thigh = 9 ∗ CCR ∗ TPCLK 1 , Tlow = 16 ∗ CCR ∗ TPCLK 1 360 14.4.9 I2C 上升时间寄存器 (I2C_RTR) GD32F1x0 用户手册 地址偏移: 0x20 复位值: 0x0002 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 RISETIME[5:0] rw rw rw rw rw rw 位 区域 15:6 保留 说明 必须保持复位值 5:0 RISETIME [5:0] 主机模式下最大上升时间 RISETIME 值应该为 SCL 最大上升时间加 1。 361 GD32F1x0 用户手册 15 串行外设接口 / 片上音频接口 (SPI/I2S) 15.1 15.2 15.2.1 简介 该模块可通过SPI协议或I2S协议与外部设备进行通信。 串行外设接口(Serial Peripheral Interface,缩写为SPI)提供了SPI 协议的数据发送及接收 功能,可工作在主机或从机模式下。SPI 接口用到4 根管脚,分别是串行数据输入脚MISO、 串行数据输出脚MOSI、串行时钟脚SCK 以及从机选择脚NSS。总线上的一个SPI 设备作为 主机工作,通过NSS 以及SCK 信号控制数据流,指示数据通信的开始,并控制数据采样速率。 要接收一个数据字节,数据位流将在指定的时钟边沿锁存,并将结果保存到数据寄存器中。数 据发送的执行方式类似,但顺序与之相反。模式故障检测功能实现了多主功能。SPI 接口可用 于多种应用,包括只使用两线的单工同步通信(其中一根数据线可能双向),或采用CRC 校验 的可靠数据通信。 片上音频接口(Inter-IC Sound,缩写为I2S)支持四种音频标准,分别是I2S飞利浦标准,MSB 对齐标准,LSB对齐标准和PCM标准。它可以在四种模式下运行,包括主机发送模式,主机接 收模式,从机发送模式和从机接收模式。 主要特性 SPI 特点  主设备或从设备模式  可配置的时钟位速率以及预分频系数  可配置的时钟优先级和时钟相位  16位宽、相互独立的发送接收缓冲器  可配置的8或16位数据帧大小  可配置高位在前或者低位在前的数据格式  硬件CRC 计算,可自动发送CRC 错误校验  可通过3线实现全双工同步传输  可通过2线实现单工同步传输  主机和从机都可配置NSS工作于软件模式或硬件模式  SPI总线忙状态标志  发送和接收标志,并可映射至中断  主机模式故障、过载以及CRC校验错误标志,并可映射至中断 362  发送和接收支持DMA模式 GD32F1x0 用户手册 15.2.2 I2S 特性  支持的I2S标准: - I2S飞利浦标准 - MSB对齐标准 - LSB对齐标准 - PCM标准 (支持短帧同步和长帧同步两种模式)  支持的运行模式: - 主机发送 - 主机接收 - 从机发送 - 从机接收  数据长度可以是16位、24位或32位  通道长度可以是16位或32位  16位的移位寄存器用来发送和接收数据  数据方向始终是MSB在前  8位可配置的线性预分频器,可实现精确的从8kHz到192kHz的音频采样率  可配置的空闲状态时钟极性  可以输出主机时钟驱动外部音频器件  提供发送欠载错误标志(TXURE)和接收过载错误标志(RXORE)  发送和接收都带有DMA功能 15.3 SPI 功能说明 15.3.1 引脚配置 在不同模式下,SPI通过4个引脚与外部设备相连: MISO: 此引脚用于在从模式下的数据发送和主模式下的数据接收 MOSI: 此引脚用于在从模式下的数据接收和主模式下的数据发送。 SCK: SPI串行时钟输出引脚,作为主设备的输出,从设备的输入。 363 GD32F1x0 用户手册 NSS: 在硬件模式下(SWNSSEN清零),NSS 管脚可作为输入脚使用。主机模式下NSS 管 脚应拉高,从机模式下NSS 管脚应拉低。假如在主机模式下将NSS 拉低,则将产生错误,此 时CONFN将会置位,硬件自动将MSTMODE清零。假如在从机模式下NSS 为高电平,意味着 该 芯 片 未 被 选 中 , SPI 模 块 要 等 到 NSS 管 脚 被 外 部 拉 低 后 才 能 工 作 。 在 软 件 模 式 下 (SWNSSEN置位),SSI 位将替代NSS 管脚的功能,NSS 可用作标准I/O 口。此外,在主 机模式下NSS 可用作输出。若SSOE 置位,当SPI 通信开始后NSS 管脚将拉低。 单主和单从模式内部典型连接图: 图 186. 单主/单从应用 主机 从机 接收缓冲区 8/16-位移位寄存器 MOSI MISO 接收缓冲区 MOSI MISO 8/16-位移位寄存器 发送缓冲区 PCLK PSC SCK NSS VDD 发送缓冲区 SCK NSS 主从设备的MOSI、MISO、SCK引脚都相互连接。数据通过MOSI线从主设备传输到从设备, 通过MISO线从从设备传输到主设备。主设备产生时钟信号通过SCK线传输给从设备。在硬件 模 式 (SWNSSEN 位 被 清 0) 下 , NSS 在 主 模 式 下 被 拉 高 , 在 从 模 式 下 被 拉 低 ; 在 软 件 模 式 (SWNSSEN位被置1)下,NSS引脚不用。 主设备通过时钟控制通讯。当主设备通过MOSI引脚发送数据给从设备,它也会同时通过SCK 引脚发送时钟给从设备。从设备通过MOSI引脚接收数据,然后根据时钟通过MISO发送数据。 通过设置SPI_CTLR1寄存器中的SWNSSEN位,NSS既可以用在软件模式下也可用在硬件模 式下。 硬件NSS模式 (SWNSSEN = 0) 取决于SPI_CTLR2寄存器的NSSDRV位,NSS引脚能被用作输入或者输出(仅在主模式下)。 NSS输出使能 (SWNSSEN = 0, NSSDRV = 1) 该配置仅能在主模式下使用。主设备启动通讯(开启发送时钟)的时候NSS信号被拉低,一直保 持低电平直到SPI禁止。 NSS输出禁止(SWNSSEN = 0, NSSDRV = 0) NSS引脚用作输入。在主模式下,NSS引脚应被拉高;在从模式下,NSS引脚用作片选,当 NSS低电平的时候从设备被选中,反之当NSS高电平的时候从设备未被选中。 软件NSS模式(SWNSSEN = 1) 364 SPI_CTLR1寄存器中的SWNSS位代替了NSS的功能。在主模式下,SWNSS位应该被置1; 在从模式下,从设备在SWNSS被清0的时候被选中,当SWNSS被置1的时候取消选中。在SPI 通讯中NSS引脚不用。 时钟相位和时钟极性 可以通过SPI_CTLR1寄存器的SCKPL和SCKPH位用软件选择四种可能的时序关系 。SCKPL 位控制着没有数据发送时的空闲状态的时钟输出电平。如果SCKPL被清0,空闲时SCK引脚为 低电平;如果SCKPL被置1,SCK引脚在空闲时间为高电平。 SCKPH决定着数据的捕获时间。如果SCKPH被清0,则SPI在SCK引脚上的第1个跳变沿采样 数据;如果SCKPH被置1,则SPI在SCK引脚上的第2个跳变沿采样数据。 下图显示了SPI传输四种组合的时序关系: 图 187. SPI 数据时钟时序图 SCKPL= 1 SCKPL= 0 MISO MOSI NSS (SLAVE) Capture SCKPL= 1 SCKPL= 0 MISO MOSI NSS (SLAVE) Capture SCKPH=0 SCKPH=1 数据帧格式 SPI_CTLR1寄存器的LF位可以设置MSB在前或LSB在前。 取 决 于 SPI_CTLR1 寄 存 器 的 LF 位 的 值 , MSB(LF 被 清 0) 或 LSB(LF 被 置 1) 最 初 被 发 送 。 SPI_CTLR1寄存器的FF16位决定了数据是8位还是16位。 365 15.3.2 15.3.3 GD32F1x0 用户手册 SPI 从模式 在从模式下,串行时钟由主设备提供,SPI_CTLR1寄存器的PSC[2:0]位没有作用。通讯过程 由主设备控制,在主设备发送时钟之前,从设备必须已经使能。 SPI从设备配置步骤: 配置数据格式 (SPI_CTLR1寄存器的FF16位)。 配置时序关系(SPI_CTLR1寄存器中的SCKPL位和SCKPH位)。这两位必须和主设备配置一致。 配置帧格式 (SPI_CTLR1寄存器的LF位),必须和主设备配置一致。 配置NSS模式 (SPI_CTLR1寄存器的SWNSSEN位)。硬件模式下 (SWNSSEN=0),发送过程 中NSS引脚必须拉低。软件模式中(SWNSSEN=1),SPI_CTLR1寄存器中的SWNSS位在发送 过程中必须被清0。 设置从模式 (清MSTMODE 位)。使能SPI (SPIEN位置1)。 发送顺序 当从设备通过SCK引脚接收到时钟的时候从设备的发送开始,首先将最高位或最低位放在 MOSI引脚,其他位从发送缓冲区加载到移位寄存器。TBE位被置1,软件根据需要写第二个数 据到发送缓冲区。硬件根据接收到的时钟发送移位寄存器中的数据位。 接收顺序 在最后一次采样时钟沿后,数据发送结束,移位寄存器中的数据会被复制到接收缓冲区, SPI_STR 寄存器中的 RBNE 位被置 1。读 SPI_DTR 寄存器会返回接收缓冲区的数据,同时 RBNE 位被清 0。 SPI 主模式 主模式配置中,串行时钟由SPI产生,从SCK引脚发出。 主模式下, PCLK(SPI1是PCLK2时钟或SPI2是PCLK1时钟)产生串行时钟。PSC[2:0]位决定 了传输的波特率。 SPI主模式配置过程: 配置PSC[2:0]位确定波特率 配置数据格式(SPI_CTLR1寄存器中的FF16位) 配置时序关系(SPI_CTLR1寄存器的SCKPL和SCKPH位)。必须和从设备配置相同。 配置帧格式(SPI_CTLR1寄存器LF位),必须和从设备配置相同。 配置NSS模式 (SPI_CTLR1寄存器SWNSSEN位)。如果NSS引脚用作输入,在硬件模式下 (SWNSSEN=0),NSS必须被拉高。在软件模式下 (SWNSSEN=1), SPI_CTLR1寄存器 SWNSS位必须被置1。如果NSS引脚用作输入,NSSDRV位必须被置1,NSS引脚在发生开始 的时候将被拉低。 设置主模式(MSTMODE位置1),使能SPI (SPIEN位置1)。 366 15.3.4 15.3.5 发送顺序 GD32F1x0 用户手册 当数据写入发送缓冲后,主设备开始发送,首先将最低位或最高位发送到MOSI 管脚上,剩余 各位将从发送缓冲加载到移位寄存器中。当数据加载完成后,TBE 置位。后续数据被放入发 送缓冲区将会接着被发送。当TBE位被置1时写DTR寄存器。 接收顺序 在最后一次采样时钟沿后,数据发送结束,移位寄存器中的数据被复制到接收缓冲区,SPI_STR 寄存器中的RBNE位被置1。读SPI_DTR 寄存器会返回接收缓冲区的数据,RBNE位被清0。 SPI 单工通信 有两种配置可以使SPI工作在单工模式。 将SPI_CTLR1寄存器的BDM位置1。时钟从主设备的SCK引脚传输到从设备的SCK引脚。数据 从 主 设 备 的 MOSI 引 脚 发 送 到 从 设 备 的 MISO 引 脚 。 数 据 传 输 方 向 由 SPI_CTLR1 寄 存 器 的 BDOE位决定。BDOE位在主从设备中相反。如果BDOE在主设备中被置1从设备中被清0,数 据从主设备发送到从设备,反之数据从从设备发送到主设备。 将SPI_CTLR1寄存器的BDM位置1。此时RO位在主设备和从设备中必须配置相反:如果RO位 在主设备中被清0从设备中被置1,数据从主设备发送到从设备,主设备的MOSI引脚发送数据 且从设备的MOSI接收数据,MISO引脚未被使用。如果RO位在主设备中被置1从设备中被清0, 数据从从设备发送到主设备,从设备的MISO引脚发送数据且主设备的MISO引脚接收数据, MOSI引脚未被使用。但是,时钟总是由主设备产生通过SCK引脚传输给从设备。 在单工通信过程中,如果主设备配置为只接收模式且从设备配置为只发送模式,当SPI被使能 时主设备自动接收数据。从设备必须在主设备使能SPI 之前已经准备好发送,并且应当在限定 时间内将数据写入发送缓冲。主设备收到倒数第二个数据之后应禁用SPI(将SPIEN 清零); 此时最后一个数据正在传输中,SPI 模块会在接收完最后一个数据后自动禁用。 数据接收和发送流程 每个SPI模式都有两个缓冲区:发送缓冲区和接收缓冲区。写SPI_DTR寄存器将会把数据保存 在发送缓冲区,读SPI_DTR寄存器将会返回接收缓冲区的数据。 上一帧数据发送结束,发送缓存区的数据会被复制到移位寄存器,TBE位被硬件置1,然后软 件可以在必要的时候通过写SPI_DTR寄存器把下一个数据写入发送缓冲区。如果SPI_CTLR2 寄存器的TBEIE位被置1,在TBE位被置1的时候将产生中断。写SPI_DTR寄存器可以清除TBE 位。当TBE位被清0的时候写SPI_DTR寄存器将会覆盖掉存储在发送缓冲区的数据。 当数据的最后一位在采样时钟沿上被采集完成后,数据将被接收并存储在移位寄存器中,硬件 会将移位寄存器中的数据复制到接收缓冲区并将RBNE位置1,以备软件读取。如果SPI_CTLR2 寄存器的TBEIE位被置1,在RBNE位被置1的时候将产生中断。读SPI_DTR寄存器可以清除 RBNE位。如果在RBNE被置1的时候一个数据被接收(最后的数据没有被读取),RXORE位被 置1来指示此错误。 367 15.3.6 15.3.7 GD32F1x0 用户手册 CRC 校验 CRC 校验能够提高通信的可靠性。SPI 模块中包含两个CRC 计算单元,分别用于发送数据 和接收数据。CRC 计算单元能够逐位计算CRC 值。计算所用到的多项式是可配置的,保存 在SPI_CPR寄存器中。 设置SPI_CTLR1寄存器中的CRCEN位使能CRC计算。在全双工模式或只发送模式下,软件应 该 在 最 后 一 个 数 据 被 写 入 SPI_DTR 寄 存 器 后 立 即 将 CRCNT 位 置 1 。 最 后 一 个 数 据 以 后 SPI_TCR中的值将被发送。如果数据通过DMA方式发送,SPI_TCR中的数据将自动被硬件发 送,CRCNT不用配置。当SPI正在传输SPI_TCR中的值时,会把此时接收到的数据视为CRC 值,如果此值和SPI_RCR的值不同则计算器将被关闭,错误位CRCE位将被置1。 在只接收模式下,倒数第二个数据被接收后(此时正在接收最后一个数据)软件应该立即写 CRCNT 位 , 那 么 在 接 收 完 最 后 一 个 数 据 之 后 就 会 继 续 接 收 数 据 的 CRC 值 , SPI 将 此 值 和 SPI_RCR寄存器中的值进行比较,如果不同错误位CRCE将被置1。 只有在发送缓冲区空的时候才可以发送CRC数据。在CRC数据发送期间CRC计算器被关闭。 使用CRC的SPI通信: 配置SCKPL, SCKPH, LF, PSC, SWNSSEN, SWNSS和MSTMODE的值。 配置SPI_CPR寄存器中的多项式。 将SPI_CTLR1寄存器的CRCEN位置1使能CRC计算。 将SPI_CTLR1寄存器的SPIEN位置1使能SPI。 开启通信。 在全双工或只发送模式下,在最后一个数据被写入SPI_DTR后立即将CRCNT位置1。在只接 收模式下,在倒数第二个数据接收完毕后将CRCNT位置1。CRC传输的时候CRC计算器被关 闭。 最后一个数据传输结束后SPI将发送CRC值,并把接收到的CRC值和SPI_RCR中的值比较, 如果不同CRCE位被置1。 从模式下如果 CRCEN 位被置 1,即使 NSS 引脚被拉高 CRC 计算器依然会继续工作。主机侧 和从设备侧的 CRC 值必须及时清除,以确保主设备和从设备的 CRC 计算能重新同步。SPIEN 位或者 CRCEN 位被清 0 的时候 CRC 值 (SPI_RCR 和 SPI_TCR)被清除。 状态标志和错误标志 状态标志 发送缓冲区空标志(TBE) 发送缓冲区空闲的时候该位被置1,软件通过写SPI_DTR寄存器将下一帧数据写入发送缓冲区。 如果TBEIE位被置1,TBE被置1的时候产生中断。写SPI_DTR寄存器会清除TBE位。 接收缓冲区非空标志(RBNE) 接收缓冲区非空的时候该位被置1,一帧数据被接收并存储在接收缓冲区里,软件可以通过读 SPI_DTR寄存器来读该数据。如果RBEIE位被置1,RBNE被置1的时候产生中断。读SPI_DTR 寄存器会清除RBNE位。 SPI传输忙标志(TRANS) 368 15.3.8 GD32F1x0 用户手册 TRANS标志被硬件置1和清0。它表示SPI正处于数据传输过程中。如果软件想要禁用 SPI,那么可通过检测TRANS 标志判断传输是否结束,只有这样才能避免破坏最后一个数据 的传输。因此,软件必须严格按照下述步骤操作。 除了主设备的双向只接收模式 (MSTMODE=1 和BDM=1 和BDOE=0)之外,发送开始的时候 TRANS位会被置1。当SPI关闭或者配置错误发生(CONFE=1)后TRANS位会被清0。不连续通 讯的时候,在每次通信的时候TRANS位为0;连续通讯的时候,在从模式下TRANS位在每次 通信之间为0,在主模式下的通讯中TRANS位始终为1。 错误标志 配置错误标志(CONFE) NSS硬件模式中,若NSSDRV未被使能,则当NSS引脚被拉低,CONFE位被置1。在NSS软 件模式中,当SWNSS位为0时CONFE位被置1。当CONFE被置1时,如果ERRIE为1,将产生 中断;于此同时硬件将SPIEN位和MSTMODE位清0,SPI被关闭,设备强制转换成从模式。 可以使用下面的软件序列来清除CONFE位: 对SPI_STR寄存器读或写访问 写SPI_CTLR1寄存器 SPIEN和MSTMODE位被写保护直到CONFE被清0。从设备的CONFE位不能被置1。在多主机 的配置中,设备可以在CONFE位被置1的时候进入从模式,这也意味着发生了系统控制的多主 冲突。 接收过载错误(RXORE) 在RBNE位被置1时,如果再有数据被接收,RXORE位将被置1。这意味着,上一帧数据还没 有被读出来,新的数据已经接收了。接收缓冲区的内容将会被新接收到的数据覆盖,上一帧数 据将会丢失。如果ERRIE位被置1,当RXORE位被置1时将产生中断。 可以使用如下的软件序列来清除RXORE位: 读SPI_DTR寄存器,然后读SPI_STR 寄存器。 CRC错误(CRCE) 当CRCEN位被置1时,SPI_RCR寄存器中的接收到的数据的CRC计算值将会和紧随着最后一 帧数据接收到的CRC的值比较,当二者不同时CRCE位被置1,对 CRCE位写0可以清除该位, 写1到CRCE位无效。 停止 SPI 每当一次传输结束,软件通过清除SPIEN位来停止SPI。在一些配置中,SPIEN被清0以后最后 一次传输还在进行。为了避免破坏最后的传输,软件应该遵守以下步骤: 全双工模式 等待RBNE=1以接收最后的数据 等待TBE=1 等待TRANS=0 369 15.3.9 禁用SPI (SPIEN=0),进入停机模式或关闭外设时钟。 GD32F1x0 用户手册 只发送模式 最后的数据被写入SPI_DTR寄存器 等待TBE=1 等待TRANS=0 禁用SPI (SPIEN=0),进入停机模式或关闭外设时钟。 主设备的只接收模式 等待倒数第二次RBNE=1 在禁用SPI(SPIEN=0)之前等待一个SPI时钟周期(使用软件循环) 在进入停机模式或关闭外设时钟之前等待最后的RBNE=1 从设备的只接收模式 可以在任何时候禁用SPI (写SPIEN=1),当前传输结束后SPI将被有效的禁止。 等待TRANS = 0之后才能进入停机模式或关闭外设时钟。 DMA 请求 采用DMA 来发送或接收数据,才能真正发挥出SPI 的最高速度。此时读写SPI_DTR 的速度 足够快,且发送的数据也相当紧凑。 当SPI_CTLR2寄存器的DMATE或DMARE位被置1 时,即可进行DMA访问。每当TBE被置1, SPI就会通过发送通道发出一个DMA请求。DMA写一帧数据到SPI_DTR寄存器后TBE位将被清 0。当RBNE位被置1,SPI通过接收通道将会发出一个DMA请求。DMA从SPI_DTR寄存器中读 取一帧数据以后RBNE位将被清0。 当SPI仅用来发送数据,可以只使能SPI的发送DMA通道。在这种情况下,RXORE标志位被置 1因为接收到的数据没有被读取。 当SPI仅用来接收数据,可以只使能SPI的接收DMA通道。 在发送模式下,当DMA已经写入所有将被发送的数据(DMAISR寄存器的TCIF标志位被置1), 为确保SPI通讯结束,软件需要监视TRANS标志位来判断通信是否完成,这样做是为了在禁用 SPI 或进入停机模式之前避免破坏最后一次传输。软件必须首先等到最后一个TBE=1然后再等 到TRANS=0。 370 图 188. 使用 DMA 发送 时钟 发送 TBE DMA 请求 DMA 写 发送缓冲区 D D2 1 DMA TCIF TRANS 图 189. 使用 DMA 接收 GD32F1x0 用户手册 D3 时钟 接收 RBNE DMA 请求 DMA 读 接收缓冲区 DMA TCIF D1 D2 D3 在SPI通讯中使用DMA时,如果CRCEN位被置1,则SPI 模块会在最后一个数据之后自动发送 和接收CRC 值。此时CRCNT 控制位将失去意义。接收缓冲中的CRC值应当及时读出,以便清 零RBNE 位。 15.3.10 SPI 中断 表 22. SPI 中断请求 中断事件 发送缓冲区空 接收缓冲区有数据 配置出错 接收过载错误 CRC错误 标志位 TBE RBNE CONFE RXORE CRCE 使能控制位 TBEIE RBNEIE ERRIE 371 15.4 15.4.1 I2S 功能说明 一般描述 I2S框图如下所示. 图 190. I2S 框图 SYSCLK Control Registers Clock Generator Master Control Logic APB TX Buffer RX Buffer Slave Control Logic 16 bits MSB Shift Register LSB 16 bits GD32F1x0 用户手册 O PAD I O PAD I SPI_MISO / I2S_MCK SPI_SCK / I2S_CK O PAD I SPI_NSS / I2S_WS O PAD I SPI_MOSI / I2S_SD 15.4.2 I2S与SPI共享相同的引脚、标志位、中断、数据缓冲区和移位寄存器。当SPI_I2SCTLR寄存 器的I2SSEL位被置1时,这些资源被I2S占用。否则,这些资源被SPI占用。 I2S接口有4个引脚,分别是I2S_CK、I2S_WS、I2S_SD和I2S_MCK。I2S_CK是串行时钟信 号,与SPI_SCK共享一个引脚。I2S_WS是数据控制信号,与SPI_NSS共享一个引脚。I2S_SD 是串行数据信号,与SPI_MOSI共享一个引脚。I2S_MCK是主时钟信号,与SPI_MISO共享一 个引脚。I2S_MCK对于I2S接口而言是个可选信号,它提供了一个256倍于Fs的时钟频率,其 中Fs是音频采样率。 I2S功能有5个子模块,分别是控制寄存器、时钟生成器、主机控制逻辑、从机控制逻辑和移位 寄存器。所有的用户可配置寄存器都在控制寄存器模块实现,其中包括发送缓冲区和接收缓冲 区。时钟生成器用来产生I2S通讯时钟。主机控制逻辑用来在主机模式下生成I2S_WS信号并控 制通信。从机控制逻辑根据接收到的I2SCK和I2S_WS来控制从机模式下的通信。移位寄存器 控制I2S_SD上的串行数据发送和接收。 支持的音频标准 I2S音频标准是通过设置SPI_I2SCTLR寄存器的I2SSTD位来选择的。有四种音频标准可供选 择,分别是I2S飞利浦标准,MSB对齐标准,LSB对齐标准和PCM标准。除PCM之外的所有标 准都是两个通道(左通道和右通道)的音频数据分时复用I2S接口的,并通过I2S_WS信号来区分 当前数据属于哪个通道。对于PCM标准来说,I2S_WS信号表示帧同步信息。 数据长度和通道长度可以通过SPI_I2SCTLR寄存器的DTLEN和CHLEN位来设置。由于通道长 372 GD32F1x0 用户手册 度必须大于等于数据长度,所以有四种数据长度和通道长度的组合可供选择。它们是16位数据 打包成16位数据帧,16位数据打包成32位数据帧,24位数据打包成32位数据帧,32位数据打 包成32位数据帧。用于发送和接收的数据缓冲区都是16位宽的。所以,要完成数据长度为24 位或32位的数据帧,SPI_DTR寄存器需要被访问2次;要完成数据长度为16位的数据帧, SPI_DTR寄存器只需被访问1次。如需将16位数据打包成32位数据帧,硬件会自动插入16位0。 对于所有标准和帧格式来说,数据的最高位总是最先被发送的。对于所有基于两通道分时复用 的标准来说,左通道总是先发送的,然后是右通道。 I2S 飞利浦标准 对于I2S飞利浦标准,I2S_WS和I2S_SD在I2S_CK的下降沿变化。各种配置情况的时序图如下 所示。 图 191. I2S飞利浦标准时序图(DTLEN=00, CHLEN=0, CKPL=0) 图 192. I2S飞利浦标准时序图(DTLEN=00, CHLEN=0, CKPL=1) 对于16位数据打包成16位数据帧的帧格式来说,每完成1帧需要访问SPI_DTR寄存器1次。 图 193. I2S飞利浦标准时序图(DTLEN=10, CHLEN=1, CKPL=0) 图 194. I2S飞利浦标准时序图(DTLEN=10, CHLEN=1, CKPL=1) 对于32位数据打包成32位数据帧的帧格式来说,每完成1帧需要访问SPI_DTR寄存器2次。在 发送模式下,如要发送0x8899AABB,写入SPI_DTR寄存器的第一个数据应该是0x8899,第 二个数据应该是0xAABB。在接收模式下,如要接收0x8899AABB,第一个从SPI_DTR寄存器 读到的数据应该是0x8899,第二个数据应该是0xAABB。 373 GD32F1x0 用户手册 图 195. I2S飞利浦标准时序图(DTLEN=01, CHLEN=1, CKPL=0) 图 196. I2S 飞利浦标准时序图(DTLEN=01, CHLEN=1, CKPL=1) 对于24位数据打包成32位数据帧的帧格式来说,每完成1帧需要访问SPI_DTR寄存器2次。在 发送模式下,如要发送0x8899AA,写入SPI_DTR寄存器的第一个数据应该是0x8899,第二个 数据应该是0xAAXX (低8位可以是任意值,它将被硬件强制变为0x00)。在接收模式下,如要 接收0x8899AA,第一个从SPI_DTR寄存器读到的数据应该是0x8899,第二个数据应该是 0xAA00。 图 197. I2S飞利浦标准时序图(DTLEN=00, CHLEN=1, CKPL=0) 图 198. I2S飞利浦标准时序图(DTLEN=00, CHLEN=1, CKPL=1) 对于16位数据打包成32位数据帧的帧格式来说,每完成1帧需要访问SPI_DTR寄存器1次。为 扩展成32位的数据帧格式,剩下的16位被硬件强制填为0x0000。 MSB 对齐标准 对于MSB对齐标准,I2S_WS和I2S_SD在I2S_CK的下降沿变化。SPI_DTR 寄存器的控制方 式与I2S飞利浦标准完全相同。各个配置的时序图如下。 374 图 199. MSB对齐标准时序图(DTLEN=00, CHLEN=0, CKPL=0) 图 200. MSB对齐标准时序图(DTLEN=00, CHLEN=0, CKPL=1) 图 201. MSB对齐标准时序图(DTLEN=10, CHLEN=1, CKPL=0) 图 202. MSB对齐标准时序图(DTLEN=10, CHLEN=1, CKPL=1) 图 203. MSB对齐标准时序图(DTLEN=01, CHLEN=1, CKPL=0) 图 204. MSB对齐标准时序图(DTLEN=01, CHLEN=1, CKPL=1) 图 205. MSB对齐标准时序图(DTLEN=00, CHLEN=1, CKPL=0) 375 图 206. MSB对齐标准时序图(DTLEN=00, CHLEN=1, CKPL=1) LSB 对齐标准 对于LSB对齐标准,I2S_WS和I2S_SD在I2S_CK的下降沿变化。在通道长度与数据长度相同 的情况下,LSB对齐标准和MSB对齐标准是完全相同的。对于通道长度大于数据长度的情况, LSB对齐标准的有效数据与最低位对齐,而MSB对齐标准的有效数据与最高位对齐。通道长度 大于数据长度的各种配置情况时序图如下所示。 图 207. LSB对齐标准时序图(DTLEN=01, CHLEN=1, CKPL=0) 图 208. LSB对齐标准时序图(DTLEN=01, CHLEN=1, CKPL=1) 对于24位数据打包成32位数据帧的帧格式来说,每完成1帧需要访问SPI_DTR寄存器2次。在 发送模式下,如要发送0x8899AA,写入SPI_DTR寄存器的第一个数据应该是0xXX88 (高8位 可以是任意值,它将被硬件强制变为0x00),第二个数据应该是0x99AA。在接收模式下,如要 接收0x8899AA,第一个从SPI_DTR寄存器读到的数据应该是0x0088,第二个数据应该是 0x99AA。 图 209. LSB对齐标准时序图(DTLEN=00, CHLEN=1, CKPL=0) 图 210. LSB对齐标准时序图(DTLEN=00, CHLEN=1, CKPL=1) 对于16位数据打包成32位数据帧的帧格式来说,每完成1帧需要访问SPI_DTR寄存器1次。为 扩展成32位的数据帧格式,剩下的16位被硬件强制填为0x0000。 376 PCM 标准 GD32F1x0 用户手册 对于PCM标准,I2S_WS和I2S_SD在I2S_CK的上升沿变化,I2S_WS信号表示帧同步信息。 短 帧 同 步 模 式 和 长 帧 同 步 模 式 都 支 持 , 可 通 过 SPI_I2SCTLR 寄 存 器 的 PCMSM 位 来 选 择 。 SPI_DTR寄存器的控制方式与I2S飞利浦标准完全相同。短帧同步模式的各种配置情况时序图 如下所示。 图 211. PCM标准短帧同步模式时序图 (DTLEN=00, CHLEN=0, CKPL=0) 图 212. PCM标准短帧同步模式时序图 (DTLEN=00, CHLEN=0, CKPL=1) 图 213. PCM标准短帧同步模式时序图 (DTLEN=10, CHLEN=1, CKPL=0) 图 214. PCM标准短帧同步模式时序图 (DTLEN=10, CHLEN=1, CKPL=1) 图 215. PCM标准短帧同步模式时序图 (DTLEN=01, CHLEN=1, CKPL=0) 图 216. PCM标准短帧同步模式时序图 (DTLEN=01, CHLEN=1, CKPL=1) 377 图 217. PCM标准短帧同步模式时序图 (DTLEN=00, CHLEN=1, CKPL=0) 图 218. PCM标准短帧同步模式时序图 (DTLEN=00, CHLEN=1, CKPL=1) 长帧同步模式的各种配置情况时序图如下所示。 图 219. PCM 标准长帧同步模式时序图 (DTLEN=00, CHLEN=0, CKPL=0) 图 220. PCM 标准长帧同步模式时序图 (DTLEN=00, CHLEN=0, CKPL=1) 图 221. PCM 标准长帧同步模式时序图 (DTLEN=10, CHLEN=1, CKPL=0) 图 222. PCM 标准长帧同步模式时序图 (DTLEN=10, CHLEN=1, CKPL=1) 图 223. PCM 标准长帧同步模式时序图 (DTLEN=01, CHLEN=1, CKPL=0) 378 GD32F1x0 用户手册 图 224. PCM 标准长帧同步模式时序图 (DTLEN=01, CHLEN=1, CKPL=1) 图 225. PCM 标准长帧同步模式时序图 (DTLEN=00, CHLEN=1, CKPL=0) 图 226. PCM 标准长帧同步模式时序图 (DTLEN=00, CHLEN=1, CKPL=1) 15.4.3 时钟生成器 图 227. I2S时钟生成器框图 SYSCLK 8-bit Configurable Divider frequency dividing ratio = DIV * 2 + OF DIV4 DIV2 CHLEN 1 0 I2S_MCK MCKOE 0 I2S_CK 1 I2S时钟生成器框图如上所示。I2S接口时钟是通过SPI_I2SCKP寄存器的DIV位, OF位, MCKOE位以及SPI_I2SCTLR寄存器的CHLEN位来配置的。它是由系统时钟分频得到的。I2S 比特率可以通过下表所示的公式计算。 表 23. I2S 比特率计算公式 MCKOE CHLEN 0 0 0 1 1 0 1 1 公式 SYSCLK / (DIV * 2 + OF) SYSCLK / (DIV * 2 + OF) SYSCLK / (8 * (DIV * 2 + OF)) SYSCLK / (4 * (DIV * 2 + OF)) 音频采样率(Fs)和 I2S 比特率的关系按如下公式定义。 Fs = I2S比特率 / (通道长度 * 通道数) 379 GD32F1x0 用户手册 所以,为了得到期望的音频采样率,时钟生成器需要按下表所列的公式进行配置。 表 24. 音频采样率计算公式 MCKOE CHLEN 0 0 0 1 1 0 1 1 公式 SYSCLK / (32 * (DIV * 2 + OF)) SYSCLK / (64 * (DIV * 2 + OF)) SYSCLK / (256 * (DIV * 2 + OF)) SYSCLK / (256 * (DIV * 2 + OF)) 常用音频采样率的配置方法和能达到的精度在下表中列出。表中的精度是在使用标准 8MHz HSE 时钟的情况下计算得到的。 表 25.音频采样率配置和精度 CHLEN = 0 Target SYSCLK MCKOE Real Fs(Hz) (MHz) DIV OF Fs(Hz) Error CHLEN = 1 DIV OF Real Fs(Hz) Error 96000 72 No 11 1 97826.09 1.90% 6 0 93750 2.34% 96000 72 Yes 1 1 93750 2.34% 1 1 93750 2.34% 96000 48 No 8 0 93750 2.34% 4 0 93750 2.34% 96000 48 Yes 1 0 93750 2.34% 1 0 93750 2.34% 48000 72 No 23 1 47872.34 0.27% 11 1 48913.04 1.90% 48000 72 Yes 3 0 46875 2.34% 3 0 46875 2.34% 48000 48 No 15 1 48387.1 0.81% 8 0 46875 2.34% 48000 48 Yes 2 0 46875 2.34% 2 0 46875 2.34% 44100 72 No 25 1 44117.65 0.04% 13 0 43269.23 1.88% 44100 72 Yes 3 0 46875 6.29% 3 0 46875 6.29% 44100 48 No 17 0 44117.65 0.04% 8 1 44117.65 0.04% 44100 48 Yes 2 0 46875 6.29% 2 0 46875 6.29% 32000 72 No 35 0 32142.86 0.44% 17 1 32142.86 0.44% 32000 72 Yes 4 1 31250 2.34% 4 1 31250 2.34% 32000 48 No 23 1 31914.89 0.27% 11 1 32608.7 1.90% 32000 48 Yes 3 0 31250 2.34% 3 0 31250 2.34% 22050 72 No 51 0 22058.82 0.04% 25 1 22058.82 0.04% 22050 72 Yes 6 1 21634.61 1.88% 6 1 21634.61 1.88% 22050 48 No 34 0 22058.82 0.04% 17 0 22058.82 0.04% 22050 48 Yes 4 1 20833.33 5.52% 4 1 20833.33 5.52% 16000 72 No 70 1 15675.75 0.27% 35 0 16071.43 0.45% 16000 72 Yes 9 0 15625 2.34% 9 0 15625 2.34% 16000 48 No 47 0 15957.45 0.27% 23 1 15957.45 0.27% 16000 48 Yes 6 0 15625 2.34% 6 0 15625 2.34% 11025 72 No 102 0 11029.41 0.04% 51 0 11029.41 0.04% 11025 72 Yes 13 0 10817.3 1.88% 13 0 10817.3 1.88% 11025 48 No 68 0 11029.41 0.04% 34 0 11029.41 0.04% 11025 48 Yes 8 1 11029.41 0.04% 8 1 11029.41 0.04% 380 15.4.4 GD32F1x0 用户手册 CHLEN = 0 Target SYSCLK MCKOE Real Fs(Hz) (MHz) DIV OF Fs(Hz) 8000 72 No 140 1 8007.11 8000 72 Yes 17 1 8035.71 8000 48 No 94 0 7978.72 8000 48 Yes 11 1 8152.17 CHLEN = 1 Error DIV OF Real Fs(Hz) 0.09% 70 1 7978.72 0.45% 17 1 8035.71 0.27% 47 0 7978.72 1.90% 11 1 8152.17 Error 0.27% 0.45% 0.27% 1.90% 运行 运行模式 运行模式是通过SPI_I2SCTLR寄存器的I2SOM位来选择的。共有四种运行模式可供选择,分 别是主机发送模式,主机接收模式,从机发送模式和从机接收模式。各个运行模式下I2S接口 信号的方向如下表所示。 表 26.各个运行模式下I2S接口信号的方向 运行模式 I2S_MCK I2S_CK 主机发送 输出或 NU(1) 输出 主机接收 输出或 NU(1) 输出 从机发送 输入或 NU(1) 输入 从机接收 输入或 NU(1) 输入 I2S_WS 输出 输出 输入 输入 I2S_SD 输出 输入 输出 输入 NU表示该引脚没有被I2S使用,可以给其他功能使用。 状态位和中断 SPI_STR寄存器中有6个可用的标志位,分别是TBE、RBNE、TRANS、I2SCH、TXURE和 RXORE。用户通过这些标志位可以全面监视I2S总线的状态。  发送缓冲区空标志 (TBE) 发送缓冲区空的时候,该位被置1。此时,如果SPI_CTLR2寄存器的TBEIE位为1,将产 生中断。软件可以通过写SPI_DTR寄存器将下一个数据写入发送缓冲区。在SPI_DTR寄 存器被写的时候,TBE位被清零。  接收缓冲区非空标志 (RBNE) 接收缓冲区非空的时候,该位被置1。此时,如果SPI_CTLR2寄存器的RBNEIE位为1, 被产生中断。这表示有效数据已经被接收并存储在接收缓冲区。软件可以通过读SPI_DTR 寄存器来读取此数据。在SPI_DTR寄存器被读的时候,RBNE位被清零。  通信进行中标志(TRANS) 该位由硬件置1和清零,它表明I2S接口的状态。TRANS标志可以用来监测数据通信的结 尾,通常用于关闭I2S的软件程序段。可以避免破坏数据通信的最后一帧。要使用此标志 位,下面描述的过程必须非常重视。传输开始时,TRANS位会变为1。主机接收模式除外。 在主机接收模式下,TRANS位在整个接收过程中都保持为0。I2S关闭或传输完成时, TRANS位会变为0。非连续通信时,每次通讯之间TRANS位都是0。连续通讯时,在主机 381 GD32F1x0 用户手册 发送模式下,TRANS位始终保持为1;在从机模式下,TRANS位会在每次传输之间变低 一个I2S时钟周期。  I2S通道标志(I2SCH) 在发送模式下,I2SCH标志在每次TBE标志由0变1时更新,表示即将要发送的数据属于哪 个通道。在接收模式下,I2SCH标志在每次RBNE标志由0变1时更新,表示刚接收到的数 据属于哪个通道。注意,在出错的时候(TXURE或RXORE),该标志不再可信,在恢复通 信之前,I2S需要被关闭再开启。此外,该标志对于PCM标准来说没有意义。  发送欠载错误标志(TXURE) 在从机发送模式下,如果收到数据传输的第一个时钟时发送缓冲区仍为空,TXURE标志 会置1。此时,如果SPI_CTLR2寄存器的ERRIE位为1,将产生中断。在SPI_STR寄存器 被读的时候,TXURE位被清零。  接收过载错误标志(RXORE) 在接收模式下,如果接收到新的数据时前一个数据仍没有从SPI_DTR寄存器中读走, RXORE标志会置1。此时,如果SPI_CTLR2寄存器的ERRIE位为1,将产生中断。在这种 情况下,接收缓冲区的数据将不会被新接收的数据更新。读SPI_DTR寄存器将返回先前 接收的正确数据。后续接收到的所有数据都将被丢弃。RXORE标志会被如下的软件操作 序列清零:先读SPI_DTR寄存器,随后读SPI_STR寄存器。 下表总结了I2S中断事件和相应的使能位。 表 27. I2S中断 中断事件 发送缓冲区空 接收缓冲区非空 发送欠载错误 接收过载错误 标志位 TBE RBNE TXURE RXORE 使能位 TBEIE RBNEIE ERRIE ERRIE 初始化顺序 I2S初始化序列包含以下五个步骤。如果要初始化I2S工作在主机模式,所有的五个步骤都需要 被执行。如果要初始化I2S工作在从机模式,只需要步骤2、3、4。  步骤1: 通过配置SPI_I2SCKP寄存器的DIV[7:0]位,OF位和MCKOE位,定义I2S的比特 率和I2S_MCK是否需要提供。  步骤2: 通过配置SPI_I2SCTLR寄存器的CKPL位,定义空闲状态时钟的极性。  步 骤 3: 通 过 配 置 SPI_I2SCTLR 寄 存 器 的 I2SSEL 位 , I2SSTD[1:0] 位 , PCMSM 位 , I2SOM[1:0]位,DTLEN[1:0]位和CHLEN位,定义I2S特性。  步骤4: 通过配置SPI_CTLR2寄存器的TBEIE位,RBNEIE位,ERRIE位,DMATE位和 DMARE位,选择中断源和DMA功能。此步骤可选。  步骤5: 将SPI_I2SCTLR寄存器的I2SEN位置1,来启动I2S。 382 主机发送流程 GD32F1x0 用户手册 TBE标志被用来控制发送流程。如前文所述,TBE标志表示发送缓冲区空了,此时,如果 SPI_CTLR2寄存器的TBEIE位为1,将产生中断。刚开始时,发送缓冲区为空(TBE为1),移位 寄存器中没有发送序列。当16位数据被写入SPI_DTR寄存器时(TBE变为0),数据立即从发送 缓冲区装载到移位寄存器中 (TBE变为1)。同事,发送序列开始。数据是并行地装载到16位移 位寄存器中的,然后串行地从I2S_SD引脚发出(高位先发)。下一个数据应该在TBE为1时被 写入SPI_DTR寄存器。数据写入SPI_DTR寄存器之后,TBE变为0。当前发送序列结束时,发 送缓冲区的数据会自动装载到移位寄存器中,然后TBE标志变回1。为保证连续的音频数据发 送,下一个将要发送的数据必须在当前发送序列结束之前写入SPI_DTR寄存器。 对于除PCM标准外的所有标准,I2SCH标志被用来区别数据所属的通道。I2SCH标志在每次 TBE标志由0变1的时候更新。起初,I2SCH标志为0,表示左通道的数据应该被写入SPI_DTR 寄存器。 为关闭I2S,I2SEN位必须在TBE标志变成1且TRANS标志变成0之后清零。 主机接收流程 RBNE标志被用来控制接收序列。如前文所述, RBNE标志表示接收缓冲区非空,如果 SPI_CTLR2寄存器的RBNEIE位为1,将产生中断。当SPI_I2SCTLR寄存器的I2SEN位被置1 时,接收流程立即开始。起初,接收缓冲区为空(RBNE为0)。当一个接收流程结束时,接收到 的数据将从移位寄存器装载到接收缓冲区(RBNE变为1)。当RBNE为1时,用户应该将数据从 SPI_DTR寄存器中读走。读完以后,RBNE变成0。必须在下一次接收结束之前读走SPI_DTR 寄存器中的数据,否则将发生接收过载错误。此时RXORE标志位会被置1,如果SPI_CTLR2 寄存器的ERRIE位为1,将会发出中断。这种情况下,必须先关闭I2S再打开I2S,然后再恢复 通讯。 对于除PCM之外的所有标准来说,I2SCH标志用来区分数据所属的通道。I2SCH标志在每次 RBNE标志由0变1时更新。 为关闭I2S,需要采取特定的操作步骤来确保I2S正常结束当前传输并且没再发起新的传输。操 作步骤依赖于所选的音频标准以及配置的数据长度和通道长度。每种情况的操作步骤如下所示。  数据长度为16位,通道长度为32位,LSB对齐标准 (DTLEN = 00,CHLEN = 1, I2SSTD = 10) 1. 等待倒数第二个RBNE 2. 等待17个I2S时钟周期 3. 清除I2SEN位  数据长度为16位,通道长度为32位,除LSB对齐标准之外的其他标准 (DTLEN = 00, CHLEN = 1,I2SSTD不等于10) 1. 等待最后一个RBNE 2. 等待1个I2S时钟周期 383 15.4.5 15.5 3. 清除I2SEN位  其他所有情况 1. 等待倒数第二个RBNE 2. 等待1个I2S时钟周期 3. 清除I2SEN位 GD32F1x0 用户手册 从机发送流程 从机发送流程与主机发送流程类似。不同之处如下。 在从机模式下,从机需要在外部主机开始通讯之前开启。当外部主机开始发送时钟信号且 I2S_WS 信 号 请 求 传 输 数 据 时 , 发 送 流 程 开 始 。 数 据 需 要 在 外 部 主 机 发 起 通 讯 之 前 写 入 SPI_DTR寄存器。为了确保音频数据的连续传输,必须在当前发送序列结束之前将下一个待发 送的数据写入SPI_DTR寄存器。否则会产生发送欠载错误。此时TXURE标志会置1,如果 SPI_CTLR2寄存器的ERRIE位为1,将会发出中断。这种情况下,必须先关闭I2S再打开I2S, 然后再恢复通讯。从机模式下,I2SCH标志是根据外部主机发来的I2S_WS信号而变化的。 为关闭I2S,必须在TBE标志变为1且TRANS标志变为0之后才能清除I2SEN位。 从机接收流程 从机接收流程与主机接收流程类似。不同之处如下。 在从机模式下,从机需要在外部主机开始通讯之前开启。当外部主机开始发送时钟信号且 I2S_WS信号请求传输数据时,接收流程开始。从机模式下,I2SCH标志是根据外部主机发来 的I2S_WS信号而变化的。 为关闭I2S,必须在收到最后一个RBNE之后立即清除I2SEN位。 DMA 功能 DMA的工作方式与SPI模式完全相同。唯一不同的地方是I2S模式不支持CRC功能。 SPI 寄存器 15.5.1 SPI 控制寄存器 1 (SPI_CTLR1) 地址偏移: 0x00 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 54 3 CRC BDM BDOE CRCEN FF16 RO SWNSSEN SWNSS LF SPIEN NT PSC [2:0] rw Rw rw rw rw rw rw rw rw rw rw rw rw 2 1 0 MSTMODE SCKPL SCKPH rw rw rw 384 位 位域 15 BDM GD32F1x0 用户手册 说明 双向数据模式使能 0: 2 线各自单向传输模式 1: 1 线双向传输模式。数据在主机的MOSI 脚和从设备的MISO 脚之间传输 14 BDOE 双向模式输出使能 当BDM被置1,该位决定数据的传输方向 0: 只收模式 1: 只发模式 13 CRCEN CRC计算使能 0: CRC计算禁用 1: CRC计算使能. 12 CRCNT 下一次传输CRC 0: 下一个发送值为数据 1:下一个发送值为CRC值(TCR) 当数据传输被DMA管理,CRC值被硬件传输,此位应该被清0。 在全双工模式或只发模式下,当最后一个数据写入SPI_DTR 寄存器后应将本位置位。 在只收模式下,应当在接收完倒数第二个数据后将本位置位。 11 FF16 数据帧格式 0: 8位数据帧格式 1: 16位数据帧格式 10 RO 只接收 当BDM位被清0,此位决定数据的传输方向。 0: 全双工(发送和接收) 1: 只收模式 9 SWNSSEN NSS软件模式选择 0: NSS硬件模式,NSS输入引脚依赖IO脚。 1: NSS软件模式,NSS输入引脚依赖于SWNSS位. 8 SWNSS NSS软件模式下NSS引脚选择 0: NSS引脚拉低 1: NSS引脚拉高 只有在SWNSSEN位被置1时此位有效。 7 LF 数据高低位顺序 0: 先发送MSB,高位在前 1: 先发送LSB,低位在前 6 SPIEN SPI使能 0: 禁止SPI设备 1: 开启SPI设备 5:3 PSC 主设备时钟预分频选择 000: PCLK/2 100: PCLK/32 385 GD32F1x0 用户手册 001: PCLK/4 101: PCLK/64 010: PCLK/8 110: PCLK/128 011: PCLK/16 111: PCLK/256 使用SPI1时,PCLK =PCLK2 ;使用SPI2时,PCLK =PCLK1 2 MSTMODE 主从模式选择 0: 配置为从设备 1: 配置为主设备 1 SCKPL 时钟极性选择 0: SPI空闲状态时,CLK保持低电平 1: SPI空闲状态时,CLK保持高电平 0 SCKPH 时钟相位选择 0: 在第一个时钟跳变沿采集第一个数据 1: 在第二个时钟跳变沿采集第一个数据 15.5.2 SPI 控制寄存器 2 (SPI_CTLR2) 地址偏移: 0x04 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 TBEIE RBNEIE ERRIE 保留 NSSDRV DMATE DMARE rw rw rw rw rw rw 位 位域 15:8 保留 说明 必须保持复位值 7 TBEIE 发送缓冲区空中断使能 0: TBE中断关闭 1: TBE中断使能,TBE位被置1将产生中断。 6 RBNEIE 接收缓冲区非空中断使能 0: RBNE中断关闭 1: RBNE中断使能,当RBNE位被置1时产生中断。 5 ERRIE 错误中断使能 0: 错误中断关闭 1: 错误中断使能,CRCE位或CONFE位或RXORE位或TXURE位被置1的时候产生中 断。 4:3 保留 必须保持复位值 2 NSSDRV NSS输出使能 0: NSS输出被禁止 1: NSS输出使能,如果NSS引脚配置为输出,当SPI使能时NSS引脚在主模式下被拉 386 GD32F1x0 用户手册 低。 如果NSS引脚配置为输入,NSS引脚在主模式下应该被拉高,此时这一位无效。 1 DMATE 发送缓冲区DMA使能 0: 发送缓冲区DMA禁止 1: 发送缓冲区DMA使能,SPI_STR寄存器的TBE位被置1时,相应DMA通道产生一 个DMA请求。 0 DMARE 接收缓冲区DMA使能 0: 接收缓冲区DMA禁止 1: 接收缓冲区DMA使能,SPI_STR寄存器的RBNE位被置1时,相应DMA通道产生一 个DMA请求。 15.5.3 SPI 状态寄存器 (SPI_STR) 地址偏移: 0x08 复位值: 0x0002 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 TRANS RXORE CONFE CRCE TXURE I2SCH TBE RBNE r r r rc_w0 r r r r 位 位域 15:8 保留 说明 必须保持复位值 7 TRANS 通信进行中标志 0: SPI或I2S空闲 1: SPI或I2S当前正在发送或者接收数据,或者发送缓冲区非空。 硬件置1和清0 6 RXORE 接收过载错误标志 0: 没有发生接收过载错误 1: 发生接收过载错误 此 标 志 位 由 硬 件 置 1 和 软 件 序 列 清 0 , 软 件 序 列 为 先 读 SPI_DTR 寄 存 器 然 后 读 SPI_STR。 5 CONFE SPI配置错误标志 0: 无配置错误发生 1: 发生配置错误 (在主模式下,在硬件NSS模式下NSS引脚被拉低或软件NSS模式下 SWNSS位为0都会产生CONFE错误) 此标志位由硬件置1和软件序列清0,软件序列为先读或写SPI_STR寄存器然后写 SPI_CTLR1寄存器。 I2S 模式下该位无用。 387 4 CRCE SPI CRC错误表示 0: SPI_RCR值等于最后接收到的CRC值 1: SPI_RCR值不等于最后接收到的CRC值 此位由硬件置1和软件写0清0。 I2S 模式下该位无用。 3 TXURE 发送欠载错误标志 0: 无发送欠载错误 1: 发生了发送欠载错误. 该位由硬件置1,通过写SPI_STR寄存器清0 SPI模式下该位无用。 2 I2SCH I2S通道标志 0: 将要发送或者已经接收的数据属于左通道 1: 将要发送或者已经接收的数据属于右通道 硬件置1和清0 SPI模式下该位无用,在I2S PCM模式下该位无意义。 1 TBE 发送缓冲区空标志 0: 发送缓冲区非空 1: 发送缓冲区空 0 RBNE 接收缓冲区非空标志 0: 接收缓冲区空 1: 接收缓冲区非空 GD32F1x0 用户手册 15.5.4 SPI 数据寄存器 (SPI_DTR) 地址偏移: 0x0C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DTR[15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 位域 说明 15:0 DTR[15:0] 数据传输寄存器,硬件有两个缓冲区:发送缓冲区和接收缓冲区。向DTR写数据将 把数据保存在发送缓冲区,从DTR读数据将从接收缓冲区中得到数据。 如果数据帧格式被设置为8位,DTR[15:8]强制变为0,DTR[7:0]被用来发送和接收 数据,同时发送和接收缓冲区都变成8位。如果数据帧格式为16位,DTR[15:0]被用 388 15.5.5 来发送和接收,同时发送和接收缓冲区也为16位。 SPI CRC 多项式寄存器 (SPI_CPR) GD32F1x0 用户手册 地址偏移: 0x10 复位值: 0x0007 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CPR [15:0] rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位 位域 说明 15:0 CPR[15:0] 该寄存器包含CRC多项式,用于CRC计算。缺省值为0007h. 15.5.6 SPI 接收 CRC 寄存器 (SPI_RCR) 地址偏移: 0x14 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RCR[15:0] r r r r r r r r r r r r r r r r 位 位域 15:0 RCR 说明 当SPI_CTLR1 寄存器的CRCEN 置位时,硬件将会对接收的数据计算CRC 值, 并将其保存在RCR 寄存器中。假如数据帧格式为8 位,CRC 计算将采用 CRC8 标准,并且将结果保存在RCR[7:0]中;假如数据帧格式为16 位,CRC 计算将采用CRC16 标准,并且将结果保存在RCR[15:0]中。 硬件在收到每个位后都会计算CRC。当TRANS置位时,读取本寄存器有可能返 回的是计算过程产生的中间值。 SPI_CTLR1寄存器中的CRCEN位或SPIEN位被清0时复位此寄存器。 15.5.7 SPI 发送 CRC 寄存器 (SPI_TCR) 地址偏移: 0x18 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TCR[15:0] r r r r r r r r r r r r r r r r 位 位域 说明 15:0 TCR 当SPI_CTLR1寄存器的CRCEN位被置1,硬件计算发送出去的字节的CRC值后保存到 TCR寄存器。如果是8位数据帧格式,CRC计算基于CRC8的标准进行,保存数据到 389 GD32F1x0 用户手册 TCR[7:0],如果是16位数据帧格式,CRC计算基于CRC16的标准进行,保存数据到 TCR[15:0]. 硬件在发送出每个位后都会计算CRC值,如果TRANS位被置1,读此寄存器将返回一个 中间值。不同的数据高低位顺序(SPI_CTLR1寄存器的LF位)也将返回不同的CRC值。 SPI_CTLR1寄存器中的CRCEN位或SPIEN位被清0时复位此寄存器 15.5.8 SPI I2S 控制寄存器 (SPI_I2SCTLR) 地址偏移: 0x1C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 保留 I2SSEL I2SEN I2SOM PCMSM 保留 rw rw rw rw rw rw rw rw rw rw 5 4 I2SSTD rw rw 3 CKPL rw 2 1 DTLEN rw rw 0 CHLEN rw 位 15:12 位域 保留 说明 必须保持复位值 11 I2SSEL I2S模式选择 0: SPI模式 1: I2S模式 应该在SPI和I2S都关闭时配置此位。 10 I2SEN I2S使能 0: I2S关闭 1: I2S开启 SPI模式不使用此位。 9:8 I2SOM I2S运行模式 00: 从机发送模式 01: 从机接收模式 10: 主机发送模式 11: 主机接收模式 应该在I2S关闭时配置此位。 SPI模式不使用此位。 7 PCMSM PCM帧同步模式 0: 短帧同步 1: 长帧同步 只有在PCM标准下,此位才有意义。 应该在I2S关闭时配置此位。 SPI模式不使用此位。 6 保留 必须保持复位值 5:4 I2SSTD I2S标准选择 00: I2S飞利浦标准 01: MSB对齐标准 10: LSB对齐标准 390 11: PCM标准 应该在I2S关闭时配置此位。 SPI模式不使用此位。 3 CKPL 空闲状态时钟极性 0: I2S时钟空闲状态为低电平 1: I2S时钟空闲状态为高电平 应该在I2S关闭时配置此位。 SPI模式不使用此位。 2:1 DTLEN 数据长度 00: 16位 01: 24位 10: 32位 11: 保留 应该在I2S关闭时配置此位。 SPI模式不使用此位。 0 CHLEN 通道长度 0: 16位 1: 32位 通道长度不能小于数据长度。 应该在I2S关闭时配置此位。 SPI模式不使用此位。 15.5.9 SPI I2S 时钟预分频寄存器 (SPI_I2SCKP) 地址偏移: 0x20 复位值: 0x0002 15 14 13 12 11 保留 rw rw rw rw rw 10 9 8 MCKOE OF rw rw rw 7 6 rw rw GD32F1x0 用户手册 5 4 3 2 1 0 DIV rw rw rw rw rw rw 位 15:10 位域 保留 说明 必须保持复位值 9 MCKOE I2S_MCK输出使能 0: I2S_MCK输出关闭 1: I2S_MCK输出开启 应该在I2S关闭时配置此位。 SPI模式不使用此位。 8 OF 预分频电路的奇系数 0: 实际分频系数为DIV * 2 1: 实际分频系数为DIV * 2 + 1 应该在I2S关闭时配置此位。 SPI模式不使用此位。 7:0 DIV 预分频电路的分频系数 391 实际分频系数为DIV * 2 + OF。 DIV不能为0。 应该在I2S关闭时配置此位。 SPI模式不使用此位。 GD32F1x0 用户手册 392 16 比较器 (CMP) GD32F1x0 用户手册 16.1 16.2 CMP 说明 通用比较器CMP1和CMP2,可独立使用(所有的终端都可以接到I/O口),也可与定时器结合使 用。它们可用于多种功能包括由通过模拟信号触发从省电模式中唤醒,模拟信号调理,以及与 DAC和定时器输出的PWM相结合,组成逐周期的电流控制回路。 CMP 主要特性  轨对轨比较器  可配置迟滞  可配置的速率和损耗  每个比较器有可配置的模拟输入源 – DAC – 3 个I/O引脚 – 内部参考电压及其等分电压值  窗口比较器  输出到I/O口  输出到定时器可以触发其他事件  输出到EXTI 16.3 CMP 功能说明 CMP框图见下图。 393 图 228 CMP框图 PA1 PA4(DAC) PA0 PA5 VREFINT/4 VREFINT/2 VREFINT*3/4 VREFINT PA3 PA4(DAC) PA2 PA5 VREFINT/4 VREFINT/2 VREFINT*3/4 VREFINT CMP1_IP + CMP1 - CMP1_IM + CMP2_IP CMP2 - CMP2_IM CMP1_OUT CMP1_INTR PA0/PA6/PA11 to EXTI to TIM1/TIM2/TIM3 CMP2_OUT CMP1_INTR PA2/PA7/PA12 to EXTI to TIM1/TIM2/TIM3 16.3.1 16.3.2 比较器时钟和复位 CMP 时钟由时钟控制器提供,与 PCLK 同步。CMP 和 SYSCFG 共享复位使能和时钟使能位。 比较器输入输出 在被选为比较器输入口之前,I/O 口必须由 GPIO 寄存器配置成模拟输入模式。 参照 Datasheet 中的引脚定义,比较器输出端必须接到具备相应备用功能 I/O 脚上。 各种定时器的输入端可以在内部与 CMP 的输出端相连确保以下功能:  定时测量的输入捕获。  使用 BKIN 对 PWM 信号紧急关闭  使用 Ocref_clr 输入实现逐周期电流控制 极性选择逻辑与输出端口的重定向工作独立于 PCLK 时钟,这使得比较器可以在深度睡眠模 式下工作。 比较器的输出可以在片内和片外同时重定向。 比较器的输出端口可以内部连接到扩展中断和事件控制器。每个比较器都有自己的 EXTI 线路 并且能够产生中断或事件。从省电模式返回也是相同的机制。 394 16.3.3 16.3.4 16.3.5 16.4 比较器电源模式 GD32F1x0 用户手册 对于一个给定的应用,比较器通过电源消耗和传输延迟的折中可以调整到最适宜的状态,这一 过程通过配置CMP_CSR寄存器的CMPxM[1:0]位来实现。 比较器迟滞 为了避免噪声信号引起的转换输出的假象,比较器包含了一个可编程的迟滞,用以强制使用外 部期间的迟滞值。在不需要的时候(例如从省电模式返回),这个功能可以关闭。 比较器寄存器写保护 出于对应用的安全考虑,例如过流保护或热保护,及其他特殊功能保护需求,有必要保证比较 器的配置在假的寄存器访问或者程序计数器崩溃的情况下不会被改写 出于这个考虑,应该在配置结束以后立即通过设置CMPxLK 位为1可以使比较器控制和状态寄 存器进入写保护状态。总体的CMP_CSR 寄存器将变成只读,包括CMPxLK 位。 只有MCU的复位才能复位CMPxLK位 CMP 寄存器 16.4.1 CMP 控制和状态寄存器 (CMP_CSR) 地址偏移: 0x00 复位值: 0x0000 0000 31 CMP2LK rwo 15 CMP1LK rwo 30 CMP2O r 14 CMP1O r 29 28 CMP2HST rw/r 13 12 CMP1HST rw/r 27 26 25 24 CMP2PL CMP2OSEL rw/r rw/r 11 10 9 8 CMP1PL CMP1OSEL rw/r rw/r 23 WNDEN rw/r 7 保留 22 21 20 CMP2MSEL rw/r 654 CMP1MSEL rw/r 19 18 17 16 CMP2M 保留 CMP2EN rw/r rw/r 3 2 1 0 CMP1M CMP1SW CMP1EN rw/r rw/r rw/r 位 31 30 29:28 位域 CMP2LK CMP2O CMP2HST 说明 比较器 2 锁定 该位可以使比较器 2 的所有控制位只读。该位只能被写一次。一旦被软件置 1 该位只能 通过系统复位来清 0。 0 : CMP_CSR[31:16] 位可读可写. 1 : CMP_CSR[31:16]位只读 比较器 2 输出 该位反映比较器 2 的输出状态,只读 0 : 低输出(同相输入低于反相输入). 1 : 高输出 ( 同相输入高于反相输入). 比较器 2 迟滞 395 27 26:24 23 22:20 19:18 17 CMP2PL CMP2OSEL WNDEN CMP2MSEL CMP2M 保留 这些位控制比较器 2 的迟滞程度. 00: 没有迟滞 01: 低度迟滞 10: 中度迟滞 11: 高度迟滞 GD32F1x0 用户手册 比较器 2 输出极性 该位用于切换比较器 2 输出极性 0 : 同相输出 1 : 反相输出 比较器 2 输出选择 这些位用来选择比较器输出方向 000: 无选择 001: 定时器 1 中断输入 010: 定时器 1 输入捕捉 1 011: 定时器 1 Ocrefclear 输入 100: 定时器 2 输入捕捉 4 101: 定时器 2 OCrefclear 输入 110: 定时器 3 输入捕捉 1 111: 定时器 3 Ocrefclear 输入 窗口模式使能 该位使 CMP2 _IP 端与 PA3 断开,并且与和 CMP1_IP 端相连。 0 : CMP2_IP 连接到 PA3 1 : CMP2_IP 连接到 CMP1_IP 比较器 2 反相输入选择 这些位用于选择连接到比较器 2 的反相输入的信号源 000: VREFINT/4 001: VREFINT/2 010: VREFINT*3/4 011: VREFINT 100: PA4 (DAC) 101: PA5 110: PA2 111:保留 比较器 2 模式 比较器 2 的工作模式控制位,允许调整速率和损耗 00: 高速 / 高功耗 01: 中速 / 中等功耗 10: 低速 / 低功耗 11: 极低速率 / 超低功耗 必须保持复位值 396 16 15 14 13:12 11 10:8 7 6:4 CMP2EN CMP1LK CMP1O CMP1HST CMP1PL CMP1OSEL 保留 CMP1MSEL 比较器 2 使能 0 : 比较器 2 关闭 1 : 比较器 2 打开 GD32F1x0 用户手册 比较器 1 锁定 该位只能写一次,由软件置 1,由系统复位清零。 它令比较器 1 的所有控制位为只读。 0 : CMP_CSR[15:0] 位可读可写 1 : CMP_CSR[15:0] 位只读 比较器 1 输出 只读,反映应比较器 1 输出状态. 0 : 低输出 ( 同相输入低于反相输入) 1 : 高输出 ( 同相输入高于反相输入) 比较器 1 迟滞 这些位用于控制比较器 1 的迟滞程度. 00: 无迟滞 01: 低度迟滞 10: 中度迟滞 11: 高度迟滞 比较器 1 输出极性 该位用于切换比较器 1 输出极性. 0 : 非反相输出 1 : 反相输出 比较器 1 输出选择 这些位用来选择比较器 1 的输出方向. 000: 无选择 001: 定时器 1 中断输入 010: 定时器 1 输入捕捉 1 011: 定时器 1 Ocrefclear 输入 100: 定时器 2 输入捕捉 4 101: 定时器 2 OCrefclear 输入 110: 定时器 3 输入捕捉 1 111: 定时器 3 Ocrefclear 输入 必须保持复位值 比较器 1 反相输入选择 这些位用于选择连接到比较器 1 的反相输入的信号源. 000: VREFINT/4 001: VREFINT/2 010: VREFINT*3/4 011: VREFINT 100: PA4 (DAC) 397 101: PA5 110: PA0 111: 保留 GD32F1x0 用户手册 3:2 CMP1M 比较器 1 模式 比较器 1 的工作模式控制位,允许调整速率和损耗. 00: 高速 /全功耗 01: 中速 / 中等功耗 10: 低速 / 低功耗 11: 极低速 / 超低功耗 1 CMP1SW 比较器 1 开关 该位关闭 PA0 上比较器 1 的同相输入端和 PA4(DAC)的 I/O 之间的开关 0 : 开关断开 1 : 开关闭合 0 CMP1EN 比较器 1 使能 0 : 比较器 1 关闭 1 : 比较器 1 打开 398 GD32F1x0 用户手册 17 通用同步异步收发器 (USART) 17.1 17.2 简介 通用同步异步收发器(USART)提供了一个灵活方便的全双工数据交换接口,支持同步或异步数 据传输方式。USART用来在串行接口之间传递数据,也广泛的用于RS232标准的通信。USART 提供了可编程的波特率发生器,能对系统时钟进行分频产生 USART 发送和接收所需的特定 频率。 它支持半双工单线同步通信,LIN,智能卡协议和红外编码规范。它还支持Modem流控操作 (CTS/RTS)和多处理器通信。 USART还支持DMA功能,来实现高速率的数据通信。 主要特点  全双工异步通信  半双工单线通信  NRZ 标准格式(Mark/Space)  双时钟域 – 互为异步关系的APB时钟和USART时钟 – 不依赖于PCLK设置的波特率设置  可编程的波特率产生器,当时钟频率为72MHz ,过采样为8时,最高速度可达9 MBits/s  完全可编程的串口特性: – 数据位(8或9位)低位或高位在前 – 偶校验位,奇校验位,无校验位的生成/检测 – 产生1,1.5或者2个停止位  可互换的Tx/Rx引脚  可配置的数据极性  自动检测波特率  支持硬件Modem流控操作(CTS/RTS)和RS485驱动使能  借助集中式DMA,可实现可配置的多级缓存通信  发送器和接收器可分别使能 399  传输检测标志: GD32F1x0 用户手册 – 接收缓存满 – 发送缓存空 – 发送结束标志  奇偶校验位控制: – 发送奇偶校验位 – 检测接收到字节的奇偶校验位  错误检测:过载,噪声,帧格式错误和奇偶校验错误  LIN断开帧的产生和检测  支持红外数据协议  同步传输模式以及为同步传输输出发送时钟  支持兼容ISO7816-3 (T=0和T=1)的智能卡接口  多处理器通信 – 假如地址不匹配,始终保持静默模式 – 通过线路空闲或者地址掩码检测从静默模式唤醒  支持 ModBus 通信 – 超时功能 – CR/LF字符识别  从深度睡眠模式唤醒 – 通过标准RBEN中断 – 通过WUF中断  14个带标志的中断源: – CTS变化 – LIN暂停帧检测 – 发送数据寄存器空 – 发送完成 – 接受数据寄存器满 – 空闲线检测 – 过载错误 400 – 帧错误 GD32F1x0 用户手册 – 噪声错误 – 奇偶校验错误 – 地址/字节匹配 – 接收超时中断 – 块结束中断 – 从深度睡眠模式唤醒 USART1完全实现上述功能,但是USART2只实现了上面所介绍功能的部分,下面这些功能在 USART2中没有实现:  自动波特率检测  智能卡模式  IrDA SIR ENDEC模块  LIN模式  双时钟域和从深度睡眠模式唤醒  接收超时中断  Modbus 通信 17.3 功能描述 USART接口通过以下主要管脚从外部连接到其他设备 表 28. USART 重要管脚描述 管脚名称 电气类型 RX 输入 TX 输出 I/O (单线模式/智能卡模式) CK 输出 nCTS 输入 nRTS 输出 描述 接收数据 发送数据 当 USART 使能后,若无数据发送,默认为 高电平 串行时钟 用于同步通信 硬件流控模式发送使能信号 硬件流控模式发送请求信号 401 图 229. USART 模块内部框图 GD32F1x0 用户手册 CPU/DMA TX SW_RX IrDA Block RX Transmit Shift Register W R Receive Shift Register USART Data Register nRT nCST S Hardware Flow Controler Transmitter clock Transimit Controler USART Guard Time and Prescaler Register USART Control Registers CK Controler USART Address CK USART CLK /(16 or 8) Receiver clock Receiver Controler /USARTDIV USART Baud Rate Register USART Status Register USART Interrupt Controler Wakeup Unit 17.3.1 USART 发送器 当USART_CTLR1寄存器的使能位(TEN)置位后,波特率发生器将产生传送器时钟脉冲并且通 过CK管脚输出。之后串行码流将按控制寄存器中的设置,在一个空闲帧之后,由发送器开始 传输。 在传送被破坏的情况下,只要传送还在继续,便不得禁用TEN位。 在TBE位处于置位状态时,数据可以在不覆盖前一个数据的情况下写入USART_TDTR寄存器。 当数据写入USART_TDTR寄存器,该位将被清0。 假如一帧数据已经发送出去,并且TBE位已经置位,那么TC 位将被置1。假如USART_CTLR1 寄存器中的中断使能位(TCIE)为1,将会有中断产生。 USART发送应按照下列步骤进行: 1. 写USART_CTLR1寄存器的WL去设置字长 2. 在USART_CTLR2寄存器中设置停止位的长度 3. 如果选择了多级缓存通信方式,应该在USART_CTLR3寄存器中使能DMA (DENT位) 4. USART_BRR寄存器中设置波特率 5. 在USART_CTLR1寄存器中设置UEN位,使能USART 6. 在USART_CTLR1寄存器中设置TEN位 402 7. 等待TBE置位 GD32F1x0 用户手册 8. 向USART_TDTR寄存器写数据 9. 等待TC=1,发送完成 在禁用USART或进入低功耗状态之前,必须等待TC置位。 先读USART_STR然后再写USART_TDTR可将TC位清0。在多级缓存通信方式下,直接向TC 写0,也能清TC。 当SBKCMD置位时,会发送一个断开帧,发送完成后, SBKCMD将清0. 表 29. 停止位配置 停止位长度 (bit) 1 1.5 2 描述 默认值 智能卡模式 标准 USART,单线以及调制解调模式 图 230. USART 字符帧 (9 数据位和 1 停止位) Clock Data Frame Idle Frame Break Frame start bit bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 parity bit bit 8 stop bit start bit start bit stop bit start bit 17.3.2 如果开启了奇偶检验位,则最高位被用来做奇偶校验位。 假如数据位(除奇偶校验位)中―1‖的个数为偶数个,奇偶校验位应当为 ‗0‘ (偶校验) 或‗1‘ (奇校 验)。 USART 接收器 当检测到有效的开始脉冲后,接收器开始接收码流。在此期间还会进行过载,奇偶校验,帧格 式错误和断开帧检测。 如果一帧接收完成,并且RBNE位置位,那么就可以读USART_RDTR寄存器和USART_STR 的相关位。若USART_CTLR1寄存器的中断使能位(RBNEIE)被置位,就会产生中断。 RBNE位必须在下一帧数据到达之前清0,否则就会造成过载错误。 在数据接收被破坏的情况下,只要接收还在继续,便不得禁用REN位。 在多级缓存通信模式下直接读USART_RDTR,可以将RBNE位清0。 在多缓冲模式下的DMA 读操作也会将RBNE位清0。 USART接收应按下面步骤进行: 1. 写USART_CTLR1寄存器的WL去设置字长 2. 在USART_CTLR2寄存器中设置停止位的长度 403 17.3.3 17.3.4 17.3.5 GD32F1x0 用户手册 3. 如果选择了多级缓存通信方式,因该在USART_CTLR3寄存器中使能DMA (DENT位) 4. USART_BRR寄存器中设置波特率. 5. 在USART_CTLR1寄存器中设置UEN位,使能USART 6. 在USART_CTLR1中设置REN位. 接收错误 若RBNE已经置位的情况下或者前一个DMA请求还未被处理的情况下又接收到一个新数据,将 会产生过载错误。此时USART_STR寄存器的ORE位被置位。 USART模块会按照内部波特率参考时钟对RX状态线进行过采样。如果检测到噪声错误, USART_STR的NE位将在RBNE位的上升沿置位并且从移位寄存器收到无效数据。 当在预期时间未检测到停止位,将产生帧格式错误。USART_STR的FE位将在RBNE位的上升 沿置位,并且从移位寄存器收到无效数据。 通过写USART_SCR寄存器的OREC,NEC和FEC可分别的将以上三个错误标志位清0。 波特率发生 波特率分频系数是一个16位的数字,包含12位整数部分和4位小数部分。波特率发生器使用这 两位组合所得的数值来确定波特率。由于具有小数部分的波特率分频系数,将使USART能够 产生所有标准波特率。 波特率分频系数 (USARTDIV) 与系统时钟具有如下关系: 如果过采样率是16,公式如下: UCLK USARTDIV = 16 × Baud Rate 如果过采样率是8,公式如下: UCLK USARTDIV = 8 × Baud Rate USART时钟(UCLK)的选择是通过时钟控制系统来实现的(参考RCC部分)。在使能USART之前, 必须选好时钟源 (通过设置UEN位)。 自动波特率检测 USART 能 够 基 于 接 收 到 的 一 个 字 符 自 动 检 测 和 设 置 USART_BRR 寄 存 器 的 值 。 通 过 设 置 USART_CTLR2寄存器的ABDM位,有两种自动波特率检测方法可以选择。这两种方法是: 1. 以1开始的任一字节。在这种情况下,USART将开始测量起始位的长度(下降沿到上升沿). 2.以10xx开头的任何字符,这种情况下USART将测量起始位和第一个数据位的总长度,通过 下降沿到下降沿,以减少信号斜率对测量精度的影响。 404 17.3.6 17.3.7 17.3.8 多处理器通信 GD32F1x0 用户手册 在多处理器通信中,未被寻址的接收方将进入静默模式。在接收期间,只有目标接收器才会激 活来接收随后的数据,与此同时,那些不相干的接收器将处于静默模式。通过空闲总线检测和 地址掩码检测可以使器件进入或退出静默模式。 在空闲总线检测期间,当USART_CMD寄存器的MMCMD被置位时,USART进入静默模式并且 将USART_STR的RWU置位。一旦检测到空闲帧,会立即退出静默模式。USART_STR寄存器 的RWU位被清0,但是USART_STR的IDLEF位没有置1。 在地址掩码检测期间,最高位为1的字节会被认为是寻址字节。寻址字节的低4位或低7位即为 目标接收器的地址。 接收器将寻址字节与他们自己的地址进行比较,然后根据结果进入或退 出静默模式(置位或复位RWU位)。 ModBus 通信 通过实现块尾检测功能,USART提供对Modbus/RTU和Modbus/ASCII协议实现的基本支持。 Modbus/RTU这个模式下,块尾通过一个超过2个字符长度的空闲状态来识别。这个功能是通 过一个可设置的超时检测功能来实现的。 为了检测空闲状态,USART_CTLR2寄存器的RTEN位和USART_CTLR1寄存器的RTIE位必须 置位。 RTR寄存器必须设置成和2个字节超时所对应的时间。在最后一个停止位被接收到后, 当接收线在这期间是空闲的,将产生一个中断,通知软件现在接收块已经完成。 Modbus/ASCII在这个模式下,块尾被认为是一个特定的字符(CR/LF) 串。USART用字符匹配 机制实现这个功能。具体是通过将 LF的ASCII码配置到ADDR区域并激活地址匹配中断 (AMIE=1)来实现的。软件将在收到LF或可以在DMA缓存中查找到CR/LF时得到提示。 LIN 模式 将USART_CTLR2的LMEN置位即可使能本地互联网络模式。在LIN模式下,USART_CTLR2 的CKEN,STB以及USART_CTLR3的SCEN,HDEN,IREN位都应该被清0。 LIN 发送过程与普通发送过程基本相同。数据位的长度只能是8,断开帧为连续的13个0。断 开帧检测是完全独立于USART接收器的。因此在空闲状态下或者帧传输状态下都可以进行断 开帧检测。 在使能接收器和检测到起始位后,电路将开始采样下一位。 在断开检测期间,如果遇到了帧格式错误,那么断开检测将要停止,直到RX线变成高电平, 再次开始断开检测。之后重新开始检测起始位。假如在分隔符(高电平)之前检测到连续的10/11 (根据USART_CTLR2寄存器中的LBDL设置) 个‗0‘ ,那么在USART_STR中的LIN断开标志位 也会被置位. 405 图 231. LIN 模式下的帧格式错误检测以及断开帧检测 RX Line FE LBDF DAT A0 DAT A1 BREAK FRAME data length DAT A2 DAT A3 17.3.9 17.3.10 半双工通信模式 通过设置USART_CTLR3寄存器的HDEN位,可以使能半双工模式。在半双工通信模式下, USART_CTLR2寄存器的LMEN, CKEN位和USART_CTLR3寄存器的SCEN, IREN位清零。 半双工模式下仅用单线通信。TX和RX将从内部连接到一起。TX管脚应该被配置为IO管脚。通 信冲突应由软件负责处理。当TEN被置位时,在数据寄存器中的数据将会被发送。 同步通信模式 USART支持主机模式下的全双工同步串行通信,可以通过置位USART_CTLR2的CKEN位来使 能。在同步模式下,USART_CTLR2的LMEN和USART_CTLR3的SCEN, HDEN, IREN位应该 被清0。CK管脚作为USART同步发送器的时钟输出,仅仅当TEN位被使能时,它才被激活。 在起始位和停止位传送期间,不会从CK管脚输出时钟脉冲。USART_CTLR2的LBCP位用来决 定在最低位(地址索引位)发送期间是否有时钟信号输出。在空闲状态和断开帧发送期间也不会 有时钟信号产生。USART_CTLR2的CPH位用来决定数据在第一个时钟沿被采样还是在第二个 时钟沿被采样。USART_CTLR2的CPL位用来决定在USART同步模式空闲状态下,时钟管脚 的电平。 在发送器或接收器使能的情况下,不能改变这3位(CPL, CPH, LBCP) 的值。 时钟与已发送的数据同步。同步模式下的接收器按照发送器的时钟进行采样,没有任何过采样。 图 232.同步模式下的 USART 示例 RX TX USART (master mode) Data output Data input Device (slave mode) CK Clock input 406 图 233. 8-bit 格式的 USART 同步通信波形 (LBCL=1) Idle or preceding transmission CLK1(CPL=0) CLK2(CPL=1) CLK3(CPL=0) CLK4(CPL=1) CPH=0 CPH=1 Idle or next transmission Master data output Master data input Start bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 Stop bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 17.3.11 智能卡(ISO7816)模式 智能卡模式是一种异步通信模式,将USART_CTLR3寄存器的SCEN位置位即可使能智能卡模 式。在智能卡模式下,USART_CTLR2的LMEN位和USART_CTLR3的HDEN, IREN位应该清 0。 假如CKEN位被置位,USART将向智能卡提供一个时钟。该时钟可以分频用于其他用途。 智能卡模式下的帧格式为:1起始位+9数据位(包括1奇偶校验位)+1.5停止位。 智能卡模式是一种半双工通信协议模式。当与智能卡连接时,TX管脚需要被设置成开漏模式, 这个管脚将会与智能卡驱动同一条双向连线。 T=0 模式 图 234.ISO7816-3 帧格式 S01234567 P ISO 7816-3 frame without parity error S01234567 P 0.5 bit 1 bit ISO 7816-3 frame with parity error 相较于正常操作模式下的时序,从发送移位寄存器到TX管脚的传递时间延迟了半个波特率时 钟,并且TC 标志的置位将根据保护时间寄存器的设置延迟某一特定时间。根据的协议,USART 能自动的再次发送数据,重发次数在SCRTNUM中设置。在上一个重复的字节接收结束,TC 位将会立即置位而没有一个保护时间。 如果USART连续收到NACK信号,那么在设定好的重 新 发 送 次 数 后 它 将 会 停 止 发 送 并 将 该 错 误 标 注 为 帧 格 式 错 误 。 USART_CMD 寄 存 器 的 TXFCMD位可将TBE位清0。 在USART发送期间,在一帧数据的接收过程中,如果检测到有奇偶校验错误,TX线将拉低一 407 17.3.12 GD32F1x0 用户手册 个波特率时钟。这个信号是发送‗NACK‘(应答错误)信号到智能卡。之后智能卡一侧就会产生帧 格式错误。如果接收到的字符是错误的,RBNE中断和接收DMA请求都不会被激活。 根据协 议,智能卡将要重新发送数据。如果在最大的重新发送次数后(这个次数的具体值在SCRTNUM 位域),接收到的字符仍然是错误的,USART停止发送NACK信号和标注这个错误为奇偶校验 错误。 若USART_CTLR3寄存器的NACK被置位,‗NACK‘信号将被发送到USART。并且USART不会 将‗NACK‘误当作起始位。 空闲帧和断开帧在智能卡模式下不适用。 T=1模式 (块模式) 在T=1(块模式)下, UART_CTLR3寄存器的NACK位应该清零来关闭校验错误发送。 当要从智能卡读取数据时,软件必须将RTR寄存器设置为BWT (块等待) – 11的值并且RBNEIE 必须置位。如果这个时间到了,还没有从卡收到应答,将引起超时中断。如果在超时之前收到 了第一个字节,则会引起RBNE中断。块模式下,如果用DMA从智能卡读取数据,也只能在第 一个字节接收好后再去使能DMA。 在接收到第一个字节之后(RBNE中断)必须将RTR寄存器设置为CWT (字节等待时间) – 11的值 (这个时间以波特时间作为单位),这是为了在两个连续的字符之间自动检测最大等待时间。如 果智能卡在前一个字符发送结束后到设定的CWT周期之间没有发送字符,USART会通过RTF 标志提醒软件,当RTIE被置位时,会引起中断。 USART用一个块长度计数器去统计收到的所有字符的长度。 这个计数器在USART开始发送的 时候自动清0(TBE=0)。这个块长度信息位于智能卡发出数据的第三个字节(序言部分)。这个值 必须写入USART_RTR寄存器的BL。当使用DMA模式时,在块开始之前,这个寄存器必须被 设定为最小值(0x0)。为了得到这个值,在收到第四个字节后,会引起一个中断。软件必须从 接收缓冲区读取第三个字节作为块长度。 在中断驱动接收模式,块的长度可以由软件提取出来并做检测或者通过设置BL的值得到。 但 是在块开始之前,BL(0xFF)可以被设置为最大值。实际值则要在接收到第三个字节后写到寄存 器中。 整个块的长度(包括序言区,收尾区和信息区)等于BL+4。块尾通过EBF标志和相应中断提醒给 软件(当EBIE位置1时). 如果块长度出错,将会引起一个RT中断。 直接和反向转换 智能卡协议定义了两种转换方式:直接转换和反向转换 直接转换定义如下:低位在前,逻辑值位为1对应传输线高电平,采用偶校验。要使用这种转 换方式,下列控制为必须被设置为:MSBF=0, DINV=0 (默认值). 反向转换定义如下:高位在前,逻辑值位为1对应传输线低电平,采用奇校验。要使用这种转 换方式,下列控制为必须被设置为:MSBF=1, DINV=1 串行红外(IrDA SIR)编解码功能模块 通过USART_CTLR3寄存器的IREN位置位,使能模式。在IrDA模式,USART_CTLR2寄存器 408 GD32F1x0 用户手册 的LMEN,STB,CKEN位和USART_CTLR3寄存器的HDEN, SCEN位将被清0。 按照IrDA SIR物理层的定义, 一个红外光脉冲(RTZ信号)代表逻辑‗0‘。其脉冲宽度通常占一个 位时间的3/16。若脉冲宽度小于一个1个PSC时钟,IrDA则无法检测到。如果脉冲宽度大于1 但是小于2倍PSC时钟,IrDA则无法可靠的检测到。 USART数据帧由SIR发送编码器进行调制。调制后的信号经由红外LED进行发送。对于编码器 而言,波特率应小于115200。 红外检测器接收到调制后的信号并且输出解码后的数据帧。编码器所发送的调制信号的极性与 解码器所接收信号的极性是相反的。解码器输入通常为高电平当输入为低脉冲时,解码得到一 个起始位。 在IrDA SIR ENDEC模块发送和接收不得同时进行。 对于省电模式:  发送器: 脉冲宽度可以为低功耗波特率的3倍  接收器: 与正常模式相同 图 235. IrDA SIR ENDEC 模块 RX USART IREN TX Receive Decoder IrDA_IN USART_RX Transmit Encoder USART_TX IrDA_OUT SIR MODULE 图 236. IrDA 数据调制 TX IrDA_OUT IrDA_IN RX start bit 1 0 1 0 1 1 0 0 0 1 0 stop bit start bit 1 0 1 0 1 1 0 0 0 10 stop bit 17.3.13 硬件流控制 利 用 nCTS 输 入 信 号 和 nRTS 输 出 信 号 , 去 控 制 串 行 数 据 流 被 称 为 硬 件 流 控 制 。 通 过 向 409 GD32F1x0 用户手册 USART_CTLR3寄存器的RTSEN位写‗1‘使能RTS流控制,通过向USART_CTLR3寄存器的 CTSEN位写‗1‘使能CTS流控制。 410 图 237. 两个 USARTs 之间的硬件流控制 TX module TX nCTS RX nRTS RX module USART 1 RX module RX nRTS USART 2 TX nCTS TX module RTS 流控 仅当nRTS信号低电平时,USART接收器才能接收数据。在接收期间,信号保持低电平不会变 高。接收完成之后,电平变高。当nRTS信号再次变低时,开始下一次接受。如果接收寄存器 已满,信号将保持高电平。 CTS 流控 如果USART_STR寄存器的TBE位是‗0‘并且nCTS信号是低电平,发送器发送数据帧。在发送 期间,若nCTS信号变为高电平,发送器在发送完当前帧数据后停止发送。 图 238. 硬件流控 nRTS RX start nCTS USART_DR empty data 2 TX data 1 stop start data 1 RTS flow control stop idle start CTS flow control data 2 stop idle empty data 2 data 3 stop idle start empty stop RS485 驱动使能 驱动使能功能通过设置USART_CTLR3控制寄存器的DEM位来打开。它允许用户通过DE (Driver Enable)信号激活外部收发器控制。提前时间是驱动使能信号和第一个字节的起始位之 间的时间间隔。这个时间可以在USART_CTLR1控制器的DEA [4:0]位域进行设置。滞后时间 是 一 个 发 送 信 息 最 后 一 个 字 节 的 停 止 位 与 释 放 DE 信 号 之 间 的 时 间 间 隔 。 这 个 时 间 可 以 在 411 17.3.14 17.3.15 17.3.16 GD32F1x0 用户手册 USART_CTLR1控制器的DED [4:0]位域进行设置。DE信号的极性可以通过USART_CTLR3控 制寄存器的DEP位来设置 DMA 请求 DMA 可 实 现 USART 的 连 续 通 信 。 USART_CTLR3 寄 存 器 DENT 位 被 用 来 使 能 DMA 发 送 , USART_CTLR3寄存器的DENR被用来使能DMA接收。 DMA发送配置如下: 1. 配置DMA寄存器,包括目标地址(USART_TDTR寄存器的地址),源地址(存储器地址),传 输总字节数,通道优先级,DMA中断等 2. 向USART_SCR的TCC位写‗0‘. 3. 向DMA控制寄存器DENT位写‗1‘以使能DMA通道 当DMA_IFR 寄存器的TCIF标志被置位后,之后USART_STR寄存器的TC标志位才会置位。 在数据发送期间,该标志保持为0,USART传输结束后置1。当TC未置1时,进入深度睡眠模 式或禁用USART将会导致传输被破坏。 DMA接收配置: 配置DMA寄存器,包括目标地址(USART_RDTR寄存器地址),源地址(存储器), 传输总字节数,通道优先级,DMA中断等 只要接收到了数据,就会触发RBNE事件 从 Deepsleep 模式唤醒 通过标准RBNE中断或WUM中断USART能从深度睡眠模式唤醒MCU。 UESM位必须置1并且USART时钟必须设置为HSI或LSE(请参考RCC部分). 当使用RBNE标准中断时,必须在进入深度睡眠模式前将RBNEIE位置位。 当使用WUIE中断时,WUIE中断源可以通过WUM位来选择。 在进入深度睡眠模式前,必须禁用DMA。在进入深度睡眠模式前, 软件必须检测USART没有 正在传送数据。这可以通过USART_STR寄存器中的BSY标志来判断。REA位必须被检测以确 保USART实际上是使能的。 当检测到唤醒事件时,无论MCU工作在深度睡眠模式还是正常模式,WUF标志位被通过硬件 置1,并且在WUIE被置位的情况下,触发一个唤醒中断。 USART 中断 USART中断事件和标志如下表所示: 表 30. USART 中断请求 中断事件 发送数据寄存器空 CTS 标志 发送结束 接收到的数据可以读取 事件标志 TBE CTSF TC RBNE 使能控制位 TBEIE CTSIE TCIE RBNEIE 412 中断事件 检测到过载错误 检测到线路空闲 奇偶校验错误 LIN模式下,检测到断开标志 DMA 接收时,出现接收错误(噪 声标志, 过载错误, 帧格式错误) 字符匹配 接收超时错误 发现块尾 从Deepsleep模式唤醒 事件标志 ORE IDLEF PE LBDF NE or ORE or FE AMF RTF EBF WUF GD32F1x0 用户手册 使能控制位 IDLEIE PEIE LBDIE EIE AMIE RTIE EBIE WUIE 在发送给中断控制器之前,所有的中断事件是逻辑或的关系。因此在任何时候USART只能向 控制器产生一个中断请求。不过软件可以在一个中断服务程序里处理多个中断事件。 图 239. USART 中断映射框图 IDLE IDLEIE RBNE RBNEIE ORE RBNEIE PE PEIE FE NE ORE EIE LBD LBDIE AM AMIE RT RTIE EB EBIE WU WUIE TC TCIE TBE TBEIE CTS CTSIE OR USART_INT 413 17.4 USART 寄存器 GD32F1x0 用户手册 17.4.1 USART 控制寄存器 1 (USART_CTLR1) 地址偏移: 0x00 复位值: 0x0000_0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 EBIE RTIE DEA[4:0] DED[4:0] rw rw rw rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OM AMIE MEN WL WM PCEN PM PEIE TBEIE TCIE RBNEIE IDIE TEN REN UESM UEN rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位/位域 31:28 27 名称 保留 EBIE 26 RTIE 25:21 DEA[4:0] 20:16 DED[4:0] 15 OM 14 AMIE 描述 必须保持复位时的值 块尾中断使能 0: 中断禁止 1: 中断使能 在USART2,这一位保留 接收超时中断使能 0: 中断禁止 1: 中断使能 在USART2,这一位保留 驱动使能置位时间 这些数字用来定义DE (驱动使能)信号的置位与第一个字节的起始位之间的时间间隔。它 以采样时间为单位 (1/8或1/16位时间),可以通过OM位来配置。 当USART被使能(UEN=1)时,这一位域不能被改写。 驱动使能置低时间 这些位用来定义一个发送信息最后一个字节的停止位与置低DE(驱动使能)信号之 间的时间间隔。它以采样时间为单位 (1/8或1/16位时间),可以通过OM位来配置。 当USART被使能(UEN=1)时,这一位域不能被改写。 过采样模式 0: 16倍过采样 1: 8倍过采样 在LIN, IrDA 和智能卡模式,这些位保持清0。 当USART被使能(UEN=1)时,这一位域不能被改写。 ADDR字符匹配中断使能 0: ADDR字符匹配中断禁用 1: ADDR字符匹配中断使能 414 13 MEN MEN: 静默模式使能 0: 静默模式禁用 1: 静默模式被使能 GD32F1x0 用户手册 12 WL 字长 0: 8 数据位, 1: 9 数据位 当USART被使能(UEN=1)时,这一位域不能被改写。 11 WM 从静默模式唤醒方法 0: 空闲线 1: 地址标记 当USART被使能(UEN=1)时,这一位域不能被改写。 10 PCEN 校验控制使能 0: 校验控制禁用 1: 校验控制被使能 当USART被使能(UEN=1)时,这一位域不能被改写。 9 PM 校验模式 0: 偶校验 1: 奇校验 当USART 被使能(UEN=1)时,这一位域不能被改写。 8 PEIE 校验错误中断使能 0: 校验错误中断禁用 1: 当USART_STR寄存器的PE位置位时,将触发中断。 7 TBEIE 发送寄存器空中断使能 0: 中断禁止 1 : 当USART_STR寄存器的TBE位置位时,将触发中断。 6 TCIE 发送完成中断使能 0: 发送完成中断禁用 1: 当USART_STR寄存器的TC位置位时,将触发中断。 5 RBNEIE 读数据缓冲区非空中断和过载错误中断使能 0: 读数据缓冲区非空中断和过载错误中断禁用 1: 当USART_STR寄存器的ORE或RBNE位置位时,将触发中断。 4 IDIE IDLE线检测中断使能 0: IDLE 线检测中断禁用 1: 当USART_STR寄存器的IDLEF位置位时,将触发中断。 3 TEN 发送器使能 0: 发送器关闭 1: 发送器打开 2 REN 接收器使能 415 0: 接收器关闭 1: 接收器打开并且开始搜索起始位。 GD32F1x0 用户手册 1 UESM USART在深度睡眠模式下使能 0: USART不能从深度睡眠模式唤醒MCU 1: USART能从深度睡眠模式唤醒MCU. 条件是USART的时钟源必须是HSI或LSE. 在USART2,这一位保留 0 UEN USART使能 0: USART 预分频器和输出禁用 1: USART预分频器和输出被使能 17.4.2 USART 控制寄存器 2 (USART_CTLR2) 地址偏移 0x04 复位值: 0x0000_0000 31 30 15 14 STRP LMEN rw rw 29 28 27 26 ADDR[7:0] rw 13 12 11 10 STB[1:0] CKEN CPL rw rw rw 25 9 CPH rw 24 23 22 21 20 19 18 17 RTEN ABDM[1:0] ABDEN MSBF DINV TINV rw rw rw rw rw rw 8 7 6 5 4 3 2 1 LBCP 保留 LBDIE LBDL ADDM 保留 rw rw rw rw 16 RINV rw 0 位/位域 31:24 名称 ADDR[7:0] 23 RTEN 22:21 ABDM[1:0] 20 ABDEN 描述 USART的节点地址 这些位给出USART的节点地址。 在多处理器通信并且静默模式或者深度睡眠模式期间,这些位用来唤醒进行地址标记的 检测。接收到的最高位为1的数据帧将和这些位进行比较。当ADDM位被置位时,仅仅 ADDR[3:0]被用来比较。 在正常的接收期间,这些位也用来进行字符检测。所有接收到的字符 (8-bit)与ADD[7:0] 的值进行比较并且AMF标志设为正在匹配。 当接收器(REN=1)和 USART (UEN=1) 被使能时,这一位域不能被改写。 接收器超时使能 0: 接收器超时检测功能禁用 1: 接收器超时检测功能被使能 在USART2,这一位保留。 自动波特率检测模式 00: 下降沿到上升沿的测量 (测量开始位). 01: 下降沿对下降沿的测量(接收到的帧必须是一个这种格式的帧10xxxxxx). 10: 保留. 11: 保留 当USART被使能时,这一位域不能改写(UEN=1)。 在USART2,这一位保留。 自动波特率检测使能 416 19 MSBF 18 DINV 17 TINV 16 RINV 15 STRP 14 LMEN 13:12 STB[1:0] 11 CKEN 0: 自动波特率检测禁用 1: 自动波特率检测被使能 在USART2,这一位保留。 GD32F1x0 用户手册 高位在前 0: 数据发送/接收,采用低位在前 1: 数据发送/接收,采用高位在前 USART被使能(UEN=1)时,这一位域不能被改写。 数据位反转 0: 数据位信号值没有反转 1: 数据位信号值被反转. USART被使能(UEN=1)时,这一位域不能被改写。 TX 管脚电平反转 0: TX管脚信号值没有反转 1: TX管脚信号值被反转. USART被使能(UEN=1)时,这一位域不能被改写。 RX管脚电平反转 0: RX管脚信号值没有反转. 1: RX管脚信号值被反转 USART被使能(UEN=1)时,这一位域不能被改写。 交换TX/RX管脚 0: TX和RX管脚功能没被交换 1: TX和RX管脚功能被交换 当USART 被使能时,这一位域不能改写(UEN=1)。 LIN模式使能 0: LIN模式关闭 1: LIN模式开启 USART被使能(UEN=1)时,这一位域不能被改写。 在USART2,这一位保留。 STOP位长 00: 1停止位 01: 保留 10: 2停止位 11: 1.5停止位 USART被使能(UEN=1)时,这一位域不能被改写。 CK 管脚使能 0: CK管脚禁用 1: CK管脚被使能 USART被使能(UEN=1)时,这一位域不能被改写。 在USART2,这一位保留 417 10 CPL 9 CPH 8 LBCP 7 保留 6 LBDIE 5 LBDL 4 ADDM 3:0 保留 GD32F1x0 用户手册 时钟极性 0: 在同步模式下,CK管脚不对外发送时保持为低电平 1: 在同步模式下,CK管脚不对外发送时保持为高电平 USART被使能(UEN=1)时,这一位域不能被改写。 时钟相位 0: 在同步模式下,在首个时钟边沿采样第一个数据 1: 在同步模式下,在第二个时钟边沿采样第一个数据 USART被使能(UEN=1)时,这一位域不能被改写。 末位时钟脉冲 0: 在同步模式下,最后一位(MSB)的时钟脉冲不输出到CK管脚 1: 在同步模式下,最后一位(MSB)的时钟脉冲输出到CK管脚 USART被使能(UEN=1)时,这一位域不能被改写。 硬件保持复位 LIN断开信号检测中断使能 0: 断开信号检测中断禁用 1:当USART_STR 的LBDF位置位,将产生中断。 在USART2,这一位保留 LIN暂停帧长度 0: 检测10位暂停帧 1: 检测11位暂停帧 USART被使能(UEN=1)时,这一位域不能被改写。 在USART2,这一位保留 地址检测模式 这位用来选择4位地址检测还是全位地址检测 0: 4位地址检测 1:全位地址检测 在7位,8位和9位数据模式下,地址检测分别按 6位,7位和8位地址 (ADD[5:0], ADD[6:0] 和ADD[7:0]) 。 USART被使能(UEN=1)时,这一位域不能被改写。 硬件保持复位 17.4.3 USART 控制寄存器 3 (USART_CTLR3) 地址偏移 0x08 复位值: 0x0000_0000 31 15 DEP rw 30 14 DEM rw 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 WUIE WUM[1:0] SCRTNUM[2:0] 保留 rw rw rw 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DDRE OVRD OSBM CTSIE CTSEN RTSEN DENT DENR SCEN NACK HDEN IRLP IREN ERIE rw rw rw rw rw rw rw rw rw Rw rw rw rw rw 418 GD32F1x0 用户手册 位/位域 31:23 22 21:20 19:17 16 15 14 13 名称 保留 描述 硬件保持复位. WUIE 从深度睡眠模式唤醒中断使能 0: 从深度睡眠模式唤醒中断禁用 1: 从深度睡眠模式唤醒中断被使能 在USART2,这一位保留 WUM[1:0] 从深度睡眠模式唤醒模式 这个位域指定什么事件可以置位USART_ISR寄存器中的WU(从深度睡眠唤醒标志) 标 志。 00: WU在地址匹配的时候置位。如何实现地址匹配需要在ADDR和ADDM中定义。 01:保留. 10: WU在检测到起始位时置位 11: WU在检测到RBNE时置位 USART被使能(UEN=1)时,这一位域不能被改写。 在USART2,这一位保留 SCRTNUM[2:0] 智能卡自动重试数目寄存器 在智能卡模式下,这些位用来指定在发送和接收时重试的次数。在发送模式下,它指的 是在产生发送错误(FE bit set) 之前自动重试的发送次数。 在接收模式下,它指的是在产生接收错误(RBNE位和PE位置位)之前自动重试的接收次 数。 当这些位被设置为0x0时,在发送模式下这些位将不会自动发送。 USART被使能(UEN=1)时,这一位域不能被改写。 在USART2,这一位保留 保留 硬件保持复位. DEP 驱动使能的极性选择模式 0: DE 信号高有效. 1: DE 信号低有效. USART被使能(UEN=1)时,这一位域不能被改写。 DEM 驱动使能模式 用户使能这一位以后,可以通过DE信号对外部收发器进行控制。DE信号是从RTS 管脚 输出的。 0: DE功能禁用 1: DE功能开启 USART被使能(UEN=1)时,这一位域不能被改写。 DDRE 在接收错误时禁止DMA 0: 在发生接收错误的情况下,不禁用DMA。所有的错误数据不会产生DMA请求,以确 保错误的数据不会被传输,但是下一个接收到的正确的数据会被传输。RBNE 位保持0 以阻止过载错误,但是相应的错误标志位会被置位。在智能卡模式下这种模式可以使用。 1: 在接收错误的情况下,DMA被关闭。 DMA请求会被屏蔽,直到相应的标志位被清0. 419 GD32F1x0 用户手册 RBNE标志和相应的错误标志位会被设置。软件在清错误标志之前,必须首先关DMA 请 求(DMAR = 0) 或清RBNE。 USART被使能(UEN=1)时,这一位域不能被改写。 12 OVRD 溢出禁止 0: 溢出功能被使能。 当接收到的数据在新数据到达前没有被读走, ORE错误标志位将 被置位,并且新数据将会丢失。 1: 溢出功能禁止。当接收到的数据在新数据到达前没有被读走, ORE错误标志位将不 会被置位,新数据会将USART_RDTR寄存器以前的内容覆盖。 USART被使能(UEN=1)时,这一位域不能被改写。 11 OSBM 单次采样方式 0:三次采样方法 1:一次采样方法 USART被使能(UEN=1)时,这一位域不能被改写。 10 CTSIE CTS中断使能 0: CTS中断屏蔽 1: 当USART_STR寄存器的CTS位置位时,会产生中断. 9 CTSEN CTS 中断使能 0: CTS 硬件流控禁用 1: CTS 硬件流控被使能 USART被使能(UEN=1)时,这一位域不能被改写。 8 RTSEN RTS 使能 0: RTS硬件流控禁用 1: RTS硬件流控被使能,只有当接收缓冲区有空间的时候,才会请求下一个数据。 USART被使能(UEN=1)时,这一位域不能被改写。 7 DENT DMA 发送使能 0: 关闭DMA发送模式 1: 开启DMA发送模式 6 DENR DMA 接收使能 0: 关闭DMA接收模式 1: 开启DMA接收模式 5 SCEN 智能卡模式使能 0: 智能卡模式禁用 1: 智能卡模式使能 USART被使能(UEN=1)时,这一位域不能被改写)。 在USART2中,这一位保留 4 NACK 在智能卡模式NACK使能 0:当出现校验错误时不发送NACK 1: 当出现校验错误时发送NACK USART被使能(UEN=1)时,这一位域不能被改写)。 420 在USART2中,这一位保留 GD32F1x0 用户手册 3 HDEN 半双工使能 0: 禁用半双工模式 1: 开启半双工模式 USART被使能(UEN=1)时,这一位域不能被改写。 2 IRLP IrDA低功耗模式 0: 正常模式 1: 低功耗模式 USART被使能(UEN=1)时,这一位域不能被改写。 1 IREN IrDA 模式使能 0: IrDA 禁用 1: IrDA 被使能 USART被使能(UEN=1)时,这一位域不能被改写。 在USART2中,这一位保留 0 ERIE 多级缓存通信模式的错误中断使能 0: 禁用错误中断 1: 在多级缓存通信时,当USART_STR寄存器的FE位,ORE位或NE位被置位时,会产 生中断。 17.4.4 USART 波特率寄存器 (USART_BRR) 地址偏移 0xC 复位值: 0x0000_0000 当USART(UEN=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 BRR [11:0] BRR[3:0] Rw rw 位/位域 31:16 15:4 名称 保留 BRR[11:0] 3:0 BRR [3:0] 描述 硬件保持复位. 波特率分频系数的整数部分 DIV_INT[11:0] = BRR[15:4] 波特率分频系数的小数部分 如果OM = 0, USARTDIV [3:0] = BRR [3:0]; I如果OM = 1, USARTDIV [3:1] = BRR [2:0], BRR [3]必须被置0. 421 17.4.5 31 30 15 14 GD32F1x0 用户手册 USART 保护时间和预分频器寄存器 (USART_GTPR) 地址偏移 0x10 复位值: 0x0000_0000 USART被使能(UEN=1)时,这一位域不能被改写 在USART2中,这一寄存器保留 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 13 12 11 10 9 8 7 6 5 4 3 2 1 0 GT[7:0] PSC[7:0] rw rw 位/位域 31:16 15:8 7:0 名称 保留 GT[7:0] PSC[7:0] 4:0 PSC[4:0] 描述 硬件保持复位. 在智能卡模式下的保护时间值 在红外低功耗模式下,对系统时钟进行分频已获得低功耗模式下的频率。寄存器的值是 分频系数 00000000: 保留 – 不设置这个值 00000001: 1分频 00000010: 2分频 ... 在IrDA正常模式下的分频值 00000001: 仅仅能设为这个值 在智能卡模式下,对系统时钟进行分频的值。分频系数是寄存器中值的两倍。 00000: 保留 -不设置这个值 00001: 2分频 00010: 4分频 00011: 6分频 ... 17.4.6 USART 接收超时寄存器 (USART_RTR) 地址偏移 0x14 复位值: 0x0000_0000 在USART2中,这一寄存器保留 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 BL[7:0] RT[23:16] rw rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 422 RT[15:0] rw GD32F1x0 用户手册 位/位域 31:24 名称 BL[7:0] 23:0 RT[23:0] 描述 块长度 这些位给出了智能卡T=1的接收时块的长度。它的值等于信息字节的长度+结束部分的长 度(1-LEC/2-CRC) - 1. 这个值可以在块接收开始去设置(用于需要从块的序言提取块的长度的情形),这个只在 每一个接收时钟周期只能设置一次。在智能卡模式下,当TBE=0时,块的长度计数器被 清0. 在其他模式下,当REN=0 (禁用接收器)并且/或者当 EOBCF 位被写1时块的长度计数器 被清0。 接收器超时门限 该位域指定接收超时值,单位是波特时钟的时长 标准模式下,如果在最后一个字节接收后,在RT规定的时长内,没有检测到新的起始位, RTF 标志被置位 在智能卡模式,这个值被用来实现CWT和BWT。在这种情况下,超时检测是从最后一个 接收字节的起始位开始算的 这些位可以在工作时改写。假如一个新数据到来的时间比RT规定的晚,RTF标志会被置 位。 对于每个接收字符,这个值只能改写一次。 17.4.7 USART 请求寄存器 (USART_CMD) 地址偏移 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 保留 TXFC MD RXFC MD MMC MD SBKC ABDC MD MD w w w w w 位/位域 31:5 4 名称 保留 TXFCMD 3 RXFCMD 2 MMCMD 1 SBKCMD 描述 硬件保持复位. 发送数据清空请求 向这一位写1去置位TBE标志位 ,取消发送数据 在USART2中,这一位保留 接收数据清空请求 向这一位写1来清除RBNE标志位,在读接收数据的情况下丢弃该数据 静默模式请求 向这一位写1使USART进入静默模式并且置位RWU标志位。 发送断开帧请求 423 GD32F1x0 用户手册 向这一位写1置位SBKF标志并使USART在空闲时发送一个断开帧 0 ABDCMD 自动波特率检测请求 向这一位写1会清除USART_ISR寄存器的ABRF位,并且在下一个数据接收帧开始自动 检测波特率。 在USART2中,这一位保留 17.4.8 USART 状态寄存器 (USART_STR) 地址偏移 0x1C 复位值: 0x0000_00C0 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 REA TEA WUF RWU SBF AMF BSY r r r r r r r 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ABDF ABDE 保留 EBF RTF CTS CTSF LBDF TBE TC RBNE IDLEF ORE NE FE PE r r r r r r r r r r r r r r r 位/位域 31:23 22 名称 保留 REA 21 TEA 20 WUF 19 RWU 描述 硬件保持复位. 接收使能通知标志 这位反映了USART核心逻辑的接收使能状态,该位可以通过硬件设置。 0: USART核心接收逻辑禁用 1: USART核心接收逻辑被使能 发送使能通知标志 这位反映了USART核心逻辑的发送使能状态,该位可以通过硬件设置。 0: USART核心发送逻辑禁用 1: USART核心发送逻辑被使能 从深度睡眠模式唤醒标志 0: 没有从深度睡眠模式唤醒 1: 已从深度睡眠模式唤醒,如果在USART_CTLR3寄存器的WUFIE=1并且MCU处于深 度睡眠模式,将引发一个中断。 当检测到一个唤醒事件时,这一位通过硬件置位,这个事件在WUS位域被定义。 当UESM被清0时,该位清0。 在USART2中,这一位保留 接收器从静默模式唤醒 这位表示USART处于静默模式 0: 接收器在工作状态 1: 接收器在静默状态 当在唤醒和静默模式切换时,它通过硬件清0或者置1。静默模式控制 (地址帧还是空闲 帧)是用USART_CTLR1 寄存器的WAKE 位来选择的。 如果选择空闲信号唤醒,只能通过向USART_CMD寄存器的MMCMD位写1来置位该位 424 GD32F1x0 用户手册 了。 18 SBF 断开信号发送标识 0: 没发送断开字符 1: 将要发送断开字符 该位表示一个断开发送信号被请求。 通过向USART_CMD寄存器的SBKCMD写1来置位 当断开帧的停止位发送期间,硬件清0。 17 AMF ADDR匹配标志 0: ADDR和接收到的字符不匹配 1: ADDR和接收到的字符匹配,如果USART_CTLR1寄存器的AMIE=1,将引发一个中 断。 当接收到ADDR [7:0]中定义的字符时,硬件置位。 通过向USART_SCR寄存器的AMC写1清0. 16 BSY 忙标志 0: USART处于空闲 1: USART正在接收 15 ABDF 自动波特率检测标志 0:没有自动波特率检测完成 1:自动波特率检测完成 当自动波特率检测完成时,硬件置位。 通过向USART_CMD寄存器的ABDCMD写1清0,并请求新的波特率检测。 在USART2,中这一位保留 14 ABDE 自动波特率检测错误 0: 没有自动波特率检测错误出现 1: 自动波特率检测错误出现 如果波特率超出范围或者字符对比失败,硬件置位。 通过向USART_CTLR3寄存器的ABDRQ位写1清0 在USART2中,这一位保留 13 保留 硬件保持复位. 12 EBF 块结束标志 0: 块没有结束 1: 块结束已经到了 (足够的字节数),如果USART_CTLR2寄存器的EBIE=1,将引发一 个中断。 当接收到的字节数 (从块开始,包括序言部分)等于或大于BLEN + 4,硬件置位。 通过向USART_SCR寄存器的EBC写1清0 在USART2中,这一位保留 11 RTF 接收超时标志 0: 尚未超时 1: 已经超时,如果USART_CTLR2寄存器的RTIE被置位,将会引发中断。 如果空闲的时间已经超过了在RTR寄存器中设定的RT值,通过硬件置1. 425 GD32F1x0 用户手册 通过向USART_SCR寄存器的RTC位写1清0。 在智能卡模式,这个超时相当于CWT或BWT计时。 在USART2中,这一位保留 10 CTS CTS电平 这个值等于nCTS输入脚电平的反向拷贝 0: nCTS输入脚高电平 1: nCTS输入脚低电平 9 CTSF CTS变化标志 0: nCTS 状态线没有变化 1: nCTS 状态线发生变化 如果USART_CTLR3寄存器的CTSIE位置位,将引发中断。 当nCTS 输入变化时,由硬件置位。 通过向USART_SCR寄存器的CTSC位写1,清零该位。 8 LBDF LIN 断开检测标志 0: 没有检测到LIN断开字符 1: 检测到LIN断开字符。当USART_CTLR2寄存器的LBDIE位被置位时,将会有中断产 生。. 当LIN断开帧被检测到的时候,硬件置位。 通过向USART_SCR寄存器的LBDC位写1,清零该位。 在USART2中,这一位保留 7 TBE 发送数据寄存器空 0: 数据没有发送到移位寄存器 1: 数据发送到移位寄存器。如果USART_CTLR1寄存器的TBEIE位置位,将会有中断产 生。 当USART_TDTR 寄存器的内容已经被转移到移位寄存器或者向USART_CMD 寄存器 的TXFCMD位写1时,由硬件置位。 通过向USART_TDTR寄存器中写数据来清0. 6 TC 发送完成 0: 发送没有完成 1: 发送完成.如果USART_CTLR1寄存器的TCIE被置位,将会有中断产生。 如果一个包含数据的帧的发送完成而且TBE位被置位,由硬件置位 通过向USART_SCR寄存器的TCC位写1清0 5 RBNE 读数据缓冲区非空 0: 没有接收到数据 1: 已接收到数据并且可以读取。当寄存器USART_CTLR1的RBNEIE位被置位,将会有 中断产生。 当接收移位寄存器的内容已经被转移到寄存器USART_RDTR,由硬件置位 通过读USART_RDTR寄存器或向USART_CMD寄存器的RXFCMD位写1清0 4 IDLEF 空闲线检测标志 0: 没检测到空闲线 1: 检测到空闲线。,如果USART_CTLR1寄存器的IDLEIE位置1,将会有中断产生。 当检测到空闲线时,通过硬件置位。直到RBNE位置位,它不会再次置位。 426 向USART_SCR寄存器的IDLEC位写1清0. GD32F1x0 用户手册 3 ORE 溢出错误 0: 没有检测到溢出错误 1: 检测到溢出错误。在多级缓存通信中,如果寄存器USART_CTLR1的RBNEIE位置位, 将会引发中断。如果寄存器USART_CTLR1的EIE位置位也会引发中断。. 在RBNE置位的情况下,如果接收移位寄存器的数据传递给USART_RDTR寄存器,将会 由硬件置位 向USART_SCR寄存器的OREC位写1清0. 2 NE 噪声错误标志 0: 没检测到噪声错误 1: 检测到噪声错误。在多级缓存通信中,如果寄存器 USART_CTLR1的EIE位置位,将 会有中断产生。. 在接收帧的时候检测到噪声,将会由硬件置位 向寄存器USART_SCR的NEC位写1清0。 1 FE 帧错误 0:没检测到帧错误 1:检测到帧错误或者断开字符。在多级缓存通信中,如果寄存器 USART_CTLR1的EIE 位置位,将会有中断产生。. 当一个不同步,强噪声或者断开字符被检测到时,在智能卡模式下,当发送次数达到上 限,仍然没有收到成功发送应答 (卡一直响应NACKs),该位也将被置位。 向USART_SCR寄存器的FEC位写1清0 0 PE 校验错误 0: 没检测到校验错误 1: 检测到校验错误 在多级缓存通信中,如果寄存器 USART_CTLR1的PEIE位置位, 将会有中断产生。. 当在接收模式的时候检测到校验错误,将会由硬件置位。 向USART_SCR寄存器的PEC位写1清0 17.4.9 USART 状态标志清除寄存器 (USART_SCR) 地址偏移 0x20 复位值: 0x0000_0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 WUC 保留 AMC 保留 w w 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 EBC RTC 保留 CTSC LBDC 保留 TCC 保留 IDLEC OREC NEC FEC PEC w w w w w w w w w w 位/位域 31:21 名称 保留 描述 硬件保持复位. 427 20 WUC 19:18 17 16:13 12 保留 AMC 保留 EBC 11 RTC 10 保留 9 CTSC 8 LBDC 7 保留 6 TCC 5 保留 4 IDLEC 3 OREC 2 NEC 1 FEC 0 PEC 从深度睡眠模式唤醒标志的清除 向这一位写1清0USART_STR寄存器的WUF位 在USART2中,这一位保留 GD32F1x0 用户手册 硬件保持复位. ADDR匹配标志清除清除 向这一位写1清0USART_STR寄存器的AM位 硬件保持复位. 块结束标志清除 向这一位写1清0 USART_STR寄存器的EB位 在USART2中这一位保留 接收超时标志清除 向这一位写1清0 USART_STR寄存器的RT标志 在USART2中,这一位保留 硬件保持复位. CTS 变化标志清除 向这一位写1清0 USART_STR寄存器的CTSF位 LIN 断开字符检测标志清除 向这一位写1清0 USART_STR寄存器的LBDF标志位 在USART2中,这一位保留 硬件保持复位. 发送完成标志清除 向这一位写1清0 USART_STR寄存器的TC位 硬件保持复位. 空闲线检测标志清除 向这一位写1清0 USART_STR寄存器的IDLE位 溢出标志清除 向这一位写1清0 USART_STR寄存器的ORE位 噪声检测清除 向这一位写1清0USART_STR寄存器的NE位 帧格式错误标志清除 向这一位写1清0 USART_STR 寄存器的FE位 校验错误标志清除 向这一位写1清0 USART_STR寄存器的PE位 428 17.4.10 31 30 USART 数据接收寄存器 (USART_RDTR) 地址偏移: 0x24 复位值: 未定义 29 28 27 26 25 24 23 22 保留 GD32F1x0 用户手册 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 RDTR[8:0] r 位/位域 31:9 8:0 名称 保留 RDTR[8:0] 描述 硬件保持复位. 接收数据的值 包含接收到的数据字节 如果接收到的数据打开了奇偶校验位(USART_CTLR1寄存器的PE置1),那么接收到的 数据的最高位(第7位或8位,取决于数据的长度)是奇偶校验位 17.4.11 USART 数据发送寄存器 (USART_TDTR) 地址偏移: 0x28 复位值: 未定义 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 保留 TDTR[8:0] rw 位/位域 31:9 8:0 名称 保留 TDTR[8:0] 描述 硬件保持复位. 发送数据的值 包含发送到的数据字节 如果发送到的数据打开了奇偶校验位(USART_CTLR1寄存器的PE置1),那么发送的数 据的最高位(第7位或8位取决于数据的长度)将会被奇偶校验位替代 只有当USART_STR寄存器的TBE位被置位时,这个寄存器才可以改写。 429 18 MCU 调试 (MCUDBG) GD32F1x0 用户手册 18.1 18.2 简介 MCUDBG模块可帮助调试器调试省电模式,定时器,I2C,RTC,WWDG与IWDG。当相应位 置位,在省电模式下提供时钟或保持计数器定时器,WWDG,IWDG,RTC或I2C的当前状态。 功能描述 18.2.1 18.2.2 18.3 省电模式的调试支持 当MCUDBG控制寄存器1(MCUDBG_CTLR1)的STDBY_HOLD位置位,并进入待机模式,AHB 总线时钟和系统时钟是由CK_HSI提供,并且调试器可以在待机模式下进行调试。当退出待机 模式时,产生系统复位。 当MCUDBG控制寄存器1(MCUDBG_CTLR1的DEEPSLEEP_HOLD位置位,并进入深度睡眠 模式,AHB总线时钟和系统时钟是由CK_HSI提供,并且调试器可以在深度睡眠模式下进行调 试。 当MCUDBG控制寄存器1(MCUDBG_CTLR1的SLEEP_HOLD位置位,并进入睡眠模式,CPU 的AHB总线时钟未关闭,并且调试器可以在睡眠模式下进行调试 定时器,I2C,RTC,WWDG 与 IWDG 的调试支持 当 内 核 停 止 , 并 且 MCUDBG 控 制 寄 存 器 1(MCUDBG_CTLR1) 或 MCUDBG 控 制 寄 存 器 2(MCUDBG_CTLR2)的相应的位置位,将如下动作: 对于定时器, 定时器计数器停止并保持调试 对于I2C, SMBUS 保持状态进行调试. 对于wwdg or iwdg, 计数器时钟停止进行调试 对于rtc, 计数器停止进行调试 MCUDBG 寄存器 18.3.1 MCUDBG ID 寄存器 (MCUDBG_IDR) 地址: 0xE004 2000 32 位访问, 只读 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ID_CODE[31:16] r r r r r r r r r r r r r r r r 430 15 14 13 12 11 10 r r r r r r 9 8 7 6 ID_CODE[15:0] r r r r GD32F1x0 用户手册 5 4 3 2 1 0 r r r r r r 位/位域 31:0 名称 ID_CODE 描述 MCUDBG ID 寄存器 这些位由软件读取,这些位是不变的常数 18.3.2 MCUDBG 控制寄存器 1 (MCUDBG_CTLR1) 地址偏移: 0xE004 2004 复位值: 0x0000 0000; 仅仅上电复位 31 15 I2C1_ HOLD rw 30 29 保留 14 13 保留 28 27 26 25 24 23 TM14_ HOLD 保留 rw 12 11 10 9 8 7 TM3_ TM2_ TM1_ WWDG_ IWDG_ HOLD HOLD HOLD HOLD HOLD rw rw rw rw rw 22 21 20 19 18 TM6_ 保留 HOLD rw 17 I2C3_ HOLD wr 16 I2C2_ HOLD rw 6 5 4 保留 3 2 1 0 STDBY_ DEEPSLEEP_ SLEEP_ HOLD HOLD HOLD rw rw rw 位/位域 31:28 名称 保留 描述 27 TM14_HOLD Timer 14 保持寄存器 该位由软件置位和复位 0: 无影响 1: 当内核停止时保持定时器 14 计数器不变,用于调试 26:20 保留 19 TM6_HOLD Timer 6 保持寄存器 该位由软件置位和复位 0: 无影响 1: 当内核停止时保持定时器 6 计数器不变,用于调试 18 保留 17 I2C3_HOLD I2C3 保持寄存器 该位由软件置位和复位 0: 无影响 1:当内核停止时保持 I2C3 SMBUS 状态不变,用于调试 16 I2C2_HOLD I2C2 保持寄存器 该位由软件置位和复位 431 15 14:13 12 11 10 9 8 2 1 I2C1_HOLD 保留 TM3_HOLD TM2_HOLD TM1_HOLD WWDG_HOLD IWDG_HOLD STDBY_HOLD DEEPSLEEP_HOLD GD32F1x0 用户手册 0: 无影响 1:当内核停止时保持 I2C2 SMBUS 状态不变,用于调试 I2C1 保持寄存器 该位由软件置位和复位 0: 无影响 1:当内核停止时保持 I2C1 SMBUS 状态不变,用于调试 Timer 3 保持寄存器 该位由软件置位和复位 0: 无影响 1:当内核停止时保持定时器 3 计数器不变,用于调试 Timer 2 保持寄存器 该位由软件置位和复位 0: 无影响 1: 当内核停止时保持定时器 2 计数器不变,用于调试 Timer 1 保持寄存器 该位由软件置位和复位 0: 无影响 1: 当内核停止时保持定时器 1 计数器不变,用于调试 WWDG 保持寄存器 该位由软件置位和复位 0: 无影响 1: 当内核停止时保持 wwdg counter 不变,用于调试 IWDG 保持寄存器 该位由软件置位和复位 0: 无影响 1: 当内核停止时保持 iwdg counter 不变,用于调试 待机模式保持寄存器 该位由软件置位和复位 0: 无影响 1: 在待机模式下, 系统时钟和 HCLK 由 CK_HSI 提供, 当退出待机模式时, 产生系统复位 深度睡眠模式保持寄存器 该位由软件置位和复位 0: 无影响 432 0 SLEEP_HOLD GD32F1x0 用户手册 1: 在深度睡眠模式下, 系统时钟和 HCLK 由 CK_HSI 提供 睡眠保持寄存器 该位由软件置位和复位 0: 无影响 1: 在睡眠模式下, HCLK 继续运行 18.3.3 MCUDBG 控制寄存器 2 (MCUDBG_CTLR2) 地址 offset: 0xE004 2008 复位值: 0x0000 0000; 仅仅上电复位 31 30 29 28 27 26 25 24 23 22 21 20 保留 15 14 13 12 11 10 9 8 7 6 5 4 保留 RTC_ HOLD 保留 rw 19 18 17 16 TM17_ TM16_ TM15_ HOLD HOLD HOLD rw rw rw 3 2 1 0 位/位域 31:19 18 名称 保留 TM17_HOLD 17 TM16_HOLD 16 TM15_HOLD 15:11 10 保留 RTC_HOLD 描述 Timer 17 保持寄存器 该位由软件置位和复位 0: 无影响 1: 当内核停止时保持定时器 17 计数器不变,用于调试 Timer 16 保持寄存器 该位由软件置位和复位 0: 无影响 1: 当内核停止时保持定时器 16 计数器不变,用于调试 Timer 15 保持寄存器 该位由软件置位和复位 0: 无影响 1: 当内核停止时保持定时器 15 计数器不变,用于调试 RTC 保持寄存器 该位由软件置位和复位 0: 无影响 1: 当内核停止时保持 RTC 计数器不变,用于调试 433 9:0 保留 GD32F1x0 用户手册 434 GD32F1x0 用户手册 19 通用串行总线全速设备接口 (USB 2.0 FS) 19.1 19.2 19.3 简介 通用串行总线(USB)是一个四线制总线,能够支持主机和USB控制器实现的功能设备之间的通 信。主控制器通过一个令牌协议分配USB带宽到各个连接的设备。这个总线支持设备的热拔插 和动态配置。所有的交互过程均由主机发起。主机PC端和系统存储器之间的数据传递均通过 一个专用的数据缓冲区实现,这个缓冲区是一个可以被USB外设直接访问的512字节SRAM。 通过USB控制器实现的USB外设同USB主机端相连,按照USB标准的请求检测令牌包、处理数 据传输并进行握手包的处理。事务的格式化是通过硬件处理的,包括CRC的生成与校验。按照 USB协议,每个设备最多有16个逻辑端点或者32个物理端点。而USB控制器支持最多8个双向 端点或者16个单向端点。 对于同步传输和高吞吐量的批量传输,USB控制器提供了特殊的支持。它实现了一个双缓冲用 法,这允许同步端点或者批量端点可以连续地收发数据而不用等待端点状态变为可用。因为对 于USB外设而言这些端点总是有一个可用的缓冲去处理而微处理器同时可以使用另外一个缓 冲。 在任何时候,只要有需要都可以通过写控制寄存器使USB模块进入低功耗(挂起模式)。同时, 应该避免所有静态功耗并降低或者关闭USB时钟。在低功耗模式下,当检测到USB总线上有活 动时将恢复到正常模式。 主要特性  USB2.0全速设备控制器  Support USB 2.0链接电源管理(LPM)  最多支持8个可配置的端点  支持双缓冲的批量传输端点/同步传输端点  每个端点都支持控制,批量,同步,中断传输类型  支持挂起/恢复操作  一个512字节的专用SRAM用于数据包缓冲  集成的USB物理层 实现 表31描述了在GD32F1x0设备上的USB实现 435 表 31. GD32F1x0 USB 实现 USB 特征 端点数 专用缓冲区大小(SRAM) 专用数据缓冲区访问方式 USB 2.0 连接电源管理(LPM)支持 GD32F1x0 用户手册 GD32F1x0 USB 8 个双向/16 个单向端点 512 字节 2×16 比特每字 是 19.4 信号描述 USB控制器以设备模式运行总共要求有3个信号(DP,DM和VBus)。引脚DP与DM一直被用 来决定USB模块支持哪一种速度,是低速(1.5Mbps)还是全速(12Mbps)模式。所以,它 们在芯片上的位置不是用户可选的。这些引脚在复位后默认为普通的GPIO。USB总线电压信 号(VBus)没有连到任何引脚上,也没有被用到。 引脚DP和DM是不需要配置的,因为一旦USB模块被使能,他们会自动连接到USB内部的收发 器上。 信号管脚如下表所示: 表 32. GD32F1x0 USB 信号管脚 USB 管脚 GPIO 引脚 GPIO 配置 USBDP PA12 一旦USB被使能,这些引脚自动连接到USB内部的收发器上 USBDM PA11 19.5 19.5.1 功能描述 模块图 图240 显示了USB外设的模块图 图240. USB外设模块图 436 USB connector DP DM USB PHY Analog transceiver Suspend Timer Packet buffer interface TX-RX Control Endpoint selection S.I.E GD32F1x0 用户手册 PCLK (>12MHz( USB clock (48MHz( Control registers and logic Interrupt registers and logic EPnCSR registers Arbiter Packet buffer memory Register mapper APB interface PCLK APB wrapper APB bus Interrupt mapper IRQs to NVIC 19.5.2 基本功能 USB控制器包括以下的模块:  内置模拟收发器(ATX):USB ATX连到USB引脚USB_DP和USB_DM上,能够发送和接收 USB总线上的双向差分信号。  串行接口引擎(SIE):SIE实现了完整的USB协议层。它解码和编码串行数据并进行误差修 正、位填充和其他USB所要求的信号级任务。出于保障速度的考虑,它完全是硬件实现的, 没有软件干预。它负责处理端点缓冲和USB总线之间的数据传输。  定时器:定时器产生起始帧锁定时钟脉冲并当USB总线上3ms没有活动时检测全局性挂起 (来自于主机)。  数据包缓冲接口:这个模块以灵活的方式用专用的512字节的SRAM实现了一组缓冲区, 用于端点的发送与接收。它可以根据SIE的要求为端点选择合适的缓冲并按照端点寄存器 指定的地址定位正确的存储地址。在每一个字节交换后它会递增地址,直到数据包的结尾, 同时,它会跟踪交换字节数从而阻止缓冲区溢出。  端点控制/状态寄存器:每个端点都有一个相关的寄存器包含它的控制信息和当前状态。 437 19.5.3 GD32F1x0 用户手册 对于单向/单缓冲端点而言,一个端点寄存器能够实现两个方向的端点。端点寄存器总共 有8个,允许达到16个单向/单缓冲端点或者7个双缓冲端点,并可以随意组合。例如,USB 外设可以通过编程使其拥有2个双缓冲端点和12个单向/单缓冲端点。  控制寄存器:这些寄存器包含整个USB外设的状态与控制信息  中断寄存器:这些寄存器包含了中断标志与事件记录。它们可以用于查询中断的原因、中 断状态或者去清除一个挂起的中断 USB APB1接口包含以下模块:  数据包存储器:这就是专用的数据包存储器,其实它是个本地存储区(SRAM)。所有的 USB端点数据包缓冲都在它里面。它由数据包缓冲接口使用并创建数据结构。应用软件可 以直接访问该缓冲区。它的大小为512字节,由256个16位的字构成。  仲裁器:这个模块接收来自于APB1总线与USB接口的请求。它通过给APB1总线更高的 优先权来解决冲突,并且总是保留一半的存储器带宽供USB完成传输。它采用时分复用的 策略实现了虚拟的双端口SRAM,即在USB传输的同时,允许应用程序访问存储器。此策 略也允许任意长度的多字节APB1传输。  寄存器映射单元:此部件将USB模块的各种字节宽度和位宽度的寄存器映射成能被APB1 寻址的16位宽度的内存集合。  APB1封装:此部件为缓冲区和寄存器提供了到APB1的接口,并将整个USB模块映射到 APB1地址空间。  中断映射单元:这个模块将可能产生中断的事件映射到NVIC不同的中断线上。 操作流程 缓冲器描述符表 缓冲器描述符表是一个定义了缓冲区地址和长度的数据结构。USB外设用它来发送和接收数据。 第一个表项是由USB_BAR定义的。 一个有效的端点通常有两个报文缓冲器,分别用来发送和 接收。每个表项包括4个16位字并且按照8字节边界对齐。 图241 描述了缓冲区描述表与数据包缓冲区之间的关系 438 图 241.缓冲描述符表的用法示例 (USB_BAR = 0) 0x1FF GD32F1x0 用户手册 IN Endpoint 1 Double buffer 0 IN Endpoint 1 Double buffer 1 Endpoint 0 Reception buffer Endpoint 0 Transmission buffer 0x0E 0x0C 0x0A 0x08 0x06 0x04 0x02 0x00 COUNT1_TX1 ADDR1_TX1 COUNT1_TX0 ADDR1_TX0 CONUT0_RX ADDR0_RX COUNT0_TX ADDR0_TX 端点初始化 USB端点在使用前必须初始化,初始化过程如下:  初始化TXARn/RXARn寄存器,填写发送/接收数据缓冲区地址  按照端点的用途,配置USB_EPnCSR寄存器的EP_CTL和EP_KCTL位  对于发送,初始化TXCNTn并使能TX_STA位;对于接收,初始化RXCNTRn,BLKSIZ以 及BLKNUM位,然后使能RX_STA 对于同步端点和双缓冲批量端点,发送和接收的相关位域都必须初始化。一旦端点被使能, 寄 存器USB_EPnCSR, 缓冲区地址以及COUNT位域都不能通过应用软件修改。当传输完成的时 候,通过STIF中断通知应用软件。 439 数据发送 (IN 包) GD32F1x0 用户手册 当一个有效端点收到一个IN令牌包,它将会从TXARn开始读并发送TXCNTn个字节,并发送 CRC到主机。如果端点无效,根据TX_STA的值,将发送NAK或STALL握手包。 USB外设从TXARn表明的地址开始发送数据包,并且按照LSB顺序。 当收到来自主机发送的ACK包,USB外设将翻转TX_DTG,设置TX_STA=10 (NAK)以及将 TX_ST位置位。 应用软件将通过检查USB_IFR寄存器的EPNUM和DIR位确认哪个端点已经完 成传输。当数据包存储器填满数据后应用软件通过设置TX_STA=11(VALID)再次使能端点从而 开始下一次传输。 数据接收 (OUT 和 SETUP 包) USB外 设 用RXARn规 定的 缓 冲 区存储 接 收 到的数 据 。 并根据 实 际 接收到 的 字 节数更 新 RXCNTRn位域。BLKSIZ和BLKNUM的值被用来计算BUF_COUNT,BUF_COUNT用来检测 缓冲区是否溢出。USB外设以LSB的顺序接收到来自主机的数据,然后计算CRC。当检测到 DATA包传输结束时,计算的CRC的值将和接收到的CRC值进行比较。如果没有错误发生,将 向主机发送一个ACK握手包。 如果接收期间出现了任何错误,USB外设置位ERRIF位并且继续将数据复制到报文缓冲区,但 不发送ACK包。USB外设自己能够从接收错误中恢复并且继续处理下一个数据传递。USB外设 的访问从不超出由BLKSIZ和BLKNUM定义的包缓冲区。接收到的2字节的CRC也会复制到数 据包缓冲区,紧跟在数据字节之后。如果数据的长度比实际分配的长度大,超出的数据不被复 制。这种情况称为缓冲过载。此时将发送STALL握手包,当前会话失败。 如果一个被寻址的端点是无效的,将按照USB_EPnCSR寄存器RX_STA位的设置发送NAK或 STALL握手包而不是ACK,并且不向接收缓冲区写入数据。接收缓冲按RXARn中的地址开始 写入,写入的字节数取决于接收到的数据包的长度,CRC被包含在内(也就是有效数据载荷 + 2), 但不能超过BLKSIZ和BLKNUM定义的缓冲区的长度,超过范围的数据不会被写入缓冲区。通 过这种方式,USB外设绝不会占用超出被分配的接收缓冲区域。如果数据包载荷的长度(应用 程序实际使用的字节数)超出分配的缓冲区,USB外设即会检测到一个缓冲区过载情况。在这 种情况下,将发送一个STALL握手包代替通常的ACK,以提醒主机这一问题,不会有中断产生 并且该次会话被认为是失败的。 如果没有错误发生,USB外设将会发送ACK握手包到主机,翻转RX_DTG位,设置RX_STA = ‗10 (NAK)并且置位RX_ST位。应用软件检测USB_IFR寄存器的EPNUM和DIR位去判断哪一个 端点触发了RX_ST。处理完接收到的数据之后,应用软件可以设置RX_STA=11 (Valid)启动下 一个会话。 控制传输 控制传输要求主机从一个到设备的SETUP会话开始,此会话描述设备应当执行的访问控制类 型。SETUP会话后面跟着0个或者若干个携带被请求访问特定信息的数据会话。 最后,一个 状态会话完成控制传输并且允许端点返回控制传输的状态到客户端软件。在状态会话之后,控 制传输完成,主机可以操作该端点的下一个控制传输。 要初始化控制传输,TX_DTG和RX_DTG位分别被设置成1和0,TX_STA和RX_STA被设置成 ‗10 (NAK)。根据SETUP的内容,应用软件可以判断下一个会话是IN或OUT。当RX_ST事件发 440 GD32F1x0 用户手册 生在控制传输期间,必须先检查SETUP位。如果它是1,它就是一个SETUP会话,否则就是一 个普通的OUT。USB外设通过解析SETUP事务的内容获取其关心的数据量和传输方向,并且 要求将未使用的方向置为STALL,除了最后一个数据阶段。 在最后一个数据阶段,应用软件将控制端点相反方向的状态设置为NAK。这将使主机等待控制 操作的完成。如果操作成功完成,软件将会把NAK改成VALID,否则改成STALL。如果状态阶 段是一个OUT事务,STATUS_OUT位将会被置位,这样携带非零数据的状态会话将会被应答 STALL以表明已发生了错误。 当RX_STA位被置‗01 (STALL)或‗10 (NAK)并且已收到一个SETUP令牌时,USB 接收这个数 据,执行被要求的数据传输并且发送回一个ACK握手包。如果该端点之前有RX_ST请求未被 应用软件确认(例如,由于前面的一个已经完成的接收,RX_ST仍然是置位的),USB丢弃 SETUP事务,不管状态如何都不应答任何握手包,以此来模拟一个接收错误并且强迫主机再 次发送一个SETUP令牌。这样做是为了避免丢失紧随一次RX_ST中断之后的又一个SETUP分 组传输。 双缓冲端点 双缓冲功能是为了提高批量传输的性能。为了实现新的流控方案,USB外设应该要知道哪一个 数据包缓冲区正在被应用软件使用,从而避免发生冲突。既然在USB_EPnCSR寄存器中有2 个数据翻转位,而USB外设只使用1位来进行硬件数据处理(由于双缓冲功能所需的单向约束), 那么,应用程序可以使用另外1位来表明当前正在使用哪个缓冲区。这个新的缓冲区标志位称 作SW_BUF。下表解释了USB_EPnCSR寄存器位与DTOG/SW_BUF定义之间的对应关系。 表 33. 双缓冲标志定义 缓冲标志 DTOG SW_BUF 发送端点 TX_DTG(USB_EPnCSR第6位) USB_EPnCSR第14位 接收端点 RX_DTG(USB_EPnCSR第14位) USB_EPnCSR第6位 DTOG位和SW_BUF位负责流控。当一个传输完成的时候,USB外设翻转DTOG位;当数据被 复制后,应用软件需要翻转SW_BUF位。除了首次传输,如果DTOG位的值等于SW_BUF位的 值,传输将会暂停,并且向主机发送NAK数据包。当这两位不相等的时候,传输会继续。 为了使能双缓冲器功能, EP_CTL位和EP_KCTL需要被配置:  设置EP_CTL = 00  设置EP_KCTL = 1 表 34. 双缓冲的用法 端点类 DTO SW_ 型 G BUF 0 1 OUT 1 0 USB外设所使用的包缓冲 应用软件所使用的包缓冲 RXARn_0 / COUNRn_RX_0 缓 冲描述符列表地址 RXARn_1 / RXCNTRn_1 缓冲 描述符列表地址 RXARn_1 / RXCNTRn_1 缓冲描 述符列表地址 RXARn_0 / RXCNTRn_0 缓冲描 述符列表地址 441 19.5.4 19.5.5 19.5.6 GD32F1x0 用户手册 TXARn_0 / TXCNTn_0 缓冲描 TXARn_1 / TXCNTn_1 缓冲描述 0 1 述符列表地址 符列表地址 IN TXARn_1 / TXCNTn_1 缓冲描 TXARn_0 / TXCNTn_0 缓冲描述 1 0 述符列表地址 符列表地址 USB 中断 USB控制器有三个中断线:USB低优先级中断,USB高优先级中断和USB唤醒中断。软件可以 编程USB中断路由寄存器的对应位,以将特定的中断条件连接到位于NVIC表中的这三个中断 信号上。如果中断状态位和对应的中断使能位都被置位,硬件将会产生一个中断。如果中断条 件产生,中断状态位都将被硬件置位 (不管中断使能位是否设置).  USB低优先级中断:可被所有USB事件触发  USB 高优先级中断:只能被同步和双缓冲批量传输的正确传输事件触发  USB唤醒中断:可被所有的唤醒事件触发 同步传输 同步传输可以保证固定的传输速率以及固定的延迟,但当总线发生错误时并不支持数据重发。 此时只有接收方才能确定是否有错误发生。USB底层协议并不允许同步通道中的握手包被回送 给发送方。通常来说,握手包不会被发送以通知发送方数据包是否被成功接收。因此,同步协 议没有一个握手阶段,在数据包发送之后没有ACK包。它也不支持数据翻转,DATA0 PID仅仅 被用来开始一个数据包的发送。 通过设置EP_CTL位为‘10,该端点被定义为同步端点。STAT位有两个可能值: ‗00(禁用) 和‘11(有效),其他的任何值是非法的。应用软件可以实现双缓冲以提高性能。通过在每个会话 时交换发送和接收包缓冲,应用软件可以将数据复制进缓冲或复制出缓冲,同时USB外设能在 另一个缓冲区中处理数据的发送或接收。通过查询DTOG位即可知道USB外设现在正在使用哪 一个缓冲区。 应用软件按照要用的首个缓冲区去初始化DTOG。在每一个事务的结尾,RX_ST或TX_ST位被 置位,这取决于使能方向,而忽略CRC错误或缓冲过载情况(如果错误发生,ERRIF位将被置 位)。同时,USB外设将会翻转DTOG位,但是不影响STAT位。 复位事件 系统和上电复位 一旦系统或上电复位,应用程序首先要提供USB模块与接口所需的所有时钟,然后清除复位信 号以访问该模块的寄存器,最后打开和USB收发器相连的模拟部分。 USB固件需要做以下工作:  复位CTLR寄存器中的CLOSE位  等待内部参考电压稳定  清除CTLR寄存器的SETRST位 442 19.5.7 19.5.8 GD32F1x0 用户手册  清除IFR寄存器以移除冗余的挂起中断,然后使能其他单元 USB复位(复位中断) 当这个事件发生时,USB外设的状态同系统复位后状态是一样的。 USB固件需要做以下工作:  在10ms内设定AR寄存器的USBEN位来使能USB模块  初始化EP0CSR寄存器和它相关的数据包缓冲 挂起/恢复事件 USB协议一直强调由USB从设备进行电源管理。如果设备从总线获得电源(总线供电设备)的话, 这一点变得尤其重要。总线供电设备必须满足下述限制:  处于非配置状态的从设备,从USB总线最多获取100mA的电流。  已配置的设备只能按照配置描述符的MaxPower位域的设置获得电流且最大值不超过500 mA。  已挂起设备最多获取500uA电流。 假如在USB总线上没有活动超过3ms,设备将进入挂起状态。如果有来自主机的唤醒信号,将 唤醒一个挂起的设备。USB外设还支持软件初始化的远程唤醒。为了启动远程唤醒功能,应用 软件必须使能所有的时钟,并清除挂起位。这将导致硬件产生一个远程唤醒信号的上行数据流。 将SETSPS位设为1,即可使能挂起模式并且禁用对于SOF接收的检查。将LOWM位设为1将关 闭USB模拟收发器的静态功耗,但是此时仍能检测到恢复信号。 链接电源管理 (LPM) 级别 L1 当USB子端点寄存器的SUB_STA位是0x3(Valid),如果主机发送EXT PID和LPM SubPID,设 备将进入LPM L1状态(睡眠状态)。 将SETSPS位设为1将使能低功耗模式,并且禁用对SOF接收的检查。将LOWM位设为1将关闭 USB模拟收发器的静态功耗,但是此时仍能检测到恢复信号。当检测到恢复信号的时候,退出 睡眠状态。 19.6 USB 寄存器 19.6.1 USB 控制寄存器 (USB_CTLR) 地址偏移: 0x40 复位值: 0x0003 15 14 13 12 11 10 9 8 765 4 3 2 1 0 443 STIE rw PMOUIE ERRIE WKUPIE SPSIE rw rw rw rw RSTIE SOFIE ESOFIE rw rw rw 保留 GD32F1x0 用户手册 RSREQ SETSPS LOWM CLOSE SETRST rw rw rw rw rw 位/位域 15 名称 STIE 14 PMOUIE 13 ERRIE 12 WKUPIE 11 SPSIE 10 RSTIE 9 SOFIE 8 ESOFIE 4 RSREQ 3 SETSPS 描述 成功传输中断使能 0:禁用成功传输中断 1:当USB_IFR寄存器的STIF位被置位,产生中断 包缓冲溢出/下溢中断使能 0:当包缓冲溢出/下溢不产生中断 1:当USB_IFR寄存器的PMOUIF位被置位,产生中断. 错误中断使能 0:禁用错误中断 1:当USB_IFR寄存器的ERRIF位被置位,产生中断 唤醒中断使能 0:禁用唤醒中断 1:当USB_IFR寄存器的WKUPIF位被置位,产生中断 挂起状态中断使能 0:禁用挂起状态中断 1:当USB_IFR寄存器的SPSIF位被置位,产生中断 USB复位中断使能 0:禁用USB复位中断 1:当USB_IFR寄存器的RSTIF位被置位,产生中断 帧起始中断使能 0:禁用帧起始中断 1:当USB_IFR寄存器的SOFIF位被置位,产生中断 预期的帧起始中断使能 0:禁用预期的帧起始中断 1:当USB_IFR寄存器的ESOFIF位被置位,产生中断 软件向USB主机设置一个中断请求,USB主机应该按USB规范驱动这个恢复序列 0:没有回复请求 1:发送回复请求 当USB_IFR寄存器的SPSIF位被置位时,软件应该设置挂起状态 0:没有设置挂起状态 444 1:设置挂起状态 GD32F1x0 用户手册 2 LOWM 当置位这一位时,USB在挂起状态进入低功耗模式。如果从挂起状态恢复,硬件会复位 这一位。 0:无影响 1:在挂起模式进入低功耗模式 1 CLOSE 当这一位被置位的时候,USB进入关闭状态,并且完全关闭USB,同主机断开 0:不在关断状态 1:在关断状态 0 SETRST 当这位置位,USB外设应该被复位 0:无影响 1:发生复位 19.6.2 USB 中断标志寄存器 (USB_IFR) 地址偏移: 0x44 复位值: 0x0000 0000 15 14 13 12 11 10 9 8 765 4 3 2 1 0 STIF PMOUIF ERRIF WKUPIF SPSIF RSTIF SOFIF ESOFIF 保留 DIR EPNUM[3:0] r rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 r r r r 位/位域 15 名称 STIF 14 PMOUIF 13 ERRIF 12 WKUPIF 11 SPSIF 10 RSTIF 9 SOFIF 8 ESOFIF 描述 成功传输中断标志 当一个会话成功完成时,硬件置位该位 包缓冲溢出/下溢中断标志 硬件置位该位表示包缓冲区存储不下所有所传输的数据。软件写0清该位 错误中断标志 当在会话期间有错误发生时,硬件置位该位。软件写0清该位 唤醒中断标志 在SUSPEND状态下,当总线上有活动被检测到时,硬件置位该位。 软件写0清该位 挂起状态中断标志 当USB总线无任何活动超过3ms时,硬件置位该位,表明有SUSPEND请求。软件写0清 该位 USB复位中断标志 当检测到USB RESET信号时硬件置位该位。软件写0清该位 帧起始中断标志 一个新的SOF包到达时硬件置位该位。软件写0清该位 预期的帧起始中断标志 445 GD32F1x0 用户手册 硬件置位表示一个SOF被预期但是还没有到达。软件写0清该位 4 DIR 会话传输方向 硬件置位表示会话的传输方向 0:OUT 类型 1:IN 类型 3:0 EPNUM[3:0] 端点号 硬件置位确认当前会话所关联的端点 19.6.3 USB 状态寄存器 (USB_SR) 地址偏移: 0x48 复位值: 0x0XXX 这里 X 是未定义的 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RX_DP RX_DM LOCK SOFLN[1:0] FCNT[10:0] r r r r r r r r r r r r r r r r 位/位域 15 14 13 12:11 10:0 名称 RX_DP RX_DM LOCK SOFLN[1:0] FCNT[10:0] 描述 接收数据 + 线状态 代表DP线的状态 接收数据 - 线状态 代表DM线的状态 锁定USB 硬件置位表明接收到了至少两个连续SOF包 丢失SOF 当每次发生ESOFIF事件时,硬件递增此位,一旦再次接收到SOF则清除该位 帧编号计数器 每次收到SOF,帧编号计数器将会增加 19.6.4 USB 设备地址寄存器 (USB_AR) 地址偏移: 0x4C 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 USBEN USBADDR[6:0] rw rw rw rw rw rw rw rw 位/位域 7 名称 USBEN 描述 USB设备使能 通过软件设置该位使能USB设备 0:USB设备禁用。没有会话要处理 446 1:USB设备使能 GD32F1x0 用户手册 6:0 USBADDR[6:0] USB设备地址 总线复位之后,地址被复位为0x00。若USB使能位被置位,则从设备会响应功能地址 DEV_ADDR的报文。 19.6.5 USB 缓冲器地址寄存器 (USB_BAR) 地址偏移: 0x50 复位值: 0x0000 15 14 13 12 11 10 9 8 7 6 5 4 3 BAR[15:3] rw rw rw rw rw rw rw rw rw rw rw rw rw 2 1 0 保留 位/位域 15:3 名称 BAR[15:3] 描述 缓冲器地址 所分配缓冲器(512byte on-chip SRAM)的起始地址,用来保存缓冲描述符表以及包缓冲 19.6.6 USB 端点 n 控制/状态寄存器 (USB_EPnCSR), n=[0..7] 地址偏移: 0x00 to 0x1C 复位值: 0x0000 15 RX_ST rc_w0 14 RX_DTG t 13 12 11 10 9 8 7 RX_STA[1:0] SETUP EP_CTL[1:0] EP_KCTL TX_ST t t r rw rw rw rc_w0 6 TX_DTG t 5 4 TX_STA[1:0] t t 3 2 1 0 EP_AR[3:0] rw rw rw rw 位/位域 15 14 13:12 11 10:9 名称 RX_ST RX_DTG RX_STA[1:0] SETUP EP_CTL[1:0] 描述 正确接收 当一个成功的OUT/SETUP会话完成时,硬件置位此位 通过软件写0清该位 接收数据PID翻转位 本标志位代表非同步端点的翻转数据位(0=DATA0,1=DATA1) 用来实现双缓冲端点的流控功能 用于同步端点的缓冲区交换 接收状态位 通过软件写1翻转 写0保持不变 参考下表 Setup会话完成 当一个SETUP会话完成时,硬件置位此位 端点类型控制l 参考下表 447 8 EP_KCTL 端点类别控制 其具体含义取决于端点类型的设置 参考下表 GD32F1x0 用户手册 7 TX_ST 正确发送 当一个IN会话成功完成时,硬件置位此位 软件清0 6 TX_DTG 发送数据PID翻转位 本标志位代表非同步端点的翻转数据位(0=DATA0,1=DATA1) 用来实现双缓冲端点的流控功能 用于同步端点的缓冲区交换 5:4 TX_STA[1:0] 发送状态位 参考下表 3:0 EP_AR 端点地址 用来指示会话的目标端点 表 35. 接收状态编码 RX_STA[1:0] 00 01 10 11 含义 DISABLED:忽略此端点的所有接受请求 STALL:握手状态为STALL NAK:握手状态为 NAK VALID:使能端点的接收 表 36. 端点类型编码 EP_CTL[1:0] 00 01 10 11 含义 BULK CONTROL ISO INTERRUPT 表 37. 端点类别编码 EP_CTL[1:0] 00 BULK 01 CONTROL EP_KCTL 含义 DBL_BUF STATUS_OUT 表 38. 发送状态编码 TX_STA[1:0] 00 01 10 11 含义 DISABLED:忽略此端点的所有发送请求 STALL:握手状态为STALL NAK:握手状态为NAK VALID:使能端点的发送 19.6.7 USB 发送缓冲地址寄存器 n (USB_TXARn) 地址偏移: [USB_BAR] + n*16 448 15 rw 位/位域 15:1 0 USB 本地地址: [USB_BAR] + n*8 14 13 12 11 10 9 8 TXARn[15:1] rw rw rw rw rw rw rw GD32F1x0 用户手册 7 6 5 4 3 2 rw rw rw rw rw rw 1 0 TXARn0 rw rw 名称 TXARn[15:1] TXARn0 描述 发送缓冲地址 在收到下一个IN分组时,需要发送的数据所在的缓冲区起始地址 必须设为0 19.6.8 USB 发送字节数目寄存器 n (USB_TXCNTn) 地址偏移: [USB_BAR] + n*16 + 4 USB 本地地址: [USB_BAR] + n*8 + 2 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 TXCNTn[9:0] rw rw rw rw rw rw rw rw rw rw 位/位域 9:0 名称 TXCNTn[9:0] 描述 发送字节数 在收到下一个IN令牌后,将发送的字节数 19.6.9 USB 接收缓冲器地址寄存器 n (USB_RXARn) 地址偏移: [USB_BAR] + n*16 + 8 USB 本地地址: [USB_BAR] + n*8 + 4 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RXARn[15:1] RXARn0 rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw 位/位域 15:1 0 名称 RXARn[15:1] RXARn0 描述 接收缓冲器地址 收到下一个OUT或者SETUP分组时,用于保存数据的缓冲区起始地址。 必须设为0 19.6.10 USB 接收字节数目寄存器 n (USB_RXCNTRn) 地址偏移: [USB_BAR] + n*16 + 12 USB 本地地址: [USB_BAR] + n*8 + 6 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 BLKSIZ BLKNUM[4:0] RXCNTRn[9:0] rw rw rw rw rw rw r r r r r r r r r r 449 GD32F1x0 用户手册 位/位域 15 14:10 9:0 名称 BLKSIZ BLKNUM[4:0] RXCNTRn[9:0] 描述 块的大小 0:块大小是2字节 1:块大小是32字节 块数目 包缓冲区所分配的块的数目 接收字节数 在收到下一个OUT/SETUP令牌后,接收到数据的字节数 19.6.11 USB 子端点 n 寄存器 (USB_SUBEPnR), n=[0..7] 地址偏移: 0x100 到 0x11C 复位值: 0x0000 15 14 13 12 11 10 9 8 SUB_ST SUB_STA[1:0] rc_w0 t t r r r 7 6 5 SUBPID_ATTR r r r 4 32 10 r r r r r 位/位域 15 13:12 10:0 名称 SUB_ST 描述 LPM令牌成功接收 当一个LPM令牌接收成功完成,硬件置位 通过软件写0清该位 SUB_STA[1:0] 当收到LPM subpid后,发送的握手包状态位 通过软件写1翻转 写0保持不变 参考下表 SUBPID_ATTR LPM令牌的bmAttribute域 这些位由软件读,硬件进行写操作 SUB_STA[1:0] 00 01 10 11 含义 DISABLED: 忽略此端点的所有 LPM 令牌请求 STALL:握手状态为STALL NYET:握手状态为 NYET VALID:使能端点的 LPM 令牌功能 19.6.12 USB LPM 控制寄存器 (USB_LPMCNTR) 地址偏移: 0x140 复位值: 0x0000 15 14 13 12 11 10 9 8 765 4 3 2 1 0 450 LPMSTIE rw rw 保留 rw rw rw rw rw rw 位/位域 15 名称 LPMSTIE 14:0 保留 描述 LPM token成功传输中断使能 该位由软件进行置位和复位 0:没有中断产生 1:当LPM令牌成功传输时,产生中断 GD32F1x0 用户手册 rw rw rw rw rw 19.6.13 USB LPM 中断状态寄存器 (USB_LPMISTR) 地址偏移: 0x144 复位值: 0x0000 15 14 13 12 11 10 9 8 765 4 3 2 1 0 LPMSTIF 保留 rw rw rw rw rw rw rw rw rw rw rw rw rw 位/位域 15 名称 LPMSTIF 14:0 保留 描述 LPM令牌正确传输中断标志 该位由软件进行置位和复位 0:无影响 1:LPM令牌正确传输 451 20 实时时钟 (RTC) GD32F1x0 用户手册 20.1 简介 20.2 RTC 模块提供了一个包含年/月/日的日历以及时/分/秒/亚秒的时间的时钟功能。 除亚秒外用二进制码显示外,时间和日历都以 BCD 码的形式显示。 RTC 可以进行夏令时补偿。 RTC 可以工作在低功耗模式下,并通过软件配置来智能唤醒。 RTC 支持外接更高精度的低频时钟,用以达到更高的日历精度。 主要特点  通过软件设置来实现夏令时补偿  参考时钟检测功能:通过外接更高精度的低频率时钟源(50Hz或60Hz)来提供日历精度  数字校准功能:通过调整最小时间(最大可调精度1ppm)单位来进行日历校准  通过移位功能进行亚秒级调整  记录事件时间的时间戳功能  模式可配置的两个个独立的侵入源  可编程的日历和位域可屏蔽的闹钟  可屏蔽的中断源: - 闹钟 - 时间戳检测 - 侵入检测  5个32位通用备份寄存器,能够在低功耗模式下保留数据。当有外部事件 侵入时,备份寄存器将会复位 20.3 功能描述 20.3.1 RTC 框图 452 GD32F1x0 用户手册 RTC Block Diagram LSI HSE/32 LSE(32.768KHz) Digital Smooth Calibration RTC_REFIN Alarm Logic RTC_ALRMR RTC_ALRMSSR 512Hz = AF RTC_ALRAM 1Hz RTC_CALIB RTC_OUT 7-bit Asynchronous Prescaler (Default = 128) ck_apre (Default 256 Hz) ck_spre (Default 1 Hz) 15-bit Synchronous Prescaler (Default = 256) Shadow Register RTC_SSR Outpu Selection Logic Calenda Shardow Register RTC_TR RTC_DR RTC_TS RTC_TAMP2 RTC_TAMP1 Backup register and RTC tamper control logic Time-Stamp Control logic TSF TAMPxF RTC 模块包括:  闹钟事件/中断  侵入事件/中断  32位备份寄存器  可选的RTC输出功能: - 512Hz (默认预分频值) - 1Hz(默认预分频值) - 闹钟事件(输出极性可配置)  可选的RTC输入功能: - 时间戳事件检测: RTC_TS - 侵入事件检测1: RTC_TAMP1 - 侵入事件检测2: RTC_TAMP2 - 参考时钟输入: RTC_REFIN(50或60 Hz) 453 20.3.2 RTC 管脚 GD32F1x0 用户手册 PC13,PC14和PC15管脚的功能可以通过配置寄存器RTC_TAFCR和RTC_CTLR 来直接控制。 PC13的功能优先级如下表: PC13功能 OS COEN TAP1EN RTC_ALARM 1 X X OD输出 RTC_ALRM 1 X X PP输出 RTC_CALIB 0 1 X PP输出 RTC_TAMP1 0 0 1 浮空输入 RTC_TS and RTC_TAMP1 0 0 1 浮空输入 RTC_TS 0 0 0 浮空输入 强制PP输出 0 0 0 唤醒引脚 0 0 0 或标准GPIO 注意: (1) OD 表示开漏, PP 表示推挽 (2) „X‟ 无影响 TSEN X X X 0 1 1 0 0 PC13 MODE X PC13 VALUE 0 X 1 X X X X X X X X PC13 1 value bit 0 X PC14的功能优先级如下表: PC14功能 LSEON in LSEBYP in RCC_BDCR RCC_BDCR LSE 晶 振 模 1 0 拟输入 LSE 旁 路 模 1 1 拟输入 强制PP输出 0 X 标准GPIO 0 X 注意: (1) OD表示开漏, PP表示推挽 (2) „X‟ 无影响 PC14 MODE X X 1 0 PC14 VALUE X X PC14 value bit X PC15的功能优先级如下表: PC15功能 LSEON in RCC_BDCR LSE 晶 振 模 1 LSEBYP in RCC_BDCR 0 PC15 MODE X PC15 VALUE X 454 20.3.3 20.3.4 20.3.5 拟输入 强制推挽输 1 1 出 0 X 标准GPIO 0 X 注意: (1) OD表示开漏, PP表示推挽 (2) „X‟ 无影响 GD32F1x0 用户手册 1 PC15 value bit 0 X 时钟和预分频 RTC 单元有三个可选的独立时钟源:LSE,LSI和32分频后的HSE 在RTC单元,有两个预分频器用来实现日历功能和其他功能。一个分频器是7位异步预分频器, 另一个是15位同步预分频器。异步分频器主要用来降低功率消耗。 如果两个分频器都被使用, 建议异步分频器的值尽可能大。 两个预分频器的频率计算公式如下: ck_apre = rtcclk PREDIV_A + 1 ck_spre = ck_apre PREDIV_S + 1 = (PREDIV_A + rtcclk 1)*(PREDIV_S + 1) ck_apre时钟为二进制RTC_SSR亚秒递减计数器提供时钟。当RTC_SSR递减为0时,其值将 自动重载为PREDIV_S的值。 ck_spre时钟为日历寄存器提供驱动时钟,一个时钟将产生一个秒脉冲。 实时时钟和日历 当APB总线访问RTC日历寄存器RTC_DR,RTC_TR和RTC_SSR时,BYPSHAD位决定他们 值是访问影子寄存器还是真实日历寄存器。默认情况下BYPSHAD为0,APB线访问影子日历 寄存器。 每两个RTC 时钟,影子日历寄存器值会更新为真实日历寄存器的值,与此同时RSF位也会再 次置位。在Deepsleep和Standby模式下,影子寄存器不会更新。退出这两种模式时,软件必 须清除RSF位。如果软件想要在BYPSHAD=0的情况下读日历寄存器的值,须等RSF置1之后 (最大的等待时间是2个RTC时钟周期) 注意: 在 BYPSHAD=0下,读日历寄存器(RTC_SSR,RTC_TR,RTC_DR)的APB时钟的频率 (fAPB)必须至少是RTC时钟频率(fRTCCLK)的七倍。 系统复位将复位影子寄存器。 位域可屏蔽可配置的闹钟 RTC闹钟功能被划分为多个位域并且每一个位域有一个该域的可屏蔽位。 RTC闹钟功能的使能由RTC_CTLR寄存器中的AE位控制。当AE=1并且闹钟所有位域的值与对 应的日历时间值匹配,AF标志位将会置位。 455 20.3.6 GD32F1x0 用户手册 注意: 当秒字段未被屏蔽时(RTC_ALRMR寄存器的 MSK0=0),为确保正常运行,RTC_PSCR 寄存器的同步预分频系数应大于等于3。 如果一个位域被屏蔽,这个位域被认为是逻辑上匹配的。如果所有的位域被屏蔽 在AE位被置 位3个RTC时钟周期后,AF位将置位。 RTC 初始化和配置 RTC 寄存器写保护 在默认情况下,PWR_CR寄存器的DBP位被清0。所以写RTC寄存器前需要软件提前设置DBP 位。 上电复位后,大多数RTC寄存器是被写保护的。写入这些寄存器的第一步是解锁这些保护。 通过下面的步骤,可以解锁这些保护: 1. 写 ‗0xCA‘到RTC_WPR寄存器 2. 写 ‗0x53‘到RTC_WPR寄存器 写一个错误的值到RTC_WPR会使写保护再次生效。 写保护状态不受系统复位的影响。 日历初始化和配置 通过以下步骤可以设置日历和预分频器的值: 1. 设置INIT位为1进入初始化模式。在这一模式下,日历计数器停止,它的值可 以被更新。 2. 循环读INITF位。如果INITF位为1,确保已经真正进入到初始化模式。这大概需要2个 RTCCLK时钟周期 (由于时钟同步的原因). 3. 在RTC_PSCR 寄存器中,设置同步和异步预分频器的分频系数。 4. 在影子寄存器(RTC_TR和RTC_DR)中写初始的日历值,并且通过设置RTC_CTLR寄存器 的FMT位来配置时间的格式 (12或24小时)。 5. 清除INIT位退出初始化模式 大约4 RTCCLK 时钟周期后,真正的日历寄存器将从影子寄存器载入时间和日期的设定值, 同时日历计数器将要重新开始运行。 注意: 初始化以后如果要读取日历寄存器(BYPSHAD=0),软件应该确保RSF位已经置1. INITS标志通过检测年值是否为0x00来标记日历是否已初始化。如果年值为0,则 INITS=0;,如果年值不为0,则INITS=1。 夏令时补偿 通过S1H,A1H和BKP位,RTC模块支持夏令时补偿调节功能。 当日历正在运行时,S1H和A1H能使日历减去或加上1小时。S1H和A1H功能可以重复设置, 456 20.3.7 GD32F1x0 用户手册 BKP位能记录这个调节操作。设置S1H或A1H位后,减或加1小时将在下一秒钟到来时生效。 闹钟功能操作步骤 为了避免意外的闹钟标记置位和亚稳态,闹钟功能的操作应遵循如下流程: 1. 清除寄存器RTC_CTLR的AE位禁用闹钟 2. 设置Alarm寄存器(RTC_ALRMSSR/RTC_ALRMR) 3. 设置寄存器RTC_CTLR的AE位使能Alarm功能 读取日历  当BYPSHAD=0时,读日历寄存器 当BYPSHAD=0,从影子寄存器读日历的值。由于同步机制的存在,正常读取日历需要满足一 个基本要求:APB1总线时钟频率必须大于或等于RTC时钟频率的7倍。在任何情况下 APB1 总线时钟的频率都不能低于RTC的时钟频率。 当APB1总线时钟频率低于7倍RTC时钟频率时,日历的读取应该遵守以下流程: 1. 读取两次日历时间和日期寄存器 2. 如果两次的值相等,那么这个值就是正确的 3. 如果这两次的值不相等,应该再读一次 4. 第三次的值可以认为是正确的 RSF每2个RTC时钟周期被置位一次。在这时,影子日历寄存器会更新为真实的日历时间和日 期。 为了确保这3个值(RTC_SSR,RTC_TR,RTC_DR)为同一时间,硬件上采取了如下一致性机制: 1. 读RTC_SSR锁定RTC_TR和RTC_DR的更新 2. 读RTC_TR锁定RTC_DR的更新 3. 读 RTC_DR 解锁 RTC_TR 和 RTC_DR 的更新 如果想在一个很短的时间间隔内(少于2RTCCLK)读取日历,应先清除RSF位并等待其置位 后再读取。 下面几种情况,软件须等待RSF置位后才能读日历寄存器(RTC_SSR,RTC_TR,RTC_DR): 1. 系统复位之后 2. 日历初始化之后 3. 一次同步之后 特别是从低功耗模式唤醒后,软件必须清除RSF位并等待RSF再次置位后才能读取日历寄存器。 在BYPSHAD=1下,读日历寄存器 457 20.3.8 20.3.9 GD32F1x0 用户手册 当BYPSHAD=1,RSF位会被硬件清0,读日历寄存器不需考虑RSF位。当前真实的日历寄存 器值会被直接读取。如此配置的好处是当从低功耗模式(Deepsleep/Standby模式)唤醒后,软 件可以立即获取当前日历寄存器的值而无需加入任何等待延迟(此延迟最大为2个RTC时钟周 期)。 由于没有RSF位周期性的置位,如果两次读日历寄存器之间出现ck_apre时钟边沿, 不同寄存 器(RTC_SSR/RTC_TR/RTC_DR)的值可能并非同一时刻。 另外,如果日历寄存器的值正在发生变化的时刻被APB总线读取,那么有可能APB总线读取的 值是不准确的。 为了确保日历值的正确性和一致性,读取时软件须如下操作: 连续读取所有日历寄存器的值 两次,如果上两次的值是一样的,那么这个值就是相关且准确的。 复位 RTC 在 RTC 单元,有两个复位源可用:系统复位和备份域复位。 当系统复位有效地时候,日历影子寄存器和RTC_ISR寄存器的某些位将要复位到默认值。 备份域复位将会影响下面的寄存器,但系统复位不会对它们产生影响: - RTC 当前实时日历寄存器 - RTC 控制寄存器 (RTC_CTLR) - RTC 预分频寄存器 (RTC_PSCR) - RTC 校准配置寄存器 (RTC_CCR) - RTC 移位寄存器 (RTC_SHIFTCTLR) - RTC 时间戳寄存器 (RTC_TSSSR/RTC_TSTR/RTC_TSDR) - RTC 侵入和复用功能配置寄存器(RTC_TAFCR) - RTC 备份寄存器(RTC_BKPxR) - RTC 闹钟寄存器(RTC_ALRMSSR/RTC_ALRMR) 当系统复位或者进入低功耗模式的时候,RTC单元将会继续运行。但是如果备份域复位,RTC 将会停止计数并且所有的寄存器会复位。 RTC 同步 当用户有一个高精度的远程时钟而且RTC时间和远程时钟只有一个亚秒级的偏差,RTC单元提 供一个称作同步移位的功能去消除这个偏差来提高秒钟的精确性。 RTC_SSR 寄存器以二进制格式显示亚秒值,RTC运行时该值是递减计数。 因此增加亚秒的 值(通过增加SFS[14:0]的值到同步预分频器计数器SS[15:0])或减少(通过增加SFS[14:0]的值到 同步预分频器计数器SS[15:0]并且同时置位A1S位)亚秒的值能延迟或提前下一秒到达的时间。 RTC_SSR的最大值取决于RTC_PSCR寄存器的PREDIV_S的值。PREDIV_S越大,调整的精 458 度也就越高。 GD32F1x0 用户手册 因为1Hz的时钟(ck_spre) 由PREDIV_A和PREDIV_S共同产生,越高的PREDIV_S值就意味 着越低的PREDIV_A值,同时越低的PREDIV_A意味着越高的功耗。 注意: 在使用同步移位功能之前,软件必须检查RTC_SSR中SS的第15位(SS[15])并确保该位 为0。写RTC_SHIFTCTLR寄存器之后,RTC_ISR寄存器的SHPF位将会再次置位。当同步移 位操作完成时,SHPF位被硬件清0。系统复位不影响SHPF位。当REFCKON=0时,同步移位 操作才能正确的工作。如果REFCKON=1,软件禁止写入RTC_SHIFTCTLR。 20.3.10 RTC 参考时钟检测 RTC参考时钟是另外一种提高RTC秒级精度的方法。为了使能这项功能,需要有一个相对于 LSE有更高精度的外部时钟源 (50Hz or 60 Hz)。 使能这项功能之后(REFCKON=1),每一个秒更新的时钟边沿(1Hz)将与最近的RTC_REFIN时 钟沿进行对比。在大多数情况下,这两个时钟沿是对齐的。但当两个时钟沿由于LSE准确度的 原因没有对齐的时候,RTC参考时钟的检测功能会偏移1Hz时钟沿一点相位使得下一个1Hz时 钟沿和参考时钟沿对齐。 当REFCKON=1,每一秒前后都会有一个进行检测的时间窗,处于不同的检测状态时间窗周期 也不同。当检测状态处于检测第一个参考时钟边沿时,使用7个ck_apre的时间窗周期,当检测 状态处于边沿对齐操作时,使用3个ck_apre时间窗周期。 无论使用哪一种时间窗,当参考时钟在时间窗中被检测到的时候,同步预分频计数器会被强制 重载。当两个时钟(ck_spre和参考时钟) 边沿是对齐的,这个重载操作对1Hz 日历更新没有任 何影响。但是当两个始终边沿没有对齐时,这个重载操作将会移动 ck_spre 时钟边沿以使得 ck_spre(1Hz) 时钟边沿和参考时钟边沿对齐。 当参考检测功能正在运行中但外部参考时钟消失(在3个 ck_apre 时间窗内没有发现参考时钟 边沿),日历也能通过LSE继续自动更新。如果这个参考时钟重新恢复,参考时钟检测功能会先 用7 -ck_apre窗口去检测参考时钟,然后用3-ck_apre 窗口去调节ck_spre(1Hz)时钟边沿。 注意: 使能参考时钟检测功能之前(REFCKON=1),软件必须配置PREDIV_A为0x7F和 PREDIVE_S为0xFF。 待机模式下,参考时钟检测功能不可用。 20.3.11 RTC 平滑数字校准 RTC校准功能是一种用于校准RTC频率的方法,该方法通过调整用户配置的校准周期内的RTC 时钟脉冲个数的方式来实现校准。 完成一次这种校准相当于执行了如下行为: 在一次校准周期内,RTC时钟的脉冲个数通过增加或者减少了一定的数目。这种校准的分辨率 大约为0.954ppm,范围为从-487.1ppm 到+488.5ppm。 校准周期的时间可以配置到220/219/218 RTC 时钟周期,如果RTC的输入频率是32.768KHz,这 些校准周期时间分别代表32/16/8秒。 校准配置寄存器(RTC_CCR)指定了在校准周期内要屏蔽的RTCCLK时钟数目: 459  设置CMSK[0]为1使得1个周期被屏蔽在周期时间里 GD32F1x0 用户手册  设置CMSK[1]为1使得2个额外的周期被屏蔽  设置CMSK[2]为1使得4个额外的周期被屏蔽  设置CMSK[8]为1使得256个额外的周期被屏蔽 因此使用CMSK能屏蔽从0到511个的时钟周期,RTC频率能被最多降低到487.1ppm。 为提高RTC频率可以设置CALP位。如果CALP位被置位,将会有512个额外的周期增加到周期 时间期间,这意味着每211/210/29(32/16/8 秒) RTC时钟插入一个周期 因此使用CALP可以使RTC频率增加488.5ppm。 同时使用CMSK和CALP每个周期时间可以做到调整-511到+512个RTC时钟周期。 这意味着在 0.954ppm分辨率的情况下,调整范围为从-487.1ppm到+488.5ppm。 当校准功能正在运行时,按如下公式计算输出校准频率: cal = 1 + ( × 512 − rtcclk )/(2N + − × 512) 注意: N=20/19/18 for 32/16/8 秒校准时间周期 当PREDIV_A < 3时校准: 当异步预分频器值(PREDIV_A)被设置小于3时,当正在使用校准功能时,软件不应该将CALP 位设置为1。当PREDIV_A<3,CALP位设置将会被忽略。 当PREDIV_A小于3时,PREDIV_S值应小于标称值。假设RTC时钟频率是正常的 32.768KHz, 对应的PREDIV_S应该按下面所示设置: PREDIV_A = 2: PREDIV_S减少2(8189 with 32.768KHz) PREDIV_A = 1: PREDIV_S减少4(16379 with 32.768KHz) PREDIV_A = 0: PREDIV_S减少8(32759 with 32.76KHz) 当PREDIV_A小于3,频率校准公式如下: cal = 1 + (256 − rtcclk )/(2N + − 256) 注意: 如果PREDIV_A小于3,若RTC时钟为精确的32.768KHz,CMSK的校准中点是 0x100。 验证RTC校准 提供1Hz校准时钟的输出用于协助软件测量并验证RTC的精度。 在有限的测量周期内测量RTC的频率,最高可能发生2个RTCCLK的测量误差。 为了消除这一测量误差,测量周期应该和校准周期一致。  校准周期设为32秒(默认配置) 用准确的32秒周期去测量1Hz校准输出的准确性能保证这个测量误差在0.477ppm(0.5 RTCCLK 在32秒周期内)之内。 460 20.3.12 20.3.13  校准周期设为16秒(通过设置CWND16位) GD32F1x0 用户手册 使用此配置,CMSK[0]被硬件置0。 用准确的16秒周期去测量1Hz校准输出的准确性能保证这个测量误差在0.954ppm(0.5 RTCCLK 在16秒周期内)之内  校准周期设8秒(通过设置CWND8位) 使用此配置,CMSK[1:0]被硬件置0。 用准确的8秒周期去测量1Hz校准输出的准确性能保证这个测量在1.907ppm(0.5 RTCCLK 周 期超过8秒)之内 运行中重校准 当INITF位是0,用下面的步骤,软件可以更新RTC_CCR: 1). 等待RECALPF位置0 2). 写一个新的值到RTC_CCR寄存器 3). 3个ck_apre时钟周期之后,新的校准设置开始生效。 时间戳功能 时间戳功能由RTC_TS管脚输入,通过配置TSEN位来使能。 当RTC_TS管脚有时间戳事件发生时,会将日历的值保存在时间戳寄存器中 (RTC_TSDR/RTC_TSTR/RTC_TSSSR),同时时间戳标志(TSF)也将由硬件置1。 如果时间戳中断使能被启用(TSIE),时间戳事件会产生一个中断。 时间戳寄存器只会在时间戳事件第一次发生的时刻(TSF=0)记录日历时间,而当TSF=1时, 时间戳事件的值不会被记录。 RTC模块提供了一个可选的功能特性来扩大时间戳事件的触发源:设置TAPTS=1来让侵入检 测功能的侵入事件同时也作为时间戳的输入源。 注意: 因为同步机制的原因,当时间戳事件发生时,TSF会延迟2个ck_apre周期置位。 侵入检测 RTC_TAMPx管脚可以作为侵入事件检测功能输入管脚,检测模式有两种可供用户选择:边沿 检测模式或者是带可配置过滤功能的电平检测模式。 RTC备份寄存器(RTC_BKPxR) RTC备份寄存器处于VDD备份域中,即使 VDD 电源被切断,该区域的寄存器的电源还可由VBAT 提供。从待机模式唤醒或系统复位操作都不会影响这些寄存器。 当被检测到有侵入事件或者Flash读保护等级由1变成0的时候,备份域的寄存器将会复位。 初始化侵入检测功能 TAPxE位可以独立使能对应于不同管脚上的RTC侵入检测功能。 461 GD32F1x0 用户手册 使能TAPxE位启动侵入检测功能之前,需要设置好侵入检测的配置。 当检测到侵入事件,相应的标志位(TAMPxF)将会置位。 如果侵入事件中断使能被启用(TAPIE),侵入事件会产生一个中断。 任何侵入事件都会导致备份寄存器(RTC_BKPxR)复位。 侵入事件源的时间戳 使能TAPTS位,能让侵入检测功能被用作时间戳功能。如果这位被设置为1,当检测到侵入事 件时TSF也将会被置位,如同使能了时间戳功能。当检测到侵入事件时,无论TAPTS位的值如 何,TAMPxF位将置位。 侵入事件检测为边沿检测模式 当FLIT位为0x0时,侵入检测被设置成边沿检测模式,TAPxTRIG位决定检测沿是上升沿还是 下降沿。当侵入检测配置为边沿检测模式时候,侵入检测输入管脚上的上拉电阻将会被禁用。 由于检测侵入事件会复位备份寄存器 (RTC_BKPxR),因此对备份寄存器写操作时应该确保侵 入事件导致的复位和写操作不会同时发生。避免这种情形的推荐方法是先关闭侵入检测功能, 在完成写操作后再重新启动该功能。 注意: PC13上的侵入检测功能即使VDD电源被关掉也依然可以运行。 侵入事件检测为带可配置滤波功能的电平检测模式 当FLIT位没有被设置成0x0时,侵入检测被设置成电平检测模式,TAMPxTRG位决定连续采样 次数(2,4 or 8)。 当DISPU被设置成0(默认值),内部的上拉电阻将会在每一次采样前预充电侵入管脚,这样侵入 事件的输入管脚上就允许连接更大的电容。预充电的时间可以通过PRCH位来配置。越大的电 容,所需的充电时间越长。 电平检测模式下每次采样之间的时间间隔是可配置的。通过调整采样频率(FREQ), 软件能在 功耗和检测延迟之间取得一个平衡。 20.3.14 校准时钟输出 如果COEN位设置为1,PC13管脚会输出参考校准时钟。 当COS位设置为0(默认值)并且异步预分频器(PREDIV_A)设为0x7F时, RTC_CALIB的频率是 fRTCCLK/64。因此若RTCCLK的频率为32.768KHz, RTC_CALIB对应的输出为512Hz。因为下降 沿存在轻微的抖动,因此推荐使用RTC_CALIB输出的上升沿。 当COS位设置为1时,RTC_CALIB的频率计算公式为fRTCCLK/((PREDIV_S+1)*(PREDIV_A+1))。 若RTCCLK为32.768KHz,如果预分频器是默认值,那么RTC_CALIB对应的输出是1Hz。 20.3.15 闹钟输出 当OS控制位被设置为0x01时,RTC_ALARM 输出功能被启用。这个功能将直接输出RTC_ISR 寄存器的alraf位的值。 462 20.4 GD32F1x0 用户手册 RTC_CTLR寄存器中的OPOL位可以配置alraf位输出时候的极性,因此RTC_ALARM的输出电 平有可能与alraf位相反。 RTC 省电模式管理 模式 睡眠模式 深度睡眠模 式 待机模式 模式下能否工作 是 当时钟源是LSE或LSI 时可以工作 当时钟源是LSE或LSI 时可以工作 退出该模式的方法 RTC 中断 RTC闹钟/侵入事件/时间戳事件/ 唤醒事件 RTC闹钟/侵入事件/时间戳事件/ 唤醒事件 20.5 RTC 中断 20.6 所有的RTC中断都被连接到EXTI控制器。 如果想使用RTC闹钟/侵入/时间戳中断,应按下面步骤操作: 1).设置并使能对应的EXTI中连接到RTC闹钟/侵入/时间戳的中断线,然后配置该线为上升沿触 发模式 2).配置并使能RTC全局中断 3).配置并使能RTC闹钟/侵入/时间戳功能 中断 闹钟 时间戳 侵入 1 侵入 2 事件标志 AF TSF TAMP1F TAMP2F 控制位 AIE TSIE TAPIE TAPIE 退出睡眠 Y Y Y Y 退出停止 Y(*) Y(*) Y(*) Y(*) 退出待机 Y(*) Y(*) Y(*) Y(*) * : 仅仅当RTC时钟源是LSE或LSI时有效。 RTC 寄存器 20.6.1 RTC 时间寄存器 (RTC_TR) 偏移地址 : 0x00 系统复位值: 当 BYPSHAD = 0,0x0000 0000 。 当 BYPSHAD = 1,无影响. 写保护寄存器,仅在初始化状态可以进行写操作 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 PM HT[1:0] HU[3:0] rw rw rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 463 保留 MNT[2:0] rw 位/位域 31:23 22 名称 保留 PM 21:20 19:16 15: 14:12 11:8 7 6:4 3:0 HT[1:0] HU[3:0] 保留 MNT[2:0] MNU[3:0] 保留 ST[2:0] SU[3:0] MNU[3:0] rw 保留 描述 保持复位值 AM/PM 标志 0: AM 或 24 小时制 1: PM 时钟十位值,以 BCD 码形式存储 时钟个位值,以 BCD 码形式存储 保持复位值 分钟十位值,以 BCD 码形式存储 分钟个位值,以 BCD 码形式存储 保持复位值 秒钟十位值,以 BCD 码形式存储 秒钟个位值,以 BCD 码形式存储 GD32F1x0 用户手册 ST[2:0] rw SU[3:0] rw 20.6.2 RTC 日期寄存器 (RTC_DR) 偏移地址 : 0x04 系统复位值: 当 BYPSHAD = 0,0x0000 2101。 当 BYPSHAD = 1,无影响 写保护寄存器,仅在初始化状态可以进行写操作 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 YT[3:0] YU[3:0] rw rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 WDU[2:0] MT MU[3:0] 保留 DT[1:0] DU[3:0] rw rw rw rw rw 位/位域 31:24 23:20 19:16 15:13 名称 保留 YT YU[3:0] WDU[2:0] 描述 保持复位值 年份十位值,以 BCD 码形式存储 年份个位值,以 BCD 码形式存储 星期 0x0: 保留 0x1: 星期一 … 0x7: 星期日 464 12 MT 11:8 MU[2:0] 7:6 保留 5:4 DT[1:0] 3:0 DU[3:0] 月份十位值,以 BCD 码形式存储 月份个位值,以 BCD 码形式存储 保持复位值 日期十位值,以 BCD 码形式存储 日期个位值,以 BCD 码形式存储 GD32F1x0 用户手册 20.6.3 RTC 控制寄存器 (RTC_CTLR) 偏移地址 : 0x08 系统复位 : 无影响 备份域复位值: 0x0000 0000 写保护寄存器 31 30 29 28 27 保留 26 25 24 15 14 13 12 TSIE 保留 AIE rw 位/位域 31:24 rw 名称 保留 11 10 9 8 TSEN 保留 AE rw rw 描述 保持复位值 23 COEN rw 7 保留 22 21 20 19 18 17 16 OS[1:0] OPOL COS BKP S1H A1H rw rw rw rw w w 6 5 4 3 2 1 0 FMT BYPSHAD REFCKON TSEDGE 保留 rw rw rw rw 23 COEN 校准输出使能 0: 关闭校准输出 1: 使能校准输出 22:21 OS[1:0] 输出选择 该位用来选择 RTC_ALARM 输出的标志源 0x0: 禁用 RTC_ALARM 输出 0x1: 启用 alarm 标志输出 0x2: 保留 0x3: 保留 20 OPOL 输出极性 该位用来反转 RTC_ALARM 输出 0: 禁用反转 RTC_ALARM 输出 1: 启用反转 RTC_ALARM 输出 19 COS 校准输出选择 仅当 COEN=1 并且预分频器是默认值时有效 0: 校准输出是 512 Hz 1: 校准输出是 1Hz 18 BKP 备份位 465 17 S1H 16 A1H 15 TSIE 14:13 12 保留 AIE 11 TSEN 10:9 保留 8 AE 7 保留 6 FMT 5 BYPSHAD 4 REFCKON 3 TSEDGE GD32F1x0 用户手册 该位可以通过软件灵活使用。常用来记录夏令时调整操作 减 1 小时(冬季时间变化) 当前时间非零的情况下,将当前时间减去一个小时 0: 没有影响 1: 在下一个秒改变时,将减少一个小时 增加 1 小时(夏季时间变化) 将当前时间增加一个小时 0: 没有影响 1: 在下一个秒改变时,将增加一个小时 时间戳中断使能 0: 禁用时间戳中断 1: 启用时间戳中断 保持复位值 RTC 闹钟中断使能 0: 禁用闹钟中断 1: 启用闹钟中断 时间戳功能使能 0: 禁用时间戳功能 1: 启用时间戳功能 保持复位值 闹钟功能使能 0: 禁用闹钟功能 1: 启用闹钟功能 保持复位值 显示时间格式 0: 24 小时制 1: 12 小时制 注意: 仅能在初始化状态进行写入 旁路影子寄存器 0: 读取的日历的值来自影子日历寄存器 1: 读取的日历的值来自真正日历寄存器 注意: 如果 APB1 时钟的频率小于 RTCCLK 频率的 7 倍,该位必须设为 1. 参考时钟检测功能使能 0: 禁用参考时钟检测功能 1: 启用参考时钟检测功能 注意: 仅能在初始化状态进行写入 时间戳事件有效检测边沿 0: 上升沿是时间戳事件有效检测沿 466 2:0 保留 1: 下降沿是时间戳事件有效检测沿 保持复位值 GD32F1x0 用户手册 20.6.4 RTC 状态和标志寄存器 (RTC_STR) 偏移地址 : 0x0C 系统复位 : 仅 INIT,INITF 和 RSF 位被置 0。其他位无影响 备份域复位值: 0x0000 0007 写保护寄存器,除 RTC_STR[14:8]外 31 30 29 28 27 15 14 13 TAMP2F TAMP1F rc_w0 rc_w0 12 TSOVF rc_w0 26 25 24 23 22 21 20 19 18 保留 11 TSF rc_w0 10 9 保留 8 7 6 5 4 AF INIT INITF RSF INITS rc_w0 rw r rc_w0 r 3 SHPF rc_w0 17 21 保留 16 RECALPF r 0 AWF r 位/位域 31:17 名称 保留 描述 保持复位值 16 RECALPF 校准挂起标志 当软件向 RTC_CCR 进行写操作时,该位被硬件置 1。当校准设置开始执行 后,该位被硬件清零 0。 15 保留 保持复位值 14 TAMP2F RTC_TAMP2 事件标志 当在 tamper2 输入管脚检测到侵入事件时,该位硬件置 1。软件可以通过向 该位写 0 来清除。 13 TAMP1F RTC_TAMP1 事件标志 当在 tamper1 输入管脚检测到侵入事件时,该位硬件置 1。软件可以通过向 该位写 0 来清除。 12 TSOVF 时间戳事件溢出标志 如果 TSF 位已经置位,当再次检测到时间戳事件时,该位会通过硬件置 1。 软件可以通过向该位写 0 来清除。 11 TSF 10:9 保留 时间戳事件标志 当检测到一个时间戳事件时,该位会通过硬件置 1。软件可以通过向该位写 0 来清除。 保持复位值 8 AF 7 INIT Alarm 发生标志 当现在的时间/日期与闹钟设置的时间/日期匹配的时候,该位会通过硬件置 1。软件可以通过向该位写 0 来清除。 进入初始化模式 0:自由运行模式 467 6 INITF 5 RSF 4 INITS 3 SHPF 2:1 保留 0 AWF GD32F1x0 用户手册 1:进入初始化模式设置时间/日期,预分频计数器将停止运行 初始化状态标志 该位被硬件置 1,初始化状态时可以设置日历寄存器和预分频器 0: 日历寄存器和预分频器的值不能改变 1: 日历寄存器和预分频器的值可以改变 寄存器同步标志 每 2 个 RTCCLK 将会由硬件置 1 一次,同时会复制当前日历时间/日期到影 子日历寄存器。初始化模式(INIT),移位操作挂起标志(SHPF)或者旁路模式 (BYPSHAD)会清除该位。该位也可以通过软件写 0,清除。 0:影子寄存器未同步 1:影子寄存器已同步 日历初始化状态标志 硬件置位和清零。当日历寄存器的年份值不为 0 时置位,为 0 时清除。 0:日历尚未初始化 1:日历已经初始化 移位功能操作挂起标志 0:移位操作没有挂起 1:移位操作挂起 保持复位值 Alarm 配置位可写标志位 硬件置位和清零。AE=0 时,标记 alarm 是否可写。 0:不允许修改 Alarm 寄存器设置 1:允许修改 Alarm 寄存器设置 20.6.5 RTC 预分频寄存器 (RTC_PSCR) 偏移地址 : 0x10 系统复位 : 无影响 备份域复位值: 0x007F 00FF 寄存器仅在初始化状态可写 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 PREDIV_A[6:0] rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PREDIV_S[14:0] rw 位/位域 31:23 名称 保留 描述 保持复位值 22:16 PREDIV_A[6:0] 同步预分频系数 468 GD32F1x0 用户手册 ck_apre 频率 = RTCCLK 频率/(PREDIV_A+1) 15 保留 保持复位值 14:0 PREDIV_S[14:0] 异步预分频系数 ck_spre 频率 = ck_apre 频率/(PREDIV_S+1) 20.6.6 RTC 警报寄存器 (RTC_ALRMR) 偏移地址 : 0x1C 系统复位 : 无影响 备份域复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 MSK4 WDSEL DT[1:0] DU[3:0] MSK3 PM HT[1:0] HU[3:0] rw rw rw rw rw rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MSK2 MNT[2:0] MNU[3:0] MSK1 ST[2:0] SU[3:0] rw rw rw rw rw rw 位/位域 31 名称 MSK4 30 WDSEL 29:28 27:24 23 DT[1:0] DU[3:0] MSK3 22 PM 21:20 19:16 15 HT[1:0] HU[3:0] MSK2 描述 警报日期位域屏蔽位 0:不屏蔽日期/天位域 1:屏蔽日期/天位域 星期选择 0:此时 DU[3:0] 代表日期 1:此时 DU[3:0] 代表星期几,此时 DT[3:0] 无意义 日期十位值,以 BCD 码格式存储 日期个位值或星期天数,以 BCD 码格式存储 警报小时位域屏蔽位 0:不屏蔽小时位域 1:屏蔽小时位域 AM/PM 标志 0:AM 或 24 小时制 1:PM 时钟十位值,以 BCD 码形式存储 时钟个位值,以 BCD 码形式存储 警报分钟位域屏蔽位 0: 不屏蔽分钟位域 1: 屏蔽分钟位域 469 14:12 11:8 7 6:4 3:0 MNT[2:0] MNU[3:0] MSK1 ST[2:0] SU[3:0] 分钟十位值,以 BCD 码形式存储 分钟个位值,以 BCD 码形式存储 秒位域屏蔽位 0: 不屏蔽秒位域 1: 屏蔽秒位域 秒钟十位值,以 BCD 码形式存储 秒钟个位值,以 BCD 码形式存储 GD32F1x0 用户手册 20.6.7 RTC 写保护 (RTC_WPR) 偏移地址 : 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 保留 KEY w 位/位域 31:8 7:0 名称 保留 KEY 描述 保持复位值 写保护的解锁值 20.6.8 RTC 亚秒寄存器 (RTC_SSR) 偏移地址 : 0x28 系统复位值 : 当 BYPSHAD = 0,0x0000 0000。 当 BYPSHAD = 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 SS[15:0] r 位/位域 31:16 15:0 名称 保留 SS[15:0] 描述 保持复位值 亚秒值 该位值是同步预分频计数器的值。秒的小数部分由下面公式给出: 470 GD32F1x0 用户手册 秒的小数部分 = ( PREDIV_S - SS ) / ( PREDIV_S + 1 ) 20.6.9 RTC 移位功能控制寄存器 (RTC_SHIFTCTLR) 偏移地址 : 0x2C 复位值 : 0x0000 0000 仅当 SHPF=0,该寄存器可写 31 A1S w 15 保留 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SFS[14:0] w 位/位域 31 名称 A1S 描述 增加一秒 0:无影响 1:增加一秒到时钟/日历 该位与 SFS 位一起使用,增加小于一秒到当前时间 30:15 保留 保持复位值 14:0 SFS[14:0] 减去小于一秒的一段时间 这位的值将增加到同步预分频计数器 当仅用 SFS 时,由于同步与分频器是一个递减计数器,所以时钟将会延迟。 延迟(秒) = SFS / ( PREDIV_S + 1 ) 当 A1S 和 SFS 一起使用时,时钟将会提前 提前(秒) = ( 1 - ( SFS / ( PREDIV_S + 1 ) ) ) 注意: 写入此寄存器会导致 RSF 位被清 0 20.6.10 RTC 时间戳时间寄存器 (RTC_TSTR) 偏移地址 : 0x30 备份域复位值: 0x0000 0000 系统复位 : 无影响 当 TSF 被置 1,该位用来记录日历时间 清除 TSF 位也会清除此寄存器 31 15 保留 30 29 28 27 26 25 24 保留 14 13 12 11 10 9 8 MNT[2:0] MNU[3:0] r r 23 7 保留 22 21 20 19 18 17 16 PM HT[1:0] HT[3:0] r r r 6 5 4 3 2 1 0 ST[2:0] SU[3:0] r r 471 位/位域 31:23 22 名称 保留 PM 21:20 19:16 15 14:12 11:8 7 6:4 3:0 HT[1:0] HU[3:0] 保留 MNT[2:0] MNU[3:0] 保留 ST[2:0] SU[3:0] 描述 保持复位值 AM/PM 标记 0:AM 或 24 小时制 1:PM 时钟十位值,以 BCD 码形式存储 时钟个位值,以 BCD 码形式存储 保持复位值 分钟十位值,以 BCD 码形式存储 分钟个位值,以 BCD 码形式存储 保持复位值 秒钟十位值,以 BCD 码形式存储 秒钟个位值,以 BCD 码形式存储 GD32F1x0 用户手册 20.6.11 RTC 时间戳日期寄存器 (RTC_TSDR) 偏移地址 : 0x34 备份域复位值: 0x0000 0000 系统复位:无影响 当 TSF 被置 1,该位用来记录日历时间 清除 TSF 位也会清除此寄存器 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 WDU[2:0] MT MU[3:0] 保留 DT[1:0] DU[3:0] r r r r r 位/位域 31:16 名称 保留 描述 保持复位值 15:13 WDU[2:0] 星期数 12 MT 月份十位值,以 BCD 码形式存储 11:8 MU[3:0] 月份个位值,以 BCD 码形式存储 7:6 保留 保持复位值 5:4 DT[1:0] 日期十位值,以 BCD 码形式存储 472 3:0 DU[3:0] 日期个位值,以 BCD 码形式存储 GD32F1x0 用户手册 20.6.12 RTC 时间戳亚秒寄存器 (RTC_TSSSR) 偏移地址 : 0x38 备份域复位 : 0x0000 0000 系统复位: 无影响 当 TSF 被置 1,该位用来记录日历时间 清除 TSF 位也会清除此寄存器 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 SS[15:0] r 位/位域 31:16 15:0 名称 保留 SS[15:0] 描述 保持复位值 亚秒值 TSF 置 1 时记录当时的同步预分频计数器的值。 20.6.13 RTC 校准配置寄存器 (RTC_CCR) 偏移地址 : 0x3C 备份域复位 : 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 CALP CWND8 CWND16 保留 CMSK[8:0] rw rw rw rw 位/位域 31:16 15 名称 保留 CALP 描述 保持复位值 RTC 频率增加 488.5ppm 0:无影响 1:每 211 个脉冲增加一个 RTCCLK 脉冲 该位需与 CMSK 位一起使用。如果输入时钟频率是 32.768KHz,在 32s 校准窗期间, 增加的 RTCCLK 脉冲数是 (512 * CALP) - CMSK 473 14 CWND8 GD32F1x0 用户手册 采用 8 秒校准周期 0:无影响 1:采用 8 秒校准周期 注意: 当 CWND8=1, CMSK[1:0] 被锁定在“00”. 13 CWND16 采用 16 秒校准周期 0:无影响 1:采用 16 秒校准周期 注意: 当 CWND16=1, CMSK[0] 被锁定在“0”. 12:9 保留 保持复位值 8:0 CMSK[8:0] 校准周期 RTCCLK 脉冲屏蔽数 在 220 RTCCLK 脉冲之内屏蔽的脉冲数 此项功能可以以 0.9537 ppm 的分辨率来降低日历频率 20.6.14 RTC 侵入和复用功能配置寄存器 (RTC_TAFCR) 偏移地址 : 0x40 备份域复位 : 0x0000 0000 系统复位: 无影响 3 30 29 28 27 26 25 24 23 22 21 20 19 18 1 保留 PC15M ODE PC15VAL UE PC14MO DE PC14VAL UE PC13MO DE PC13VAL UE rw rw rw rw rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 DISP U PRCH[1:0 ] FLIT[1:0] FREQ[2:0] TAPTS 保留 TAP2TRI G TAP2EN TAPIE rw rw rw rw rw rw rw rw 17 16 保留 1 TAP1T RIG rw 0 TAP1 EN rw 位/位域 31:24 23 名称 保留 PC15MODE 22 PC15VALUE 21 PC14MODE 20 PC14VALUE 描述 保持复位值 PC15 模式 0:PC15 受 GPIO 配置控制 1:如果 LSEON=0,PC15 被强制设置为推挽输出 PC15 值 当 PC15MODE=1 且 LSEON=0 时,PC15 输出该位的值 PC14 模式 0:PC14 受 GPIO 配置控制 1: 如果 LSEON=0,PC14 被强制设置为推挽输出 PC14 值 474 19 18 17:16 15 14:13 12:11 10:8 7 6:5 4 PC13MODE PC13VALUE 保留 DISPU PRCH[1:0] FLIT[1:0] FREQ[2:0] TAPTS 保留 TAP2TRIG GD32F1x0 用户手册 当 PC14MODE=1 且 LSEON=0 时,PC14 输出该位值 0:PC13 受 GPIO 配置控制 1: 如果所有的 RTC 复用功能关闭,PC13 被强制设置为推挽输出 Alarm 输出类型控制/PC13 输出值 当 RTC 使能复用功能时,输出 RTC_ALARM: 0:RTC_ALARM 用开漏模式输出 1:RTC_ALARM 用推挽模式输出 当所有的 RTC 复用功能禁用且 PC13MODE=1 时,PC13 输出该位值 保持复位值 RTC_TAMPx 上拉禁用位 0:使能内部 RTC_TAMPx 引脚上的上拉电阻并在采样前进行预充电 1:禁用预充电功能 RTC_TAMPx 的预充电时间 该位设置决定了每次采样前的预充电时间 0x0:1 RTC clock 0x1:2 RTC clock 0x2:4 RTC clock 0x3:8 RTC clock RTC_TAMPx 过滤器计数设置 该位决定了侵入事件检测模式和在电平检测模式下连续采样的次数。 0x0:用边沿模式检测侵入事件,预充电功能被自动禁用。 0x1:用电平模式检测侵入事件。连续采样到 2 个有效电平时认为发生侵入事件 0x2:用电平模式检测侵入事件。连续采样到 4 个有效电平时认为发生侵入事件 0x3:用电平模式检测侵入事件。连续采样到 8 个有效电平时认为发生侵入事件 侵入事件电平模式检测的采样频率 0x0: 每次采样间隔 32768 个 RTCCLK(若 RTCCLK=32.768KHz,频率为 1Hz) 0x1: 每次采样间隔 16384 个 RTCCLK(若 RTCCLK=32.768KHz,频率为 2Hz) 0x2: 每次采样间隔 8192 个 RTCCLK(若 RTCCLK=32.768KHz,频率为 4Hz) 0x3: 每次采样间隔 4096 个 RTCCLK(若 RTCCLK=32.768KHz,频率为 8Hz) 0x4: 每次采样间隔 2048 个 RTCCLK(若 RTCCLK=32.768KHz,频率为 16Hz) 0x5: 每次采样间隔 1024 个 RTCCLK(若 RTCCLK=32.768KHz,频率为 32Hz) 0x6: 每次采样间隔 512 个 RTCCLK(若 RTCCLK=32.768KHz,频率为 64Hz) 0x7: 每次采样间隔 256 个 RTCCLK(若 RTCCLK=32.768KHz,频率为 128Hz) 将侵入检测功能同时置位时间戳标记 0:无影响 1:当检测到侵入事件时,即使 TSEN=0, TSF 也会被置位 保持复位值 对应于 RTC_TAMP2 输入管脚的侵入事件检测触发沿设置 如果侵入检测处于边沿模式(FLIT =0): 475 GD32F1x0 用户手册 0: 上升沿触发一个侵入检测事件 1: 下降沿触发一个侵入检测事件 如果侵入检测处于电平模式(FLIT ≠0): 0: 低电平触发一个侵入检测事件 1: 高电平触发一个侵入检测事件 3 TAP2EN Tamper 2 检测使能位 0:禁用 tamper 2 检测功能 1:启用 tamper 2 检测功能 2 TAPIE 侵入检测中断使能 0:禁用侵入中断 1:启用侵入中断 1 TAP1TRIG 对应于 RTC_TAMP1 输入管脚的侵入事件检测触发沿设置 如果侵入检测处于边沿模式(FLIT =0): 0: 上升沿触发一个侵入检测事件 1: 下降沿触发一个侵入检测事件 如果侵入检测处于电平模式(FLIT≠0): 0: 低电平触发一个侵入检测事件 1: 高电平触发一个侵入检测事件 0 TAP1EN Tamper 1 检测使能位 0:禁用 tamper 1 检测功能 1:启用 tamper 1 检测功能 注意: 在改变侵入检测配置之前,应该复位 TAMPxE 位 20.6.15 RTC 闹钟亚秒寄存器 (RTC_ALARMSSR) 偏移地址 : 0x44 备份域复位 : 0x0000 0000 系统复位: 无影响 写保护寄存器,仅当 AE=0 或 INIT=1,可以进行写操作 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 MASKSS[3:0] 保留 rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 SS[14:0] rw 位/位域 31:28 27:24 名称 保留 MASKSS[3:0] 描述 保持复位值 亚秒位域的屏蔽控制位 0x0: 屏蔽闹钟亚秒设置。当所有其他的闹钟位域匹配的时候,闹钟将会在每一秒钟到 达的时刻置 1。 476 23:15 14:0 保留 SS[14:0] GD32F1x0 用户手册 0x1: SS[0]位用于时间匹配,其他位被忽略。 0x2: SS[1:0] 位用于时间匹配,其他位被忽略。 0x3: SS[2:0] 位用于时间匹配,其他位被忽略。 0x4: SS[3:0] 位用于时间匹配,其他位被忽略。 0x5: SS[4:0] 位用于时间匹配,其他位被忽略。 0x6: SS[5:0] 位用于时间匹配,其他位被忽略。 0x7: SS[6:0] 位用于时间匹配,其他位被忽略。 0x8: SS[7:0] 位用于时间匹配,其他位被忽略。 0x9: SS[8:0] 位用于时间匹配,其他位被忽略。 0x10: SS[9:0] 位用于时间匹配,其他位被忽略。 0x11: SS[10:0] 位用于时间匹配,其他位被忽略。 0x12: SS[11:0] 位用于时间匹配,其他位被忽略。 0x13: SS[12:0] 位用于时间匹配,其他位被忽略。 0x14: SS[13:0] 位用于时间匹配,其他位被忽略。 0x15: SS[14:0] 位用于时间匹配,其他位被忽略。 注意:同步计数器的第 15 位(RTC_SSR 寄存器中的 SS[15])从不被匹配 保持复位值 闹钟亚秒值 该值为闹钟亚秒值,用于与同步预分频计数器匹配。 匹配位数由 MASKSS 位控制 20.6.16 RTC 备份寄存器 (RTC_BKPxR)(x=0,1,2,3,4) 偏移地址 : 0x50 to 0x60 备份域复位 : 0x0000 0000 系统复位: 无影响 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 BKP[31:16] rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 BKP[15:0] rw 位/位域 31:0 名称 BKP 描述 备份域寄存器. 软件可读写寄存器。由于此寄存器可由 VBAT 供电,因此寄存器值在省电模式下依然保 持有效。当侵入检测标志位 TAMPx 置 1 或者禁用 Flash 读保护的时候此寄存器值将复 位。 477 21 触摸传感控制器 (TSI) GD32F1x0 用户手册 21.1 简介 触摸传感控制器(TSI)为按键、触摸检测等应用提供了简易的解决方案。控制器基于电荷转 移方法,当一个手指接近电极时会引起整个系统的电容变化,而TSI可以通过电荷转移的方法 来检测到这种变化从而感知到手指接近这一行为。 21.2 主要特点 21.3  内置的电荷转移序列完全由硬件控制  包含6 个完全并行的引脚组  同时最多可配置18个通道引脚和6个采样引脚  电荷转移序列的频率可配置  可以由用户实现自定义的电荷转移序列  可产生序列结束、错误标志和中断  内置的电荷转移序列中包含可配置的扩频功能 功能描述 21.3.1 TSI 框图 478 图 242. TSI 模块框图 G1_IO1 G1_IO2 G1_IO3 G1_IO4 组1 引脚控制器 G2_IO1 G2_IO2 G2_IO3 G2_IO4 组2 引脚控制器 电荷转移序列有 限状态机 GD32F1x0 用户手册 TSI计数器 TSI 寄存器 AHB 总线 G6_IO1 G6_IO2 G6_IO3 G6_IO4 组6 引脚控制器 脉冲、时钟生成器 21.3.2 触摸传感技术概述 针对触摸感知有很多不同的技术手段,例如光学,电阻式,电容式,应变式等等,其中检测系 统的变化是这些技术的关键问题和目标。TSI模块使用电荷转移的方法来检测由于触摸带来的 系统的变化,尤其是触摸电极上电容的变化。为了检测到这种变化,TSI会运行内置的或用户 自定义的电荷转移序列,这个序列包括数次充电、转移的步骤直至满足终止条件,这一过程中 的充电、转移次数就表征了系统的电容特性,因此应用程序可以通过监测这一次数值来感知系 统的变化。 如图243中,由4个引脚组成了一个引脚组,4个引脚各自通过一个模拟开关连接到一个公共点 上,这些模拟开关是实现电荷转移序列的关键组成部分。每一个引脚组中应该配置一个引脚为 采样引脚,其他的3个引脚中应该至少配置一个为通道引脚。例如在图243中, PIN1就被配置为 通道引脚,PIN2则配置为采样引脚,PIN3和PIN4没有使用。PIN1作为通道引脚,它会连接一 个电极,这个电极通常设计在PCB板上,而采样引脚PIN2上需要连接一个采样电容 Cs 。现在 通道引脚PIN1的电容包括 Cx 和通过电极引入的电容, 所以当手指触摸电极时,PIN1的电容会 增大而PIN2的电容保持不变。TSI模块会使用电荷转移序列来检测到这一变化,具体实现方法 会在下一节中详细说明。 479 图 243.一个通道引脚的采样引脚的框图 GD32F1x0 用户手册 模拟开关 ASW_1 模拟开关 ASW_2 模拟开关 ASW_3 模拟开关 ASW_4 芯片 PIN1 PIN2 PIN3 PIN4 电极 CX CS 21.3.3 电荷转移序列 TSI模块会执行电荷转移序列来测量一个通道引脚的电容变化。整个序列的详细步骤如表39所 示。(表39假设系统是按照图243来配置的,即PIN1是通道引脚,PIN2是采样引脚) 表 39.电荷转移序列的详细步骤以及引脚和开关状态 步骤序号 名称 ASW1 状态 ASW2 状态 1 放电 闭合 闭合 2 缓冲时间 1 断开 断开 3 充电 断开 断开 4 充电扩展 断开 断开 5 缓冲时间 2 断开 断开 6 电荷转移 闭合 闭合 7 缓冲时间 3 断开 断开 8 对比 断开 断开 Pin1 状态 浮空输入 浮空输入 输出高电平 输出高电平 浮空输入 浮空输入 浮空输入 浮空输入 Pin2 状态 下拉 浮空输入 浮空输入 浮空输入 浮空输入 浮空输入 浮空输入 浮空输入 1. 放电 闭合 ASW1和ASW2 并且将PIN2配置成下拉,使Cx 和 Cs放电。这个步骤是初始化的操作, 应该由软件在传输序列开始之前通过配置寄存器来实现。该步骤的放电时间需要保证Cx 和Cs 的电压被彻底放电至0. 2. 缓冲时间 1 ASW1 和ASW2 断开, PIN1 被设置成浮空输入。 480 GD32F1x0 用户手册 3. 充电 充电过程中,通道引脚PIN1被配置成输出高电平,给 Cx充电,ASW1和ASW2仍然断开。充 电时间应该配置为可确保 (细节参看寄存器部分) Cx 充电到VDD. 4. 充电扩展 这是在电荷转移序列中的一个可选步骤,目的是实现扩频。此步骤中所有引脚和模拟开关的状 态与步骤3完全相同,唯一差别是持续时间,该步骤的持续时间在每次循环都会变化,最大值 可以TSI寄存器配置。 5. 缓冲时间 2 ASW1和ASW2断开, PIN1被设置成浮空输入。 6. 电荷转移 这一步骤中ASW1和ASW2闭合,而PIN1被设置成浮空输入,电荷将从 Cx向 Cs 转移。 这个 转移时间应该被合理配置 (细节参看寄存器部分) 以确保转移后采样引脚和通道引脚的电压值 相等。 7. 缓冲时间 3 ASW1 和ASW2 断开, PIN1 被设置成浮空输入。 8. 对比 ASW1, ASW2 和 PIN1 仍然保留上一步骤的配置. 在这一步将采样引脚PIN2 的电压 Vs 和 一个门限电压 Vth 进行比较。 如果 Vs 比 Vth 低,那么整个序列返回到步骤2开始新的循环, 否 则整个序列结束。 在步骤1完成之后,采样引脚的电压 Vs 是0,之后每经过一个充电、转移周期都会增大一些, 如图244所示。根据电气学知识,如果电极上的电容越大,则每个周期 Vs 增大的值就会越大。 电荷转移序列的停止条件是 Vs 达到 Vth ,系统中有一个计数器来记录在一个电荷转移序列中 具体的充电、转移周期次数,如果每个充电、转移周期 Vs 增加的值越大,那么总次数就会越 小,软件可以从寄存器读出这个次数值来检测系统电容的变化。 481 图 244.电荷序列传输期间的采样 引脚的电压 3.3 Vth GD32F1x0 用户手册 Vs 21.3.4 0 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 周期数 电荷转移序列状态机 TSI内部有一个硬件实现的有限状态机,来执行如前一节中描述的电荷转移序列,如图245所示 列。 图 245. 电荷转移序列的有限状态机的状态转移图 空闲(放电) 启动条件满足 缓冲时间1 充电 充电扩展禁用 Vs > Vth 或周期数达到MCN 缓冲时间2 转移 充电扩展使能 充电拓展 !(Vs > Vth 或周期数达到MCN ) 缓冲时间3 对比 482 21.3.5 复位之后,状态机处于默认的IDLE状态。状态机有2种启动条件(由TSI_CTLR寄存器的TMSEL 位定义): TMSEL = 0: 软件触发模式。在这一模式下,软件通过将 TSI_CTLR寄存器的TSIST位写1 来启动状态机 TMSEL = 1: 硬件触发模式。在这种模式下,状态机会监测TSITG引脚,当发现上升沿或下 降沿(极性可由寄存器配置)时自动启动 状态机一旦启动就会按照图245所描述的跳转流程来运行。状态机如果在当前状态下的持续时 间一旦达到配置值就会离开当前状态,并根据当前的条件进入下一个状态。只有当ECEN位被 置1,才会出现充电扩展这一状态,这个状态用于实现扩频功能。 在比较状态,将状态机会比较每个已启用的引脚组中的采样引脚电压和阈值电压。如果所有采 样引脚的电压都达到了阈值,状态机返回空闲状态并停止,否则,状态机返回到缓冲时间1状 态,继续下一个周期,像图245所示, 在27个周期之后, Vs (采样引脚的电压) 到达 Vth (阈值 电压). 在TSI_MCNR寄存器的MCN位也定义了一个最大周期数,当周期数达到 MCN, 状态机也将返 回 IDLE状态并停止,不管此时 Vs 是否达到了 Vth 。 状态时钟和持续时间 TSI模块里有3个时钟:HCLK,CTCLK和ECCLK。 HCLK为系统时钟,它驱动TSI的寄存器和 状态机。 CTCLK是从HCLK分频得到的,(分频系数由CTCDIV定义),它是用来计算充电和转 移持续时间的时钟。 ECCLK也是从HCLK分频得到(分频系数由ECCDIV定义),它用来计算 充电扩展的持续时间。除了充电扩展,其他的状态持续时间在每一次循环周期中都是固定的。 其中,缓冲时间1,缓冲时间2和缓冲时间3的持续时间固定为2 HCLK周期。充电、传输状态的 持续时间由CDT与CTDT寄存器定义。充电扩展状态的持续时间每个周期会发生变化,它的最 大值由TSI_CTLR寄存器的ECDT[6:0]位域定义。 充电扩展状态在每个周期的持续时间变化规 律如表40所示: .表 40.充电扩展状态的持续时间 周期数 1 2 … ECDT ECDT+1 ECDT+2 ECDT+3 ECDT+4 … 2*ECDT+1 2*ECDT+2 2*ECDT+3 2*ECDT+4 充电扩展状态持续时间 0 1 ECDT-1 ECDT ECDT+1 ECDT ECDT-1 … 2 1 0 1 483 21.3.6 21.3.7 21.3.8 21.3.9 周期数 2*ECDT+5 … GD32F1x0 用户手册 充电扩展状态持续时间 2 … PIN 模式和 TSI 控制 每一个引脚组包括4个引脚,每个这些引脚任意一个都能够被用作采样引脚或通道引脚。但是 在一个引脚组内,只有一个引脚应配置为采样引脚,通道引脚可以是多于一个,但任何情况下 采样引脚和通道引脚都不能配置为同一个引脚。 一旦在GPIO中将一个引脚配置为TSI引脚,并在TSI中将其配置为采样或通道引脚,则在电荷 转移序列中,该引脚的模式就由TSI控制。一般情况下,每个引脚有3种模式:输入,输出高, 输出低。一个通道引脚或采样引脚在电荷转移序列期间的模式已在表39中具体描述,它们在序 列空闲时的模式由TSI_CTLR寄存器中的PINMOD位定义。此外,如果一个引脚在GPIO中配置 为TSI引脚,但在TSI模块配置中它既不是采样引脚,也不是通道引脚,我们称之为自由引脚, 该引脚的模式也由TSI_CTLR寄存器的PINMOD位定义。 ASW 和迟滞模式 当状态机正在运行时,一个通道或采样引脚的模拟开关由电荷转移序列控制,如表39所示。当 状态机处于空闲状态时,这些引脚的模拟开关由TSI_ASW寄存器的ASW位控制,此外所有的 自由引脚的模拟开关也由ASW位控制(自由引脚的定义见上一节)。 值得注意的是,TSI模块会始终控制引脚的模拟开关,即使这些引脚在GPIO中没有配置成TSI 引脚。用户可以利用这个特性,通过软件读写ASW位来控制这些模拟开关,同时通过GPIO方 式直接配置引脚的输出/输入模式,这样就可以实现用户自定义的电荷转移序列。TSI每个引脚 的施密特触发器迟滞模式是由TSI_PHMR寄存器PHM位配置。 TSI 操作流 TSI的正常软件运行流程如下所示: 系统初始化,如系统时钟配置,TSI相关的GPIO配置等等。 按要求编程TSI_CTLR,TSI_CP,TSI_IER,TSI_SP和GEx位/位域TSI_GCTRL。 通过设置TSI_CTLR寄存器的TSIEN位使能TSI。 软件触发模式:设置TSIST位以开始充电传输序列;硬件触发模式:TSI由触发引脚的下降沿/ 上升沿启动。 等待在TSI_STR的CTCF或MCF标志和通过设置TSI_CEFR清除这些标志。 读出TSI_GCYCNR寄存器的GCYCN位。 TSI 标志和中断 484 表 41. TSI 错误和标志位 标识名称 描述 CTCF TSI 停止因为所有引脚组的采样电压 MCE Vs都达到了阈值电压 Vth . TSI 停止由于周期数到达最大值 GD32F1x0 用户手册 清零 TSI_CEFR 寄存器的 CCTCF 位 TSI_CEFR 寄存器的 CMCE 位 21.3.10 TSI GPIOs 表 42. TSI 引脚 TSI 组 第 1 引脚组 第 2 引脚组 第 3 引脚组 第 4 引脚组 第 5 引脚组 第 6 引脚组 TSI 引脚 PIN1 PIN2 PIN3 PIN4 PIN1 PIN2 PIN3 PIN4 PIN1 PIN2 PIN3 PIN4 PIN1 PIN2 PIN3 PIN4 PIN1 PIN2 PIN3 PIN4 PIN1 PIN2 PIN3 PIN4 GPIO 引脚 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PC5 PB0 PB1 PB2 PA9 PA10 PA11 PA12 PB3 PB4 PB6 PB7 PB11 PB12 PB13 PB14 21.4 TSI 寄存器 21.4.1 TSI 控制寄存器 (TSI_CTLR) 地址偏移: 0x00 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 485 rw 15 ECDIV rw CDT[3:0] rw rw rw 14 13 12 CTCDIV[2:0] rw rw rw GD32F1x0 用户手册 CTDT[3:0] ECDT[6:0] ECEN rw rw rw rw rw rw rw rw rw rw rw rw 11 10 9 8 保留 7 6 MCN[2:0] 5 4 3 PINMOD ES 2 1 0 TM TSIST TSIEN rw rw rw rw rw rw rw rw 位/位域 31:28 27:24 23:17 16 15 14:12 名称 CDT[3:0] CTDT[3:0] ECDT[6:0] ECEN ECCDIV CTCDIV[2:0] 描述 充电状态持续时间 CDT[3:0] 由软件置位和清除。 这些位控制在电荷转移序列中充电状态的持续时间 0000: 1 × tCTCLK 0001: 2 × tCTCLK 0010: 3 × tCTCLK …. 1111: 16 × tCTCLK 电荷转移状态持续时间 CTDT[3:0] 由软件置位和清除。 这些位控制在电荷转移序列电荷转移状态的持续时间 0000: 1 × tCTCLK 0001: 2 × tCTCLK 0010: 3 × tCTCLK …. 1111: 16 × tCTCLK 充电扩展状态最大持续时间 ECDT[6:0] 由软件置位和清除。 这些位控制充电扩展状态的最大持续时间。注:仅当 TSI_CTLR寄存器的ECEN位置1时才有充电扩展状态出现. 0000000: 1 × tECCLK 0000001: 2 × tECCLK 0000010: 3 × tECCLK …. 1111111: 128 × tECCLK 充电扩展状态使能 0: 充电扩展禁用 1: 充电扩展启用 ECCLK时钟分频系数 ECCLK由HCLK分频得到,ECDIV定义了分频系数 0: fECCLK = fHCLK 1: fECCLK = 0.5fHCLK CTCLK 时钟分频系数 CTCLK由HCLK分频得到,CTCDIV定义了分频系数 000: fCTCLK = fHCLK 001: fCTCLK = fHCLK /2 010: fCTCLK = fHCLK /4 011: fCTCLK = fHCLK /8 …. 486 11:8 保留 111: fCTCLK = fHCLK /128 必须保持复位值 GD32F1x0 用户手册 7:5 MCN[2:0] 一个序列的最大周期数 MCN[2:0] 定义电荷转移序列的最大充电、转移周期数,一旦达到这个值,不论采样电 压是否达到阈值电压序列都会停止。 000: 255 001: 511 010: 1023 011: 2047 100: 4096 101: 8191 110: 16383 111: 保留 4 PINMOD 引脚模式 该位定义在状态机为空闲状态时TSI引脚的模式,同时也定义自由引脚的模式 0: 输出低电平 1: 悬空输入 3 ES 边沿类型选择 该位定义硬件触发模式下的边沿类型 0: 下降沿触发 1: 上升沿触发 2 TM 触发模式选择 0: 软件触发模式,当TSIST位置位后,序列将开始 1: :硬件触发模式, 序列将启动,在触发引脚检测到一个上升沿或下降沿. 1 TSIST TSI 启动 在软件触发模式下,由软件置1,用于启动一次电荷转移序列,序列结束后硬件自动清零。 软件也可以手动清零它来手动停止序列。 0: TSI不启动 1: TSI启动 0 TSIEN TSI 使能 0: TSI模块启用 1: TSI模块禁用 21.4.2 TSI 错误中断或标志中断使能寄存器 (TSI_IER) 地址偏移: 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 保留 MCEIE CRCFIE rw rw 487 GD32F1x0 用户手册 位/位域 31:2 1 名称 保留 MCEIE 0 CRCFIE 描述 必须保持复位值 最大计数错误中断使能 0: MCE 中断禁用 1: MCE 中断被使能 电荷转移完成标志中断使能 0: CTCF 中断禁用 1: CTCF 中断被使能 21.4.3 TSI 清错误或标志寄存器 (TSI_CEFR) 地址偏移: 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 保留 CMCE CCTCF w w 位/位域 31:2 1 名称 保留 CMCE 0 CCTCF 描述 必须保持复位值 清除最大计数错误 0: 保留 1: 清 MCE 清除电荷转移完成标志 0: 保留 1: 清 CTCF 21.4.4 TSI 状态寄存器 (TSI_STR) 地址偏移: 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 保留 MCE CTCF r r 488 GD32F1x0 用户手册 位/位域 31:2 1 名称 保留 MCE 0 CTCF 描述 必须保持复位值 最大计数错误 因为到达MCN[2:0]定义的最大周期数,电荷转移序列停止。该位由硬件置位,软件可通 过向TSI_CEFR寄存器的CMCE位写1来清零。 0: 没有最大计数错误 1: 最大计数错误 电荷转移完成标志 因为所有的使能的组的采样引脚达到电压阈值或到达MCN[2:0]定义的最大周期数,电荷 转移序列停止。该位由硬件置位,软件可通过向TSI_CEFR寄存器的CCTCF位写1来清 零。 0:电荷转移没有完成 1:电荷转移完成 21.4.5 TSI 引脚迟滞模式寄存器 (TSI_PHMR) 地址偏移: 0x10 复位值: 0x0000 0000 31 30 15 G4P4 rw 14 G4P3 rw 29 13 G4P2 rw 28 27 保留 12 G4P1 rw 11 G3P4 rw 26 25 24 23 22 21 20 19 18 17 16 G6P4 G6P3 G6P2 G6P1 G5P4 G5P3 G5P2 G5P1 rw rw rw rw rw rw rw rw 10 9 8 7 6 5 4 3 2 1 0 G3P3 G3P2 G3P1 G2P4 G2P3 G2P2 G2P1 G1P4 G1P3 G1P2 G1P1 rw rw rw rw rw rw rw rw rw rw rw 位/位域 31:24 23:0 21.4.6 名称 保留 GxPy 描述 必须保持复位值 引脚迟滞模式 该位由软件置位和清除 0: Pin GxPy 施密特触发迟滞模式禁用 1: Pin GxPy 施密特触发迟滞模式使能 TSI 模拟开关寄存器 (TSI_ASWR) 地址偏移: 0x18 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 G6P4 G6P3 G6P2 G6P1 G5P4 G5P3 G5P2 G5P1 489 15 G4P4 rw 14 G4P3 rw 13 G4P2 rw 12 G4P1 rw GD32F1x0 用户手册 11 G3P4 rw rw rw rw rw rw rw rw rw 10 9 8 7 6 5 4 3 2 1 0 G3P3 G3P2 G3P1 G2P4 G2P3 G2P2 G2P1 G1P4 G1P3 G1P2 G1P1 rw rw rw rw rw rw rw rw rw rw rw 位/位域 31:24 23:0 名称 保留 GxPy 描述 必须保持复位值 模拟开关状态. 该位由软件置位和清除 0: GxPy 的模拟开关断开 1: GxPy 的模拟开关闭合 21.4.7 TSI 采样引脚寄存器 (TSI_SPR) 地址偏移: 0x20 复位值: 0x0000 0000 31 30 15 G4P4 rw 14 G4P3 rw 29 13 G4P2 rw 28 27 保留 12 G4P1 rw 11 G3P4 rw 26 25 24 23 22 21 20 19 18 17 16 G6P4 G6P3 G6P2 G6P1 G5P4 G5P3 G5P2 G5P1 rw rw rw rw rw rw rw rw 10 9 8 7 6 5 4 3 2 1 0 G3P3 G3P2 G3P1 G2P4 G2P3 G2P2 G2P1 G1P4 G1P3 G1P2 G1P1 rw rw rw rw rw rw rw rw rw rw rw 位/位域 31:24 23:0 名称 保留 GxPy 描述 必须保持复位值 采样引脚模式 该位由软件置位和清除 0: GxPy 引脚不是采样引脚 1: GxPy 引脚是采样引脚 21.4.8 TSI 通道引脚寄存器 (TSI_CPR) 地址偏移: 0x28 复位值: 0x0000 0000 31 30 15 G4P4 rw 14 G4P3 rw 29 13 G4P2 rw 28 27 保留 12 G4P1 rw 11 G3P4 rw 26 25 24 23 22 21 20 19 18 17 16 G6P4 G6P3 G6P2 G6P1 G5P4 G5P3 G5P2 G5P1 rw rw rw rw rw rw rw rw 10 9 8 7 6 5 4 3 2 1 0 G3P3 G3P2 G3P1 G2P4 G2P3 G2P2 G2P1 G1P4 G1P3 G1P2 G1P1 rw rw rw rw rw rw rw rw rw rw rw 490 GD32F1x0 用户手册 位/位域 31:24 23:0 名称 保留 GxPy 描述 必须保持复位值 通道引脚模式 该位由软件置位和清除 0: GxPy 引脚不是通道引脚 1: GxPy 引脚是通道引脚 21.4.9 TSI 组控制寄存器 (TSI_GCTLR) 地址偏移: 0x30 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 保留 15 14 13 12 11 10 9 8 7 保留 22 21 20 19 18 17 16 GC6 GC5 GC4 GC3 GC2 GC1 r r r r r r 6 5 4 3 2 1 0 GE6 GE5 GE4 GE3 GE2 GE1 rw rw rw rw rw rw 位/位域 31:24 21:16 名称 保留 GCx 15:6 保留 5:0 GEx 描述 必须保持复位值 组完成 当一个使能组的电荷转移序列完成的时候,该位由硬件置位。 当一个新的电荷转移序 列开始的时候,由硬件清0。 0: 组 x 电荷转移没有完成 1: 组 x 电荷转移完成 必须保持复位值 引脚组使能 该位由软件置位和清除 0: 引脚组 x 禁用 1: 引脚组 x 使能 21.4.10 TSI 组 x 周期数寄存器 (TSI_GxCYCNR) 地址偏移: 0x30 + 0x04 x Group Number 复位值: 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 491 GD32F1x0 用户手册 保留 CYCN[13:0] r r r r r r r r r r r r r r 位/位域 31:14 13:0 名称 保留 CYCN[13:0] 描述 必须保持复位值 周期数目r 这些位反映了电荷转移序列完成时组X执行的周期数。当一个新的电荷转移序列开始的 时候,由硬件清0。 492 GD32F1x0 用户手册 22 HDMI-CEC 控制器 (HDMI-CEC) 22.1 22.2 简介 消费电子控制 (CEC)是 HDMI(高清多媒体接口)的一部分(标准见附录 1)。CEC 是一个提供 在所有的用户环境中各种音像制品之间的高层次的控制功能的协议。 HDMI-CEC 控制器提供 了对 CEC 协议的硬件支持。 主要特征  符合HDMI-CEC1.4规范。  32.768KHz 的CEC时钟具有两个时钟源可供选择: 1) LSE 振荡器 2) 固定分频后的HSI 振荡器 (HSI/244)  为了超低功耗应用,CEC控制器可工作在Deepsleep模式。  可配置仲裁优先级的的SFT(信号空闲时间): 1) 用户配置 2) 控制器根据HDMI-CEC协议规格自动配置  可编程的私有地址(OADR)  支持监听模式,在不干扰CEC总线情况下接收CEC总线上的数据。  RX位宽容度扩展功能支持更高的兼容性  位错误检测 1) 短位错误(SBPE) 2) 长位错误(LBPE) 3) 位上升沿错误(BRE)  可配置的错误位生成条件 1) SBPE检测总会生成错误位 2) LBPE检测只有在LBPEGEN=1的时候生成错误位 3) BRE检测只在BREGEN=1的时候生成错误位  传输错误检测(TE)  传输欠载检测(TU) 493 22.3  接收过载检测(RO)  仲裁丢失检测(ARBLST),带自动发送重试 功能说明 GD32F1x0 用户手册 22.3.1 CEC 总线引脚 CEC控制器用单根双向线来发送和接收数据,CEC引脚通过外接一个27KΩ 的上拉电阻连接到 +3.3 V电源电压。 控制器的输出级,必须用漏极开路或集电极开路方式,以实现逻辑与的线路连接。 使用HDMI-CEC控制器时,需要配置CEC引脚为AF Open drain模式,并且需外接27KΩ的上拉 电阻。 图 246 HDMI-CEC 控制器框图 ARM Cortex-M3 AHB Bus HIS/ 244 RCC LSE AHB to APB Bridge AHB Bus Interrupt/Wake CEC Clock HDMI-CEC Interface and Registers HDMI-CEC Controller HDMI-CEC Core MCU 3.3V 27KΩ CEC PAD CEC Bus line CEC Device 1 CEC Device 2 22.3.2 信息说明 完整的信息包括一帧或者多帧,信息结构如下: 总线 起始位 帧头 数据帧 数据帧 数据帧 总线 .... 高 高 帧有两种类型: 1) 帧头: 信息中紧接着起始位的第一帧,包含信号源的逻辑地址和信号目的地的逻辑地址 2) 数据帧: 信息中除了帧头的其他帧 494 所有的帧长度都是10位并且有相同的基本结构如下: GD32F1x0 用户手册 22.3.3 帧结构 76543210 信息位 信息位是数据、指令还是地址取决于应用环境。 EOM ACK 控制位EOM和ACK在一帧中会始终出现,并且所代表的意义相同。 位时序说明 信息中所有位的时序都被分成两种类型:起始位和数据位 1) 起始位:起始位通过一段低电平持续时间(a)的来表示有效,其总周期(b)如下: Start Bit Timing High Impedence b a Low Impedence 0ms 3.5ms 3.9ms 4.3ms 4.7ms 3.7ms 4.5ms 2) 数据位:有效数据位的时序约束如下: Data Bit Timing High Impedence Low Impedence Safe Sample Period 1.5ms Logic 0 2.4ms High Impedence Low Impedence 0.6ms Logic 1 2.4ms Ts T1 T2 T3 T4 T5 T6 T7 T8 Nominal sample time 1.05 ms 表 43.数据位时序参数表 Ts 时间 (ms) 位起始 T1 0.4ms 传输逻辑1的时候从低电平到高电平过渡的最早时间 T2 0.8ms 传输逻辑1的时候从低电平到高电平过渡的最晚时间 T3 0.85ms 可以对信号线安全采样的最早时间 T4 1.25ms 可以对信号线安全采样的最晚时间 T5 1.3ms 允许设备返回高阻态(逻辑0)的最早时间 T6 1.7ms 允许设备返回高阻态(逻辑0)的最晚时间 T7 2.05ms 下一位开始的最早时间 495 22.3.4 Ts 时间 (ms) 2.4ms T8 2.75ms GD32F1x0 用户手册 位起始 额定数据位周期总长 下一位开始的最晚时间 仲裁 CEC线仲裁阶段伴随着起始位的前沿出现,直到启动器地址位的末端。在此期间,启动器监视 CEC线,如果它监测到非自身驱动的低阻态,那么就认为失去了仲裁。 | 仲裁相位 | 总线 开始位 高 启动器[7:4] 目标器[3:0] EOM ACK 总线 高 在试图传输或者再次传输一帧之前,CEC设备应该确保CEC总线信号已经空闲了大量时间。 这个信号空闲时间的起点为先前帧结束位的开始时刻。 SFT of three nominal bit period ACK bit of last frame of previous message 22.3.5 Start bit of next message 需要的信号空闲时间长度取决于当前控制信号线的状态和设备的初始值。 如果 SFT=0x0,HDMI-CEC控制器的SFT将有如下表现: 应用场景 先前的启动器在发送之前信息后想立即发送另一个信息 新的启动器想发送一个信息 先前的信息发送不成功 信号空闲时间 (额定 信号位周期) ≥7 ≥5 ≥3 这意味着在当前设备完成发送当前信息之后,其他设备有机会在以上空闲时间内进入CEC线并 发送自己的信息。 如果SFT不是0x0,会执行相应的用户所配置的SFT时间 SFTOPT 位说明 SFT选项位可通过设置更多的SFT计数器的启动时间点来节省总线闲置时间。 当SFTOPT = 0时,SOM位生效时,SFT定时器将在控制器处于闲置状态下启动 496 22.4 GD32F1x0 用户手册 当SFTOPT = 1时,SFT定时器将在CEC总线处于空闲状态下启动。此时如果在SFT结束后配 置SOM,会节省SFT时间,因为控制器启动传输的时候不再需要等待时间。 当SFTOPT = 1时,某些事件也可能启动SFT计数器:  常规TX/RX收发结束(TEND/REND有效)  传输没有结束例如TE,TAE或TU有效  接收过程中,如果监测到错误且产生错误位,SFT定时器在输出错误位结束后启动。 错误定义 22.4.1 错误位 如果发生错误且相应产生配置使能,HDMI-CEC 控制器将在CEC引脚上产生一个错误位来提 示错误。错误位周期定义如下: 22.4.2 22.4.3 22.4.4 High impedence Low impedence 3.6ms +/- 0.24ms Error-Bit Timing 帧错误 CEC协议规定信息的每一帧需要受到确定信号来确保传输成功。对于广播(目的地址=0xF)来说, ACK位应该为逻辑1;对于单播(目的地址<>0xF)来说,ACK位应该为逻辑0,否则将产生帧错 误(TAE/RAE标志位生效) 另一个帧错误产生的情况是当HDMI-CEC 控制器处于启动器阶段时,CEC总线电平和CEC控 制器输出电平不同(TE会置位)。 位上升错误(BRE) 如果在BRE检查窗口的时候监测到上升沿,BRE标志位会置位;如果BREIE=1,BRE标志位 也会产生CEC中断。 如果BRESTP=1,控制器将停止接受信息,BREGEN=1,错误位将产生。 如果BRESTP=1,在广播时BRE标志位会置位,并且会产生错误位来通知启动器有错误发生。 如果不想产生监测BRE的错误位,可以配置BREGEN=0且BCNG=1。 注: 不可同时配置BRESTP=0和BREGEN=1 短位错误 (SBPE) 当相邻的下降沿周期比预期短的时候,SBPE被置1。 497 22.4.5 如果SBPEIE=1,SBPE标志位也会产生CEC中断。 GD32F1x0 用户手册 如果SBPE错误标志置位,一定会输出错误位,除了以下情况: (1). BCNG = 1 (2). LSTN = 1 (3).接收广播 长位错误(LBPE) 当相邻下降沿周期比预期长时,LBPE位被置1。 如果LBPEIE=1,LBPE标志位也会产生CEC中断。 如果LBPE标志位置位,控制器将会停止接收信息并产生错误位除非以下情况发生:, (1). 单次播放和广播模式下LBPEGEN=1 (2). 广播模式下BCNG=0 Legend: Checking Window SBPE LBPE High Impedence Low Impedence High Impedence Low Impedence 1.5ms Logic 0 2.4ms BRE 0.6ms BRE Ts T1 T2 T3 T4 T5 Nominal sample time 1.05 ms Logic 1 2.4ms T6 T7 T8 表 44.错误处理时序参数表 时间 RXTOL ms 说明 Ts - 0ms 开始传输时刻 1 0.3ms T1 0 0.4ms 传输逻辑1的低电平到高电平的转换最早时间 0 0.8ms T2 1 0.9ms 传输逻辑1的低电平到高电平转换的最晚时间 T3 - 0.85ms 对信号线安全采样的最早时间 T4 - 1.25ms 对信号线安全采样的最晚时间 1 1.2ms T5 0 1.3ms 允许设备返回到高阻态(逻辑0)的最早时间 0 1.7ms T6 1 1.8ms 允许设备返回到高阻态(逻辑0)的最晚时间 498 22.4.6 1 1.85ms T7 0 2.05ms 2.4ms 0 2.75ms T8 1 2.95ms GD32F1x0 用户手册 下一位开始传输的最早时间 额定数据位周期 下一位开始传输的最晚时间 传输错误监测(TE) 当启动器在CEC总线传输高组态的时候监测到总线呈低阻态时,TE被置1。 如果TEIE=1时,TE也会产生CEC中断。 当TE置位时,传输停止,软件可以重启传输。 TE检查窗口依赖于帧的不同位状态如下: Legend: Checking Window High Impedence Low Impedence High Impedence Low Impedence Ts TX arb-bit=0/1 TX data=0 1.5ms TX data=1 2.4ms TX ack Logic 0 0.6ms Nominal sample time 1.05 ms T1 T2 T3 T4 T5 Logic 1 2.4ms T6 T7 T8 表 45. TE 时序参数表 时间 RXTOL ms Ts - 0ms 说明 传输开始位 1 0.3ms T1 0 0.4ms 传输逻辑1时低电平到高电平的转换最早时间 0 0.8ms T2 1 0.9ms T3 - 0.85ms T4 - 1.25ms 传输逻辑1时低电平到高电平转换的最晚时间 信号线安全采样的最早时间 信号线安全采样的最晚时间 1 1.2ms T5 0 1.3ms 0 1.7ms T6 1 1.8ms 允许设备返回到高阻态(逻辑0)的最早时间 允许设备返回到高阻态(逻辑0)的最晚时间 1 1.85ms T7 0 2.05ms 2.4ms T8 0 2.75ms 下一位开始传输的最早时间 额定数据位周期 下一位开始传输的最晚时间 499 22.5 1 2.95ms HDMI-CEC 中断 GD32F1x0 用户手册 22.6 HDMI-CEC控制器中有13个中断,每个中断由相应的标志位和中断使能位组成。 编号 1 2 3 4 5 6 7 8 9 10 11 12 13 HDMI-CEC中断事件 丢失仲裁 传输字节请求 传输结束 传输字节缓冲区欠载 传输错误 传输确认错误 接收字节请求 接收结束 接收过载 接收位上升沿错误 接收位短位错误 接收位长位错误 接收位确认错误 事件标志位 ARBLST TBR TEND TU TE TAE RBR REND RO BRE SBPE LBPE RAE 中断使能位 ARBLSTIE TBRIE TENDIE TUIE TEIE TAEIE RBRIE RENDIE ROIE BREIE SBPEIE LBPEIE RAEIE 注: HDMI-CEC的任何中断都将使芯片从深度睡眠模式唤醒。 HDMI-CEC 寄存器 22.6.1 CEC 控制寄存器 (CEC_CTLR) 地址偏移: 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 保留 EOM SOM CECON rs rs rw 位 位域 31:3 保留 2 EOM 说明 保持复位值 发送模式下下一帧的EOM位值 当CECON=1时EOM只能被软件写入。EOM被硬件清0,SOM也一样。 0: 在EOM位下一帧发送0 500 1: 在EOM位下一帧发送1 GD32F1x0 用户手册 1 SOM 启动发送一帧信息 当CECON=1时SOM只能被软件写入。在以下任意标志位置位以后,SOM被硬件清0: TEND, TU, TAE, TE 和CECON=0 如果信息只有一帧,配置txdata之前EOM应该被置1。SOM被置1以后,SFT计数器启动, 当SFT计数结束,Start-bit将输出到CEC总线上。软件可以在SOM=1的时候通过清除 CECON位来取消发送。 0: 无CEC传输 1: CEC传输挂起或者正在进行。 0 CECON 使能/禁止HDMI-CEC控制位。 CECON位由软件配置. 0: 禁止HDMI-CEC控制器,取消任何信息发送并清除EOM/SOM位 1: 使能CEC控制器,如果SOM=0,进入接收状态。 22.6.2 CEC 设置寄存器 (CEC_SR) 地址偏移: 0x04 复位值: 0x0000 0000 注:该寄存器只有在 CECON=0 的时候才能写入 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 LSTN OADR [14:0] rw rw 15 14 13 12 11 10 9 8 7 6 5 4 3 21 0 SFT BRE BRE RX 保留 BCNG LBPEGEN SFT[2:0] OPT GEN STP TOL 位 位域 说明 rw rw rw rw rw rw rw 31 LSTN 监听模式使能位 软件置1和清0 0: 只接收OADR中带有正确ACK的单播信息或广播信息。 1: 接收OADR的信息时给出正确ACK;接收不是OADR的信息,不发送ACK。 30:16 OADR 自身地址 OADR的每一位代表一个目的地址。例如,如果oar[0]=1,控制器将接收发送目的地址 为0x0的信息。这意味着控制器可以配置为多个私有地址。广播信息始终被接收。 接收到目的地址(帧头的后4位)以后,如果在oar中声明了,控制器将收到积极反馈信息, 如果目的地址不在oar中但LSTN=1,控制器将接收信息但不反馈ACK。如果在oar中没 有声明且LSTN=0,控制器将不会接收该信息。 15:9 保留 保持复位值 8 SFTOPT SFT选项位 软件置1和清0 0: SOM置1后SFT计数器开始计数 501 1:发收/接收结束后SFT计数器自动启动 GD32F1x0 用户手册 7 BCNG 广播信息模式下不产生错误位 软件置1和清0 0: 广播模式下,当LSTN=1时BRE和LBPE将在CEC总线上产生错误位, SBPE也将产生 错误位。 1:以上条件下不产生错误位 6 LBPEGEN 在单播模式下监测到LBPE的时候产生错误位 软件置1和清0 0: 在单播模式下监测到LBPE时不产生错误位 1: 在单播模式下监测到LBPE时产生错误位 5 BREGEN 在单次传播模式下监测到BRE的时候产生错误位 软件置1和清0 0: 在单播模式下监测到BRE的时候不产生错误位 1: 在单播模式下监测到BRE的时候产生错误位 4 BRESTP 监测到BRE时是否停止接收信息 软件置1和清0 0: 不停止接收BRE下的信息,数据位按额定时间采样 1: 停止接收BRE下的信息. 3 RXTOL 接收位时间宽容度 软件置1和清0 0: 标准接收位时间宽容度 1: 扩展接收位时间宽容度. 2:0 SFT 信号空闲时间 软件置1和清0 如果SFT=0x0,SFT时间跟HDMI-CEC协议描述的一样,否则,SFT时间被软件固定配 置。ACK位传输的下降沿启动计时。 0x0: - 3个额定数据位周期。如果SFT计数器是由于传输不成功而启动 ((ARBLST=1,TE=1,TU=1或TAE=1)) - 5个额定数据位周期。如果CEC控制器是一次新的传输 - 7个额定数据位周期,如果CEC控制器成功完成传输 0x1: 1.5个额定数据位周期 0x2: 2.5个额定数据位周期 0x3: 3.5个额定数据位周期 0x4: 4.5个额定数据位周期 0x5: 5.5个额定数据位周期 0x6: 6.5个额定数据位周期 0x7: 7.5个额定数据位周期 502 22.6.3 CEC 数据发送寄存器 (CEC_TDTR) 地址偏移: 0x08 GD32F1x0 用户手册 复位值: 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 保留 txdata[7:0] w 位 位域 31:8 保留 7:0 txdata 说明 保持复位值 发送数据寄存器 只写 22.6.4 CEC 数据接收寄存器 (CEC_RDTR) 地址偏移: 0xC 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 rxdata7:0] r 位 位域 31:8 保留 7:0 rxdata 说明 保持复位值 接收数据寄存器 只读,该位包含从CEC线接收的最后数据字节。 22.6.5 CEC 中断状态寄存器 (CEC_ISTR) 地址偏移: 0x10 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 503 位 31:13 12 11 10 9 8 7 6 5 TAE TE TU rc_w1 rc_w1 rc_w1 TEND rc_w1 TBR ARBLST rc_w1 rc_w1 RAE rc_w1 LBPE rc_w1 GD32F1x0 用户手册 SBPE rc_w1 BRE RO REND RBR rc_w1 rc_w1 rc_w1 rc_w1 位域 保留 TAE TE TU TEND TBR ARBLST RAE 说明 保持复位值 发送ACK错误标志位 硬件置1,软件写1清0 单播模式下ACK位作为1被接收及广播模式下作为0被接收将使该标志位生效。TAE将停 止发送信息并清除SOM和EOM。 发送错误 该位由硬件置1,软件写1清零 如果控制器在启动器阶段下且监测到CEC线上非控制器输出的低阻态,TE置位。TE将 停止发送信息且清除SOM和EOM。 发送数据欠载 该位由硬件置1,软件写1清零 在发送下一字节之前如果软件没有写数据,TU生效。TU将停止发送信息并且清除SOM 和EOM 发送成功结束 该位由硬件置1,软件写1清零 如果信息的所有帧成功传输,TEND位有效,TEND将清除SOM和EOM位。 发送字节数据请求 该位由硬件置1,软件写1清零 当前帧的第四位传输结束后,TBR位生效,软件需要在6个额定数据位周期内写数据到 txdata。 仲裁丢失 该位由硬件置1,软件写1清零 以下任一情况发生时ARBLST位生效:外部CEC设备在控制器处于SFT状态时为了发送 起始位拉低CEC线,或者控制器和CEC设备同时发送起始位但是控制器的启动器地址优 先级更低。 如果ARBLST生效,控制器将进入接收状态,接收信息结束后控制器将重新尝试发送消 息。发送和接收期间,SOM始终被置1。 接收ACK错误 该位由硬件置1,软件写1清零 以下情况RAE生效,在广播模式下如果ACK=0;或者LSTN=1且目的地址不是OADR的 单播模式下,ACK=1。RAE将停止接收信息。 LBPE 长位周期错误 该位由硬件置1,软件写1清零 数据位周期超过最大时间范围的时候LBPE生效。LBPE将停止接收信息且在以下情况产 504 GD32F1x0 用户手册 生错误位:单次传播模式下LBPEGEN=1,或广播模式下BCNG=0 4 SBPE 短位周期错误 该位由硬件置1,软件写1清零 数据位周期小于最小周期的时候SBPE位生效。 3 BRE 位上升错误 该位由硬件置1,软件写1清零 期望时间外产生上升沿时,BRE生效。 2 RO 接收过载 该位由硬件置1,软件写1清零 接收新的字节且RBR被置1时RO生效 RO将停止接收信息并发送错误ACK位 1 REND 接收结束 该位由硬件置1,软件写1清零 当控制器完整接收到带有成功ACK反馈的全部信息的时候REND置位。REND和RBR同 时生效 0 RBR 接收字节数据接收 该位由硬件置1,软件写1清零 当控制器接收到带有成功ACK反馈的数据的时候RBR生效,此时rxdata有效。 22.6.6 CEC 中断使能寄存器 (CEC_IER) 地址偏移: 0x14 复位值: 0x0000 0000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 rw 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TAEIE TEIE TUIE TXENDIE TBRIE ARBLSTIE RAEIE LBPEIE SBPEIE BREIE ROIE RENDIE RBRIE rw rw rw rw rw rw rw rw rw rw rw rw rw 位 31:13 12 位域 保留 TAEIE 11 TEIE 说明 保持复位值 TAE中断使能. 软件置1和清0 0: TAE中断禁止 1: TAE中断允许 TE中断使能. 软件置1和清0 0: TE中断禁止 505 1: TE中断允许 10 TUIE TU中断使能. 软件置1和清0 0: TU中断禁止 1: TU中断允许 9 TENDIE TEND中断使能. 软件置1和清0 0: TEND中断禁止 1: TEND中断允许 8 TBRIE TBR中断使能. 软件置1和清0 0: TBR中断禁止 1: TBR中断允许 7 ARBLSTIE ALRLST中断使能. 软件置1和清0 0: ARBLST中断禁止 1: ARBLST中断允许 6 RAEIE RAE中断使能. 软件置1和清0 0: RAE中断禁止 1: RAE中断允许 5 LBPEIE LBPE中断使能. 软件置1和清0 0: LBPE中断禁止 1: LBPE中断允许 4 SBPEIE SBPE中断使能. 软件置1和清0 0: SBPE中断禁止 1: SBPE中断允许 3 BREIE BRE中断使能. 软件置1和清0 0: BRE中断禁止 1: BRE中断允许 2 ROIE RO中断使能. 软件置1和清0 0: RO中断禁止 1: RO中断允许 1 RENDIE REND中断使能. 软件置1和清0 GD32F1x0 用户手册 506 0: REND中断禁止 1: REND中断允许 0 RBRIE RBR中断使能. 软件置1和清0 0: RBR中断禁止 1: RBR中断允许 GD32F1x0 用户手册 507 23 版本历史 表 46. 版本历史 版本号. 1.0 说明 初稿发布 GD32F1x0 用户手册 日期 2014 年 3 月 508

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。