ch32v307_camera/doc/CH32FV2x_V3xRM.md
2026-03-13 22:22:45 +08:00

1018 KiB
Raw Permalink Blame History

Page 1

CH32F/V20x_V30x_V31x 系列应用手册 V2.4 说明 CH32F20x系列产品是基于ARM○RCortexTM-M3内核设计的通用微控制器与大部分ARM工具和软件 兼容。提供了丰富的通讯接口和控制单元,适用于大部分控制、连接、综合等嵌入式领域。 CH32V20x、CH32V30x和CH32V31x系列是基于32位RISC-V指令集及架构设计的工业级通用微控 制器。依据产品性能和资源差异搭配了不同的内核型号。CH32V203采用青稞V4B内核支持硬件中断 堆栈提升中断响应效率CH32V208采用青稞V4C内核进一步加快硬件除法运算速度并增加了内 存保护功能CH32V303/305/307/317采用青稞V4F内核进一步支持了硬件浮点运算。该系列产品挂 载了丰富的外设接口和功能模块。其内部组织架构满足低成本低功耗嵌入式应用场景。 本手册针对用户的应用开发提供了CH32F20x系列、CH32V20x系列、CH32V30x系列和CH32V31x 系列产品的详细使用信息,适用于系列中不同存储器容量、功能资源、封装的产品,若有差异将在对 应的功能章节做特殊说明。 注1CH32F20x包括CH32F203、CH32F205、CH32F207、CH32F208 2CH32V20x包括CH32V203、CH32V208 3CH32V30x包括CH32V303、CH32V305、CH32V307 4CH32V31x包括CH32V317。 有关此系列产品的器件特性请参考以下数据手册。 CH32F20x_D6《CH32F203DS0》 CH32F20x_D8、CH32F20x_D8C《CH32F207DS0》。 CH32F20x_D8W《CH32F208DS0》。 CH32V20x_D6、CH32V20x_D8《CH32V203DS0》。 CH32V20x_D8W《CH32V208DS0》。 CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C《CH32V307DS0》。 有关ARM○RCortexTM-M3内核的相关信息请参考《ARM® Cortex®-M3 Processor Technical Reference Manual Revision r2p1》可在ARM公司网站下载。 有关RISC-V内核的相关信息可参考QingKeV4微处理手册《QingKeV4_Processor_Manual》。 CH32F20x系列产品概览 连接型 互联型 无线型 中小容量通用型F203 大容量通用型F203 F205 F207 F208 32K闪存 64K闪存 128K闪存 256K闪存 128K闪存 256K闪存 128K闪存 10K SRAM 20K SRAM 32K SRAM 64K SRAM 32K SRAM 64K SRAM 64K SRAM 2ADC(TKey) 2ADC(TKey) 2ADC(TKey) 2ADC(TKey) 2ADC(TKey) 2ADC(TKey) ADC(TKey) ADTM ADTM 2DAC 2DAC 2DAC 2DAC ADTM 2GPTM 3GPTM ADTM 4ADTM 4ADTM 4ADTM 3GPTM 2USART 4U(S)ART 3GPTM 4GPTM 4GPTM 4GPTM GPTM(32) SPI 2SPI 3USART 2BCTM 2BCTM 2BCTM 4U(S)ART I2C 2I2C 2SPI 8U(S)ART 5U(S)ART 8U(S)ART 2SPI V2.4 1

Page 2

USBD USBD 2I2C 3SPI(2I2S) 3SPI(2I2S) 3SPI(2I2S) 2I2C USBFS USBFS USBD 2I2C 2I2C 2I2C USBD CAN CAN CAN USBD OTG_FS OTG_FS USBFS RTC RTC RTC CAN USBHS(+PHY) USBHS(+PHY) CAN 2WDG 2WDG 2WDG RTC 2CAN 2CAN RTC 2OPA 2OPA 4OPA 2WDG RTC RTC 2WDG 4OPA 2WDG 2WDG 2OPA RNG 4OPA 4OPA ETH- SDIO RNG RNG 10M(+PHY) FSMC SDIO SDIO BLE5.3 FSMC DVP ETH-1000MAC 10M PHY 注:同一类产品的某些外设数量或功能可能受封装限制,选择时请确认产品封装。 CH32V20x、CH32V30x和 CH32V31x系列产品概览 连接型 互联型 互联型 无线型 中小容量通用型V203 大容量通用型V303 V305 V307 V317 V208 青稞V4B内核 青稞V4F内核 青稞V4C内核 32K闪存 64K闪存 128K闪存 256K闪存 128K闪存 256K闪存 256K闪存 128K闪存 10K SRAM 20K SRAM 32K SRAM 64K SRAM 32K SRAM 64K SRAM 64K SRAM 64K SRAM 2ADC(TKey) 2DAC 2ADC(TKey) 2ADC(TKey) 4ADTM 2DAC 2ADC(TKey) ADC(TKey) 2DAC 4GPTM 4ADTM 2DAC ADTM 4ADTM 2BCTM 4GPTM 2ADC(TKey) 2ADC(TKey) 2ADC(TKey) 4ADTM 3GPTM 4GPTM 8U(S)ART 2BCTM ADTM ADTM 2DAC 4GPTM GPTM(32) 2BCTM 3SPI(2I2S) 8U(S)ART 3GPTM 3GPTM ADTM 2BCTM 4U(S)ART 8U(S)ART 2I2C 3SPI(2I2S) 2USART 4U(S)ART 3GPTM 5U(S)ART 2SPI 3SPI(2I2S) OTG_FS 2I2C SPI 2SPI 3USART 3SPI(2I2S) 2I2C 2I2C USBHS(+PHY) OTG_FS I2C 2I2C 2SPI 2I2C USBD USBFS 2CAN USBHS(+PHY) USBD USBD 2I2C OTG_FS USBFS CAN RTC 2CAN USBFS USBFS USBFS USBHS(+PHY) CAN RTC 2WDG RTC CAN CAN CAN 2CAN RTC 2WDG 4OPA 2WDG RTC RTC RTC RTC 2WDG 4OPA RNG 4OPA 2WDG 2WDG 2WDG 2WDG 2OPA RNG SDIO RNG 2OPA 2OPA 4OPA 4OPA ETH- SDIO FSMC SDIO RNG 10M(+PHY) FSMC DVP DVP SDIO BLE5.3 ETH-1000M ETH-10M/100M MAC PHY ETH-10M PHY 注:同一类产品的某些外设数量或功能可能受封装限制,选择时请确认产品封装。 V2.4 2

Page 3

RISC-V内核版本对比概览 特点 硬件 中断 快速 整数 扩展 内存 内核 指令集 堆栈 嵌套 中断 除法 向量表模式 指令 保护 版本 级数 级数 通道数 周期 青稞V4B IMAC 2 2 4 9 地址或指令 支持 无 青稞V4C IMAC 2 2 4 5 地址或指令 支持 标准 青稞V4F IMAFC 3 8 4 5 地址或指令 支持 标准 寄存器中位属性缩写描述: 寄存器位属性 属性描述 RF 只读属性,读出固定值。 RO 只读属性,由硬件改变。 RZ 只读属性读操作后自动位清0 WO 只写属性(不可读,读值不确定) WA 只写属性,安全模式下可写入。 WZ 只写属性写操作后自动位清0 RW 可读,可写。 RWA 可读,安全模式下可写入。 RW1 可读写1有效写0无效。 RW0 可读写0有效写1无效。 RW1T 可读写0无效写1翻转。 RW1Z 可读写1清除此位写0无效。 SC 自动清除。 CH32系列 MCU分类描述 分类缩写 FLASH大小 产品分类 D6 32KB或64KB 中小容量通用型 D8 128KB或256KB 大容量通用型 D8C 128KB或256KB 连接型或互联型 D8W 128KB或256KB 无线型 注DDensity、62^6、82^8 具体分类缩写: CH32F20x_D6包括CH32F203K8、CH32F203C6、CH32F203C8 CH32F20x_D8包括CH32F203CB、CH32F203RC、CH32F203VC、CH32F203RB CH32F20x_D8C包括CH32F205RB、CH32F207VC CH32F20x_D8W包括CH32F208RB、CH32F208WB CH32V20x_D6包括CH32V203F6、CH32V203G6、CH32V203F8、CH32V203G8、CH32V203K8、CH32V203C6、 CH32V203C8 CH32V20x_D8包括CH32V203RB CH32V20x_D8W包括CH32V208GB、CH32V208CB、CH32V208RB、CH32V208WB CH32V30x_D8包括CH32V303CB、CH32V303RB、CH32V303RC、CH32V303VC CH32V30x_D8C包括CH32V305FB、CH32V305RB、CH32V305GB、CH32V307RC、CH32V307WC、CH32V307VC CH32V31x_D8C包括CH32V317SC、CH32V317WC、CH32V317VC。 V2.4 3

Page 4

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 1 章 存储器和总线架构 1.1 总线架构 CH32F20x 系列是基于 ARM○RCortexTM-M3 内核设计的微控制器其构架中的内核、仲裁单元、DMA 模块和SRAM存储等部分通过多组总线实现交互。 CH32V20x、CH32V30x 和 CH32V31x 系列产品是基于 RISC-V 指令集设计的通用微控制器,其架构 中的内核、仲裁单元、DMA模块、SRAM存储等部分通过多组总线实现交互。 图1-1 CH32F203中小容量通用型系统框图 ARM Cortex-M3 FLASH I-code Bus CTRL TPIU NVIC SWD D-code Bus Flash Memory SRAM HB to PB2 Bridge V2.4 1 XUM PB1: Fmax

144MHz @VDD VDD: 2.4V3.6V VSS SWCLK @VIO33 VIO: 2.4V3.6V SWDIO VSS @VDDA VDDA: VIO VSSA RTC/BKP TAMPER-RTC TIM2 4 channels, ETR TIM3 4 channels, ETR TIM4 4 channels USART2 RX, TX, CTS, RTS, CK USART3 RX, TX, CTS, RTS, CK USART4 RX, TX,CTS,RTE,CK System Bus XUM HB Fmax = 144MHz FS_DP USBFS FS_DM RCC LSI-RC RTC_CLK O O P P A A x x _ _ C C H H N P OPA1-2 IWDG_CLK LSE O O S S C C 3 3 2 2 _ _ I O N UT OPAx_OUT (x=1,2) HB to PB1 @VBAT Bridge EXTIT/WKUP PA0 ~ PA15 GPIOA PB0 ~ PB15 GPIOB PC0 ~ PC15 GPIOC PD0 ~ PD2 GPIOD MOSI,MISO,SCK, NSS SPI1 RX, TX, CTS, RTS, CK USART1 SPI2 MOSI, MISO, SCK , NSS 4 channels 3 complementary Channels TIM1 IWDG I2C1 SCL, SDA, SMBA ETR, BIKN WWDG I2C2 SCL, SDA, SMBA Tkey AIN0 ~ AIN9 ADC1 bxCAN1 CAN1_TX,CAN1_RX (VSSA)VREF - ADC2 (2.4V~VDDA)VREF+ USBD USBDM,USBDP Temp Sensor PB2: Fmax = 144MHz TRACESWO DMA 8Channels SYSCLK Reset & HBCLK MUX & DIV PB1CLK PB2CLK HSI-RC PLL HSE OSC_IN OSC_OUT

Page 5

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图1-2 CH32F20x连接/互联/大容量通用型)系统框图 ARM Cortex-M3 FLASH I-code Bus CTRL TPIU NVIC SWD D-code Bus Flash Memory SRAM HB to PB1 Bridge HB to PB2 Bridge EXTIT/WKUP GPIOB GPIOC GPIOD V2.4 2 PB2: Fmax

144MHz XUM PB1: Fmax

144MHz @VDD VDD: 2.4V3.6V VSS TRACESWO SWCLK @VIO33 VIO: 2.4V3.6V SWDIO VSS DMA1 7 Channels @VDDA VDDA: VIO DMA2 11 Channels VSSA TXD[3:0],TXCLK,TXEN MII RXD[3:0 C ] O ,R L X ,M ER D ,R C X ,M C P L D P K S I , O _ R , O X C D U R V T S FSMC A D CL D A K D T[ [ 1 2 5 3 : : 0 1 ] 6] TXD[1:0],TXEN NOE RMII RXD[1:0],REFCLK,CRSDV NWE RGMII T R X X D D [ [ 3 3 : : 0 0 ] ] , M , G R T X D P X C P C C , S , R , M _ T X O X D C E U T IO N T L 10 E / T 1 H 0 0 M /1 A 0 C 00 M R U e X s e & t D & IV S H P Y B B S 1 C C C L L L K K K N N N N B W A E1 L D A [ / V 1 N IT :0 C ] E2 MDC,MDIO PB2CLK 125IN RXP, RXN HSI-RC TXP, TXN 10M PHY PLL HSE OSC_IN VSYN D C A , T H [ S 1 P Y 1 C N : L 0 C K ] DVP RCC OSC_OUT VBUS OTG_FS LSI-RC ID TRNG RTC_CLK DP, DM IWDG_CLK LSE OSC32_IN USBHS OSC32_OUT HS_DP +PHY HS_DM @VBAT RTC/BKP TAMPER-RTC DAT[7:0] CM C D K SDIO TIM2 4 channels, ETR OPAx_CHP OPA1-4 TIM3 4 channels, ETR OPAx_CHN OPAx_OUT TIM4 4 channels, ETR (x=1,2,3,4) TIM5 4 channels USART2 RX, TX, CTS, RTS, CK USART3 RX, TX, CTS, RTS, CK PA0 ~ PA15 GPIOA UART4 RX, TX PB0 ~ PB15 UART5 RX, TX PC0 ~ PC15 UART6 RX, TX PD0 ~ PD15 UART7 RX, TX PE0 ~ PE15 GPIOE UART8 RX, TX MOSI,MISO,SCK, NSS SPI1 SPI2/I2S2 M SC O K S /C I/ K S , D M , M CK IS , O N , S S/WS RX, TX, CTS, RTS, CK USART1 IWDG SPI3/I2S3 M SC O K S /C I/ K S , D M , M CK IS , O N , S S/WS 4 channels 3 compl. E C T h R a , n B n IK el N s TIM1 WWDG I2C1 SCL, SDA, SMBA 3 compl 4 . C c h h a an n n n e el l s s TIM8 I2C2 SCL, SDA, SMBA ETR, BIKN 3 compl 4 . C c h h a an n n n e el l s s TIM9 TIM6 bxCAN1 CAN1_TX,CAN1_RX ETR, BIKN 3 compl 4 . C c h h a an n n n e el l s s TIM10 TIM7 SRAM 512B ETR, BIKN bxCAN2 CAN2_TX,CAN2_RX Tkey AIN0 ~ AIN15 ADC1 (2.4V~V (V D S D S A A ) ) V V R R E E F F + - ADC2 DAC1 DAC_OUT1 DAC2 DAC_OUT2 Temp Sensor System Bus XUM HB Fmax

144MHz PLL2 PLL3 FS_DP USBFS FS_DM USBD USBDM,USBDP

Page 6

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图1-3 CH32F208无线型系统框图 ARM Cortex-M3 FLASH I-code Bus CTRL TPIU NVIC SWD D-code Bus Flash Memory SRAM HB to PB1 Bridge HB to PB2 Bridge EXTIT/WKUP GPIOB GPIOC GPIOD V2.4 3 PB2: Fmax

144MHz XUM PB1: Fmax = 144MHz @VDD VDD: 2.4V3.6V VSS SWCLK @VIO33 VIO: 2.4V3.6V SWDIO VSS @VDDA VDDA: VIO VSSA RXP, RXN TXP, TXN RCC LSI-RC RTC_CLK IWDG_CLK LSE OSC32_IN OSC32_OUT @VBAT RTC/BKP TAMPER-RTC TIM2 4 channels, ETR TIM3 4 channels, ETR PA0 ~ PA15 GPIOA PB0 ~ PB15 PC0 ~ PC15 PD2 SPI2 MOSI, MISO, SCKNSS IWDG WWDG I2C1 SCL, SDA, SMBA RX, TX, CTS, RTS, CK USART1 I2C2 SCL, SDA, SMBA bxCAN1 CAN1_TX,CAN1_RX 4 channels 3 complementary Channels TIM1 ETR, BIKN AIN0 ~ AIN15 Tkey (VSSA)VREF - ADC (2.4V~VDDA)VREF+ Temp Sensor System Bus XUM HB Fmax

144MHz TRACESWO DMA 8 Channels SYSCLK Reset & HBCLK MUX & DIV PB1CLK PB2CLK 10M PHY HSI-RC BLE 5.3 PLL HSE OSC_IN OSC_OUT FS_DP USBFS FS_DM OPAx_CHP OPA1-2 OPAx_CHN OPAx_OUT (x=1,2) TIM4 4 channels, ETR TIM5 4 channels USART2 RX, TX, CTS, RTS, CK USART3 RX, TX, CTS, RTS, CK UART4 RX, TX MOSI,MISO,SCK, NSS SPI1 USBD USBDM,USBDP

Page 7

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图1-4 CH32V203中小容量通用型系统框图 RISC-V (V4B) FLASH I-code Bus CTRL PFIC RV32 SDI IMAC D-code Bus Flash Memory SRAM HB to PB2 Bridge V2.4 4 XUM PB1: Fmax

144MHz @VDD VDD: 2.4V3.6V VSS SWCLK @VIO33 VIO: 2.4V3.6V SWDIO VSS @VDDA VDDA: VIO VSSA RTC/BKP TAMPER-RTC TIM2 4 channels, ETR TIM3 4 channels, ETR TIM4 4 channels, ETR TIM5 4 channels(CH32V203RBx) USART2 RX, TX, CTS, RTS, CK USART3 RX, TX, CTS, RTS, CK UART4 RX, TX System Bus XUM HB Fmax = 144MHz FS_DP USBFS FS_DM RCC LSI-RC RTC_CLK O O P P A A x x _ _ C C H H N P OPA1-2 IWDG_CLK LSE O O S S C C 3 3 2 2 _ _ I O N UT OPAx_OUT (x=1,2) HB to PB1 @VBAT Bridge EXTIT/WKUP PA0 ~ PA15 GPIOA PB0 ~ PB15 GPIOB PC0 ~ PC15 GPIOC PD0 ~ PD2 GPIOD MOSI,MISO,SCK, NSS SPI1 RX, TX, CTS, RTS, CK USART1 SPI2 MOSI, MISO, SCK , NSS 4 channels 3 complementary Channels TIM1 IWDG I2C1 SCL, SDA, SMBA ETR, BIKN WWDG I2C2 SCL, SDA, SMBA Tkey AIN0 ~ AIN15 ADC1 bxCAN1 CAN1_TX,CAN1_RX (VSSA)VREF - ADC2 (2.4V~VDDA)VREF+ USBD USBDM,USBDP Temp Sensor PB2: Fmax = 144MHz DMA 8Channels SYSCLK Reset & HBCLK MUX & DIV PB1CLK PB2CLK HSI-RC PLL HSE OSC_IN OSC_OUT

Page 8

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图1-5 CH32V208无线型系统框图 RISC-V (V4C) FLASH I-code Bus CTRL PFIC RV32 SDI IMAC D-code Bus Flash Memory SRAM HB to PB1 Bridge HB to PB2 Bridge EXTIT/WKUP GPIOB GPIOC GPIOD V2.4 5 PB2: Fmax = 144MHz XUM PB1: Fmax = 144MHz @VDD VDD: 2.4V3.6V VSS SWCLK @VIO33 VIO: 2.4V3.6V SWDIO VSS @VDDA VDDA: VIO VSSA RXP, RXN TXP, TXN RCC LSI-RC RTC_CLK IWDG_CLK LSE OSC32_IN OSC32_OUT @VBAT RTC/BKP TAMPER-RTC TIM2 4 channels, ETR TIM3 4 channels, ETR PA0 ~ PA15 GPIOA PB0 ~ PB15 PC0 ~ PC15 PD2 SPI2 M SC O K S /C I/ K S , D M , M CK IS , O N , S S/WS IWDG WWDG I2C1 SCL, SDA, SMBA RX, TX, CTS, RTS, CK USART1 I2C2 SCL, SDA, SMBA bxCAN1 CAN1_TX,CAN1_RX 4 channels 3 complementary Channels TIM1 ETR, BIKN AIN0 ~ AIN15 Tkey (VSSA)VREF - ADC (2.4V~VDDA)VREF+ Temp Sensor System Bus XUM HB Fmax

144MHz DMA 8 Channels SYSCLK Reset & HBCLK MUX & DIV PB1CLK PB2CLK 10M PHY HSI-RC BLE 5.3 PLL HSE OSC_IN OSC_OUT FS_DP USBFS FS_DM OPAx_CHP OPA1-2 OPAx_CHN OPAx_OUT (x=1,2) TIM4 4 channels, ETR TIM5 4 channels USART2 RX, TX, CTS, RTS, CK USART3 RX, TX, CTS, RTS, CK UART4 RX, TX MOSI,MISO,SCK, NSS SPI1 USBD USBDM,USBDP

Page 9

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图1-6 CH32V30x连接/互联/大容量通用型)系统框图 RISC-V (V4F) FLASH I-code Bus CTRL PFIC RV32 SDI IMAFC D-code Bus Flash Memory SRAM HB to PB1 Bridge HB to PB2 Bridge EXTIT/WKUP GPIOB GPIOC GPIOD V2.4 6 PB2: Fmax

144MHz XUM PB1: Fmax

144MHz @VDD VDD: 2.4V3.6V VSS SWCLK @VIO33 VIO: 2.4V3.6V SWDIO VSS DMA1 7 Channels @VDDA VDDA: VIO DMA2 11 Channels VSSA TXD[3:0],TXCLK,TXEN MII RXD[3:0 C ] O ,R L X ,M ER D ,R C X ,M C P L D P K S I , O _ R , O X C D U R V T S FSMC A D CL D A K D T[ [ 1 2 5 3 : : 0 1 ] 6] TXD[1:0],TXEN NOE RMII RXD[1:0],REFCLK,CRSDV NWE RGMII T R X X D D [ [ 3 3 : : 0 0 ] ] , M , G R T X D P X C P C C , S , R , M _ T X O X D C E U T IO N T L 10 E / T 1 H 0 0 M /1 A 0 C 00 M R U e X s e & t D & IV S H P Y B B S 1 C C C L L L K K K N N N N B W A E1 L D A [ / V 1 N IT :0 C ] E2 125IN PB2CLK RXP, RXN HSI-RC TXP, TXN 10M PHY PLL HSE OSC_IN OSC_OUT DAT[1 P 1 C : L 0 K ] DVP RCC VSYNC,HSYNC LSI-RC USBHS TRNG RTC_CLK HS_DP +PHY IWDG_CLK LSE OSC32_IN HS_DM OSC32_OUT @VBAT RTC/BKP TAMPER-RTC DAT[7:0] CM C D K SDIO TIM2 4 channels, ETR OPAx_CHP OPA1-4 TIM3 4 channels, ETR OPAx_CHN OPAx_OUT TIM4 4 channels, ETR (x=1,2,3,4) TIM5 4 channels USART2 RX, TX, CTS, RTS, CK USART3 RX, TX, CTS, RTS, CK PA0 ~ PA15 GPIOA UART4 RX, TX PB0 ~ PB15 UART5 RX, TX PC0 ~ PC15 UART6 RX, TX PD0 ~ PD15 UART7 RX, TX PE0 ~ PE15 GPIOE UART8 RX, TX MOSI,MISO,SCK, NSS SPI1 SPI2/I2S2 M SC O K S /C I/ K S , D M , M CK IS , O N , S S/WS RX, TX, CTS, RTS, CK USART1 IWDG SPI3/I2S3 M SC O K S /C I/ K S , D M , M CK IS , O N , S S/WS 4 channels 3 complementary E C T h R a , n B n IK el N s TIM1 WWDG I2C1 SCL, SDA, SMBA 3 Complementary 4 C c h h a an n n n e el l s s TIM8 I2C2 SCL, SDA, SMBA ETR, BIKN 3 complementary 4 C c h h a an n n n e el l s s TIM9 TIM6 bxCAN1 CAN1_TX,CAN1_RX ETR, BIKN 3 Complementary 4 C c h h a an n n n e el l s s TIM10 TIM7 SRAM 512B ETR, BIKN bxCAN2 CAN2_TX,CAN2_RX Tkey AIN0 ~ AIN15 ADC1 (2.4V~V (V D S D S A A ) ) V V R R E E F F + - ADC2 D D A A C C 2 1 D D A A C C _ _ O O U U T T 1 2 Temp Sensor System Bus XUM HB Fmax

144MHz PLL2 PLL3 FS_DP,FS_DM USBFS/ VBUS,ID OTG_FS DP, DM

Page 10

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图1-7 CH32V317互联型系统框图 RISC-V (V4F) FLASH I-code Bus CTRL PFIC RV32 SDI IMAFC D-code Bus Flash Memory SRAM HB to PB1 Bridge HB to PB2 Bridge EXTIT/WKUP GPIOB GPIOC GPIOD V2.4 7 PB2: Fmax

144MHz XUM PB1: Fmax

144MHz @VDD VDD: 2.4V3.6V VSS @VIO33 VIO: 2.4V3.6V SWCLK VSS SWDIO @VDDA VDDA: VIO VSSA DMA1 7 Channels DMA2 11 Channels SYSCLK ETH MAC Reset & HBCLK 10/100/1000 MUX & DIV PB1CLK PB2CLK HSI-RC PLL HSE OSC_IN OSC_OUT DAT[1 P 1 C : L 0 K ] DVP RCC VSYNC,HSYNC LSI-RC USBHS TRNG RTC_CLK HS_DP +PHY IWDG_CLK LSE OSC32_IN HS_DM OSC32_OUT @VBAT RTC/BKP TAMPER-RTC DAT[7:0] CM C D K SDIO TIM2 4 channels, ETR OPAx_CHP OPA1-4 TIM3 4 channels, ETR OPAx_CHN OPAx_OUT TIM4 4 channels, ETR (x=1,2,3,4) TIM5 4 channels USART2 RX, TX, CTS, RTS, CK USART3 RX, TX, CTS, RTS, CK PA0 ~ PA15 GPIOA UART4 RX, TX PB0 ~ PB15 UART5 RX, TX PC0 ~ PC15 UART6 RX, TX PD0 ~ PD15 UART7 RX, TX PE0 ~ PE15 GPIOE UART8 RX, TX MOSI,MISO,SCK, NSS SPI1 SPI2/I2S2 M SC O K S /C I/ K S , D M , M CK IS , O N , S S/WS RX, TX, CTS, RTS, CK USART1 IWDG SPI3/I2S3 M SC O K S /C I/ K S , D M , M CK IS , O N , S S/WS 4 channels 3 complementary E C T h R a , n B n IK el N s TIM1 WWDG I2C1 SCL, SDA, SMBA 3 Complementary 4 C c h h a an n n n e el l s s TIM8 I2C2 SCL, SDA, SMBA ETR, BIKN 3 complementary 4 C c h h a an n n n e el l s s TIM9 TIM6 bxCAN1 CAN1_TX,CAN1_RX ETR, BIKN 3 Complementary 4 C c h h a an n n n e el l s s TIM10 TIM7 SRAM 512B ETR, BIKN bxCAN2 CAN2_TX,CAN2_RX Tkey AIN0 ~ AIN15 ADC1 (2.4V~V (V D S D S A A ) ) V V R R E E F F + - ADC2 D D A A C C 2 1 D D A A C C _ _ O O U U T T 1 2 Temp Sensor System Bus XUM HB Fmax

144MHz @VDD_ETH VDD_ETH: 3.2V~3.45V VSS MDITP,MDITN 10/100M MDIRP, MDIRN PHY PLL2 PLL3 FS_DP,FS_DM USBFS/ VBUS,ID OTG_FS DP, DM 系统中设有通用DMA控制器用以减轻CPU负担、提高效率时钟树分级管理用以降低了外设总 的运行功耗,同时还兼有数据保护机制,时钟安全系统保护机制等措施来增加系统稳定性。  指令总线I-Code将内核和FLASH指令接口相连预取指在此总线上完成。  数据总线D-Code将内核和FLASH数据接口相连用于常量加载和调试。  系统总线将内核和总线矩阵相连用于协调内核、DMA、SRAM和外设的访问。  DMA总线负责DMA的HB主控接口与总线矩阵相连该总线访问对象是FLASH数据、SRAM和外 设。

Page 11

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn  总线矩阵负责的是系统总线、数据总线、DMA总线、SRAM和HB/PB桥之间的访问协调。  HB/PB桥为HB总线和两个PB总线提供同步连接。不同的外设挂在不同的PB总线下可以按 实际需求配置不同总线时钟,优化性能。 1.2 存储器映像 CH32F20x、CH32V20x、CH32V30x和CH32V31x系列产品都包含了程序存储器、数据存储器、内核 寄存器和外设寄存器等等它们都在一个4GB的线性空间寻址。 系统存储以小端格式存放数据,即低字节存放在低地址,高字节存放在高地址。 V2.4 8

Page 12

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图1-8 CH32F203中小容量通用型存储映像 0x5005 0400 Reserved 0x5005 0000 Reserved 0x5004 0000 USBFS 0x5000 0000 Reserved 0x4002 8000 0x4002 6000 Reserved 0x4002 4000 0x4002 3C00 EXTEND 0x4002 3800 Reserved 0x4002 3400 CRC 0x4002 3000 Reserved 0x4002 2400 Flash Interface 0x4002 2000 Reserved 0x4002 1400 RCC 0x4002 1000 0x4002 0800 Reserved 0x4002 0400 DMA 0x4002 0000 0x4001 8400 Reserved 0x4001 8000 0x4001 5400 0x4001 5000 Reserved 0x4001 4C00 0x4001 3C00 USART1 0x4001 3800 Reserved 0x4001 3400 SPI1 0x4001 3000 TIM1 0x4001 2C00 ADC2/TouchKey 0x4001 2800 ADC1/TouchKey 0x4001 2400 0x4001 1C00 Reserved 0x4001 1800 Port D 0x4001 1400 Port C 0x4001 1000 Port B 0x4001 0C00 Port A 0xFFFF FFFFF 0x4001 0800 Reserved 0x4001 0400 EXTI AFIO 0xE010 0000 0x4001 0000 Core Private Peripherals 0x4000 7800 Reserved 0xE000 0000 0x4000 7400 PWR 0x4000 7000 Reserved BKP 0x4000 6C00 Reserved 0x4000 6800 0xC000 0000 bxCAN1 0x4000 6400 share 512B SRAM 0x4000 6000 0x1FFF FFFF Reserved USBD Reserved 0x4000 5C00 I2C2 0x1FFF F880 0x4000 5800 Option Bytes 0xA000 0000 I2C1 0x1FFF F800 0x4000 5400 Vendor Bytes Reserved 0x1FFF F700 Reserved 0x4000 5000 USART4 Reserved 0x4000 4C00 0x1FFF F000 USART3 0x4000 4800 0x7000 0000 USART2 System FLASH 0x4000 4400 (BOOT_28KB) 0x4000 4000 Reserved Reserved 0x4000 3C00 0x1FFF 8000 SPI2 0x4000 3800 0x6000 0000 Reserved 0x4000 3400 Reserved Reserved 0x4000 3000 IWDG WWDG 0x4000 2C00 RTC Peripherals 0x4000 2800 0x4000 0000 Code FLASH Reserved 224KB max Includes 0 wait and non-0 0x2000 5000 Reserved waiting areas SRAM (20KBmax) 0x2000 0000 0x0800 0000 Aliased to Flash or system memory FLASH depending on 0x4000 0C00 TIM4 BOOT pins 0x4000 0800 0x0000 0000 0x0000 0000 TIM3 0x4000 0400 4G线性地址空间 0x4000 0000 TIM2 V2.4 9

Page 13

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图1-9 CH32F20x连接/互联/大容量通用型)存储映像 Reserved 0x5005 0400 DVP 0x5005 0000 Reserved 0x5004 0000 USBFS/OTG_FS 0x5000 0000 Reserved 0x4002 A000 Ethernet 0x4002 8000 Reserved 0x4002 4000 TRNG 0x4002 3C00 EXTEND 0x4002 3800 USBHS 0x4002 3400 CRC 0x4002 3000 Reserved 0x4002 2400 Flash Interface 0x4002 2000 Reserved 0x4002 1400 RCC 0x4002 1000 Reserved 0x4002 0800 DMA2 0x4002 0400 DMA1 0x4002 0000 Reserved 0x4001 8400 SDIO 0x4001 8000 Reserved 0x4001 5400 TIM10 0x4001 5000 TIM9 0x4001 4C00 Reserved 0x4001 3C00 USART1 0x4001 3800 TIM8 0x4001 3400 SPI1 0x4001 3000 TIM1 0x4001 2C00 ADC2/TouchKey 0x4001 2800 ADC1/TouchKey 0x4001 2400 Reserved 0x4001 1C00 Port E 0x4001 1800 Port D 0x4001 1400 Port C 0x4001 1000 Port B 0x4001 0C00 Port A 0xFFFF FFFFF 0x4001 0800 Reserved 0x4001 0400 EXTI AFIO 0xE010 0000 0x4001 0000 Core Private Reserved Peripherals 0x4000 7800 0xE000 0000 DAC 0x4000 7400 PWR 0x4000 7000 Reserved BKP 0x4000 6C00 bxCAN2 0x4000 6800 0xC000 0000 bxCAN1 0x4000 6400 share 512B SRAM 0x1FFF FFFF Reserved 0x4000 6000 Reserved Reserved 0x4000 5C00 0x1FFF F880 Option Bytes 0 0 x x A A 0 0 0 0 0 0 0 1 0 0 0 0 0 0 FSMC register 0x4000 5800 I I 2 2 C C 1 2 0x1FFF F800 0x4000 5400 0x1FFF F700 Vendor Bytes Reserved 0x4000 5000 U U A A R R T T 4 5 0x1FFF F000 Reserved 0x8000 0000 FSMC bank2 NAND(NAND1) 0 0 x x 4 4 0 0 0 0 0 0 4 4 C 8 0 0 0 0 USART3 0x7000 0000 USART2 System FLASH 0x4000 4400 Reserved (BOOT_28KB) Reserved 0x4000 4000 SPI3/I2S3 0x4000 3C00 0x1FFF 8000 0x6400 0000 SPI2/I2S2 FSMC bank1 NOR/PSRAM 1 0x4000 3800 0x6000 0000 Reserved 0x4000 3400 Reserved Reserved 0x4000 3000 IWDG WWDG 0x4000 2C00 RTC Peripherals 0x4000 2800 0x4000 0000 Reserved 0x4000 2400 Code FLASH Reserved 0x4000 2000 UART8 480KB max UART7 0x4000 1C00 Includes 0 wait and non-0 0x2002 0000 UART6 waiting areas SRAM (128KBmax) 0x4000 1800 0x2000 0000 TIM7 0x0800 0000 0x4000 1400 TIM6 Aliased to Flash or 0x4000 1000 system memory FLASH TIM5 depending on 0x4000 0C00 TIM4 BOOT pins 0x4000 0800 0x0000 0000 0x0000 0000 TIM3 0x4000 0400 4G线性地址空间 0x4000 0000 TIM2 V2.4 10

Page 14

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图1-10 CH32F208无线型存储映像 0x5005 0400 Reserved 0x5005 0000 Reserved 0x5004 0000 USBFS 0x5000 0000 Reserved 0x4002 A000 Ethernet 0x4002 8000 Reserved 0x4002 6000 BLE 5.3 0x4002 4000 Reserved 0x4002 3C00 EXTEND 0x4002 3800 Reserved 0x4002 3400 CRC 0x4002 3000 Reserved 0x4002 2400 Flash Interface 0x4002 2000 Reserved 0x4002 1400 RCC 0x4002 1000 Reserved 0x4002 0400 DMA 0x4002 0000 0x4001 8400 Reserved 0x4001 8000 0x4001 5400 Reserved 0x4001 5000 0x4001 4C00 Reserved 0x4001 3C00 USART1 0x4001 3800 Reserved 0x4001 3400 SPI1 0x4001 3000 TIM1 0x4001 2C00 Reserved 0x4001 2800 ADC1/TouchKey 0x4001 2400 0x4001 1C00 Reserved 0x4001 1800 Port D 0x4001 1400 Port C 0x4001 1000 Port B 0x4001 0C00 Port A 0xFFFF FFFFF 0x4001 0800 Reserved 0x4001 0400 EXTI AFIO 0xE010 0000 0x4001 0000 Core Private Peripherals 0x4000 7800 Reserved 0xE000 0000 0x4000 7400 PWR 0x4000 7000 Reserved BKP 0x4000 6C00 Reserved 0x4000 6800 0xC000 0000 bxCAN1 0x4000 6400 share 512B SRAM 0x4000 6000 0x1FFF FFFF Reserved Reserved 0x4000 5C00 USBD I2C2 0x1FFF F880 0x4000 5800 Option Bytes 0xA000 0000 I2C1 0x1FFF F800 0x4000 5400 Vendor Bytes Reserved 0x1FFF F700 Reserved 0x4000 5000 UART4 Reserved 0x4000 4C00 0x1FFF F000 USART3 0x4000 4800 0x7000 0000 USART2 System FLASH 0x4000 4400 (BOOT_28KB) Reserved Reserved 0x4000 3C00 0x1FFF 8000 SPI2 0x4000 3800 0x6000 0000 Reserved 0x4000 3400 Reserved Reserved 0x4000 3000 IWDG WWDG 0x4000 2C00 RTC Peripherals 0x4000 2800 0x4000 0000 Code FLASH Reserved Reserved 480KB max Includes 0 wait and non-0 0x2001 0000 waiting areas SRAM (64KBmax) 0x4000 1800 0x2000 0000 0x0800 0000 0x4000 1400 Reserved Aliased to Flash or 0x4000 1000 system memory FLASH TIM5 depending on 0x4000 0C00 TIM4 BOOT pins 0x4000 0800 0x0000 0000 0x0000 0000 TIM3 0x4000 0400 4G线性地址空间 0x4000 0000 TIM2 V2.4 11

Page 15

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图1-11 CH32V203中小容量通用型存储映像 0x5005 0400 Reserved 0x5005 0000 Reserved 0x5004 0000 USBFS 0x5000 0000 Reserved 0x4002 A000 Ethernet (CH203RBx) 0x4002 8000 0x4002 6000 Reserved 0x4002 4000 0x4002 3C00 EXTEND 0x4002 3800 Reserved 0x4002 3400 CRC 0x4002 3000 Reserved 0x4002 2400 Flash Interface 0x4002 2000 Reserved 0x4002 1400 RCC 0x4002 1000 0x4002 0800 Reserved 0x4002 0400 DMA 0x4002 0000 0x4001 8400 Reserved 0x4001 8000 0x4001 5400 0x4001 5000 Reserved 0x4001 4C00 0x4001 3C00 USART1 0x4001 3800 Reserved 0x4001 3400 SPI1 0x4001 3000 TIM1 0x4001 2C00 ADC2/TouchKey 0x4001 2800 ADC1/TouchKey 0x4001 2400 0x4001 1C00 Reserved 0x4001 1800 Port D 0x4001 1400 Port C 0x4001 1000 Port B 0x4001 0C00 Port A 0xFFFF FFFFF 0x4001 0800 Reserved 0x4001 0400 EXTI AFIO 0xE010 0000 0x4001 0000 Core Private Peripherals 0x4000 7800 Reserved 0xE000 0000 0x4000 7400 PWR 0x4000 7000 Reserved BKP 0x4000 6C00 Reserved 0x4000 6800 0xC000 0000 bxCAN1 0x4000 6400 share 512B SRAM 0x4000 6000 0x1FFF FFFF Reserved USBD Reserved 0x4000 5C00 I2C2 0x1FFF F880 0x4000 5800 Option Bytes 0xA000 0000 I2C1 0x1FFF F800 0x4000 5400 Vendor Bytes Reserved 0x1FFF F700 Reserved 0x4000 5000 UART4 Reserved 0x4000 4C00 0x1FFF F000 USART3 0x4000 4800 0x7000 0000 USART2 System FLASH 0x4000 4400 (BOOT_28KB) 0x4000 4000 Reserved Reserved 0x4000 3C00 0x1FFF 8000 SPI2 0x4000 3800 0x6000 0000 Reserved 0x4000 3400 Reserved Reserved 0x4000 3000 IWDG WWDG 0x4000 2C00 RTC Peripherals 0x4000 2800 0x4000 0000 Code FLASH Reserved 224KB max Reserved Includes 0 wait and non-0 0x2001 0000 waiting areas SRAM (64KBmax) 0x2000 0000 0x0800 0000 Aliased to Flash or 0x4000 1000 system memory FLASH TIM5 (CH203RBx) depending on 0x4000 0C00 TIM4 BOOT pins 0x4000 0800 0x0000 0000 0x0000 0000 TIM3 0x4000 0400 4G线性地址空间 0x4000 0000 TIM2 V2.4 12

Page 16

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图1-12 CH32V208无线型存储映像 0x5005 0400 Reserved 0x5005 0000 0x5004 0000 USBFS 0x5000 0000 Reserved 0x4002 A000 Ethernet 0x4002 8000 Reserved 0x4002 6000 BLE 5.3 0x4002 4000 Reserved 0x4002 3C00 EXTEND 0x4002 3800 Reserved 0x4002 3400 CRC 0x4002 3000 Reserved 0x4002 2400 Flash Interface 0x4002 2000 Reserved 0x4002 1400 RCC 0x4002 1000 Reserved 0x4002 0400 DMA 0x4002 0000 0x4001 8400 0x4001 8000 0x4001 5400 Reserved 0x4001 5000 0x4001 4C00 0x4001 3C00 USART1 0x4001 3800 Reserved 0x4001 3400 SPI1 0x4001 3000 TIM1 0x4001 2C00 Reserved 0x4001 2800 ADC1/TouchKey 0x4001 2400 0x4001 1C00 Reserved 0x4001 1800 Port D 0x4001 1400 Port C 0x4001 1000 Port B 0x4001 0C00 Port A 0xFFFF FFFFF 0x4001 0800 Reserved 0x4001 0400 EXTI AFIO 0xE010 0000 0x4001 0000 Core Private Peripherals 0x4000 7800 Reserved 0xE000 0000 0x4000 7400 PWR 0x4000 7000 Reserved BKP 0x4000 6C00 Reserved 0x4000 6800 0xC000 0000 bxCAN1 0x4000 6400 share 512B SRAM 0x4000 6000 0x1FFF FFFF Reserved USBD Reserved 0x4000 5C00 I2C2 0x1FFF F880 0x4000 5800 Option Bytes 0xA000 0000 I2C1 0x1FFF F800 0x4000 5400 Vendor Bytes Reserved 0x1FFF F700 0x4000 5000 Reserved UART4 Reserved 0x4000 4C00 0x1FFF F000 USART3 0x4000 4800 0x7000 0000 USART2 System FLASH 0x4000 4400 (BOOT_28KB) Reserved Reserved 0x4000 3C00 0x1FFF 8000 SPI2 0x4000 3800 0x6000 0000 Reserved 0x4000 3400 IWDG Reserved Reserved 0x4000 3000 WWDG 0x4000 2C00 RTC Peripherals 0x4000 2800 0x4000 0000 Code FLASH Reserved Reserved 480KB max Includes 0 wait and non-0 0x2001 0000 waiting areas SRAM (64KBmax) 0x4000 1800 0x2000 0000 0x0800 0000 0x4000 1400 Reserved Aliased to Flash or 0x4000 1000 system memory FLASH TIM5 depending on 0x4000 0C00 TIM4 BOOT pins 0x4000 0800 0x0000 0000 0x0000 0000 TIM3 0x4000 0400 4G线性地址空间 0x4000 0000 TIM2 V2.4 13

Page 17

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图1-13 CH32V30x连接/互联/大容量通用型和CH32V31x互联型存储映像 Reserved 0x5005 0400 DVP 0x5005 0000 Reserved 0x5004 0000 USBFS/OTG_FS 0x5000 0000 Reserved 0x4002 A000 Ethernet 0x4002 8000 Reserved 0x4002 4000 TRNG 0x4002 3C00 EXTEND 0x4002 3800 USBHS 0x4002 3400 CRC 0x4002 3000 Reserved 0x4002 2400 Flash Interface 0x4002 2000 Reserved 0x4002 1400 RCC 0x4002 1000 Reserved 0x4002 0800 DMA2 0x4002 0400 DMA1 0x4002 0000 Reserved 0x4001 8400 SDIO 0x4001 8000 Reserved 0x4001 5400 TIM10 0x4001 5000 TIM9 0x4001 4C00 Reserved 0x4001 3C00 USART1 0x4001 3800 TIM8 0x4001 3400 SPI1 0x4001 3000 TIM1 0x4001 2C00 ADC2/TouchKey 0x4001 2800 ADC1/TouchKey 0x4001 2400 Reserved 0x4001 1C00 Port E 0x4001 1800 Port D 0x4001 1400 Port C 0x4001 1000 Port B 0x4001 0C00 Port A 0xFFFF FFFFF 0x4001 0800 Reserved 0x4001 0400 EXTI AFIO 0xE010 0000 0x4001 0000 Core Private Reserved Peripherals 0x4000 7800 0xE000 0000 DAC 0x4000 7400 PWR 0x4000 7000 Reserved BKP 0x4000 6C00 bxCAN2 0x4000 6800 0xC000 0000 bxCAN1 0x4000 6400 share 512B SRAM 0x1FFF FFFF Reserved 0x4000 6000 Reserved Reserved 0x4000 5C00 0x1FFF F880 Option Bytes 0 0 x x A A 0 0 0 0 0 0 0 1 0 0 0 0 0 0 FSMC register 0x4000 5800 I I 2 2 C C 1 2 0x1FFF F800 0x4000 5400 0x1FFF F700 Vendor Bytes Reserved 0x4000 5000 U U A A R R T T 4 5 0x1FFF F000 Reserved 0x70FF FFFF FSMC bank2 NAND(NAND1) 0 0 x x 4 4 0 0 0 0 0 0 4 4 C 8 0 0 0 0 USART3 0x7000 0000 USART2 System FLASH 0x4000 4400 Reserved (BOOT_28KB) Reserved 0x4000 4000 SPI3/I2S3 0x4000 3C00 0x1FFF 8000 0x60FF FFFF SPI2/I2S2 FSMC bank1 NOR/PSRAM 1 0x4000 3800 0x6000 0000 Reserved 0x4000 3400 Reserved Reserved 0x4000 3000 IWDG WWDG 0x4000 2C00 RTC Peripherals 0x4000 2800 0x4000 0000 Reserved 0x4000 2400 Code FLASH Reserved 0x4000 2000 UART8 480KB max UART7 0x4000 1C00 Includes 0 wait and non-0 0x2001 0000 UART6 waiting areas SRAM (128KBmax) 0x4000 1800 0x2000 0000 TIM7 0x0800 0000 0x4000 1400 TIM6 Aliased to Flash or 0x4000 1000 system memory FLASH TIM5 depending on 0x4000 0C00 TIM4 BOOT pins 0x4000 0800 0x0000 0000 0x0000 0000 TIM3 0x4000 0400 4G线性地址空间 0x4000 0000 TIM2 V2.4 14

Page 18

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1.2.1 位段访问 位操作就是单独读写一个比特位的操作。CH32F20x 产品中通过映射的处理方式提供了对外设寄 存器和SRAM区内容的位操作读写。具体方法 1通过对映射地址区域32位的数据进行读操作读出的值为0或非0获取目标位域值是0或1 2通过对映射地址区域32位的数据进行写操作写入0或1修改目标位域值为0或1。 地址映射: 目标位域基地址BEaddr + 偏移地址Ofaddr + 位号BitN 映射地址Mapaddr Mapaddr = BEaddr + 0x2000000 + Ofaddr32 + BitN4 举例1对SRAM区的0x20000100地址字节中的bit3目标位域进行操作 Mapaddr= 0x20000000+0x2000000+0x10032+34= 0x2200200C 则读取 0x2200200C 地址的 4 字节数据内容可知 0x20000100 地址字节中的 bit3 是 0 还是 1对 0x2200200C地址执行写0或1操作可以修改0x20000100地址字节中的bit3为0还是1。 举例2对外设区域的0x40021000地址中的bit24进行操作 Mapaddr = 0x40000000+0x2000000+0x2100032+244= 0x42420060 则读取0x22420060地址的4字节数据内容可知0x40021000外设地址中的bit24是0还是1对 0x22420060地址执行写0或1操作可以修改0x40021000外设地址中的bit24为0还是1。 注CH32V20x、CH32V30x和CH32V31x产品不支持位段映射访问方式。 1.2.2 存储器分配 内置最大128K字节的SRAM起始地址0x20000000支持字节、半字2字节、全字4字节 访问。 内置最大480K字节的程序闪存存储区CodeFlash用于存储用户应用程序。 内置28K字节的系统存储器bootloader用于存储系统引导程序厂家固化自举加载程序。 内置128字节空间用于厂商配置字存储出厂前固化用户不可修改。 内置128字节空间用于用户选择字存储。 注:储存器分配各型号不同,具体参考芯片对应数据手册。 1.3 启动配置 系统可以通过BOOT0和BOOT1引脚来选择三种不同的启动模式。 表1-1 启动模式 BOOT0 BOOT1 启动模式 0 X 从程序闪存存储器启动 1 0 从系统存储器启动 1 1 从内部SRAM启动 用户通过设置 BOOT 引脚的状态值来选择复位后的启动模式。系统复位后或者电源复位都会导致 BOOT引脚的值被重新锁存。 启动模式不同程序闪存存储器、系统存储器和内部SRAM有着不同的访问方式  从程序闪存存储器启动时,程序闪存存储器地址被映射到 0x00000000 地址区域,同时也能够在 原地址区域0x08000000访问。  从系统存储器启动时,系统存储器地址被映射到 0x00000000 地址区域,同时也能够在原地址区 域0x1FFF8000访问。  从内部 SRAM 启动,只能够从 0x20000000 地址区域访问。对于 CH32F20x系列产品在此区域启 动时,需要通过 NVIC 控制器设置向量表偏移寄存器,重映射向量表到 SRAM 中。对于 CH32V20x、 CH32V30x和CH32V31x系列产品无需此动作。 V2.4 15

Page 19

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 2 章 电源控制PWR 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 2.1 概述 CH32F20x、CH32V20x、CH32V30x产品系统工作电压V 范围为2.413.6VCH32V31x产品系统 DD 工作电压 V 范围为 2.413.6V,内置电压调节器提供内核所需的工作电源。当主电源 V 掉电后, DD DD 电池等后备电源可通过V 引脚为实时时钟RTC和后备寄存器提供电源如果无需后备电源建议 BAT 将V 直接连接到V 引脚上。 DD BAT 注1对于FEATURE_SIGN寄存器VLEVEL位为1的芯片系统工作电压V 支持最低供电电压为 DD 2.4V对于VLEVEL位为0的芯片系统工作电压V 支持最低供电电压为1.8V。 DD 对于CH32V31x产品还包括了以下参数具体数据参考CH32V307DS0手册 1V 为内置的以太网10/100M PHY供电。 DD_ETH 2V 内部电源LDO退耦端需外接退耦电容。 DDK V 和V 引脚专门为系统中模拟相关电路供电包括ADC、DAC、温度传感器等。V 和V 作为 DDA SSA REF+ REF- 一些模拟电路的参考点在芯片内部等于V 及V 。 DDA SSA 图2-1 电源结构框图 VDDA power supply domain V REF+ AD converter V DA converter REF- Temperature V sensor DDA Reset module V SSA PLL OPA&CMP Core Power VDD power supply domain supply area CPU cores I/O circuit memory V DD Standby circuit (Wake-up logic, Built-in V IWDG) digital SS periphera Voltage regulator ls Low voltage detector Back-up power supply domain LSE 32K crystal oscillator V BAT Back-up register RCC BDCR register RTC 在主电源 V 掉电后,模拟开关切换至 V ,后备区域由 V 引脚供电,此时 PC1315 无法作为 DD BAT BAT GPIO仅可使用如下功能  PC13可以作为TAMPER引脚、RTC闹钟或秒输出。  PC14和PC15只能用作LSE引脚。 当主电源V 上电稳定后系统自动切换后备区域由V 供电PC1315可以用作GPIO功能。 DD DD 当PC1315引脚作为GPIO输出时速度必须限制在2MHz以下最大负载电容为30pF并且禁 V2.4 16

Page 20

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 止用在持续输出和吸入电流的场合比如LED驱动。 注在主电源V 恢复供电过程中内部V 电源仍然通过对应的V 引脚连在外部备用电源上若V DD BAT BAT DD 在小于复位滞后时间t 内就达到稳定并且高于V 的值0.6V以上,则有可能存在较短瞬间,电 RSTTEMPO BAT 流通过V 与V 之间的二极管灌入V 进而通过V 引脚注入电池等后备电源,如果后备电源无法 DD BAT BAT BAT 承受这样瞬时注入电流建议在后备电源和V 引脚之间加一只正向导通低压降二极管。 BAT 2.2 电源管理 2.2.1 上电复位和掉电复位 系统内部集成了上电复位POR和掉电复位PDR电路当芯片供电电压V 和V 低于对应门限电压 DD DDA 时,系统被相关电路复位,无需外置额外的复位电路。上电门限电压 V 和掉电门限电压 V 的参数 POR PDR 请参考对应的数据手册。 图2-2 POR和PDR的工作示意图 V DD(A) V POR 40-110mV Hysteresis V PDR Reset lag time t RSTTEMPO Reset signal 0 1 0 2.2.2 可编程电压监测器 可编程电压监测器 PVD主要被用于监控系统主电源的变化与电源控制寄存器 PWR_CTLR 的 PLS[2:0]所设置的门槛电压相比较配合外部中断寄存器EXTI设置可产生相关中断以便及时 通知系统进行数据保存等掉电前操作。 具体配置如下: 1 设置PWR_CTLR寄存器的PLS[2:0]域,选择要监控电压阈值。 2 可选的中断处理。PVD功能内部连接EXTI模块的第16线的上升/下降边沿触发设置,开启此中断 配置EXTI当V 下降到PVD阈值以下或上升到PVD阈值之上时就会产生PVD中断。 DD 3 设置PWR_CTLR寄存器的PVDE位来开启PVD功能。 4 读取 PWR_CSR 状态寄存器的 PVDO 位可获取当前系统主电源与 PLS[2:0]设置阈值关系,执行相应 软处理。当 V 电压高于 PLS[2:0]设置阈值PVDO 位置 0当 V 电压低于 PLS[2:0]设置阈值, DD DD PVDO位置1。 V2.4 17

Page 21

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图2-3 PVD的工作示意图 V DD(A) PVD Approx. threshold 200mV hysteresis PVD output 1 0 1 2.3 低功耗模式 在系统复位后,微控制器处于正常工作状态(运行模式),此时可以通过降低系统主频或者关闭 不用外设时钟或者降低工作外设时钟来节省系统功耗。如果系统不需要工作,可设置系统进入低功耗 模式,并通过特定事件让系统跳出此状态。 微控制器目前提供了3种低功耗模式从处理器、外设、电压调节器等的工作差异上分为  睡眠模式:内核停止运行,所有外设(包含内核私有外设)仍在运行。  停止模式:停止所有时钟,唤醒后系统继续运行。  待机模式:停止所有时钟,唤醒后微控制器复位(电源复位)。 表2-1 低功耗模式一览 模式 进入 唤醒源 对时钟的影响 电压调节器 WFI 任意中断唤醒 内核时钟关闭, 睡眠 正常 WFE 唤醒事件唤醒 其他时钟无影响 SLEEPDEEP置1 任一外部中断/事件(在外部 关闭HSE、HSI、 正常LPDS=0或 停止 PDDS清0 中断寄存器中设置) PLL和外设时钟 低功耗LPDS=1 WFI或WFE WKUP引脚上升沿、RTC闹钟事 SLEEPDEEP置1 件、NRST 引脚复位、IWDG 复 关闭HSE、HSI、 待机 PDDS置1 关闭 位。注:任意事件也可以唤醒 PLL和外设时钟 WFI或WFE 系统,但唤醒后系统复位。 注SLEEPDEEP位属于内核私有外设控制位CH32F20x产品参考Cortex-M3内核手册CH32V20x、 CH32V30x和CH32V31x产品参考PFIC_SCTLR寄存器。 2.3.1 低功耗配置选项  WFI和WFE方式 WFI微控制器被具有中断控制器响应的中断源唤醒系统唤醒后将最先执行中断服务函数 (微控制器复位除外)。 WFE唤醒事件触发微控制器将退出低功耗模式。唤醒事件包括 1 配置一个外部或内部的EXTI线为事件模式此时无需配置中断控制器 2 或者配置某个中断源等效为WFI唤醒系统优先执行中断服务函数 3 或者配置SEVONPEND位开启外设中断使能但不开启中断控制器中的中断使能系统唤醒后需 要清除中断挂起位。  SLEEPONEXIT 启用执行WFI或WFE指令后微控制器确保所有待处理的中断服务退出后进入低功耗模式。 不启用执行WFI或WFE指令后微控制器立即进入低功耗模式。 V2.4 18

Page 22

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn  SEVONPEND 启用所有中断或者唤醒事件都可以唤醒通过执行WFE进入的低功耗。 不启用只有在中断控制器中使能的中断或者唤醒事件可以唤醒通过执行WFE进入的低功耗。 2.3.2 睡眠模式 此模式下,所有的 IO 引脚都保持他们运行模式下的状态,所有的外设时钟都正常,所以进入睡 眠模式前,尽量关闭无用的外设时钟,以减低功耗。该模式唤醒所需时间最短。 进入:配置内核寄存器控制位 SLEEPDEEP=0电源控制寄存器 PDDS=0LPDS 决定内部调压器状 态执行WFI或WFE可选SEVONPEND和SLEEPONEXIT。 退出:任意中断或者唤醒事件。 2.3.3 停止模式 停止模式是在内核的深睡眠模式SLEEPDEEP基础上结合了外设的时钟控制机制并让电压调 节器的运行处于更低功耗的状态。此模式高频时钟HSE/HSI/PLL域被关闭SRAM和寄存器内容保 持IO引脚状态保持。该模式唤醒后系统可以继续运行HSI为默认系统时钟。 如果正在进行闪存编程,直到对内存访问完成,系统才进入停止模式;如果正在进行对 PB 的访 问直到对PB访问完成系统才进入停止模式。 停止模式下可工作模块独立看门狗IWDG、实时时钟RTC、低频时钟LSI/LSE。 进入配置内核寄存器控制位SLEEPDEEP=1电源控制寄存器的PDDS=0可选LPDS位执行WFI 或WFE可选SEVONPEND和SLEEPONEXIT。 退出:任一外部中断/事件(在外部中断寄存器中设置)。 在停止模式下,可选 LPDS 位LPDS=0电压调节器工作在正常模式LPDS=1电压调节器工作 在低功耗模式。在低功耗模式下可以通过配置PWR_CTLR寄存器的RAMLV=1使能RAM低电压模式 功耗达到最低。 2.3.4 待机模式 待机模式下,电压调节器关闭,除唤醒电路和后备域电路之外的电路将断电,实现最低功耗,在 指定的唤醒条件下退出后,微控制器将被复位,并执行的是电源复位。 待机模式下可工作模块独立看门狗IWDG、实时时钟RTC、低频时钟LSI/LSE。 进入配置内核寄存器控制位SLEEPDEEP=1电源控制寄存器的PDDS=1执行WFI或WFE可选 SEVONPEND和SLEEPONEXIT。 退出: 1 任一事件(在外部中断寄存器中设置),此唤醒后微控制器执行电源复位。 2 WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位此唤醒后微 控制器执行电源复位。 在待机模式下当正常供电时通过配置PWR_CTLR寄存器的R2KSTY=1控制2K字节RAM不掉电 R30KSTY=1控制30K字节RAM不掉电当使用 VBAT供电时通过配置 PWR_CTLR寄存器的 R2KVBAT=1 控制2K字节RAM不掉电R32K_VBATEN =1控制30K字节RAM不掉电。在该基础之上可以通过配置 PWR_CTLR寄存器的RAMLV=1使能RAM低电压模式功耗达到最低。 注:调试模式下,使微处理器进入停止或待机模式,将失去调试连接。 R2KSTY=1控制2K字节RAM的地址范围0x20000000—0x20000000+2K R30KSTY=1控制30K字节RAM的地址范围0x20000000+2K—0x20000000+2K+30K 2.3.5 RTC 自动唤醒 RTC可以实现无需外部中断的情况下自动唤醒。通过对时间基数进行编程可周期性地从停止或 待机模式下唤醒。 V2.4 19

Page 23

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 可选择精准的外部低频 32.768kHz 晶振 LSE 作为 RTC 时钟源,也可以选择内部 LSI 振荡器作为 RTC时钟源LSI的精度和功耗指标要差于LSE。 RTC闹钟事件能够把MCU从停机模式下唤醒为了实现此功能需要配置外部中断线17并且把 RTC设置成可产生闹钟事件。而从待机模式下唤醒仅需把RTC设置成可产生闹钟事件。 2.4 寄存器描述 表2-2 PWR相关寄存器列表 名称 访问地址 描述 复位值 R32_PWR_CTLR 0x40007000 电源控制寄存器 0x00000000 R32_PWR_CSR 0x40007004 电源控制/状态寄存器 0x00000000 2.4.1 电源控制寄存器PWR_CTLR 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 RAM R30K R2K R30K R2K Reserved LV VBAT VBAT STY STY 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DBP PLS[2:0] PVDE CSBF CWUF PDDS LPDS 位 名称 访问 描述 复位值 [31:21] Reserved RO 保留。 0 RAM工作在低电压模式使能控制位功耗相对更低 20 RAMLV RW 0关闭 1开启。 0 注在PWR_CTLR寄存器的LPDS位为1时有效。 VBAT供电时Standby模式下 30K RAM是否带电控制 位: 0不带电 1带电。 19 R30KVBAT RW 0 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C 、 CH32V31x_D8C 、 CH32V20x_D8 、 CH32V20x_D8W、CH32F20x_D8。 VBAT 供电时Standby 模式下 2K RAM 是否带电控制 位: 0不带电 1带电。 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C 、 CH32V31x_D8C 、 CH32V20x_D8 、 18 R2KVBAT RW CH32V20x_D8W、CH32F20x_D8。 0 VBAT供电时Standby模式下 20K RAM是否带电控制 位: 0不带电 1带电。 注适用于CH32F20x_D6、CH32V20x_D6。 Standby模式下30K RAM是否带电控制位 17 R30KSTY RW 0不带电 1带电。 0 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 V2.4 20

Page 24

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn CH32V30x_D8C 、 CH32V31x_D8C 、 CH32V20x_D8 、 CH32V20x_D8W、CH32F20x_D8。 Standby模式下2K RAM是否带电控制位 0不带电 1带电。 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C 、 CH32V31x_D8C 、 CH32V20x_D8 、 16 R2KSTY RW CH32V20x_D8W、CH32F20x_D8。 0 Standby模式下20K RAM是否带电控制位 0不带电 1带电。 注适用于CH32F20x_D6、CH32V20x_D6。 [15:9] Reserved RO 保留。 0 后备区域的写使能。当 RTC 时钟为外部时钟的 128 分 频时该位必须设置为1。 8 DBP RW 0 0禁止写RTC和后备寄存器 1允许写RTC和后备寄存器。 PVD电压监测阈值设置。详细说明见数据手册中电气特 性部分。 适用于VLEVEL位为1V 电压为2.4V)的产品: DD 000上升沿2.37V/下降沿2.29V 001上升沿2.55V/下降沿2.46V 010上升沿2.63V/下降沿2.55V 011上升沿2.76V/下降沿2.67V 100上升沿2.87V/下降沿2.78V 101上升沿3.03V/下降沿2.93V 110上升沿3.18V/下降沿3.06V [7:5] PLS[2:0] RW 111上升沿3.29V/下降沿3.19V。 000b 适用于VLEVEL位为0V 电压为1.8V)的产品: DD 000上升沿2.19V/下降沿2.13V 001上升沿2.33V/下降沿2.25V 010上升沿2.39V/下降沿2.32V 011上升沿2.48V/下降沿2.42V 100上升沿2.57V/下降沿2.51V 101上升沿2.69V/下降沿2.61V 110上升沿2.78V/下降沿2.69V 111上升沿2.88V/下降沿2.79V。 电源电压监测功能使能标志位: 4 PVDE RW 0禁止电源电压监测功能 0 1开启电源电压监测功能。 清除待机状态标志位读出始终为0。 3 CSBF RW1 0清0无效 0 1置1清除SBF待机状态标志位。 清除唤醒状态标志位读出始终为0。 2 CWUF RW1 0清0无效 0 1置1后2个系统时钟周期后清除WUF标志位。 V2.4 21

Page 25

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 掉电深睡眠情景下,待机/停机模式选择位。 1 PDDS RW 0进入停机模式电压调节器状态由LPDS控制 0 1进入待机模式。 停机模式下电压调节器工作模式选择位。PDDS=0该 位有效。 0 LPDS RW 0 0电压调节器工作在正常模式 1电压调节器工作在低功耗模式。 注此寄存器BIT16~BIT20只能由backup复位其他BIT从待机模式唤醒时复位。 2.4.2 电源控制/状态寄存器PWR_CSR 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved EWUP Reserved PVDO SBF WUF 位 名称 访问 描述 复位值 [31:9] Reserved RO 保留。 0 WKUP引脚使能位 0WKUP引脚可用于通用IO无待机唤醒功能 8 EWUP RW 0 1WKUP强制配置为输入下拉状态用于把MCU从待机 状态下唤醒。 [7:3] Reserved RO 保留。 0 PVD 输出状态标志位。当 PWR_CTLR 寄存器的 PVDE=1 时,该位有效。 2 PVDO RO 0 0V 和V 高于PLS[2:0]设定的PVD阈值 DD DDA 1V 和V 低于PLS[2:0]设定的PVD阈值。 DD DDA 待机状态标志位可通过CSBF位置1清除。 1 SBF RO 0MCU不在待机模式 0 1MCU进入待机模式。 唤醒事件状态标志位可通过CWUF位置1清除。 0 WUF RO 0没有唤醒事件发生 0 1在WKUP引脚检测到唤醒事件或RTC闹钟事件。 注:此寄存器从待机模式唤醒后保持不变。 V2.4 22

Page 26

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 3 章 复位和时钟控制RCC 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 控制器根据电源区域的划分以及应用中的外设功耗管理考虑,提供了不同的复位形式以及可配置 的时钟树结构。此章节描述了系统中各个时钟的作用域。 3.1 主要特性  多种复位形式  多路时钟源,总线时钟管理  内置外部晶体振荡监测和时钟安全系统  各外设时钟独立管理:复位、开启、关闭  支持内部时钟输出 3.2 复位 控制器提供了3种复位形式电源复位、系统复位和后备区域复位。 3.2.1 电源复位 电源复位发生时将复位除了后备区域外的所有寄存器后备区域由V 供电)。 BAT 其产生条件包括:  上电/掉电复位POR/PDR复位  从待机模式下唤醒 3.2.2 系统复位 系统复位发生时,将复位除了控制/状态寄存器 RCC_RSTSCKR 中的复位标志和后备区域外的所有 寄存器。通过查看RCC_RSTSCKR寄存器中的复位状态标志位识别复位事件来源。 其产生条件包括:  NRST引脚上的低电平信号外部复位  窗口看门狗计数终止WWDG复位  独立看门狗计数终止IWDG复位  软件复位SW复位  低功耗管理复位 窗口/独立看门狗复位:由窗口/独立看门狗外设定时器计数周期溢出触发产生,详细描述看其相 应章节。 软件复位CH32F20x产品通过内核寄存器AIRCR中的bit2置1复位系统具体操作请参考Cortex- M3 内核手册获得更详细信息。CH32V20x、CH32V30x和 CH32V31x 产品通过可编程中断控制器 PFIC中 的中断配置寄存器 PFIC_CFGR 的 SYSRST 位置 1 复位系统或配置寄存器 PFIC_SCTLR 的 SYSRST 位置 1 复位系统,具体参考对应章节。 低功耗管理复位通过将用户选择字节中的STANDY_RST位置0将启用待机模式复位。这时执行 了进入待机模式的过程后将执行系统复位而不是进入待机模式。通过将用户选择字节中的STOP_RST 位置0将启用停机模式复位。这时执行了进入停机模式的过程后将执行系统复位而不是进入停机 模式。 V2.4 23

Page 27

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图3-1系统复位结构 V /V DD DDA R PU NRST System Reset Power Reset Software Reset WWDG Reset IWDG Reset Low-power management reset 3.2.3 后备区域复位 后备区域复位发生时只会复位后备区域寄存器包括后备寄存器、RCC_BDCTLR寄存器RTC使 能和LSE振荡器。其产生条件包括  在V 和V 都掉电的前提下由V 或V 上电引起 DD BAT DD BAT  RCC_BDCTLR寄存器的BDRST位置1 V2.4 24

Page 28

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 3.3 时钟 3.3.1 系统时钟结构 图3-2 CH32V305/307/317和CH32F205/207时钟树框图 40kHz IWDGCLK LSI RC to independent watchdog OSC32_IN 32.768kHz RTCCLK OSC32_OUT LSE OSC to RTC 60MHz ETH-PHY /128 PLL3MUL to I2S2 interface PLL3CLK *2.5,*4,… to I2S3 interface *16,20 PLL3VCO (2PLL3CLK) to TRNG PREDIV2 PLL2MUL PREDIV1SRC /1,/2,… *2.5,*4,… PREDIV1 /15,/16 *16,20 PLLSRC XTI to MCO /1,/2,… PLL2VCO /15,/16 PLLMUL SW OSC_IN 3-25MHz (2PLL2CLK) *3,*4,… OSC_OUT HSE OSC /2 *16,*18 PLLCLK 8MHz HSI RC SYSCLK HSI PLLCLK USB /1 p ,/ re 2 s ,/ c 3 aler 48MHz USBCLK HSE /1,/2,… USB /7,/8 HSPLL CLKFLS48MHz OTGFSCLK CSS HSPLLSRC USBHSPREDIV USB2.0 PHY OTGFSSRC 480MHz MCO[3:0] /1,/2 to Flash prog IF HSE HSI to HB bus/core/memory/DMA HB prescaler /1,/2…/512 FCLK core free running clock PLLCLK/2 MCO PLL2CLK /8 to Core System timer PLL3CLK/2 PLL3CLK PB1 prescaler PCLK1 XTI HCLK /1,/2…/16 to PB1 peripherals 144MHz max peripheral clock enable MII_TXC MACTXCLK MII/RMII interface i e f l ( s P e B 1 * 2 prescaler=1)*1 TIMxCLK to TIM2,3,4,5,6,7 peripheral clock enable MII_RMII_SEL in AFIO_MAPR MII_RXC MACRXCLK PB2 prescaler to Ethernet PCLK2 MAC /1,/2…/16 to PB2 peripherals GTXC GTXC peripheral clock enable RGMIION ADC prescaler GRXC GRXC /2,/4,/6,/8 ADCCLK to ADC1,2 ETH1G_EN peripheral clock enable EXT_125M PLL2VCO ETH1G_125M if(PB2 prescaler=1)*1 TIMxCLK PLL3VCO else *2 to TIM1,8,9,10 ETH1G_SRC RGMII interface peripheral clock enable 注本时钟树适用于CH32F20x_D8C和CH32V30x_D8C、CH32V31x_D8C。 V2.4 25

Page 29

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图3-3 CH32F203/V203/V303时钟树框图 40kHz IWDGCLK LSI RC to independent watchdog OSC32_IN 32.768kHz RTCCLK LSE OSC to RTC OSC32_OUT /128 USB prescaler 48MHz /1,/2,/3 USBCLK OSC_IN 3-25MHz PLLXTPRE PLLSRC peripheral clock enable PLLMUL OSC_OUT HSE OSC SW /2 *3,*4,… to I2S2 interface PLLCLK /2 *16,*18 8MHz to I2S3 interface HSI RC HSI SYSCLK to TRNG HSE CSS MCO[3:0] HB prescaler /1,/2…/512 /1,/2 to Flash prog IF HSI MCO HSE to HB bus/core/memory/DMA PLLCLK/2 FCLK core free running clock /8 to Core System timer PB1 prescaler PCLK1 HCLK /1,/2…/16 to PB1 peripherals 144MHz max peripheral clock enable if(PB1 prescaler=1)*1 TIMxCLK else *2 to TIM2,3,4,5,6,7 peripheral clock enable PB2 prescaler PCLK2 /1,/2…/16 to PB2 peripherals peripheral clock enable ADC prescaler /2,/4,/6,/8 ADCCLK to ADC1,2 peripheral clock enable if(PB2 prescaler=1)*1 TIMxCLK else *2 to TIM1,8,9,10 peripheral clock enable 注本时钟树适用于CH32F20x_D6、CH32F20x_D8、CH32V20x_D6和CH32V30x_D8。当使用USB功能时 CPU的频率必须是48MHz、96MHz或144MHz。使用USB高速功能时USBHSPLL的时钟源只能为HSE。 当系统从停止或待机模式唤醒时系统会自动切换为HSI做主频。 V2.4 26

Page 30

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图3-4 CH32V203RB时钟树结构 32kHz IWDGCLK LSI RC to independent watchdog OSC32_IN 32.768kHz RTCCLK LSE OSC to RTC OSC32_OUT /512 USB prescaler /1,/2,/3,/5 48MHz PLLXTPRE USBCLK USBPRE /4 PLLSRC perpheral clock enable OSC_IN 32MHz /8 OSC_OUT HSE OSC /2 PLLMUL SW *3,*4,… PLLCLK /2 *16,*18 8MHz HSI RC HSI SYSCLK HSE CSS MCO[3:0] HB prescaler /1,/2 to Flash prog IF /1,/2…/512 HSI to HB bus/core/memory/DMA MCO HSE FCLK core free running clock PLLCLK/2 to Core System timer /8 /1,/2 60MHz ETH-PHY ETH clock enable HCLK 144MHz max PB1 prescaler PCLK1 /1,/2…/16 to PB1 peripherals perpheral clock enable if(PB1 prescaler=1)*1 TIMxCLK else *2 to TIM2,3,4,5 perpheral clock enable PB2 prescaler PCLK2 /1,/2…/16 to PB2 peripherals perpheral clock enable ADC prescaler /2,/4,/6,/8 ADCCLK to ADC1 perpheral clock enable if(PB2 prescaler=1)*1 TIMxCLK else *2 to TIM1 perpheral clock enable 注1CH32V203RBCH32V20x_D8产品外接晶体或时钟HSE为32M使用外置晶体时无需负 载电容已内置。 2上图3-4中蓝色虚线框出来的部分仅适用于批号倒数第五位大于0的CH32V203RB芯片。 V2.4 27

Page 31

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图3-5 CH32FV208时钟树结构 32kHz IWDGCLK LSI RC to independent watchdog OSC32_IN 32.768kHz RTCCLK LSE OSC to RTC OSC32_OUT /512 USB prescaler 48MHz /1,/2,/3,/5 USBCLK PLLXTPRE USBPRE /4 PLLSRC USB clock enable /8 PLLMUL OSC_IN 32MHz SW OSC_OUT HSE OSC /2 *3,*4,… PLLCLK /2 *16,*18 8MHz HSI RC HSI SYSCLK HSE RFCLK CSS BLE control MCO[3:0] /1,/2 to Flash prog IF HB prescaler to HB bus/core/memory/DMA /1,/2…/512 HSI FCLK core free running clock MCO HSE /8 to Core System timer PLLCLK/2 BLE BLEC/S clock enable HCLK /1,/2 60MHz ETH-PHY 144MHz max ETH clock enable PB1 prescaler PCLK1 /1,/2…/16 to PB1 peripherals peripheral clock enable if(PB1 prescaler=1)*1 TIMxCLK else *2 to TIM2,3,4 peripheral clock enable PB2 prescaler PCLK2 /1,/2…/16 to PB2 peripherals peripheral clock enable ADC prescaler /2,/4,/6,/8 ADCCLK to ADC1 peripheral clock enable if(PB2 prescaler=1)*1 TIMxCLK else *2 to TIM1 peripheral clock enable 注本时钟树适用于CH32F20x_D8W和CH32V20x_D8W。若同时使用USB和ETH功能需将USBPRE[1:0] 置为11b。产品外接晶体或时钟HSE为32M使用外置晶体时无需负载电容已内置。 3.3.2 高速时钟HSI/HSE HSI是系统内部8MHz的RC振荡器产生的高速时钟信号。HSI RC振荡器能够在不需要任何外部器 件的条件下提供系统时钟。它的启动时间很短但时钟频率精度较差。HSI 通过设置 RCC_CTLR 寄存器 中的HSION位被启动和关闭HSIRDY位指示HSI RC振荡器是否稳定。系统默认HSION和HSIRDY置1 建议不要关闭。如果设置了RCC_INTR寄存器的HSIRDYIE位将产生相应中断。  出厂校准:制造工艺的差异会导致每个芯片的 RC 振荡频率不同,所以在芯片出厂前,会为每颗 芯片进行HSI校准。系统复位后工厂校准值被装载到RCC_CTLR寄存器的HSICAL[7:0]中。 V2.4 28

Page 32

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn  用户调整基于不同的电压或环境温度应用程序可以通过RCC_CTLR寄存器里的HSITRIM[4:0] 位来调整HSI频率。 注如果HSE晶体振荡器失效HSI时钟会被作为备用时钟源时钟安全系统。 HSE是外部的高速时钟信号包括外部晶体/陶瓷谐振器产生或者外部高速时钟送入。  外部晶体/陶瓷谐振器HSE晶体外接3-25MHz外部振荡器为系统提供更为精确的时钟源。进 一步信息可参考数据手册的电气特性部分。HSE晶体可以通过设置RCC_CTLR寄存器中的HSEON位 被启动和关闭HSERDY位指示HSE晶体振荡是否稳定硬件在HSERDY位置1后才将时钟送入系 统。如果设置了RCC_INTR寄存器的HSERDYIE位将产生相应中断。 图3-6 高速外部晶体电路 OSC_IN CL1 L C o a a p d a citance 325MHz OSC_OUT CL2 注:负载电容需要尽可能地靠近振荡器引脚,并根据晶体厂家参数选择容值。  外部高速时钟源HSE旁路此模式从外部直接送入时钟源到OSC_IN引脚OSC_OUT引脚悬空。 最高支持25MHz频率。应用程序需在HSEON位为0情况下置位HSEBYP位打开HSE旁路功能 然后再置位HSEON位。 图3-7 高速时钟源电路 External clock f source HSE_ext OSC_IN (Suspended) 3.3.3 低速时钟LSI/LSE LSI是系统内部的RC振荡器产生的低速时钟信号。它可以在停机和待机模式下保持运行为RTC 时钟、独立看门狗和唤醒单元提供时钟基准。进一步信息可参考数据手册的电气特性部分。LSI可以 通过设置RCC_RSTSCKR寄存器中的LSION位被启动和关闭然后通过查询LSIRDY位检测LSI RC振荡 是否稳定,硬件在 LSIRDY位置 1后才将时钟送入。如果设置了 RCC_INTR寄存器的 LSIRDYIE位将 产生相应中断。 LSE是外部的低速时钟信号包括外部晶体/陶瓷谐振器产生或者外部低速时钟送入。它为RTC时 钟或者其他定时功能提供一个低功耗且精确的时钟源。  外部晶体/陶瓷谐振器LSE晶体外接32.768kHz的外部低速振荡器。LSE通过设置RCC_BDCTLR 寄存器中的LSEON位被启动和关闭LSERDY位指示LSE晶体振荡是否稳定硬件在LSERDY位置1后 才将时钟送入系统。如果设置了RCC_INTR寄存器的LSERDYIE位将产生相应中断。 V2.4 29

Page 33

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图3-8 低速外部晶体电路 OSC32_IN CL1 L C o a a p d a citance 32.768kHZ OSC32_OUT CL2  外部低速时钟源LSE旁路此模式从外部直接送入时钟源到OSC32_IN引脚OSC32_OUT引脚 悬空。应用程序需在 LSEON 位为 0 情况下,置位 LSEBYP 位,打开 LSE 旁路功能,然后再置位 LSEON 位。 图3-9 低速时钟源电路 External clock f source LSE_ext OSC32_IN (Suspended) OSC32_OUT 3.3.4 PLL 时钟 通过配置RCC_CFGR0寄存器和扩展寄存器EXTEN_CTR内部PLL时钟可以选择3种时钟来源和倍 频系数,这些设置必须在每个 PLL 被开启前完成,一旦 PLL 被启动,这些参数就不能被改动。设置 RCC_CTLR寄存器中的PLLON位被启动和关闭PLLRDY位指示PLL时钟是否稳定硬件在PLLRDY位置 1后才将时钟送入系统。设置RCC_CTLR寄存器中的PLLON2位被启动和关闭PLLRDY2位指示PLL2时 钟是否稳定硬件在PLLRDY2位置1后才将时钟送入系统。设置RCC_CTLR寄存器中的PLLON3位被启 动和关闭PLLRDY3位指示PLL3时钟是否稳定硬件在PLLRDY3位置1后才将时钟送入系统。如果设 置了RCC_INTR寄存器的PLLRDYIE位、PLL2RDYIE位或PLL3RDYIE位将产生相应中断。 PLL时钟来源  HSI时钟送入  HSI经过2分频送入  HSE时钟或通过一个可配置的分频器的PLL2时钟  PLL2和PLL3由HSE通过一个可配置的分频器PREDIV22提供时钟 3.3.5 总线/外设时钟 3.3.5.1 系统时钟SYSCLK 通过配置RCC_CFGR0寄存器SW[1:0]位配置系统时钟来源SWS[1:0]指示当前的系统时钟源。  HSI作为系统时钟  HSE作为系统时钟  PLL时钟作为系统时钟 控制器复位后默认HSI时钟被选为系统时钟源。时钟源之间的切换必须在目标时钟源准备就绪 后才会发生。 3.3.5.2 HB/PB1/PB2 总线外设时钟HCLK/PCLK1/PCLK2 通过配置RCC_CFGR0寄存器的HPRE[3:0]、PPRE1[2:0]、PPRE2[2:0]位可以分别配置HB、PB1、 PB2总线的时钟。这些总线时钟决定了挂载在其下面的外设接口访问时钟基准。应用程序可以调整不 V2.4 30

Page 34

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 同的数值,来降低部分外设工作时的功耗。 通过 RCC_AHBRSTR、RCC_APB1PRSTR、RCC_APB2PRSTR 寄存器中各个位可以复位不同的外设模块, 将其恢复到初始状态。 通过 RCC_AHBPCENR、RCC_APB1PCENR、RCC_APB2PCENR 寄存器中各个位可以单独开启或关闭不同 外设模块通讯时钟接口。使用某个外设时,首先需要开启其时钟使能位,才能访问其寄存器。 3.3.5.3 RTC 时钟RTCCLK 通过设置 RCC_BDCTLR 寄存器的 RTCSEL[1:0]位RTCCLK 时钟源可以由 HSE 分频、LSE 或 LSI 时 钟提供。修改此位前要保证电源控制寄存器PWR_CTLR中的DBP位置1只有后备区域复位才能 复位此位。  LSE作为RTC时钟由于LSE处于后备域由 V 供电只要V 维持供电,尽管 V 供电被切断, BAT BAT DD RTC仍继续工作。  LSI作为RTC时钟如果V 供电被切断RTC自动唤醒不能保证。 DD  HSE 经分频后作为 RTC 时钟:如果 V 供电被切断或内部电压调压器被关闭1.8V 域的供电被切 DD 断则RTC状态不确定。相应型号芯片的HSE的分频系数参考RCC_BDCTLR寄存器RTCSEL[1:0] 位的描述。 3.3.5.4 独立看门狗时钟 如果独立看门狗已经由硬件配置设置或软件启动LSI 振荡器将被强制打开,并且不能被关闭。 在LSI振荡器稳定后时钟供应给IWDG。 3.3.5.5 时钟输出MCO 微控制器允许输出时钟信号到 MCO 引脚。在相应的 GPIO 端口寄存器配置复用推挽输出模式,通 过配置RCC_CFGR0寄存器MCO[3:0]位可以选择以下8个时钟信号作为MCO时钟输出  系统时钟SYSCLK输出  HSI时钟输出  HSE时钟输出  PLL时钟经过2分频输出  PLL2时钟输出  PLL3时钟输出  PLL3时钟经过2分频输出  XT1外部3-25MHz振荡器用于以太网 3.3.5.6 USB 时钟 USBD 48MHz 时钟源来自通过一个可配置的分频器的 PLL 时钟,此时 PLL 支持三种时钟配置,包 括 48MHz、96MHz 和 144MHz通过配置寄存器 RCC_CFGR0 的 USBPRE[1:0]位输出 48MHz 时钟到 USBD。 USBFS/OTG_FS 48MHz时钟源来自通过一个可配置的分频器的PLL时钟或者USBHSPLL时钟可通 过配置寄存器 RCC_CFGR2的 USBFSSRC 位来选择。若时钟源选择通过一个可配置的分频器的 PLL时钟 作为时钟源时则配置步骤可参考USBD。若时钟源选择USBHSPLL时钟作为时钟源时通过配置寄存 器RCC_CFGR2的USBHSCLK[1:0]位选择USBHSPLL参考时钟频率参考时钟频率必须和USBHSPLL输 入时钟保持一致)。 USBHS时钟源来自USBHSPLL时钟通过配置寄存器RCC_CFGR2的USBHSCLK[1:0]位选择USBHSPLL 参考时钟频率(参考时钟频率必须和 USBHSPLL 输入时钟保持一致),通过配置寄存器 RCC_CFGR2 的 USBHSPLL位使能USB PHY内部PLL。 3.3.5.7 ETH 时钟 V2.4 31

Page 35

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn ETH时钟配置参考27.1.4.5章节。 3.3.5.8 I2S 和 RNG 时钟 I2S和 RNG的时钟源来自 PLL3VCO或系统时钟SYSCLKI2S2、I2S3和 TRNG可分别通过配置 寄存器RCC_CFGR2的I2S2SRC位、I2S3SRC位和RNGSRC位选择时钟源。 3.3.6 时钟安全系统 时钟安全系统是控制器的一种运行保护机制它可以在HSE时钟发送故障的情况下切换到HSI 时钟下,并产生中断通知,允许应用程序软件完成营救操作。 通过设置RCC_CTLR寄存器的CSSON位置1激活时钟安全系统。此时时钟监测器将在HSE振荡 器启动HSERDY=1延迟后被使能并在HSE时钟关闭后关闭。一旦系统运行过程中HSE时钟发生故 障HSE振荡器将被关闭时钟失效事件将被送到高级定时器TIM1和TIM8的刹车输入端并产生 时钟安全中断CSSF位置1并且应用程序进入NMI不可屏蔽中断通过置位CSSC位可以清除CSSF 位标志可撤销NMI中断挂起位。 如果当前HSE作为系统时钟或者当前HSE作为PLL输入时钟PLL作为系统时钟时钟安全系 统将在HSE故障时自动将系统时钟切换到HSI振荡器并关闭HSE振荡器和PLL。 3.4 寄存器描述 表3-1 RCC相关寄存器列表 名称 访问地址 描述 复位值 R32_RCC_CTLR 0x40021000 时钟控制寄存器 0x0000xx83 R32_RCC_CFGR0 0x40021004 时钟配置寄存器0 0x00000000 R32_RCC_INTR 0x40021008 时钟中断寄存器 0x00000000 R32_RCC_APB2PRSTR 0x4002100C PB2外设复位寄存器 0x00000000 R32_RCC_APB1PRSTR 0x40021010 PB1外设复位寄存器 0x00000000 R32_RCC_AHBPCENR 0x40021014 HB外设时钟使能寄存器 0x00000014 R32_RCC_APB2PCENR 0x40021018 PB2外设时钟使能寄存器 0x00000000 R32_RCC_APB1PCENR 0x4002101C PB1外设时钟使能寄存器 0x00000000 R32_RCC_BDCTLR 0x40021020 后备域控制寄存器 0x00000000 R32_RCC_RSTSCKR 0x40021024 控制/状态寄存器 0x0C000000 R32_RCC_AHBRSTR 0x40021028 HB外设复位寄存器 0x00000000 R32_RCC_CFGR2 0x4002102C 时钟配置寄存器2 0x00000000 表3-2 OSC相关寄存器列表 名称 访问地址 描述 复位值 R32_HSE_CAL_CTRL 0x4002202C 外部晶振校准控制寄存器 0x09000000 R16_LSI32K_TUNE 0x40022036 内部低速晶振校准调节寄存器 0x1011 R8_LSI32K_CAL_CFG 0x40022049 内部低速晶振校准配置寄存器 0x01 R16_LSI32K_CAL_STATR 0x4002204C 内部低速晶振校准状态寄存器 0x0000 R8_LSI32K_CAL_OV_CNT 0x4002204E 内部低速晶振校准次数计数器 0x00 R8_LSI32K_CAL_CTRL 0x4002204F 内部低速晶振校准控制寄存器 0x80 注适用于CH32V20x_D8W、CH32F20x_D8W。 V2.4 32

Page 36

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 3.4.1 时钟控制寄存器RCC_CTLR 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PLL3 PLL3 PLL2 PLL2 PLL PLL HSE HSE Reserved Reserved CSSON HSEON RDY ON RDY ON RDY ON BYP RDY 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reser HSI HSICAL[7:0] HSITRIM[4:0] HSION ved RDY 位 名称 访问 描述 复位值 [31:30] Reserved RO 保留。 0 PLL3时钟就绪锁定标志位由硬件置位 0PLL3时钟未锁定 29 PLL3RDY RO 1PLL3时钟锁定。 0 注 适 用 于 CH32F20x_D8C 、 CH32V30x_D8C 、 CH32V31x_D8C。 PLL3时钟使能控制位 0关闭PLL3时钟 28 PLL3ON RW 1使能PLL3时钟。 0 注进入停止或待机低功耗模式后此位由硬件清0。 适用于CH32F20x_D8C、CH32V30x_D8C、CH32V31x_D8C。 PLL2时钟就绪锁定标志位由硬件置位 0PLL时钟未锁定 27 PLL2RDY RO 1PLL时钟锁定。 0 注 适 用 于 CH32F20x_D8C 、 CH32V30x_D8C 、 CH32V31x_D8C。 PLL2时钟使能控制位 0关闭PLL时钟 26 PLL2ON RW 1使能PLL时钟。 0 注进入停止或待机低功耗模式后此位由硬件清0。 适用于CH32F20x_D8C、CH32V30x_D8C、CH32V31x_D8C。 PLL时钟就绪锁定标志位由硬件置位 25 PLLRDY RO 0PLL时钟未锁定 0 1PLL时钟锁定。 PLL时钟使能控制位 0关闭PLL时钟 24 PLLON RW 0 1使能PLL时钟。 注进入停止或待机低功耗模式后此位由硬件清0。 [23:20] Reserved RO 保留。 0 时钟安全系统使能控制位: 0关闭时钟安全系统 1使能时钟安全系统。当HSE准备好HSERDY置1 19 CSSON RW 0 硬件开启对 HSE 的时钟监测功能,发现 HSE 异常触发 CSSF标志及 NMI中断当HSE没有准备好硬件关闭 对HSE的时钟监测功能。 V2.4 33

Page 37

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 注:此功能不适用于批号倒数第五位等于 0 的 CH32V20x_D6芯片。 外部高速晶体旁路控制位: 0不旁路高速外部晶体/陶瓷谐振器; 18 HSEBYP RW 0 1旁路外部高速晶体/陶瓷谐振器(使用外部时钟源)。 注此位需在HSEON为0下写入。 外部高速晶体振荡稳定就绪标志位(由硬件置位): 0外部高速晶体振荡没有稳定 17 HSERDY RO 0 1外部高速晶体振荡稳定。 注在HSEON位清0后该位需要6个HSE周期清0。 外部高速晶体振荡使能控制位: 0关闭HSE振荡器 16 HSEON RW 0 1使能HSE振荡器。 注进入停止或待机低功耗模式后此位由硬件清0。 [15:8] HSICAL[7:0] RO 内部高速时钟校准值,在系统启动时被自动初始化。 xxh 内部高速时钟调整值: 用户可以输入一个调整值叠加到HSICAL[7:0]数值上, 根据电压和温度的变化调整内部 HSI RC 振荡器的频 [7:3] HSITRIM[4:0] RW 10000b 率。 默认值为 16可以把 HSI 调整到 8MHz±0.25%;每步 HSICAL的变化调整约20kHz。 2 Reserved RO 保留。 0 内部高速时钟8MHz稳定就绪标志位由硬件置位 0内部高速时钟8MHz没有稳定 1 HSIRDY RO 1 1内部高速时钟8MHz稳定。 注在HSION位清0后该位需要6个HSI周期清0。 内部高速时钟8MHz使能控制位 0关闭HSI振荡器 1使能HSI振荡器。 0 HSION RW 1 注:当从待机和停止模式返回或用作系统时钟的外部 振荡器HSE发生故障时该位由硬件置1来启动内部 8MHz的RC振荡器。 3.4.2 时钟配置寄存器 0RCC_CFGR0 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ADC_ Rese ETHP USBPRE PLL PLL ADCDUTY DUTY MCO[3:0] PLLMUL[3:0] rved RE [1:0] XTPRE SRC _SEL 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADCPRE[1:0] PPRE2[2:0] PPRE1[2:0] HPRE[3:0] SWS[1:0] SW[1:0] 位 名称 访问 描述 复位值 31 ADCDUTY RW ADC时钟占空比调整 0 V2.4 34

Page 38

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0ADC时钟占空比为50% 1ADC时钟低电平时间更长。 ADC时钟占空比选择 0ADC时钟占空比为50% 1ADC时钟占空比为75%。 30 ADC_DUTY_SEL RW 0 注:此位仅适用于 CH32F20x_D8、CH32F20x_D8C、 CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C批号倒数 第六位不为0的产品。 29 Reserved RO 保留。 0 以太网时钟来源预分频控制: 0不分频 28 ETHPRE RW 12分频 0 注 适 用 于 CH32V20x_D8W 、 CH32V20x_D8 、 CH32F20x_D8W。 微控制器MCO引脚时钟输出控制 00xx没有时钟输出 0100系统时钟SYSCLK输出 0101内部8MHz的RC振荡器时钟HSI输出 0110外部振荡器时钟HSE输出 0111PLL时钟2分频后输出 [27:24] MCO[3:0] RW 1000PLL2时钟输出 0000b 1001PLL3时钟2分频后输出 1010XT1外部震荡器时钟输出 1011PLL3时钟输出。 注在启动或切换MCO时钟时可能有几个周期的时 钟丢失。其中1000 —— 1011适用于CH32F20x_D8C、 CH32V30x_D8C、CH32V31x_D8C。 USBFS/USBOTG时钟分频配置 001分频适用于PLLCLK=48MHz 012分频适用于PLLCLK=96MHz 103分频适用于PLLCLK=144MHz 115 分频,且 PLL 的源为 HSE 二分频(适用于 PLLCLK=240MHz 仅 适 用 于 CH32V20x_D8W/ CH32F20x_D8W 以及 CH32V20x_D8 批号倒数第五位大于 [23:22] USBPRE[1:0] RW 00b 0的。 注CH32V20x_D8W、CH32F20x_D8W以及CH32V20x_D8 批号倒数第五位大于0的支持11b选项其余型号该 选项保留。 USBD/USBHS模块时钟需要48MHz。此位必须在USBD和 USBHS 时钟使能前进行配置RCC_AHBPCENR 和 RCC_APB1PCENR中 PLL时钟倍频系数在PLL关闭才可写入 对于CH32F20x_D6、CH32F20x_D8、CH32F20x_D8W、 [21:18] PLLMUL[3:0] RW CH32V20x_D6、CH32V20x_D8、CH32V20x_D8W、 0000b CH32V30x_D8 0000PLL 2倍频输出 0001PLL 3倍频输出 V2.4 35

Page 39

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0010PLL 4倍频输出 0011PLL 5倍频输出 0100PLL 6倍频输出 0101PLL 7倍频输出 0110PLL 8倍频输出 0111PLL 9倍频输出 1000PLL 10倍频输出 1001PLL 11倍频输出 1010PLL 12倍频输出 1011PLL 13倍频输出 1100PLL 14倍频输出 1101PLL 15倍频输出 1110PLL 16倍频输出 1111PLL 18倍频输出。 对于CH32F20x_D8C、CH32V30x_D8C、CH32V31x_D8C 0000PLL 18倍频输出 0001PLL 3倍频输出 0010PLL 4倍频输出 0011PLL 5倍频输出 0100PLL 6倍频输出 0101PLL 7倍频输出 0110PLL 8倍频输出 0111PLL 9倍频输出 1000PLL 10倍频输出 1001PLL 11倍频输出 1010PLL 12倍频输出 1011PLL 13倍频输出 1100PLL 14倍频输出 1101PLL 6.5倍频输出; 1110PLL 15倍频输出 1111PLL 16倍频输出。 HSE分频送入PLL控制在PLL关闭才可写入 对于 CH32F20x_D6、CH32F20x_D8、CH32V20x_D6、 CH32V30x_D8 0HSE不分频送入PLL 1HSE 2分频送入PLL。 对于CH32F20x_D8C、CH32V30x_D8C、CH32V31x_D8C 由软件置1或清0来选择PREDIV1分频因子的最低位。 17 PLLXTPRE RW PLLXTPRE位与RCC_CFGR2寄存器的位[0]是同一位,因 0 此修改RCC_CFGR2寄存器的位[0]同时会改变这一位。 如果RCC_CFGR2寄存器的位[3:1]为000b则该位控制 PREDIV1 对输入时钟进行 2 分频(PLLXPRE=1),或不对 输入时钟分频(PLLXPRE=0)。 对于CH32F20x_D8W、CH32V20x_D8W、CH32V20x_D8 0HSE 4分频送入PLL 1HSE 8分频送入PLL。 PLL的输入时钟源在PLL关闭才可写入 对于 CH32F20x_D6、CH32F20x_D8、CH32V20x_D6、 CH32V30x_D8 0HSI不分频或2分频送入PLL 1HSE不分频或2分频送入PLL。 16 PLLSRC RW 对于CH32F20x_D8C、CH32V30x_D8C、CH32V31x_D8C 0 0HSI不分频或2分频送入PLL 1PREDIV1输出送入PLL。 对于CH32F20x_D8W、CH32V20x_D8W、CH32V20x_D8 0HSI不分频或2分频送入PLL 1HSE 2分频或4分频或8分频送入PLL。 V2.4 36

Page 40

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn ADC时钟来源预分频控制 00PCLK2 2分频后作为ADC时钟 01PCLK2 4分频后作为ADC时钟 [15:14] ADCPRE[1:0] RW 00b 10PCLK2 6分频后作为ADC时钟 11PCLK2 8分频后作为ADC时钟。 注ADC时钟最高不要超过14MHz。 PB2时钟来源预分频控制 0xxHCLK不分频 100HCLK 2分频 [13:11] PPRE2[2:0] RW 000b 101HCLK 4分频 110HCLK 8分频 111HCLK 16分频 PB1时钟来源预分频控制 0xxHCLK不分频 100HCLK 2分频 [10:8] PPRE1[2:0] RW 000b 101HCLK 4分频 110HCLK 8分频 111HCLK 16分频 HB时钟来源预分频控制 0xxxSYSCLK不分频 1000SYSCLK 2分频 1001SYSCLK 4分频 1010SYSCLK 8分频 [7:4] HPRE[3:0] RW 0000b 1011SYSCLK 16分频 1100SYSCLK 64分频 1101SYSCLK 128分频 1110SYSCLK 256分频 1111SYSCLK 512分频。 系统时钟SYSCLK状态硬件置位 00系统时钟源是HSI [3:2] SWS[1:0] RO 01系统时钟源是HSE 00b 10系统时钟源是PLL 11不可用。 选择系统时钟来源: 00HSI作为系统时钟 01HSE作为系统时钟 10PLL输出作为系统时钟 [1:0] SW[1:0] RW 00b 11不可用。 注在使能了时钟安全系统下CSSON=1当从待机 和停止模式返回或用作系统时钟的外部振荡器HSE发 生故障时由硬件强制选择HSI作为系统时钟。 3.4.3 时钟中断寄存器RCC_INTR 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 V2.4 37

Page 41

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn PLL3 PLL2 PLL HSE HSI LSE LSI Reserved CSSC RDYC RDYC RDYC RDYC RDYC RDYC RDYC 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reser PLL3 PLL2 PLL HSE HSI LSE LSI PLL3 PLL2 PLL HSE HSI LSE LSI CSSF ved RDYIE RDYIE RDYIE RDYIE RDYIE RDYIE RDYIE RDYF RDYF RDYF RDYF RDYF RDYF RDYF 位 名称 访问 描述 复位值 [31:24] Reserved RO 保留。 0 清除时钟安全系统中断标志位CSSF 23 CSSC WO 0无动作 0 1清除CSSF中断标志。 清除PLL3就绪中断标志位 0无动作 22 PLL3RDYC WO 1清除PLL3RDYF中断标志。 0 注 适 用 于 CH32F20x_D8C 、 CH32V30x_D8C 、 CH32V31x_D8C。 清除PLL2就绪中断标志位 0无动作 21 PLL2RDYC WO 1清除PLL2RDYF中断标志。 0 注 适 用 于 CH32F20x_D8C 、 CH32V30x_D8C 、 CH32V31x_D8C。 清除PLL就绪中断标志位 20 PLLRDYC WO 0无动作 0 1清除PLLRDYF中断标志。 清除HSE振荡器就绪中断标志位 19 HSERDYC WO 0无动作 0 1清除HSERDYF中断标志。 清除HSI振荡器就绪中断标志位 18 HSIRDYC WO 0无动作 0 1清除HSIRDYF中断标志。 清除LSE振荡器就绪中断标志位 17 LSERDYC WO 0无动作 0 1清除LSERDYF中断标志。 清除LSI振荡器就绪中断标志位 16 LSIRDYC WO 0无动作 0 1清除LSIRDYF中断标志。 15 Reserved RO 保留。 0 PLL3就绪中断使能位 0关闭PLL3就绪中断 14 PLL3RDYIE RW 1使能PLL3就绪中断。 0 注 适 用 于 CH32F20x_D8C 、 CH32V30x_D8C 、 CH32V31x_D8C。 PLL2就绪中断使能位 13 PLL2RDYIE RW 0关闭PLL2就绪中断 0 1使能PLL2就绪中断。 V2.4 38

Page 42

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 适 用 于 CH32F20x_D8C 、 CH32V30x_D8C 、 CH32V31x_D8C。 PLL就绪中断使能位 12 PLLRDYIE RW 0关闭PLL就绪中断 0 1使能PLL就绪中断。 HSE就绪中断使能位 11 HSERDYIE RW 0关闭HSE就绪中断 0 1使能HSE就绪中断。 HSI就绪中断使能位 10 HSIRDYIE RW 0关闭HSI就绪中断 0 1使能HSI就绪中断。 LSE就绪中断使能位 9 LSERDYIE RW 0关闭LSE就绪中断 0 1使能LSE就绪中断。 LSI就绪中断使能位 8 LSIRDYIE RW 0关闭LSI就绪中断 0 1使能LSI就绪中断。 时钟安全系统中断标志位: 0无时钟安全系统中断 7 CSSF RO 0 1HSE时钟失效产生了时钟安全中断CSSI。 硬件置位软件写CSSC位1清除。 PLL3时钟就绪锁定中断标志 0无PLL3时钟锁定中断 1PLL3时钟锁定产生中断。 6 PLL3RDYF RO 0 硬件置位软件写PLL3RDYC位1清除。 注 适 用 于 CH32F20x_D8C 、 CH32V30x_D8C 、 CH32V31x_D8C。 PLL2时钟就绪锁定中断标志 0无PLL2时钟锁定中断 1PLL2时钟锁定产生中断。 5 PLL2RDYF RO 0 硬件置位软件写PLL2RDYC位1清除。 注 适 用 于 CH32F20x_D8C 、 CH32V30x_D8C 、 CH32V31x_D8C。 PLL时钟就绪锁定中断标志 0无PLL时钟锁定中断 4 PLLRDYF RO 0 1PLL时钟锁定产生中断。 硬件置位软件写PLLRDYC位1清除。 HSE时钟就绪中断标志 0无HSE时钟就绪中断 3 HSERDYF RO 0 1HSE时钟就绪产生中断。 硬件置位软件写HSERDYC位1清除。 HSI时钟就绪中断标志 0无HSI时钟就绪中断 2 HSIRDYF RO 0 1HSI时钟就绪产生中断。 硬件置位软件写HSIRDYC位1清除。 1 LSERDYF RO LSE时钟就绪中断标志 0 V2.4 39

Page 43

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0无LSE时钟就绪中断 1LSE时钟就绪产生中断。 硬件置位软件写LSERDYC位1清除。 LSI时钟就绪中断标志 0无LSI时钟就绪中断 0 LSIRDYF RO 0 1LSI时钟就绪产生中断。 硬件置位软件写LSIRDYC位1清除。 3.4.4 PB2 外设复位寄存器RCC_APB2PRSTR 偏移地址0x0C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TIM10 TIM9 Reserved Reserved RST RST 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Rese USART1 TIM8 SPI1 TIM1 ADC2 ADC1 IOPE IOPD IOPC IOPB IOPA Reser AFIO Reserved rved RST RST RST RST RST RST RST RST RST RST RST ved RST 位 名称 访问 描述 复位值 [31:21] Reserved RO 保留。 0 TIM10模块复位控制 20 TIM10RST RW 0 0无作用 1复位模块。 TIM9模块复位控制 19 TIM9RST RW 0 0无作用 1复位模块。 [18:15] Reserved RO 保留。 0 USART1接口复位控制 14 USART1RST RW 0 0无作用 1复位模块。 TIM8模块复位控制 13 TIM8RST RW 0 0无作用 1复位模块。 SPI1接口复位控制 12 SPI1RST RW 0 0无作用 1复位模块。 TIM1模块复位控制 11 TIM1RST RW 0 0无作用 1复位模块。 ADC2模块复位控制 10 ADC2RST RW 0 0无作用 1复位模块。 ADC1模块复位控制 9 ADC1RST RW 0 0无作用 1复位模块。 [8:7] Reserved RO 保留。 0 IO的PE端口模块复位控制 6 IOPERST RW 0 0无作用 1复位模块。 IO的PD端口模块复位控制 5 IOPDRST RW 0 0无作用 1复位模块。 IO的PC端口模块复位控制 4 IOPCRST RW 0 0无作用 1复位模块。 3 IOPBRST RW IO的PB端口模块复位控制 0 V2.4 40

Page 44

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0无作用 1复位模块。 IO的PA端口模块复位控制 2 IOPARST RW 0 0无作用 1复位模块。 1 Reserved RO 保留。 0 IO辅助功能模块复位控制 0 AFIORST RW 0 0无作用 1复位模块。 3.4.5 PB1 外设复位寄存器RCC_APB1PRSTR 偏移地址0x10 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 USAR USAR DAC PWR BKP CAN2 CAN1 Reser USBD I2C2 I2C1 USART3 USART2 Rese Reserved T5 T4 RST RST RST RST RST ved RST RST RST RST RST rved RST RST 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 USAR USAR USAR SPI3 SPI2 WWDG TIM7 TIM6 TIM5 TIM4 TIM3 TIM2 Reserved Reserved T8RS T7RS T6RS RST RST RST RST RST RST RST RST RST T T T 位 名称 访问 描述 复位值 [31:30] Reserved RO 保留。 0 DAC模块复位控制 29 DACRST RW 0 0无作用 1复位模块。 电源接口模块复位控制: 28 PWRRST RW 0 0无作用 1复位模块。 后备单元复位控制: 27 BKPRST RW 0 0无作用 1复位模块。 CAN2模块复位控制 26 CAN2RST RW 0 0无作用 1复位模块。 CAN1模块复位控制 25 CAN1RST RW 0 0无作用 1复位模块。 24 Reserved RO 保留。 0 USBD模块复位控制 23 USBDRST RW 0 0无作用 1复位模块。 I2C 2接口复位控制 22 I2C2RST RW 0 0无作用 1复位模块。 I2C 1接口复位控制 21 I2C1RST RW 0 0无作用 1复位模块。 USART5接口复位控制 20 USART5RST RW 0 0无作用 1复位模块。 USART4接口复位控制 19 USART4RST RW 0 0无作用 1复位模块。 USART3接口复位控制 18 USART3RST RW 0 0无作用 1复位模块。 17 USART2RST RW USART2接口复位控制 0 V2.4 41

Page 45

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0无作用 1复位模块。 16 Reserved RO 保留。 0 SPI3接口复位控制 15 SPI3RST RW 0 0无作用 1复位模块。 SPI2接口复位控制 14 SPI2RST RW 0 0无作用 1复位模块。 [13:12] Reserved RO 保留。 0 窗口看门狗复位控制: 11 WWDGRST RW 0 0无作用 1复位模块。 [10:9] Reserved RO 保留。 0 USART8接口复位控制 8 USART8RST RW 0 0无作用 1复位模块。 USART7接口复位控制 7 USART7RST RW 0 0无作用 1复位模块。 USART6接口复位控制 6 USART6RST RW 0 0无作用 1复位模块。 定时器7模块复位控制 5 TIM7RST RW 0 0无作用 1复位模块。 定时器6模块复位控制 4 TIM6RST RW 0 0无作用 1复位模块。 定时器5模块复位控制 3 TIM5RST RW 0 0无作用 1复位模块。 定时器4模块复位控制 2 TIM4RST RW 0 0无作用 1复位模块。 定时器3模块复位控制 1 TIM3RST RW 0 0无作用 1复位模块。 定时器2模块复位控制 0 TIM2RST RW 0 0无作用 1复位模块。 V2.4 42

Page 46

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 3.4.6 HB 外设时钟使能寄存器RCC_AHBPCENR 偏移地址0x14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ETHMA Reserved BLES CRXEN /BLEC 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ETHMAETHMA OTGFS USBHS SDIO FSMCE Reser CRC SRAM DMA2 DMA1 DVPEN RNGEN Reserved CTXEN CEN EN EN EN N ved EN EN EN EN 位 名称 访问 描述 复位值 [31:18] Reserved RO 保留。 0 BLES时钟使能 0BLES时钟关闭 17 BLES RW 1 1BLES时钟开启。 注适用于CH32V20x_D8W、CH32F20x_D8W。 BLEC时钟使能 0BLEC时钟关闭 16 BLEC RW 1 1BLEC时钟开启。 注适用于CH32V20x_D8W、CH32F20x_D8W。 以太网MAC接收时钟使能 0以太网MAC接收时钟关闭 16 ETHMACRXEN RW 1以太网MAC接收时钟开启。 0 注 适 用 于 CH32V30x_D8C 、 CH32V31x_D8C 、 CH32F20x_D8C百兆千兆外置PHY。 以太网MAC发送时钟使能 0以太网MAC发送时钟关闭 15 ETHMACTXEN RW 1以太网MAC发送时钟开启。 0 注 适 用 于 CH32V30x_D8C 、 CH32V31x_D8C 、 CH32F20x_D8C百兆千兆外置PHY。 以太网MAC时钟使能 0以太网MAC时钟关闭 14 ETHMACEN RW 1以太网MAC时钟开启。 0 注 适 用 于 CH32V30x_D8C 、 CH32V31x_D8C 、 CH32F20x_D8C百兆千兆外置PHY。 DVP模块时钟使能位 13 DVPEN RW 0 0模块时钟关闭 1模块时钟开启。 USBOTG_FS模块时钟使能位 12 OTGFSEN RW 0 0模块时钟关闭 1模块时钟开启。 USBHS模块时钟使能位 11 USBHSEN RW 0 0模块时钟关闭 1模块时钟开启。 SDIO模块时钟使能位 10 SDIOEN RW 0 0模块时钟关闭 1模块时钟开启。 RNG模块时钟使能位 9 RNGEN RW 0 0模块时钟关闭 1模块时钟开启。 V2.4 43

Page 47

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn FSMCEN模块时钟使能位 8 FSMCEN RW 0 0模块时钟关闭 1模块时钟开启。 7 Reserved RO 保留。 0 CRC模块时钟使能位 6 CRCEN RW 0 0模块时钟关闭 1模块时钟开启。 [5:3] Reserved RO 保留。 0 SRAM接口模块时钟使能位 2 SRAMEN RW 0睡眠模式时SRAM接口模块时钟关闭 1 1睡眠模式时SRAM接口模块时钟开启。 DMA2模块时钟使能位 1 DMA2EN RW 0 0模块时钟关闭 1模块时钟开启。 DMA1模块时钟使能位 0 DMA1EN RW 0 0模块时钟关闭 1模块时钟开启。 3.4.7 PB2 外设时钟使能寄存器RCC_APB2PCENR 偏移地址0x18 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TIM10 TIM9 Reserved Reserved EN EN 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reser USART1 TIM8 SPI1 TIM1 ADC2 ADC1 IOPE IOPD IOPC IOPB IOPA Reser AFIO Reserved ved EN EN EN EN EN EN EN EN EN EN EN ved EN 位 名称 访问 描述 复位值 [31:21] Reserved RO 保留。 0 TIM10接口时钟使能位 20 TIM10EN RW 0 0模块时钟关闭 1模块时钟开启。 TIM9接口时钟使能位 19 TIM9EN RW 0 0模块时钟关闭 1模块时钟开启。 [18:15] Reserved RO 保留。 0 USART1接口时钟使能位 14 USART1EN RW 0 0模块时钟关闭 1模块时钟开启。 TIM8模块时钟使能位 13 TIM8EN RW 0 0模块时钟关闭 1模块时钟开启。 SPI1接口时钟使能位 12 SPI1EN RW 0 0模块时钟关闭 1模块时钟开启。 TIM1模块时钟使能位 11 TIM1EN RW 0 0模块时钟关闭 1模块时钟开启。 ADC2模块时钟使能位 10 ADC2EN RW 0 0模块时钟关闭 1模块时钟开启。 ADC1模块时钟使能位 9 ADC1EN RW 0 0模块时钟关闭 1模块时钟开启。 [8:7] Reserved RO 保留。 0 6 IOPEEN RW IO的PE端口模块时钟使能位 0 V2.4 44

Page 48

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0模块时钟关闭 1模块时钟开启。 IO的PD端口模块时钟使能位 5 IOPDEN RW 0 0模块时钟关闭 1模块时钟开启。 IO的PC端口模块时钟使能位 4 IOPCEN RW 0 0模块时钟关闭 1模块时钟开启。 IO的PB端口模块时钟使能位 3 IOPBEN RW 0 0模块时钟关闭 1模块时钟开启。 IO的PA端口模块时钟使能位 2 IOPAEN RW 0 0模块时钟关闭 1模块时钟开启。 1 Reserved RO 保留。 0 IO辅助功能模块时钟使能位 0 AFIOEN RW 0 0模块时钟关闭 1模块时钟开启。 3.4.8 PB1 外设时钟使能寄存器RCC_APB1PCENR 偏移地址0x1C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DAC PWR BKP CAN2 CAN1 Reser USBD I2C2 I2C1 USART5 USART4 USART3 USART2 Reser Reserved EN EN EN EN EN ved EN EN EN EN EN EN EN ved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SPI3 SPI2 WWDG USART USART USART TIM7 TIM6 TIM5 TIM4 TIM3 TIM2 Reserved Reserved EN EN EN 8EN 7EN 6EN EN EN EN EN EN EN 位 名称 访问 描述 复位值 [31:30] Reserved RO 保留。 0 DAC模块时钟使能位 29 DACEN RW 0 0模块时钟关闭 1模块时钟开启。 电源接口模块时钟使能位: 28 PWREN RW 0 0模块时钟关闭 1模块时钟开启。 后备单元时钟使能位: 27 BKPEN RW 0 0模块时钟关闭 1模块时钟开启。 CAN2模块时钟使能位 26 CAN2EN RW 0 0模块时钟关闭 1模块时钟开启。 CAN1模块时钟使能位 25 CAN1EN RW 0 0模块时钟关闭 1模块时钟开启。 24 Reserved RO 保留。 0 USBD模块时钟使能位 23 USBDEN RW 0 0模块时钟关闭 1模块时钟开启。 I2C 2接口时钟使能位 22 I2C2EN RW 0 0模块时钟关闭 1模块时钟开启。 I2C 1接口时钟使能位 21 I2C1EN RW 0 0模块时钟关闭 1模块时钟开启。 USART5接口时钟使能位 20 USART5EN RW 0 0模块时钟关闭 1模块时钟开启。 19 USART4EN RW USART4接口时钟使能位 0 V2.4 45

Page 49

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0模块时钟关闭 1模块时钟开启。 USART3接口时钟使能位 18 USART3EN RW 0 0模块时钟关闭 1模块时钟开启。 USART2接口时钟使能位 17 USART2EN RW 0 0模块时钟关闭 1模块时钟开启。 16 Reserved RO 保留。 0 SPI3接口时钟使能位 15 SPI3EN RW 0 0模块时钟关闭 1模块时钟开启。 SPI2接口时钟使能位 14 SPI2EN RW 0 0模块时钟关闭 1模块时钟开启。 [13:12] Reserved RO 保留。 0 窗口看门狗时钟使能位: 11 WWDGEN RW 0 0模块时钟关闭 1模块时钟开启。 [10:9] Reserved RO 保留。 0 USART8使能位 8 USART8EN RW 0 0模块时钟关闭 1模块时钟开启。 USART7使能位 7 USART7EN RW 0 0模块时钟关闭 1模块时钟开启。 USART6使能位 6 USART6EN RW 0 0模块时钟关闭 1模块时钟开启。 定时器7模块时钟使能位 5 TIM7EN RW 0 0模块时钟关闭 1模块时钟开启。 定时器6模块时钟使能位 4 TIM6EN RW 0 0模块时钟关闭 1模块时钟开启。 定时器5模块时钟使能位 3 TIM5EN RW 0 0模块时钟关闭 1模块时钟开启。 定时器4模块时钟使能位 2 TIM4EN RW 0 0模块时钟关闭 1模块时钟开启。 定时器3模块时钟使能位 1 TIM3EN RW 0 0模块时钟关闭 1模块时钟开启。 定时器2模块时钟使能位 0 TIM2EN RW 0 0模块时钟关闭 1模块时钟开启。 3.4.9 后备域控制寄存器RCC_BDCTLR 偏移地址0x20 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved BDRST 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 LSE LSE RTCEN Reserved RTCSEL[1:0] Reserved LSEON BYP RDY 位 名称 访问 描述 复位值 [31:17] Reserved RO 保留。 0 16 BDRST RW 后备域软件复位控制: 0 V2.4 46

Page 50

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0撤销复位。 1复位整个后备域。 RTC时钟使能控制 0关闭RTC时钟 15 RTCEN RW 1使能RTC时钟。 0 注RTCSEL!=0的条件下才可以使能RTC时钟否则硬 件强制为0。 [14:10] Reserved RO 保留。 0 RTC时钟源选择 00无时钟 01LSE振荡器作为RTC时钟 10LSI振荡器作为RTC时钟 11HSE 振荡器经过分频后作为 RTC 时钟。其中 CH32F20x_D6、CH32V20x_D6系列芯片批号倒数第5位 [9:8] RTCSEL[1:0] RW 小于1的为512分频反之为128分频CH32F20x_D8W、 0 CH32V20x_D8、CH32V20x_D8W系列芯片均为512分频 CH32F20x_D8 、 CH32F20x_D8C 、 CH32V30x_D8 、 CH32V30x_D8C、CH32V31x_D8C系列芯片均为128分频。 注一旦RTC时钟源被选定RTCEN=1直到下次后 备域被复位它不能再被改变。可通过设置BDRST位 来恢复默认。 [7:3] Reserved RO 保留。 0 外部低速晶体LSE旁路控制位 0不旁路低速外部晶体/陶瓷谐振器; 2 LSEBYP RW 0 1旁路外部低速晶体/陶瓷谐振器(使用外部时钟源)。 注此位需在LSEON为0下写入。 外部低速晶体振荡稳定就绪标志位(由硬件置位): 0外部低速晶体振荡没有稳定 1 LSERDY RO 0 1外部低速晶体振荡稳定。 注在LSEON位清0后该位需要6个LSE周期清0。 外部低速晶体振荡使能控制位: 0 LSEON RW 0关闭LSE振荡器 0 1使能LSE振荡器。 注后备域控制寄存器中RCC_BDCTLR的LSEON、LSEBYP、RTCSEL和RTCEN位处于后备域。因此 这些位在复位后处于写保护状态只有在电源控制寄存器PWR_CTLR中的DBP位置1后才能对这 些位进行改动。这些位只能由后备域复位清除。任何内部或外部复位都不会影响这些位。 3.4.10 控制/状态寄存器RCC_RSTSCKR 偏移地址0x24 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 LPWR WWDG IWDG SFT POR PIN Reser RMVF Reserved RSTF RSTF RSTF RSTF RSTF RSTF ved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 LSI Reserved LSION RDY V2.4 47

Page 51

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 低功耗复位标志: 0无低功耗复位发生 31 LPWRRSTF RO 1发生低功耗复位。 0 发生低功耗管理复位时由硬件置 1软件写 RMVF位清 除。 窗口看门狗复位标志: 0无窗口看门狗复位发生 30 WWDGRSTF RO 1发生窗口看门狗复位。 0 发生窗口看门狗复位时由硬件置 1软件写 RMVF位清 除。 独立看门狗复位标志: 0无独立看门狗复位发生 29 IWDGRSTF RO 1发生独立看门狗复位。 0 发生独立看门狗复位时由硬件置 1软件写 RMVF位清 除。 软件复位标志: 0无软件复位发生 28 SFTRSTF RO 0 1发生软件复位。 发生软件复位时由硬件置1软件写RMVF位清除。 上电/掉电复位标志: 0无上电/掉电复位发生; 27 PORRSTF RO 1发生上电/掉电复位。 1 发生上电/掉电复位时由硬件置 1软件写 RMVF 位清 除。 外部手动复位NRST引脚标志 0无NRST引脚复位发生 26 PINRSTF RO 1发生NRST引脚复位。 0 在NRST引脚复位发生时由硬件置1软件写RMVF位清 除。 25 Reserved RO 保留。 0 清除复位标志控制: 24 RMVF RW 0无作用 0 1清除复位标志。 [23:2] Reserved RO 保留。 0 内部低速时钟LSI稳定就绪标志位由硬件置位 0内部低速时钟40kHz没有稳定 1 LSIRDY RO 0 1内部低速时钟40kHz稳定。 注在LSION位清0后该位需要3个LSI周期清0。 内部低速时钟LSI使能控制位 0 LSION RW 0关闭LSI40kHz振荡器 0 1使能LSI40kHz振荡器。 注除BIT1由上电复位清除其他写清除复位标志可以清除。 V2.4 48

Page 52

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 3.4.11 HB 外设复位寄存器RCC_AHBRSTR 偏移地址0x28 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ReserETHMA DVP OTGFS Reserved ved CRST RST RST 位 名称 访问 描述 复位值 [31:15] Reserved RO 保留。 0 以太网MAC复位控制 14 ETHMACRST RW 0 0无作用 1复位模块。 DVP复位控制 13 DVPRST RW 0 0无作用 1复位模块。 USBOTG_FS模块复位控制 12 OTGFSRST RW 0 0无作用 1复位模块。 [11:0] Reserved RO 保留。 0 3.4.12 时钟配置寄存器 2RCC_CFGR2 偏移地址0x2C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 USBHS USBFSUSBHS USBHSCLK Reser ETH1G ETH1GSRC RNGSR I2S3S I2S2S PREDI PLLSR USBHSDIV[2:0] SRC PLL [1:0] ved EN [1:0] C RC RC V1SRC C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PLL3MUL[3:0] PLL2MUL[3:0] PREDIV2[3:0] PREDIV1[3:0] 位 名称 访问 描述 复位值 USBFS 48MHz时钟源选择 31 USBFSSRC RW 0 0PLL CLK 1USB PHY。 USBHS PHY 内部PLL控制位 30 USBHSPLL RW 0USB PHY内部PLL关闭 0 1USB PHY内部PLL使能。 USBHSPLL 参 考 时 钟 频 率 选 择 USBHSPLLSRC/ USBHSDIV 003MHz [29:28] USBHSCLK[1:0] RW 00b 014MHz 108MHz 115MHz USBHSPLL参考源选择 27 USBHSPLLSRC RW 0 0HSE 1HSI。 USBHSPLL参考源分频 [26:24] USBHSDIV[2:0] RW 000b 0001分频 0012分频 V2.4 49

Page 53

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0103分频 0114分频 1005分频 1016分频 1107分频 1118分频 23 Reserved RO 保留。 0 千兆以太网125M时钟控制位 22 ETH1GEN RW 0 0关闭 1开启。 千兆以太网125M时钟选择 00PLL2 VCO [21:20] ETH1GSRC[1:0] RW 00b 01PLL3 VCO 1x外部PB1引脚输入 RNG时钟源选择 19 RNGSRC RW 0 0系统时钟 1PLL3 VCO。 I2S3时钟源 18 I2S3SRC RW 0系统时钟SYSCLK 0 1PLL3 VCO。 I2S2时钟源 17 I2S2SRC RW 0系统时钟SYSCLK 0 1PLL3 VCO。 PREDIV1时钟源 16 PREDIV1SRC RW 0HSE 0 1PLL2。 PLL3倍频因子在PLL3关闭才可写入。 0000PLL3 2.5倍频输出 0001PLL3 12.5倍频输出; 0010PLL3 4倍频输出 0011PLL3 5倍频输出 0100PLL3 6倍频输出 0101PLL3 7倍频输出 [15:12] PLL3MUL[3:0] RW 0110PLL3 8倍频输出 0111PLL3 9倍频输出 0000b 1000PLL3 10倍频输出1001PLL3 11倍频输出 1010PLL3 12倍频输出1011PLL3 13倍频输出 1100PLL3 14倍频输出1101PLL3 15倍频输出 1110PLL3 16倍频输出1111PLL3 20倍频输出 PLL2倍频因子在PLL2关闭才可写入。 0000PLL2 2.5倍频输出 0001PLL2 12.5倍频输出; 0010PLL2 4倍频输出 0011PLL2 5倍频输出 0100PLL2 6倍频输出 0101PLL2 7倍频输出 [11:8] PLL2MUL[3:0] RW 0110PLL2 8倍频输出 0111PLL2 9倍频输出 0000b 1000PLL2 10倍频输出1001PLL2 11倍频输出 1010PLL2 12倍频输出1011PLL2 13倍频输出 1100PLL2 14倍频输出1101PLL2 15倍频输出 1110PLL2 16倍频输出1111PLL2 20倍频输出 PREDIV2分频因子在PLL2和PLL3关闭才可写入 0000PREDIV2不对输入时钟分频 0001PREDIV2对输入时钟2分频 [7:4] PREDIV2[3:0] RW 0010PREDIV2对输入时钟3分频 0000b 0011PREDIV2对输入时钟4分频 0100PREDIV2对输入时钟5分频 0101PREDIV2对输入时钟6分频 V2.4 50

Page 54

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0110PREDIV2对输入时钟7分频 0111PREDIV2对输入时钟8分频 1000PREDIV2对输入时钟9分频 1001PREDIV2对输入时钟10分频 1010PREDIV2对输入时钟11分频 1011PREDIV2对输入时钟12分频 1100PREDIV2对输入时钟13分频 1101PREDIV2对输入时钟14分频 1110PREDIV2对输入时钟15分频 1111PREDIV2对输入时钟16分频 PREDIV1分频因子在PLL关闭才可写入 0000PREDIV1不对输入时钟分频 0001PREDIV1对输入时钟2分频 0010PREDIV1对输入时钟3分频 0011PREDIV1对输入时钟4分频 0100PREDIV1对输入时钟5分频 0101PREDIV1对输入时钟6分频 0110PREDIV1对输入时钟7分频 0111PREDIV1对输入时钟8分频 [3:0] PREDIV1[3:0] RW 1000PREDIV1对输入时钟9分频 0000b 1001PREDIV1对输入时钟10分频 1010PREDIV1对输入时钟11分频 1011PREDIV1对输入时钟12分频 1100PREDIV1对输入时钟13分频 1101PREDIV1对输入时钟14分频 1110PREDIV1对输入时钟15分频 1111PREDIV1对输入时钟16分频bit0和RCC_CFGR0的bit17相同修改RCC_CFGR0 的bit17会同时改变该寄存器的bit0。 注适用于CH32F20x_D8C、CH32V30x_D8C、CH32V31x_D8C。 3.4.13 外部晶振校准控制寄存器HSE_CAL_CTRL 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reser HSE Reser HSEITRIM HSEC[2:0] Reserved ved FAULT ved [1:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved 位 名称 访问 描述 复位值 31 Reserved RO 保留。 0 HSE内置匹配电容调节位 [30:28] HSEC[2:0] RW 0008pF 000b 00110pF V2.4 51

Page 55

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 01012pF 01114pF 10016pF 10118pF 11020pF 11122pF。 HSE失效检测禁用控制位 27 HSEFAULT RW 0使用模拟输入的HSE失效检测信号 0 1忽略模拟输入的HSE失效检测信号。 26 Reserved RO 保留。 0 [25:24] HSEITRIM[1:0] RW HSE起振电流调节位。 01b [23:0] Reserved RO 保留。 0 3.4.14 内部低速晶振校准调节寄存器LSI32K_TUNE 偏移地址0x0A 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved HTUNE[7:0] LTUNE[4:0] 位 名称 访问 描述 复位值 [15:13] Reserved RO 保留。 0 [12:5] HTUNE[7:0] RW LSI32K细调配置位。 0x80 [4:0] LTUNE[4:0] RW LSI32K粗调配置位。 0x11 3.4.15 内部低速晶振校准配置寄存器LSI32K_CAL_CFG 偏移地址0x1D 7 6 5 4 3 2 1 0 Reserved LPEN WKUPEN HALTMD CNTVLU[3:0] 位 名称 访问 描述 复位值 7 Reserved RO 保留。 0 低功耗模式下校准使能位: 0在低功耗模式下关闭校准功能 6 LPEN RW 1在低功耗模式下使能校准功能。 0 注此功能必须要配合EXTEN中的RB_HSE_KEEP_LP使 用。 LSI32K 唤醒中断使能: 5 WKUPEN RW 0禁止唤醒中断 0 1使能唤醒中断。 LSI32K校准计数暂停时长配置位 4 HALTMD RW 0计数暂停维持1个CK32K周期 0 1计数暂停维持3个CK32K周期。 LSI32K校准采样时长配置位 [3:0] CNTVLU[3:0] RW 00002个CK32K周期 0001b 00014个CK32K周期 V2.4 52

Page 56

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 001032个CK32K周期 001164个CK32K周期 0100128个CK32K周期 0101256个CK32K周期 0110512个CK32K周期 01111024个CK32K周期 10001088个CK32K周期 10011152个CK32K周期 10101216个CK32K周期 10111280个CK32K周期 11002000个CK32K周期。 注其他的配置值对应2个CK32K周期。 3.4.16 内部低速晶振校准状态寄存器LSI32K_CAL_STATR 偏移地址0x20 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IFEND CNTOV CNT[13:0] 访 位 名称 描述 复位值 问 LSI32K校准计数结束中断标志位 15 IFEND RW1 0采样计数中无标志 0 1采样计数结束标志置位。 LSI32K采样计数器溢出标志位 14 CNTOV RW1 0未发生溢出 0 1发生溢出。 对若干个CK32K周期基于系统主频的计数值。 [13:0] CNT[13:0] RO 0 注具体的CK32K周期数可配置。 3.4.17 内部低速晶振校准次数计数器LSI32K_CAL_OV_CNT 偏移地址0x22 7 6 5 4 3 2 1 0 OVCNT[7:0] 位 名称 访问 描述 复位值 LSI32K采样计数器溢出次数。 [7:0] OVCNT[7:0] RO 0 注:清除溢出标志操作会清除此计数器。 3.4.18 内部低速晶振校准控制寄存器LSI32K_CAL_CTRL 偏移地址0x23 7 6 5 4 3 2 1 0 HALT Reserved CALEN CALINTEN 位 名称 访问 描述 复位值 V2.4 53

Page 57

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn LSI32K 校准计数状态位: 7 HALT RO 0计数中计数值不可用 1 1计数暂停可获取计数值。 [6:2] Reserved RO 保留。 0 LSI32K校准使能 1 CALEN RW 0关闭LSI32K校准 0 1使能LSI32K校准。 LSI32K校准中断使能 0 CALINTEN RW 0关闭LSI32K校准中断 0 1使能LSI32K校准中断。 注适用于CH32V20x_D8W、CH32F20x_D8W。 V2.4 54

Page 58

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 4 章 后备寄存器BKP 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 后备寄存器BKP提供了最大42个16位的后备数据寄存器最大可以用来存储84字节的用户 数据。在主电源V 掉电后这些数据仍可以由V 供电而保持,不受待机状态、系统复位或电源 DD BAT 复位的影响。此外BKP单元还提供了侵入检测管理、RTC时钟校准及脉冲输出功能。 4.1 主要特征  侵入检测TAMPER功能  RTC时钟校准功能  在PC13引脚上输出RTC时钟64分频闹钟脉冲或者秒脉冲 4.2 功能说明 微控制器复位后对后备寄存器和 RTC 的访问被禁止,需通过以下操作开启对后备寄存器的访问: 1置寄存器RCC_APB1PCENR的PWREN位和BKPEN位来打开电源和后备接口的操作时钟 2置电源控制寄存器PWR_CTLR的DBP位使能对后备寄存器和RTC寄存器的访问。 4.2.1 后备数据寄存器 后备数据寄存器可以作为通用数据缓存使用由于其在V 掉电下靠V 电源保存数据的特性,可 DD BAT 以用来存一些重要的或敏感的数据。但这些数据在产生侵入事件后会被全部清除。 4.2.2 侵入检测 侵入检测就是当外界提供了一个信号(上升沿或下降沿)时,表示有“侵入事件”,硬件将自动 清除当前系统中保留的重要信息。这种方式可以增加系统信息的安全性。 当侵入检测引脚上出现跳变沿(取决于 TPAL 位)时会产生一个侵入事件,如果使能了侵入检测 中断,还会同时产生一个侵入检测中断。只要出现了侵入事件,后备数据寄存器就会被全部清除。此 外硬件检测采用记忆方式即使侵入检测功能未开启TPE=0系统也会采样是否有跳变沿并在 满足TPAL位选择情况下提前锁定侵入事件并在TPE位置1下触发侵入事件。 例如当TPAL=0时如果TPE=0未开启功能但TAMPER引脚已经为高电平一旦TPE=1后则 会产生一个额外的侵入事件(系统提前锁定了上升沿)。当 TPAL=1 时,如果 TPE=0 未开启功能,但 TAMPER引脚已经为低电平一旦TPE=1后则会产生一个额外的侵入事件系统提前锁定了下降沿。 所以为了防止发生不必要的侵入事件,导致清除了后备寄存器,建议:在希望硬件检测侵入引脚 的开始时刻通过写BKP_TPCSR寄存器CTE位置1先清除硬件可能记忆过的侵入事件并确保当前 侵入检测引脚状态是无效的。 注当V 电源断开时侵入检测功能仍然有效。为了避免不必要的复位数据后备寄存器TAMPER引 DD 脚应该在片外连接到正确的电平。 4.2.3 RTC 校准 此功能必须配置侵入检测引脚作为普通IO口使用。配置BKP_TPCTLR寄存器TPE位清0。  脉冲输出 配置BKP_OCTLR寄存器的ASOE位开启RTC脉冲输出设置ASOS位选择秒脉冲输出还是闹钟 脉冲输出。  RTC校准 配置BKP_OCTLR寄存器的CCO位后内部的RTC时钟将经过64分频后输出到侵入检测引脚TAMPER V2.4 55

Page 59

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 上。通过实际测试软件配合修改CAL[6:0]位来调整时钟对RTC进行校准。 4.2.4 BKP 接口复位 BKP区域可以在V 主电源掉电下由V 独立供电。应用代码控制BKP区域寄存器复位中后备 DD BAT 数据寄存器BKP_DATAR1-10、ASOS位、ASOE位在软件配置RCC_BDCTLR寄存器的BDRST位下复位不 受RCC外设接口控制BKPRST位影响。 4.3 寄存器描述 表4-1 BKP相关寄存器列表 名称 访问地址 描述 复位值 R16_BKP_DATAR1 0x40006C04 后备数据寄存器1 0x0000 R16_BKP_DATAR2 0x40006C08 后备数据寄存器2 0x0000 R16_BKP_DATAR3 0x40006C0C 后备数据寄存器3 0x0000 R16_BKP_DATAR4 0x40006C10 后备数据寄存器4 0x0000 R16_BKP_DATAR5 0x40006C14 后备数据寄存器5 0x0000 R16_BKP_DATAR6 0x40006C18 后备数据寄存器6 0x0000 R16_BKP_DATAR7 0x40006C1C 后备数据寄存器7 0x0000 R16_BKP_DATAR8 0x40006C20 后备数据寄存器8 0x0000 R16_BKP_DATAR9 0x40006C24 后备数据寄存器9 0x0000 R16_BKP_DATAR10 0x40006C28 后备数据寄存器10 0x0000 R16_BKP_OCTLR 0x40006C2C RTC校准寄存器 0x0000 R16_BKP_TPCTLR 0x40006C30 侵入检测控制寄存器 0x0000 R16_BKP_TPCSR 0x40006C34 侵入检测状态寄存器 0x0000 R16_BKP_DATAR11 0x40006C40 后备数据寄存器11 0x0000 R16_BKP_DATAR12 0x40006C44 后备数据寄存器12 0x0000 R16_BKP_DATAR13 0x40006C48 后备数据寄存器13 0x0000 R16_BKP_DATAR14 0x40006C4C 后备数据寄存器14 0x0000 R16_BKP_DATAR15 0x40006C50 后备数据寄存器15 0x0000 R16_BKP_DATAR16 0x40006C54 后备数据寄存器16 0x0000 R16_BKP_DATAR17 0x40006C58 后备数据寄存器17 0x0000 R16_BKP_DATAR18 0x40006C5C 后备数据寄存器18 0x0000 R16_BKP_DATAR19 0x40006C60 后备数据寄存器19 0x0000 R16_BKP_DATAR20 0x40006C64 后备数据寄存器20 0x0000 R16_BKP_DATAR21 0x40006C68 后备数据寄存器21 0x0000 R16_BKP_DATAR22 0x40006C6C 后备数据寄存器22 0x0000 R16_BKP_DATAR23 0x40006C70 后备数据寄存器23 0x0000 R16_BKP_DATAR24 0x40006C74 后备数据寄存器24 0x0000 R16_BKP_DATAR25 0x40006C78 后备数据寄存器25 0x0000 R16_BKP_DATAR26 0x40006C7C 后备数据寄存器26 0x0000 R16_BKP_DATAR27 0x40006C80 后备数据寄存器27 0x0000 R16_BKP_DATAR28 0x40006C84 后备数据寄存器28 0x0000 R16_BKP_DATAR29 0x40006C88 后备数据寄存器29 0x0000 R16_BKP_DATAR30 0x40006C8C 后备数据寄存器30 0x0000 R16_BKP_DATAR31 0x40006C90 后备数据寄存器31 0x0000 V2.4 56

Page 60

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R16_BKP_DATAR32 0x40006C94 后备数据寄存器32 0x0000 R16_BKP_DATAR33 0x40006C98 后备数据寄存器33 0x0000 R16_BKP_DATAR34 0x40006C9C 后备数据寄存器34 0x0000 R16_BKP_DATAR35 0x40006CA0 后备数据寄存器35 0x0000 R16_BKP_DATAR36 0x40006CA4 后备数据寄存器36 0x0000 R16_BKP_DATAR37 0x40006CA8 后备数据寄存器37 0x0000 R16_BKP_DATAR38 0x40006CAC 后备数据寄存器38 0x0000 R16_BKP_DATAR39 0x40006CB0 后备数据寄存器39 0x0000 R16_BKP_DATAR40 0x40006CB4 后备数据寄存器40 0x0000 R16_BKP_DATAR41 0x40006CB8 后备数据寄存器41 0x0000 R16_BKP_DATAR42 0x40006CBC 后备数据寄存器42 0x0000 注后备数据寄存器BKP_DATARxx=11-42适用于CH32F20x_D8、CH32F20x_D8C、CH32F20x_D8W、 CH32V20x_D8、CH32V20x_D8W、CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C。 4.3.1 后备数据寄存器BKP_DATARxx=1-42 偏移地址0x04-0x280x40-0xBC 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 D[15:0] 位 名称 访问 描述 复位值 后备数据,可以被用户程序调用。 注它们仅由后备域复位来复位BDRST如 [15:0] D[15:0] RW 0 果侵入检测引脚 TAMPER 功能被开启时)由侵 入引脚事件复位。 4.3.2 RTC 校准寄存器BKP_OCTLR 偏移地址0x2C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved ASOS ASOE CCO CAL[6:0] 位 名称 访问 描述 复位值 [15:10] Reserved RO 保留。 0 TAMPER引脚闹钟/秒脉冲输出选择: 0输出闹钟脉冲 9 ASOS RW 0 1输出秒脉冲。 注此位只会由后备域复位BDRST来复位。 TAMPER引脚使能脉冲输出位 0禁止输出闹钟脉冲或者秒脉冲 8 ASOE RW 0 1使能输出闹钟脉冲或者秒脉冲。 注此位只会由后备域复位BDRST来复位。 校准时钟输出选择位: 0不输出校准时钟 7 CCO RW 0 1TEMPER引脚输出经64分频的RTC时钟。 注1开启此功能必须关闭侵入检测功能。 V2.4 57

Page 61

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 注2当V 供电断开时,该位被清除。 DD 校准值寄存器这个寄存器的值表示在每220个 [6:0] CAL[6:0] RW 时钟脉冲中有多少个被跳过。这个功能用来校 0 准RTC时钟。RTC时钟可以被减慢0~121ppm。 4.3.3 侵入检测控制寄存器BKP_TPCTLR 偏移地址0x30 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved TPAL TPE 位 名称 访问 描述 复位值 [15:2] Reserved RO 保留。 0 侵入检测引脚TEMPER引脚有效电平设置 0侵入检测引脚上的高电平会清除所有后备 1 TPAL RW 数据寄存器(硬件锁定上升沿); 0 1侵入检测引脚上的低电平会清除所有后备 数据寄存器(硬件锁定下降沿)。 侵入检测引脚使能位 0 TPE RW 0TEMPER引脚做普通IO口用 0 1TEMPER引脚做侵入检测用。 注同时将TPAL和TPE位清除会产生一个假的侵入事件推荐只在TPE为0时才改变TPAL位的状 态。 4.3.4 侵入检测状态寄存器BKP_TPCSR 偏移地址0x34 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved TIF TEF Reserved TPIE CTI CTE 位 名称 访问 描述 复位值 [15:10] Reserved RO 保留。 0 侵入中断标志位当检测到侵入事件且TPIE位 置1时此位会被置位。通过向CTI位写1来 清除此标志位。如果TPIE位被复位那么此位 9 TIF RO 0 同时也会被复位。 注:仅当系统复位或由待机模式唤醒后才复位 该位。 侵入事件标志位,当检测到侵入事件时,此位 会被置位。通过向CTE位写1会清除此位。 8 TEF RO 注当此位为1时所有的BKP_DATARx寄存器 0 的值会被清除,且在此位不复位前,所有对 BKP_DATARx寄存器的写入操作都是无效的。 [7:3] Reserved RO 保留。 0 产生侵入中断使能位: 2 TPIE RW 0 0禁止侵入检测中断 V2.4 58

Page 62

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1使能侵入检测中断TPE需置1。 注1侵入中断无法将内核从低功耗模式唤醒。 注 2仅当系统复位或由待机模式唤醒后才复 位该位。 1 CTI WO 侵入检测中断清除位写1清除读取无效。 0 0 CTE WO 侵入检测事件清除位写1清除读取无效。 0 V2.4 59

Page 63

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 5 章 循环冗余校验CRC 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 循环冗余校验CRC计算单元是根据固定的生成多项式得到任一32位数据的CRC计算结果。一 般用于数据存储和数据通讯领域用来核实数据的正确性。系统提供硬件 CRC 计算单元可以大大节省 CPU和RAM资源提高效率。 图5-1 CRC结构框图 HB Bus 32-bit read CRC computation (polynomial: 0x4C11DB7) 32-bit write Data register (CRC_DATAR) 5.1 主要特征  使用CRC32多项式0x4C11DB7X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1  同一个32位寄存器作为数据的输入和CRC32计算输出  单次转换时间4个HB时钟周期HCLK 5.2 功能描述  CRC单元复位 如果要开始一次新数据组的 CRC 计算,需要复位 CRC 计算单元。向控制寄存器 CRC_CTLR 的 RST 位写1硬件将复位数据寄存器恢复初始值0xFFFFFFFF。  CRC计算 CRC 单元的计算是前一次 CRC 计算结果和新参与的数据的 CRC结果。CRC_DATAR 数据寄存器,对 其执行写操作将送入新数据到硬件计算单元执行读取操作将得到最新一轮的CRC计算值。硬件计 算时会中断系统的写操作,因此可以连续写入新的值。 注CRC单元是对整个32位数据进行计算而不是逐字节计算。  独立数据缓冲区 CRC单元提供了一个8位独立数据寄存器CRC_IDATAR用于应用代码临时存放1字节的数据不 受CRC单元复位影响。 5.3 寄存器描述 表5-1 CRC相关寄存器列表 名称 访问地址 描述 复位值 R32_CRC_DATAR 0x40023000 数据寄存器 0xFFFFFFFF V2.4 60

Page 64

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R8_CRC_IDATAR 0x40023004 独立数据缓冲 0x00 R32_CRC_CTLR 0x40023008 控制寄存器 0x00000000 5.3.1 数据寄存器CRC_DATAR 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DR[15:0] 位 名称 访问 描述 复位值 [31:0] DR[31:0] RW 写入原始数据;读出计算结果。 0xFFFFFFFF 5.3.2 独立数据缓冲CRC_IDATAR 偏移地址0x04 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved IDR[7:0] 位 名称 访问 描述 复位值 8 位通用寄存器,可以用作数据缓存,这个寄 [7:0] IDR[7:0] RW 0 存器不受控制寄存器的RST域影响。 5.3.3 控制寄存器CRC_CTLR 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved RST 位 名称 访问 描述 复位值 [31:1] Reserved RO 保留。 0 CRC 计算单元复位控制,写 1 执行,硬件自动 0 RST WO 0 清零执行完后数据寄存器为0xFFFFFFFF。 V2.4 61

Page 65

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 6 章 实时时钟RTC 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 实时时钟RTC是一个独立的定时器模块其可编程计数器最大可达到32位配合软件即可以 实现实时时钟功能并且可以修改计数器的值来重新配置系统的当前时间和日期。RTC模块在后备供 电区域,系统复位和待机模式唤醒对其不造成影响。 6.1 主要特征  最高为220的预分频系数  32位可编程计数器  多种时钟源,中断  独立复位 6.2 功能描述 6.2.1 概述 图6-1 RTC结构框图 PB1 bus PCLK1 PB1 interface not powered in Standby RTCCLK Backup domain RTC_CR RTC_PRL Second event SECF Reload 32-bit programmable counter SECIE TR_CLK Overflow event RTC_DIV RTC_CNT OWF Rising edge OWIE Alarm event ALRF RTC prescaler ALRIE RTC_ALRM powered in Standby powered in Standby NVIC interrupt powered in Standby controller powered in Standby WKUP pin RTC_Alarm exit WKP_STDBY Standby mode powered in Standby 由图6-1所示RTC模块主要是PB1总线接口、分频器和计数器、控制和状态寄存器三部分组成 其中分频器和计数器部分在后备区域可由V 供电。RTCCLK输入分频器RTC_DIV之后被分频成 BAT TR_CLK。值得注意的是分频器RTC_DIV的内部是一个自减计数器自减到溢出就会输出一个TR_CLK 然后从重装值寄存器RTC_PSCR里取出预设值重装到分频器里读分频器实际上是读取它的实时值 V2.4 62

Page 66

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn read only写分频系数应该写到重装值寄存器RTC_PSCR里。一般TR_CLK的周期被设置为1 秒TR_CLK 会触发秒事件同时会使主计数器RTC_CNT自增 1当主计数器增加到和闹钟寄存器 的值一致时,会触发闹钟事件;当主计数器自增到溢出时,会触发溢出事件。以上三种事件都可以触 发中断,并对应相应中断使能位控制。 6.2.2 复位 由于实时时钟的特殊用途,其处于后备域的四组寄存器:预分频,预分频重装值,主计数器和闹 钟只能通过后备域的复位信号复位参照RCC的后备域复位章节。实时时钟的控制寄存器受系统复 位或电源复位控制。 6.2.3 较特别的读写寄存器操作 由于实时时钟的特殊用处RTC 和 PB1 总线是独立的PB1对 RTC的读取不一定是实时的通过 PB1读取RTC的寄存器必须在PB1启动后并经过了一个RTC上升沿这种情形可能出现在系统复位和 电源复位之后、从待机或者停机模式唤醒后。方便的做法是等待控制寄存器CTLR的RSF位被置高。 对RTC的写操作器必须等上一个写操作结束且必须进入配置模式具体的步骤为 1 查询RTOFF位直到其变为1 2 置CNF位进入配置模式 3 对一个或者多个RTC寄存器进行写操作 4 清CNF位退出配置模式PB1接口开始对RTC寄存器进行写入 5 查询RTOFF位直到其变为1即为写完。 6.3 寄存器描述 表6-1 RTC相关寄存器列表 名称 访问地址 描述 复位值 R16_RTC_CTLRH 0x40002800 RTC控制寄存器高位 0x0000 R16_RTC_CTLRL 0x40002804 RTC控制寄存器低位 0x0020 R16_RTC_PSCRH 0x40002808 预分频器重装值寄存器高位 0x0000 R16_RTC_PSCRL 0x4000280C 预分频器重装值寄存器低位 0xXXXX R16_RTC_DIVH 0x40002810 分频器寄存器高位 0xXXXX R16_RTC_DIVL 0x40002814 分频器寄存器低位 0xXXXX R16_RTC_CNTH 0x40002818 RTC计数器高位 0xXXXX R16_RTC_CNTL 0x4000281C RTC计数器低位 0xXXXX R16_RTC_ALRMH 0x40002820 闹钟寄存器高位 0xXXXX R16_RTC_ALRML 0x40002824 闹钟寄存器低位 0xXXXX 6.3.1 RTC 控制寄存器高位RTC_CTLRH 偏移地址0x00 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved OWIE ALRIE SECIE 位 名称 访问 描述 复位值 [15:3] Reserved RO 保留。 0 2 OWIE RW 溢出中断使能位。 0 1 ALRIE RW 闹钟中断使能位。 0 V2.4 63

Page 67

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0 SECIE RW 秒中断使能位。 0 6.3.2 RTC 控制寄存器低位RTC_CTLRL 偏移地址0x04 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved RTOFF CNF RSF OWF ALRF SECF 位 名称 访问 描述 复位值 [15:6] Reserved RO 保留。 0 RTC 操作状态指示位,表示对 RTC 的最后一次 操作的执行状态对RTC的操作必须等待此位 5 RTOFF RO 为1。 1 0上一次对RTC的操作还在进行中 1上一次对RTC的操作已经完成。 配置标志位将此位写1进入配置模式从而 允许向计数器R16_RTC_CNTx、闹钟寄存器 R16_RTC_ALRMx和预分频器重装值寄存器 4 CNF RW R16_RTC_PSCRx写入值.只有将该位写1并 0 重新被软件清0后才会执行写的操作 0退出配置模式开始更新RTC寄存器 1进入配置模式。 寄存器同步标志位,在对 RTC 模块的预分频 PSCRx、闹钟ALRMx、计数器CNTx 这些寄存器进行读写前,都要先保证这个位已 经被硬件置位,以确定这些寄存器已经被同 3 RSF RW0 0 步在进行读写这些寄存器时或者PB1复位 或PB1时钟停止后第一步应该将此位复位。 0寄存器未被同步 1寄存器已被同步。 计数器溢出标志当32位计数器溢出时此位 由硬件置位。如果置位了OWIE位还会产生一 2 OWF RW0 0 个溢出中断。此位只能由软件清零,不能被软 件置位。 闹钟标志,当计数器的值达到闹钟寄存器 ALRMx的值此位会被硬件置位如果闹钟 1 ALRF RW0 0 中断使能位ALRIE置位还会产生一个闹钟 中断。此位只能由软件清零,不能被软件置位。 秒事件标志,当时钟经过预分频器分频后每产 生一个下降沿,就会使计数器自增一,同时产 0 SECF RW0 生一个秒事件,此位会被置位,如果秒中断被 0 使能SECIE 被置位),同时还会产生一个秒 中断。此位只能由软件清零,不能被软件置位。 V2.4 64

Page 68

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 6.3.3 预分频器重装值寄存器高位RTC_PSCRH 偏移地址0x08 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved PRL[19:16] 位 名称 访问 描述 复位值 [15:4] Reserved RO 保留。 0 [3:0] PRL[19:16] WO 重装值高位。 0 6.3.4 预分频器重装值寄存器低位RTC_PSCRL 偏移地址0x0C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PRL[15:0] 位 名称 访问 描述 复位值 重 装 值 低 位 。 实 际 的 分 频 系 数 就 是 PRL[19:0]+1比如如果 RTC 输入频率为 [15:0] PRL[15:0] WO X 32768Hz那么这个值设为0x7fff就可以分频 出1秒周期的信号。 6.3.5 分频器寄存器高位RTC_DIVH 偏移地址0x10 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DIV[19:16] 位 名称 访问 描述 复位值 [15:4] Reserved RO 保留。 0 [3:0] DIV[19:16] RO 分频器寄存器高位。 x 6.3.6 分频器寄存器低位RTC_DIVL 偏移地址0x14 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DIV[15:0] 位 名称 访问 描述 复位值 分频器寄存器低位。DIV 实际上是一个自减计 数器RTC_CLK 每来一个时钟 DIV 计数器就会 [15:0] DIV[15:0] RO 减1溢出后就会输出一个TR_CLK同时从PSCR X 中重装载值。DIV 只能读取,读出的是当前分 频器的计数器的剩余值。 V2.4 65

Page 69

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 6.3.7 RTC 计数器高位RTC_CNTH 偏移地址0x18 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CNT[31:16] 位 名称 访问 描述 复位值 [15:0] CNT[31:16] RW 计数器高位。 X 6.3.8 RTC 计数器低位RTC_CNTL 偏移地址0x1C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CNT[15:0] 位 名称 访问 描述 复位值 计数器低位RTC定时器的核心器件由TRCLK (周期一般设为 1 秒)提供时钟。通过读取 [15:0] CNT[15:0] RW X CNT[31:0]来计算出当前的时间。写这个值需 要进入配置模式。 6.3.9 闹钟寄存器高位RTC_ALRMH 偏移地址0x20 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ALR[31:16] 位 名称 访问 描述 复位值 [15:0] ALR[31:16] WO 闹钟寄存器高位。 X 6.3.10 闹钟寄存器低位RTC_ALRML 偏移地址0x24 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ALR[15:0] 位 名称 访问 描述 复位值 闹钟寄存器低位。当闹钟寄存器ALRM[31:0]的 [15:0] ALR[15:0] WO 值和计数器 CNT[31:0]的值一致时会产生一个 X 闹钟事件。更改这个值需要进入配置模式。 V2.4 66

Page 70

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 7 章 独立看门狗IWDG 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 系统设有独立看门狗IWDG用来检测逻辑错误和外部环境干扰引起的软件故障。IWDG时钟源 来自于LSI可独立于主程序之外运行适用于对精度要求低的场合。 7.1 主要特征  12位自减型计数器  时钟来源LSI分频可以在低功耗模式下运行  复位条件计数器值减到0 7.2 功能说明 7.2.1 原理和用法 独立看门狗的时钟来源LSI时钟其功能在停机和待机模式时仍能正常工作。当看门狗计数器自 减到0时将会产生系统复位所以超时时间为重装载值+1个时钟。 图7-1 独立看门狗的结构框图 CORE Prescaler register Status register Reload register Conctrol register IWDG_PSCR IWDG_STATR IWDG_RLDR IWDG_CTLR 12-bit reload value 8-bit LSI prescaler (40kHz) 12-bit downcounter IWDG reset VDD voltage domain  启动独立看门狗 系统复位后,看门狗处于关闭状态,向 IWDG_CTLR 寄存器写 0xCCCC 开启看门狗,随后它不能再 被关闭,除非发生复位。 如果在用户选择字开启了硬件独立看门狗使能位IWDG_SW在微控制器复位后将固定开启IWDG。  看门狗配置 看门狗内部是一个递减运行的12位计数器当计数器的值减为0时将发生系统复位。开启IWDG 功能,需要执行下面几点操作:

  1. 计数时基IWDG时钟来源LSI通过 IWDG_PSCR寄存器设置 LSI分频值时钟作为 IWDG的计数时 基。操作方法先向IWDG_CTLR寄存器写0x5555再修改IWDG_PSCR寄存器中的分频值。IWDG_STATR 寄存器中的 PVU 位指示了分频值更新状态,在更新完成的情况下才可以进行分频值的修改和读 出。
  2. 重装载值:用于更新独立看门狗中计数器当前值,并且计数器由此值进行递减。操作方法先向 IWDG_CTLR 寄存器写 0x5555再修改 IWDG_RLDR 寄存器设置目标重装载值。IWDG_STATR 寄存器 中的RVU位指示了重装载值更新状态在更新完成的情况下才可以进行IWDG_RLDR寄存器的修改 和读出。
  3. 看门狗使能向IWDG_CTLR寄存器写0xCCCC即可开启看门狗功能。
  4. 喂狗即在看门狗计数器递减到0前刷新当前计数器值防止发生系统复位。向IWDG_CTLR寄存器 写0xAAAA让硬件将IWDG_RLDR寄存值更新到看门狗计数器中。此动作需要在看门狗功能开启后 V2.4 67

Page 71

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 定时执行,否则会出现看门狗复位动作。 7.2.2 调试模式 系统进入调试模式时可以由调试模块寄存器配置IWDG的计数器继续工作或停止。 7.3 寄存器描述 表7-1 IWDG相关寄存器列表 名称 访问地址 描述 复位值 R16_IWDG_CTLR 0x40003000 控制寄存器 0x0000 R16_IWDG_PSCR 0x40003004 分频因子寄存器 0x0000 R16_IWDG_RLDR 0x40003008 重装载值寄存器 0x0FFF R16_IWDG_STATR 0x4000300C 状态寄存器 0x0000 7.3.1 IWDG 控制寄存器IWDG_CTLR 偏移地址0x00 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 KEY[15:0] 位 名称 访问 描述 复位值 操作键值锁。 0xAAAA喂狗。加载IWDG_RLDR寄存器值到独 立看门狗计数器中; [15:0] KEY[15:0] WO 0x5555允许修改R16_IWDG_PSCR和R16_IWDG_ 0 RLDR寄存器 0xCCCC启动看门狗如果启用了硬件看门狗 (用户选择字配置)则不受这个限制。 7.3.2 分频因子寄存器IWDG_PSCR 偏移地址0x04 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved PR[2:0] 位 名称 访问 描述 复位值 [15:3] Reserved RO 保留。 0 IWDG时钟分频系数修改此域前要向KEY中写 0x5555。 0004分频 0018分频 01016分频 01132分频 [2:0] PR[2:0] RW 10064分频 101128分频 000b 110256分频 111256分频。 IWDG计数时基=LSI/分频系数。 注读该域值前要确保IWDG_STATR寄存器中 的PVU位为0否则读出值无效。 V2.4 68

Page 72

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 7.3.3 重装载值寄存器IWDG_RLDR 偏移地址0x08 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved RL[11:0] 位 名称 访问 描述 复位值 [15:12] Reserved RO 保留。 0 计数器重装载值。修改此域前要向 KEY 中写 0x5555。 当向 KEY 中写 0xAAAA 后,此域的值将会被硬 [11:0] RL[11:0] RW 件装载到计数器中,随后计数器从这个值开始 0xFFF 递减计数。 注读写该域值前要确保IWDG_STATR寄存器 中的RVU位为0否则读写此域无效。 7.3.4 状态寄存器IWDG_STATR 偏移地址0x0C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved RVU PVU 位 名称 访问 描述 复位值 [15:2] Reserved RO 保留。 0 重装值更新标志位。硬件置位或清0。 0重装载更新结束最多5个LSI周期 1 RVU RO 1重装载值更新正在进行中。 0 注重装载值寄存器IWDG_RLDR只有在RVU位 被清0后才可读写访问。 时钟分频系数更新标志位。硬件置位或清0。 0时钟分频值更新结束最多5个LSI周期 0 PVU RO 1时钟分频值更新正在进行中。 0 注分频因子寄存器IWDG_PSCR只有在PVU位 被清0后才可读写访问。 注在预分频或重装值更新后不必等待RVU或PVU复位可继续执行下面的代码。即使在低功耗 模式下,此写操作仍会被继续执行完成。) V2.4 69

Page 73

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 8 章 窗口看门狗WWDG 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 窗口看门狗一般用来监测系统运行的软件故障,例如外部干扰、不可预见的逻辑错误等情况。它 需要在一个特定的窗口时间(有上下限)内进行计数器刷新(喂狗),否则早于或者晚于这个窗口时 间看门狗电路都会产生系统复位。 8.1 主要特征  可编程的7位自减型计数器  双条件复位当前计数器值小于0x40或者计数器值在窗口时间外被重装载  唤醒提前通知功能EWI用于及时喂狗动作防止系统复位 8.2 功能说明 8.2.1 原理和用法 窗口看门狗运行基于一个 7 位的递减计数器,其挂载在 PB1 总线下,计数时基 WWDG_CLK 来源 PCLK1/4096时钟的分频分频系数在配置寄存器WWDG_CFGR中的WDGTB[1:0]域设置。递减计数器 处于自由运行状态无论看门狗功能是否开启计数器一直循环递减计数。如图8-1所示窗口看门 狗内部结构框图。 图8-1 窗口看门狗结构框图 Watchdog configuration register(WWDG_CFGR)

  • W6 W5 W4 W3 W2 W1 W0 T[6:0] W[6:0] RESET Write WWDG_CTLR[6:0] Watchdog control register(WWDG_CTLR) WDGA T6 T5 T4 T3 T2 T1 T0 WWDG enable control, software on WWDG_CLK PCLK1 / 4 0 96 WDGTB[1:0]  启动窗口看门狗 系统复位后,看门狗处于关闭状态,设置 WWDG_CTLR 寄存器的 WDGA 位能够开启看门狗,随后它 不能再被关闭,除非发生复位。 注可以通过设置RCC_APB1PCENR寄存器关闭WWDG的时钟来源暂停WWDG_CLK计数间接停止看门 狗功能或者通过设置RCC_APB1PRSTR寄存器复位WWDG模块等效为复位的作用。  看门狗配置 看门狗内部是一个不断循环递减运行的7位计数器支持读写访问。使用看门狗复位功能需要 执行下面几点操作: 1 计数时基:通过 WWDG_CFGR 寄存器的 WDGTB[1:0]位域,注意要开启 RCC 单元的 WWDG 模块时钟。 V2.4 70

Page 74

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 2 窗口计数器:设置 WWDG_CFGR 寄存器的 W[6:0]位域,此计数器由硬件用作和当前计数器比较使 用,数值由用户软件配置,不会改变。作为窗口时间的上限值。 3 看门狗使能WWDG_CTLR寄存器WDGA位软件置1开启看门狗功能可以系统复位。 4 喂狗即刷新当前计数器值配置WWDG_CTLR寄存器的T[6:0]位域。此动作需要在看门狗功能开 启后,在周期性的窗口时间内执行,否则会出现看门狗复位动作。  喂狗窗口时间 如图 8-2 所示,灰色区域为窗口看门狗的监测窗口区域,其上限时间 t2 对应当前计数器值达到 窗口值W[6:0]的时间点其下限时间t3对应当前计数器值达到0x3F的时间点。此区域时间内t2<t<t3 可以进行喂狗操作写T[6:0]),刷新当前计数器的数值。 图8-2 窗口看门狗的计数模式 Y[6:0]CNT Current value Max=0x7F Timeout:T 40962W D G T B *(T[5:0]+1]) PCLK1 W[6:0] Window area 0x3F t1 t2 t3 Time Refresh not allowed Refresh allowed T6 bit RESET Refresh will be The counter will reset within reset when CNT the disallowed value<0x40 refresh time  看门狗复位: 1 当没有及时喂狗操作,导致 T[6:0]计数器的值由 0x40 变成 0x3F将出现“窗口看门狗复位” 产生系统复位。即T6-bit被硬件检测为0将出现系统复位。 注应用程序可以通过软件写T6-bit为0实现系统复位等效软件复位功能。 2 当在不允许喂狗时间内执行计数器刷新动作,即在 t1≤t≤t2 时间内操作写 T[6:0]位域,将出 现“窗口看门狗复位”,产生系统复位。  提前唤醒 为了防止没有及时刷新计数器导致系统复位看门狗模块提供了早期唤醒中断EWI通知。当 计数器自减到 0x40时产生提前唤醒信号EWIF 标志置 1如果置位了 EWI位会同时触发窗口看 门狗中断。此时距离硬件复位有1个计数器时钟周期自减为0x3F应用程序可在此时间内即时进 行喂狗操作。 8.2.2 调试模式 系统进入调试模式时可以由调试模块寄存器配置WWDG的计数器继续工作或停止。 V2.4 71

Page 75

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 8.3 寄存器描述 表8-1 WWDG相关寄存器列表 名称 访问地址 描述 复位值 R16_WWDG_CTLR 0x40002C00 控制寄存器 0x007F R16_WWDG_CFGR 0x40002C04 配置寄存器 0x007F R16_WWDG_STATR 0x40002C08 状态寄存器 0x0000 8.3.1 WWDG 控制寄存器WWDG_CTLR 偏移地址0x00 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved WDGA T[6:0] 位 名称 访问 描述 复位值 [15:8] Reserved RO 保留。 0 窗口看门狗复位使能位。 0禁止看门狗功能 7 WDGA RW1 0 1开启看门狗功能可产生复位信号。 软件写1开启但是只允许复位后硬件清0。 7 位自减计数器,每 4096*2WDGTB个 PCLK1 周期 [6:0] T[6:0] RW 自减 1。当计数器从 0x40 自减到 0x3F 时,即 0x7F T6跳变为0时产生看门狗复位。 8.3.2 WWDG 配置寄存器WWDG_CFGR 偏移地址0x04 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved EWI WDGTB[1:0] W[6:0] 位 名称 访问 描述 复位值 [15:10] Reserved RO 保留。 0 提前唤醒中断使能位。 9 EWI RW1 若此位置1则在计数器的值达到0x40时产生 0 中断。此位只能在复位后由硬件请0。 窗口看门狗时钟分频选择: 001分频计数时基 = PCLK1/4096 [8:7] WDGTB[1:0] RW 012分频计数时基 = PCLK1/4096/2 00b 104分频计数时基 = PCLK1/4096/4 118分频计数时基 = PCLK1/4096/8。 窗口看门狗7位窗口值。用来与计数器的值做 [6:0] W[6:0] RW 比较。喂狗操作只能在计数器的值小于窗口值 0x7F 且大于0x3F时进行。 V2.4 72

Page 76

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 8.3.3 WWDG 状态寄存器WWDG_STATR 偏移地址0x08 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved EWIF 位 名称 访问 描述 复位值 [15:1] Reserved WO 保留。 0 提前唤醒中断标志位。 当计数器到达0x40时此位会被硬件置位必 0 EWIF RW0 须通过软件清0用户置位是无效的。即使EWI 0 未被置位,此位在事件发生时仍会照常被置 位。 V2.4 73

Page 77

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 9 章 中断和事件NVIC/PFIC 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 CH32F20x 系列产品采用 Cortex-M3 内核内置嵌套向量中断控制器NVICNested Vectored Interrupt Controller管理了88个可屏蔽外部中断通道和10个内核中断通道其他中断源保留。 中断控制器与内核接口紧密相连,以最小的中断延迟提供了灵活的中断管理功能。具体关于 NVIC 控 制器的使用说明请参考Cortex-M3相关文档说明。 CH32V20x、CH32V30x 和 CH32V31x 系列内置可编程快速中断控制器PFICProgrammable Fast Interrupt Controller最多支持255个中断向量。当前系统管理了88个外设中断通道和8个内 核中断通道,其他保留。 9.1 主要特征 9.1.1 NVIC 控制器  88个可屏蔽的中断通道  提供不可屏蔽中断第一时间响应  向量化的中断设计实现向量入口地址直接进入内核  中断进入和退出时自动压栈和恢复,无需额外指令开销  16级嵌套优先级动态修改 9.1.2 PFIC 控制器  88个外设中断每个中断请求都有独立的触发和屏蔽控制位有专用的状态位  可编程多级中断嵌套最大嵌套深度8级硬件压栈深度3级  特有快速中断进出机制,硬件自动压栈和恢复,无需指令开销  特有免表VTFVector Table Free中断响应机制4路可编程直达中断向量地址 9.2 系统定时器  CH32F20x系列产品 Cortex-M3内核自带了一个24位自减型计数器SysTick timer。支持HCLK或HCLK/8作为时 基具有较高优先级别6。一般可用于操作系统的时基。具体请参考Cortex-M3相关文档说明。  CH32V30x和CH32V31x系列产品 内核自带了一个64位加减计数器SysTick支持HCLK或者HCLK/8作为时基具有较高优先 级,校准后可用于时间基准。 9.3 中断和异常的向量表 表9-1 CH32F20x系列产品向量表 位 优先级 优先级 名称 说明 绝对地址 置 类型

      • 保留 0x00000000 -3 固定 Reset 复位 0x00000004 -2 固定 NMI 不可屏蔽中断 0x00000008 -1 固定 HardFault 所有类型的失效 0x0000000C 0 可设置 MemManage 存储器管理 0x00000010 1 可设置 BusFault 预取指失败,存储器访问失败 0x00000014 V2.4 74

Page 78

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 2 可设置 UsageFault 未定义的指令或非法状态 0x00000018 0x0000001C-

      • 保留 0x0000002B 3 可设置 SVCall 通过SWI指令的系统服务调用 0x0000002C 4 可设置 Debug Monitor 调试监控器 0x00000030
      • 保留 0x00000034 5 可设置 PendSV 可挂起的系统服务 0x00000038 6 可设置 SysTick 系统滴答定时器 0x0000003C 0 7 可编程 WWDG 窗口定时器中断 0x00000040 1 8 可编程 PVD 电源电压检测中断EXTI 0x00000044 2 9 可编程 TAMPER 侵入检测中断 0x00000048 3 10 可编程 RTC 实时时钟中断 0x0000004C 4 11 可编程 FLASH 闪存全局中断 0x00000050 5 12 可编程 RCC 复位和时钟控制中断 0x00000054 6 13 可编程 EXTI0 EXTI线0中断 0x00000058 7 14 可编程 EXTI1 EXTI线1中断 0x0000005C 8 15 可编程 EXTI2 EXTI线2中断 0x00000060 9 16 可编程 EXTI3 EXTI线3中断 0x00000064 10 17 可编程 EXTI4 EXTI线4中断 0x00000068 11 18 可编程 DMA1_CH1 DMA1通道1全局中断 0x0000006C 12 19 可编程 DMA1_CH2 DMA1通道2全局中断 0x00000070 13 20 可编程 DMA1_CH3 DMA1通道3全局中断 0x00000074 14 21 可编程 DMA1_CH4 DMA1通道4全局中断 0x00000078 15 22 可编程 DMA1_CH5 DMA1通道5全局中断 0x0000007C 16 23 可编程 DMA1_CH6 DMA1通道6全局中断 0x00000080 17 24 可编程 DMA1_CH7 DMA1通道7全局中断 0x00000084 18 25 可编程 ADC1_2 ADC1和ADC2全局中断 0x00000088 19 26 可编程 USB_HP或 USB_HP或CAN1_TX全局中断 0x0000008C 20 27 可编程 USB_LP或 USB_LP或CAN1_RX0全局中断 0x00000090 21 28 可编程 CAN1_RX1 CAN1_RX1全局中断 0x00000094 22 29 可编程 CAN1_SCE CAN1_SCE全局中断 0x00000098 23 30 可编程 EXTI9_5 EXTI线[9:5]中断 0x0000009C 24 31 可编程 TIM1_BRK TIM1刹车中断 0x000000A0 25 32 可编程 TIM1_UP TIM1更新中断 0x000000A4 26 33 可编程 TIM1_TRG_COM TIM1触发和通信中断 0x000000A8 27 34 可编程 TIM1_CC TIM1捕获比较中断 0x000000AC 28 35 可编程 TIM2 TIM2全局中断 0x000000B0 29 36 可编程 TIM3 TIM3全局中断 0x000000B4 30 37 可编程 TIM4 TIM4全局中断 0x000000B8 31 38 可编程 I2C1_EV I2C1事件中断 0x000000BC 32 39 可编程 I2C1_ER I2C1错误中断 0x000000C0 33 40 可编程 I2C2_EV I2C2事件中断 0x000000C4 34 41 可编程 I2C2_ER I2C2错误中断 0x000000C8 35 42 可编程 SPI1 SPI1全局中断 0x000000CC V2.4 75

Page 79

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 36 43 可编程 SPI2 SPI2全局中断 0x000000D0 37 44 可编程 USART1 USART1全局中断 0x000000D4 38 45 可编程 USART2 USART2全局中断 0x000000D8 39 46 可编程 USART3 USART3全局中断 0x000000DC 40 47 可编程 EXTI15_10 EXTI线[15:10]中断 0x000000E0 41 48 可编程 RTCAlarm RTC闹钟中断EXTI 0x000000E4 42 49 可编程 USBWakeUp USB唤醒中断EXTI 0x000000E8 43 50 可编程 TIM8_BRK TIM8刹车中断 0x000000EC 44 51 可编程 TIM8_UP TIM8更新中断 0x000000F0 45 52 可编程 TIM8_TRG_COM TIM8触发和通信中断 0x000000F4 46 53 可编程 TIM8_CC TIM8捕获比较中断 0x000000F8 47 54 可编程 RNG RNG全局中断 0x000000FC 48 55 - - 保留 0x00000100 49 56 可编程 SDIO SDIO全局中断 0x00000104 50 57 可编程 TIM5 TIM5全局中断 0x00000108 51 58 可编程 SPI3 SPI3全局中断 0x0000010C 52 59 可编程 USART4 USART4全局中断 0x00000110 53 60 可编程 USART5 USART5全局中断 0x00000114 54 61 可编程 TIM6 TIM6全局中断 0x00000118 55 62 可编程 TIM7 TIM7全局中断 0x0000011C 56 63 可编程 DMA2_CH1 DMA2通道1全局中断 0x00000120 57 64 可编程 DMA2_CH2 DMA2通道2全局中断 0x00000124 58 65 可编程 DMA2_CH3 DMA2通道3全局中断 0x00000128 59 66 可编程 DMA2_CH4 DMA2通道4全局中断 0x0000012C 60 67 可编程 DMA2_CH5 DMA2通道5全局中断 0x00000130 61 68 可编程 ETH ETH全局中断 0x00000134 62 69 可编程 ETH_WKUP ETH唤醒中断 0x00000138 63 70 可编程 CAN2_TX CAN2_TX全局中断 0x0000013C 64 71 可编程 CAN2_RX0 CAN2_RX0全局中断 0x00000140 65 72 可编程 CAN2_RX1 CAN2_RX1全局中断 0x00000144 66 73 可编程 CAN2_SCE CAN2_SCE全局中断 0x00000148 67 74 可编程 OTG_FS 全速OTG中断 0x0000014C 68 75 可编程 USBHSWakeUp 高速USB唤醒中断 0x00000150 69 76 可编程 USBHS 高速USB全局中断 0x00000154 70 77 可编程 DVP DVP全局中断 0x00000158 71 78 可编程 USART6 USART6全局中断 0x0000015C 72 79 可编程 USART7 USART7全局中断 0x00000160 73 80 可编程 USART8 USART8全局中断 0x00000164 74 81 可编程 TIM9_BRK TIM9刹车中断 0x00000168 75 82 可编程 TIM9_UP TIM9更新中断 0x0000016C 76 83 可编程 TIM9_TRG_COM TIM9触发和通信中断 0x00000170 77 84 可编程 TIM9_CC TIM9捕获比较中断 0x00000174 78 85 可编程 TIM10_BRK TIM10刹车中断 0x00000178 79 86 可编程 TIM10_UP TIM10更新中断 0x0000017C V2.4 76

Page 80

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 80 87 可编程 TIM10_TRG_COM TIM10触发和通信中断 0x00000180 81 88 可编程 TIM10_CC TIM10捕获比较中断 0x00000184 82 89 可编程 DMA2_CH6 DMA2通道6全局中断 0x00000188 83 90 可编程 DMA2_CH7 DMA2通道7全局中断 0x0000018C 84 91 可编程 DMA2_CH8 DMA2通道8全局中断 0x00000190 85 92 可编程 DMA2_CH9 DMA2通道9全局中断 0x00000194 86 93 可编程 DMA2_CH10 DMA2通道10全局中断 0x00000198 87 94 可编程 DMA2_CH11 DMA2通道11全局中断 0x0000019C 表9-2 CH32V20x、CH32V30x和CH32V31x系列产品向量表 编号 优先级 类型 名称 描述 入口地址 0 - - - - 0x00000000 1 - - - - 0x00000004 2 -5 固定 NMI 不可屏蔽中断 0x00000008 3 -4 固定 HardFault 异常中断 0x0000000C 4 - - - 保留 0x00000010 5 -3 固定 Ecall-M 机器模式回调中断 0x00000014 0x00000018- 6-7 - - - 保留 0x0000001C 8 -2 固定 Ecall-U 用户模式回调中断 0x00000020 9 -1 固定 BreakPoint 断点回调中断 0x00000024 0x00000028- 10-11 - - - 保留 0x0000002C 12 0 可编程 SysTick 系统定时器中断 0x00000030 13 - - - 保留 0x00000034 14 1 可编程 SW 软件中断 0x00000038 15 - - - 保留 0x0000003C 16 2 可编程 WWDG 窗口定时器中断 0x00000040 17 3 可编程 PVD 电源电压检测中断EXTI 0x00000044 18 4 可编程 TAMPER 侵入检测中断 0x00000048 19 5 可编程 RTC 实时时钟中断 0x0000004C 20 6 可编程 FLASH 闪存全局中断 0x00000050 21 7 可编程 RCC 复位和时钟控制中断 0x00000054 22 8 可编程 EXTI0 EXTI线0中断 0x00000058 23 9 可编程 EXTI1 EXTI线1中断 0x0000005C 24 10 可编程 EXTI2 EXTI线2中断 0x00000060 25 11 可编程 EXTI3 EXTI线3中断 0x00000064 26 12 可编程 EXTI4 EXTI线4中断 0x00000068 27 13 可编程 DMA1_CH1 DMA1通道1全局中断 0x0000006C 28 14 可编程 DMA1_CH2 DMA1通道2全局中断 0x00000070 29 15 可编程 DMA1_CH3 DMA1通道3全局中断 0x00000074 30 16 可编程 DMA1_CH4 DMA1通道4全局中断 0x00000078 31 17 可编程 DMA1_CH5 DMA1通道5全局中断 0x0000007C 32 18 可编程 DMA1_CH6 DMA1通道6全局中断 0x00000080 V2.4 77

Page 81

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 33 19 可编程 DMA1_CH7 DMA1通道7全局中断 0x00000084 34 20 可编程 ADC1_2 ADC1和ADC2全局中断 0x00000088 35 21 可编程 USB_HP或CAN1_TX USB_HP或CAN1_TX全局中断 0x0000008C 36 22 可编程 USB_LP或CAN1_RX0 USB_LP或CAN1_RX0全局中断 0x00000090 37 23 可编程 CAN1_RX1 CAN1_RX1全局中断 0x00000094 38 24 可编程 CAN1_SCE CAN1_SCE全局中断 0x00000098 39 25 可编程 EXTI9_5 EXTI线[9:5]中断 0x0000009C 40 26 可编程 TIM1_BRK TIM1刹车中断 0x000000A0 41 27 可编程 TIM1_UP TIM1更新中断 0x000000A4 42 28 可编程 TIM1_TRG_COM TIM1触发和通信中断 0x000000A8 43 29 可编程 TIM1_CC TIM1捕获比较中断 0x000000AC 44 30 可编程 TIM2 TIM2全局中断 0x000000B0 45 31 可编程 TIM3 TIM3全局中断 0x000000B4 46 32 可编程 TIM4 TIM4全局中断 0x000000B8 47 33 可编程 I2C1_EV I2C1事件中断 0x000000BC 48 34 可编程 I2C1_ER I2C1错误中断 0x000000C0 49 35 可编程 I2C2_EV I2C2事件中断 0x000000C4 50 36 可编程 I2C2_ER I2C2错误中断 0x000000C8 51 37 可编程 SPI1 SPI1全局中断 0x000000CC 52 38 可编程 SPI2 SPI2全局中断 0x000000D0 53 39 可编程 USART1 USART1全局中断 0x000000D4 54 40 可编程 USART2 USART2全局中断 0x000000D8 55 41 可编程 USART3 USART3全局中断 0x000000DC 56 42 可编程 EXTI15_10 EXTI线[15:10]中断 0x000000E0 57 43 可编程 RTCAlarm RTC闹钟中断EXTI 0x000000E4 58 44 可编程 USBWakeUp USB唤醒中断EXTI 0x000000E8 59 45 可编程 TIM8_BRK TIM8刹车中断 0x000000EC 60 46 可编程 TIM8_UP TIM8更新中断 0x000000F0 61 47 可编程 TIM8_TRG_COM TIM8触发和通信中断 0x000000F4 62 48 可编程 TIM8_CC TIM8捕获比较中断 0x000000F8 63 49 可编程 RNG RNG全局中断 0x000000FC 64 50 - - 保留 0x00000100 65 51 可编程 SDIO SDIO全局中断 0x00000104 66 52 可编程 TIM5 TIM5全局中断 0x00000108 67 53 可编程 SPI3 SPI3全局中断 0x0000010C 68 54 可编程 USART4 USART4全局中断 0x00000110 69 55 可编程 USART5 USART5全局中断 0x00000114 70 56 可编程 TIM6 TIM6全局中断 0x00000118 71 57 可编程 TIM7 TIM7全局中断 0x0000011C 72 58 可编程 DMA2_CH1 DMA2通道1全局中断 0x00000120 73 59 可编程 DMA2_CH2 DMA2通道2全局中断 0x00000124 74 60 可编程 DMA2_CH3 DMA2通道3全局中断 0x00000128 75 61 可编程 DMA2_CH4 DMA2通道4全局中断 0x0000012C 76 62 可编程 DMA2_CH5 DMA2通道5全局中断 0x00000130 77 63 可编程 ETH ETH全局中断 0x00000134 V2.4 78

Page 82

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 78 64 可编程 ETH_WKUP ETH唤醒中断 0x00000138 79 65 可编程 CAN2_TX CAN2_TX全局中断 0x0000013C 80 66 可编程 CAN2_RX0 CAN2_RX0全局中断 0x00000140 81 67 可编程 CAN2_RX1 CAN2_RX1全局中断 0x00000144 82 68 可编程 CAN2_SCE CAN2_SCE全局中断 0x00000148 83 69 可编程 OTG_FS 全速OTG中断 0x0000014C 84 70 可编程 USBHSWakeUp 高速USB唤醒中断 0x00000150 85 71 可编程 USBHS 高速USB全局中断 0x00000154 86 72 可编程 DVP DVP全局中断 0x00000158 87 73 可编程 USART6 USART6全局中断 0x0000015C 88 74 可编程 USART7 USART7全局中断 0x00000160 89 75 可编程 USART8 USART8全局中断 0x00000164 90 76 可编程 TIM9_BRK TIM9刹车中断 0x00000168 91 77 可编程 TIM9_UP TIM9更新中断 0x0000016C 92 78 可编程 TIM9_TRG_COM TIM9触发和通信中断 0x00000170 93 79 可编程 TIM9_CC TIM9捕获比较中断 0x00000174 94 80 可编程 TIM10_BRK TIM10刹车中断 0x00000178 95 81 可编程 TIM10_UP TIM10更新中断 0x0000017C 96 82 可编程 TIM10_TRG_COM TIM10触发和通信中断 0x00000180 97 83 可编程 TIM10_CC TIM10捕获比较中断 0x00000184 98 84 可编程 DMA2_CH6 DMA2通道6全局中断 0x00000188 99 85 可编程 DMA2_CH7 DMA2通道7全局中断 0x0000018C 100 86 可编程 DMA2_CH8 DMA2通道8全局中断 0x00000190 101 87 可编程 DMA2_CH9 DMA2通道9全局中断 0x00000194 102 88 可编程 DMA2_CH10 DMA2通道10全局中断 0x00000198 103 89 可编程 DMA2_CH11 DMA2通道11全局中断 0x0000019C V2.4 79

Page 83

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 9.4 外部中断和事件控制器EXTI 9.4.1 概述 图9-1 外部中断EXTI接口框图 PBbus PCLK2 Peripheral interface 22 22 22 22 22 INTFR INTENR SWIEVR RTENR FTENR 22 22 22 22 To NVIC interrupt controller 22 Pulse Edge detect Input 22 generator 22 22 circuit Line EVENR 由图9-1可以看出外部中断的触发源既可以是软件中断SWIEVR也可以是实际的外部中断通 道外部中断通道的信号会先经过边沿检测电路edge detect circuit的筛选。只要产生软件中 断或外部中断信号其一,就会通过图中的或门电路输出给事件使能和中断使能两个与门电路,只要有 中断被使能或事件被使能就会产生中断或事件。EXTI的六个寄存器由处理器通过PB2接口访问。 9.4.2 唤醒事件说明 系统可以通过唤醒事件来唤醒由WFE指令引起的睡眠模式。唤醒事件通过以下两种配置产生  在外设的寄存器里使能一个中断但不在内核的NVIC或PFIC里使能这个中断同时在内核里使 能SEVONPEND位。体现在EXTI中就是使能EXTI中断但不在NVIC或PFIC中使能EXTI中断 同时使能 SEVONPEND 位。当 CPU 从 WFE 中唤醒后,需要清除 EXTI 的中断标志位和 NVIC 或 PFIC 挂起位。  使能一个 EXTI 通道为事件通道CPU 从 WFE 唤醒后无需清除中断标志位和 NVIC 或 PFIC 挂起位 的操作。 9.4.3 说明 使用外部中断需要配置相应外部中断通道,即选择相应触发沿,使能相应中断。当外部中断通道 上出现了设定的触发沿时将产生一个中断请求对应的中断标志位也会被置位。对标志位写1可以 V2.4 80

Page 84

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 清除该标志位。 使用外部硬件中断步骤: 1 配置GPIO操作 2 配置对应的外部中断通道的中断使能位EXTI_INTENR 3 配置触发沿EXTI_RTENR或EXTI_FTENR选择上升沿触发、下降沿触发或双边沿触发 4 在内核的NVIC/PFIC中配置EXTI中断以保证其可以正确响应。 使用外部硬件事件步骤: 1 配置GPIO操作 2 配置对应的外部中断通道的事件使能位EXTI_EVENR 3 配置触发沿EXTI_RTENR或EXTI_FTENR选择上升沿触发、下降沿触发或双边沿触发。 使用软件中断/事件步骤: 1 使能外部中断EXTI_INTENR或外部事件EXTI_EVENR 2 如果使用中断服务函数需要设置内核的NVIC或PFIC里EXTI中断 3 设置软件中断触发EXTI_SWIEVR即会产生中断。 9.4.4 外部事件映射 表9-3 EXTI中断映射 外部中断/事件线路 映射事件描述 Px0Px15x=A/B/C/D/E任何一个IO口都可以启 EXTI0EXTI15 用外部中断/事件功能由AFIO_EXTICRx寄存器配置。 EXTI16 PVD事件超出电压监控阈值 EXTI17 RTC闹钟事件 USBD/USBFSOTG 唤醒事件(适用于 CH32F20x_D8、 CH32F20x_D8C 、 CH32V30x_D8 、 CH32V30x_D8C 、 EXTI18 CH32V31x_D8C USBD唤醒事件其余芯片型号 EXTI19 ETH唤醒事件 USBHS唤醒事件适用于CH32F20x_D8C、CH32V30x_D8C、 EXTI20 CH32V31x_D8C USBFS唤醒事件适用于其余芯片型号 内部 32K 校准唤醒事件(适用于 CH32V20x_D8、 EXTI21 CH32V20x_D8W、CH32F20x_D8W 9.5 寄存器描述 9.5.1 EXTI 寄存器描述 表9-4 EXTI相关寄存器列表 名称 访问地址 描述 复位值 R32_EXTI_INTENR 0x40010400 中断使能寄存器 0x00000000 R32_EXTI_EVENR 0x40010404 事件使能寄存器 0x00000000 R32_EXTI_RTENR 0x40010408 上升沿触发使能寄存器 0x00000000 R32_EXTI_FTENR 0x4001040C 下降沿触发使能寄存器 0x00000000 R32_EXTI_SWIEVR 0x40010410 软中断事件寄存器 0x00000000 V2.4 81

Page 85

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R32_EXTI_INTFR 0x40010414 中断标志位寄存器 0x0000XXXX 9.5.1.1 中断使能寄存器EXTI_INTENR 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved MR21 MR20 MR19 MR18 MR17 MR16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MR15 MR14 MR13 MR12 MR11 MR10 MR9 MR8 MR7 MR6 MR5 MR4 MR3 MR2 MR1 MR0 位 名称 访问 描述 复位值 [31:22] Reserved RO 保留。 0 使能外部中断通道x的中断请求信号 [21:0] MRx RW 0屏蔽此通道的中断 0 1使能此通道的中断。 9.5.1.2 事件使能寄存器EXTI_EVENR 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved MR21 MR20 MR19 MR18 MR17 MR16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MR15 MR14 MR13 MR12 MR11 MR10 MR9 MR8 MR7 MR6 MR5 MR4 MR3 MR2 MR1 MR0 位 名称 访问 描述 复位值 [31:22] Reserved RO 保留。 0 使能外部中断通道x的事件请求信号 [21:0] MRx RW 0屏蔽此通道的事件 0 1使能此通道的事件。 9.5.1.3 上升沿触发使能寄存器EXTI_RTENR 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved TR21 TR20 TR19 TR18 TR17 TR16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TR15 TR14 TR13 TR12 TR11 TR10 TR9 TR8 TR7 TR6 TR5 TR4 TR3 TR2 TR1 TR0 位 名称 访问 描述 复位值 [31:22] Reserved RO 保留。 0 使能外部中断通道x的上升沿触发 [21:0] TRx RW 0禁止此通道的上升沿触发 0 1使能此通道的上升沿触发。 V2.4 82

Page 86

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 9.5.1.4 下降沿触发使能寄存器EXTI_FTENR 偏移地址0x0C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved TR21 TR20 TR19 TR18 TR17 TR16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TR15 TR14 TR13 TR12 TR11 TR10 TR9 TR8 TR7 TR6 TR5 TR4 TR3 TR2 TR1 TR0 位 名称 访问 描述 复位值 [31:22] Reserved RO 保留 0 使能外部中断通道x的下降沿触发 [21:0] TRx RW 0禁止此通道的下降沿触发 0 1使能此通道的下降沿触发。 9.5.1.5 软中断事件寄存器EXTI_SWIEVR 偏移地址0x10 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 SWIER SWIER SWIER SWIER SWIER SWIER Reserved 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SWIERSWIER SWIER SWIERSWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 位 名称 访问 描述 复位值 [31:22] Reserved RO 保留。 0 在相对应的外部触发中断通道上设置一个软 件 中 断 。 这 里 置 位 会 使 中 断 标 志 位 [21:0] SWIERx RW EXTI_INTFR对应位置位如果中断使能 0 EXTI_INTENR或事件使能EXTI_EVENR开 启,那么就会产生中断或事件。 9.5.1.6 中断标志位寄存器EXTI_INTFR 偏移地址0x14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved IF21 IF20 IF19 IF18 IF17 IF16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IF15 IF14 IF13 IF12 IF11 IF10 IF9 IF8 IF7 IF6 IF5 IF4 IF3 IF2 IF1 IF0 位 名称 访问 描述 复位值 [31:22] Reserved RO 保留。 0 中断标志位,该位置位标志表示发生了对应的 [21:0] IFx W1 X 外部中断。写1可以清除此位。 V2.4 83

Page 87

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 9.5.2 PFIC 寄存器描述 表9-5 PFIC相关寄存器列表 名称 访问地址 描述 复位值 R32_PFIC_ISR1 0xE000E000 PFIC中断使能状态寄存器1 0x00000000 R32_PFIC_ISR2 0xE000E004 PFIC中断使能状态寄存器2 0x00000000 R32_PFIC_ISR3 0xE000E008 PFIC中断使能状态寄存器3 0x00000000 R32_PFIC_ISR4 0xE000E00C PFIC中断使能状态寄存器4 0x00000000 R32_PFIC_IPR1 0xE000E020 PFIC中断挂起状态寄存器1 0x00000000 R32_PFIC_IPR2 0xE000E024 PFIC中断挂起状态寄存器2 0x00000000 R32_PFIC_IPR3 0xE000E028 PFIC中断挂起状态寄存器3 0x00000000 R32_PFIC_IPR4 0xE000E02C PFIC中断挂起状态寄存器4 0x00000000 R32_PFIC_ITHRESDR 0xE000E040 PFIC中断优先级阈值配置寄存器 0x00000000 R32_PFIC_CFGR 0xE000E048 PFIC中断配置寄存器 0x00000000 R32_PFIC_GISR 0xE000E04C PFIC中断全局状态寄存器 0x00000000 R32_PFIC_VTFIDR 0xE000E050 PFIC VTF中断ID配置寄存器 0xXXXXXXXX R32_PFIC_VTFADDRR0 0xE000E060 PFIC VTF中断0偏移地址寄存器 0xXXXXXXXX R32_PFIC_VTFADDRR1 0xE000E064 PFIC VTF中断1偏移地址寄存器 0xXXXXXXXX R32_PFIC_VTFADDRR2 0xE000E068 PFIC VTF中断2偏移地址寄存器 0xXXXXXXXX R32_PFIC_VTFADDRR3 0xE000E06C PFIC VTF中断3偏移地址寄存器 0xXXXXXXXX R32_PFIC_IENR1 0xE000E100 PFIC中断使能设置寄存器1 0x00000000 R32_PFIC_IENR2 0xE000E104 PFIC中断使能设置寄存器2 0x00000000 R32_PFIC_IENR3 0xE000E108 PFIC中断使能设置寄存器3 0x00000000 R32_PFIC_IENR4 0xE000E10C PFIC中断使能设置寄存器4 0x00000000 R32_PFIC_IRER1 0xE000E180 PFIC中断使能清除寄存器1 0x00000000 R32_PFIC_IRER2 0xE000E184 PFIC中断使能清除寄存器2 0x00000000 R32_PFIC_IRER3 0xE000E188 PFIC中断使能清除寄存器3 0x00000000 R32_PFIC_IRER4 0xE000E18C PFIC中断使能清除寄存器4 0x00000000 R32_PFIC_IPSR1 0xE000E200 PFIC中断挂起设置寄存器1 0x00000000 R32_PFIC_IPSR2 0xE000E204 PFIC中断挂起设置寄存器2 0x00000000 R32_PFIC_IPSR3 0xE000E208 PFIC中断挂起设置寄存器3 0x00000000 R32_PFIC_IPSR4 0xE000E20C PFIC中断挂起设置寄存器4 0x00000000 R32_PFIC_IPRR1 0xE000E280 PFIC中断挂起清除寄存器1 0x00000000 R32_PFIC_IPRR2 0xE000E284 PFIC中断挂起清除寄存器2 0x00000000 R32_PFIC_IPRR3 0xE000E288 PFIC中断挂起清除寄存器3 0x00000000 R32_PFIC_IPRR4 0xE000E28C PFIC中断挂起清除寄存器4 0x00000000 R32_PFIC_IACTR1 0xE000E300 PFIC中断激活状态寄存器1 0x00000000 R32_PFIC_IACTR2 0xE000E304 PFIC中断激活状态寄存器2 0x00000000 R32_PFIC_IACTR3 0xE000E308 PFIC中断激活状态寄存器3 0x00000000 R32_PFIC_IACTR4 0xE000E30C PFIC中断激活状态寄存器4 0x00000000 R32_PFIC_IPRIORx 0xE000E400 PFIC中断优先级配置寄存器 0x00000000 R32_PFIC_SCTLR 0xE000ED10 PFIC系统控制寄存器 0x00000000 注1.NMI、HardFault、ECALL-M、ECALL-U、BREAKPOINT中断默认总是使能。 2.ECALL-M、ECALL-U、BREAKPOINT均为EXC的一种情况状态由EXC的状态位bit3表示。 3.NMI、EXC支持中断挂起清除和设置操作不支持中断使能清除和设置操作。 4.ECALL-M、ECALL-U、BREAKPOINT不支持中断挂起清除和设置、中断使能清除和设置操作。 V2.4 84

Page 88

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn在使用PFIC_IENRx寄存器屏蔽任意中断或使用CSR寄存器屏蔽全局中断时追加一条 “fence.i”指令用于内核控制状态和中断使能状态之间的同步。 9.5.2.1 PFIC 中断使能状态寄存器 1PFIC_ISR1 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 INTENSTA[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 INTENINTEN INTENINTEN INTEN INTEN Reserved Reserved STA15 STA14 STA13 STA12 STA3 STA2 位 名称 访问 描述 复位值 12#-31#中断当前使能状态。 [31:12] INTENSTA RO 0当前编号中断未启用 0 1当前编号中断已使能。 [11:4] Reserved RO 保留 0 2#-3#中断当前使能状态。 [3:2] INTENSTA RO 0当前编号中断未启用 0 1当前编号中断已使能。 [1:0] Reserved RO 保留 0 9.5.2.2 PFIC 中断使能状态寄存器 2PFIC_ISR2 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 INTENSTA[63:48] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 INTENSTA[47:32] 位 名称 访问 描述 复位值 32#-63#中断当前使能状态。 [31:0] INTENSTA RO 0当前编号中断未启用 0 1当前编号中断已使能。 9.5.2.3 PFIC 中断使能状态寄存器 3PFIC_ISR3 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 INTENSTA[95:80] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 INTENSTA[79:64] 位 名称 访问 描述 复位值 V2.4 85

Page 89

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 64#-95#中断当前使能状态。 [31:0] INTENSTA RO 0当前编号中断未启用 0 1当前编号中断已使能。 9.5.2.4 PFIC 中断使能状态寄存器 4PFIC_ISR4 偏移地址0x0C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved INTENSTA[103:96] 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留 0 96#-103#中断当前使能状态。 [7:0] INTENSTA RO 0当前编号中断未启用 0 1当前编号中断已使能。 9.5.2.5 PFIC 中断挂起状态寄存器 1PFIC_IPR1 偏移地址0x20 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PENDSTA[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PENDS PENDSPENDSPENDS PENDS PENDS Reserved Reserved TA15 TA14 TA13 TA12 TA3 TA2 位 名称 访问 描述 复位值 12#-31#中断当前挂起状态。 [31:12] PENDSTA RO 0当前编号中断未挂起 0 1当前编号中断已挂起。 [11:4] Reserved RO 保留。 0 2#-3#中断当前挂起状态。 [3:2] PENDSTA RO 0当前编号中断未挂起 0 1当前编号中断已挂起。 [1:0] Reserved RO 保留。 0 9.5.2.6 PFIC 中断挂起状态寄存器 2PFIC_IPR2 偏移地址0x24 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PENDSTA[63:48] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PENDSTA[47:32] V2.4 86

Page 90

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 32#-63#中断当前挂起状态。 [31:0] PENDSTA RO 0当前编号中断未挂起 0 1当前编号中断已挂起。 9.5.2.7 PFIC 中断挂起状态寄存器 3PFIC_IPR3 偏移地址0x28 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PENDSTA[95:80] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PENDSTA[79:64] 位 名称 访问 描述 复位值 64#-95#中断当前挂起状态。 [31:0] PENDSTA RO 0当前编号中断未挂起 0 1当前编号中断已挂起。 9.5.2.8 PFIC 中断挂起状态寄存器 4PFIC_IPR4 偏移地址0x2C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved PENDSTA[103:96] 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留。 0 96#-103#中断当前挂起状态。 [7:0] PENDSTA RO 0当前编号中断未挂起 0 1当前编号中断已挂起。 9.5.2.9 PFIC 中断优先级阈值配置寄存器PFIC_ITHRESDR 偏移地址0x40 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 Reserved THRESHOLD[7:0] 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留。 0 中断优先级阈值设置值。 中断优先级低于所设阈值的中断在挂起 [7:0] THRESHOLD RW 时不执行中断服务;此寄存器为 0 时表 0 示阈值寄存器功能无效。 对于V4B/C/F V2.4 87

Page 91

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [7:5]:优先级阈值。 [4:0]保留固定为0。 9.5.2.10 PFIC 中断配置寄存器PFIC_CFGR 偏移地址0x48 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 KEYCODE[15:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved RSTSYS Reserved 位 名称 访问 描述 复位值 对应不同的目标控制位,需要同步写入相应的安 全访问标识数据才能修改读出数据固定为0。 [31:16] KEYCODE WO KEY1 = 0xFA05 0 KEY2 = 0xBCAF KEY3 = 0xBEEF。 [15:8] Reserved RO 保留。 0 系统复位同步写入KEY3。自动清0。 7 RSTSYS WO 写1有效写0无效。 0 注与PFIC_SCTLR寄存器SYSRST位作用相同。 [6:0] Reserved RO 保留。 0 9.5.2.11 PFIC 中断全局状态寄存器PFIC_GISR 偏移地址0x4C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 GPEND GACT Reserved NESTSTA[7:0] STA STA 位 名称 访问 描述 复位值 [31:10] Reserved RO 保留。 0 当前是否有中断处于挂起: 9 GPENDSTA RO 0 0没有 1有。 当前是否有中断被执行: 8 GACTSTA RO 0 0没有 1有。 当前中断嵌套状态,目前最大支持 8 级嵌 套硬件压栈深度最大为3级若设置嵌套 深度大于 3 级,则应配置低三级中断为硬 [7:0] NESTSTA RO 件压栈,其余高优先级使用软件压栈。 0x00 0xFF第8级中断中 0x7F第7级中断中 0x3F第6级中断中 V2.4 88

Page 92

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0x1F第5级中断中 0x0F第4级中断中 0x07第3级中断中 0x03第2级中断中 0x01第1级中断中 0x00没有中断发生 其他:不可能情况。 注适用于青稞V4F内核CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C。 当前中断嵌套状态,目前最大支持 2 级嵌 套硬件压栈深度最大为2级。 0x03第2级中断中 0x01第1级中断中 0x00没有中断发生 其他:不可能情况。 注:适用于青稞 V4B、V4C 内核: CH32V20x_D6 、 CH32V20x_D8 、 CH32V20x_D8W。 9.5.2.12 PFIC VTF 中断 ID 配置寄存器PFIC_VTFIDR 偏移地址0x50 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 VTFID3 VTFID2 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 VTFID1 VTFID0 位 名称 访问 描述 复位值 [31:24] VTFID3 RW 配置VTF中断3的中断编号。 X [23:16] VTFID2 RW 配置VTF中断2的中断编号。 X [15:8] VTFID1 RW 配置VTF中断1的中断编号。 X [7:0] VTFID0 RW 配置VTF中断0的中断编号。 X 9.5.2.13 PFIC VTF 中断 0 地址寄存器PFIC_VTFADDRR0 偏移地址0x60 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ADDR0[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADDR0[15:1] VTF0EN 位 名称 访问 描述 复位值 [31:1] ADDR0 RW VTF中断0服务程序地址bit[31:1]。 X 0 VTF0EN RW VTF中断0使能位 0 V2.4 89

Page 93

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0关闭 1启用VTF中断0通道。 9.5.2.14 PFIC VTF 中断 1 地址寄存器PFIC_VTFADDRR1 偏移地址0x64 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ADDR1[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADDR1[15:1] VTF1EN 位 名称 访问 描述 复位值 [31:1] ADDR1 RW VTF中断1服务程序地址bit[31:1]。 X VTF中断1使能位 0 VTF1EN RW 0关闭 0 1启用VTF中断1通道。 9.5.2.15 PFIC VTF 中断 2 地址寄存器PFIC_VTFADDRR2 偏移地址0x68 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ADDR2[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADDR2[15:1] VTF2EN 位 名称 访问 描述 复位值 [31:1] ADDR2 RW VTF中断2服务程序地址bit[31:1]。 X VTF中断2使能位 0 VTF2EN RW 0关闭 0 1启用VTF中断2通道。 9.5.2.16 PFIC VTF 中断 3 地址寄存器PFIC_VTFADDRR3 偏移地址0x6C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ADDR3[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADDR3[15:1] VTF3EN 位 名称 访问 描述 复位值 [31:1] ADDR3 RW VTF中断3服务程序地址bit[31:1]。 X VTF中断3使能位 0 VTF3EN RW 0关闭 0 1启用VTF中断3通道。 V2.4 90

Page 94

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 9.5.2.17 PFIC 中断使能设置寄存器 1PFIC_IENR1 偏移地址0x100 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 INTEN[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 INTEN1 INTEN INTEN14 INTEN12 Reserved 5 13 位 名称 访问 描述 复位值 12#-31#中断使能控制。 [31:12] INTEN WO 0无影响 0 1当前编号中断使能。 [11:0] Reserved RO 保留。 0 9.5.2.18 PFIC 中断使能设置寄存器 2PFIC_IENR2 偏移地址0x104 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 INTEN[63:48] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 INTEN[47:32] 位 名称 访问 描述 复位值 32#-63#中断使能控制。 [31:0] INTEN WO 0无影响 0 1当前编号中断使能。 9.5.2.19 PFIC 中断使能设置寄存器 3PFIC_IENR3 偏移地址0x108 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 INTEN[95:80] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 INTEN[79:64] 位 名称 访问 描述 复位值 64#-95#中断使能控制。 [31:0] INTEN WO 0无影响 0 1当前编号中断使能。 V2.4 91

Page 95

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 9.5.2.20 PFIC 中断使能设置寄存器 4PFIC_IENR4 偏移地址0x10C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved INTEN[103:96] 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留。 0 96#-103#中断使能控制。 [7:0] INTEN WO 0无影响 0 1当前编号中断使能。 9.5.2.21 PFIC 中断使能清除寄存器 1PFIC_IRER1 偏移地址0x180 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 INTRSET[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 INTR INTRS INTRSET INTRSET1 SET1 Reserved ET15 14 2 3 位 名称 访问 描述 复位值 12#-31#中断关闭控制。 [31:12] INTRSET WO 0无影响 0 1当前编号中断关闭。 [11:0] Reserved RO 保留。 0 9.5.2.22 PFIC 中断使能清除寄存器 2PFIC_IRER2 偏移地址0x184 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 INTRSET[63:48] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 INTRSET[47:32] 位 名称 访问 描述 复位值 32#-63#中断关闭控制。 [31:0] INTRSET WO 0无影响 0 1当前编号中断关闭。 V2.4 92

Page 96

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 9.5.2.23 PFIC 中断使能清除寄存器 3PFIC_IRER3 偏移地址0x188 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 INTRSET[95:80] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 INTRSET[79:64] 位 名称 访问 描述 复位值 64#-95#中断关闭控制。 [31:0] INTRSET WO 0无影响 0 1当前编号中断关闭。 9.5.2.24 PFIC 中断使能清除寄存器 4PFIC_IRER4 偏移地址0x18C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved INTRSET[103:96] 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留。 0 96#-103#中断关闭控制。 [7:0] INTRSET WO 0无影响 0 1当前编号中断关闭。 9.5.2.25 PFIC 中断挂起设置寄存器 1PFIC_IPSR1 偏移地址0x200 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PENDSET[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PEND PEND PEND PEND PEND PEND SET1 Reserved Reserved SET15 SET14 SET12 SET3 SET2 3 位 名称 访问 描述 复位值 12#-31#中断挂起设置13#和15#保留。 [31:12] PENDSET WO 0无影响 0 1当前编号中断挂起。 [11:4] Reserved RO 保留。 0 2#-3#中断挂起设置。 [3:2] PENDSET WO 0无影响 0 1当前编号中断挂起 V2.4 93

Page 97

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [1:0] Reserved RO 保留。 0 9.5.2.26 PFIC 中断挂起设置寄存器 2PFIC_IPSR2 偏移地址0x204 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PENDSET[63:48] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PENDSET[47:32] 位 名称 访问 描述 复位值 32#-63#中断挂起设置。 [31:0] PENDSET WO 0无影响 0 1当前编号中断挂起。 9.5.2.27 PFIC 中断挂起设置寄存器 3PFIC_IPSR3 偏移地址0x208 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PENDSET[95:80] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PENDSET[79:64] 位 名称 访问 描述 复位值 64#-95#中断挂起设置。 [31:0] PENDSET WO 0无影响 0 1当前编号中断挂起。 9.5.2.28 PFIC 中断挂起设置寄存器 4PFIC_IPSR4 偏移地址0x20C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved PENDSET [103:96] 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留。 0 96#-103#中断挂起设置。 [7:0] PENDSET WO 0无影响 0 1当前编号中断挂起。 V2.4 94

Page 98

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 9.5.2.29 PFIC 中断挂起清除寄存器 1PFIC_IPRR1 偏移地址0x280 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PENDRST[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PEND PEND PEND PEND PEND PEND Reserved Reserved RST15 RST14 RST13 RST12 RST3 RST2 位 名称 访问 描述 复位值 12#-31#中断挂起清除13#和15#保留。 [31:12] PENDRST WO 0无影响 0 1当前编号中断清除挂起状态。 [11:4] Reserved RO 保留。 0 2#-3#中断挂起清除。 [3:2] PENDRST WO 0无影响 0 1当前编号中断清除挂起状态。 [1:0] Reserved RO 保留。 0 9.5.2.30 PFIC 中断挂起清除寄存器 2PFIC_IPRR2 偏移地址0x284 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PENDRST[63:48] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PENDRST[47:32] 位 名称 访问 描述 复位值 32#-63#中断挂起清除。 [31:0] PENDRST WO 0无影响 0 1当前编号中断清除挂起状态。 9.5.2.31 PFIC 中断挂起清除寄存器 3PFIC_IPRR3 偏移地址0x288 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PENDRST[95:80] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PENDRST[79:64] 位 名称 访问 描述 复位值 64#-95#中断挂起清除。 [31:0] PENDRST WO 0无影响 0 1当前编号中断清除挂起状态。 V2.4 95

Page 99

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 9.5.2.32 PFIC 中断挂起清除寄存器 4PFIC_IPRR4 偏移地址0x28C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved PENDRST [103:96] 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留。 0 96#-103#中断挂起清除。 [7:0] PENDSET WO 0无影响 0 1当前编号中断清除挂起状态。 9.5.2.33 PFIC 中断激活状态寄存器 1PFIC_IACTR1 偏移地址0x300 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 IACTS [31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IACTS1 IACTS1 IACTS14 IACTS12 Reserved IACTS3 IACTS2 Reserved 5 3 位 名称 访问 描述 复位值 12#-31#中断执行状态13#和15#保留。 [31:12] IACTS RO 0当前编号中断没执行 0 1当前编号中断执行中。 [11:4] Reserved RO 保留。 0 2#-3#中断执行状态。 [3:2] IACTS RO 0当前编号中断没执行 0 1当前编号中断执行中。 [1:0] Reserved RO 保留。 0 9.5.2.34 PFIC 中断激活状态寄存器 2PFIC_IACTR2 偏移地址0x304 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 IACTS[63:48] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IACTS[47:32] 位 名称 访问 描述 复位值 [31:0] IACTS RO 32#-63#中断执行状态。 0 V2.4 96

Page 100

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0当前编号中断没执行 1当前编号中断执行中。 9.5.2.35 PFIC 中断激活状态寄存器 3PFIC_IACTR3 偏移地址0x308 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 IACTS[95:80] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IACTS[79:64] 位 名称 访问 描述 复位值 64#-95#中断执行状态。 [31:0] IACTS RO 0当前编号中断没执行 0 1当前编号中断执行中。 9.5.2.36 PFIC 中断激活状态寄存器 4PFIC_IACTR4 偏移地址0x30C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved IACTS [103:96] 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留。 0 96#-103#中断执行状态。 [7:0] IACTS WO 0当前编号中断没执行 0 1当前编号中断执行中。 9.5.2.37 PFIC 中断优先级配置寄存器PFIC_IPRIORxx=0-63 偏移地址0x4000x4FF 控制器支持256个中断0-255每个中断使用8bit来设置控制优先级。 31 24 23 16 15 8 7 0 IPRIOR63 PRIO_255 PRIO_254 PRIO_253 PRIO_252 … … … … … IPRIORx PRIO_4x+3 PRIO_4x+2 PRIO_4x+1 PRIO_4x … … … … … IPRIOR0 PRIO_3 PRIO_2 PRIO_1 PRIO_0 V2.4 97

Page 101

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 [2047:2040] IP_255 RW 同IP_0描述。 0 … … … … … [31:24] IP_3 RW 同IP_0描述。 0 [23:16] IP_2 RW 同IP_0描述。 0 [15:8] IP_1 RW 同IP_0描述。 0 编号0中断优先级配置 [7:5]:优先级控制位。 若配置无嵌套,无抢占位; 若配置2级嵌套bit7为抢占位 若配置4级嵌套bit7-bit6为抢占位 若配置8级嵌套bit7-bit5为抢占位 优先级数值越小则优先级越高,同一抢 占优先级中断若同时挂起,优先执行优 先级高的中断。 [4:0]保留固定为0写无效。 注适用于青稞V4F内核CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C。 [7:0] IP_0 RW 0 编号0中断优先级配置 [7:5]:优先级控制位。 若配置无嵌套,无抢占位; 若配置2级嵌套bit7为抢占位 优先级数值越小则优先级越高,同一抢 占优先级中断若同时挂起,优先执行优 先级高的中断。 [4:0]保留固定为0写无效。 注:适用于青稞 V4B、V4C 内核: CH32V20x_D6 、 CH32V20x_D8 、 CH32V20x_D8W。 9.5.2.38 PFIC 系统控制寄存器PFIC_SCTLR 偏移地址0xD10 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 SYS Reserved RST 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SET SEV WFITO SLEEP SLEEP Reser Reserved EVENT ONPEND WFE DEEP ONEXIT ved 位 名称 访问 描述 复位值 系统复位自动清0。写1有效写0无 31 SYSRST WO 0 效与PFIC_CFGR寄存器相同效果 [30:6] Reserved RO 保留。 0 V2.4 98

Page 102

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 5 SETEVENT WO 设置事件可以唤醒WFE的情况。 0 当发生事件或者中断挂起状态时,可以 从WFE指令后唤醒系统如果未执行WFE 指令,将在下次执行该指令后立即唤醒 系统。 4 SEVONPEND RW 0 0只有启用的事件和启用的中断可以唤 醒系统; 1启用的事件和所有中断包括未开启 中断)都能唤醒系统。 将WFI指令当成是WFE执行。 3 WFITOWFE RW 0无作用 0 1将之后的WFI指令当做WFE指令。 控制系统的低功耗模式: 2 SLEEPDEEP RW 0 0sleep 1deepsleep 控制离开中断服务程序后,系统状态: 1 SLEEPONEXIT RW 0系统进入主程序 0 1系统进入低功耗模式。 0 Reserved RO 保留。 0 9.5.3 专用 CSR 寄存器 RISC-V 架构中定义了一些控制和状态寄存器Control and Status Register,CSR用于配置 或标识或记录运行状态。CSR 寄存器属于内核内部的寄存器使用专用的12 位地址空间。CH32V20x、 CH32V30x和CH32V31x系列芯片除了RISC-V 特权架构文档中定义的标准寄存器外,还增加了一些厂 商自定义寄存器需要使用csr 指令进行访问。 注此类寄存器标注为“MRW,MRO,MRW1”属性的需要系统在机器模式下才能访问。 9.5.3.1 中断系统控制寄存器INTSYSCR CSR地址0x804 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 GIHWSHWSTKO INEST HWSTK PMTSTA Reserved PMTCFG TKNEN VEN EN EN 位 名称 访问 描述 复位值 [31:16] Reserved MRO 保留。 0 抢占位状态指示: 0x00优先级配置位中无抢占位不发生 中断嵌套; 0x80优先级配置位中最高位为抢占位 [15:8] PMTSTA MRO 0x00 2级中断嵌套 0xC0优先级配置位中高2位为抢占位 4级中断嵌套 0xE0优先级配置位中高3位为抢占位 V2.4 99

Page 103

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 8级中断嵌套。 注:此位仅适用于青稞 V4F 内核: CH32V30x_D8 、 CH32V30x_D8C 、 CH32V31x_D8C。 [7:6] Reserved MRO 保留。 0 全局中断和硬件压栈关闭使能。 注:该位常使用于实时操作系统中,中 断切换上下文时,置位该位,可关闭全 5 GIHWSTKNEN MRW1 0 局中断和硬件压栈出栈,当上下文切换 完成,执行完中断返回后,硬件自动清 除该位。 硬件压栈溢出后中断使能: 0硬件压栈溢出后关闭全局中断 1硬件压栈溢出后中断仍可执行。 注:此位仅适用于 CH32V30x_D8、 4 HWSTKOVEN MRW CH32V30x_D8C、CH32V31x_D8C其硬件压 0 栈深度为3级当配置嵌套等级大于3 级若该位设置1需要将低优先级的三 级中断配置为硬件压栈,高优先级配置 为软件压栈。 中断嵌套深度配置: 00无嵌套抢占位个数为0 012级嵌套抢占位个数为1 104级嵌套抢占位个数为2 [3:2] PMTCFG[1:0] MRW 00b 118级嵌套抢占位个数为3。 注:此位仅适用于青稞 V4F 内核: CH32V30x_D8 、 CH32V30x_D8C 、 CH32V31x_D8C。 中断嵌套使能: 1 INESTEN MRW 0中断嵌套功能关闭 0 1中断嵌套功能使能。 硬件压栈使能: 0 HWSTKEN MRW 0硬件压栈功能关闭 0 1硬件压栈功能使能。 9.5.3.2 异常入口基地址寄存器MTVEC CSR地址0x305 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 BASEADDR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 BASEADDR[15:2] MODE1 MODE0 位 名称 访问 描述 复位值 [31:2] BASEADDR[31:2] MRW 中断向量表基地址。 0 V2.4 100

Page 104

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 中断向量表识别模式: 0按跳转指令识别有限范围支持 1 MODE1 MRW 非跳指令; 0 1按绝对地址识别支持全范围但必 须跳转。 中断或异常入口地址模式选择: 0 MODE0 MRW 0使用统一入口地址 0 1根据中断编号*4进行地址偏移。 9.5.4 物理内存保护单元PMP 为了提高系统安全RISC-V的架构中定义了一套物理地址访问限制可以为区域内物理内存设置 其读、写、执行属性区域长度最小4字节保护。PMP单元在用户模式下一直生效在机器模式下可 选生效如果违背了当前内存限制将会产生系统异常中断EXC。 PMP 单元包含 4 组 8-bit 的配置寄存器32bit和 4 组地址寄存器,需要使用 csr 指令进行访 问,并且在机器模式下进行。 9.5.4.1 PMP 配置寄存器PMPCFG0 CSR地址0x3A0 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 pmp3cfg pmp2cfg 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 pmp1cfg pmp0cfg 位 名称 访问 描述 复位值 [31:24] pmp3cfg MRW 见pmp0cfg。 0 [23:16] pmp2cfg MRW 见pmp0cfg。 0 [15:8] pmp1cfg MRW 见pmp0cfg。 0 位 名称 描述 锁定使能,机器模式下可解锁 7 L 0不锁定 1锁定相关寄存器。 [7:0] pmp0cfg MRW [6:5] - 保留。 0 [4:3] A 地址对齐及保护区域范围选择。 2 X 可执行属性。 1 W 可写入属性。 0 R 可读出属性。 其中,地址对齐及保护区域范围选择,对于 A_ADDR≤regionB_ADDR 区域进行内存保护(要求 A_ADDR和B_ADDR均为4字节对齐 1、如果B_ADDR A_ADDR == 22则采用NA4方式 2、如果B_ADDR A_ADDR == 2G+2G≥1且A_ADDR为2G+2对齐则采用NAPOT方式 3、否则采用TOR方式。 A值 名称 描述 V2.4 101

Page 105

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 00b OFF 没有区域要保护 顶端对齐区域保护: pmp0cfg下0≤ region pmpaddr0 pmp1cfg下pmpaddr0≤ region pmpaddr1 01b TOR pmp2cfg下pmpaddr1≤ region pmpaddr2 pmp3cfg下pmpaddr2≤ region pmpaddr3。 pmpaddr = A_ADDR >> 2 i-1 pmpaddr = B_ADDR >> 2。 i 固定4字节区域保护。 10b NA4 pmp0cfgpmp3cfg对应pmpaddr0pmpaddr3作为起始地址。 pmpaddr = A_ADDR >> 2。 i 保护2G+2区域G≥1此时A_ADDR为2G+2对齐。 11b NAPOT pmpaddr = A_ADDR |2G+2-1& ~1<<G+1>> 2。 i 9.5.4.2 PMP 地址 0 寄存器PMPADDR0 CSR地址0x3B0 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ADDR0[33:18] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADDR0[17:2] 位 名称 访问 描述 复位值 [31:0] ADDR0[31:0] MRW PMP设置地址0的bit[33:2]实际高2位未用。 0 9.5.4.3 PMP 地址 1 寄存器PMPADDR1 CSR地址0x3B1 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ADDR1[33:18] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADDR1[17:2] 位 名称 访问 描述 复位值 [31:0] ADDR1[31:0] MRW PMP设置地址1的bit[33:2]实际高2位未用。 0 9.5.4.4 PMP 地址 2 寄存器PMPADDR2 CSR地址0x3B2 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ADDR2[33:18] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADDR2[17:2] V2.4 102

Page 106

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 [31:0] ADDR2[31:0] MRW PMP设置地址2的bit[33:2]实际高2位未用。 0 9.5.4.5 PMP 地址 3 寄存器PMPADDR3 CSR地址0x3B3 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ADDR3[33:18] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADDR3[17:2] 位 名称 访问 描述 复位值 [31:0] ADDR3[31:0] MRW PMP设置地址3的bit[33:2]实际高2位未用。 0 9.5.5 RISC-V-SysTick 寄存器描述 表9-6 STK相关寄存器列表 名称 访问地址 描述 复位值 R32_STK_CTLR 0xE000F000 系统计数控制寄存器 0x00000000 R32_STK_SR 0xE000F004 系统计数状态寄存器 0x00000000 R32_STK_CNTL 0xE000F008 系统计数器低位寄存器 0x00000000 R32_STK_CNTH 0xE000F00C 系统计数器高位寄存器 0x00000000 R32_STK_CMPLR 0xE000F010 计数比较低位寄存器 0x00000000 R32_STK_CMPHR 0xE000F014 计数比较高位寄存器 0x00000000 注适用于基于32位RISC-V指令集及架构设计的通用微控制器。 9.5.5.1 系统计数控制寄存器STK_CTLR 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 SWIE Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved INIT MODE STRE STCLK STIE STE 位 名称 访问 描述 复位值 软件中断触发使能SWI 0关闭触发 31 SWIE RW 0 1触发软件中断。 进入软件中断后需软件清0否则持续触发。 [30:6] Reserved RO 保留。 0 计数器初始值更新: 0无效 5 INIT W1 0 1向上计数时更新为0向下计数时更新为比 较值。 4 MODE RW 计数模式: 0 V2.4 103

Page 107

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0向上计数 1向下计数。 自动重装载计数使能位: 0向上计数到比较值后继续向上计数向下计 3 STRE RW 数到0后重新从最大值开始向下计数 0 1向上计数到比较值后重新从0开始计数向 下计数到0后重新从比较值开始计数。 计数器时钟源选择位: 2 STCLK RW 0HCLK/8做时基 0 1HCLK做时基 计数器中断使能控制位: 1 STIE RW 0关闭计数器中断 0 1使能计数器中断。 系统计数器使能控制位: 0 STE RW 0关闭系统计数器STK计数器停止计数 0 1启动系统计数器STK。 9.5.5.2 系统计数状态寄存器STK_SR 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved CNTIF 位 名称 访问 描述 复位值 [31:1] Reserved RO 保留 0 计数值比较标志写0清除写1无效 0 CNTIF RW0 0未达到比较值 0 1向上计数达到比较值向下计数到0。 9.5.5.3 系统计数器低位寄存器STK_CNTL 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CNT[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CNT[15:0] 位 名称 访问 描述 复位值 [31:0] CNT[31:0] RW 当前计数器计数值低32位。 0 注寄存器STK_CNTL和寄存器STK_CNTH共同构成了64位系统计数器。 9.5.5.4 系统计数器高位寄存器STK_CNTH V2.4 104

Page 108

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 偏移地址0x0C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CNT[63:48] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CNT[47:32] 位 名称 访问 描述 复位值 [31:0] CNT[63:32] RW 当前计数器计数值高32位。 0 注寄存器STK_CNTL和寄存器STK_CNTH共同构成了64位系统计数器。 9.5.5.5 计数比较低位寄存器STK_CMPLR 偏移地址0x10 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CMP[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CMP[15:0] 位 名称 访问 描述 复位值 [31:0] CMP[31:0] RW 设置比较计数器值低32位。 0 注寄存器STK_CMPLR和寄存器STK_CMPHR共同构成了64位计数器比较值。 9.5.5.6 计数比较高位寄存器STK_CMPHR 偏移地址0x14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CMP[63:48] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CMP[47:32] 位 名称 访问 描述 复位值 [31:0] CMP[63:32] RW 设置比较计数器值高32位。 0 注寄存器STK_CMPLR和寄存器STK_CMPHR共同构成了64位计数器比较值。 9.5.6 ARM-SysTick 寄存器描述 表9-7 SysTick相关寄存器列表 名称 访问地址 描述 复位值 R32_STK_CTRL 0xE000E010 SysTick控制及状态寄存器 0x00000000 R32_STK_LOAD 0xE000E014 SysTick重装载数值寄存器 0x00000000 R32_STK_VAL 0xE000E018 SysTick当前数值寄存器 0x00000000 R32_STK_CALIB 0xE000E01C SysTick校准数值寄存器 0x00000000 注适用于基于ARM○RCortexTM-M3内核设计的通用微控制器 V2.4 105

Page 109

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 9.5.6.1 SysTick 控制及状态寄存器STK_CTRL 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 COUNT Reserved FLAG 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CLKSO TICKI ENABL Reserved URCE NT E 位 名称 访问 描述 复位值 [31:17] Reserved RO 保留。 0 如果在上次读取本寄存器后SysTick 已经数 16 COUNTFLAG RO 到了0则该位为1。如果读取该位该位将自 0 动清零。 [15:3] Reserved RO 保留。 0 0外部时钟源STCLK 2 CLKSOURCE RW 0 1内部时钟FCLK。 0数到0时无动作 1 TICKINT RW 1SysTick 倒数到 0 时产生 SysTick 异常请 0 求。 SysTick定时器的使能位 0 ENABLE RW 0禁止 0 1使能。 9.5.6.2 SysTick 重装载数值寄存器STK_LOAD 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved RELOAD[23:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RELOAD[15:0] 位 名称 访问 描述 复位值 [31:24] Reserved RO 保留。 0 [23:0] RELOAD[23:0] RW 当倒数至零时,将被重装载的值。 0 9.5.6.3 SysTick 当前数值寄存器STK_VAL 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved CURRENT[23:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CURRENT[15:0] V2.4 106

Page 110

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 [31:24] Reserved RO 保留。 0 读取时返回当前倒计数的值,写它则使之清 [23:0] CURRENT RW 零同时还会清除在SysTick控制及状态寄存 0 器中的COUNTFLAG标志。 9.5.6.4 SysTick 校准数值寄存器STK_CALIB 偏移地址0x0C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 NOREF SKEW Reserved TENMS[23:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TENMS[15:0] 位 名称 访问 描述 复位值 0外部参考时钟可用 31 NOREF RO 0 1没有外部参考时钟STCLK不可用。 0校准值是准确的10ms 30 SKEW RO 0 1校准值不是准确的10ms。 [29:24] Reserved RO 保留。 0 10ms的时间内倒计数的格数。芯片设计者应该 [23:0] TENMS RW 通过Cortex-M3的输入信号提供该数值。若该 0 数值读回零,则表示无法使用校准功能。 V2.4 107

Page 111

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 10 章 GPIO 及其复用功能GPIO/AFIO 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 GPIO口可以配置成多种输入或输出模式内置可关闭的上拉或下拉电阻可以配置成推挽或开漏 功能。GPIO口还可以复用成其他功能。 10.1 主要特征 端口的每个引脚可以配置成以下的多种模式之一:  浮空输入  开漏输出  上拉输入  推挽输出  下拉输入  复用功能的输入和输出  模拟输入 许多引脚拥有复用功能,很多其他的外设把自己的输出和输入通道映射到这些引脚上,这些复用 引脚具体用法需要参照各个外设,而对这些引脚是否复用和是否重映射的内容由本章说明。 10.2 功能描述 10.2.1 概述 图10-1 GPIO模块基本结构框图 Analog Input V DD To on-chip peripheral Alternate Function Input on/off oonn//ooffff Read Input data V register DD TTL Schmitt Protection trigger on/off diode Write Bit set/reset Input driver V SS I/O pin registers Output driver V DD Protection diode P-MOS Output data Read/write register O co u n t t p r u o t l V SS N-MOS V SS Push-pull, from on-chip open-drain or peripheral Alternate Function Output disabled 如图 10-1 所示 IO 口结构每个引脚在芯片内部都有两只保护二极管IO 口内部可分为输入和 输出驱动模块。其中输入驱动有弱上下拉电阻可选,可连接到 AD 等模拟输入的外设;如果输入到数 字外设,就需要经过一个 TTL 施密特触发器,再连接到 GPIO 输入寄存器或其他复用外设。而输出驱 动有一对 MOS管可通过配置上下的 MOS 管是否使能来将 IO口配置成开漏或推挽输出输出驱动内 部也可以配置成由GPIO控制输出还是由复用的其他外设控制输出。 10.2.2 GPIO 的初始化功能 刚复位后GPIO口运行在初始状态这时大多数IO口都是运行在浮空输入状态但也有HSE等 外设相关的引脚是运行在外设复用的功能上。具体的初始化功能请参照引脚描述相关的章节。 V2.4 108

Page 112

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 10.2.3 外部中断 所有的 GPIO 口都可以被配置外部中断输入通道,但一个外部中断输入通道最多只能映射到一个 GPIO 引脚上,且外部中断通道的序号必须和 GPIO 端口的位号一致,比如 PA1或 PB1、PC1、PD1、 PE1等只能映射到EXTI1上且EXTI1只能接受PA1、PB1、PC1、PD1或PE1等其中之一的映射两 方都是一对一的关系。 10.2.4 复用功能 使用复用功能必须要注意:  使用输入方向的复用功能,端口必须配置成复用输入模式,上下拉设置可根据实际需要来设置  使用输出方向的复用功能,端口必须配置成复用输出模式,推挽或开漏可根据实际情况设置  对于双向的复用功能,端口必须配置成复用输出模式,这时驱动器被配置成浮空输入模式 同一个 IO 口可能有多个外设复用到此管脚,因此为了使各个外设都有最大的发挥空间,外设的 复用引脚除了默认复用引脚,还可以进行重映射,重映射到其他的引脚,避开被占用的引脚。 10.2.5 锁定机制 锁定机制可以锁定IO口的配置。经过特定的一个写序列后选定的IO引脚配置将被锁定在下 一个复位前无法更改。 10.2.6 输入配置 图10-2 GPIO模块输入配置结构框图 VDD on/off on Read Input data register VDD TTL Schmitt Protection trigger on/off diode Write Bit se/treset Input driver VSS I/O pin registers Protection diode Read/write Output data VSS register from on-chip peripheral Output driver 当 IO 口配置成输入模式时,输出驱动断开,输入上下拉可选,不连接复用功能和模拟输入。在 每个 IO 口上的数据在每个 PB2 时钟被采样到输入数据寄存器,读取输入数据寄存器对应位即获取了 对应引脚的电平状态。 V2.4 109

Page 113

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 10.2.7 输出配置 图10-3 GPIO模块输出配置结构框图 on Read Input data V register DD TTL Schmitt Protection trigger diode Write Bit set/reset Input driver I/O pin registers Output driver V DD Protection diode P-MOS Output data Output V SS Read/write register control N-MOS V SS Push-pull, open-drain or disabled 当 IO 口配置成输出模式时,输出驱动器中的一对 MOS 可根据需要被配置成推挽或开漏模式,不 使用复用功能。输入驱动的上下拉电阻被禁用TTL施密特触发器被激活出现在IO引脚上的电平将 会在每个 PB2 时钟被采样到输入数据寄存器,所以读取输入数据寄存器将会得到 IO 状态,在推挽输 出模式时,对输出数据寄存器的访问就会得到最后一次写入的值。 10.2.8 复用功能配置 图10-4 GPIO模块被其他外设复用时的结构框图 To on-chip Alternate Function Input peripheral on Read Input data V register DD TTL Schmitt Protection trigger diode Write Bit set/reset Input driver I/O pin registers Output driver V DD Protection diode Output data P-MOS Read/write register O co u n t t p r u o t l V SS N-MOS V SS Push-pull, from on-chip open-drain or Alternate Function Output peripheral disabled 在启用复用功能时,输出驱动器被使能,可以按需要被配置成开漏或推挽模式,施密特触发器也 被打开,复用功能的输入和输出线都被连接,但是输出数据寄存器被断开,出现在 IO 引脚上的电平 将会在每个 PB2 时钟被采样到输入数据寄存器,在开漏模式下,读取输入数据寄存器将会得到 IO 口 当前状态;在推挽模式下,读取输出数据寄存器将会得到最后一次写入的值。 V2.4 110

Page 114

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 10.2.9 模拟输入配置 图10-5 GPIO模块作为模拟输入时的配置结构框图 To on-chip Analog Input peripheral off Read Input data 0 V register DD TTL Schmitt Protection trigger diode Write Bit set/reset Input driver I/O pin registers Output driver Protection diode Output data V Read/write SS register Push-pull, open-drain or disabled 在启用模拟输入时,输出缓冲器被断开,输入驱动中施密特触发器的输入被禁止以防止产生 IO 口上的消耗上下拉电阻被禁止读取输入数据寄存器将一直为0。 10.2.10 外设的 GPIO 设置 下列表格推荐了各个外设的引脚相应的GPIO口配置。 表10-1 高级定时器TIM1/8/9/10 TIM1/8/9/10 配置 GPIO配置 输入捕获通道x 浮空输入 TIM1/8/9/10_CHx 输出比较通道x 推挽复用输出 TIM1/8/9/10_CHxN 互补输出通道x 推挽复用输出 TIM1/8/9/10_BKIN 刹车输入 浮空输入 TIM1/8/9/10_ETR 外部触发时钟输入 浮空输入 表10-2 通用定时器TIM2/3/4/5 TIM2/3/4/5引脚 配置 GPIO配置 输入捕获通道x 浮空输入 TIM2/3/4/5_CHx 输出比较通道x 推挽复用输出 TIM2/3/4/5_ETR 外部触发时钟输入 浮空输入 表10-3 通用同步异步串行收发器USART USART引脚 配置 GPIO配置 全双工模式 推挽复用输出 USARTx_TX 半双工同步模式 开漏复用输出 全双工模式 浮空输入或带上拉输入 USARTx_RX 半双工同步模式 未使用 USARTx_CK 同步模式 推挽复用输出 USARTx_RTS 硬件流量控制 推挽复用输出 USARTx_CTS 硬件流量控制 浮空输入或带上拉输入 V2.4 111

Page 115

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 表10-4 串行外设接口SPI模块 SPI引脚 配置 GPIO配置 主模式 推挽复用输出 SPIx_SCK 从模式 浮空输入 全双工主模式 推挽复用输出 全双工从模式 浮空输入或带上拉输入 SPIx_MOSI 简单的双向数据线/主模式 推挽复用输出 简单的双向数据线/从模式 未使用 全双工主模式 浮空输入或带上拉输入 全双工从模式 推挽复用输出 SPIx_MISO 简单的双向数据线/主模式 未使用 简单的双向数据线/从模式 推挽复用输出 硬件主或从模式 浮空、上拉或下拉输入 SPIx_NSS 硬件主模式/NSS输出使能 推挽复用输出 软件模式 未使用 表10-5 内置音频总线I2S模块 I2S引脚 配置 GPIO配置 主模式 推挽复用输出 I2Sx_WS 从模式 浮空输入 主模式 推挽复用输出 I2Sx_CK 从模式 浮空输入 发送器 推挽复用输出 I2Sx_SD 接收器 浮空、上拉或下拉输入 主模式 推挽复用输出 I2Sx_MCK 从模式 未使用 表10-6 内部集成总线I2C模块 I2C引脚 配置 GPIO配置 I2C_SCL I2C时钟 开漏复用输出 I2C_SDA I2C数据 开漏复用输出 表10-7 控制器局域网CAN模块 CAN引脚 GPIO配置 CANx_TX 推挽复用输出 CANx_RX 浮空输入或上拉输入 表10-8 USB全速设备USBD控制器 USBD引脚 GPIO配置 USBD_DM/USBD_DP 使能了USB模块之后复用IO口会自动连接到内部USBD收发器 表10-9 USB主机设备USBFS控制器 USBFS引脚 GPIO配置 USBFS_DM/USBFS_DP 使能了USB模块之后复用IO口会自动连接到内部USBFS收发 V2.4 112

Page 116

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 器 表10-10 USB OTG_FS控制器 USB OTG_FS引脚 GPIO配置 OTG_FS_VBUS 模拟输入 OTG_FS_ID 上拉输入 OTG_FS_DM 由USB断电自动控制 OTG_FS_DP 由USB断电自动控制 表10-11 安全数字输入输出SDIO模块 SDIO引脚 配置 GPIO配置 SDIO_CK 时钟 推挽复用输出 SDIO_CMD 命令 推挽复用输出 SDIO[D7:D0] 数据 推挽复用输出 表10-12 直接存储器访问控制FSMC控制器 FSMC引脚 GPIO配置 FSMC_A[23:16] 推挽复用输出 FSMC_D[15:0] FSMC_CK 推挽复用输出 FSMC_NOE 推挽复用输出 FSMC_NWE FSMC_NE1 推挽复用输出 FSMC_NCE2 FSMC_NWAIT 浮空输入或带上拉输入 FSMC_NBL[1:0] 推挽复用输出 表10-13 模拟转数字转换器ADC及数字转模拟转换器DAC ADC/DAC引脚 GPIO配置 ADC/DAC 模拟输入 表10-14 其他的IO功能设置 引脚 配置功能 GPIO配置 RTC输出 TAMPER_RTC 硬件自动设置 侵入事件输入 MCO 时钟输出 推挽复用输出 EXTI 外部中断输入 浮空、上拉或下拉输入 10.2.11 复用功能重映射 GPIO 设置 10.2.11.1 OSC32_IN/OSC32_OUT 作为 GPIO 端口 PC14/PC15 当LSEON=0时LSE振荡器引脚OSC32_IN/OSC32_OUT可以分别用做GPIO的PC14/PC15。 当LSEON=1时作为LSE引脚。 10.2.11.2 OSC_IN/OSC_OUT 引脚作为 GPIO 端口 PD0/PD1 V2.4 113

Page 117

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn OSC_IN/OSC_OUT可以用做GPIO的PD0/PD1通过设置重映射寄存器1AFIO_PCFR1实现。 这个重映射适用于 CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C、CH32F20x_D6、CH32F20x_D8、 CH32F20x_D8C系列芯片但对于LQFP100封装由于PD0和PD1为固有的功能引脚因此没有必要再 由软件进行重映射设置。 这个重映射对于CH32V20x_D6系列芯片只适用于CH32V203CxT6、CH32V203CxU6、CH32V203K8T6、 CH32V203G6U6、CH32V203F6P6芯片对于CH32V20x_D8系列芯片CH32V203RBT6只有OSC_IN和OSC_OUT 功能脚,不支持映射。 注批号倒数第五位小于4且倒数第六位等于0的CH32V307RCH32V305RCH32V305GCH32V305F CH32V303CCH32V303RCH32F205RCH32F203RCH32F203C芯片PD0、PD1做普通引脚时外部中 断/事件功能没有被映射,不能用来产生外部中断/事件。 10.2.11.3 定时器复用功能重映射 表10-15 TIM1复用功能重映射 TIM1_RM=00 TIM1_RM=01 TIM1_RM=11 复用功能 默认映射 部分映射 完全映射1 TIM1_ETR PA12 PA12 PE7 TIM1_CH1 PA8 PA8 PE9 TIM1_CH2 PA9 PA9 PE11 TIM1_CH3 PA10 PA10 PE13 TIM1_CH4 PA11 PA11 PE14 TIM1_BKIN PB12 PA6 PE15 TIM1_CH1N PB13 PA7 PE8 TIM1_CH2N PB14 PB0 PE10 TIM1_CH3N PB15 PB1 PE12 注1仅LQFP100封装支持该位重映射功能。 表10-16 TIM2复用功能重映射 TIM2_RM=00 TIM2_RM=01 TIM2_RM=10 TIM2_RM=11 复用功能 默认映射 部分映射 部分映射 完全映射 TIM2_ETR PA0 PA15 PA0 PA15 TIM2_CH1 PA0 PA15 PA0 PA15 TIM2_CH2 PA1 PB3 PA1 PB3 TIM2_CH3 PA2 PA2 PB10 PB10 TIM2_CH4 PA3 PA3 PB11 PB11 表10-17 TIM3复用功能重映射 TIM3_RM=00 TIM3_RM=10 TIM3_RM=11 复用功能 默认映射 部分映射 完全映射1 TIM3_CH1 PA6 PB4 PC6 TIM3_CH2 PA7 PB5 PC7 TIM3_CH3 PB0 PB0 PC8 TIM3_CH4 PB1 PB1 PC9 注164脚以下封装不支持该位映射。 V2.4 114

Page 118

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 表10-18 TIM4复用功能重映射 TIM4_RM=0 TIM4_RM=1 复用功能 默认映射 重映射1 TIM4_CH1 PB6 PD12 TIM4_CH2 PB7 PD13 TIM4_CH3 PB8 PD14 TIM4_CH4 PB9 PD15 注1仅LQFP100封装支持该位重映射功能。 表10-19 TIM5复用功能重映射 TIM5CH4_RM=0 TIM5CH4_RM=1 复用功能 默认映射 重映射 TIM5_CH4 PA3 LSI内部时钟 表10-20 TIM8复用功能重映射 TIM8_RM=0 TIM8_RM=1 复用功能 默认映射 重映射 TIM8_ETR PA0 PA0 TIM8_CH1 PC6 PB6 TIM8_CH2 PC7 PB7 TIM8_CH3 PC8 PB8 TIM8_CH4 PC9 PC13 TIM8_BKIN PA6 PB9 TIM8_CH1N PA7 PA13 TIM8_CH2N PB0 PA14 TIM8_CH3N PB1 PA15 表10-21 TIM9复用功能重映射 TIM9_RM=00 TIM9_RM=01 TIM9_RM=1x 复用功能 默认映射 部分映射 完全映射1 TIM9_ETR PA2 PA2 PD9 TIM9_CH1 PA2 PA2 PD9 TIM9_CH2 PA3 PA3 PD11 TIM9_CH3 PA4 PA4 PD13 TIM9_CH4 PC4 PC14 PD15 TIM9_BKIN PC5 PA1 PD14 TIM9_CH1N PC0 PB0 PD8 TIM9_CH2N PC1 PB1 PD10 TIM9_CH3N PC2 PB2 PD12 注1仅LQFP100封装支持该位重映射功能。 表10-22 TIM10复用功能重映射 TIM10_RM=00 TIM10_RM=01 TIM10_RM=1x 复用功能 默认映射 部分映射 完全映射1 V2.4 115

Page 119

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn TIM10_ETR PC10 PB11 PD0 TIM10_CH1 PB8 PB3 PD1 TIM10_CH2 PB9 PB4 PD3 TIM10_CH3 PC3 PB5 PD5 TIM10_CH4 PC11 PC15 PD7 TIM10_BKIN PC12 PB10 PE2 TIM10_CH1N PA12 PA5 PE3 TIM10_CH2N PA13 PA6 PE4 TIM10_CH3N PA14 PA7 PE5 注1仅LQFP100封装支持该位重映射功能。 10.2.11.4 USART 复用功能重映射 表10-23 USART1复用功能重映射 USART1_RM1=01 USART1_RM1=11 USART1_RM1=01 USART1_RM1=11 复用功能 USART1_RM2=02 USART1_RM2=02 USART1_RM2=12 USART1_RM2=12 默认映射 重映射 重映射 重映射 USART1_CK PA8 PA8 PA10 PA5 USART1_TX PA9 PB6 PB15 PA6 USART1_RX PA10 PB7 PA8 PA7 USART1_CTS PA11 PA11 PA5 PC4 USART1_RTS PA12 PA12 PA9 PC5 注1USART1_RM1为AFIO_PCFR1 寄存器 bit2为映射配置低位。 2USART1_RM2为AFIO_PCFR2 寄存器 bit26为映射配置高位CH32V20x_D6、CH32F20x_D6不 支持该位映射。 表10-24 USART2复用功能重映射 USART2_RM=0 USART2_RM=1 复用功能 默认映射 重映射1 USART2_CTS PA0 PD3 USART2_RTS PA1 PD4 USART2_TX PA2 PD5 USART2_RX PA3 PD6 USART2_CK PA4 PD7 表10-25 USART3复用功能重映射 USART3_RM=00 USART3_RM=01 USART3_RM=10 USART3_RM=11 复用功能 默认映射 部分映射1 部分映射2 完全映射3 USART3_TX PB10 PC10 PA13 PD8 USART3_RX PB11 PC11 PA14 PD9 USART3_CK PB12 PC12 PD10 PD10 USART3_CTS PB13 PB13 PD11 PD11 USART3_RTS PB14 PB14 PD12 PD12 注148脚以下封装不支持该位映射。 2只适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C系列芯片 V2.4 116

Page 120

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 批号倒数第五位等于大于2或批号倒数第六位不等于0。 3仅LQFP100封装支持该位重映射功能。 表10-26 USART4复用功能重映射 USART4_RM=00 USART4_RM=01 USART4_RM=1x 复用功能1 默认映射 重映射 重映射2 USART4_TX PC10 PB0 PE0 USART4_RX PC11 PB1 PE1 注1适用于CH32V30x_D8C、CH32V31x_D8C、CH32V30x_D8、CH32V30x_D8W、CH32V20x_D8、CH32F20x_D8C、 CH32F20x_D8、CH32F20x_D8W。 2仅LQFP100封装支持该位重映射功能。 表10-27 USART4复用功能重映射1 USART4_RM=x0 USART4_RM=x1 复用功能 默认映射 重映射 USART4_CK PB2 PA6 USART4_TX PB0 PA5 USART4_RX PB1 PB5 USART4_CTS PB3 PA7 USART4_RTS PB4 PA15 注1该功能仅支持CH32V203C8、CH32F203C8和64引脚及以上产品。 表10-28 USART5复用功能重映射2 USART5_RM=00 USART5_RM=01 USART5_RM=1x 复用功能 默认映射 重映射 重映射1 USART5_TX PC12 PB4 PE8 USART5_RX PD2 PB5 PE9 注1仅LQFP100封装支持该位重映射功能。 2该功能不支持64引脚以下产品。 表10-29 USART6复用功能重映射2 USART6_RM=00 USART6_RM=01 USART6_RM=1x 复用功能 默认映射2 重映射 重映射1 USART6_TX PC0 PB8 PE10 USART6_RX PC1 PB9 PE11 注1仅LQFP100封装支持该位重映射功能。 2该功能不支持64引脚以下产品。 表10-30 USART7复用功能重映射2 USART7_RM=00 USART7_RM=01 USART7_RM=1x 复用功能 默认映射 重映射 重映射1 USART7_TX PC2 PA6 PE12 USART7_RX PC3 PA7 PE13 注1仅LQFP100封装支持该位重映射功能。 V2.4 117

Page 121

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 2该功能不支持64引脚以下产品。 表10-31 USART8复用功能重映射2 USART8_RM=00 USART8_RM=01 USART8_RM=1x 复用功能 默认映射 重映射 重映射1 USART8_TX PC4 PA14 PE14 USART8_RX PC5 PA15 PE15 注1仅LQFP100封装支持该位重映射功能。 2该功能不支持64引脚以下产品。 10.2.11.5 SPI 复用功能重映射 表10-32 SPI1复用功能重映射 SPI1_RM=0 SPI1_RM=1 复用功能 默认映射 重映射 SPI1_NSS PA4 PA15 SPI1_SCK PA5 PB3 SPI1_MISO PA6 PB4 SPI1_MOSI PA7 PB5 表10-33 SPI3/I2S3复用功能重映射 SPI3_RM=0 SPI3_RM=1 复用功能 默认映射 重映射 SPI3_NSS PA15 PA4 SPI3_SCK PB3 PC10 SPI3_MISO PB4 PC11 SPI3_MOSI PB5 PC12 I2S3_RM=0 I2S3_RM=1 复用功能 默认映射 重映射 I2S3_WS PA15 PA4 I2S3_CK PB3 PC10 I2S3_MCK PC7 PC7 I2S3_SD PB5 PC12 10.2.11.6 I2C 复用功能重映射 表10-34 I2C1复用功能重映射 I2C1_RM=0 I2C1_RM=1 复用功能 默认映射 重映射 I2C1_SCL PB6 PB8 I2C1_SDA PB7 PB9 V2.4 118

Page 122

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 10.2.11.7 CAN 复用功能重映射 表10-35 CAN1复用功能重映射 CAN1_RM=00 CAN1_RM=10 CAN1_RM=11 复用功能 默认映射 重映射 重映射 CAN1_RX PA11 PB8 PD0 CAN1_TX PA12 PB9 PD1 表10-36 CAN2复用功能重映射 CAN2_RM=0 CAN2_RM=1 复用功能 默认映射 重映射 CAN2_RX PB12 PB5 CAN2_TX PB13 PB6 10.2.11.8 ADC 复用功能重映射 表10-37 ADC1外部触发注入转换复用功能重映射 ADC1_ETRGINJ_RM=0 ADC1_ETRGINJ_RM=1 复用功能 默认映射 重映射 ADC1外部触发注入转换与 ADC1外部触发注入转换与 ADC1外部触发注入转换 EXTI15相连 TIM8_CH4相连 表10-38 ADC1外部触发规则转换复用功能重映射 ADC1_ETRGREG_RM=0 ADC1_ETRGREG_RM=1 复用功能 默认映射 重映射 ADC1外部触发规则转换与 ADC1外部触发规则转换与 ADC1外部触发规则转换 EXTI11相连 TIM8_TRGO相连 表10-39 ADC2外部触发注入转换复用功能重映射 ADC2_ETRGINJ_RM=0 ADC2_ETRGINJ_RM=1 复用功能 默认映射 重映射 ADC2外部触发注入转换与 ADC2外部触发注入转换与 ADC2外部触发注入转换 EXTI15相连 TIM8_CH4相连 表10-40 ADC2外部触发规则转换复用功能重映射 ADC2_ETRGREG_RM=0 ADC2_ETRGREG_RM=1 复用功能 默认映射 重映射 ADC2外部触发规则转换与 ADC2外部触发规则转换与 ADC2外部触发规则转换 EXTI11相连 TIM8_TRGO相连 注ADC1重映射只支持存在TIM8的产品详细信息见相关数据手册。 10.2.11.9 ETH 复用功能重映射 表10-41 ETH复用功能重映射 ETH_RM=0 ETH_RM=1 复用功能1 默认映射 重映射1 ETH_RX_DV PA7 PD8 V2.4 119

Page 123

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn ETH_CRS_DV PA7 PD8 ETH_RXD0 PC4 PD9 ETH_RXD1 PC5 PD10 ETH_RXD2 PB0 PD11 ETH_RXD3 PB1 PD12 注1仅LQFP100封装互联型支持该位重映射功能。 10.2.11.10 FSMC_NADV 复用功能重映射2 表10-42 FSMC_NADV复用功能重映射 FSMCEN=1 FSMCEN=1&USBHSEN=1 复用功能1 默认映射 &RB_UC_RST_SIE=0 FSMC_NADV PB7 PD2 注1当FSMC_NADV=1时禁止FSMC_NADV输出。 2批号倒数第五位小于2且批号倒数第六位等于0的不支持该功能。 10.2.11.11 DVP 复用功能重映射1 表10-43 DVP复用功能重映射 DVPEN=1 DVPEN=1&USBHSEN=1 复用功能 默认映射 &RB_UC_RST_SIE=0 DVP_D5 PB6 PB3 注1批号倒数第五位小于2且批号倒数第六位等于0的不支持该功能。 10.2.11.12 SDIO 复用功能重映射1 表10-44 SDIO复用功能重映射 复用功能 SDIOEN=1 SDIOEN=1&ETHMACEN=1 SDCK PC12 PC12 CMD PD2 PD2 SD0 PC8 PB14 SD1 PC9 PB15 SD2 PC10 PC10 SD3 PC11 PC11 SD4 PB8 PB8 SD5 PB9 PB9 SD6 PC6 PC6 SD7 PC7 PC7 注1批号倒数第五位小于2且批号倒数第六位等于0的不支持该功能。 10.2.11.13 SPI3/I2S3 复用功能重映射1 表10-45 SPI3复用功能重映射 复用功能 SPI3EN=1 SPI3EN=1&ETHMACEN=13 SPI3_NSS PA15 无效2 V2.4 120

Page 124

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn SPI3_SCK PB3 PB3 SPI3_MISO PB4 PB4 SPI3_MOSI PB5 PA15 注1批号第五位等于2且倒数第六位等于0的才支持该功能。 2SPI3_NSS不支持硬件功能。 3SPI3EN=1&ETHMACEN=1时I2S3禁用。 10.2.11.14 SPI3/I2S3 复用功能重映射1 表10-46 I2S3复用功能重映射 复用功能 SPI3EN=1 I2SMOD=1&ETH10M=12 I2S3_WS PA15 PA15 I2S3_CK PB3 PB3 I2S3_MCK PC7 PA8 I2S3_SD PB5 PA9 注1仅批号第五位大于2或倒数第六位不等于0的支持该功能。 2SPI_I2S_CFGR寄存器的I2SMOD位置1时选择I2S模式EXTEN_CTR寄存器的ETH10M位置 1时启用10M以太网功能并使能时钟。 10.3 寄存器描述 10.3.1 GPIO 的寄存器描述 除非特殊说明GPIO的寄存器必须以字的方式操作以32位来操作这些寄存器。 表10-47 GPIO相关寄存器列表 名称 访问地址 描述 复位值 R32_GPIOA_CFGLR 0x40010800 PA端口配置寄存器低位 0x44444444 R32_GPIOB_CFGLR 0x40010C00 PB端口配置寄存器低位 0x44444444 R32_GPIOC_CFGLR 0x40011000 PC端口配置寄存器低位 0x44444444 R32_GPIOD_CFGLR 0x40011400 PD端口配置寄存器低位 0x44444444 R32_GPIOE_CFGLR 0x40011800 PE端口配置寄存器低位 0x44444444 R32_GPIOA_CFGHR 0x40010804 PA端口配置寄存器高位 0x44444444 R32_GPIOB_CFGHR 0x40010C04 PB端口配置寄存器高位 0x44444444 R32_GPIOC_CFGHR 0x40011004 PC端口配置寄存器高位 0x44444444 R32_GPIOD_CFGHR 0x40011404 PD端口配置寄存器高位 0x44444444 R32_GPIOE_CFGHR 0x40011804 PE端口配置寄存器高位 0x44444444 R32_GPIOA_INDR 0x40010808 PA端口输入数据寄存器 0x0000XXXX R32_GPIOB_INDR 0x40010C08 PB端口输入数据寄存器 0x0000XXXX R32_GPIOC_INDR 0x40011008 PC端口输入数据寄存器 0x0000XXXX R32_GPIOD_INDR 0x40011408 PD端口输入数据寄存器 0x0000XXXX R32_GPIOE_INDR 0x40011808 PE端口输入数据寄存器 0x0000XXXX R32_GPIOA_OUTDR 0x4001080C PA端口输出数据寄存器 0x00000000 R32_GPIOB_OUTDR 0x40010C0C PB端口输出数据寄存器 0x00000000 R32_GPIOC_OUTDR 0x4001100C PC端口输出数据寄存器 0x00000000 R32_GPIOD_OUTDR 0x4001140C PD端口输出数据寄存器 0x00000000 R32_GPIOE_OUTDR 0x4001180C PE端口输出数据寄存器 0x00000000 V2.4 121

Page 125

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R32_GPIOA_BSHR 0x40010810 PA端口置位/复位寄存器 0x00000000 R32_GPIOB_BSHR 0x40010C10 PB端口置位/复位寄存器 0x00000000 R32_GPIOC_BSHR 0x40011010 PC端口置位/复位寄存器 0x00000000 R32_GPIOD_BSHR 0x40011410 PD端口置位/复位寄存器 0x00000000 R32_GPIOE_BSHR 0x40011810 PE端口置位/复位寄存器 0x00000000 R32_GPIOA_BCR 0x40010814 PA端口复位寄存器 0x00000000 R32_GPIOB_BCR 0x40010C14 PB端口复位寄存器 0x00000000 R32_GPIOC_BCR 0x40011014 PC端口复位寄存器 0x00000000 R32_GPIOD_BCR 0x40011414 PD端口复位寄存器 0x00000000 R32_GPIOE_BCR 0x40011814 PE端口复位寄存器 0x00000000 R32_GPIOA_LCKR 0x40010818 PA端口锁定配置寄存器 0x00000000 R32_GPIOB_LCKR 0x40010C18 PB端口锁定配置寄存器 0x00000000 R32_GPIOC_LCKR 0x40011018 PC端口锁定配置寄存器 0x00000000 R32_GPIOD_LCKR 0x40011418 PD端口锁定配置寄存器 0x00000000 R32_GPIOE_LCKR 0x40011818 PE端口锁定配置寄存器 0x00000000 10.3.1.1 GPIO 配置寄存器低位GPIOx_CFGLRx=A/B/C/D/E 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CNF7[1:0] MODE7[1:0] CNF6[1:0] MODE6[1:0] CNF5[1:0] MODE5[1:0] CNF4[1:0] MODE4[1:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CNF3[1:0] MODE3[1:0] CNF2[1:0] MODE2[1:0] CNF1[1:0] MODE1[1:0] CNF0[1:0] MODE0[1:0] 位 名称 访问 描述 复位值 y=0-7端口x的配置位通过这些位配置 相应的端口。 [31:30] 在输入模式时MODE=00b [27:26] 00模拟输入模式 [23:22] 01浮空输入模式 [19:18] 10带有上下拉模式。 CNFy[1:0] RW 01b [15:14] 11保留。 [11:10] 在输出模式MODE>00b [7:6] 00通用推挽输出模式 [3:2] 01通用开漏输出模式 10复用功能推挽输出模式 11复用功能开漏输出模式。 [29:28] [25:24] y=0-7端口x模式选择通过这些位配置 [21:20] 相应的端口。 [17:16] 00输入模式 MODEy[1:0] RW 00b [13:12] 01输出模式最大速度10MHz [9:8] 10输出模式最大速度2MHz [5:4] 11输出模式最大速度50MHz。 [1:0] V2.4 122

Page 126

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 10.3.1.2 GPIO 配置寄存器高位GPIOx_CFGHRx=A/B/C/D/E 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CNF15[1:0] MODE15[1:0] CNF14[1:0] MODE14[1:0] CNF13[1:0] MODE13[1:0] CNF12[1:0] MODE12[1:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CNF11[1:0] MODE11[1:0] CNF10[1:0] MODE10[1:0] CNF9[1:0] MODE9[1:0] CNF8[1:0] MODE8[1:0] 位 名称 访问 描述 复位值 y=8-15端口x的配置位通过这些位配 置相应的端口。 [31:30] 在输入模式时MODE=00b [27:26] 00模拟输入模式 [23:22] 01浮空输入模式 [19:18] 10带有上下拉模式。 CNFy[1:0] RW 01b [15:14] 11保留。 [11:10] 在输出模式MODE>00b [7:6] 00通用推挽输出模式 [3:2] 01通用开漏输出模式 10复用功能推挽输出模式 11复用功能开漏输出模式。 [29:28] [25:24] y=8-15端口x的模式位通过这些位配 [21:20] 置相应的端口。 [17:16] 00输入模式 MODEy[1:0] RW 00b [13:12] 01输出模式最大速度10MHz [9:8] 10输出模式最大速度2MHz [5:4] 11输出模式最大速度50MHz。 [1:0] 10.3.1.3 端口输入寄存器GPIOx_INDRx=A/B/C/D/E 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IDR15 IDR14 IDR13 IDR12 IDR11 IDR10 IDR9 IDR8 IDR7 IDR6 IDR5 IDR4 IDR3 IDR2 IDR1 IDR0 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 y=0-15端口输入数据。这些位只读并只 [15:0] IDRy RO 能以 16 位形式读出。读出的值就是对应位的 X 高低状态。 V2.4 123

Page 127

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 10.3.1.4 端口输出寄存器GPIOx_OUTDRx=A/B/C/D/E 偏移地址0x0C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ODR15 ODR14 ODR13 ODR12 ODR11 ODR10 ODR9 ODR8 ODR7 ODR6 ODR5 ODR4 ODR3 ODR2 ODR1 ODR0 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 对于输出模式: y=0-15端口输出的数据。这些数据只能 以 16 位的形式操作。IO 口对外输出这些寄存 [15:0] ODRy RW 器的值。 0 对于带有上下拉的输入模式: 0下拉输入 1上拉输入。 10.3.1.5 端口复位/置位寄存器GPIOx_BSHRx=A/B/C/D/E 偏移地址0x10 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 BR15 BR14 BR13 BR12 BR11 BR10 BR9 BR8 BR7 BR6 BR5 BR4 BR3 BR2 BR1 BR0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 BS15 BS14 BS13 BS12 BS11 BS10 BS9 BS8 BS7 BS6 BS5 BS4 BS3 BS2 BS1 BS0 位 名称 访问 描述 复位值 y=0-15对这些位置位会清除对应的OUTDR 位写0不产生影响。这些位只能以16位的形 [31:16] BRy WO 0 式访问。如果同时设置了BR和BS位则BS位 起作用。 y=0-15对这些位置位会使对应的 OUTDR 位置位写0不产生影响。这些位只能以16位 [15:0] BSy WO 0 的形式访问。如果同时设置了BR和BS位则 BS位起作用。 10.3.1.6 端口复位寄存器GPIOx_BCRx=A/B/C/D/E 偏移地址0x14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 BR15 BR14 BR13 BR12 BR11 BR10 BR9 BR8 BR7 BR6 BR5 BR4 BR3 BR2 BR1 BR0 位 名称 访问 描述 复位值 V2.4 124

Page 128

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [31:16] Reserved RO 保留。 0 y=0-15对这些位置位会清除对应的OUTDR [15:0] BRy WO 位写0不产生影响。这些位只能以16位的形 0 式访问。 10.3.1.7 配置锁定寄存器GPIOx_LCKRx=A/B/C/D/E 偏移地址0x18 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved LCKK 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 LCK15 LCK14 LCK13 LCK12 LCK11 LCK10 LCK9 LCK8 LCK7 LCK6 LCK5 LCK4 LCK3 LCK2 LCK1 LCK0 位 名称 访问 描述 复位值 [31:17] Reserved RO 保留 0 锁定键,它可以通过特定的序列写入实现锁 定但它可以随时读出。它读出为0时表示未 锁定生效读出1时表示锁定生效。 锁定键的写入序列为写1-写0-写1-读0-读 1最后一步非必要但是可以用以确认锁定键 16 LCKK RW 0 已经激活。 在写入序列时任何错误都不会使激活锁定,且 在写入序列时,不能更改 LCK[15:0]的值。锁 定生效后,只有在下次复位后才能更改端口的 配置。 y=0-15这些位为1时表示锁定对应端口 的配置。只能在LCKK未锁定前改变这些位。锁 [15:0] LCKy RW 0 定的配置指的是配置寄存器 GPIOx_CFGLR 和 GPIOx_CFGHR。 注当对相应的端口位执行了LOCK序列后在下次系统复位之前将不能再更改端口位的配置。 10.3.2 AFIO 寄存器 除非特殊说明AFIO的寄存器必须以字的方式操作以32位来操作这些寄存器。 表10-48 AFIO相关寄存器列表 名称 访问地址 描述 复位值 R32_AFIO_ECR 0x40010000 事件控制寄存器 0x00000000 R32_AFIO_PCFR1 0x40010004 重映射寄存器1 0x00000000 R32_AFIO_EXTICR1 0x40010008 外部中断配置寄存器1 0x00000000 R32_AFIO_EXTICR2 0x4001000C 外部中断配置寄存器2 0x00000000 R32_AFIO_EXTICR3 0x40010010 外部中断配置寄存器3 0x00000000 R32_AFIO_EXTICR4 0x40010014 外部中断配置寄存器4 0x00000000 R32_AFIO_PCFR2 0x4001001C 重映射寄存器2 0x00000000 10.3.2.1 事件控制寄存器AFIO_ECR 偏移地址0x00 V2.4 125

Page 129

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved EVOE PORT[2:0] PIN[3:0] 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留。 0 允许事件输出位,对该位置位会使内核的 7 EVOE RW 0 EVENTOUT连接到PORT和PIN选定的IO口。 用于选择内核输出EVENTOUT的端口 000选择PA口 001选择PB口 [6:4] PORT[2:0] RW 000b 010选择PC口 011选择PD口 其他:保留。 此位的值用来确定选择内核输出 EVENTOUT 到 [3:0] PIN[3:0] RW 端口的具体引脚号值0-15分别对应PORT中 0 选定的Px的第0-15号引脚。 10.3.2.2 重映射寄存器 1AFIO_PCFR1 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PTP_ TIM2 MII_R ADC2_ ADC2_ ADC1_ ADC1_ Rese SPI3 Rese CAN2_ ETH_ TIM5C PPS_ ITR1 SW_CFG[2:0] MII_ ETRGR ETRGI ETRGR ETRGI rved _RM rved RM RM H4_RM RM _RM SEL EG_RM NJ_RM EG_RM NJ_RM 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PDPD CAN1_RM TIM4 TIM3_RM TIM2_RM] TIM1_RM] USART3_RM USART2 USART1 I2C1 SPI1 1 [1:0] _RM [1:0] [1:0] [1:0] [1:0] _RM _RM _RM _RM _RM 位 名称 访问 描述 复位值 31 Reserved RO 保留。 0 以太网的PTP PPS重映射。 0PTP PPS不输出到PB5引脚 30 PTP_PPS_RM RW 1PTP PPS输出到PB5引脚。 0 注:此位适用于 CH32V20x_D8C、CH32V30x_D8C、 CH32V31x_D8C系列芯片。 TIM2内部触发1重映射。 0在内部连接TIM2_ITR1至以太网的PTP输出 1在内部连接TIM2_ITR1至全速USB OTG的SOF 29 TIM2ITR1_RM RW 0 输出。 注此位适用于CH32F20x、CH32V20x、CH32V30x和 CH32V31x全系列芯片。 SPI3重映射。 28 SPI3_RM RW 0 0默认映射NSS/PA15、SCK/PB3、MISO/PB4、 V2.4 126

Page 130

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn MOSI/PB5 1重映射NSS/PA4、SCK/PC10、MISO/PC11、 MOSI/PC12。 注:此位适用于 CH32V30x_D8、CH32V30x_D8C、 CH32V31x_D8C和CH32F20x_D8、CH32F20x_D8C系 列芯片。 27 Reserved RO 保留。 0 这些位用以配置SW功能和跟踪功能的IO口。SWD SDI是访问内核的调试接口。系统复位后总是 作为SWD端口。 0xx启用SWDSDI [26:24] SW_CFG[2:0] RW 000b 100关闭SWDSDI作为GPIO功能 其他:无效。 注此位适用于CH32F20x、CH32V20x、CH32V30x和 CH32V31x全系列芯片。 MII 或 RMII 选择。配置内部的以太网 MAC 适用外 部的MII接口还是RMII接口的收发器PHY。 0配置以太网的MAC使用外部MII接口的收发器 PHY 23 MII_RMII_SEL RW 1配置以太网的 MAC 使用外部 RMII 接口的收发 0 器PHY 注:此位适用于 CH32F20x_D8C、CH32V30x_D8C、 CH32V31x_D8C、CH32F20x_D8W、CH32V20x_D8、 CH32V20x_D8W系列芯片。 CAN2重映射位。 0默认映射CAN2_RX/PB12CAN2_TX/PB13 1重映射CAN2_RX/PB5CAN2_TX/PB6。 22 CAN2_RM RW 0 注:此位适用于 CH32V30x_D8、CH32V30x_D8C、 CH32V31x_D8C、CH32F20x_D8 和 CH32F20x_D8C、 CH32V20x_D8系列芯片。 以太网的重映射位。 0默认映射RX_DV-CRS_DV/PA7RXD0/PC4 RXD1/PC5RXD2/PB0RXD3/PB1 21 ETH_RM RW 1重映射RX_DV-CRS_DV/PD8 RXD0/PD9 0 RXD1/PD10RXD2/PD11RXD3/PD12以太网的重映射功能只适用于CH32F207VCT6、 CH32V307VCT6、CH32V317VCT6芯片。 ADC2外部触发规则转换的重映射位。 0ADC2外部触发规则转换与EXTI11相连 20 ADC2_ETRGREG_RM RW 1ADC2外部触发规则转换与TIM8_TRGO相连 0 注:此位适用于 CH32F20x_D8、CH32F20x_D8C、 CH32V30x和CH32V31x全系列芯片。 ADC2外部触发注入转换的重映射位。 0ADC2外部触发注入转换与EXTI15相连 19 ADC2_ETRGINJ_RM RW 0 1ADC2外部触发注入转换与TIM8_CH4相连 注:此位适用于 CH32F20x_D8、CH32F20x_D8C、 V2.4 127

Page 131

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn CH32V30x和CH32V31x全系列芯片。 ADC1外部触发规则转换的重映射位。 0ADC1外部触发规则转换与EXTI11相连 18 ADC1_ETRGREG_RM RW 1ADC1外部触发规则转换与TIM8_TRGO相连 0 注:此位适用于 CH32F20x_D8、CH32F20x_D8C、 CH32V30x和CH32V31x全系列芯片。 ADC1外部触发注入转换的重映射位。 0ADC1外部触发注入转换与EXTI15相连 17 ADC1_ETRGINJ_RM RW 1ADC1外部触发注入转换与TIM8_CH4相连 0 注:此位适用于 CH32F20x_D8、CH32F20x_D8C、 CH32V30x和CH32V31x全系列芯片。 定时器5通道4的重映射。 0默认映射定时器5通道4的重映射 16 TIM5CH4_RM RW 1重映射定时器5通道4映射至LSI内部时钟。 0 注此位适用于CH32V20x、CH32V30x和CH32V31x 全系列芯片。 引脚PD0&PD1重映射位该位可由用户读写。它控 制 PD0 和 PD1 的 GPIO 功能是否进行重映射,即 PD0&PD1映射到OSC_IN&OSC_OUT。 0引脚作为晶振引脚使用 1引脚作为GPIO口使用。 注1此位重映射适用于 CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C、CH32F20x_D6、 CH32F20x_D8、CH32F20x_D8C 系列芯片,但对于 15 PD0PD1_RM RW 0 LQFP100封装由于PD0和PD1为固有的功能引 脚,因此没有必要再由软件进行重映像设置。 2此位重映射对于CH32V20x_D6系列芯片只 适 用 于 CH32V203CxT6 、 CH32V203CxU6 、 CH32V203K8T6、CH32V203G6U6、CH32V203F6P6 芯 片。 3对于CH32V20x_D8系列芯片CH32V203RBT6只 有OSC_IN和OSC_OUT功能脚不支持映射。 CAN1 复用功能重映射位,这些位可由用户读写。 控制CAN_RX和CAN_TX的重映射 00CAN1_RX映射到PA11CAN1_TX映射到PA12 10CAN1_RX映射到PB8CAN1_TX映射到PB9 [14:13] CAN1_RM[1:0] RW 00b 01保留 11CAN1_RX映射到PD0CAN1_TX映射到PD1。 注1此位适用于CH32F20x、CH32V20x、CH32V30x 和CH32V31x系列芯片。 定时器4的重映射位该位可由用户读写。它控制 定时器4的通道1至4 在GPIO端口的重映射 0默认映射CH1/PB6CH2/PB7CH3/PB8 12 TIM4_RM RW 0 CH4/PB9 1重映射CH1/PD12CH2/PD13CH3/PD14 CH4/PD15。 V2.4 128

Page 132

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 注:此位重映射适用于 CH32V303VCT6、 CH32V307VCT6、CH32V317VCT6、CH32F203VCT6、 CH32F207VCT6芯片。 定时器3的重映射位这些位可由用户读写。它控 制定时器3的通道1至4在GPIO端口的重映射 00默认映射CH1/PA6CH2/PA7CH3/PB0 CH4/PB1 01保留 10部分映射CH1/PB4CH2/PB5CH3/PB0 [11:10] TIM3_RM[1:0] RW 00b CH4/PB1 11完全映射CH1/PC6CH2/PC7CH3/PC8 CH4/PC91重映射不影响在PD2上的TIM3_ETR。 2此位重映射适用于 CH32F20x、CH32V20x、 CH32V30x和CH32V31x系列64脚及以上封装芯片。 定时器2的重映射位。这些位可由用户读写。它控 制定时器 2 的通道 1 至 4 和外部触发ETR在 GPIO端口的映射 00默认映射ETR/PA0CH1/PA0CH2/PA1 CH3/PA2CH4/PA3 01部分映射ETR/PA15CH1/PA15CH2/PB3 [9:8] TIM2_RM[1:0] RW CH3/PA2CH4/PA3 00b 10部分映射ETR/PA0CH1/PA0CH2/PA1 CH3/PB10CH4/PB11 11完全映射ETR/PA15CH1/PA15CH2/PB3 CH3/PB10CH4/PB11。 注此位适用于CH32F20x、CH32V20x、CH32V30x和 CH32V31x全系列芯片。 定时器1的重映射位。这些位可由用户读写。 它控制定时器 1 的通道 1 至 4、1N 至 3N、外部触 发ETR和刹车输入BKIN在GPIO端口的映射 00默认映射ETR/PA12CH1/PA8CH2/PA9 CH3/PA10CH4/PA11BKIN/PB12CH1N/PB13 CH2N/PB14CH3N/PB15 01部分映射ETR/PA12CH1/PA8CH2/PA9 CH3/PA10CH4/PA11BKIN/PA6CH1N/PA7 CH2N/PB0CH3N/PB1 [7:6] TIM1_RM[1:0] RW 00b 10保留 11完全映射ETR/PE7CH1/PE9CH2/PE11 CH3/PE13CH4/PE14BKIN/PE15CH1N/PE8 CH2N/PE10CH3N/PE12。 注:此位部分映射适用于 CH32F20x、CH32V20x、 CH32V30x和CH32V31x全系列芯片完全映射只适 用 于 CH32V303VCT6 、 CH32V307VCT6 、 CH32V317VCT6、CH32F203VCT6、CH32F207VCT6 芯 片。 V2.4 129

Page 133

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn USART3 的重映射位,这些位可由用户读写。它控 制USART3的CTS、RTS、CK、TX和RX复用功能在 GPIO端口的映射 00默认映射TX/PB10RX/PB11CK/PB12 CTS/PB13RTS/PB14 01部分重映射TX/PC10RX/PC11CK/PC12 CTS/PB13RTS/PB14 10部分重映射TX/PA13RX/PA14CK/PD10 CTS/PD11RTS/PD12 11完全重映射TX/PD8RX/PD9CK/PD10 CTS/PD11RTS/PD12。 [5:4] USART3_RM[1:0] RW 00b 注148 脚以下封装不支持01b部分重映 射。 2部分重映射10b只适用于CH32F20x_D8、 CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、 CH32V31x_D8C 系列芯片批号倒数第五位等于大于 2或批号倒数第六位不等于0。 3完全映射只适用于 CH32V303VCT6、 CH32V307VCT6、CH32V317VCT6、CH32F203VCT6、 CH32F207VCT6的LQFP100封装芯片。 4CH32V20x_D6、CH32F20x_D6只存在默认映射 00b。 USART2 的重映射位。该位可由用户读写。它控制 USART2的CTS、RTS、CK、TX和RX复用功能在GPIO 端口的映射: 0默认映射CTS/PA0RTS/PA1TX/PA2RX/PA3 3 USART2_RM RW CK/PA4 0 1重映射CTS/PD3RTS/PD4TX/PD5RX/PD6 CK/PD7。 注CH32V20x_D6、CH32F20x_D6系列芯片只存在默 认映射0b。 USART1 映射配置低位(配合 AFIO_PCFR2 寄存器 bit26 USART1_RM1使用。 00默认映射CK/PA8TX/PA9RX/PA10CTS/PA11 RTS/PA12 01重映射CK/PA8TX/PB6RX/PB7CTS/PA11 RTS/PA12 2 USART1_RM RW 10重映射CK/PA10TX/PB15RX/PA8CTS/PA5 0 RTS/PA9 11重映射CK/PA5TX/PA6RX/PA7CTS/PC4 RTS/PC5。 注CH32F20x_D6、CH32F20x_D8、CH32F20x_D8W、 CH32V20x_D6、CH32V20x_D8、CH32V20x_D8W只存在 默认映射00b、重映射01b。 I2C1的重映射。该位可由用户读写。它控制I2C1 1 I2C1_RM RW 0 的SCL和SDA复用功能在GPIO端口的映射 V2.4 130

Page 134

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0默认映射SCL/PB6SDA/PB7 1重映射SCL/PB8SDA/PB9。 注此位适用于CH32F20x、CH32V20x、CH32V30x和 CH32V31x全系列芯片。 SPI1的重映射。该位可由用户读写。它控制SPI1 的NSS、SCK、MISO和MOSI复用功能在GPIO端口 的映射: 0默认映射NSS/PA4SCK/PA5MISO/PA6 0 SPI1_RM RW MOSI/PA7 0 1重映射NSS/PA15SCK/PB3MISO/PB4 MOSI/PB5。 注此位适用于CH32F20x、CH32V20x、CH32V30x和 CH32V31x全系列芯片。 10.3.2.3 外部中断配置寄存器 1AFIO_EXTICR1 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 EXTI3[3:0] EXTI2[3:0] EXTI1[3:0] EXTI0[3:0] 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 x=0-3外部中断输入引脚配置位。用以决 定外部中断引脚映射到哪个端口的引脚上: [15:12] 0000PA引脚的第x个引脚 [11:8] 0001PB引脚的第x个引脚 EXTIx[3:0] RW 0000b [7:4] 0010PC引脚的第x个引脚 [3:0] 0011PD引脚的第x个引脚 0100PE引脚的第x个引脚 其他:保留。 10.3.2.4 外部中断配置寄存器 2AFIO_EXTICR2 偏移地址0x0C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 EXTI7[3:0] EXTI6[3:0] EXTI5[3:0] EXTI4[3:0] 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 [15:12] x=4-7外部中断输入引脚配置位。用以决 EXTIx[3:0] RW 0000b [11:8] 定外部中断引脚映射到哪个端口的引脚上: V2.4 131

Page 135

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [7:4] 0000PA引脚的第x个引脚 [3:0] 0001PB引脚的第x个引脚 0010PC引脚的第x个引脚 0011PD引脚的第x个引脚 0100PE引脚的第x个引脚 其他:保留。 10.3.2.5 外部中断配置寄存器 3AFIO_EXTICR3 偏移地址0x10 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 EXTI11[3:0] EXTI10[3:0] EXTI9[3:0] EXTI8[3:0] 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 x=8-11外部中断输入引脚配置位。用以 决定外部中断引脚映射到哪个端口的引脚上: [15:12] 0000PA引脚的第x个引脚 [11:8] 0001PB引脚的第x个引脚 EXTIx[3:0] RW 0000b [7:4] 0010PC引脚的第x个引脚 [3:0] 0011PD引脚的第x个引脚 0100PE引脚的第x个引脚 其他:保留。 10.3.2.6 外部中断配置寄存器 4AFIO_EXTICR4 偏移地址0x14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 EXTI15[3:0] EXTI14[3:0] EXTI13[3:0] EXTI12[3:0] 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 x=12-15外部中断输入引脚配置位。用以 决定外部中断引脚映射到哪个端口的引脚上: [15:12] 0000PA引脚的第x个引脚 [11:8] 0001PB引脚的第x个引脚 EXTIx[3:0] RW 0000b [7:4] 0010PC引脚的第x个引脚 [3:0] 0011PD引脚的第x个引脚 0100PE引脚的第x个引脚 其他:保留。 V2.4 132

Page 136

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 10.3.2.7 重映射寄存器 2AFIO_PCFR2 偏移地址0x1C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 USART USART8_RM USART7_RM USART6_RM USART5_RM USART4_RM Reserved 1_RM1 [1:0] [1:0] [1:0] [1:0] [1:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 FSMC_ TIM10_RM TIM9_RM TIM8 Reserved Reserved Reserved NADV [1:0] [1:0] _RM 位 名称 访问 描述 复位值 [31:27] Reserved RO 保留。 0 USART1 映射配置高位(配合 AFIO_PCFR1 寄存 器bit2 USART1_RM使用。 00默认映射CK/PA8TX/PA9RX/PA10 CTS/PA11RTS/PA12 01重映射CK/PA8TX/PB6RX/PB7 CTS/PA11RTS/PA12 10重映射CK/PA10TX/PB15RX/PA8 26 USART1_RM1 RW 0 CTS/PA5RTS/PA9 11重映射CK/PA5TX/PA6RX/PA7CTS/PC4 RTS/PC5。 注 CH32F20x_D6 、 CH32F20x_D8 、 CH32F20x_D8W、CH32V20x_D6、CH32V20x_D8、 CH32V20x_D8W只存在默认映射00b、重映射 01b。 USART8重映射。 00默认映射TX/PC4RX/PC5 01重映射TX/PA14RX/PA15 1x重映射TX/PE14RX/PE15。 [25:24] USART8_RM[1:0] RW 注1此位01b重映射不支持64引脚以 00b 下产品。 21xb重映射只适用于CH32V303VCT6、 CH32V307VCT6、CH32V317VCT6、CH32F203VCT6、 CH32F207VCT6的LQFP100封装芯片。 USART7重映射。 00默认映射TX/PC2RX/PC3 01重映射TX/PA6RX/PA7 1x重映射TX/PE12RX/PE13。 [23:22] USART7_RM[1:0] RW 注1此位01b重映射不支持64引脚以 00b 下产品。 21xb重映射只适用于CH32V303VCT6、 CH32V307VCT6、CH32V317VCT6、CH32F203VCT6、 CH32F207VCT6的LQFP100封装芯片。 USART6重映射。 [21:20] USART6_RM[1:0] RW 00b 00默认映射TX/PC0RX/PC1 V2.4 133

Page 137

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 01重映射TX/PB8RX/PB9 1x重映射TX/PE10RX/PE11。 注11xb重映射只适用于CH32V303VCT6、 CH32V307VCT6、CH32V317VCT6、CH32F203VCT6、 CH32F207VCT6的LQFP100封装芯片。 2此位映射不支持64引脚以下产品。 USART5重映射。 00默认映射TX/PC12RX/PD2 01重映射TX/PB4RX/PB5 1x重映射TX/PE8RX/PE9。 [19:18] USART5_RM[1:0] RW 00b 注1此位映射能不支持64引脚以下产品。 21xb重映射只适用于CH32V303VCT6、 CH32V307VCT6、CH32V317VCT6、CH32F203VCT6、 CH32F207VCT6的LQFP100封装芯片。 UART4重映射。 00默认映射TX/PC10RX/PC11 01重映射TX/PB0RX/PB1 1x重映射TX/PE0RX/PE1。 注:适用于 CH32V30x_D8C、CH32V31x_D8C、 CH32V30x_D8、CH32V30x_D8W、CH32V20x_D8、 CH32F20x_D8C、CH32F20x_D8、CH32F20x_D8W。 [17:16] USART4_RM[1:0] RW 00b x0默认映射CK/PB2TX/PB0RX/PB1 CTS/PB3RTS/PB4 x1重映射CK/PA6TX/PA5RX/PB5CTS/PA7 RTS/PA15。 注该功能仅支持CH32V203C8、CH32F203C8和 64引脚及以上产品。 [15:11] Reserved RW 保留。 0 FSMC_NADV重映射。 0FSMC NADV映射到PB7 10 FSMC_NADV RW 1禁止FSMC NADV输出。 0 注批号倒数第五位小于2且批号倒数第六位 等于0的不支持该功能。 [9:7] Reserved RO 保留。 0 TIM10的重映射位。 00默认映射ETR/PC10CH1/PB8CH2/PB9 CH3/PC3CH4/PC11BKIN/PC12CH1N/PA12 CH2N/PA13CH3N/PA14 01部分映射ETR/PB11CH1/PB3CH2/PB4 [6:5] TIM10_RM[1:0] RW CH3/PB5CH4/PC15BKIN/PB10CH1N/PA5 00b CH2N/PA6CH3N/PA7 1x完全映射ETR/PD0CH1/PD1CH2/PD3 CH3/PD5CH4/PD7BKIN/PE2CH1N/PE3 CH2N/PE4CH3N/PE5。 注:此位完全映射适用于 CH32V303VCT6、 V2.4 134

Page 138

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn CH32V307VCT6 、 CH32V317VCT6 和 CH32F207VCT6、CH32F203VCT6芯片。 TIM9的重映射位。 00默认映射ETR/PA2CH1/PA2CH2/PA3 CH3/PA4CH4/PC4BKIN/PC5CH1N/PC0 CH2N/PC1CH3N/PC2 01部分映射ETR/PA2CH1/PA2CH2/PA3 CH3/PA4CH4/PC14BKIN/PA1CH1N/PB0 [4:3] TIM9_RM[1:0] RW CH2N/PB1CH3N/PB2 00b 1x完全映射ETR/PD9CH1/PD9CH2/PD11 CH3/PD13CH4/PD15BKIN/PD14CH1N/PD8 CH2N/PD10CH3N/PD12。 注:此位完全映射适用于 CH32V303VCT6、 CH32V307VCT6 、 CH32V317VCT6 和 CH32F207VCT6、CH32F203VCT6芯片。 TIM8的重映射位。 0默认映射ETR/PA0CH1/PC6CH2/PC7 CH3/PC8CH4/PC9BKIN/PA6CH1N/PA7 CH2N/PB0CH3N/PB1 2 TIM8_RM RW 1重映射ETR/PA0CH1/PB6CH2/PB7 0 CH3/PB8CH4/PC13BKIN/PB9CH1N/PA13 CH2N/PA14CH3N/PA15此位适用于CH32F20x_D8、CH32F20x_D8C、 CH32V30x和CH32V31x系列芯片。 [1:0] Reserved RW 保留。 0 V2.4 135

Page 139

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 11 章 直接存储器访问控制DMA 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 直接存储器访问控制器DMA提供在外设和存储器之间或存储器和存储器之间的高速数据传输 方式无须CPU干预数据可以通过DMA快速地移动以节省CPU的资源来做其他操作。 DMA控制器每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器 来协调各通道之间的优先级。 11.1 主要特性  多个独立可配置通道  每个通道都直接连接专用的硬件DMA请求并支持软件触发  支持循环的缓冲器管理  多个通道之间的请求优先权可以通过软件编程设置(最高、高、中和低),优先权设置相等时 由通道号决定(通道号越低优先级越高)  支持外设到存储器、存储器到外设、存储器到存储器之间的传输  闪存、SRAM、外设的SRAM、PB1、PB2和HB外设均可作为访问的源和目标  可编程的数据传输字节数目最大为65535 11.2 功能描述 11.2.1 DMA 通道处理 1仲裁优先级 多个独立的通道产生的DMA请求通过逻辑或结构输入到DMA控制器当前只会有一个通道的请求 得到响应。模块内部的仲裁器根据通道请求的优先级来选择要启动的外设/存储器的访问。 软件管理中应用程序通过对DMA_CFGRx寄存器的PL[1:0]位设置,可以为每个通道独立配置优 先等级包括最高、高、中、低4个等级。当通道间的软件设置等级一致时模块会按固定的硬件优 先级选择,通道编号偏低的要比偏高的有较高优先权。 2DMA配置 当DMA控制器收到一个请求信号时会访问发出请求的外设或存储器建立外设或存储器和存储 器之间的数据传输。主要包括下面3个操作步骤 1 从外设数据寄存器或当前外设/存储器地址寄存器指示的存储器地址取数据,第一次传输时的开 始地址是DMA_PADDRx或DMA_MADDRx寄存器指定的外设基地址或存储器地址。 2 存数据到外设数据寄存器或当前外设/存储器地址寄存器指示的存储器地址,第一次传输时的开 始地址是DMA_PADDRx或DMA_MADDRx寄存器指定的外设基地址或存储器地址。 3 执行一次DMA_CNTRx寄存器中数值的递减操作该寄存器指示当前未完成转移的操作数目。 每个通道包括3种DMA数据转移方式  外设到存储器MEM2MEM=0DIR=0  存储器到外设MEM2MEM=0DIR=1  存储器到存储器MEM2MEM=1存储器到存储器方式无需外设请求信号配置为此模式后MEM2MEM=1通道开启EN=1即可 启动数据传输。此方式不支持循环模式。 配置过程如下: V2.4 136

Page 140

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1 在DMA_PADDRx寄存器中设置外设寄存器的首地址或存储器到存储器方式MEM2MEM=1下存储器 数据地址。发生DMA请求时这个地址将是数据传输的源或目标地址。 2 在DMA_MADDRx寄存器中设置存储器数据地址。发生DMA请求时传输的数据将从这个地址读出或 写入这个地址。 3 在DMA_CNTRx寄存器中设置要传输的数据数量。在每个数据传输后这个数值递减。 4 在DMA_CFGRx寄存器的PL[1:0]位中设置通道的优先级。 5 在DMA_CFGRx寄存器中设置数据传输的方向、循环模式、外设和存储器的增量模式、外设和存储 器的数据宽度、传输过半、传输完成、传输错误中断使能位, 6 设置DMA_CFGRx寄存器的EN位启动通道x。 注DMA_PADDRx/DMA_MADDRx/DMA_CNTRx寄存器以及DMA_CFGRx寄存器中的数据传输的方向DIR、 循环模式位置、外设和存储器的增量模式MINC/PINC等控制位只有在DMA通道被关闭下才可 以配置写入。 3循环模式 设置DMA_CFGRx寄存器的CIRC位置1可以启用通道数据传输的循环模式功能。循环模式下当 数据传输的数目变为0时DMA_CNTRx寄存器的内容会自动被重新加载为其初始数值内部的外设和 存储器地址寄存器也被重新加载为DMA_PADDRx和DMA_MADDRx寄存器设定的初始地址值DMA操作将 继续进行直到通道被关闭或关闭DMA模式。 4DMA处理状态  传输过半对应DMA_INTFR寄存器中的HTIFx位硬件置位。当DMA的传输字节数目减至初始设定 值一半以下将会产生 DMA 传输过半标志,如果在 DMA_CFGRx 寄存器中置位了 HTIE则将产生中 断。硬件通过此标志提醒应用程序,可以为新一轮数据传输做准备。  传输完成对应DMA_INTFR寄存器中的TCIFx位硬件置位。当DMA的传输字节数目减至0将会产 生DMA传输完成标志如果在DMA_CFGRx寄存器中置位了TCIE则将产生中断。  传输错误对应DMA_INTFR寄存器中的TEIFx位硬件置位。读写一个保留的地址区域将会产生 DMA 传输错误。同时模块硬件会自动清 0 发生错误的通道所对应的 DMA_CFGRx 寄存器的 EN 位, 该通道被关闭。如果在DMA_CFGRx寄存器中置位了TEIE则将产生中断。 应用程序在查询 DMA 通道状态时,可以先访问 DMA_INTFR 寄存器的 GIFx位判断出当前哪个通 道发生了DMA事件进而处理该通道的具体DMA事件内容。 11.2.2 可编程的数据传输总大小/数据位宽/对齐方式 DMA 每个通道一轮传输的数据量总大小可编程,最大 65535 次。DMA_CNTRx 寄存器中指示待传输 字节数目。在EN=0时写入设置值在EN=1开启DMA传输通道后此寄存器变为只读属性在每次 传输后数值递减。 外设和存储器的传输数据取值支持地址指针自动递增功能,指针增量可编程。它们访问的第一个 传输的数据地址存放在 DMA_PADDRx 和 DMA_MADDRx寄存器中通过设置 DMA_CFGRx寄存器的PINC位 或MINC位置1可以分别开启外设地址自增模式或存储器地址自增模式PSIZE[1:0]设置外设地址取 数据大小及地址自增大小MSIZE[1:0]设置存储器地址取数据大小及地址自增大小,包括 3 种选择: 8位、16位、32位。具体数据转移方式如下表 表11-1 不同数据位宽下DMA转移PINC=MINC=1 源端 目标 传输 源:地址/数据 目标:地址/数据 传输操作 位宽 位宽 数目 0x00/B0 0x00/B0  源端地址递增量与源端设置的 8 8 4 0x01/B1 0x01/B1 数据位宽对齐,取值大小等于 0x02/B2 0x02/B2 源端数据位宽 V2.4 137

Page 141

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0x03/B3 0x03/B3  目标地址递增量与目标设置数 0x00/B0 0x00/00B0 据的位宽对齐,取值大小等于 0x01/B1 0x02/00B1 目标数据位宽 8 16 4 0x02/B2 0x04/00B2  DMA转移送入目标端的数据依 0x03/B3 0x06/00B3 据原则:数据大小不足高位补 0x00/B0 0x00/000000B0 0数据大小溢出高位去掉 0x01/B1 0x04/000000B1  存储数据方式:小端模式,低 8 32 4 0x02/B2 0x08/000000B2 地址存放低字节,高地址存放 0x03/B3 0x0C/000000B3 高字节 0x00/B1B0 0x00/B0 0x02/B3B2 0x01/B2 16 8 4 0x04/B5B4 0x02/B4 0x06/B7B6 0x03/B6 0x00/B1B0 0x00/B1B0 0x02/B3B2 0x02/B3B2 16 16 4 0x04/B5B4 0x04/B5B4 0x06/B7B6 0x06/B7B6 0x00/B1B0 0x00/0000B1B0 0x02/B3B2 0x04/0000B3B2 16 32 4 0x04/B5B4 0x08/0000B5B4 0x06/B7B6 0x0C/0000B7B6 0x00/B3B2B1B0 0x00/B0 0x04/B7B6B5B4 0x01/B4 32 8 4 0x08/BBBAB9B8 0x02/B8 0x0C/BFBEBDBC 0x03/BC 0x00/B3B2B1B0 0x00/B1B0 0x04/B7B6B5B4 0x02/B5B4 32 16 4 0x08/BBBAB9B8 0x04/B9B8 0x0C/BFBEBDBC 0x06/BDBC 0x00/B3B2B1B0 0x00/B3B2B1B0 0x04/B7B6B5B4 0x04/B7B6B5B4 32 32 4 0x08/BBBAB9B8 0x08/BBBAB9B8 0x0C/BFBEBDBC 0x0C/BFBEBDBC 11.2.3 DMA 请求映射 青稞V4F MCU包括CH32V30x_D8C、CH32V31x_D8C、CH32V30x_D8以及ARM○RCortexTM-M3 MCU包 括CH32F20x_D8C、CH32F20x_D8DMA控制器提供18个通道其中DMA1包含7个通道DMA2包含 11个通道每个通道对应多个外设请求通过设置相应外设寄存器中对应DMA控制位可以独立的开 启或关闭各个外设的DMA功能具体对应关系如下。 注1DMA1在使用时需注意对于批号倒数第五位小于3且倒数第六位等于0的DMA1所有通道 的DMA访问地址不得超过64K边界。 例如-CH32V307VCT6配置RAM为128K此时配置DAM1需注意DMA源地址+传输数据数目或DMA 目的地址+传输数据只能在0-64K或64K-128K区域不可出现63K-65K类似情况。对于批号倒数第 五位等于3且倒数第六位等于0的DAM1通道2345DMA访问地址不得超过128K边界DMA1 通道167DMA访问地址依然不得超过64K边界。 2对于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C批号倒数第六 V2.4 138

Page 142

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位不为0的产品DMA1使用上没有限制。 3DMA2使用上没有限制。 图11-1 DMA1请求映像 ADC1 EN bit of channel 1 Hardware request1 TIM2_CH3 Channel 1 TIM4_CH1 Software Trigger Arbiter MEM2MEM bit SPI1_RX EN bit of channel 2 USART3_TX Hardware request2 TIM1_CH1 Channel 2 TIM2_UP Software Priority TIM3_CH3 Software Trigger MEM2MEM bit PL setting value of SPI1_TX EN bit of channel 3 USART3_RX Hardware request3 channel TIM1_CH2 Channel 3 TIM3_CH4/TIM3_UP Software Trigger MEM2MEM bit SPI/I2S2_RX DMA EN bit of channel 4 Request USART1_TX Hardware request4 to internal I2C2_TX Channel 4 TIM1_TRIG/TIM1_COM/TIM1_CH4 Software Trigger TIM4_CH2 MEM2MEM bit SPI/I2S2_TX USART1_RX EN bit of channel 5 Hardware request5 I2C2_RX TIM1_UP Channel 5 TIM2_CH1 Fixed hardware TIM4_CH3 Software Trigger priority MEM2MEM bit Channel USART2_RX EN bit of channel 6 Hardware request6 No. I2C1_TX TIM1_CH3 Channel 6 TIM3_CH1/TIM3_TRIG Software Trigger MEM2MEM bit USART2_TX EN bit of channel 7 Hardware request7 I2C1_RX TIM2_CH2/TIM2_CH4 Channel 7 TIM4_UP Software Trigger MEM2MEM bit V2.4 139

Page 143

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图11-2 DMA2请求映像 TIM5_CH4/TIM5_TRIG EN bit of channel 1 Hardware request1 TIM8_CH3/TIM8_UP Channel 1 SPI/I2S3_RX Software Trigger Arbiter MEM2MEM bit TIM5_CH3/TIM5_UP EN bit of channel 2 TIM8_CH4/TIM8_TRIG/TIM8_COM Hardware request2 UART5_RX Channel 2 SPI/I2S3_TX Software Trigger Software Priority MEM2MEM bit PL setting TIM6_UP EN bit of channel 3 value of TIM8_CH1 Hardware request3 channel UART4_RX Channel 3 DAC1 Software Trigger MEM2MEM bit TIM5_CH2 EN bit of channel 4 TIM7_UP Hardware request4 UART5_TX Channel 4 SDIO Software Trigger DAC2 MEM2MEM bit TIM5_CH1 EN bit of channel 5 Hardware request5 TIM8_CH2 Channel 5 UART4_TX Software Trigger MEM2MEM bit DMA TIM9_UP EN bit of channel 6 Request Hardware request6 to internal TIM10_CH4 Channel 6 UART6_TX Software Trigger MEM2MEM bit TIM9_CH1 EN bit of channel 7 Hardware request7 TIM10_TRIG/TIM10_COM Channel 7 UART6_RX Software Trigger MEM2MEM bit TIM9_CH4 EN bit of channel 8 Hardware request8 TIM10_CH1 Channel 8 UART7_TX Software Trigger MEM2MEM bit TIM9_CH2 EN bit of channel 9 Hardware request9 Fixed hardware TIM10_CH3 Channel 9 priority UART7_RX Software Trigger Channel MEM2MEM bit No. TIM9_TRIG/TIM9_COM EN bit of channel 10 Hardware request10 TIM10_CH2 Channel 10 UART8_TX Software Trigger MEM2MEM bit EN bit of channel 11 TIM9_CH3 Hardware request11 TIM10_UP Channel 11 UART8_RX Software Trigger MEM2MEM bit 表11-2 DMA1各通道外设映射表 外设 通道1 通道2 通道3 通道4 通道5 通道6 通道7 ADC1 ADC1 V2.4 140

Page 144

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn SPI1 SPI1_RX SPI1_TX SPI/I2S2 SPI/I2S2_RX SPI/I2S2_TX USART1 USART1_TX USART1_RX USART2 USART2_RX USART2_TX USART3 USART3_TX USART3_RX I2C1 I2C1_TX I2C1_RX I2C2 I2C2_TX I2C2_RX TIM1_CH4 TIM1 TIM1_CH1 TIM1_CH2 TIM1_TRIG TIM1_UP TIM1_CH3 TIM1_COM TIM2_CH2 TIM2 TIM2_CH3 TIM2_UP TIM2_CH1 TIM2_CH4 TIM3_CH4 TIM3_CH1 TIM3 TIM3_CH3 TIM3_UP TIM3_TRIG TIM4 TIM4_CH1 TIM4_CH2 TIM4_CH3 TIM4_UP 表11-3 DMA2各通道外设映射表一 外设 通道1 通道2 通道3 通道4 通道5 通道6 通道7 TIM5_CH4 TIM5_CH3 TIM5 TIM5_CH2 TIM5_CH1 TIM5_TRIG TIM5_UP TIM6 TIM6_UP TIM7 TIM7_UP TIM8_CH4 TIM8_CH3 TIM8 TIM8_TRIG TIM8_CH1 TIM8_CH2 TIM8_UP TIM8_COM TIM9 TIM9_UP TIM9_CH1 TIM10_TRIG TIM10 TIM10_CH4 TIM10_COM USART4 USART4_RX USART4_TX USART5 USART5_RX USART5_TX USART6 USART6_TX USART6_RX USART7 USART8 SPI/I2S3 SPI/I2S3_RX SPI/I2S3_TX SDIO SDIO DAC1 DAC1 DAC2 DAC2 ADC21 ADC2 注1ADC2的DMA通道外设映射仅适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C批号倒数第六位不为0的产品。 表11-4 DMA2各通道外设映射表二 外设 通道8 通道9 通道10 通道11 TIM5 TIM6 V2.4 141

Page 145

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn TIM7 TIM8 TIM9_TRIG TIM9 TIM9_CH4 TIM9_CH2 TIM9_CH3 TIM9_COM TIM10 TIM10_CH1 TIM10_CH3 TIM10_CH2 TIM10_UP USART4 USART5 USART6 USART7 USART7_TX USART7_RX USART8 USART8_TX USART8_RX SPI/I2S3 SDIO DAC1 DAC2 青稞V4B MCU包括CH32V20x_D6以及ARM○RCortexTM-M3 MCU包括CH32F20x_D6DMA控制器 提供8个通道每个通道对应多个外设请求通过设置相应外设寄存器中对应DMA控制位可以独立 的开启或关闭各个外设的DMA功能具体对应关系如下。 表11-5 DMA各通道外设映射表 外设 通道1 通道2 通道3 通道4 通道5 通道6 通道7 通道8 ADC1 ADC1 SPI1 SPI1_RX SPI1_TX SPI2 SPI2_RX SPI2_TX USART1 USART1_TX USART1_RX USART2 USART2_RX USART2_TX USART3 USART3_TX USART3_RX USART4 USART4_TX USART4_RX I2C1 I2C1_TX I2C1_RX I2C2 I2C2_TX I2C2_RX TIM1_CH4 TIM1 TIM1_CH1 TIM1_CH2 TIM1_TRIG TIM1_UP TIM1_CH3 TIM1_COM TIM2_CH2 TIM2 TIM2_CH3 TIM2_UP TIM2_CH1 TIM2_CH4 TIM3_CH4 TIM3_CH1 TIM3 TIM3_CH3 TIM3_UP TIM3_TRIG TIM4 TIM4_CH1 TIM4_CH2 TIM4_CH3 TIM4_UP V2.4 142

Page 146

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图11-3 DMA请求映像 青稞V4C MCU包括CH32V20x_D8W、CH32V20x_D8以及ARM○RCortexTM-M3 MCU包括CH32F20x_D8W DMA控制器提供8个通道每个通道对应多个外设请求通过设置相应外设寄存器中对应DMA控制位 可以独立的开启或关闭各个外设的DMA功能具体对应关系如下。 表11-6 DMA各通道外设映射表 外设 通道1 通道2 通道3 通道4 通道5 通道6 通道7 通道8 ADC1 ADC1 SPI1 SPI1_RX SPI1_TX SPI2 SPI2_RX SPI2_TX USART1 USART1_TX USART1_RX USART2 USART2_RX USART2_TX USART3 USART3_TX USART3_RX USART4 USART4_TX USART4_RX I2C1 I2C1_TX I2C1_RX I2C2 I2C2_TX I2C2_RX TIM1 TIM1_CH1 TIM1_CH2 TIM1_CH4 TIM1_UP TIM1_CH3 V2.4 143

Page 147

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn TIM1_TRIG TIM1_COM TIM2_CH2 TIM2 TIM2_CH3 TIM2_UP TIM2_CH1 TIM2_CH4 TIM3_CH4 TIM3_CH1 TIM3 TIM3_CH3 TIM3_UP TIM3_TRIG TIM4 TIM4_CH1 TIM4_CH2 TIM4_CH3 TIM4_UP TIM5_CH1 TIM5 TIM5_CH2 TIM5_CH3 TIM5_CH4 TIM5_UP TIM5_TRIG 图11-4 DMA请求映像 11.3 寄存器描述 表11-7 DMA1相关寄存器列表 名称 访问地址 描述 复位值 V2.4 144

Page 148

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R32_DMA1_INTFR 0x40020000 DMA1中断状态寄存器 0x00000000 R32_DMA1_INTFCR 0x40020004 DMA1中断标志清除寄存器 0x00000000 R32_DMA1_CFGR1 0x40020008 DMA1通道1配置寄存器 0x00000000 R32_DMA1_CNTR1 0x4002000C DMA1通道1传输数据数目寄存器 0x00000000 R32_DMA1_PADDR1 0x40020010 DMA1通道1外设地址寄存器 0x00000000 R32_DMA1_MADDR1 0x40020014 DMA1通道1存储器地址寄存器 0x00000000 R32_DMA1_CFGR2 0x4002001C DMA1通道2配置寄存器 0x00000000 R32_DMA1_CNTR2 0x40020020 DMA1通道2传输数据数目寄存器 0x00000000 R32_DMA1_PADDR2 0x40020024 DMA1通道2外设地址寄存器 0x00000000 R32_DMA1_MADDR2 0x40020028 DMA1通道2存储器地址寄存器 0x00000000 R32_DMA1_CFGR3 0x40020030 DMA1通道3配置寄存器 0x00000000 R32_DMA1_CNTR3 0x40020034 DMA1通道3传输数据数目寄存器 0x00000000 R32_DMA1_PADDR3 0x40020038 DMA1通道3外设地址寄存器 0x00000000 R32_DMA1_MADDR3 0x4002003C DMA1通道3存储器地址寄存器 0x00000000 R32_DMA1_CFGR4 0x40020044 DMA1通道4配置寄存器 0x00000000 R32_DMA1_CNTR4 0x40020048 DMA1通道4传输数据数目寄存器 0x00000000 R32_DMA1_PADDR4 0x4002004C DMA1通道4外设地址寄存器 0x00000000 R32_DMA1_MADDR4 0x40020050 DMA1通道4存储器地址寄存器 0x00000000 R32_DMA1_CFGR5 0x40020058 DMA1通道5配置寄存器 0x00000000 R32_DMA1_CNTR5 0x4002005C DMA1通道5传输数据数目寄存器 0x00000000 R32_DMA1_PADDR5 0x40020060 DMA1通道5外设地址寄存器 0x00000000 R32_DMA1_MADDR5 0x40020064 DMA1通道5存储器地址寄存器 0x00000000 R32_DMA1_CFGR6 0x4002006C DMA1通道6配置寄存器 0x00000000 R32_DMA1_CNTR6 0x40020070 DMA1通道6传输数据数目寄存器 0x00000000 R32_DMA1_PADDR6 0x40020074 DMA1通道6外设地址寄存器 0x00000000 R32_DMA1_MADDR6 0x40020078 DMA1通道6存储器地址寄存器 0x00000000 R32_DMA1_CFGR7 0x40020080 DMA1通道7配置寄存器 0x00000000 R32_DMA1_CNTR7 0x40020084 DMA1通道7传输数据数目寄存器 0x00000000 R32_DMA1_PADDR7 0x40020088 DMA1通道7外设地址寄存器 0x00000000 R32_DMA1_MADDR7 0x4002008C DMA1通道7存储器地址寄存器 0x00000000 R32_DMA1_CFGR8 0x40020094 DMA1通道8配置寄存器 0x00000000 R32_DMA1_CNTR8 0x40020098 DMA1通道8传输数据数目寄存器 0x00000000 R32_DMA1_PADDR8 0x4002009C DMA1通道8外设地址寄存器 0x00000000 R32_DMA1_MADDR8 0x400200A0 DMA1通道8存储器地址寄存器 0x00000000 表11-8 DMA2相关寄存器列表 名称 访问地址 描述 复位值 R32_DMA2_INTFR 0x40020400 DMA2中断状态寄存器 0x00000000 R32_DMA2_INTFCR 0x40020404 DMA2中断标志清除寄存器 0x00000000 R32_DMA2_CFGR1 0x40020408 DMA2通道1配置寄存器 0x00000000 R32_DMA2_CNTR1 0x4002040C DMA2通道1传输数据数目寄存器 0x00000000 R32_DMA2_PADDR1 0x40020410 DMA2通道1外设地址寄存器 0x00000000 R32_DMA2_MADDR1 0x40020414 DMA2通道1存储器地址寄存器 0x00000000 R32_DMA2_CFGR2 0x4002041C DMA2通道2配置寄存器 0x00000000 V2.4 145

Page 149

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R32_DMA2_CNTR2 0x40020420 DMA2通道2传输数据数目寄存器 0x00000000 R32_DMA2_PADDR2 0x40020424 DMA2通道2外设地址寄存器 0x00000000 R32_DMA2_MADDR2 0x40020428 DMA2通道2存储器地址寄存器 0x00000000 R32_DMA2_CFGR3 0x40020430 DMA2通道3配置寄存器 0x00000000 R32_DMA2_CNTR3 0x40020434 DMA2通道3传输数据数目寄存器 0x00000000 R32_DMA2_PADDR3 0x40020438 DMA2通道3外设地址寄存器 0x00000000 R32_DMA2_MADDR3 0x4002043C DMA2通道3存储器地址寄存器 0x00000000 R32_DMA2_CFGR4 0x40020444 DMA2通道4配置寄存器 0x00000000 R32_DMA2_CNTR4 0x40020448 DMA2通道4传输数据数目寄存器 0x00000000 R32_DMA2_PADDR4 0x4002044C DMA2通道4外设地址寄存器 0x00000000 R32_DMA2_MADDR4 0x40020450 DMA2通道4存储器地址寄存器 0x00000000 R32_DMA2_CFGR5 0x40020458 DMA2通道5配置寄存器 0x00000000 R32_DMA2_CNTR5 0x4002045C DMA2通道5传输数据数目寄存器 0x00000000 R32_DMA2_PADDR5 0x40020460 DMA2通道5外设地址寄存器 0x00000000 R32_DMA2_MADDR5 0x40020464 DMA2通道5存储器地址寄存器 0x00000000 R32_DMA2_CFGR6 0x4002046C DMA2通道6配置寄存器 0x00000000 R32_DMA2_CNTR6 0x40020470 DMA2通道6传输数据数目寄存器 0x00000000 R32_DMA2_PADDR6 0x40020474 DMA2通道6外设地址寄存器 0x00000000 R32_DMA2_MADDR6 0x40020478 DMA2通道6存储器地址寄存器 0x00000000 R32_DMA2_CFGR7 0x40020480 DMA2通道7配置寄存器 0x00000000 R32_DMA2_CNTR7 0x40020484 DMA2通道7传输数据数目寄存器 0x00000000 R32_DMA2_PADDR7 0x40020488 DMA2通道7外设地址寄存器 0x00000000 R32_DMA2_MADDR7 0x4002048C DMA2通道7存储器地址寄存器 0x00000000 R32_DMA2_CFGR8 0x40020490 DMA2通道8配置寄存器 0x00000000 R32_DMA2_CNTR8 0x40020494 DMA2通道8传输数据数目寄存器 0x00000000 R32_DMA2_PADDR8 0x40020498 DMA2通道8外设地址寄存器 0x00000000 R32_DMA2_MADDR8 0x4002049C DMA2通道8存储器地址寄存器 0x00000000 R32_DMA2_CFGR9 0x400204A0 DMA2通道9配置寄存器 0x00000000 R32_DMA2_CNTR9 0x400204A4 DMA2通道9传输数据数目寄存器 0x00000000 R32_DMA2_PADDR9 0x400204A8 DMA2通道9外设地址寄存器 0x00000000 R32_DMA2_MADDR9 0x400204AC DMA2通道9存储器地址寄存器 0x00000000 R32_DMA2_CFGR10 0x400204B0 DMA2通道10配置寄存器 0x00000000 R32_DMA2_CNTR10 0x400204B4 DMA2通道10传输数据数目寄存器 0x00000000 R32_DMA2_PADDR10 0x400204B8 DMA2通道10外设地址寄存器 0x00000000 R32_DMA2_MADDR10 0x400204BC DMA2通道10存储器地址寄存器 0x00000000 R32_DMA2_CFGR11 0x400204C0 DMA2通道11配置寄存器 0x00000000 R32_DMA2_CNTR11 0x400204C4 DMA2通道11传输数据数目寄存器 0x00000000 R32_DMA2_PADDR11 0x400204C8 DMA2通道11外设地址寄存器 0x00000000 R32_DMA2_MADDR11 0x400204CC DMA2通道11存储器地址寄存器 0x00000000 R32_DMA2_EXTEM_INTFR 0x400204D0 DMA2扩展中断状态寄存器 0x00000000 R32_DMA2_EXTEM_INTFCR 0x400204D4 DMA2扩展中断标志清除寄存器 0x00000000 11.3.1 DMAx 中断状态寄存器DMAx_INTFRx=1/2 偏移地址0x00 + x-1*0x400 V2.4 146

Page 150

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TEIF8 HTIF8 TCIF8 GIF8 TEIF7 HTIF7 TCIF7 GIF7 TEIF6 HTIF6 TCIF6 GIF6 TEIF5 HTIF5 TCIF5 GIF5 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TEIF4 HTIF4 TCIF4 GIF4 TEIF3 HTIF3 TCIF3 GIF3 TEIF2 HTIF2 TCIF2 GIF2 TEIF1 HTIF1 TCIF1 GIF1 位 名称 访问 描述 复位值 通道x的传输错误标志x=1/2/3/4/5/6/7/8 31/27/23/ 0在通道x上没有传输错误 19/15/11/ TEIFx RO 0 1在通道x上发生了传输错误。 7/3 硬件置位软件写CTEIFx位清除此标志。 通道x的传输过半标志x=1/2/3/4/5/6/7/8 30/26/22/ 0在通道x上没有传输过半 18/14/10/ HTIFx RO 0 1在通道x上产生了传输过半事件。 6/2 硬件置位软件写CHTIFx位清除此标志。 通道x的传输完成标志x=1/2/3/4/5/6/7/8 29/25/21/ 0在通道x上没有传输完成事件 17/13/9/5 TCIFx RO 0 1在通道x上产生了传输完成事件。 /1 硬件置位软件写CTCIFx位清除此标志。 通道x的全局中断标志x=1/2/3/4/5/6/7/8 28/24/20/ 0在通道x上没有发生TEIFx或HTIFx或TCIFx 16/12/8/4 GIFx RO 0 1在通道x上产生了TEIFx或HTIFx或TCIFx。 /0 硬件置位软件写CGIFx位清除此标志。 注通道8适用于CH32V20x_D8、CH32V20x_D8W、CH32F20x_D8W、CH32F20x_D6、CH32V20x_D6。 11.3.2 DMAx 中断标志清除寄存器DMAx_INTFCRx=1/2 偏移地址0x04 + x-1*0x400 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CTEIF8 CHTIF8 CTCIF8 CGIF8 CTEIF7 CHTIF7 CTCIF7 CGIF7 CTEIF6 CHTIF6 CTCIF6 CGIF6 CTEIF5 CHTIF5 CTCIF5 CGIF5 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CTEIF4 CHTIF4 CTCIF4 CGIF4 CTEIF3 CHTIF3 CTCIF3 CGIF3 CTEIF2 CHTIF2 CTCIF2 CGIF2 CTEIF1 CHTIF1 CTCIF1 CGIF1 位 名称 访问 描述 复位值 31/27/23/ 清除通道x的传输错误标志x=1/2/3/4/5/6/7/8 19/15/11/ CTEIFx WO 0无作用 0 7/3 1清除DMA_INTFR寄存器中的TEIFx标志。 30/26/22/ 清除通道x的传输过半标志x=1/2/3/4/5/6/7/8 18/14/10/ CHTIFx WO 0无作用 0 6/2 1清除DMA_INTFR寄存器中的HTIFx标志。 29/25/21/ 清除通道x的传输完成标志x=1/2/3/4/5/6/7/8 17/13/9/5 CTCIFx WO 0无作用 0 /1 1清除DMA_INTFR寄存器中的TCIFx标志。 28/24/20/ 清除通道x的全局中断标志x=1/2/3/4/5/6/7/8 CGIFx WO 0 16/12/8/4 0无作用 V2.4 147

Page 151

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn /0 1清除 DMA_INTFR 寄存器中的 TEIFx/HTIFx/TCIFx/ GIFx标志。 注通道8适用于CH32V20x_D8、CH32V20x_D8W、CH32F20x_D8W、CH32F20x_D6、CH32V20x_D6。 11.3.3 DMAy 通道 x 配置寄存器DMAy_CFGRxx=1/2/3/4/5/6/7/8y=1/2 偏移地址0x08 + x-1*20 + y-1*0x400 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reser MEM2 PL[1:0] MSIZE[1:0] PSIZE[1:0] MINC PINC CIRC DIR TEIE HTIE TCIE EN ved MEM 位 名称 访问 描述 复位值 [31:15] Reserved RO 保留。 0 存储器到存储器模式使能: 14 MEM2MEM RW 0非存储器到存储器数据传输 0 1使能存储器到存储器数据传输模式。 通道优先级设置: [13:12] PL[1:0] RW 00 01 00b 10 11最高。 存储器地址数据宽度设置: [11:10] MSIZE[1:0] RW 008位 0116位 00b 1032位 11保留。 外设地址数据宽度设置: [9:8] PSIZE[1:0] RW 008位 0116位 00b 1032位 11保留。 存储器地址增量递增模式使能: 7 MINC RW 0存储器地址保持不变操作 0 1使能存储器地址增量递增操作。 外设地址增量递增模式使能: 6 PINC RW 0外设地址保持不变操作 0 1使能外设地址增量递增操作。 DMA通道循环模式使能 5 CIRC RW 0执行单次操作 0 1使能循环操作。 数据传输方向: 4 DIR RW 0从外设读 0 1从存储器读。 传输错误中断使能控制: 3 TEIE RW 0禁止传输错误中断 0 1使能传输错误中断。 传输过半中断使能控制: 2 HTIE RW 0禁止传输过半中断 0 1使能传输过半中断。 V2.4 148

Page 152

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 传输完成中断使能控制: 1 TCIE RW 0禁止传输完成中断 0 1使能传输完成中断。 通道使能控制: 0通道关闭 1通道开启。 0 EN RW 0 发生 DMA 传输错误时,硬件自动将此位清 0关闭通 道。 注通道8适用于CH32V20x_D8、CH32V20x_D8W、CH32F20x_D8W、CH32F20x_D6、CH32V20x_D6。 11.3.4 DMAy 通道 x 传输数据数目寄存器DMAy_CNTRxx=1/2/3/4/5/6/7/8 y=1/2 偏移地址0x0C + x-1*20 + y-1*0x400 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 NDT[15:0] 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 数据传输数量范围0-65535。 指示剩余的待传输数目(寄存器内容在每次 DMA 传输 [15:0] NDT[15:0] RW 后递减)。 0 在通道为循环模式下,寄存器的内容将被自动重新加 载为之前配置的数值。 注表示当前待传输数目。此寄存器只能在EN=0时更改EN=1时不可写。当寄存器内容为0时无 论通道是否开启都不会发生任何数据传输。通道8适用于CH32V20x_D8、CH32V20x_D8W、CH32F20x_D8W、 CH32F20x_D6、CH32V20x_D6。 11.3.5 DMAy 通道 x 外设地址寄存器DMAy_PADDRxx=1/2/3/4/5/6/7/8y=1/2 偏移地址0x10 + x-1*20 + y-1*0x400 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PA[31:0] 位 名称 访问 描述 复位值 外设基地址,作为外设数据传输的源或目标地址。 当PSIZE[1:0]=0116位模块自动忽略bit0 [31:0] PA[31:0] RW 操作地址自动2字节对齐当PSIZE[1:0]=1032 0 位),模块自动忽略 bit[1:0],操作地址自动 4字节 对齐。 注此寄存器只能在EN=0时更改EN=1时不可写。通道8适用于CH32V20x_D8、CH32V20x_D8W、 CH32F20x_D8W、CH32F20x_D6、CH32V20x_D6。 11.3.6 DMAy 通道 x 存储器地址寄存器DMAy_MADDRxx=1/2/3/4/5/6/7/8 V2.4 149

Page 153

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn y=1/2 偏移地址0x14 + x-1*20 + y-1*0x400 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MA[31:0] 位 名称 访问 描述 复位值 存储器数据地址,作为数据传输的源或目标地址。 当MSIZE[1:0]=0116位模块自动忽略bit0 [31:0] MA[31:0] RW 操作地址自动2字节对齐当MSIZE[1:0]=1032 0 位),模块自动忽略 bit[1:0],操作地址自动 4字节 对齐。 注此寄存器只能在EN=0时更改EN=1时不可写。通道8适用于CH32V20x_D8、CH32V20x_D8W、 CH32F20x_D8W、CH32F20x_D6、CH32V20x_D6。 11.3.7 DMA2 通道 x 配置寄存器DMA2_CFGRxx=8/9/10/11 偏移地址0x490 + x-8*16 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reser MEM2 PL[1:0] MSIZE[1:0] PSIZE[1:0] MINC PINC CIRC DIR TEIE HTIE TCIE EN ved MEM 位 名称 访问 描述 复位值 [31:15] Reserved RO 保留。 0 存储器到存储器模式使能: 14 MEM2MEM RW 0非存储器到存储器数据传输 0 1使能存储器到存储器数据传输模式。 通道优先级设置: [13:12] PL[1:0] RW 00 01 00b 10 11最高。 存储器地址数据宽度设置: [11:10] MSIZE[1:0] RW 008位 0116位 00b 1032位 11保留。 外设地址数据宽度设置: [9:8] PSIZE[1:0] RW 008位 0116位 00b 1032位 11保留。 存储器地址增量递增模式使能: 7 MINC RW 0存储器地址保持不变操作 0 1使能存储器地址增量递增操作。 外设地址增量递增模式使能: 6 PINC RW 0外设地址保持不变操作 0 1使能外设地址增量递增操作。 DMA通道循环模式使能 5 CIRC RW 0 0执行单次操作 V2.4 150

Page 154

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1使能循环操作。 数据传输方向: 4 DIR RW 0从外设读 0 1从存储器读。 传输错误中断使能控制: 3 TEIE RW 0禁止传输错误中断 0 1使能传输错误中断。 传输过半中断使能控制: 2 HTIE RW 0禁止传输过半中断 0 1使能传输过半中断。 传输完成中断使能控制: 1 TCIE RW 0禁止传输完成中断 0 1使能传输完成中断。 通道使能控制: 0通道关闭 1通道开启。 0 EN RW 0 发生 DMA 传输错误时,硬件自动将此位清 0关闭通 道。 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C。 11.3.8 DMA2 通道 x 传输数据数目寄存器DMA2_CNTRxx=8/9/10/11 偏移地址0x494 + x-8*16 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 NDT[15:0] 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 数据传输数量范围0-65535。 指示剩余的待传输数目(寄存器内容在每次 DMA 传输 [15:0] NDT[15:0] RW 后递减)。 0 在通道为循环模式下,寄存器的内容将被自动重新加 载为之前配置的数值。 注表示当前待传输数目。当寄存器内容为0时无论通道是否开启都不会发生任何数据传输适 用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C。 11.3.9 DMA2 通道 x 外设地址寄存器DMA2_PADDRxx=8/9/10/11 偏移地址0x498 + x-8*16 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PA[31:0] 位 名称 访问 描述 复位值 [31:0] PA[31:0] RW 外设基地址,作为外设数据传输的源或目标地址。 0 V2.4 151

Page 155

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 当PSIZE[1:0]=0116位模块自动忽略bit0 操作地址自动2字节对齐当PSIZE[1:0]=1032 位),模块自动忽略 bit[1:0],操作地址自动 4字节 对齐。 注此寄存器只能在EN=0时更改EN=1时不可写适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C。 11.3.10 DMA2 通道 x 存储器地址寄存器DMA2_MADDRxx=8/9/10/11 偏移地址0x49C + x-8*16 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MA[31:0] 位 名称 访问 描述 复位值 存储器数据地址,作为数据传输的源或目标地址。 当MSIZE[1:0]=0116位模块自动忽略bit0 [31:0] MA[31:0] RW 操作地址自动2字节对齐当MSIZE[1:0]=1032 0 位),模块自动忽略 bit[1:0],操作地址自动 4字节 对齐。 注此寄存器只能在EN=0时更改EN=1时不可写适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C。 11.3.11 DMA2 扩展中断状态寄存器DMA2_EXTEM_INTFR 偏移地址0x4D0 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TEIF HTIF TCIF GIF TEIF HTIF TCIF GIF TEIF HTIF TCIF GIF TEIF HTIF TCIF GIF 11 11 11 11 10 10 10 10 9 9 9 9 8 8 8 8 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 通道x的传输错误标志x=8/9/10/11 0在通道x上没有传输错误 15/11/7/3 TEIFx RO 0 1在通道x上发生了传输错误。 硬件置位软件写CTEIFx位清除此标志。 通道x的传输过半标志x=8/9/10/11 0在通道x上没有传输过半 14/10/6/2 HTIFx RO 0 1在通道x上产生了传输过半事件。 硬件置位软件写CHTIFx位清除此标志。 通道x的传输完成标志x=8/9/10/11 0在通道x上没有传输完成事件 13/9/5/1 TCIFx RO 0 1在通道x上产生了传输完成事件。 硬件置位软件写CTCIFx位清除此标志。 12/8/4/0 GIFx RO 通道x的全局中断标志x=8/9/10/11 0 V2.4 152

Page 156

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0在通道x上没有发生TEIFx或HTIFx或TCIFx 1在通道x上产生了TEIFx或HTIFx或TCIFx。 硬件置位软件写CGIFx位清除此标志。 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C。 11.3.12 DMA2 扩展中断标志清除寄存器DMA2_EXTEM_INTFCR 偏移地址0x4D4 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CTEIF CHTIF CTCIF CGIF CTEIF CHTIF CTCIF CGIF CTEIF CHTI CTCIF CGIF CTEIF CHTIF CTCIF CGIF 11 11 11 11 10 10 10 10 9 F9 9 9 8 8 8 8 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 清除通道x的传输错误标志x=8/9/10/11 15/11/7/3 CTEIFx WO 0无作用 0 1清除DMA_INTFR寄存器中的TEIFx标志。 清除通道x的传输过半标志x=8/9/10/11 14/10/6/2 CHTIFx WO 0无作用 0 1清除DMA_INTFR寄存器中的HTIFx标志。 清除通道x的传输完成标志x=8/9/10/11 13/9/5/1 CTCIFx WO 0无作用 0 1清除DMA_INTFR寄存器中的TCIFx标志。 清除通道x的全局中断标志x=8/9/10/11 0无作用 12/8/4/0 CGIFx WO 0 1清除 DMA_INTFR 寄存器中的 TEIFx/HTIFx/TCIFx/ GIFx标志。 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C。 V2.4 153

Page 157

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 12 章 模拟/数字转换ADC 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 ADC模块包含2个12位的逐次逼近型的模拟数字转换器最高14MHz的输入时钟。支持16个 外部通道和2个内部信号源采样源。可完成通道的单次转换、连续转换通道间自动扫描模式、间 断模式、外部触发模式、双重采样等功能。可以通过模拟看门狗功能监测通道电压是否在阈值范围 内。 12.1 主要特性  12位分辨率  支持16个外部通道和2个内部信号源采样  多通道的多种采样转换方式:单次、连续、扫描、触发、间断等  数据对齐模式:左对齐、右对齐  采样时间可按通道分别编程  规则转换和注入转换均支持外部触发  模拟看门狗监测通道电压,自校准功能  双重模式  ADC通道输入范围0≤V ≤V IN DDA  输入增益可调,可实现小信号放大采样 V2.4 154

Page 158

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 12.2 功能描述 12.2.1 模块结构 图12-1 ADC模块框图 Rule channel data Conversion ends V EOC=1 DDA register (16 bits) V SSA End of Injection V Injection channel data conversion REF+ register (4×16 bits) JEOC=1 VREF- -ADC_IOFRx[1:1:0] ADC_IN00 PGA ADCCLK Analog to ADC_IN11 GPIO Rule channel Digital AD M C a _ x S = A 1 M 4 P M T H P z x Port PGA group Converters Injection ADC_IN15 DMA channel group Request Temperature sensor VREFINT Analog Watchdog High threshold (10-bit) Low threshold (10-bit) Compare Results AWD=1 EXTSEL[2:0] TIM11_CC11 TIM1_CC2 TIM1_CC3 TIM2_CC2 TIM3_TRG0 TIM4_CC4 SWSTART EXTTRIG EXTI11 TIM8_TRGO ADCx_ETRGREG_RM JEXTSEL[2:0] TIM1_TRG0 TIM1_CC4 TIM2_TRG0 TIM2_CC1 TIM3_CC4 TIM4_TRG0 JSWSTART JEXTTRIG EXTI15 TIM8_CC4 ADCx_ETRGINJ_RM 12.2.2 ADC 配置 1模块上电 ADC_CTLR2寄存器的ADON位为1表示ADC模块上电。当ADC模块从断电模式ADON=0下进入 上电状态ADON=1需要延迟一段时间t 用于模块稳定时间。之后再次写入ADON位为1用 STAB 于作为软件启动ADC转换的启动信号。通过清除ADON位为0可以终止当前转换并将ADC模块置于 断电模式这个状态下ADC几乎不耗电。 2采样时钟 模块的寄存器操作基于PCLK2PB2总线时钟其转换单元的时钟基准ADCCLK与PCLK2同 步由RCC_CFGR0寄存器的ADCPRE[1:0]域配置分频最大不能超过14MHz。 V2.4 155

Page 159

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 3通道配置 ADC模块提供了18个通道采样源包括16个外部通道和2个内部通道。它们可以配置到两种 转换组中:规则组和注入组。以实现任意多个通道上以任意顺序进行一系列转换构成的组转换。 转换组:  规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_RSQRx寄存器中设置。 规则组中转换的总数量应写入ADC_RSQR1寄存器的L[3:0]中。  注入组由多达4个转换组成。注入通道和它们的转换顺序在ADC_ISQR寄存器中设置。注 入组里的转换总数量应写入ADC_ISQR寄存器的JL[1:0]中。 注如果ADC_RSQRx或ADC_ISQR寄存器在转换期间被更改当前的转换被终止一个新的启动信号 将发送到ADC以转换新选择的组。 2个内部通道  温度传感器连接ADC_IN16通道用来测量器件周围的温度TA。  V 内部参考电压连接ADC_IN17通道。 REFINT 4校准 通过写ADC_CTLR2寄存器的RSTCAL位置1初始化校准寄存器等待RSTCAL硬件清0表示初始 化完成。置位CAL位启动校准功能一旦校准结束硬件会自动清除CAL位将校准码存储到 ADC_RDATAR中。之后可以开始正常的转换功能。建议在ADC模块上电时执行一次ADC校准。 注启动校准前必须保证ADC模块处于上电状态ADON=1超过至少两个ADC时钟周期。 5可编程采样时间 ADC使用若干个ADCCLK周期对输入电压采样通道的采样周期数目可以通过ADC_SAMPTR1和 ADC_SAMPTR2寄存器中的SMPx[2:0]位更改。每个通道可以分别使用不同的时间采样。 总转换时间如下计算: T = 采样时间 + 12.5T CONV ADCCLK ADC的规则通道转换支持DMA功能。规则通道转换的值储存在一个仅有的数据寄存器ADC_RDATAR 中,为防止连续转换多个规则通道时,没有及时取走 ADC_RDATAR 寄存器中的数据,可以开启 ADC 的 DMA功能。硬件会在规则通道的转换结束时EOC置位产生DMA请求并将转换的数据从ADC_RDATAR 寄存器传输到用户指定的目的地址。 对DMA控制器模块的通道配置完成后写ADC_CTLR2寄存器的DMA位置1开启ADC的DMA功能。 注注入组转换不支持DMA功能。 6数据对齐 ADC_CTLR2寄存器中的ALIGN位选择ADC转换后的数据存储对齐方式。12位数据支持左对齐和右 对齐模式。 规则组通道的数据寄存器ADC_RDATAR保存的是实际转换的12位数字值而注入组通道的数据寄 存器ADC_IDATARx是实际转换的数据减去ADC_IOFRx寄存器的定义的偏移量后写入的值会存在正负 情况所以有符号位SIGNB。 图12-2 数据左对齐 规则组数据寄存器 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 注入组数据寄存器 SIGNB D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 V2.4 156

Page 160

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图12-3 数据右对齐 规则组数据寄存器 0 0 0 0 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 注入组数据寄存器 SIGNB SIGNB SIGNB SIGNB D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 12.2.3 外部触发源 ADC转换的启动事件可以由外部事件触发。如果设置了ADC_CTLR2寄存器的EXTTRIG或JEXTTRIG 位则可分别通过外部事件触发规则组或注入组通道的转换。此时EXTSEL[2:0]和JEXTSEL[2:0]位 的配置决定规则组和注入组的外部事件源。 注当外部触发信号被选为ADC规则或注入转换时只有它的上升沿可以启动转换。 表12-1 规则组通道的外部触发源 EXTSEL[2:0] 触发源 类型 000 定时器1的CC1事件 001 定时器1的CC2事件 010 定时器1的CC3事件 来自片上定时器的内部信号 011 定时器2的CC2事件 100 定时器3的TRGO事件 101 定时器4的CC4事件 110 EXTI线11/TIM8_TRGO 来自外部引脚/内部定时器信号 111 SWSTART位置1软件触发 软件控制位 表12-2注入组通道的外部触发源 JEXTSEL[2:0] 触发源 类型 000 定时器1的TRGO事件 001 定时器1的CC4事件 010 定时器2的TRGO事件 来自片上定时器的内部信号 011 定时器2的CC1事件 100 定时器3的CC4事件 101 定时器4的TRGO事件 110 EXTI线15/TIM8_CC4 来自外部引脚/内部定时器信号 111 JSWSTART位置1软件触发 软件控制位 12.2.4 转换模式 表12-3 转换模式组合 ADC_CTLR1和ADC_CTLR2寄存器控制位 ADC转换模式 CONT SCAN DISCEN/JDISCEN JAUTO 启动事件 ADON位置 单次单通道模式:某一规则通道执行单次转 1 换。 0 0 0 外部触发 单次单通道模式:规则通道或注入通道的某 0 方式 一通道执行单次转换。 ADON位置 单次扫描模式:按顺序对选中的所有规则组 1 0 0 1或外部 通道ADC_RSQRx或所有注入组通道 触发方式 ADC_ISQR逐个执行单次转换。 V2.4 157

Page 161

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 触发注入方式:当规则组通道转换过程中可 以插入注入组通道所有转换,之后再继续规 则组通道转换;但转换注入组通道时不会插 入规则组通道转换。 单次扫描模式:按顺序对选中的所有规则组 通道ADC_RSQRx或所有注入组通道 ADON位置 ADC_ISQR逐个执行单次转换。 1 1或外部 自动注入方式:在规则组通道转换完之后, 触发方式 注入组通道被自动转换。 注:转换过程中不允许出现注入通道的外部 触发信号。 单次间断模式:每次启动事件,执行一个短 序列DISCNUM[2:0]定义数量)的通道数量 转换,直到所有选中通道转换完成才能重头 1 外部触发 开始。 DISCEN和 0 0 方式 注:规则组和注入组选中此模式控制位分别 JDISCEN不能同 为DISCEN和JDISCEN不能同时为规则组和 时为1 注入组配置间断模式,间断模式只能用于一 组转换。 1 - 禁止此模式。 1 1 X - 无此模式。 0 0 0 ADON位置 连续单通道/扫描模式:每轮结束后重复新 1 0 1或外部 1 0 一轮的转换直到CONT清0才能终止。 1 触发方式 注规则组和注入组的外部触发事件是不一样的而且ACON位只能启动规则组通道转换所以规 则组和注入组通道转换的启动事件独立。 1单次单通道转换模式 此模式下对当前1个通道只执行一次转换。该模式对规则组或注入组中排序第1的通道执行转 换其中通过设置ADC_CTLR2寄存器的ADON位置1只适用于规则通道启动也可通过外部触发启动 (适用于规则通道或注入通道)。一旦选择通道的转换完成将: 如果转换的是规则组通道,则转换数据被储存在 16 位 ADC_RDATAR 寄存器中EOC 标志被置位, 如果设置了EOCIE位将触发ADC中断。 如果转换的是注入组通道则转换数据被储存在16位ADC_IDATAR1寄存器中EOC和JEOC标志 被置位如果设置了JEOCIE或EOCIE位将触发ADC中断。 2单次扫描模式转换 通过设置 ADC_CTLR1寄存器的 SCAN位为 1进入 ADC扫描模式。此模式用来扫描一组模拟通道 对被 ADC_RSQRx 寄存器(对规则通道)或 ADC_ISQR对注入通道选中的所有通道逐个执行单次转 换,当前通道转换结束时,同一组的下一个通道被自动转换。 在扫描模式里根据JAUTO位的状态又分为触发注入方式和自动注入方式。  触发注入 JAUTO 位为 0当在扫描规则组通道过程中发生了注入组通道转换的触发事件当前转换被复 位,注入通道的序列被以单次扫描方式进行,在所有选中的注入组通道扫描转换结束后,恢复上次被 中断的规则组通道转换。 如果当前在扫描注入组通道序列时,发生了规则通道的启动事件,注入组转换不会被中断,而是 V2.4 158

Page 162

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 在注入序列转换完成后再执行规则序列的转换。 注:使用触发的注入转换时,必须保证触发事件的间隔长于注入序列。例如,完成注入序列的转换总 体时间需要28个ADCCLK那么触发注入通道的事件间隔时间最小值为29个ADCCLK。  自动注入 JAUTO 位为 1在扫描完规则组选中的所有通道转换后自动进行注入组选中通道的转换。这种 方式可以用来转换ADC_RSQRx和ADC_ISQR寄存器中多达20个转换序列。 此模式里必须禁止注入通道的外部触发JEXTTRIG=0。 注对于ADC时钟预分频系数ADCPRE[1:0]为4至8时当从规则转换切换到注入序列或从注入 转换切换到规则序列时会自动插入1个ADCCLK间隔当ADC时钟预分频系数为2时则有2个 ADCCLK间隔的延迟。 3单次间断模式转换 通过设置 ADC_CTLR1寄存器的 DISCEN或 JDISCEN位为 1进入规则组或注入组的间断模式。此模 式区别扫描模式中扫描完整的一组通道,而是将一组通道分为多个短序列,每次外部触发事件将执行 一个短序列的扫描转换。 短序列的长度nn<=8定义在ADC_CTLR1寄存器的DISCNUM[2:0]中当DISCEN为1则是规则 组的间断模式待转换总长度定义在ADC_RSQR1寄存器的L[3:0]中当JDISCEN为1则是注入组的 间断模式待转换总长度定义在ADC_ISQR寄存器的JL[1:0]中。不能同时将规则组和注入组设置为间 断模式。 规则组间断模式举例: DISCEN=1DISCNUM[2:0]=3L[3:0]=8待转换通道=132584106 第1次外部触发转换序列为132 第2次外部触发转换序列为584 第3次外部触发转换序列为106同时产生EOC事件 第4次外部触发转换序列为132 注入组间断模式举例: JDISCEN=1JL[1:0]=3待转换通道=132 第1次外部触发转换序列为1 第2次外部触发转换序列为3 第3次外部触发转换序列为2同时产生EOC和JEOC事件 第4次外部触发转换序列为1 注1.当以间断模式转换一个规则组或注入组时,转换序列结束后不自动从头开始。当所有子组被转 换完成,下一次触发事件启动第一个子组的转换。 2.不能同时使用自动注入JAUTO=1和间断模式。 3.不能同时为规则组和注入组设置间断模式,间断模式只能用于一组转换。 4.注入组的间断模式下外部触发后要转换的注入通道数目为1。 4连续转换 在连续转换模式中当前面ADC转换一结束马上就启动另一次转换转换不会在选择组的最后一 个通道上停止,而是再次从选择组的第一个通道继续转换。此模式的启动事件包括外部触发事件和 ADON位置1设置启动后需将CONT位置1。 如果一个规则通道被转换转换数据被存储于ADC_RDATAR寄存器中转换结束标志EOC被置位 如果设置了EOCIE则产生中断。 如果一个注入通道被转换,转换数据被存储于 ADC_IDATARx 寄存器中,注入转换结束标志 JEOC 被置位如果设置了JEOCIE则产生中断。 V2.4 159

Page 163

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 12.2.5 模拟看门狗 如果被ADC转换的模拟电压低于低阈值或高于高阈值AWD模拟看门狗状态位被设置。阈值设 置位于ADC_WDHTR和ADC_WDLTR寄存器的最低12个有效位中。通过设置ADC_CTLR1寄存器的AWDIE 位以允许产生相应中断。 图12-4 模拟看门狗阈值区 Analog voltage conversion values Alert High ADC_WDHTR Threshold Alert Area Alert Low ADC_WDLTR Threshold 配置ADC_CTLR1寄存器的AWDSGL、AWDEN、JAWDEN及AWDCH[4:0]位选择模拟看门狗警戒的通 道,具体关系见下表: 表12-4 模拟看门狗通道选择 ADC_CTLR1寄存器控制位 模拟看门狗警戒通道 AWDSGL AWDEN JAWDEN AWDCH[4:0] 不警戒 忽略 0 0 忽略 所有注入通道 0 0 1 忽略 所有规则通道 0 1 0 忽略 所有注入和规则通道 0 1 1 忽略 单一注入通道 1 0 1 决定通道编号 单一规则通道 1 1 0 决定通道编号 单一注入和规则通道 1 1 1 决定通道编号 12.2.6 温度传感器 芯片内置温度传感器连接ADC_INT16通道通过ADC将传感器输出的电压转换成数字值来反 馈芯片内部温度推荐设置采样时间是17.1us。温度传感器输出的电压随温度线性变化,由于制造 离散性,其线性变化的曲线斜率和偏移有所不同,所以内部温度传感器更适合于检测温度的变化, 而不是测量绝对的温度。如果需要测量精确的温度,应该使用一个外置的温度传感器。 通过设置ADC_CTLR2寄存器的TSVREFE位置1唤醒ADC内部采样通道软件启动或外部触发 启动ADC的温度传感器通道转换读取数据结果mV。其中数字值和温度换算公式如 下: 温度(℃) = V -V /Avg_Slope+25 SENSE 25 V25温度传感器在25℃下的电压值 Avg_Slope温度与V 曲线的平均斜率mV/℃) SENSE 参考数据手册电气特性章节中V 和Avg_Slope的实际值。 25 注内部温度传感器上电TSVREFE位从0改为1需要一个建立时间而ADC模块上电也需要一个 建立时间ADON位从0改为1所以为了缩短等待时间可以同时设置ADON和TSVREFE位。 12.2.7 双 ADC 模式 在有2个的ADC模块产品中可以使2个ADC配合使用实现双ADC模式。在双ADC模式中 ADC1为主ADCADC2为从ADC。通过配置ADC1_CTLR1中DUALMODE[3:0]以选择模式实现ADC1和 ADC2交替触发或同步触发转换。 V2.4 160

Page 164

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn双ADC模式中选择外部触发事件触发时用户必须使能主从ADC的外部触发使能且需要将主 ADC设为相应的触发从ADC设置为软件触发防止不必要的触发使从ADC进行转换。 通过配置可以实现以下几种可能的模式:  独立模式  同步注入模式  同步规则模式  快速交替模式  慢速交替模式  交替触发模式  同步规则模式+同步注入模式  同步规则模式+交替触发模式  同步注入模式+快速交替模式  同步注入模式+慢速交替模式 注1.双ADC模式中为了主数据寄存器能够读取从ADC的转换数据需要使能DMA位。 2.只有ADC1拥有DMA功能。而ADC2转化的数据只可以通过双ADC模式利用ADC1的DMA功能 传输。 V2.4 161

Page 165

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图12-5 双ADC框图 End of ADC2 Regular channel data conversion slave registers (16-bit) EOC=1 End of injection Injected channel data conversion JEOC=1 registers (4×16 bits) -ADC_IOFRx[11:0] PGA ADCCLK Rule channel Analog-to-digital Max=14MHz group converter ADC_SAMPTRx PGA Injection channel group DMA request End of ADC1 Regular channel data conversion EOC=1 registers (16-bit) master Injected channel data End of injection conversion registers (4×16 bits) JEOC=1 -ADC_IOFRx[11:0] ADC_IN0 PGA ADCCLK ADC_IN1 Max=14MHz GPIO Rule channel Analog-to-digital port group converter ADC_SAMPTRx PGA Injection ADC_IN15 channel group DMA request Temperature Sensor VREFINT EXTSEL[2:0] TIM1_CC1 TIM1_CC2 TIM1_CC3 TIM2_CC2 TIM3_TRG0 TIM4_CC4 SWSTART EXTTRIG EXTI11 TIM8_TRG0 Dual ADC mode ADCx_ETRGINJ_RM control JEXTSEL[2:0] TIM1_TRG0 TIM1_CC4 TIM2_TRG0 TIM2_CC1 TIM3_CC4 TIM4_TRG0 JSWSTART JEXTTRIG EXTI15 TIM8_CC4 ADCx_ETRGREG_RM 1独立模式 此模式下双ADC不同步工作相互之间独立工作。 2同步注入模式 此模式下用于转换一个注入通道组设置ADC1_CTLR2中JEXTSEL[2:0],以选择触发源,同时 它也将用于同步触发ADC2。转换完成时转换后的数据分别存储在ADCx的ADC_IDATARx中且若 使能任一ADC中断转换结束后将产生JEOC中断。 V2.4 162

Page 166

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图12-6 4通道同步注入转换 Sample conversion ADC2 CH0 CH1 CH2 CH3 ADC1 CH3 CH2 CH1 CH0 Trigger ADC1 and ADC2 injection conversion ends 注1.同一时刻ADC1和ADC2的转换通道不应重合。 2.同步模式下ADC1和ADC2应有相同时间长度的转换序列或两者之中较长的转换序列的时长 小于触发时间间隔,以保证每次触发两个序列均能转换完成。 3同步规则模式 此模式下用于转换规则通道序列设置ADC1_CTLR2中EXTSEL[2:0],以选择触发源,同时它也 将用于同步触发ADC2。转换完成时将产生一个32位DMA传输请求将数据寄存器ADC1_RDATAR 的内容传输到SRAM中高16位包含ADC2转换数据低16位包含ADC1转换数据。若使能任一ADC 中断将产生EOC中断。 图12-7 16通道同步规则转换 Sample conversion ADC1 CH0 CH1 CH2 CH3 ... CH15 ADC2 CH15 CH14 CH13 CH12 ... CH0 Trigger ADC1 and ADC2 injection conversion ends 注1.同一时刻ADC1和ADC2的转换通道不应重合 2.同步模式下ADC1和ADC2应有相同时间长度的转换序列或两者之中较长的转换序列的时长 小于触发时间间隔,以保证每次触发两个序列均能转换完成。 4快速交替模式 此模式仅适用于规则通道往往只有一个通道设置ADC1_CTLR2中EXTSEL[2:0],以选择触 发源当触发产生后ADC2将立即启动转换ADC1在延迟7个ADC时钟周期后启动转换。如果均开 启连续模式CONT被置位两个ADC将对规则通道连续交替转换。如果使能中断ADC1将产生 EOC中断若同时使能DMA则将产生一个32位的DMA传输请求将数据寄存器ADC1_RDATAR的内 容传输到SRAM中高16位包含ADC2转换数据低16位包含ADC1转换数据。 图12-8 单通道快速交替连续转换 Sample ADC2 conversion ends conversion ADC2 CH0 ... CH0 ADC1 CH0 ... CH0 Trigger ADC1 conversion ends 7 ADCCLK cycles V2.4 163

Page 167

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn采样时间应小于7个ADC时钟周期以避免ADC1和ADC2在采样同一个通道时出现采样周期重 合的问题。 5慢速交替模式 此模式仅适用于规则通道且只能一个通道。设置ADC1_CTLR2中EXTSEL[2:0],以选择触发源, 当触发产生后ADC2将立即启动转换ADC1在延迟14个ADC时钟周期后启动转换再次延时14个 ADC时钟周期后ADC2再次启动如此往复循环。若使能中断ADC1将产生EOC中断若同时使能 DMA则将产生一个32位的DMA传输请求将数据寄存器ADC1_RDATAR的内容传输到SRAM中高 16位包含ADC2转换数据低16位包含ADC1转换数据。 图12-9 单通道慢速交替转换 Sample ADC2 conversion ends conversion ADC2 CH0 CH0 ADC1 CH0 CH0 Trigger ADC1 conversion ends 14 ADCCLK cycles 28 ADCCLK cycles 注1.采样时间应小于14个ADC时钟周期以避免和下一次采样周期重合 2.28个ADC时钟周期后自动启动新的ADC2转换 3.不需要设置CONT位。 6交替触发模式 此模式仅适用于注入通道组设置ADC1_CTLR2中JEXTSEL[2:0],以选择触发源。当第一次触 发事件发生时ADC1上所有的注入通道被转换当第二次触发事件发生时ADC2上所有的注入通道 被转换。依次循环往复若使能中断则当ADC1所有注入通道转换完成后产生JEOC中断ADC2所 有注入通道转换完成后产生JEOC中断。 图12-10 每个ADC注入通道组交替触发转换 1st 3rd Nth trigger EOC trigger EOC trigger Sample IEOC(ADC1) IEOC(ADC1) conversion ADC1 ... ADC2 EOC EOC 2nd IEOC(ADC2) 4th IEOC(ADC2) N+1th trigger trigger trigger 若同时使用注入间断模式则当第一次触发事件发生时ADC1上的第一个注入通道被转换当 第二次触发事件发生时ADC2上第一个注入通道被转换。以此类推往复循环。同时若使能中断 则当ADC1所有注入通道转换完成后产生JEOC中断当ADC2所有注入通道转换完成后产生JEOC 中断。 V2.4 164

Page 168

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图12-11 间断模式下每个ADC注入通道交替触发转换 1st 3rd 5th 7th Sample trigger trigger trigger trigger IEOC(ADC1) conversion ADC1 ADC2 IEOC(ADC2) 2nd 4th 6th 8th trigger trigger trigger trigger 7同步规则模式+同步注入模式 此模式下规则组的同步转换可以打断,以启动注入组的同步转换。同时此模式下需要保准转换 具有相同时间长度的序列,或保证触发时间间隔比两个序列中较长序列的时间长。 8同步规则模式+交替触发模式 此模式下规则组的同步转换可以被打断,以启动注入组的交替触发转换。当发生注入事件时,交 替触发转换立即启动。如果同步规则正在转换则所有ADC的规则转换被停止在注入转换结束后同 步恢复。 图12-12同步规则模式下交替触发注入通道转换 1st trigger ADC1 rule conversion CH0 CH1 CH2 CH2 CH3 CH3 CH4 ADC1 injection CH0 conversion ADC2 rule conversion CH3 CH5 CH6 CH6 CH7 CH7 CH8 ADC2 injection CH0 conversion Sync but not lose 2nd trigger 注:此模式下需要保准转换具有相同时间长度的序列,或者保证触发时间间隔比两个序列中较长序列 的时间长。 如果注入触发事件发生在中断了规则转换的注入转换期间,则这个触发事件将会被忽略,例如下 图描述的第2次触发的情况。 图12-13 触发事件发生在注入转换期间 1st trigger 3rd trigger ADC1 rule conversion CH0 CH1 CH2 CH2 CH3 CH3 CH4 ADC1 injection conversion CH0 CH0 ADC2 rule conversion CH3 CH5 CH6 CH6 CH7 CH7 CH8 ADC2 injection CH0 conversion 2nd trigger 4th trigger 9同步注入模式+交替模式 此模式下,注入转换可以打断交替转换。发生注入事件时,交替转换被打断,注入转换启动,在 V2.4 165

Page 169

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 注入转换结束后,交替转换被恢复。 图12-14 交替转换下触发注入组转换 ADC1 CH0 CH0 CH0 Sample conversion ADC2 CH0 CH0 CH0 CH11 CH12 Trigger CH12 CH11 CH0 CH0 CH0 CH0 注当ADC的预分频系数为4时交替转换恢复后采样间隔不再是均匀的7个ADC时钟改为8个和 6个时钟周期交替。 12.3 寄存器描述 表12-5 ADC1相关寄存器列表 名称 访问地址 描述 复位值 R32_ADC1_STATR 0x40012400 ADC1状态寄存器 0x00000000 R32_ADC1_CTLR1 0x40012404 ADC1控制寄存器1 0x00000000 R32_ADC1_CTLR2 0x40012408 ADC1控制寄存器2 0x00000000 R32_ADC1_SAMPTR1 0x4001240C ADC1采样时间配置寄存器1 0x00000000 R32_ADC1_SAMPTR2 0x40012410 ADC1采样时间配置寄存器2 0x00000000 R32_ADC1_IOFR1 0x40012414 ADC1注入通道数据偏移寄存器1 0x00000000 R32_ADC1_IOFR2 0x40012418 ADC1注入通道数据偏移寄存器2 0x00000000 R32_ADC1_IOFR3 0x4001241C ADC1注入通道数据偏移寄存器3 0x00000000 R32_ADC1_IOFR4 0x40012420 ADC1注入通道数据偏移寄存器4 0x00000000 R32_ADC1_WDHTR 0x40012424 ADC1看门狗高阈值寄存器 0x00000FFF R32_ADC1_WDLTR 0x40012428 ADC1看门狗低阈值寄存器 0x00000000 R32_ADC1_RSQR1 0x4001242C ADC1规则通道序列寄存器1 0x00000000 R32_ADC1_RSQR2 0x40012430 ADC1规则通道序列寄存器2 0x00000000 R32_ADC1_RSQR3 0x40012434 ADC1规则通道序列寄存器3 0x00000000 R32_ADC1_ISQR 0x40012438 ADC1注入通道序列寄存器 0x00000000 R32_ADC1_IDATAR1 0x4001243C ADC1注入数据寄存器1 0x00000000 R32_ADC1_IDATAR2 0x40012440 ADC1注入数据寄存器2 0x00000000 R32_ADC1_IDATAR3 0x40012444 ADC1注入数据寄存器3 0x00000000 R32_ADC1_IDATAR4 0x40012448 ADC1注入数据寄存器4 0x00000000 R32_ADC1_RDATAR 0x4001244C ADC1规则数据寄存器 0x00000000 R32_ADC1_AUX 0x40012454 ADC1采样时间寄存器 0x00000000 表12-6 ADC2相关寄存器列表 名称 访问地址 描述 复位值 R32_ADC2_STATR 0x40012800 ADC2状态寄存器 0x00000000 R32_ADC2_CTLR1 0x40012804 ADC2控制寄存器1 0x00000000 R32_ADC2_CTLR2 0x40012808 ADC2控制寄存器2 0x00000000 R32_ADC2_SAMPTR1 0x4001280C ADC2采样时间配置寄存器1 0x00000000 V2.4 166

Page 170

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R32_ADC2_SAMPTR2 0x40012810 ADC2采样时间配置寄存器2 0x00000000 R32_ADC2_IOFR1 0x40012814 ADC2注入通道数据偏移寄存器1 0x00000000 R32_ADC2_IOFR2 0x40012818 ADC2注入通道数据偏移寄存器2 0x00000000 R32_ADC2_IOFR3 0x4001281C ADC2注入通道数据偏移寄存器3 0x00000000 R32_ADC2_IOFR4 0x40012820 ADC2注入通道数据偏移寄存器4 0x00000000 R32_ADC2_WDHTR 0x40012824 ADC2看门狗高阈值寄存器 0x00000FFF R32_ADC2_WDLTR 0x40012828 ADC2看门狗低阈值寄存器 0x00000000 R32_ADC2_RSQR1 0x4001282C ADC2规则通道序列寄存器1 0x00000000 R32_ADC2_RSQR2 0x40012830 ADC2规则通道序列寄存器2 0x00000000 R32_ADC2_RSQR3 0x40012834 ADC2规则通道序列寄存器3 0x00000000 R32_ADC2_ISQR 0x40012838 ADC2注入通道序列寄存器 0x00000000 R32_ADC2_IDATAR1 0x4001283C ADC2注入数据寄存器1 0x00000000 R32_ADC2_IDATAR2 0x40012840 ADC2注入数据寄存器2 0x00000000 R32_ADC2_IDATAR3 0x40012844 ADC2注入数据寄存器3 0x00000000 R32_ADC2_IDATAR4 0x40012848 ADC2注入数据寄存器4 0x00000000 R32_ADC2_RDATAR 0x4001284C ADC2规则数据寄存器 0x00000000 R32_ADC2_AUX 0x40012854 ADC2采样时间寄存器 0x00000000 12.3.1 ADCx 状态寄存器ADCx_STATRx=1/2 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved STRT JSTRT JEOC EOC AWD 位 名称 访问 描述 复位值 [31:5] Reserved RO 保留。 0 规则通道转换开始状态: 0规则通道转换未开始 4 STRT RW0 0 1规则通道转换已开始。 该位由硬件置1由软件清0写1无效。 注入通道转换开始状态: 0注入通道转换未开始 3 JSTRT RW0 0 1注入通道转换已开始。 该位由硬件置1由软件清0写1无效。 注入通道组转换结束状态: 0转换未完成 2 JEOC RW0 1转换完成。 0 该位由硬件置1所有注入通道转换完由软件清0 写1无效。 转换结束状态: 0转换未完成 1 EOC RW0 0 1转换完成。 该位由硬件置1规则或注入通道组转换结束由软 V2.4 167

Page 171

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 件清0写1无效或读ADC_RDATAR时清除。 模拟看门狗标志位: 0没有发生模拟看门狗事件 0 AWD RW0 1发生模拟看门狗事件。 0 该位由硬件置1转换值超出ADC_WDHTR和ADC_WDLTR 寄存器范围由软件清0写1无效。 12.3.2 ADCx 控制寄存器 1ADCx_CTLR1x=1/2 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 BUF TKI Reserved PGA[1:0] TKENABLE AWDEN JAWDEN Reserved DUALMOD[3:0] EN TUNE 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 JDISC DISC AWD JEOC EOC DISCNUM[2:0] JAUTO SCAN AWDIE AWDCH[4:0] EN EN SGL IE IE 位 名称 访问 描述 复位值 [31:29] Reserved RO 保留。 0 ADC通道增益配置 00x1 01x4 [28:27] PGA[1:0] RW 10x16 00b 11x64。 注:输入增益可调,可实现小信号放大采样。使用此功 能需开启ADC_Buffer。 ADC BUFFER使能 0关闭输入Buffer 1使能输入Buffer。 注需要开启buffer的情况 1.当TKENABLE位或TSVREFE位置1buffer默认开启不 可关闭故在这两种情况下ADC校准需在TKENABLE 26 BUFEN RW 位或TSVREFE位置1之前且buffer需要关闭。 0 2.当外部输入阻抗大于最大输入阻抗要求,可开启 buffer以改善ADC采集数据此时ADC的采样时间不建 议小于7.5T),外部输入阻抗详见 CH32F203DS0/CH32F208DS0/CH32V203DS0/CH32V208DS 0数据手册表4-28 CH32V307DS0/CH32F207DS0数据手 册表4-41。具体操作可参考EVT相关例程。 TKEY模块充电电流配置 25 TKITUNE RW 0充电电流为35uA 0 1充电电流减半。 TKEY模块使能控制包括TKEY_F和TKEY_V单元 24 TKENABLE RW 0关闭TKEY模块 0 1开启TKEY模块。 V2.4 168

Page 172

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 在规则通道上模拟看门狗功能使能位: 23 AWDEN RW 0规则通道上关闭模拟看门狗 0 1规则通道上使能模拟看门狗。 在注入通道上模拟看门狗功能使能位: 22 JAWDEN RW 0注入通道上关闭模拟看门狗 0 1注入通道上使能模拟看门狗。 [21:20] Reserved RO 保留。 0 双重模式选择。 0000独立模式 0001同步规则+同步注入模式 0010同步规则+交替触发模式 0011同步注入+快速交替模式 0100同步注入+慢速交替模式 [19:16] DUALMOD[3:0] RW 0101同步注入模式 0000b 0110同步规则模式 0111快速交替模式 1000慢速交替模式 1001交替触发模式 注ADC2中这些位为保留位任何配置位的修改应在 双重模式关闭的情况下进行。 间断模式下,外部触发后要转换的规则通道数目: 0001个通道 [15:13] DISCNUM[2:0] RW 000b … 1118个通道。 注入通道上的间断模式使能位: 12 JDISCEN RW 0关闭注入通道上的间断模式 0 1使能注入通道上的间断模式。 规则通道上的间断模式使能位: 11 DISCEN RW 0关闭规则通道上的间断模式 0 1使能规则通道上的间断模式。 开启规则通道完成后,自动转换注入通道组使能位: 0关闭自动的注入通道组转换 10 JAUTO RW 0 1使能自动的注入通道组转换。 注:此模式需要禁止注入通道的外部触发功能。 扫描模式下,在单一通道上使用模拟看门狗使能位: 9 AWDSGL RW 0在所有通道上使用模拟看门狗 0 1在单一通道上使用模拟看门狗AWDCH[4:0]选择)。 扫描模式使能位: 0关闭扫描模式 8 SCAN RW 0 1使能扫描模式连续转换 ADC_IOFRx和 ADC_RSQRx 选择的所有通道)。 注入通道组转换结束中断使能位: 7 JEOCIE RW 0关闭注入通道组转换完成中断 0 1使能注入通道组转换完成中断JEOC标志。 模拟看门狗中断使能位: 6 AWDIE RW 0 0关闭模拟看门狗中断 V2.4 169

Page 173

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1使能模拟看门狗中断。 注:在扫描模式下,如果发生此中断将中止扫描。 转换结束(规则或注入通道组)中断使能位: 5 EOCIE RW 0关闭转换结束中断 0 1使能转换结束中断EOC标志。 模拟看门狗通道选择位: 00000模拟输入通道0 [4:0] AWDCH[4:0] RW 00001模拟输入通道1 00000b … 10001模拟输入通道17。 12.3.3 ADCx 控制寄存器 2ADCx_CTLR2x=1/2 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TS SW JSW EXT Reser Reserved EXTSEL[2:0] VREFE START START TRIG ved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 JEXT RST JEXTSEL[2:0] ALIGN Reserved DMA Reserved CAL CONT ADON TRIG CAL 位 名称 访问 描述 复位值 [31:24] Reserved RO 保留。 0 温度传感器和内部电压V )通道使能位: REFINT 0禁止温度传感器和V 通道; 23 TSVREFE RW REFINT 0 1使能温度传感器和V 通道。 REFINT 注该位仅适用于ADC1。 启动一个规则通道转换,需要设置软件触发: 0复位状态 22 SWSTART RW 0 1启动规则通道转换。 此位由软件置位转换开始后硬件清0。 启动一个注入通道转换,需要设置软件触发: 0复位状态 21 JSWSTART RW 0 1启动注入通道转换。 此位由软件置位转换开始后硬件清0或者软件清0。 规则通道的外部触发转换模式使能: 20 EXTTRIG RW 0关闭外部事件启动功能 0 1使用外部事件启动转换。 启动规则通道转换的外部触发事件选择: 000定时器1的CC1事件 001定时器1的CC2事件 010定时器1的CC3事件 [19:17] EXTSEL[2:0] RW 000b 011定时器2的CC2事件 100定时器3的TRGO事件 101定时器4的CC4事件 110EXTI线11/定时器8的TRGO事件 V2.4 170

Page 174

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 111SWSTART软件触发。 注仅大容量产品中具有定时器8的TRGO事件 16 Reserved RO 保留。 0 注入通道的外部触发转换模式使能: 15 JEXTTRIG RW 0关闭外部事件启动功能 0 1使用外部事件启动转换。 启动注入通道转换的外部触发事件选择: 000定时器1的TRGO事件 001定时器1的CC4事件 010定时器2的TRGO事件 011定时器2的CC1事件 [14:12] JEXTSEL[2:0] RW 000b 100定时器3的CC4事件 101定时器4的TRGO事件 110EXTI线15/定时器8的CC4事件 111JSWSTART软件触发。 注仅大容量产品中具有定时器8的CC4事件 数据对齐方式: 11 ALIGN RW 0 0右对齐 1左对齐。 [10:9] Reserved RO 保留。 0 直接存储访问DMA模式使能 8 DMA RW 0关闭DMA模式 0 1使能DMA模式。 [7:4] Reserved RO 保留。 0 复位校准此位由软件置位复位完成后由硬件清0 0校准寄存器已初始化 3 RSTCAL RW 1初始化校准寄存器。 0 注如果正在进行转换时设置RSTCAL清除校准寄存 器需要额外的周期。 A/D校准该位由软件置位校准结束时由硬件清0。 2 CAL RW 0校准完成 0 1开始校准。 连续转换使能: 0单次转换模式 1 CONT RW 0 1连续转换模式。 如果设置了此位,则转换将连续进行直到该位被清除。 开/关A/D转换器 当该位为 0 时,写入 1 将把 ADC 从断电模式下唤醒; 当该位为1时写入1将启动转换。 0 ADON RW 0关闭ADC转换/校准,并进入断电模式; 0 1开启ADC并启动转换。 注当寄存器只有ADON改变时才会启动一次转换 如果还有其他任意位发送变化,则不会启动新的转换。 12.3.4 ADCx 采样时间配置寄存器 1ADCx_SAMPTR1x=1/2 偏移地址0x0C V2.4 171

Page 175

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved SMP17[2:0] SMP16[2:0] SMP15[2:1] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SMP15[0] SMP14[2:0] SMP13[2:0] SMP12[2:0] SMP11[2:0] SMP10[2:0] 位 名称 访问 描述 复位值 [31:24] Reserved RO 保留。 0 SMPx[2:0]通道x的采样时间配置 0001.5周期; 0017.5周期; 01013.5周期; 01128.5周期; 10041.5周期; 10155.5周期; 11071.5周期; 111239.5周期; SMPx[2:0]:置 ADC_SMP_SELx 位时,通道 x 的采样时 间配置(仅适用于 CH32F20x_D8、CH32F20x_D8C、 [23:0] SMPx[2:0] RW CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C批号倒数 000b 第六位不为0的产品 0001.5周期; 0017.5周期; 01013.5周期; 01128.5周期; 1002.5周期; 1013.5周期; 1104.5周期; 1115.5周期; 这些位用于独立地选择每个通道的采样时间,在采样 周期中通道配置值必须保持不变。 12.3.5 ADCx 采样时间配置寄存器 2ADCx_SAMPTR2x=1/2 偏移地址0x10 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved SMP9[2:0] SMP8[2:0] SMP7[2:0] SMP6[2:0] SMP5[2:1] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SMP5[0] SMP4[2:0] SMP3[2:0] SMP2[2:0] SMP1[2:0] SMP0[2:0] 位 名称 访问 描述 复位值 [31:30] Reserved RO 保留。 0 SMPx[2:0]通道x的采样时间配置 0001.5周期; 0017.5周期; 01013.5周期; 01128.5周期; 10041.5周期; 10155.5周期; 11071.5周期; 111239.5周期; [29:0] SMPx[2:0] RW SMPx[2:0]:置 ADC_SMP_SELx 位时,通道 x 的采样时 000b 间配置(仅适用于 CH32F20x_D8、CH32F20x_D8C、 CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C批号倒数 第六位不为0的产品 0001.5周期; 0017.5周期; 01013.5周期; 01128.5周期; V2.4 172

Page 176

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1002.5周期; 1013.5周期; 1104.5周期; 1115.5周期; 这些位用于独立地选择每个通道的采样时间,在采样 周期中通道配置值必须保持不变。 12.3.6 ADCy 注入通道数据偏移寄存器 xADCy_IOFRxy=1/2x=1/2/3/4 偏移地址0x14 + x-1*4 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved JOFFSETx[11:0] 位 名称 访问 描述 复位值 [31:12] Reserved RO 保留。 0 注入通道x的数据偏移值。 转换注入通道时,这个值定义了用于从原始转换数据 [11:0] JOFFSETx[11:0] RW 0 中减去的数值。转换的结果可以在 ADC_IDATARx 寄存 器中读出。 12.3.7 ADCx 看门狗高阈值寄存器ADCx_WDHTRx=1/2 偏移地址0x24 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved HT[11:0] 位 名称 访问 描述 复位值 [31:12] Reserved RO 保留。 0 [11:0] HT[11:0] RW 模拟看门狗高阈值设置值。 FFFh 注可以在转换过程中更改WDHTR和WDLTR的值但它们将在下次转换时生效。 12.3.8 ADCx 看门狗低阈值寄存器ADCx_WDLTRx=1/2 偏移地址0x28 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved LT[11:0] 位 名称 访问 描述 复位值 [31:12] Reserved RO 保留。 0 [11:0] LT[11:0] RW 模拟看门狗低阈值设置值。 0 V2.4 173

Page 177

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn可以在转换过程中更改WDHTR和WDLTR的值但它们将在下次转换时生效。 12.3.9 ADCx 规则通道序列寄存器 1ADCx_RSQR1x=1/2 偏移地址0x2C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved L[3:0] RSQ16[4:1] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SQ16[0] SQ15[4:0] SQ14[4:0] SQ13[4:0] 位 名称 访问 描述 复位值 [31:24] Reserved RO 保留。 0 规则通道转换序列中需要转换的通道数目: [23:20] L[3:0] RW 0 0000-11111-16个转换。 [19:15] SQ16[4:0] RW 规则序列中的第16个转换通道的编号0-17。 0 [14:10] SQ15[4:0] RW 规则序列中的第15个转换通道的编号0-17。 0 [9:5] SQ14[4:0] RW 规则序列中的第14个转换通道的编号0-17。 0 [4:0] SQ13[4:0] RW 规则序列中的第13个转换通道的编号0-17。 0 12.3.10 ADCx 规则通道序列寄存器 2ADCx_RSQR2x=1/2 偏移地址0x30 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved SQ12[4:0] SQ11[4:0] SQ10[4:1] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SQ10[0] SQ9[4:0] SQ8[4:0] SQ7[4:0] 位 名称 访问 描述 复位值 [31:30] Reserved RO 保留。 0 [29:25] SQ12[4:0] RW 规则序列中的第12个转换通道的编号0-17。 0 [24:20] SQ11[4:0] RW 规则序列中的第11个转换通道的编号0-17。 0 [19:15] SQ10[4:0] RW 规则序列中的第10个转换通道的编号0-17。 0 [14:10] SQ9[4:0] RW 规则序列中的第9个转换通道的编号0-17。 0 [9:5] SQ8[4:0] RW 规则序列中的第8个转换通道的编号0-17。 0 [4:0] SQ7[4:0] RW 规则序列中的第7个转换通道的编号0-17。 0 12.3.11 ADCx 规则通道序列寄存器 3ADCx_RSQR3x=1/2 偏移地址0x34 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved SQ6[4:0] SQ5[4:0] SQ4[4:1] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SQ4[0] SQ3[4:0] SQ2[4:0] SQ1[4:0] V2.4 174

Page 178

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 [31:30] Reserved RO 保留。 0 [29:25] SQ6[4:0] RW 规则序列中的第6个转换通道的编号0-17。 0 [24:20] SQ5[4:0] RW 规则序列中的第5个转换通道的编号0-17。 0 [19:15] SQ4[4:0] RW 规则序列中的第4个转换通道的编号0-17。 0 [14:10] SQ3[4:0] RW 规则序列中的第3个转换通道的编号0-17。 0 [9:5] SQ2[4:0] RW 规则序列中的第2个转换通道的编号0-17。 0 [4:0] SQ1[4:0] RW 规则序列中的第1个转换通道的编号0-17。 0 12.3.12 ADCx 注入通道序列寄存器ADCx_ISQRx=1/2 偏移地址0x38 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved JL[1:0] JSQ4[4:1] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 JSQ4[0] JSQ3[4:0] JSQ2[4:0] JSQ1[4:0] 位 名称 访问 描述 复位值 [31:22] Reserved RO 保留。 0 注入通道转换序列中需要转换的通道数目: [21:20] JL[1:0] RW 0 00-111-4个转换。 注入序列中的第4个转换通道的编号0-17。 [19:15] JSQ4[4:0] RW 注软件写入并将通道编号0-17分配为要转换的 0 序列中的第4个。 [14:10] JSQ3[4:0] RW 注入序列中的第3个转换通道的编号0-17。 0 [9:5] JSQ2[4:0] RW 注入序列中的第2个转换通道的编号0-17。 0 [4:0] JSQ1[4:0] RW 注入序列中的第1个转换通道的编号0-17。 0 注不同于规则转换序列如果JL[1:0]的长度小于4则转换的序列顺序是从4-JL开始。 例如当JL[1:0]=3定序器中有4次注入转换ADC将按以下顺序转换通道JSQ1[4:0]、JSQ2[4:0]、 JSQ3[4:0]和JSQ4[4:0] 当JL[1:0]=2定序器中有3次注入转换ADC将按以下顺序转换通道JSQ2[4:0]、JSQ3[4:0] 和JSQ4[4:0] 当JL[1:0]=1定序器中有2次注入转换ADC转换通道的顺序为先是JSQ3[4:0]后是JSQ4[4:0] 当JL[1:0]=0定序器中有1次注入转换ADC将仅转换JSQ4[4:0]通道。 如果ADCx_ISQR[21:0]=10 00111 00011 00111 00010ADC将按以下顺序转换通道JSQ2[4:0]、 JSQ3[4:0]和JSQ4[4:0]表示扫描转换按以下通道顺序进行7、3、7。 12.3.13 ADCy 注入数据寄存器 xADCy_IDATARxy=1/2x=1/2/3/4 偏移地址0x3C + x-1*4 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 JDATA[15:0] 位 名称 访问 描述 复位值 V2.4 175

Page 179

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [31:16] Reserved RO 保留。 0 [15:0] JDATA[15:0] RO 注入通道转换数据(数据左对齐或右对齐)。 0 12.3.14 ADCx 规则数据寄存器ADCx_RDATARx=1/2 偏移地址0x4C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ADC2DATA[15:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATA[15:0] 位 名称 访问 描述 复位值 ADC2转换的数据 在 ADC1 中:双模式下,这些位包含了 ADC2 转换的规 [31:16] ADC2DATA[15:0] RO 0 则通道数据。 在ADC2中不使用这些位。 [15:0] DATA[15:0] RO 规则通道转换数据(数据左对齐或右对齐)。 0 12.3.15 ADCx 采样时间寄存器ADCx_AUXx=1/2 偏移地址0x54 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ADC_S ADC_S Reserved MP_SE MP_SE L17 L16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADC_SADC_SADC_SADC_S ADC_S ADC_S ADC_S ADC_S ADC_S ADC_S ADC_S ADC_S ADC_S ADC_S ADC_S ADC_S MP_SEMP_SEMP_SEMP_SE MP_SE MP_SE MP_SE MP_SE MP_SE MP_SE MP_SE MP_SE MP_SE MP_SE MP_SE MP_SE L15 L14 L13 L12 L11 L10 L9 L8 L7 L6 L5 L4 L3 L2 L1 L0 位 名称 访问 描述 复位值 [31:18] Reserved R0 保留。 0 x=0-17通道x的采样时间可选使能位仅在SMPx为 100-111 0采样时间为对应SMPx配置周期 [17:0] ADC_SMP_SELx RW 1SMPx=100采样时间2.5个周期; 0 SMPx=101采样时间3.5个周期; SMPx=110采样时间4.5个周期; SMPx=111采样时间5.5个周期。 注ADCx_AUX寄存器仅适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、 CH32V31x_D8C批号倒数第六位不为0的产品。 V2.4 176

Page 180

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 13 章 触摸按键检测TKEY 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 触摸检测控制TKEY单元借助ADC模块的电压转换功能通过将电容量转换为电压量进行采 样,实现触摸按键检测功能。检测通道复用 ADC 的 16 个外部通道,通过 ADC模块的单次转换模式实 现触摸按键检测。 13.1 TKEY 功能描述  TKEY开启 TKEY检测过程需要ADC模块配合进行所以使用TKEY功能时需要保证ADC模块处于上电状 态ADON=1然后将ADC_CTLR1寄存器的TKENABLE位置1打开TKEY单元功能且可以通过 TKITUNE位调整TKEY模块的充电电流。 TKEY只支持单次单通道转换模式将待转换的通道配置到ADC模块的规则组序列第一个软件 启动转换写TKEY_ACT_DCG寄存器。 注不进行TKEY转换时仍然可以保留ADC通道配置转换功能。 图13-1 TKEY工作时序图 TKENABLE TKCLK Entire sampling period TKACT First conversion Next conversion t TKDISCHG DISCHG t TKCHG CHG t STAB ADCACT ADC conversion period EOC ADC power up Software clear interrupt bit  可编程采样时间 TKEY 单元转换需要先使用若干个 ADCCLK 时钟周期t )进行放电,然后再通过若干个 DISCHG ADCCLK 周期t )对通道进行充电进行电压采样,充电周期数为 TKEY_CHARGE1 和 TKEY_CHARGE2 CHG 寄存器中的TKCGx[2:0]配置值加上TKEY_CHGOFFSET偏移量之和每个通道可以分别用不同的充电周 期来调整采样电压。 13.2 TKEY 操作步骤 TKEY检测属于ADC模块下的扩展功能其工作原理是通过“触摸”和“非触摸”方式让硬件通道 感知的电容量发生变化,进而通过可设置的充放电周期数将电容量的变化转换为电压的变化,最后通 过ADC模块转换为数字值。 采样时,需要将 ADC 配置为单次单通道工作模式,由 TKEY_ACT 寄存器的“写操作”启动一次转 换,具体流程如下: 1 初始化ADC功能配置ADC模块为单次转换模块置ACON位为1唤醒ADC模块。将ADC_CTLR1 寄存器的TKENABLE位置1打开TKEY单元。 V2.4 177

Page 181

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 2 设置要转换的通道将通道号写入ADC规则组序列中第一个转换位置ADC_RSQR3[4:0]),设置 L[3:0]为1。 3 设置通道的充电采样时间写TKEY_CHARGEx寄存器可为每个通道配置不同的充电时间。 4 写TKEY_CHGOFFSET寄存器设置通道的充电时间偏移量低八位有效以调整充电时间。 5 写TKEY_ACT_DCG寄存器设置放电时间低八位有效并启动一次TKEY的采样和转换。 6 等待ADC状态寄存器的EOC转换结束标志位置1读取ADC_DR寄存器得到此次转换值。 7 如果需要进行下次转换,重复 2-6 步骤。如果不需修改通道充电采样时间,可省略步骤 3 或 4。 13.3 TKEY 寄存器描述 表13-1 TKEY1相关寄存器列表 名称 访问地址 描述 复位值 R32_TKEY1_CHARGE1 0x4001240C TKEY充电采样时间寄存器1 0x00000000 R32_TKEY1_CHARGE2 0x40012410 TKEY充电采样时间寄存器2 0x00000000 R32_TKEY1_CHGOFFSET 0x4001243C TKEY充电时间偏移量寄存器 0x00000000 R32_TKEY1_ACT_DCG 0x4001244C TKEY启动和放电时间寄存器 0x00000000 R32_TKEY1_DR 0x4001244C TKEY数据寄存器 0x00000000 表13-2 TKEY2相关寄存器列表 名称 访问地址 描述 复位值 R32_TKEY2_CHARGE1 0x4001280C TKEY充电采样时间寄存器1 0x00000000 R32_TKEY2_CHARGE2 0x40012810 TKEY充电采样时间寄存器2 0x00000000 R32_TKEY2_CHGOFFSET 0x4001283C TKEY充电时间偏移量寄存器 0x00000000 R32_TKEY2_ACT_DCG 0x4001284C TKEY启动和放电时间寄存器 0x00000000 R32_TKEY2_DR 0x4001284C TKEY数据寄存器 0x00000000 13.3.1 TKEYx 充电采样时间寄存器 1TKEYx_CHARGE1x=1/2 偏移地址0x0C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved TKCG17[2:0] TKCG16[2:0] TKCG15[2:1] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TKCG15 TKCG14[2:0] TKCG13[2:0] TKCG12[2:0] TKCG11[2:0] TKCG10[2:0] 位 名称 访问 描述 复位值 [31:24] Reserved RO 保留。 0 TKCGx[2:0] x=10-17选择通道x的充电 采样时间 这些为用于独立地选择每个通道的充电时间。 0001.5周期 10041.5周期 [23:0] TKCGx[2:0] RW 000b 0017.5周期 10155.5周期 01013.5周期 11071.5周期 01128.5周期 111239.5周期 时间基准ADC时钟。 注此寄存器映射ADC模块的采样时间寄存器1ADC_SAMPTR1。配置ADC功能时为通道的采用时 V2.4 178

Page 182

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn配置TKEY功能时为通道充电时间。 13.3.2 TKEYx 充电采样时间寄存器 2TKEYx_CHARGE2x=1/2 偏移地址0x10 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved TKCG9[2:0] TKCG8[2:0] TKCG7[2:0] TKCG6[2:0] TKCG5[2:1] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TKCG5 TKCG4[2:0] TKCG3[2:0] TKCG2[2:0] TKCG1[2:0] TKCG0[2:0] 位 名称 访问 描述 复位值 [31:30] Reserved RO 保留。 0 TKCGx[2:0] x=0-9选择通道x的充电采 样时间 这些为用于独立地选择每个通道的充电时间。 0001.5周期 10041.5周期 [29:0] TKCGx[2:0] RW 000b 0017.5周期 10155.5周期 01013.5周期 11071.5周期 01128.5周期 111239.5周期 时间基准ADC时钟。 注此寄存器映射ADC模块的采样时间寄存器1ADC_SAMPTR2。配置ADC功能时为通道的采用时 间配置TKEY功能时为通道充电时间。 13.3.3 TKEYx 充电时间偏移量寄存器TKEYx_CHGOFFSETx=1/2 偏移地址0x3C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved TKCGOFFSET[7:0] 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留。 0 TKEY充电时间偏移量配置值。 [7:0] TKCGOFFSET[7:0] WO 0 总充电时间TCHG=TKCGOFFSET+ TKCGx 注此寄存器映射ADC模块的注入数据寄存器1ADC_IDATAR1。因此当该地址寄存器进行“写操 作”时作为TKEY充电时间偏移量TKEY_ CHGOFFSET执行进行“读操作”时作为ADC模块的 注入数据寄存器1ADC_IDATAR1执行。 V2.4 179

Page 183

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 13.3.4 TKEYx 启动和放电时间寄存器TKEYx_ACT_DCGx=1/2 偏移地址0x4C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved TKACT_DCG[7:0] 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留。 0 [7:0] TKACT_DCG[7:0] WO 写放电时间并启动一次TKEY通道检测。 0 注此寄存器映射ADC模块的规则数据寄存器ADC_RDATAR。 13.3.5 TKEYx 数据寄存器TKEYx_DRx=1/2 偏移地址0x4C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATA[15:0] 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 [15:0] DATA[15:0] RO 转换的数据。 0 注此寄存器映射ADC模块的规则数据寄存器ADC_RDATAR。 V2.4 180

Page 184

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 14 章 高级定时器ADTM 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 高级定时器模块包含一个功能强大的 16 位自动重装定时器TIM1、TIM8、TIM9 和 TIM10可 用于测量脉冲宽度或产生脉冲、PWM波等。用于电机控制、电源等领域。 14.1 主要特征 高级定时器TIM1/8/9/10的主要特征包括  16位自动重装计数器支持增计数模式减计数模式和增减计数模式  16位预分频器分频系数从165536之间动态可调  支持四路独立的比较捕获通道;  每路比较捕获通道支持多种工作模式比如输入捕获输出比较PWM生成和单脉冲输出  支持可编程死区时间的互补输出;  支持外部信号控制定时器;  支持使用重复计数器在确定周期后更新定时器;  支持使用刹车信号将定时器复位或置其于确定状态;  支持在多种模式下使用DMA  支持增量式编码器;  支持定时器之间的级联和同步 14.2 原理和结构 本节主要论述高级定时器的内部构造。 14.2.1 概述 如图14-1高级定时器的结构大致可以分为三部分即输入时钟部分核心计数器部分和比较捕 获通道部分。 高级定时器的时钟可以来自于PB总线时钟CK_INT可以来自外部时钟输入引脚TIMx_ETR 亦可以来自于其他具有时钟输出功能的定时器ITRx还可以来自于比较捕获通道的输入端 TIMx_CHx。这些输入的时钟信号经过各种设定的滤波分频等操作后成为 CK_PSC 时钟,输出给核 心计数器部分。另外,这些复杂的时钟来源还可以作为 TRGO 输出给其他的定时器、ADC 和 DAC 等外 设。 高级定时器的核心是一个16位计数器CNT。CK_PSC经过预分频器PSC分频后成为CK_CNT 并输出给CNTCNT支持增计数模式、减计数模式和增减计数模式并有一个自动重装值寄存器ATRLR 在每个计数周期结束后为CNT重装载初始值。另外还有个辅助计数器在一旁计数ATRLR为CNT重装载 初值的次数当次数达到重复计数值寄存器RPTCR里设置的次数时可以产生特定事件。 高级定时器拥有四组比较捕获通道,每组比较捕获通道都可以从专属的引脚上输入脉冲,也可以 向引脚输出波形,即比较捕获通道支持输入和输出模式。比较捕获寄存器每个通道的输入都支持滤波、 分频和边沿检测等操作并支持通道间的互触发还能为核心计数器CNT提供时钟。每个比较捕获通 道都拥有一组比较捕获寄存器CHxCVR支持与主计数器CNT进行比较而输出脉冲。 V2.4 181

Page 185

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图14-1 高级定时器的结构框图 V2.4 182 RTE_xMIT Internal clock(CK_INT) CK_TIMx from RCC ETR Polarity selection & ETRF co T n r t i r g o g l e l r e r Edge detector & Prescaler ETRP TRGO To other timers Input filter To DAC and ADC ITR0 TGI ITR1 ITR2 TRGI Slave mode controller ITR3 TIF_ED Reset, Enable, UI Up/Down, TI1FP1 Encoder Count REP Register TI2FP2 interface U AutoReload U Register 1CO N1CO 2CO 1HC_xMIT N1HC_xMIT 2HC_xMIT N2HC_xMIT 3HC_xMIT N3HC_xMIT 4HC_xMIT OC2N OC3 N3CO Repetition counter CK_PSC CK_CNT PSC CNT (prescaler) (counter) DTG[7:0]registers CC4I CC4I TI1 Input filter TI1FP1 IC1 IICC11PPSS Capture/Compare OC1REF & Edge detector Prescaler 1 Register TI1FP2 TRC CC3I U CC3I TI2FP1 TI2 Input filter IC2 IC2PS Capture/Compare OC2REF & Edge detector TI2FP2 Prescaler 2 Register TRC CC2I U CC2I TI3FP3 TI3 & I E n d p g u e t d f e i t l e t c e t r o r IC3 Prescaler IC3PS Cap 3 t u R r e e g / i C s o t m e p r are OC3REF TI3FP4 TRC CC1I U CC1I TI4 Input filter TI4FP3 IC4 IC4PS Capture/Compare OC4REF & Edge detector Prescaler 4 Register TI4FP4 TRC U OC4 BRK BI Polarity selection Clock failure event from clock controller CSS (Clock Security System) Interrupt&DMA output Event DTG Output control Legend Preload registers transferred to active registers on U event Reg according to control bit 1HC_xMIT 2HC_xMIT 3HC_xMIT 4HC_xMIT NIKB_xMIT

Page 186

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 14.2.2 时钟输入 图14-2 高级定时器的CK_PSC来源框图 TIMx_SMCR TS[2:0] ITRx 0xx TI1_ED 100 or TI2F or TI1FP1 TI1F or Encoder TI2F_Rising 101 mode TI2 Filter de E t d e g c e tor TI2F_Falling 0 1 T E I2 T F R P F 2 110 111 TRGI External clock ICF[3:0] CC2P mode 1 CK_PSC TIMx_CCMR1 TIMx_CCER ETRF External clock mode 2 ETR 0 ETR pin 1 /1 D ,/ i 2 vi , d /4 e , r /8 E f T D R TS P dow F n i c lt o e u r nter (int C e K r _ n I a N l T clock) I m n o te d r e nal clock ETP ETPS[1:0] ETF[3:0] ECE SMS[2:0] TIMx_SMCR TIMx_SMCR TIMx_SMCR TIMx_SMCR 高级定时器CK_PSC的时钟来源很多可以分为4类 1 外部时钟引脚ETR输入时钟的路线ETR→ETRP→ETRF 2 内部PB时钟输入路线CK_INT 3 来自比较捕获通道引脚TIMx_CHx的路线TIMx_CHx→TIx→TIxFPx此路线也用于编码器模 式; 4 来自内部其他定时器的输入ITRx 通过决定CK_PSC来源的SMS的输入脉冲选择可以将实际的操作分为4类 1 选择内部时钟源CK_INT 2 外部时钟源模式1 3 外部时钟源模式2 4 编码器模式; 上文提到的4种时钟源来源都可通过这4种操作选定。 14.2.2.1 内部时钟源CK_INT 如果将 SMS 域保持 000b 时启动高级定时器那么就是选定内部时钟源CK_INT为时钟。此时 CK_INT就是CK_PSC。 14.2.2.2 外部时钟源模式 1 如果将 SMS域设置为 111b时就会启用外部时钟源模式 1。启用外部时钟源1时TRGI被选定 为CK_PSC的来源值得注意的还需要通过配置TS域来选择TRGI的来源。TS域可选择以下几种脉 冲作为时钟来源: 1 内部触发ITRxx为0123 2 比较捕获通道1经过边沿检测器后的信号TI1F_ED 3 比较捕获通道的信号TI1FP1、TI2FP2 4 来自外部时钟引脚输入的信号ETRF。 14.2.2.3 外部时钟源模式 2 使用外部触发模式2能在外部时钟引脚输入的每一个上升沿或下降沿计数。将ECE位置位时将 使用外部时钟源模式2。使用外部时钟源模式2时ETRF被选定为CK_PSC。ETR引脚经过可选的反相 V2.4 183

Page 187

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cnETP分频器ETPS后成为ETRP再经过滤波器ETF后即成为ETRF。 在ECE位置位且将SMS设为111b时相当于TS选择ETRF为输入。 14.2.2.4 编码器模式 将SMS置为001b010b011b将会启用编码器模式。启用编码器模式可以选择在TI1FP1和TI2FP2 中某一个特定的电平下以另一个跳变沿作为信号进行信号输出。此模式用于外接编码器使用的情况下。 具体功能参考14.3.9节。 14.2.3 计数器和周边 CK_PSC输入给预分频器PSC进行分频。PSC是16位的实际的分频系数相当于R16_TIMx_PSC 的值+1。CK_PSC经过PSC会成为CK_INT。更改R16_TIM1_PSC的值并不会实时生效而会在更新事件 后更新给PSC。更新事件包括UG位清零和复位。定时器的核心是一个16位计数器CNTCK_CNT最 终会输入给 CNTCNT 支持增计数模式、减计数模式和增减计数模式,并有一个自动重装值寄存器 ATRLR在每个计数周期结束后为 CNT 重新装载初始值。另外还有个辅助计数器在一旁记录 ATRLR 为 CNT 重新装载初值的次数当达到重复计数值寄存器RPTCR里设置的次数时可以产生特定事 件。 14.2.4 比较捕获通道和周边 比较捕获通道是定时器实现复杂功能的主要组件,它的核心是比较捕获寄存器,辅以外围输入部 分的数字滤波,分频和通道间复用、输出部分的比较器和输出控制组成。 V2.4 184

Page 188

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图14-3 比较捕获通道的结构框图 TI1F_ED To the slave mode controller TI1 TI1F_Rising Filter TI1F Edge 0 TI1FP1 f DTS downcounter detector TI1F_Falling 1 01 TI2FP1 IC1 Divider 10 /1,/2,/4,/8 ICF[3:0] CC1P/CC1NP TRC TIMx_CCMR1 TIMx_CCER 11 (from slave mode TI2F_Rising controller) 0 (from channel 2) CC1S[1:0] ICPS[1:0] CC1E TI2F_Falling 1 (from channel 2) TIMx_CHCTLR1 TIMx_CCER PB Bus MCU-peripheral interface Capture/compare preload register Capture/compare shadow register 比较捕获通道的结构框图如图14-3所示。信号从通道x引脚输入进来后可选做为TIxTI1的来 源可以不只是CH1见定时器的结构框图14-1TI1经过滤波器ICF[3:0]生成TI1F再经过边 沿检测器分成TI1F_Rising和TI1F_Falling这两个信号经过选择CC1P生成TI1FP1TI1FP1和 来自通道2的TI2FP1一起送给CC1S选择成为IC1经过ICPS分频后送给比较捕获寄存器。 比较捕获寄存器由一个预装载寄存器和一个影子寄存器组成,读写过程仅操作预装载寄存器。在 V2.4 185 8 hgih )tib-61 fi( 8 wol Write CCR1H Read CCR1H write_in_progress S S read_in_progress Write CCR1L Read CCR1L R R Output CC1S[1] capture_transfer compare_transfer mode CC1S[0] Input CC1S[1] mode OC1PE CC1S[0] OC1PE UEV TIM1_CHCTLR1 (from time IC1PS Capture Comparator base unit) CC1E CC1G Counter TIM1_SWEVGR To the master mode controller ETRF 0 Output OC1 enable 0 x0 1 circuit OC1REF OC1REFC 01 CNT > CCR1 Output OC1_DT 11 CC1P mode Output Dead-time TIM1_CCER CNT = CCR1 controller selector generator OC1N_DT 11 10 0 Output OCxREF 0 0x enable OC1N OCxREF 1 circuit CC1NE CC1E TIM1_CCER OC1CEOC1M[3:0] DTG[7:0] CC1NE CC1E CC1NP MOE OSSI OSSR TIM1_CHCTLR1 TIM1_BDTR TIM1_CCER TIM1_CCER TIM1_BDTR

Page 189

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 捕获模式下,捕获发生在影子寄存器上,然后复制到预装载寄存器;在比较模式下,预装载寄存器的 内容被复制到影子寄存器中然后影子寄存器的内容与核心计数器CNT进行比较。 14.3 功能和实现 高级定时器复杂功能的实现都是对定时器的比较捕获通道、时钟输入电路和计数器及周边部分的 操作实现的。定时器的时钟输入可以来自于包括比较捕获通道的输入在内的多个时钟源。对比较捕获 通道和时钟源选择的操作直接决定其功能。比较捕获通道是双向的,可以工作在输入和输出模式。 14.3.1 输入捕获模式 输入捕获模式是定时器的基本功能之一。输入捕获模式的原理是当检测到ICxPS信号上确定的 边沿后则发生捕获事件计数器当前的值会被锁存到比较捕获寄存器R16_TIMx_CHCTLRx中。发 生捕获事件时CCxIF在R16_TIMx_INTFR中被置位如果使能了中断或DMA还会产生相应中断 或DMA。如果发生捕获事件时CCxIF已经被置位了那么CCxOF位会被置位。CCxIF可由软件清除 也可以通过读取比较捕获寄存器由硬件清除。CCxOF由软件清除。 举个通道1的例子来说明使用输入捕获模式的步骤如下 1 配置CCxS域选择ICx信号的来源。比如设为10b选择TI1FP1作为IC1的来源而不可以使 用默认设置CCxS域默认是使比较捕获模块作为输出通道 2 配置ICxF域设定TI信号的数字滤波器。数字滤波器会以确定的频率采样确定的次数再输 出一个跳变。这个采样频率和次数是通过ICxF来确定的 3 配置CCxP位设定TIxFPx的极性。比如保持CC1P位为低选择上升沿跳变 4 配置ICxPS域设定ICx信号成为ICxPS之间的分频系数。比如保持ICxPS为00b不分频 5 配置CCxE位允许捕获核心计数器CNT的值到比较捕获寄存器中。置CC1E位 6 根据需要配置CCxIE和CCxDE位决定是否允许使能中断或DMA。 至此已经将比较捕获通道配置完成。 当TI1输入了一个被捕获的脉冲时核心计数器CNT的值会被记录到比较捕获寄存器中CC1IF 被置位当CC1IF在之前就已经被置位时CCIOF位也会被置位。如果CC1IE位那么会产生一个中 断;如果 CC1DE 被置位,会产生一个 DMA 请求。可以通过写事件产生寄存器TIMx_SWEVGR的方式 由软件产生一个输入捕获事件。 14.3.2 比较输出模式 比较输出模式是定时器的基本功能之一。比较输出模式的原理是在核心计数器CNT的值与比 较捕获寄存器的值一致时输出特定的变化或波形。OCxM 域(在 R16_TIMx_CHCTLRx 中)和 CCxP 位 (在 R16_TIMx_CCER 中)决定输出的是确定的高低电平还是电平翻转。产生比较一致事件时还会置 CCxIF位如果预先置了CCxIE位则会产生一个中断如果预先设置了CCxDE位则会产生一个DMA 请求。 配置为比较输出模式的步骤为下: 1 配置核心计数器CNT的时钟源和自动重装值 2 设置需要对比的计数值到比较捕获寄存器R16_TIMx_CHxCVR 3 如果需要产生中断置CCxIE位 4 保持OCxPE为0禁用比较寄存器的预装载寄存器 5 设定输出模式设置OCxM域和CCxP位 6 使能输出置CCxE位 7 置CEN位启动定时器。 V2.4 186

Page 190

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 14.3.3 强制输出模式 定时器的比较捕获通道的输出模式可以由软件强制输出确定的电平,而不依赖比较捕获寄存器的 影子寄存器和核心计数器的比较。 具体的做法是将OCxM置为100b即为强制将OCxREF置为低或者将OCxM置为101b即为强制 将OCxREF置为高。 需要注意的是,将 OCxM 强制置为 100b 或者 101b内部核心计数器和比较捕获寄存器的比较过 程还在进行相应的标志位还在置位中断和DMA请求还在产生。 14.3.4 PWM 输入模式 PWM输入模式是用来测量PWM的占空比和频率的是输入捕获模式的一种特殊情况。除下列区别 外操作和输入捕获模式相同PWM占用两个比较捕获通道且两个通道的输入极性设为相反其中 一个信号被设为触发输入SMS设为复位模式。 例如测量从TI1输入的PWM波的周期和频率需要进行以下操作 1 将TI1TI1FP1设为IC1信号的输入。将CC1S置为01b 2 将TI1FP1置为上升沿有效。将CC1P保持为0 3 将TI1TI1FP2置为IC2信号的输入。将CC2S置为10b 4 选TI1FP2置为下降沿有效。将CC2P置为1 5 时钟源的来源选择TI1FP1。将TS设为101b 6 将SMS设为复位模式即100b 7 使能输入捕获。CC1E和CC2E置位 这样比较捕获寄存器1的值就是PWM的周期而比较捕获寄存器2的值就是其占空比。 注因只有TI1FP1和TI2FP2连到了从模式控制器所以PWM输入模式只能使用TIMx_CH1/TIMx_CH2。 14.3.5 PWM 输出模式 PWM 输出模式是定时器的基本功能之一。PWM 输出模式最常见的是使用重装值确定 PWM 频率,使 用捕获比较寄存器确定占空比的方法。将 OCxM 域中置 110b 或 111b 使用 PWM 模式 1 或模式 2置 OCxPE 位使能预装载寄存器,最后置 ARPE 位使能预装载寄存器的自动重装载。由于在发生一个更新 事件时,预装载寄存器的值才能被送到影子寄存器,所以在核心计数器开始计数之前,需要置 UG 位 来初始化所有寄存器。在 PWM 模式下,核心计数器和比较捕获寄存器一直在进行比较,根据 CMS 位, 定时器能够输出边沿对齐或中央对齐的PWM信号。  边沿对齐 使用边沿对齐时核心计数器增计数或减计数在PWM模式1的情景下在核心计数器的值大于 比较捕获寄存器时OCxREF为高当核心计数器的值小于比较捕获寄存器时比如核心计数器增长到 R16_TIMx_ATRLR的值而恢复成全0时OCxREF为低。  中央对齐 使用中央对齐模式时核心计数器运行在增计数和减计数交替进行的模式下OCxREF在核心计数 器和比较捕获寄存器的值一致时进行上升和下降的跳变。但比较标志在三种中央对齐模式下,置位的 时机有所不同。在使用中央对齐模式时,最好在启动核心计数器之前产生一个软件更新标志(置 UG 位)。 14.3.6 互补输出和死区 比较捕获通道一般有两个输出引脚比较捕获通道4只有一个输出引脚能输出两个互补的信 号OCx 和 OCxNOCx和 OCxN可以通过 CCxP 和 CCxNP位独立地设置极性通过 CCxE和 CCxNE 独 立地设置输出使能,通过 MOE、OIS、OISN、OSSI、OSSR 位进行死区和其他的控制。同时使能 OCx 和 OCxN输出将插入死区每个通道都有一个10位的死区发生器。如果存在刹车电路则还要设置MOE位。 OCx和OCxN由OCxREF关联产生如果OCx和OCxN都是高有效那么OCx与OCxREF相同只是OCx V2.4 187

Page 191

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 的上升沿相当于 OCxREF 有一个延迟OCxN 与 OCxREF 相反,它的上升沿相对参考信号的下降沿会有 一个延迟,如果延迟大于有效输出宽度,则不会产生相应的脉冲。 如图14-4展示了OCx和OCxN与OCxREF的关系并展示出死区。 图14-4 互补输出和死区 14.3.7 刹车信号 当产生刹车信号时输出使能信号和无效电平都会根据MOE、OIS、OISN、OSSI和OSSR等位进行 修改。但 OCx 和 OCxN 不会在任何时间都处在有效电平。刹车事件源可以来自于刹车输入引脚,也可 以是一个时钟失败事件而时钟失败事件由CSS时钟安全系统产生。 在系统复位后刹车功能被默认禁止MOE位为低置BKE位可以使能刹车功能输入的刹车 信号的极性可以通过设置BKP设置BKE和BKP信号可以被同时写入在真正写入之前会有一个PB时 钟的延迟因此需要等一个PB周期才能正确读出写入值。 在刹车引脚出现选定的电平系统将产生如下动作: 1 MOE位被异步清零根据SOOI位的设置将输出置为无效状态、空闲状态或复位状态 2 在MOE被清零后每一个输出通道输出由OISx确定的电平 3 当使用互补输出时:输出被置于无效状态,具体取决于极性; 4 如果 BIE被置位当 BIF置位会产生一个中断如果设置了 BDE位则会产生一个 DMA请求 5 如果AOE被置位在下一个更新事件UEV时MOE位被自动置位。 14.3.8 单脉冲模式 单脉冲模式可以用于让微控制器响应一个特定的事件,使之在一个延迟之后产生一个脉冲,延迟 和脉冲的宽度可编程。置 OPM 位可以使核心计数器在产生下一个更新事件 UEV 时(计数器翻转到 0 停止。 如图14-5需要在TI2输入引脚上检测到一个上升沿开始延迟Tdelay之后在OC1上产生一 个长度为Tpulse的正脉冲 图14-5 单脉冲的产生 V2.4 188 retnuoC

Page 192

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1 设定TI2为触发。置CC2S域为01b把 TI2FP2映射到 TI2置 CC2P位为 0bTI2FP2设为上升 沿检测置TS域为110bTI2FP2设为触发源置SMS域为110bTI2FP2被用来启动计数器 2 Tdelay 由比较捕获寄存器的的值确定Tpulse 由自动重装值寄存器的值和比较捕获寄存器的值 确定。 14.3.9 编码器模式 编码器模式是定时器的一个典型应用,可以用来接入编码器的双相输出,核心计数器的计数方向 和编码器的转轴方向同步,编码器每输出一个脉冲就会使核心计数器加一或减一。使用编码器的步骤 为将SMS域置为001b只在TI2边沿计数、010b只在TI1边沿计数或011b在TI1和TI2双 边沿计数),将编码器接到比较捕获通道 1、2 的输入端,给重装值寄存器设一个值,这个值可以设 的大一点。在编码器模式时,定时器内部的比较捕获寄存器,预分频器,重复计数寄存器等都正常工 作。下表表明了计数方向和编码器信号的关系。 表14-1 定时器编码器模式的计数方向和编码器信号之间的关系 相对信号 TI1FP1信号边沿 TI2FP2信号 计数有效边沿 的电平 上升沿 下降沿 上升沿 下降沿 高 向下计数 向上计数 仅在TI1边沿计数 不计数 低 向上计数 向下计数 高 向上计数 向下计数 仅在TI2边沿计数 不计数 低 向下计数 向上计数 高 向下计数 向上计数 向上计数 向下计数 在TI1和TI2双边沿计数 低 向上计数 向下计数 向下计数 向上计数 14.3.10 定时器同步模式 定时器能够输出时钟脉冲TRGO也能接收其他定时器的输入ITRx。不同的定时器的ITRx 的来源别的定时器的TRGO是不一样的。定时器内部触发连接如表14-2所示。 表14-2 TIMx内部触发连接 ITR0 ITR1 ITR2 ITR3 从定时器 TS=000 TS=001 TS=010 TS=011 TIM1 TIM5 TIM2 TIM3 TIM4 TIM8 TIM1 TIM2 TIM4 TIM5 TIM9 TIM10 TIM5 TIM6 TIM7 TIM10 TIM9 TIM2 TIM4 TIM5 14.3.11 双边沿捕获模式 可通过TIMx_AUX寄存器对脉冲进行测量。 例如通过通道2来捕获脉冲宽度在捕获功能配置上选择IC2信号的来源TIMx_CHCTLR1寄 存器的 CC2S 位为 11b使能通道 2 的双边沿捕获功能TIMx_AUX 寄存器的 CAP_ED_CH2 位为 1。 至此已经将双边沿捕获配置完成。 可通过TIMx_CH2CVR寄存器的CCR2位读取捕获的双边沿脉冲宽度值。 注仅适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C批号倒数第 六位不为0的产品。 14.3.12 调试模式 当系统进入调试模式时定时器根据DBG模块的设置继续运转或停止。 V2.4 189

Page 193

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 14.4 寄存器描述 表14-3 TIM1相关寄存器列表 名称 访问地址 描述 复位值 R16_TIM1_CTLR1 0x40012C00 控制寄存器1 0x0000 R16_TIM1_CTLR2 0x40012C04 控制寄存器2 0x0000 R16_TIM1_SMCFGR 0x40012C08 从模式控制寄存器 0x0000 R16_TIM1_DMAINTENR 0x40012C0C DMA/中断使能寄存器 0x0000 R16_TIM1_INTFR 0x40012C10 中断状态寄存器 0x0000 R16_TIM1_SWEVGR 0x40012C14 事件产生寄存器 0x0000 R16_TIM1_CHCTLR1 0x40012C18 比较/捕获控制寄存器1 0x0000 R16_TIM1_CHCTLR2 0x40012C1C 比较/捕获控制寄存器2 0x0000 R16_TIM1_CCER 0x40012C20 比较/捕获使能寄存器 0x0000 R16_TIM1_CNT 0x40012C24 计数器 0x0000 R16_TIM1_PSC 0x40012C28 计数时钟预分频器 0x0000 R16_TIM1_ATRLR 0x40012C2C 自动重装值寄存器 0xFFFF R16_TIM1_RPTCR 0x40012C30 重复计数值寄存器 0x0000 R16_TIM1_CH1CVR 0x40012C34 比较/捕获寄存器1 0x0000 R16_TIM1_CH2CVR 0x40012C38 比较/捕获寄存器2 0x0000 R16_TIM1_CH3CVR 0x40012C3C 比较/捕获寄存器3 0x0000 R16_TIM1_CH4CVR 0x40012C40 比较/捕获寄存器4 0x0000 R16_TIM1_BDTR 0x40012C44 刹车和死区寄存器 0x0000 R16_TIM1_DMACFGR 0x40012C48 DMA控制寄存器 0x0000 R16_TIM1_DMAADR 0x40012C4C 连续模式的DMA地址寄存器 0x0000 R16_TIM1_AUX 0x40012C50 双边沿捕获寄存器 0x0000 表14-4 TIM8相关寄存器列表 名称 访问地址 描述 复位值 R16_TIM8_CTLR1 0x40013400 控制寄存器1 0x0000 R16_TIM8_CTLR2 0x40013404 控制寄存器2 0x0000 R16_TIM8_SMCFGR 0x40013408 从模式控制寄存器 0x0000 R16_TIM8_DMAINTENR 0x4001340C DMA/中断使能寄存器 0x0000 R16_TIM8_INTFR 0x40013410 中断状态寄存器 0x0000 R16_TIM8_SWEVGR 0x40013414 事件产生寄存器 0x0000 R16_TIM8_CHCTLR1 0x40013418 比较/捕获控制寄存器1 0x0000 R16_TIM8_CHCTLR2 0x4001341C 比较/捕获控制寄存器2 0x0000 R16_TIM8_CCER 0x40013420 比较/捕获使能寄存器 0x0000 R16_TIM8_CNT 0x40013424 计数器 0x0000 R16_TIM8_PSC 0x40013428 计数时钟预分频器 0x0000 R16_TIM8_ATRLR 0x4001342C 自动重装值寄存器 0xFFFF R16_TIM8_RPTCR 0x40013430 重复计数值寄存器 0x0000 R16_TIM8_CH1CVR 0x40013434 比较/捕获寄存器1 0x0000 R16_TIM8_CH2CVR 0x40013438 比较/捕获寄存器2 0x0000 R16_TIM8_CH3CVR 0x4001343C 比较/捕获寄存器3 0x0000 R16_TIM8_CH4CVR 0x40013440 比较/捕获寄存器4 0x0000 V2.4 190

Page 194

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R16_TIM8_BDTR 0x40013444 刹车和死区寄存器 0x0000 R16_TIM8_DMACFGR 0x40013448 DMA控制寄存器 0x0000 R16_TIM8_DMAADR 0x4001344C 连续模式的DMA地址寄存器 0x0000 R16_TIM8_AUX 0x40013450 双边沿捕获寄存器 0x0000 表14-5 TIM9相关寄存器列表 名称 访问地址 描述 复位值 R16_TIM9_CTLR1 0x40014C00 控制寄存器1 0x0000 R16_TIM9_CTLR2 0x40014C04 控制寄存器2 0x0000 R16_TIM9_SMCFGR 0x40014C08 从模式控制寄存器 0x0000 R16_TIM9_DMAINTENR 0x40014C0C DMA/中断使能寄存器 0x0000 R16_TIM9_INTFR 0x40014C10 中断状态寄存器 0x0000 R16_TIM9_SWEVGR 0x40014C14 事件产生寄存器 0x0000 R16_TIM9_CHCTLR1 0x40014C18 比较/捕获控制寄存器1 0x0000 R16_TIM9_CHCTLR2 0x40014C1C 比较/捕获控制寄存器2 0x0000 R16_TIM9_CCER 0x40014C20 比较/捕获使能寄存器 0x0000 R16_TIM9_CNT 0x40014C24 计数器 0x0000 R16_TIM9_PSC 0x40014C28 计数时钟预分频器 0x0000 R16_TIM9_ATRLR 0x40014C2C 自动重装值寄存器 0xFFFF R16_TIM9_RPTCR 0x40014C30 重复计数值寄存器 0x0000 R16_TIM9_CH1CVR 0x40014C34 比较/捕获寄存器1 0x0000 R16_TIM9_CH2CVR 0x40014C38 比较/捕获寄存器2 0x0000 R16_TIM9_CH3CVR 0x40014C3C 比较/捕获寄存器3 0x0000 R16_TIM9_CH4CVR 0x40014C40 比较/捕获寄存器4 0x0000 R16_TIM9_BDTR 0x40014C44 刹车和死区寄存器 0x0000 R16_TIM9_DMACFGR 0x40014C48 DMA控制寄存器 0x0000 R16_TIM9_DMAADR 0x40014C4C 连续模式的DMA地址寄存器 0x0000 R16_TIM9_AUX 0x40014C50 双边沿捕获寄存器 0x0000 表14-6 TIM10相关寄存器列表 名称 访问地址 描述 复位值 R16_TIM10_CTLR1 0x40015000 控制寄存器1 0x0000 R16_TIM10_CTLR2 0x40015004 控制寄存器2 0x0000 R16_TIM10_SMCFGR 0x40015008 从模式控制寄存器 0x0000 R16_TIM10_DMAINTENR 0x4001500C DMA/中断使能寄存器 0x0000 R16_TIM10_INTFR 0x40015010 中断状态寄存器 0x0000 R16_TIM10_SWEVGR 0x40015014 事件产生寄存器 0x0000 R16_TIM10_CHCTLR1 0x40015018 比较/捕获控制寄存器1 0x0000 R16_TIM10_CHCTLR2 0x4001501C 比较/捕获控制寄存器2 0x0000 R16_TIM10_CCER 0x40015020 比较/捕获使能寄存器 0x0000 R16_TIM10_CNT 0x40015024 计数器 0x0000 R16_TIM10_PSC 0x40015028 计数时钟预分频器 0x0000 R16_TIM10_ATRLR 0x4001502C 自动重装值寄存器 0xFFFF R16_TIM10_RPTCR 0x40015030 重复计数值寄存器 0x0000 V2.4 191

Page 195

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R16_TIM10_CH1CVR 0x40015034 比较/捕获寄存器1 0x0000 R16_TIM10_CH2CVR 0x40015038 比较/捕获寄存器2 0x0000 R16_TIM10_CH3CVR 0x4001503C 比较/捕获寄存器3 0x0000 R16_TIM10_CH4CVR 0x40015040 比较/捕获寄存器4 0x0000 R16_TIM10_BDTR 0x40015044 刹车和死区寄存器 0x0000 R16_TIM10_DMACFGR 0x40015048 DMA控制寄存器 0x0000 R16_TIM10_DMAADR 0x4001504C 连续模式的DMA地址寄存器 0x0000 R16_TIM10_AUX 0x40015050 双边沿捕获寄存器 0x0000 14.4.1 控制寄存器 1TIMx_CTLR1x=1/8/9/10 偏移地址0x00 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved CKD[1:0] ARPE CMS[1:0] DIR OPM URS UDIS CEN 位 名称 访问 描述 复位值 [15:10] Reserved RO 保留。 0 这2位定义在定时器时钟CK_INT频率、死区时 间和由死区发生器与数字滤波器ETRTIx所用 的采样时钟之间的分频比例: [9:8] CKD[1:0] RW 00Tdts=Tck_int 00b 01Tdts = 2 x Tck_int 10Tdts = 4 x Tck_int 11保留。 自动重装预装使能位: 7 ARPE RW 0禁止自动重装值寄存器ATRLR 0 1使能自动重装值寄存器ATRLR。 中央对齐模式选择: 00边沿对齐模式。计数器依据方向位DIR向上 或向下计数。 01中央对齐模式 1。计数器交替地向上和向下计 数。配置为输出的通道CHCTLRx寄存器中CCxS=00 的输出比较中断标志位,只在计数器向下计数时被 设置。 10中央对齐模式 2。计数器交替地向上和向下计 [6:5] CMS[1:0] RW 数。配置为输出的通道CHCTLRx寄存器中CCxS=00 00b 的输出比较中断标志位,只在计数器向上计数时被 设置。 11中央对齐模式 3。计数器交替地向上和向下计 数。配置为输出的通道CHCTLRx寄存器中CCxS=00 的输出比较中断标志位,在计数器向上和向下计数 时均被设置。 注在计数器使能时CEN=1不允许从边沿对齐 模式转换到中央对齐模式。 计数器方向: 4 DIR RW 0 0计数器的计数模式为增计数 V2.4 192

Page 196

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1计数器的计数模式为减计数。 注:当计数器配置为中央对齐模式或编码器模式时, 该位无效。 单脉冲模式: 0在发生下一次更新事件时计数器不停止 3 OPM RW 0 1在发生下一次更新事件时计数器停止清除CEN 位)。 更新请求源软件通过该位选择UEV事件的源。 0如果使能了更新中断或DMA请求则下述任一事 件产生更新中断或DMA请求。 -计数器溢出/下溢 2 URS RW 0 -设置UG位 -从模式控制产生的更新。 1如果使能了更新中断或DMA请求则只有计数器 溢出/下溢才产生更新中断或DMA请求。 禁止更新,软件通过该位允许/禁止 UEV 事件的产 生。 0允许 UEV。更新UEV事件由下述任一事件产 生。 -计数器溢出/下溢 -设置UG位 1 UDIS RW 0 -从模式控制产生的更新 具有缓存的寄存器被装入它们的预装载值。 1禁止 UEV。不产生更新事件各寄存器ARR、 PSC、CHxCVR保持它们的值。如果设置了UG位或 从模式控制器发出了一个硬件复位,则计数器和预 分频器被重新初始化; 使能计数器: 0禁止计数器 1使能计数器。 0 CEN RW 0 注在软件设置了CEN位后外部时钟、门控模式 和编码器模式才能工作。触发模式可以自动地通过 硬件设置CEN位。 14.4.2 控制寄存器 2TIMx_CTLR2x=1/8/9/10 偏移地址0x04 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved OIS4 OIS3N OIS3 OIS2N OIS2 OIS1N OIS1 TI1S MMS[2:0] CCDS CCUS Reserved CCPC 位 名称 访问 描述 复位值 15 Reserved RO 保留。 0 输出空闲状态4 0当MOE=0时如果实施了OC4N则死区后OC4=0 14 OIS4 RW 0 1当MOE=0时如果实施了OC4N则死区后OC4=1。 注已经设置了LOCKTIMx_BDTR寄存器级别1、 V2.4 193

Page 197

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 2或3后该位不能被修改。 输出空闲状态3 0当MOE=0时死区后OC3N=0 13 OIS3N RW 1当MOE=0时死区后OC3N=1。 0 注已经设置了LOCKTIMx_BDTR寄存器级别1、 2或3后该位不能被修改。 12 OIS3 RW 输出空闲状态3参见OIS4。 0 11 OIS2N RW 输出空闲状态2参见OIS3N。 0 10 OIS2 RW 输出空闲状态2参见OIS4。 0 9 OIS1N RW 输出空闲状态1参见OIS3N。 0 8 OIS1 RW 输出空闲状态1参见OIS4。 0 TI1选择 0TIMx_CH1引脚直连到TI1输入 7 TI1S RW 0 1TIMx_CH1、TIMx_CH2和TIMx_CH3引脚经异或后 连到TI1输入。 主模式选择:这 3 位用于选择在主模式下送到从定 时器的同步信息TRGO。 可能的组合如下: 000复位TIMx_EGR寄存器的UG位被用于作为触 发输出TRGO。如果是触发输入产生的复位从 模式控制器处于复位模式则TRGO上的信号相对 实际的复位会有一个延迟; 001使能计数器使能信号CNT_EN被用于作为触 发输出TRGO。有时需要在同一时间启动多个定 时器或控制在一段时间内使能从定时器。计数器使 能信号是通过CEN控制位和门控模式下的触发输入 信号的逻辑或产生。当计数器使能信号受控于触发 输入时TRGO 上会有一个延迟,除非选择了主/从 模式见TIMx_SMCR寄存器中MSM位的描述 [6:4] MMS[2:0] RW 000b 010更新更新事件被选为触发输出TRGO。例 如,一个主定时器的时钟可以被用作一个从定时器 的预分频器; 011比较脉冲在发生一次捕获或一次比较成功 时当要设置CC1IF标志时即使它已经为高 触发输出送出一个正脉冲TRGO 100比较OC1REF 信号被用于作为触发输出 TRGO 101比较OC2REF 信号被用于作为触发输出 TRGO 110比较OC3REF 信号被用于作为触发输出 TRGO 111比较OC4REF 信号被用于作为触发输出 TRGO。 捕获比较的DMA选择 3 CCDS RW 0当发生CHxCVR时产生CHxCVR的DMA请求 0 1当发生更新事件时送出CHxCVR的DMA请求。 V2.4 194

Page 198

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 比较捕获控制更新选择位: 0如果CCPC置位只能通过设置COM位更新它们 2 CCUS RW 1如果CCPC置位可以通过设置COM位或TRGI上 0 的一个上升沿更新它们。 注:该位只对具有互补输出的通道起作用。 1 Reserved RO 保留。 0 比较捕获预装载控制位: 0CCxECCxNE和OCxM位不是预装载的 0 CCPC RW 1CCxECCxNE 和 OCxM 位是预装载的,设置该位 0 后它们只在设置了COM位后被更新。 注:该位只对具有互补输出的通道起作用。 14.4.3 从模式控制寄存器TIMx_SMCFGRx=1/8/9/10 偏移地址0x08 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ETP ECE ETPS[1:0] ETF[3:0] MSM TS[2:0] Reserved SMS[2:0] 位 名称 访问 描述 复位值 ETR 触发极性选择,该位选择是直接输入 ETR 还是 输入ETR的反相。 15 ETP RO 0 0ETR高电平或上升沿有效 1将ETR反相低电平或下降沿有效。 外部时钟模式2启用选择 0禁用外部时钟模式2 1使能外部时钟模式2。 注1从模式可以与外部时钟模式2同时使用复 14 ECE RW 0 位模式门控模式和触发模式但是这时TRGI不 能连到ETRFTS位不能是111。 注2外部时钟模式1和外部时钟模式2同时被使 能时外部时钟的输入是ETRF。 外部触发信号ETRP分频这个信号频率最大不 能超过 TIMxCLK 频率的 1/4可以通过这个域来降 频: [13:12] ETPS[1:0] RW 00关闭预分频 00b 01ETRP频率除以2 10ETRP频率除以4 11ETRP频率除以8。 外部触发滤波,实际上,数字滤波器是一个事件计 数器它使用一定的采样的频率记录到N个事件 后会产生一个输出的跳变。 0000无滤波器以Fdts采样 [11:8] ETF[3:0] RW 0000b 0001采样频率Fsampling=Fck_intN=2 0010采样频率Fsampling=Fck_intN=4 0011采样频率Fsampling=Fck_intN=8 0100采样频率Fsampling=Fdts/2N=6 V2.4 195

Page 199

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0101采样频率Fsampling=Fdts/2N=8 0110采样频率Fsampling=Fdts/4N=6 0111采样频率Fsampling=Fdts/4N=8 1000采样频率Fsampling=Fdts/8N=6 1001采样频率Fsampling=Fdts/8N=8 1010采样频率Fsampling=Fdts/16N=5 1011采样频率Fsampling=Fdts/16N=6 1100采样频率Fsampling=Fdts/16N=8 1101采样频率Fsampling=Fdts/32N=5 1110采样频率Fsampling=Fdts/32N=6 1111采样频率Fsampling=Fdts/32N=8。 主/从模式选择: 0不发挥作用 1触发输入TRGI上的事件被延迟了以允许在 7 MSM RW 0 当前定时器通过TRGO与它的从定时器间的完美 同步。这对要求把几个定时器同步到一个单一的外 部事件时是非常有用的。 触发选择域这3位选择用于同步计数器的触发输 入源: 000内部触发0ITR0 001内部触发1ITR1 010内部触发2ITR2 011内部触发3ITR3 [6:4] TS[2:0] RW 000b 100TI1的边沿检测器TI1F_ED 101滤波后的定时器输入1TI1FP1 110滤波后的定时器输入2TI2FP2 111外部触发输入ETRF 以上只有在SMS为0时改变。 注具体见表14-2。 3 Reserved RO 保留。 0 输入模式选择域。选择核心计数器的时钟和触发模 式。 000由内部时钟CK_INT驱动 001编码器模式 1根据 TI1FP1 的电平,核心计 数器在TI2FP2的边沿增减计数 010编码器模式 2根据 TI2FP2 的电平,核心计 数器在TI1FP1的边沿增减计数 011编码器模式3根据另一个信号的输入电平 [2:0] SMS[2:0] RW 000b 核心计数器在TI1FP1和TI2FP2的边沿增减计数 100复位模式触发输入TRGI的上升沿将初始 化计数器,并且产生一个更新寄存器的信号; 101门控模式当触发输入TRGI为高时计数 器的时钟开启;在触发输入变为低,计数器停止, 计数器的启停都是受控的; 110触发模式计数器在触发输入TRGI的上升沿 启动,只有计数器的启动是受控的; V2.4 196

Page 200

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 111外部时钟模式1选中的触发输入TRGI的 上升沿驱动计数器。 14.4.4 DMA/中断使能寄存器TIMx_DMAINTENRx=1/8/9/10 偏移地址0x0C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved TDE COMDE CC4DE CC3DE CC2DE CC1DE UDE BIE TIE COMIE CC4IE CC3IE CC2IE CC1IE UIE 位 名称 访问 描述 复位值 15 Reserved RO 保留。 0 触发DMA请求使能位 14 TDE RW 0禁止触发DMA请求 0 1允许触发DMA请求。 COM的DMA请求使能位 13 COMDE RW 0禁止COM的DMA请求 0 1允许COM的DMA请求。 比较捕获通道4的DMA请求使能位 12 CC4DE RW 0禁止比较捕获通道4的DMA请求 0 1允许比较捕获通道4的DMA请求。 比较捕获通道3的DMA请求使能位 11 CC3DE RW 0禁止比较捕获通道3的DMA请求 0 1允许比较捕获通道3的DMA请求。 比较捕获通道2的DMA请求使能位 10 CC2DE RW 0禁止比较捕获通道2的DMA请求 0 1允许比较捕获通道2的DMA请求。 比较捕获通道1的DMA请求使能位 9 CC1DE RW 0禁止比较捕获通道1的DMA请求 0 1允许比较捕获通道1的DMA请求。 更新的DMA请求使能位 8 UDE RW 0禁止更新的DMA请求 0 1允许更新的DMA请求。 刹车中断使能位: 7 BIE RW 0禁止刹车中断 0 1允许刹车中断。 触发中断使能位: 6 TIE RW 0禁止触发中断 0 1使能触发中断。 COM中断允许位 5 COMIE RW 0禁止COM中断 0 1允许COM中断。 比较捕获通道4中断使能位 4 CC4IE RW 0禁止比较捕获通道4中断 0 1允许比较捕获通道4中断。 比较捕获通道3中断使能位 3 CC3IE RW 0 0禁止比较捕获通道3中断 V2.4 197

Page 201

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1允许比较捕获通道3中断。 比较捕获通道2中断使能位 2 CC2IE RW 0禁止比较捕获通道2中断 0 1允许比较捕获通道2中断。 比较捕获通道1中断使能位 1 CC1IE RW 0禁止比较捕获通道1中断 0 1允许比较捕获通道1中断。 更新中断使能位: 0 UIE RW 0禁止更新中断 0 1允许更新中断。 14.4.5 中断状态寄存器TIMx_INTFRx=1/8/9/10 偏移地址0x10 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved CC4OF CC3OF CC2OF CC1OF Reserved BIF TIF COMIF CC4IF CC3IF CC2IF CC1IF UIF 位 名称 访问 描述 复位值 [15:13] Reserved RO 保留。 0 12 CC4OF RW0 比较捕获通道4重复捕获标志位。 0 11 CC3OF RW0 比较捕获通道3重复捕获标志位。 0 10 CC2OF RW0 比较捕获通道2重复捕获标志位。 0 比较捕获通道1重复捕获标志位仅用于比较捕获 通道被配置为输入捕获模式时。该标记由硬件置位, 软件写0可清除此位。 9 CC1OF RW0 0 0无重复捕获产生 1计数器的值被捕获到捕获比较寄存器时CC1IF 的状态已经被置位。 8 Reserved RO 保留。 0 刹车中断标志位,一旦刹车输入有效,由硬件对该 位置位,可由软件清零。 7 BIF RW0 0 0无刹车事件产生 1刹车引脚输入上检测到设定的有效电平。 触发器中断标志位,当发生触发事件时由硬件对该 位置位,由软件清零。触发事件包括从除门控模式 外的其它模式时在TRGI输入端检测到有效边沿 6 TIF RW0 0 或门控模式下的任一边沿。 0无触发器事件产生 1触发器事件产生。 COM 中断标志位,一旦产生 COM 事件,该位由硬件 置位由软件清零。COM事件包括CCxE、CCxNE、OCxM 5 COMIF RW0 被更新。 0 0无COM事件产生 1COM事件产生。 4 CC4IF RW0 比较捕获通道4中断标志位。 0 3 CC3IF RW0 比较捕获通道3中断标志位。 0 V2.4 198

Page 202

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 2 CC2IF RW0 比较捕获通道2中断标志位。 0 比较捕获通道1中断标志位。 如果比较捕获通道配置为输出模式: 当计数器值与比较值匹配时该位由硬件置位,但在 中心对称模式下除外。该位由软件清零。 0无匹配发生 1 CC1IF RW0 1核心计数器的值与比较捕获寄存器1的值匹配。 0 如果比较捕获通道1配置为输入模式 当捕获事件发生时该位由硬件置位,它由软件清零 或通过读比较捕获寄存器清零。 0无输入捕获产生 1计数器值已被捕获比较捕获寄存器1。 更新中断标志位,当产生更新事件时该位由硬件置 位,由软件清零。 0无更新事件产生 1更新中断产生。 以下情形会产生更新事件: 0 UIF RW0 0 若UDIS=0当重复计数器数值上溢或下溢时 若URS=0、UDIS=0当置UG位时或当通过软件对 计数器核心计数器重新初始化时; 若 URS=0、UDIS=0当计数器 CNT 被触发事件重新 初始化时; 14.4.6 事件产生寄存器TIMx_SWEVGRx=1/8/9/10 偏移地址0x14 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved BG TG COMG CC4G CC3G CC2G CC1G UG 位 名称 访问 描述 复位值 [15:8] Reserved RO 保留。 0 刹车事件产生位,此位由软件置位和清零,用来产 生一个刹车事件。 7 BG WO 0无动作 0 1产生一个刹车事件。此时MOE=0、BIF=1若使能 对应的中断和DMA则产生相应的中断和DMA。 触发事件产生位,该位由软件置位,硬件清零,用 于产生一个触发事件。 6 TG WO 0无动作 0 1产生一个触发事件TIF被置位若使能对应的 中断和DMA则产生相应的中断和DMA。 比较捕获控制更新产生位。产生比较捕获控制更新 事件。该位由软件置位,由硬件自动清零。 5 COMG WO 0无动作 0 1当CCPC=1允许更新CCxE、CCxNE、OCxM位。 注该位只对拥有互补输出的通道通道123 V2.4 199

Page 203

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 有效。 4 CC4G WO 比较捕获事件产生位4。产生比较捕获事件4。 0 3 CC3G WO 比较捕获事件产生位3。产生比较捕获事件3。 0 2 CC2G WO 比较捕获事件产生位2。产生比较捕获事件2。 0 比较捕获事件产生位1产生比较捕获事件1。 该位由软件置位,由硬件清零。用于产生一个比较 捕获事件。 0无动作 1在比较捕获通道1上产生一个比较捕获事件 若比较捕获通道1配置为输出 1 CC1G WO 置 CC1IF 位。若使能对应的中断和 DMA则产生相 0 应的中断和DMA 若比较捕获通道1配置为输入 当前核心计数器的值被捕获至比较捕获寄存器 1 置 CC1IF 位,若使能了对应的中断和 DMA则产生 相应的中断和DMA。若CC1IF已经置位则置CC1OF 位。 更新事件产生位,产生更新事件。该位由软件置位, 由硬件自动清零。 0无动作 1初始化计数器并产生一个更新事件。 0 UG WO 0 注:预分频器的计数器也被清零,但是预分频系数 不变。若在中心对称模式下或增计数模式下则核心 计数器被清零;若减计数模式下则核心计数器取重 装值寄存器的值。 14.4.7 比较/捕获控制寄存器 1TIMx_CHCTLR1x=1/8/9/10 偏移地址0x18 通道可用于输入(捕获模式)或输出(比较模式),通道的方向由相应的 CCxS 位定义。该寄存 器其它位的作用在输入和输出模式下不同。OCxx 描述了通道在输出模式下的功能ICxx 描述了通道 在输入模式下的功能。 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OC2CE OC2M[2:0] OC2PE OC2FE OC1CE OC1M[2:0] OC1PE OC1FE CC2S[1:0] CC1S[1:0] IC2F[3:0] IC2PSC[1:0] IC1F[3:0] IC1PSC[1:0] 比较模式(引脚方向为输出): 位 名称 访问 描述 复位值 比较捕获通道2清零使能位 0OC2REF不受ETRF输入的影响 15 OC2CE RW 0 1一旦检测到 ETRF 输入高电平,清除 OC2REF 位 零。 比较捕获通道2模式设置域 该 3 位定义了输出参考信号 OC2REF 的动作,而 [14:12] OC2M[2:0] RW 000b OC2REF决定了OC2、OC2N的值。OC2REF是高电平有 效而OC2和OC2N的有效电平取决于CC2P、CC2NP V2.4 200

Page 204

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位。 000冻结。比较捕获寄存器的值与核心计数器间的 比较值对OC2REF不起作用 001强制设为有效电平。当核心计数器与比较捕获 寄存器2的值相同时强制OC2REF为高 010强制设为无效电平。当核心计数器的值与比较 捕获寄存器2相同时强制OC2REF为低 011翻转。当核心计数器与比较捕获寄存器2的值 相同时翻转OC2REF的电平。 100强制为无效电平。强制OC2REF为低。 101强制为有效电平。强制OC2REF为高。 110PWM模式1在向上计数时一旦核心计数器 小于比较捕获寄存器的值时通道2为有效电平 否则为无效电平;在向下计数时,一旦核心计数器 大于比较捕获寄存器的值时,通道 2 为无效电平 (OC2REF=0),否则为有效电平(OC2REF=1)。 111PWM模式2在向上计数时一旦核心计数器 小于比较捕获寄存器的值时通道2为无效电平 否则为有效电平;在向下计数时,一旦核心计数器 大于比较捕获寄存器的值时,通道 2 为有效电平 (OC2REF=1),否则为无效电平(OC2REF=0)。 注一旦LOCK级别设为3并且CC2S=00b则该位不 能被修改。在PWM模式1或PWM模式2中只有当 比较结果改变了或在输出比较模式中从冻结模式切 换到PWM模式时OC2REF电平才改变。 比较捕获寄存器2预装载使能位 0禁止比较捕获寄存器2的预装载功能可随时写 入比较捕获寄存器 2并且新写入的数值立即起作 用; 1开启比较捕获寄存器2的预装载功能读写操作 仅对预装载寄存器操作比较捕获寄存器2的预装 11 OC2PE RW 0 载值在更新事件到来时被加载至当前影子寄存器 中。 注一旦LOCK级别设为3并且CC2S=00则该位不 能被修改仅仅在单脉冲模式下OPM=1可以在未 确认预装载寄存器情况下使用PWM模式否则其动 作不确定。 比较捕获通道2快速使能位该位用于加快比较捕 获通道输出对触发输入事件的响应。 0根据计数器与比较捕获寄存器1的值比较捕获 通道2正常操作即使触发器是打开的。当触发器 10 OC2FE RW 的输入有一个有效沿时激活比较捕获通道2输出 0 的最小延时为5个时钟周期 1输入到触发器的有效沿的作用就像发生了一次比 较匹配。因此OC被设置为比较电平而与比较结果 无关。采样触发器的有效沿和比较捕获通道2输出 V2.4 201

Page 205

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 间的延时被缩短为3个时钟周期。 注OC2FE只在通道被配置成PWM1或PWM2模式时 起作用。 比较捕获通道2输入选择域 00比较捕获通道2被配置为输出 01比较捕获通道2被配置为输入IC2映射在TI2 上; 10比较捕获通道2被配置为输入IC2映射在TI1 [9:8] CC2S[1:0] RW 上; 00b 11比较捕获通道2被配置为输入IC2映射在TRC 上。此模式仅工作在内部触发器输入被选中时(由 TS位选择。 注比较捕获通道2仅在通道关闭时CC2E为零时 才是可写的。 7 OC1CE RW 比较捕获通道1清零使能位。 0 [6:4] OC1M[2:0] RW 比较捕获通道1模式设置域。 0 3 OC1PE RW 比较捕获寄存器1预装载使能位。 0 2 OC1FE RW 比较捕获通道1快速使能位。 0 [1:0] CC1S[1:0] RW 比较捕获通道1输入选择域。 0 捕获模式(引脚方向为输入): 位 名称 访问 描述 复位值 输入捕获滤波器2配置域这几位设置了TI1输入 的采样频率及数字滤波器长度。数字滤波器由一个 事件计数器组成它记录到N个事件后会产生一个 输出的跳变。 0000无滤波器以fDTS采样 1000采样频率Fsampling=Fdts/8N=6 0001采样频率Fsampling=Fck_intN=2 1001采样频率Fsampling=Fdts/8N=8 0010采样频率Fsampling=Fck_intN=4 1010采样频率Fsampling=Fdts/16N=5 [15:12] IC2F[3:0] RW 0000b 0011采样频率Fsampling=f=Fck_intN=8 1011采样频率Fsampling=Fdts/16N=6 0100采样频率Fsampling=Fdts/2N=6 1100采样频率Fsampling=Fdts/16N=8 0101采样频率Fsampling=Fdts/2N=8 1101采样频率Fsampling=Fdts/32N=5 0110采样频率Fsampling=Fdts/4N=6 1110采样频率Fsampling=Fdts/32N=6 0111采样频率Fsampling=Fdts/4N=8 1111采样频率Fsampling=Fdts/32N=8。 比较捕获通道2预分频配置域这2位定义了比较 [11:10] IC2PSC[1:0] RW 捕获通道2的预分频系数。一旦CC1E=0则预分频 00b 器复位。 V2.4 202

Page 206

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 00无预分频器捕获输入口上检测到的每一个边 沿都触发一次捕获; 01每2个事件触发一次捕获 10每4个事件触发一次捕获 11每8个事件触发一次捕获。 比较捕获通道2输入选择域这2位定义通道的方 向(输入/输出),及输入脚的选择。 00比较捕获通道2通道被配置为输出 01比较捕获通道 2 通道被配置为输入IC1 映射 在TI1上 [9:8] CC2S[1:0] RW 10比较捕获通道 2 通道被配置为输入IC1 映射 00b 在TI2上 11比较捕获通道 2 通道被配置为输入IC1 映射 在TRC上。此模式仅工作在内部触发器输入被选中 时由TS位选择。 注CC2S仅在通道关闭时CC2E为0才是可写的。 [7:4] IC1F[3:0] RW 输入捕获滤波器1配置域。 0 [3:2] IC1PSC[1:0] RW 比较捕获通道1预分频配置域。 0 [1:0] CC1S[1:0] RW 比较捕获通道1输入选择域。 0 14.4.8 比较/捕获控制寄存器 2TIMx_CHCTLR2x=1/8/9/10 偏移地址0x1C 通道可用于输入(捕获模式)或输出(比较模式),通道的方向由相应的 CCxS 位定义。该寄存 器其它位的作用在输入和输出模式下不同。OCxx 描述了通道在输出模式下的功能ICxx 描述了通道 在输入模式下的功能。 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OC4CE OC4M[2:0] OC4PE OC4FE OC3CE OC3M[2:0] OC3PE OC3FE CC4S[1:0] CC3S[1:0] IC4F[3:0] IC4PSC[1:0] IC3F[3:0] IC3PSC[1:0] 比较模式(引脚方向为输出): 位 名称 访问 描述 复位值 15 OC4CE RW 比较捕获通道4清零使能位。 0 [14:12] OC4M[2:0] RW 比较捕获通道4模式设置域。 0 11 OC4PE RW 比较捕获寄存器4预装载使能位。 0 10 OC4FE RW 比较捕获通道4快速使能位。 0 [9:8] CC4S[1:0] RW 比较捕获通道4输入选择域。 0 7 OC3CE RW 比较捕获通道3清零使能位。 0 [6:4] OC3M[2:0] RW 比较捕获通道3模式设置域。 0 3 OC3PE RW 比较捕获寄存器3预装载使能位。 0 2 OC3FE RW 比较捕获通道3快速使能位。 0 [1:0] CC3S[1:0] RW 比较捕获通道3输入选择域。 0 捕获模式(引脚方向为输入): 位 名称 访问 描述 复位值 V2.4 203

Page 207

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [15:12] IC4F[3:0] RW 输入捕获滤波器4配置域。 0 [11:10] IC4PSC[1:0] RW 比较捕获通道4预分频配置域。 0 [9:8] CC4S[1:0] RW 比较捕获通道4输入选择域。 0 [7:4] IC3F[3:0] RW 输入捕获滤波器3配置域。 0 [3:2] IC3PSC[1:0] RW 比较捕获通道3预分频配置域。 0 [1:0] CC3S[1:0] RW 比较捕获通道3输入选择域。 0 14.4.9 比较/捕获使能寄存器TIMx_CCERx=1/8/9/10 偏移地址0x20 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved CC4P CC4E CC3NP CC3NE CC3P CC3E CC2NP CC2NE CC2P CC2E CC1NP CC1NE CC1P CC1E 位 名称 访问 描述 复位值 [15:14] Reserved RO 保留。 0 13 CC4P RW 比较捕获通道4输出极性设置位。 0 12 CC4E RW 比较捕获通道4输出使能位。 0 11 CC3NP RW 比较捕获通道3互补输出极性设置位。 0 10 CC3NE RW 比较捕获通道3互补输出使能位。 0 9 CC3P RW 比较捕获通道3输出极性设置位。 0 8 CC3E RW 比较捕获通道3输出使能位。 0 7 CC2NP RW 比较捕获通道2互补输出极性设置位。 0 6 CC2NE RW 比较捕获通道2互补输出使能位。 0 5 CC2P RW 比较捕获通道2输出极性设置位。 0 4 CC2E RW 比较捕获通道2输出使能位。 0 3 CC1NP RW 比较捕获通道1互补输出极性设置位。 0 2 CC1NE RW 比较捕获通道1互补输出使能位。 0 比较捕获通道1输出极性设置位。 CC1通道配置为输出 0OC1高电平有效 1OC1低电平有效。 CC1通道配置为输入 该位选择是IC1还是IC1的反相信号作为触发或捕 1 CC1P RW 获信号。 0 0不反相捕获发生在IC1的上升沿当用作外部 触发器时IC1不反相 1反相捕获发生在IC1的下降沿当用作外部触 发器时IC1反相。 注一旦LOCK级别TIMx_BDTR寄存器中的LOCK 位设为3或2则该位不能被修改。 比较捕获通道1输出使能位。 CC1通道配置为输出 0 CC1E RW 0关闭。OC1禁止输出因此OC1的输出电平依赖 0 于 MOE、OSSI、OSSR、OIS1、OIS1N 和 CC1NE 位的 值; V2.4 204

Page 208

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1开启。OC1信号输出到对应的输出引脚其输出 电平依赖于MOE、OSSI、OSSR、OIS1、OIS1N和CC1NE 位的值。 CC1通道配置为输入 该位决定了计数器的值是否能捕获入TIMx_CCR1寄 存器。 0捕获禁止 1捕获使能。 14.4.10 高级定时器的计数器TIMx_CNTx=1/8/9/10 偏移地址0x24 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CNT[15:0] 位 名称 访问 描述 复位值 [15:0] CNT[15:0] RW 定时器的计数器的实时值。 0 14.4.11 计数时钟预分频器TIMx_PSCx=1/8/9/10 偏移地址0x28 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PSC[15:0] 位 名称 访问 描述 复位值 定时器的预分频器的分频系数;计数器的时钟频率 [15:0] PSC[15:0] RW 0 等于分频器的输入频率/PSC+1。 14.4.12 自动重装值寄存器TIMx_ATRLRx=1/8/9/10 偏移地址0x2C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ARR[15:0] 位 名称 访问 描述 复位值 此域的值将会被装入计数器ATRLR 何时动作和更 [15:0] ARR[15:0] RW FFFFh 新见14.2.3章节ATRLR为空时计数器停止。 14.4.13 重复计数值寄存器TIMx_RPTCRx=1/8/9/10 偏移地址0x30 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved REP[7:0] 位 名称 访问 描述 复位值 [15:8] Reserved RO 保留。 0 V2.4 205

Page 209

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [7:0] REP[7:0] RW 重复计数器的值。 0 14.4.14 比较/捕获寄存器 1TIMx_CH1CVRx=1/8/9/10 偏移地址0x34 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR1[15:0] 位 名称 访问 描述 复位值 [15:0] CCR1[15:0] RW 比较捕获寄存器通道1的值。 0 14.4.15 比较/捕获寄存器 2TIMx_CH2CVRx=1/8/9/10 偏移地址0x38 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR2[15:0] 位 名称 访问 描述 复位值 [15:0] CCR2[15:0] RW 比较捕获寄存器通道2的值。 0 14.4.16 比较/捕获寄存器 3TIMx_CH3CVRx=1/8/9/10 偏移地址0x3C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR3[15:0] 位 名称 访问 描述 复位值 [15:0] CCR3[15:0] RW 比较捕获寄存器通道3的值。 0 14.4.17 比较/捕获寄存器 4TIMx_CH4CVRx=1/8/9/10 偏移地址0x40 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR4[15:0] 位 名称 访问 描述 复位值 [15:0] CCR4[15:0] RW 比较捕获寄存器通道4的值。 0 14.4.18 刹车和死区寄存器TIMx_BDTRx=1/8/9/10 偏移地址0x44 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MOE AOE BKP BKE OSSR OSSI LOCK[1:0] DTG[7:0] 位 名称 访问 描述 复位值 15 MOE RW 主输出使能位。一旦刹车信号有效,将被异步清零。 0 V2.4 206

Page 210

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0禁止OCx和OCxN的输出或者强制为空闲状态 1允许OCx和OCxN设为输出。 自动输出使能: 0MOE只能被软件置位 14 AOE RW 0 1MOE可以被软件置位或者在下一个更新事件中被 置位。 刹车输入极性设置位: 0刹车输入低电平有效 13 BKP RW 1刹车输入高电平有效。 0 注当设置了LOCK级别1后该位不能被修改。对 该位的写需要一个PB时钟以后才能生效。 刹车功能使能位: 0禁止刹车输入 12 BKE RW 1开启刹车输入。 0 注当设置了LOCK级别1后该位不能被修改。对 该位的写需要一个PB时钟以后才能生效。 0当定时器不工作时禁止OC/OCN输出 1当定时器不工作时一旦 CCxE=1 或 CCxNE=1 11 OSSR RW 首先开启 OC/OCN 并输出无效电平,然后置 OCx、 0 OCxN使能输出信号=1。 注当设置了LOCK级别1后该位不能被修改。 0当定时器不工作时禁止OC/OCN输出 1当定时器不工作时一旦 CCxE=1 或 CCxNE=1 10 OSSI RW OC/OCN首先输出其空闲电平然后OCx、OCxN使能 0 输出信号=1。 注当设置了LOCK级别1后该位不能被修改。 锁定功能设置域: 00关闭锁定功能 01锁定级别1不能写DTG、BKE、BKP、AOE、OISx 和OISxN位 10锁定级别 2不能写入锁定级别 1 中的各位, [9:8] LOCK[1:0] RW 00b 也不能写入CC极性位以及OSSR和OSSI位 11锁定级别 3不能写入锁定级别 2 中的各位, 也不能写入CC控制位。 注在系统复位后只能写一次LOCK位无法再次 修改直到复位。 死区设置位,这些位定义了互补输出之间的死区持 续时间。 假设DT表示其持续时间 DTG[7:5]=0xx=>DT=DTG[7:0]*TdtgTdtg =TDTS DTG[7:5]=10x=>DT=64+DTG[5:0]TdtgTdtg= [7:0] DTG[7:0] RW 0 2TDTS DTG[7:5]=110=>DT=32+DTG[4:0]*TdtgTdtg =8 ×TDTS DTG[7:5]=111=>DT=32+DTG[4:0]*TdtgTdtg =16 *TDTS。 V2.4 207

Page 211

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 注:一旦 LOCK 级别TIMx_BDTR 寄存器中的 LOCK[1:0]位设为01b、10b或11b则不能修改 这些位。 14.4.19 DMA 控制寄存器TIMx_DMACFGRx=1/8/9/10 偏移地址0x48 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DBL[4:0] Reserved DBA[4:0] 位 名称 访问 描述 复位值 [15:13] Reserved RO 保留。 0 DMA连续传送的长度实际值为此域的值+1。 当对TIMx_DMAADR寄存器进行读或写时定时器则 进行一次连续传送),即:定义传输的次数,传输 可以是半字(双字节)或字节: 000001次传输 000012次传输 000023次传输 …… …… 1000118次传输。 假 如 我 们 进 行 这 样 的 传 输 DBL=7 DBA=TIM2_CTLR1。 如果DBL=7DBA=TIM2_CTLR1表示待传输数据的地 [12:8] DBL[4:0] RW 0 址那么传输的地址由以下公式给出TIMx_CTLR1 的地址)+DBA+DMA索引其中DMA索引=DBL 其中TIMx_CTLR1的地址+DBA再加上7给出了 将要写入或者读出数据的地址,这样数据的传输将 发生在从地址TIMx_CR1的地址+DBA开始的7个 寄存器。根据DMA数据长度的设置可能发生以下 情况: 1、如果设置数据为半字16位那么数据就会传 输给全部7个寄存器。 2、如果设置数据为字节数据仍然会传输给全部7 个寄存器第一个寄存器包含第一个MSB字节第 二个寄存器包含第一个LSB字节依此类推。因此 对于定时器用户必须指定由DMA传输的数据宽度。 [7:5] Reserved RO 保留。 0 这些位定义了DMA在连续模式下从控制寄存器1所 在地址的偏移量。 00000TIMx_CTLR1 [4:0] DBA[4:0] RW 0 00001TIMx_CTLR2 00010TIMx_SMCFGR …… V2.4 208

Page 212

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 14.4.20 连续模式的 DMA 地址寄存器TIMx_DMAADRx=1/8/9/10 偏移地址0x4C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DMAB[15:0] 位 名称 访问 描述 复位值 连续模式下DMA的地址。 对TIMx_DMAADR寄存器的读或写会导致对以下地址 所在寄存器的存取操作TIMx_CTLR1地址+DBA+ DMA 索引其中“TIMx_CTLR1地址”是控制寄存器1 [15:0] DMAB[15:0] RW 0 TIMx_CTLR1所在的地址“DBA”是 TIMx_ DMACFGR寄存器中定义的基地址“DMA索引”是由 DMA自动控制的偏移量它取决于TIMx_DMACFGR寄 存器中定义的DBL。 14.4.21 双边沿捕获寄存器TIMx_AUXx=1/8/9/10 偏移地址0x50 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved CAP_ED_CH4 CAP_ED_CH3 CAP_ED_CH2 位 名称 访问 描述 复位值 [15:3] Reserved R0 保留。 0 通道4的双边沿捕获使能 2 CAP_ED_CH4 RW 0关闭通道4的双边沿捕获使能 0 1使能通道4的双边沿捕获使能。 通道3的双边沿捕获使能 1 CAP_ED_CH3 RW 0关闭通道3的双边沿捕获使能 0 1使能通道3的双边沿捕获使能。 通道2的双边沿捕获使能 0 CAP_ED_CH2 RW 0关闭通道2的双边沿捕获使能 0 1使能通道2的双边沿捕获使能。 注TIMx_AUX 寄存器仅适用于 CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、 CH32V31x_D8C批号倒数第六位不为0的产品。 V2.4 209

Page 213

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 15 章 通用定时器GPTM 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 通用定时器模块包含四个16位可自动重装的定时器TIM2、TIM3、TIM4和TIM5用于测量脉 冲宽度或者产生特定频率的脉冲、PWM波等。可用于自动化控制、电源等领域。 注对于CH32F20x_D8W、CH32V20x_D8、CH32V20x_D8W系列的产品TIM5为32位其他系列芯片的 TIM5为16位。 15.1 主要特征 通用定时器的主要特征包括:  16位自动重装计数器支持增计数模式减计数模式和增减计数模式  16位预分频器分频系数从165536之间动态可调  支持四路独立的比较捕获通道  每路比较捕获通道支持多种工作模式比如输入捕获、输出比较、PWM生成和单脉冲输出  支持外部信号控制定时器  支持在多种模式下使用DMA  支持增量式编码,定时器之间的级联和同步 V2.4 210

Page 214

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 15.2 原理和结构 图15-1 通用定时器的结构框图 15.2.1 概述 如图 15-1 所示,通用定时器的结构大致可以分为三部分,即输入时钟部分,核心计数器部分和 比较捕获通道部分。 通用定时器的时钟可以来自于HB总线时钟CK_INT可以来自外部时钟输入引脚TIMx_ETR 可以来自于其他具有时钟输出功能的定时器ITRx还可以来自于比较捕获通道的输入端TIMx_CHx。 这些输入的时钟信号经过各种设定的滤波分频等操作后成为 CK_PSC 时钟,输出给核心计数器部分。 另外这些复杂的时钟来源还可以作为TRGO输出给其他的定时器、ADC和DAC等外设。 通用定时器的核心是一个16位计数器CNT。CK_PSC经过预分频器PSC分频后成为CK_CNT 再最终输给 CNTCNT 支持增计数模式、减计数模式和增减计数模式,并有一个自动重装值寄存器 ATRLR在每个计数周期结束后为CNT重装载初始化值。 通用定时器拥有四组比较捕获通道,每组比较捕获通道都可以从专属的引脚上输入脉冲,也可以 向引脚输出波形,即比较捕获通道支持输入和输出模式。比较捕获寄存器每个通道的输入都支持滤波、 V2.4 211 RTE_xMIT Internal clock(CK_INT) CK_TIMx from RCC ETR Polarity selection & ETRF co T n r t i r g o g l e l r e r Edge detector & Prescaler ETRP TRGO Input filter ITR0 TGI ITR1 ITR2 TRGI Slave mode controller ITR3 TIF_ED Reset, Enable, Up/Down, TI1FP1 Encoder Count TI2FP2 interface AutoReload U Register UI U 1HC_xMIT 2HC_xMIT 3HC_xMIT 4HC_xMIT CK_PSC CK_CNT PSC CNT (prescaler) (counter) CC1I CC1I TI1 Input filter TI1FP1 IC1 IICC11PPSS Capture/Compare OC1REF OC1 & Edge detector Prescaler 1 Register TI1FP2 TRC CC2I U CC2I TI2 & I E n d p g u e t d f e i t l e t c e t r o r T T I I 2 2 F F P P 1 2 IC2 Prescaler IC2PS Cap 2 t u R r e e g / i C s o t m e p r are OC2REF OC2 TRC CC3I U CC3I TI3 & I E n d p g u e t d f e i t l e t c e t r o r TI3FP3 IC3 Prescaler IC3PS Cap 3 t u R r e e g / i C s o t m e p r are OC3REF OC3 TI3FP4 TRC CC4I U CC4I TI4 Input filter TI4FP3 IC4 IC4PS Capture/Compare OC4REF OC4 & Edge detector Prescaler 4 Register TI4FP4 TRC U Interrupt&DMA output Event Output control Legend Preload registers transferred to active registers on U event Reg according to control bit 1HC_xMIT 2HC_xMIT 3HC_xMIT 4HC_xMIT To other timers To DAC and ADC Stop,clear,Up/Down

Page 215

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 分频、边沿检测等操作并支持通道间的互触发还能为核心计数器CNT提供时钟。每个比较捕获通 道都拥有一组比较捕获寄存器CHxCVR支持与主计数器CNT进行比较而输出脉冲。 15.2.2 通用定时器和高级定时器的区别 与高级定时器相比,通用定时器缺少以下功能: 1 通用定时器缺少对核心计数器的计数周期进行计数的重复计数寄存器。 2 通用定时器的比较捕获通道缺少死区产生,没有互补输出。 3 通用定时器没有刹车信号机制。 4 通用定时器的默认时钟CK_INT都来自PB1而高级定时器的CK_INT都来自PB2。 15.2.3 时钟输入 本节论述CK_PSC的来源。此处截取通用定时器的整体结构框图的时钟源部分。 图15-2 通用定时器CK_PSC来源框图 TIMx_SMCR TS[2:0] ITRx 0xx TI1_ED 100 or TI2F or TI1FP1 TI1F or Encoder TI2F_Rising 101 mode TI2 Filter de E t d e g c e tor TI2F_Falling 0 1 T E I2 T F R P F 2 110 111 TRGI External clock ICF[3:0] CC2P mode 1 CK_PSC TIMx_CCMR1 TIMx_CCER ETRF External clock mode 2 ETR 0 ETR pin 1 /1 D ,/ i 2 vi , d /4 e , r /8 E f T D R TS P dow F n i c lt o e u r nter (int C e K r _ n I a N l T clock) I m nt o e d r e nal clock ETP ETPS[1:0] ETF[3:0] ECE SMS[2:0] TIMx_SMCR TIMx_SMCR TIMx_SMCR TIMx_SMCR 可选的输入时钟可以分为4类

  1. 外部时钟引脚ETR输入的路线ETR→ETRP→ETRF
  2. 内部PB时钟输入路线CK_INT
  3. 来自比较捕获通道引脚TIMx_CHx的路线TIMx_CHx→TIx→TIxFPx此路线也用于编码器模 式;
  4. 来自内部其他定时器的输入ITRx。 通过决定CK_PSC来源的SMS的输入脉冲选择可以将实际的操作分为三类
  5. 选择内部时钟源CK_INT
  6. 外部时钟源模式1
  7. 外部时钟源模式2
  8. 编码器模式。 上文提到的4种时钟源来源都可通过这4种操作选定。 15.2.3.1 内部时钟源CK_INT 如果将 SMS 域保持为 000b 时启动通用定时器那么就是选定内部时钟源CK_INT为时钟。此 时CK_INT就是CK_PSC。 15.2.3.2 外部时钟源模式 1 V2.4 212

Page 216

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 如果将 SMS域设置为 111b时就会启用外部时钟源模式 1。启用外部时钟源1时TRGI被选定 为CK_PSC的来源值得注意的用户还需要通过配置TS域来选择TRGI的来源。TS域可选择以下几 种脉冲作为时钟来源: 1 内部触发ITRxx为0123 2 比较捕获通道1经过边沿检测器后的信号TI1F_ED 3 比较捕获通道的信号TI1FP1、TI2FP2 4 来自外部时钟引脚输入的信号ETRF。 15.2.3.3 外部时钟源模式 2 使用外部触发模式2能在外部时钟引脚输入的每一个上升沿或下降沿计数。将ECE位置位时将 使用外部时钟源模式2。使用外部时钟源模式2时ETRF被选定为CK_PSC。ETR引脚经过可选的反相 器ETP分频器ETPS后成为ETRP再经过滤波器ETF后即成为ETRF。 在ECE位置位且将SMS设为111b时那么相当于TS选择ETRF为输入。 15.2.3.4 编码器模式 将SMS置为001b010b011b将会启用编码器模式。启用编码器模式可以选择在TI1FP1和TI2FP2 中某一个特定的电平下以另一个跳变沿作为信号进行信号输出。此模式用于外接编码器使用的情况下。 具体功能参考15.3.7节。 15.2.4 计数器和周边 CK_PSC输入给预分频器PSC进行分频。PSC是16位的实际的分频系数相当于R16_TIMx_PSC 的值+1。CK_PSC经过PSC会成为CK_INT。更改R16_TIM1_PSC的值并不会实时生效而会在更新事件 后更新给PSC。更新事件包括UG位清零和复位。 15.2.5 比较捕获通道 比较捕获通道是定时器实现复杂功能的核心,它的核心是比较捕获寄存器,辅以外围输入部分的 数字滤波分频和通道间复用输出部分的比较器和输出控制组成。比较捕获通道的结构框图如图15- 3所示。 V2.4 213

Page 217

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图15-3 比较捕获通道的结构框图 TI1F_ED To the slave mode controller TI1 TI1F_Rising Filter TI1F Edge 0 TI1FP1 f DTS downcounter detector TI1F_Falling 1 01 TI2FP1 IC1 Divider 10 /1,/2,/4,/8 ICF[3:0] CC1P/CC1NP TRC TIMx_CHCTLR1 TIMx_CCER 11 (from slave mode controller) TI2F_Rising 0 (from channel 2) CC1S[1:0] ICPS[1:0] CC1E TI2F_Falling 1 TIMx_CCER (from channel 2) PB Bus MCU-peripheral interface Capture/compare preload register Capture/compare shadow register 信号从通道 x 引脚输入进来后可选做为 TIxTI1 的来源可以不只是 CH1见定时器的框图 14- 1TI1经过滤波器ICF[3:0]生成TI1F再经过边沿检测器分成TI1F_Rising和TI1F_Falling 这两个信号经过选择CC1P生成TI1FP1TI1FP1和来自通道 2的 TI2FP1一起送给 CC1S选择成为 IC1经过ICPS分频后送给比较捕获寄存器。 比较捕获寄存器由一个预装载寄存器和一个影子寄存器组成,读写过程仅操作预装载寄存器。在 捕获模式下,捕获发生在影子寄存器上,然后复制到预装载寄存器;在比较模式下,预装载寄存器的 内容被复制到影子寄存器中然后影子寄存器的内容与核心计数器CNT进行比较。 15.3 功能和实现 通用定时器复杂功能的实现都是对定时器的比较捕获通道、时钟输入电路和计数器及周边组件进 行操作实现的。定时器的时钟输入可以来自于包括比较捕获通道的输入在内的多个时钟源。对比较捕 V2.4 214 8 hgih )tib-61 fi( 8 wol TIMx_CHCTLR1 Write CCR1H Read CCR1H write_in_progress S S read_in_progress Write CCR1L Read CCR1L R R Output CC1S[1] capture_transfer compare_transfer mode CC1S[0] Input CC1S[1] mode OC1PE CC1S[0] OC1PE UEV TIMx_CHCTLR1 (from time IC1PS Capture Comparator base unit) CC1E CC1G Counter TIM1_SWEVGR To the master mode ETRF controller 0 Output OC1 enable 1 circuit CNT > CCR1 Output OC1REF mode CNT = CCR1 controller CC1P TIM1_CCER CC1E OC1M[2:0] TIM1_CCER TIMx_CHCTLR1

Page 218

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 获寄存通道和时钟源选择的操作直接决定其功能。比较捕获通道是双向的,可以工作在输入和输出模 式。 15.3.1 输入捕获模式 输入捕获模式是定时器的基本功能之一。输入捕获模式的原理是当检测到ICxPS信号上确定的 边沿后则产生捕获事件计数器当前的值会被锁存到比较捕获寄存器R16_TIMx_CHCTLRx中。发 生捕获事件时CCxIF在R16_TIMx_INTFR中被置位如果使能了中断或者DMA还会产生相应中 断或者DMA。如果发生捕获事件时CCxIF已经被置位了那么CCxOF位会被置位。CCxIF可由软件清 除也可以通过读取比较捕获寄存器由硬件清除。CCxOF由软件清除。 举个通道1的例子来说明使用输入捕获模式的步骤如下 1 配置CCxS域选择ICx信号的来源。比如设为10b选择TI1FP1作为IC1的来源不可以使用 默认设置CCxS域默认是使比较捕获模块作为输出通道 2 配置ICxF域设定TI信号的数字滤波器。数字滤波器会以确定的频率采样确定的次数再输 出一个跳变。这个采样频率和次数是通过ICxF来确定的 3 配置CCxP位设定TIxFPx的极性。比如保持CC1P位为低选择上升沿跳变 4 配置ICxPS域设定ICx信号成为ICxPS之间的分频系数。比如保持ICxPS为00b不分频 5 配置CCxE位允许捕获核心计数器CNT的值到比较捕获寄存器中。置CC1E位 6 根据需要配置CCxIE和CCxDE位决定是否允许使能中断或者DMA。 至此已经将比较捕获通道配置完成。 当TI1输入了一个被捕获的脉冲时核心计数器CNT的值会被记录到比较捕获寄存器中CC1IF 被置位当CC1IF在之前就已经被置位时CCIOF位也会被置位。如果CC1IE位那么会产生一个中 断如果CC1DE被置位会产生一个DMA请求。可以通过写事件产生寄存器的方式R16_TIMx_SWEVGR 的方式由软件产生一个输入捕获事件。 15.3.2 比较输出模式 比较输出模式是定时器的基本功能之一。比较输出模式的原理是在核心计数器CNT的值与比 较捕获寄存器的值一致时输出特定的变化或波形。OCxM 域(在 R16_TIMx_CHCTLRx 中)和 CCxP 位 (在 R16_TIMx_CCER 中)决定输出的是确定的高低电平还是电平翻转。产生比较一致事件时还会置 CCxIF位如果预先置了CCxIE位则会产生一个中断如果预先设置了CCxDE位则会产生一个DMA 请求。 配置为比较输出模式的步骤为下: 1 配置核心计数器CNT的时钟源和自动重装值 2 设置好需要对比的计数值到比较捕获寄存器R16_TIMx_CHxCVR 3 如果需要产生中断置CCxIE位 4 保持OCxPE为0禁用比较捕获寄存器的预装载寄存器 5 设定输出模式设置OCxM域和CCxP位 6 使能输出置CCxE位 7 置CEN位启动定时器 15.3.3 强制输出模式 定时器的比较捕获通道的输出模式可以由软件强制输出确定的电平,而不依赖比较捕获寄存器的 影子寄存器和核心计数器的比较。 具体的做法是将OCxM置为100b即为强制将OCxREF置为低或者将OCxM置为101b即为强制 将OCxREF置为高。 需要注意的是,将 OCxM 强制置为 100b 或者 101b内部主计数器和比较捕获寄存器的比较过程 还在进行相应的标志位还在置位中断和DMA请求还在产生。 V2.4 215

Page 219

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 15.3.4 PWM 输入模式 PWM输入模式是用来测量PWM的占空比和频率的是输入捕获模式的一种特殊情况。除下列区别 外操作和输入捕获模式相同PWM占用两个比较捕获通道且两个通道的输入极性设为相反其中 一个信号被设为触发输入SMS设为复位模式。 例如测量从TI1输入的PWM波的周期和频率需要进行以下操作 1 将TI1TI1FP1设为IC1信号的输入。将CC1S置为01b 2 将TI1FP1置为上升沿有效。将CC1P保持为0 3 将TI1TI1FP2置为IC2信号的输入。将CC2S置为10b 4 选TI1FP2置为下降沿有效。将CC2P置为1 5 时钟源的来源选择TI1FP1。将TS设为101b 6 将SMS设为复位模式即100b 7 使能输入捕获。CC1E和CC2E置位。 注因只有TI1FP1和TI2FP2连到了从模式控制器所以PWM输入模式只能使用TIMx_CH1/TIMx_CH2。 15.3.5 PWM 输出模式 PWM 输出模式是定时器的基本功能之一。PWM 输出模式最常见的是使用重装值确定 PWM 频率,使 用捕获比较寄存器确定占空比的方法。将 OCxM 域中置 110b 或者 111b 使用 PWM 模式 1 或者模式 2 置 OCxPE 位使能预装载寄存器,最后置 ARPE 位使能预装载寄存器的自动重装载。在发生一个更新事 件时,预装载寄存器的值才能被送到影子寄存器,所以在核心计数器开始计数之前,需要置 UG 位来 初始化所有寄存器。在PWM模式下核心计数器和比较捕获寄存器一直在进行比较根据CMS位定 时器能够输出边沿对齐或者中央对齐的PWM信号。  边沿对齐 使用边沿对齐时核心计数器增计数或者减计数在PWM模式1的情景下在核心计数器的值大 于比较捕获寄存器时OCxREF上升为高当核心计数器的值小于比较捕获寄存器时比如核心计数器 增长到R16_TIMx_ATRLR的值而恢复成全0时OCxREF下降为低。  中央对齐 使用中央对齐模式时核心计数器运行在增计数和减计数交替进行的模式下OCxREF在核心计数 器和比较捕获寄存器的值一致时进行上升和下降的跳变。但比较标志在三种中央对齐模式下,置位的 时机有所不同。在使用中央对齐模式时,最好在启动核心计数器之前产生一个软件更新标志(置 UG 位)。 15.3.6 单脉冲模式 单脉冲模式可以响应一个特定的事件,在一个延迟之后产生一个脉冲,延迟和脉冲的宽度可编程。 置OPM位可以使核心计数器在产生下一个更新事件UEV时计数器翻转到0停止。 V2.4 216

Page 220

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图15-4 事件产生和脉冲响应 如图15-4所示需要在TI2输入引脚上检测到一个上升沿开始延迟Tdelay之后在OC1上产 生一个长度为Tpulse的正脉冲 1 设定TI2为触发。置CC2S域为01b把 TI2FP2映射到 TI2置 CC2P位为 0bTI2FP2设为上升 沿检测置TS域为110bTI2FP2设为触发源置SMS域为110bTI2FP2被用来启动计数器 2 Tdelay由比较捕获寄存器定义Tpulse由自动重装值寄存器的值和比较捕获寄存器的值确定。 15.3.7 编码器模式 编码器模式是定时器的一个典型应用,可以用来接入编码器的双相输出,核心计数器的计数方向 和编码器的转轴方向同步,编码器每输出一个脉冲就会使核心计数器加一或减一。使用编码器的步骤 为将SMS域置为001b只在TI2边沿计数、010b只在TI1边沿计数或者011b在TI1和TI2 双边沿计数),将编码器接到比较捕获通道 1、2 的输入端,设一个重装值计数器的值,这个值可以 设的大一点。在编码器模式时,定时器内部的比较捕获寄存器,预分频器,重复计数寄存器等都正常 工作。下表表明了计数方向和编码器信号的关系。 表15-1定时器编码器模式的计数方向和编码器信号之间的关系 相对信号 TI1FP1信号边沿 TI2FP2信号 计数有效边沿 的电平 上升沿 下降沿 上升沿 下降沿 高 向下计数 向上计数 仅在TI1边沿计数 不计数 低 向上计数 向下计数 高 向上计数 向下计数 仅在TI2边沿计数 不计数 低 向下计数 向上计数 高 向下计数 向上计数 向上计数 向下计数 在TI1和TI2双边沿计数 低 向上计数 向下计数 向下计数 向上计数 15.3.8 定时器同步模式 定时器能够输出时钟脉冲TRGO也能接收其他定时器的输入ITRx。不同的定时器的ITRx 的来源别的定时器的TRGO是不一样的。定时器内部触发连接如表15-2所示。 表15-2 GTPM内部触发连接 ITR0 ITR1 ITR2 ITR3 从定时器 TS=000 TS=001 TS=010 TS=011 TIM2 TIM1 TIM8/USB/ETH TIM3 TIM4 V2.4 217

Page 221

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn TIM3 TIM1 TIM2 TIM5 TIM4 TIM4 TIM1 TIM2 TIM3 TIM8 TIM5 TIM2 TIM3 TIM4 TIM8 15.3.9 双边沿捕获模式 可通过TIMx_AUX寄存器对脉冲进行测量。 例如通过通道2来捕获脉冲宽度在捕获功能配置上选择IC2信号的来源TIMx_CHCTLR1寄 存器的 CC2S 位为 11b使能通道 2 的双边沿捕获功能TIMx_AUX 寄存器的 CAP_ED_CH2 位为 1。 至此已经将双边沿捕获配置完成。 可通过TIMx_CH2CVR寄存器的CCR2位读取捕获的双边沿脉冲宽度值。 注仅适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C批号倒数第 六位不为0的产品。 15.3.10 调试模式 当系统进入调试模式时根据DBG模块的设置可以控制定时器继续运转或者停止。 15.4 寄存器描述 表15-3 TIM2相关寄存器列表 名称 偏移地址 描述 复位值 R16_TIM2_CTLR1 0x40000000 TIM2控制寄存器1 0x0000 R16_TIM2_CTLR2 0x40000004 TIM2控制寄存器2 0x0000 R16_TIM2_SMCFGR 0x40000008 TIM2从模式控制寄存器 0x0000 R16_TIM2_DMAINTENR 0x4000000C TIM2 DMA/中断使能寄存器 0x0000 R16_TIM2_INTFR 0x40000010 TIM2中断状态寄存器 0x0000 R16_TIM2_SWEVGR 0x40000014 TIM2事件产生寄存器 0x0000 R16_TIM2_CHCTLR1 0x40000018 TIM2比较/捕获控制寄存器1 0x0000 R16_TIM2_CHCTLR2 0x4000001C TIM2比较/捕获控制寄存器2 0x0000 R16_TIM2_CCER 0x40000020 TIM2比较/捕获使能寄存器 0x0000 R16_TIM2_CNT 0x40000024 TIM2计数器 0x0000 R16_TIM2_PSC 0x40000028 TIM2计数时钟预分频器 0x0000 R16_TIM2_ATRLR 0x4000002C TIM2自动重装值寄存器 0xFFFF R16_TIM2_CH1CVR 0x40000034 TIM2比较/捕获寄存器1 0x0000 R16_TIM2_CH2CVR 0x40000038 TIM2比较/捕获寄存器2 0x0000 R16_TIM2_CH3CVR 0x4000003C TIM2比较/捕获寄存器3 0x0000 R16_TIM2_CH4CVR 0x40000040 TIM2比较/捕获寄存器4 0x0000 R16_TIM2_DMACFGR 0x40000048 TIM2 DMA控制寄存器 0x0000 R16_TIM2_DMAADR 0x4000004C TIM2连续模式的DMA地址寄存器 0x0000 R16_TIM2_AUX 0x40000050 TIM2双边沿捕获寄存器 0x0000 表15-4 TIM3相关寄存器列表 名称 偏移地址 描述 复位值 R16_TIM3_CTLR1 0x40000400 TIM3控制寄存器1 0x0000 R16_TIM3_CTLR2 0x40000404 TIM3控制寄存器2 0x0000 R16_TIM3_SMCFGR 0x40000408 TIM3从模式控制寄存器 0x0000 V2.4 218

Page 222

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R16_TIM3_DMAINTENR 0x4000040C TIM3 DMA/中断使能寄存器 0x0000 R16_TIM3_INTFR 0x40000410 TIM3中断状态寄存器 0x0000 R16_TIM3_SWEVGR 0x40000414 TIM3事件产生寄存器 0x0000 R16_TIM3_CHCTLR1 0x40000418 TIM3比较/捕获控制寄存器1 0x0000 R16_TIM3_CHCTLR2 0x4000041C TIM3比较/捕获控制寄存器2 0x0000 R16_TIM3_CCER 0x40000420 TIM3比较/捕获使能寄存器 0x0000 R16_TIM3_CNT 0x40000424 TIM3计数器 0x0000 R16_TIM3_PSC 0x40000428 TIM3计数时钟预分频器 0x0000 R16_TIM3_ATRLR 0x4000042C TIM3自动重装值寄存器 0xFFFF R16_TIM3_CH1CVR 0x40000434 TIM3比较/捕获寄存器1 0x0000 R16_TIM3_CH2CVR 0x40000438 TIM3比较/捕获寄存器2 0x0000 R16_TIM3_CH3CVR 0x4000043C TIM3比较/捕获寄存器3 0x0000 R16_TIM3_CH4CVR 0x40000440 TIM3比较/捕获寄存器4 0x0000 R16_TIM3_DMACFGR 0x40000448 TIM3 DMA控制寄存器 0x0000 R16_TIM3_DMAADR 0x4000044C TIM3连续模式的DMA地址寄存器 0x0000 R16_TIM3_AUX 0x40000450 TIM3双边沿捕获寄存器 0x0000 表15-5 TIM4相关寄存器列表 名称 偏移地址 描述 复位值 R16_TIM4_CTLR1 0x40000800 TIM4控制寄存器1 0x0000 R16_TIM4_CTLR2 0x40000804 TIM4控制寄存器2 0x0000 R16_TIM4_SMCFGR 0x40000808 TIM4从模式控制寄存器 0x0000 R16_TIM4_DMAINTENR 0x4000080C TIM4 DMA/中断使能寄存器 0x0000 R16_TIM4_INTFR 0x40000810 TIM4中断状态寄存器 0x0000 R16_TIM4_SWEVGR 0x40000814 TIM4事件产生寄存器 0x0000 R16_TIM4_CHCTLR1 0x40000818 TIM4比较/捕获控制寄存器1 0x0000 R16_TIM4_CHCTLR2 0x4000081C TIM4比较/捕获控制寄存器2 0x0000 R16_TIM4_CCER 0x40000820 TIM4比较/捕获使能寄存器 0x0000 R16_TIM4_CNT 0x40000824 TIM4计数器 0x0000 R16_TIM4_PSC 0x40000828 TIM4计数时钟预分频器 0x0000 R16_TIM4_ATRLR 0x4000082C TIM4自动重装值寄存器 0xFFFF R16_TIM4_CH1CVR 0x40000834 TIM4比较/捕获寄存器1 0x0000 R16_TIM4_CH2CVR 0x40000838 TIM4比较/捕获寄存器2 0x0000 R16_TIM4_CH3CVR 0x4000083C TIM4比较/捕获寄存器3 0x0000 R16_TIM4_CH4CVR 0x40000840 TIM4比较/捕获寄存器4 0x0000 R16_TIM4_DMACFGR 0x40000848 TIM4 DMA控制寄存器 0x0000 R16_TIM4_DMAADR 0x4000084C TIM4连续模式的DMA地址寄存器 0x0000 R16_TIM4_AUX 0x40000850 TIM4双边沿捕获寄存器 0x0000 表15-6 TIM5相关寄存器列表 名称 偏移地址 描述 复位值 R16_TIM5_CTLR1 0x40000C00 TIM5控制寄存器1 0x0000 R16_TIM5_CTLR2 0x40000C04 TIM5控制寄存器2 0x0000 R16_TIM5_SMCFGR 0x40000C08 TIM5从模式控制寄存器 0x0000 V2.4 219

Page 223

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R16_TIM5_DMAINTENR 0x40000C0C TIM5 DMA/中断使能寄存器 0x0000 R16_TIM5_INTFR 0x40000C10 TIM5中断状态寄存器 0x0000 R16_TIM5_SWEVGR 0x40000C14 TIM5事件产生寄存器 0x0000 R16_TIM5_CHCTLR1 0x40000C18 TIM5比较/捕获控制寄存器1 0x0000 R16_TIM5_CHCTLR2 0x40000C1C TIM5比较/捕获控制寄存器2 0x0000 R16_TIM5_CCER 0x40000C20 TIM5比较/捕获使能寄存器 0x0000 R32_TIM5_CNT 0x40000C24 TIM5计数器 0x0000 R16_TIM5_PSC 0x40000C28 TIM5计数时钟预分频器 0x0000 R32_TIM5_ATRLR 0x40000C2C TIM5自动重装值寄存器 0x0000FFFF R32_TIM5_CH1CVR 0x40000C34 TIM5比较/捕获寄存器1 0x00000000 R32_TIM5_CH2CVR 0x40000C38 TIM5比较/捕获寄存器2 0x00000000 R32_TIM5_CH3CVR 0x40000C3C TIM5比较/捕获寄存器3 0x00000000 R32_TIM5_CH4CVR 0x40000C40 TIM5比较/捕获寄存器4 0x00000000 R16_TIM5_DMACFGR 0x40000C48 TIM5 DMA控制寄存器 0x0000 R16_TIM5_DMAADR 0x40000C4C TIM5连续模式的DMA地址寄存器 0x0000 R16_TIM5_AUX 0x40000C50 TIM5双边沿捕获寄存器 0x0000 15.4.1 控制寄存器 1TIMx_CTLR1x=2/3/4/5 偏移地址0x00 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved CKD[1:0] ARPE CMS[1:0] DIR OPM URS UDIS CEN 位 名称 访问 描述 复位值 [15:10] Reserved RO 保留。 0 这2位定义在定时器时钟CK_INT频率、数字滤 波器所用的采样时钟之间的分频比例: 00Tdts=Tck_int [9:8] CKD[1:0] RW 00b 01Tdts= 2xTck_int 10Tdts= 4xTck_int 11保留。 自动重装预装使能位: 7 ARPE RW 0禁止自动重装值寄存器ATRLR 0 1使能自动重装值寄存器ATRLR。 中央对齐模式选择: 00边沿对齐模式。计数器依据方向位DIR向上 或向下计数。 01中央对齐模式 1。计数器交替地向上和向下计 数。配置为输出的通道CHCTLRx寄存器中CCxS=00 [6:5] CMS[1:0] RW 的输出比较中断标志位,只在计数器向下计数时被 00b 设置。 10中央对齐模式 2。计数器交替地向上和向下计 数。配置为输出的通道CHCTLRx寄存器中CCxS=00 的输出比较中断标志位,只在计数器向上计数时被 设置。 V2.4 220

Page 224

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 11中央对齐模式 3。计数器交替地向上和向下计 数。配置为输出的通道CHCTLRx寄存器中CCxS=00 的输出比较中断标志位,在计数器向上和向下计数 时均被设置。 注在计数器使能时CEN=1不允许从边沿对齐 模式转换到中央对齐模式。 计数器方向: 0计数器的计数模式为增计数 4 DIR RW 1计数器的计数模式为减计数。 0 注:当计数器配置为中央对齐模式或编码器模式时, 该位无效。 单脉冲模式。 0在发生下一次更新事件时计数器不停止 3 OPM RW 0 1在发生下一次更新事件清除CEN位计数 器停止。 更新请求源软件通过该位选择UEV事件的源。 0如果使能了更新中断或DMA请求则下述任一事 件产生更新中断或DMA请求。 -计数器溢出/下溢 2 URS RW 0 -设置UG位 -从模式控制器产生的更新 1如果使能了更新中断或DMA请求则只有计数器 溢出/下溢才产生更新中断或DMA请求。 禁止更新,软件通过该位允许/禁止 UEV 事件的产 生。 0允许 UEV。更新UEV事件由下述任一事件产 生:-计数器溢出/下溢 -设置UG位 1 UDIS RW -从模式控制器产生的更新具有缓存的寄存器被装 0 入它们的预装载值。 1禁止UEV。不产生更新事件各寄存器ATRLR、 PSC、CHCTLRx保持它们的值。如果设置了UG位或 从模式控制器发出了一个硬件复位,则计数器和预 分频器被重新初始化。 使能计数器Counter enable 0禁止计数器 1使能计数器。 0 CEN RW 0 注在软件设置了CEN位后外部时钟、门控模式 和编码器模式才能工作。触发模式可以自动地通过 硬件设置CEN位。 15.4.2 控制寄存器 2TIMx_CTLR2x=2/3/4/5 偏移地址0x04 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved TI1S MMS[2:0] CCDS CCUS Reserved CCPC V2.4 221

Page 225

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 [15:8] Reserved RO 保留。 0 TI1选择 0TIMx_CH1引脚直连到TI1输入 7 TI1S RW 0 1TIMx_CH1、TIMx_CH2和TIMx_CH3引脚经异或后 连到TI1输入。 主模式选择这3位用于选择在主模式下送到从定 时器的同步信息TRGO。可能的组合如下 000复位UG位被用于作为触发输出TRGO。如 果是触发输入产生的复位(从模式控制器处于复位 模式则TRGO上的信号相对实际的复位会有一个 延迟; 001使能计数器使能信号CNT_EN被用于作为触 发输出TRGO。有时需要在同一时间启动多个定 时器或控制在一段时间内使能从定时器。计数器使 能信号是通过CEN控制位和门控模式下的触发输入 信号的逻辑或产生。当计数器使能信号受控于触发 [6:4] MMS[2:0] RW 输入时TRGO 上会有一个延迟,除非选择了主/从 000b 模式见TIMx_SMCFGR寄存器中MSM位的描述 010更新事件被选为触发输出TRGO。例如一 个主定时器的时钟可以被用作一个从定时器的预分 频器; 011比较脉冲在发生一次捕获或一次比较成功时 当要设置CC1IF标志时即使它已经为高触发 输出送出一个正脉冲TRGO 100OC1REF信号被用于作为触发输出TRGO 101OC2REF信号被用于作为触发输出TRGO 110OC3REF信号被用于作为触发输出TRGO 111OC4REF信号被用于作为触发输出TRGO。 0当发生CHxCVR时产生CHxCVR的DMA请求 3 CCDS RW 0 1当发生更新事件时送出CHxCVR的DMA请求。 比较捕获控制更新选择位: 0如果CCPC置位只能通过设置COM位更新它们 2 CCUS RW 1如果CCPC置位可以通过设置COM位或TRGI上 0 的一个上升沿更新它们。 注:该位只对具有互补输出的通道起作用。 1 Reserved RO 保留。 0 比较捕获预装载控制位: 0CCxECCxNE和OCxM位不是预装载的 0 CCPC RW 1CCxECCxNE 和 OCxM 位是预装载的,设置该位 0 后它们只在设置了COM位后被更新。 注:该位只对具有互补输出的通道起作用。 15.4.3 从模式控制寄存器TIMx_SMCFGRx=2/3/4/5 偏移地址0x08 V2.4 222

Page 226

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ETP ECE ETPS[1:0] ETF[3:0] MSM TS[2:0] Reserved SMS[2:0] 位 名称 访问 描述 复位值 ETR 触发极性选择,该位选择是直接输入 ETR 还是 输入ETR的反相。 15 ETP RO 0 0ETR高电平或上升沿有效 1将ETR反相低电平或下降沿有效。 外部时钟模式2启用选择 0禁用外部时钟模式2 1使能外部时钟模式2。 注1从模式可以与外部时钟模式2同时使用复 14 ECE RW 0 位模式门控模式和触发模式但是这时TRGI不 能连到ETRFTS位不能是111b。 注2外部时钟模式1和外部时钟模式2同时被使 能时外部时钟的输入是ETRF。 外部触发信号ETRP分频这个信号频率最大不 能超过是 TIMxCLK 频率的 1/4可以通过这个域来 降频。 [13:12] ETPS[1:0] RW 00关闭预分频 00b 01ETRP频率除以2 10ETRP频率除以4 11ETRP频率除以8。 外部触发滤波,实际上,数字滤波器是一个事件计 数器它使用一定的采样的频率记录到N个事件 后会产生一个输出的跳变。 0000无滤波器以Fdts采样 0001采样频率Fsampling=Fck_intN=2 0010采样频率Fsampling=Fck_intN=4 0011采样频率Fsampling=Fck_intN=8 0100采样频率Fsampling=Fdts/2N=6 0101采样频率Fsampling=Fdts/2N=8 [11:8] ETF[3:0] RW 0110采样频率Fsampling=Fdts/4N=6 0000b 0111采样频率Fsampling=Fdts/4N=8 1000采样频率Fsampling=Fdts/8N=6 1001采样频率Fsampling=Fdts/8N=8 1010采样频率Fsampling=Fdts/16N=5 1011采样频率Fsampling=Fdts/16N=6 1100采样频率Fsampling=Fdts/16N=8 1101采样频率Fsampling=Fdts/32N=5 1110采样频率Fsampling=Fdts/32N=6 1111采样频率Fsampling=Fdts/32N=8。 主/从模式选择: 7 MSM RW 0不发挥作用 0 1触发输入TRGI上的事件被延迟了以允许在 V2.4 223

Page 227

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 当前定时器通过TRGO与它的从定时器间的完美 同步。这对要求把几个定时器同步到一个单一的外 部事件时是非常有用的。 触发选择域这3位选择用于同步计数器的触发输 入源。 000内部触发0ITR0 100TI1的边沿检测器TI1F_ED 001内部触发1ITR1 [6:4] TS[2:0] RW 101滤波后的定时器输入1TI1FP1 000b 010内部触发2ITR2 110滤波后的定时器输入2TI2FP2 011内部触发3ITR3 111外部触发输入ETRF 以上只有在SMS为0时改变。 3 Reserved RO 保留。 0 输入模式选择域。选择核心计数器的时钟和触发模 式。 000由内部时钟CK_INT驱动 001编码器模式 1根据 TI1FP1 的电平,核心计 数器在TI2FP2的边沿增减计数 010编码器模式 2根据 TI2FP2 的电平,核心计 数器在TI1FP1的边沿增减计数 011编码器模式3根据另一个信号的输入电平 核心计数器在TI1FP1和TI2FP2的边沿增减计数 [2:0] SMS[2:0] RW 000b 100复位模式触发输入TRGI的上升沿将初始 化计数器,并且产生一个更新寄存器的信号; 101门控模式当触发输入TRGI为高时计数 器的时钟开启;在触发输入变为低,计数器停止, 计数器的启停都是受控的; 110触发模式计数器在触发输入TRGI的上升沿 启动,只有计数器的启动是受控的; 111外部时钟模式1选中的触发输入TRGI的 上升沿驱动计数器。 15.4.4 DMA/中断使能寄存器TIMx_DMAINTENRx=2/3/4/5 偏移地址0x0C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserv COMD CC4D CC3D CC2D CC1D UD Reserve Reser CC4I CC3I CC2I CC1I TDE TIE UIE ed E E E E E E d ved E E E E 位 名称 访问 描述 复位值 15 Reserved RO 保留。 0 触发DMA请求使能位 14 TDE RW 0禁止触发DMA请求 0 1允许触发DMA请求。 V2.4 224

Page 228

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn COM的DMA请求使能位 13 COMDE RW 0禁止COM的DMA请求 0 1允许COM的DMA请求。 比较捕获通道4的DMA请求使能位 12 CC4DE RW 0禁止比较捕获通道4的DMA请求 0 1允许比较捕获通道4的DMA请求。 比较捕获通道3的DMA请求使能位 11 CC3DE RW 0禁止比较捕获通道3的DMA请求 0 1允许比较捕获通道3的DMA请求。 比较捕获通道2的DMA请求使能位 10 CC2DE RW 0禁止比较捕获通道2的DMA请求 0 1允许比较捕获通道2的DMA请求。 比较捕获通道1的DMA请求使能位 9 CC1DE RW 0禁止比较捕获通道1的DMA请求 0 1允许比较捕获通道1的DMA请求。 更新的DMA请求使能位 8 UDE RW 0禁止更新的DMA请求 0 1允许更新的DMA请求。 7 Reserved RO 保留。 0 触发中断使能位: 6 TIE RW 0禁止触发中断 0 1使能触发中断。 5 Reserved RO 保留。 0 比较捕获通道4中断使能位 4 CC4IE RW 0禁止比较捕获通道4中断 0 1允许比较捕获通道4中断。 比较捕获通道3中断使能位 3 CC3IE RW 0禁止比较捕获通道3中断 0 1允许比较捕获通道3中断。 比较捕获通道2中断使能位 2 CC2IE RW 0禁止比较捕获通道2中断 0 1允许比较捕获通道2中断。 比较捕获通道1中断使能位 1 CC1IE RW 0禁止比较捕获通道1中断 0 1允许比较捕获通道1中断。 更新中断使能位: 0 UIE RW 0禁止更新中断 0 1允许更新中断。 15.4.5 中断状态寄存器TIMx_INTFRx=2/3/4/5 偏移地址0x10 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved CC4OF CC3OF CC2OF CC1OF Reserved TIF Reserved CC4IF CC3IF CC2IF CC1IF UIF V2.4 225

Page 229

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 [15:13] Reserved RO 保留。 0 12 CC4OF RW0 比较捕获通道4重复捕获标志位。 0 11 CC3OF RW0 比较捕获通道3重复捕获标志位。 0 10 CC2OF RW0 比较捕获通道2重复捕获标志位。 0 比较捕获通道1重复捕获标志位仅用于比较捕获 通道被配置为输入捕获模式时。该标记由硬件置 位软件写0可清除此位。 9 CC1OF RW0 0 0无重复捕获产生 1计数器的值被捕获到捕获比较寄存器时CC1IF 的状态已经被置位。 [8:7] Reserved RO 保留。 0 触发器中断标志位,当发生触发事件时由硬件对该 位置位,由软件清零。触发事件包括从除门控模式 外的其它模式时在TRGI输入端检测到有效边沿 6 TIF RW0 0 或门控模式下的任一边沿。 0无触发器事件产生 1触发器事件产生。 5 Reserved RO 保留。 0 4 CC4IF RW0 比较捕获通道4中断标志位。 0 3 CC3IF RW0 比较捕获通道3中断标志位。 0 2 CC2IF RW0 比较捕获通道2中断标志位。 0 比较捕获通道1中断标志位。 如果比较捕获通道配置为输出模式,当计数器值与 比较值匹配时该位由硬件置位,但在中心对称模式 下除外。该位由软件清零。 0无匹配发生。 1 CC1IF RW0 1核心计数器的值与比较捕获寄存器1的值匹配。 0 如果比较捕获通道1配置为输入模式当捕获事件 发生时该位由硬件置位,它由软件清零或通过读比 较捕获寄存器清零。 0无输入捕获产生 1计数器值已被捕获比较捕获寄存器1。 更新中断标志位,当产生更新事件时该位由硬件置 位,由软件清零。 0无更新事件产生 1更新中断产生。 以下情形会产生更新事件: 0 UIF RW0 0 若UDIS=0当重复计数器数值上溢或下溢时 若URS=0、UDIS=0当置UG位时或当通过软件对 计数器核心计数器重新初始化时; 若 URS=0、UDIS=0当计数器 CNT 被触发事件重新 初始化时。 15.4.6 事件产生寄存器TIMx_SWEVGRx=2/3/4/5 偏移地址0x14 V2.4 226

Page 230

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved BG TG COMG CC4G CC3G CC2G CC1G UG 位 名称 访问 描述 复位值 [15:8] Reserved RO 保留。 0 刹车事件产生位,此位由软件置位和清零,用来产 生一个刹车事件。 7 BG WO 0无动作 0 1产生一个刹车事件。此时MOE=0、BIF=1若使能 对应的中断和DMA则产生相应的中断和DMA。 触发事件产生位,该位由软件置位,硬件清零,用 于产生一个触发事件。 6 TG WO 0无动作 0 1产生一个触发事件TIF被置位若使能对应的 中断和DMA则产生相应的中断和DMA。 比较捕获控制更新产生位。产生比较捕获控制更新 事件。该位由软件置位,由硬件自动清零。 0无动作 5 COMG WO 0 1当CCPC=1允许更新CCxE、CCxNE、OCxM位。 注该位只对拥有互补输出的通道通道123 有效。 4 CC4G WO 比较捕获事件产生位4。产生比较捕获事件4。 0 3 CC3G WO 比较捕获事件产生位3。产生比较捕获事件3。 0 2 CC2G WO 比较捕获事件产生位2。产生比较捕获事件2。 0 比较捕获事件产生位1产生比较捕获事件1。该位 由软件置位,由硬件清零。用于产生一个比较捕获 事件。 0无动作 1在比较捕获通道1上产生一个比较捕获事件 1 CC1G WO 若比较捕获通道1配置为输出置CC1IF位。若使 0 能对应的中断和DMA则产生相应的中断和DMA 若比较捕获通道1配置为输入当前核心计数器的 值被捕获至比较捕获寄存器 1置 CC1IF 位,若使 能了对应的中断和DMA则产生相应的中断和DMA。 若CC1IF已经置位则置CC1OF位。 更新事件产生位,产生更新事件。该位由软件置位, 由硬件自动清零。 0无动作 1初始化计数器并产生一个更新事件。 0 UG WO 0 注:预分频器的计数器也被清零,但是预分频系数 不变。若在中心对称模式下或增计数模式下则核心 计数器被清零;若减计数模式下则核心计数器取重 装值寄存器的值。 15.4.7 比较/捕获控制寄存器 1TIMx_CHCTLR1x=2/3/4/5 V2.4 227

Page 231

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 偏移地址0x18 通道可用于输入(捕获模式)或输出(比较模式),通道的方向由相应的 CCxS 位定义。该寄存 器其它位的作用在输入和输出模式下不同。OCxx 描述了通道在输出模式下的功能ICxx 描述了通道 在输入模式下的功能。 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OC2CE OC2M[2:0] OC2PE OC2FE OC1CE OC1M[2:0] OC1PE OC1FE CC2S[1:0] CC1S[1:0] IC2F[3:0] IC2PSC[1:0] IC1F[3:0] IC1PSC[1:0] 比较模式(引脚方向为输出): 位 名称 访问 描述 复位值 比较捕获通道2清零使能位 0OC2REF不受ETRF输入的影响 15 OC2CE RW 0 1一旦检测到 ETRF 输入高电平,清除 OC2REF 位 零。 比较捕获通道2模式设置域。 该 3 位定义了输出参考信号 OC2REF 的动作,而 OC2REF决定了OC2、OC2N的值。OC2REF是高电平有 效而OC2和OC2N的有效电平取决于CC2P、CC2NP 位。 000冻结。比较捕获寄存器的值与核心计数器间的 比较值对OC2REF不起作用 001强制设为有效电平。当核心计数器与比较捕获 寄存器2的值相同时强制OC2REF为高 010强制设为无效电平。当核心计数器的值与比较 捕获寄存器2相同时强制OC2REF为低 011翻转。当核心计数器与比较捕获寄存器2的值 相同时翻转OC2REF的电平。 100强制为无效电平。强制OC2REF为低。 [14:12] OC2M[2:0] RW 101强制为有效电平。强制OC2REF为高。 000b 110PWM模式1在向上计数时一旦核心计数器 小于比较捕获寄存器的值时通道2为有效电平 否则为无效电平;在向下计数时,一旦核心计数器 大于比较捕获寄存器的值时,通道 2 为无效电平 (OC2REF=0),否则为有效电平(OC2REF=1)。 111PWM模式2在向上计数时一旦核心计数器 小于比较捕获寄存器的值时通道2为无效电平 否则为有效电平;在向下计数时,一旦核心计数器 大于比较捕获寄存器的值时,通道 2 为有效电平 (OC2REF=1),否则为无效电平(OC2REF=0)。 注一旦LOCK级别设为3并且CC2S=00b则该位不 能被修改。在PWM模式1或PWM模式2中只有当 比较结果改变了或在输出比较模式中从冻结模式切 换到PWM模式时OC2REF电平才改变。 V2.4 228

Page 232

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 比较捕获寄存器2预装载使能位 0禁止比较捕获寄存器2的预装载功能可随时写 入比较捕获寄存器 2并且新写入的数值立即起作 用; 1开启比较捕获寄存器2的预装载功能读写操作 仅对预装载寄存器操作比较捕获寄存器2的预装 11 OC2PE RW 0 载值在更新事件到来时被加载至当前影子寄存器 中。 注一旦LOCK级别设为3并且CC2S=00则该位不 能被修改。仅仅在单脉冲模式下OPM=1可以在未 确认预装载寄存器情况下使用PWM模式否则其动 作不确定。 比较捕获通道2快速使能位该位用于加快比较捕 获通道输出对触发输入事件的响应。 0根据计数器与比较捕获寄存器1的值比较捕获 通道2正常操作即使触发器是打开的。当触发器 的输入有一个有效沿时激活比较捕获通道2输出 的最小延时为5个时钟周期 10 OC2FE RW 0 1输入到触发器的有效沿的作用就像发生了一次比 较匹配。因此OC被设置为比较电平而与比较结果 无关。采样触发器的有效沿和比较捕获通道2输出 间的延时被缩短为3个时钟周期。 注OC2FE只在通道被配置成PWM1或PWM2模式时 起作用。 比较捕获通道2输入选择域 00比较捕获通道2被配置为输出 01比较捕获通道2被配置为输入IC2映射在TI2 上; 10比较捕获通道2被配置为输入IC2映射在TI1 [9:8] CC2S[1:0] RW 上; 00b 11比较捕获通道2被配置为输入IC2映射在TRC 上。此模式仅工作在内部触发器输入被选中时(由 TS位选择。 注比较捕获通道2仅在通道关闭时CC2E为零时 才是可写的。 7 OC1CE RW 比较捕获通道1清零使能位。 0 [6:4] OC1M[2:0] RW 比较捕获通道1模式设置域。 0 3 OC1PE RW 比较捕获寄存器1预装载使能位。 0 2 OC1FE RW 比较捕获通道1快速使能位。 0 [1:0] CC1S[1:0] RW 比较捕获通道1输入选择域。 0 捕获模式(引脚方向为输入): 位 名称 访问 描述 复位值 输入捕获滤波器2配置域这几位设置了TI1输入 [15:12] IC2F[3:0] RW 0000b 的采样频率及数字滤波器长度。数字滤波器由一个 V2.4 229

Page 233

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 事件计数器组成它记录到N个事件后会产生一个 输出的跳变。 0000无滤波器以fDTS采样 1000采样频率Fsampling=Fdts/8N=6 0001采样频率Fsampling=Fck_intN=2 1001采样频率Fsampling=Fdts/8N=8 0010采样频率Fsampling=Fck_intN=4 1010采样频率Fsampling=Fdts/16N=5 0011采样频率Fsampling=f=Fck_intN=8 1011采样频率Fsampling=Fdts/16N=6 0100采样频率Fsampling=Fdts/2N=6 1100采样频率Fsampling=Fdts/16N=8 0101采样频率Fsampling=Fdts/2N=8 1101采样频率Fsampling=Fdts/32N=5 0110采样频率Fsampling=Fdts/4N=6 1110采样频率Fsampling=Fdts/32N=6 0111采样频率Fsampling=Fdts/4N=8 1111采样频率Fsampling=Fdts/32N=8。 比较捕获通道2预分频配置域这2位定义了比较 捕获通道2的预分频系数。一旦CC1E=0则预分频 器复位。 00无预分频器捕获输入口上检测到的每一个边 [11:10] IC2PSC[1:0] RW 00b 沿都触发一次捕获; 01每2个事件触发一次捕获 10每4个事件触发一次捕获 11每8个事件触发一次捕获。 比较捕获通道2输入选择域这2位定义通道的方 向(输入/输出),及输入脚的选择。 00比较捕获通道1通道被配置为输出 01比较捕获通道 1 通道被配置为输入IC1 映射 在TI1上 [9:8] CC2S[1:0] RW 10比较捕获通道 1 通道被配置为输入IC1 映射 00b 在TI2上 11比较捕获通道 1 通道被配置为输入IC1 映射 在TRC上。此模式仅工作在内部触发器输入被选中 时由TS位选择。 注CC1S仅在通道关闭时CC1E为0才是可写的。 [7:4] IC1F[3:0] RW 输入捕获滤波器1配置域。 0 [3:2] IC1PSC[1:0] RW 比较捕获通道1预分频配置域。 0 [1:0] CC1S[1:0] RW 比较捕获通道1输入选择域。 0 15.4.8 比较/捕获控制寄存器 2TIMx_CHCTLR2x=2/3/4/5 偏移地址0x1C 通道可用于输入(捕获模式)或输出(比较模式),通道的方向由相应的 CCxS 位定义。该寄存 器其它位的作用在输入和输出模式下不同。OCxx 描述了通道在输出模式下的功能ICxx 描述了通道 在输入模式下的功能。 V2.4 230

Page 234

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OC4CE OC4M[2:0] OC4PE OC4FE OC3CE OC3M[2:0] OC3PE OC3FE CC4S[1:0] CC3S[1:0] IC4F[3:0] IC4PSC[1:0] IC3F[3:0] IC3PSC[1:0] 比较模式(引脚方向为输出): 位 名称 访问 描述 复位值 15 OC4CE RW 比较捕获通道4清零使能位。 0 [14:12] OC4M[2:0] RW 比较捕获通道4模式设置域。 0 11 OC4PE RW 比较捕获寄存器4预装载使能位。 0 10 OC4FE RW 比较捕获通道4快速使能位。 0 [9:8] CC4S[1:0] RW 比较捕获通道4输入选择域。 0 7 OC3CE RW 比较捕获通道3清零使能位。 0 [6:4] OC3M[2:0] RW 比较捕获通道3模式设置域。 0 3 OC3PE RW 比较捕获寄存器3预装载使能位。 0 2 OC3FE RW 比较捕获通道3快速使能位。 0 [1:0] CC3S[1:0] RW 比较捕获通道3输入选择域。 0 捕获模式(引脚方向为输入): 位 名称 访问 描述 复位值 [15:12] IC4F[3:0] RW 输入捕获滤波器4配置域。 0 [11:10] IC4PSC[1:0] RW 比较捕获通道4预分频配置域。 0 [9:8] CC4S[1:0] RW 比较捕获通道4输入选择域。 0 [7:4] IC3F[3:0] RW 输入捕获滤波器3配置域。 0 [3:2] IC3PSC[1:0] RW 比较捕获通道3预分频配置域。 0 [1:0] CC3S[1:0] RW 比较捕获通道3输入选择域。 0 15.4.9 比较/捕获使能寄存器TIMx_CCERx=2/3/4/5 偏移地址0x20 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved CC4P CC4E Reserved CC3P CC3E Reserved CC2P CC2E Reserved CC1P CC1E 位 名称 访问 描述 复位值 [15:14] Reserved RO 保留。 0 13 CC4P RW 比较捕获通道4输出极性设置位。 0 12 CC4E RW 比较捕获通道4输出使能位。 0 [11:10] Reserved RO 保留。 0 9 CC3P RW 比较捕获通道3输出极性设置位。 0 8 CC3E RW 比较捕获通道3输出使能位。 0 [7:6] Reserved RO 保留。 0 5 CC2P RW 比较捕获通道2输出极性设置位。 0 4 CC2E RW 比较捕获通道2输出使能位。 0 [3:2] Reserved RO 保留。 0 V2.4 231

Page 235

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 比较捕获通道1输出极性设置位。 CC1通道配置为输出 0OC1高电平有效 1OC1低电平有效。 CC1通道配置为输入 1 CC1P RW 该位选择是IC1还是IC1的反相信号作为触发或捕 0 获信号。 0不反相捕获发生在IC1的上升沿当用作外部 触发器时IC1不反相 1反相捕获发生在IC1的下降沿当用作外部触 发器时IC1反相。 比较捕获通道1输出使能位。 CC1通道配置为输出 0关闭OC1禁止输出 1开启OC1信号输出到对应的输出引脚。 0 CC1E RW CC1通道配置为输入 0 该位决定了计数器的值是否能捕获入TIMx_CCR1寄 存器。 0捕获禁止 1捕获使能。 15.4.10 通用定时器的计数器TIMx_CNTx=2/3/4 偏移地址0x24 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CNT[15:0] 位 名称 访问 描述 复位值 [15:0] CNT[15:0] RW 定时器的计数器的实时值。 0 15.4.11 通用定时器的计数器TIMx_CNTx=5 偏移地址0x24 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CNT[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CNT[15:0] 位 名称 访问 描述 复位值 [31:0] CNT[31:0] RW 定时器的计数器的实时值。 0 注32位的TIM5_CNT仅适用于型号为CH32F20x_D8W、CH32V20x_D8、CH32V20x_D8W系列的产品其 他系列芯片的TIM5_CNT为16位。 15.4.12 计数时钟预分频器TIMx_PSCx=2/3/4/5 偏移地址0x28 V2.4 232

Page 236

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PSC[15:0] 位 名称 访问 描述 复位值 定时器的预分频器的分频系数;计数器的时钟频率 [15:0] PSC[15:0] RW 0 等于分频器的输入频率/PSC+1。 15.4.13 自动重装值寄存器TIMx_ATRLRx=2/3/4 偏移地址0x2C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ARR[15:0] 位 名称 访问 描述 复位值 ATRLR[15:0]的值将会被装入计数器, [15:0] ARR[15:0] RW ATRLR何时动作和更新请阅读15.2.4节; FFFFh ATRLR为空时计数器停止。 15.4.14 自动重装值寄存器TIMx_ATRLRx=5 偏移地址0x2C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ARR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ARR[15:0] 位 名称 访问 描述 复位值 ATRLR[31:0]的值将会被装入计数器ATRLR何时动 0000FF [31:0] ARR[31:0] RW 作和更新请阅读15.2.4节ATRLR为空时计数器 FFh 停止。 注32位的TIM5_ATRLR仅适用于型号为CH32F20x_D8W、CH32V20x_D8、CH32V20x_D8W系列的产品 其他系列芯片的TIM5_ATRLR为16位。 15.4.15 比较/捕获寄存器 1TIMx_CH1CVRx=2/3/4 偏移地址0x34 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR1[15:0] 位 名称 访问 描述 复位值 [15:0] CCR1[15:0] RW 比较捕获寄存器通道1的值。 0 V2.4 233

Page 237

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 15.4.16 比较/捕获寄存器 1TIMx_CH1CVRx=5 偏移地址0x34 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CCR1[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR1[15:0] 位 名称 访问 描述 复位值 [31:0] CCR1[31:0] RW 比较捕获寄存器通道1的值。 0 注32位的TIM5_CH1CVR仅适用于型号为CH32F20x_D8W、CH32V20x_D8、CH32V20x_D8W系列的产品 其他系列芯片的TIM5_CH1CVR为16位。 15.4.17 比较/捕获寄存器 2TIMx_CH2CVRx=2/3/4 偏移地址0x38 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR2[15:0] 位 名称 访问 描述 复位值 [15:0] CCR2[15:0] RW 比较捕获寄存器通道2的值。 0 15.4.18 比较/捕获寄存器 2TIMx_CH2CVRx=5 偏移地址0x38 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CCR2[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR2[15:0] 位 名称 访问 描述 复位值 [31:0] CCR1[31:0] RW 比较捕获寄存器通道2的值。 0 注32位的TIM5_CH2CVR仅适用于型号为CH32F20x_D8W、CH32V20x_D8、CH32V20x_D8W系列的产品 其他系列芯片的TIM5_CH2CVR为16位。 15.4.19 比较/捕获寄存器 3TIMx_CH3CVRx=2/3/4 偏移地址0x3C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR3[15:0] 位 名称 访问 描述 复位值 [15:0] CCR3[15:0] RW 比较捕获寄存器通道3的值。 0 V2.4 234

Page 238

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 15.4.20 比较/捕获寄存器 3TIMx_CH3CVRx=5 偏移地址0x3C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CCR3[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR3[15:0] 位 名称 访问 描述 复位值 [31:0] CCR3[31:0] RW 比较捕获寄存器通道3的值。 0 注32位的TIM5_CH3CVR仅适用于型号为CH32F20x_D8W、CH32V20x_D8、CH32V20x_D8W系列的产品 其他系列芯片的TIM5_CH3CVR为16位。 15.4.21 比较/捕获寄存器 4TIMx_CH4CVRx=2/3/4 偏移地址0x40 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR4[15:0] 位 名称 访问 描述 复位值 [15:0] CCR4[15:0] RW 比较捕获寄存器通道4的值。 0 15.4.22 比较/捕获寄存器 4TIMx_CH4CVRx=5 偏移地址0x40 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CCR4[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CCR4[15:0] 位 名称 访问 描述 复位值 [31:0] CCR4[31:0] RW 比较捕获寄存器通道4的值。 0 注32位的TIM5_CH4CVR仅适用于型号为CH32F20x_D8W、CH32V20x_D8、CH32V20x_D8W系列的产品 其他系列芯片的TIM5_CH4CVR为16位。 15.4.23 DMA 控制寄存器TIMx_DMACFGRx=2/3/4/5 偏移地址0x48 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DBL[4:0] Reserved DBA[4:0] 位 名称 访问 描述 复位值 [15:13] Reserved RO 保留。 0 [12:8] DBL[4:0] RW DMA连续传送的长度实际值为此域的值+1。 0 [7:5] Reserved RO 保留。 0 V2.4 235

Page 239

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 这些位定义了DMA在连续模式下从控制寄存器1所 [4:0] DBA[4:0] RW 0 在地址的偏移量。 15.4.24 连续模式的 DMA 地址寄存器TIMx_DMAADRx=2/3/4/5 偏移地址0x4C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DMAB[15:0] 位 名称 访问 描述 复位值 [15:0] DMAB[15:0] RW 连续模式下DMA的地址。 0 15.4.25 双边沿捕获寄存器TIMx_AUXx=2/3/4/5 偏移地址0x50 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved CAP_ED_CH4 CAP_ED_CH3 CAP_ED_CH2 位 名称 访问 描述 复位值 [15:3] Reserved R0 保留。 0 通道4的双边沿捕获使能 2 CAP_ED_CH4 RW 0关闭通道4的双边沿捕获使能 0 1使能通道4的双边沿捕获使能。 通道3的双边沿捕获使能 1 CAP_ED_CH3 RW 0关闭通道3的双边沿捕获使能 0 1使能通道3的双边沿捕获使能。 通道2的双边沿捕获使能 0 CAP_ED_CH2 RW 0关闭通道2的双边沿捕获使能 0 1使能通道2的双边沿捕获使能。 注TIMx_AUX 寄存器仅适用于 CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、 CH32V31x_D8C批号倒数第六位不为0的产品。 V2.4 236

Page 240

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 16 章 基本定时器BCTM 本章模块描述适用于CH32F20x、CH32V30x和CH32V31x微控制器全系列产品。 基本定时器模块包含一个16位可自动重装的定时器TIM6和TIM7用于计数和在更新新事件 产生中断或DMA请求。 16.1 主要特征 基本定时器的主要特征包括:  16位自动重装计数器支持增计数模式  16位预分频器分频系数从165536之间动态可调  触发DAC同步电路  在更新事件时产生中断或DMA请求 16.2 原理和结构 图16-1 基本定时器的结构框图 Internal clock(CK_INT) CK_TIM from RCC TRGO To DAC Trigger controller Reset, Enable, Up, Count AutoReload U Register U Stop, clear or up U CK_PSC PSC CK_CNT CNT (prescaler) (counter) 16.2.1 概述 如图16-1所示基本定时器的结构大致可以分为两部分即输入时钟部分和核心计数器部分。 基本定时器的时钟来自于 HB 总线时钟CK_INT。这些输入的时钟信号经过各种设定的滤波分 频等操作后成为CK_PSC时钟输出给核心计数器部分。另外这些复杂的时钟来源还可以作为TRGO 输出至DAC外设。 基本定时器的核心是一个16位计数器CNT。CK_PSC经过预分频器PSC分频后成为CK_CNT 再最终输给CNTCNT支持增计数模式并有一个自动重装值寄存器ATRLR在每个计数周期结束后 为CNT重装载初始化值。 16.2.2 基本定时器和通用定时器的区别 与通用定时器相比,基本定时器缺少以下功能: V2.4 237

Page 241

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1 基本定时器缺少减计数模式和增减计数模式。 2 基本定时器缺少四路独立的比较捕获通道。 3 基本定时器不支持外部信号控制定时器。 4 基本定时器不支持增量式编码,定时器之间的级联和同步。 16.2.3 时钟输入 基本定时器的时钟由内部时钟CK_INT提供。 16.2.4 计数器和周边 CK_PSC输入给预分频器PSC进行分频。PSC是16位的实际的分频系数相当于R16_TIMx_PSC 的值+1。CK_PSC经过PSC会成为CK_INT。更改R16_TIM1_PSC的值并不会实时生效而会在更新事件 后更新给PSC。更新事件包括UG位清零和复位。 16.3 调试模式 当系统进入调试模式时根据DBG模块的设置可以控制定时器继续运转或者停止。 16.4 寄存器描述 表16-1 TIM6相关寄存器列表 名称 偏移地址 描述 复位值 R16_TIM6_CTLR1 0x40001000 TIM6控制寄存器1 0x0000 R16_TIM6_CTLR2 0x40001004 TIM6控制寄存器2 0x0000 R16_TIM6_DMAINTENR 0x4000100C TIM6 DMA/中断使能寄存器 0x0000 R16_TIM6_INTFR 0x40001010 TIM6中断状态寄存器 0x0000 R16_TIM6_SWEVGR 0x40001014 TIM6事件产生寄存器 0x0000 R16_TIM6_CNT 0x40001024 TIM6计数器 0x0000 R16_TIM6_PSC 0x40001028 TIM6计数时钟预分频器 0x0000 R16_TIM6_ATRLR 0x4000102C TIM6自动重装值寄存器 0xFFFF 表16-2 TIM7相关寄存器列表 名称 偏移地址 描述 复位值 R16_TIM7_CTLR1 0x40001400 TIM7控制寄存器1 0x0000 R16_TIM7_CTLR2 0x40001404 TIM7控制寄存器2 0x0000 R16_TIM7_DMAINTENR 0x4000140C TIM7 DMA/中断使能寄存器 0x0000 R16_TIM7_INTFR 0x40001410 TIM7中断状态寄存器 0x0000 R16_TIM7_CNT 0x40001424 TIM7计数器 0x0000 R16_TIM7_PSC 0x40001428 TIM7计数时钟预分频器 0x0000 R16_TIM7_ATRLR 0x4000142C TIM7自动重装值寄存器 0xFFFF 16.4.1 控制寄存器 1TIMx_CTLR1x=6/7 偏移地址0x00 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved ARPE Reserved OPM URS UDIS CEN V2.4 238

Page 242

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 [15:8] Reserved RO 保留。 0 自动重装预装使能位: 7 ARPE RW 0禁止自动重装值寄存器ATRLR 0 1使能自动重装值寄存器ATRLR。 [6:4] Reserved RO 保留。 0 单脉冲模式。 0在发生下一次更新事件时计数器不停止 3 OPM RW 0 1在发生下一次更新事件清除CEN位计数 器停止。 更新请求源软件通过该位选择UEV事件的源。 0如果使能了更新中断或DMA请求则下述任一事 件产生更新中断或DMA请求。 -计数器溢出/下溢 2 URS RW 0 -设置UG位 -从模式控制器产生的更新。 1如果使能了更新中断或DMA请求则只有计数器 溢出/下溢才产生更新中断或DMA请求。 禁止更新,软件通过该位允许/禁止 UEV 事件的产 生。 0允许 UEV。更新UEV事件由下述任一事件产 生:-计数器溢出/下溢 -设置UG位 1 UDIS RW -从模式控制器产生的更新具有缓存的寄存器被装 0 入它们的预装载值。 1禁止UEV。不产生更新事件各寄存器ATRLR、 PSC、CHCTLRx保持它们的值。如果设置了UG位或 从模式控制器发出了一个硬件复位,则计数器和预 分频器被重新初始化。 使能计数器Counter enable 0 CEN RW 0禁止计数器 0 1使能计数器。 16.4.2 控制寄存器 2TIMx_CTLR2x=6/7 偏移地址0x04 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved MMS[2:0] Reserved 位 名称 访问 描述 复位值 [15:7] Reserved RO 保留。 0 主模式选择这3位用于选择在主模式下送到从定 时器的同步信息TRGO。可能的组合如下 [6:4] MMS[2:0] RW 000b 000复位UG位被用于作为触发输出TRGO。如 果是触发输入产生的复位(从模式控制器处于复位 V2.4 239

Page 243

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 模式则TRGO上的信号相对实际的复位会有一个 延迟; 001使能计数器使能信号CNT_EN被用于作为触 发输出TRGO。有时需要在同一时间启动多个定 时器或控制在一段时间内使能从定时器。计数器使 能信号是通过CEN控制位和门控模式下的触发输入 信号的逻辑或产生。当计数器使能信号受控于触发 输入时TRGO 上会有一个延迟,除非选择了主/从 模式见TIMx_SMCFGR寄存器中MSM位的描述 010更新事件被选为触发输出TRGO。例如一 个主定时器的时钟可以被用作一个从定时器的预分 频器。 [3:0] Reserved RO 保留。 0 16.4.3 DMA/中断使能寄存器TIMx_DMAINTENRx=6/7 偏移地址0x0C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved UDE Reserved UIE 位 名称 访问 描述 复位值 [15:9] Reserved RO 保留。 0 更新的DMA请求使能位 8 UDE RW 0禁止更新的DMA请求 0 1允许更新的DMA请求。 [7:1] Reserved RO 保留。 0 更新中断使能位: 0 UIE RW 0禁止更新中断 0 1允许更新中断。 16.4.4 中断状态寄存器R16_TIMx_INTFRx=6/7 偏移地址0x10 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved UIF 位 名称 访问 描述 复位值 [15:1] Reserved RO 保留。 0 更新中断标志位,当产生更新事件时该位由硬件置 位,由软件清零。 0无更新事件产生 0 UIF RW0 1更新中断产生。 0 以下情形会产生更新事件: 若UDIS=0当重复计数器数值上溢或下溢时 若URS=0、UDIS=0当置UG位时或当通过软件对 V2.4 240

Page 244

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 计数器核心计数器重新初始化时。 16.4.5 事件产生寄存器TIMx_SWEVGRx=6/7 偏移地址0x14 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved UG 位 名称 访问 描述 复位值 [15:1] Reserved RO 保留。 0 更新事件产生位,产生更新事件。该位由软件置位, 由硬件自动清零。 0无动作 0 UG WO 0 1初始化计数器并产生一个更新事件。 注:预分频器的计数器也被清零,但是预分频系数 不变。若在增计数模式下则核心计数器被清零。 16.4.6 通用定时器的计数器TIMx_CNTx=6/7 偏移地址0x24 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CNT[15:0] 位 名称 访问 描述 复位值 [15:0] CNT[15:0] RW 定时器的计数器的实时值。 0 16.4.7 计数时钟预分频器TIMx_PSCx=6/7 偏移地址0x28 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PSC[15:0] 位 名称 访问 描述 复位值 定时器的预分频器的分频系数;计数器的时钟频率 [15:0] PSC[15:0] RW 0 等于分频器的输入频率/PSC+1。 16.4.8 自动重装值寄存器TIMx_ATRLRx=6/7 偏移地址0x2C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ARR[15:0] 位 名称 访问 描述 复位值 ATRLR[15:0]的值将会被装入计数器ATRLR何时动 [15:0] ARR[15:0] RW FFFFh 作和更新请阅读16.2.4节ATRLR为空时计数器 V2.4 241

Page 245

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 停止。 V2.4 242

Page 246

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 17 章 数字/模拟转换DAC 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器部分产品。 数字/模拟转换模块DAC包含2个可配置8/12位数字输入转换2路模拟电压输出的转换器。 内置三角波、噪声波形发生器支持多种事件触发转换DMA功能等。 17.1 主要特性  2个DAC转换器每个转换器对应1个输出通道  三角波、噪声波形发生器  可配置8位或12位输出  12位数据左对齐或右对齐  双DAC同时或分别转换  支持DMA功能  多种触发事件 V2.4 243

Page 247

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 17.2 功能描述 17.2.1 DAC 模块结构 图17-1 DAC模块框图 DAC Control Register DAC_CTLR TSELx[2:0] SWTRIG TIM2_TRGO DMAENx TIM4_TRGO TENx Control logic BOFFx Triangular wave xDHRx 12bit generator WAVEx[2:0]/MAMPx[3:0] Noise Generator DMA request DORx V2.4 244 12bit Digital to Analog Converter 12bit TIM5_TRGO TIM6_TRGO TIM7_TRGO TIM8_TRGO EXTI_9 V DDA V SSA V REF+ DAC_OUTx EN 17.2.2 DAC 通道配置 17.2.2.1 开启 DAC 功能: 将DAC_CTLR寄存器的ENx位置1即可打开对DAC通道x的模拟供电。经过一段启动时间 DAC通道x即被使能。DAC包含2个模拟输出通道可同时或分别独立输出。 注为了避免寄生的干扰和额外的功耗DAC通道对应的引脚需提前设置成模拟输入AIN模式。 17.2.2.2 打开输出缓冲: DAC集成了输出缓冲可以用来减少输出阻抗增加驱动能力直接驱动外部负载。每个DAC通 道输出缓存可以通过设置DAC_CTLR寄存器的BOFFx位来使能或关闭。 17.2.2.3 数据格式: 单DAC通道模式下包括8位数据右对齐、12位数据左对齐、12位数据右对齐。 8位数据右对齐时写入数据到DAC_R8BDHRx[7:0]模块将加载1个PB1时钟周期后其左

Page 248

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 移数据到数据输出寄存器DAC_DORx[11:4]。 12位数据右对齐时写入数据到DAC_R12BDHRx[11:0]模块将加载1个PB1时钟周期后右 对齐数据到数据输出寄存器DAC_DORx[11:0]。 12数据左对齐时写入数据到DAC_L12BDHRx[15:4]模块经过相应的移位后将加载1个 PB1时钟周期后左对齐数据到数据输出寄存器DAC_DORx[11:0]。 图17-2 单通道数据格式 31 24 15 7 0 8 Bit right-aligned 12Bit left-aligned 12 Bit right-aligned 双DAC通道模式下同样包括8位数据右对齐、12数据左对齐、12位数据右对齐三种方式。 8位数据右对齐时写入数据到DAC_RD8BDHR[7:0]模块将加载1个PB1时钟周期后位 [7:0]移位后到DAC_DOR1[11:4],位[15:8]移位后到DAC_DOR2[11:4]。 12数据左对齐时写入数据到DAC_LD12BDHR[31:0]模块将加载1个PB时钟周期后位 [15:4]数据移位后到DAC_DOR1[11:0],位[31:20]数据移位后到DAC_DOR2[11:0]。 12位数据右对齐写入数据到DAC_RD12BDHR[31:0]模块将加载1个PB时钟周期后位 [11:0]数据到DAC_DOR1[11:0],位[27:16]数据到DAC_DOR2[11:0]。 图17-3 双通道数据格式 31 24 15 7 0 8Bit right-aligned 12Bit left-aligned 12 Bit right-aligned 17.2.2.4 DMA 功能: DAC通道具有DMA功能。设置DAC_CTLR寄存器的DMAENx位为1开启对应通道的DMA功能。当 有触发事件不包括软件触发发生则产生一个DMA请求然后DAC_DORx寄存器的数据将被更 新。 17.2.2.5 触发事件选择: DAC转换可以由以下事件触发进行转换。当配置DAC_CTLR寄存器的TENx位为1配置 TSELx[2:0]控制位选择某个触发事件触发DAC转换。 表17-1 触发事件 触发源 类型 TSELx[2:0] 定时器6 TRGO事件 000 定时器8 TRGO事件 001 定时器7 TRGO事件 010 来自片上定时器内部信号 定时器5 TRGO事件 011 定时器2 TRGO事件 100 定时器4 TRGO事件 101 EXTI线路9 外部引脚 110 SWTRIG软件触发 软件控制位 111 V2.4 245

Page 249

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn DAC接口会监测到来自选中的定时器TRGO输出或外部中断线9的上升沿在触发后的3个PB1 时钟周期后将寄存器DAC_DORx更新为新值。 如果配置的是软件触发方式SWTRIG位一旦置1将会启动一次转换在触发后的1个PB1时 钟周期后将寄存器DAC_DORx更新为新值并且硬件对SWTRIG位自动清0。 注不能在ENx为1时改变TSELx[2:0]位。 17.2.3 DAC 转换 DAC通道的数据来自DAC_DORx寄存器但不能直接对寄存器DAC_DORx写入数据任何输出到 DAC通道x的数据都必须写入DAC_R12BDHR1、DAC_L12BDHR1、DAC_R12BDHR2、DAC_L12BDHR2、 DAC_RD12BDHR、DAC_LD12BDHR、DAC_RD8BDHR寄存器中。由系统内部的保持寄存器DAC_DHRx会获取 上述寄存器值将其经过相应时间送入DAC_DORx寄存器。 非触发方式下写入寄存器DAC_xDHRx的数据会在1个PB1时钟周期后移入DAC_DORx寄存器。 软件触发下事件触发上升沿后1个PB1时钟周期后自动更新DAC_DORx寄存器。 硬件触发定时器TRGO事件或者外部中断线9上升沿触发事件后3个PB1时钟周期后自 动更新DAC_DORx寄存器。 装入DAC_DORx寄存器数据在经过时间t 之后,输出即有效,这段时间的长短依电源电压 SETTLING 和模拟输出负载的不同会有所变化。 数字输入经过DAC被线性地转换为模拟电压输出其范围为0到V 。任一DAC通道引脚上的输 DDA 出电压满足下面的关系: DAC输出电压 = V * DAC_DORx/ 4096。 DDA 17.2.4 DAC 三角波生成器 模块内置了一个三角波生成器可以在基准信号上加上一个小幅度的三角波。设置WAVEx[1:0] 位为10选择DAC的三角波生成功能。设置DAC_CTLR寄存器的MAMPx[3:0]位来选择三角波的幅 度。 系统内部包含一个从0开始的三角波计数器在每次触发事件后3个PB1时钟周期后累加1。 计数器的值与DAC_DHRx寄存器的数值相加并丢弃溢出位后写入DAC_DORx寄存器。在传入DAC_DORx 寄存器的数值小于MAMPx[3:0]位定义的最大幅度时,三角波计数器逐步累加,一旦达到设置的最大 幅度则计数器开始递减达到0后再开始累加周而复始。将WAVEx[1:0]位置00可以复位 三角波的生成。 注1.为了产生三角波必须使能DAC触发即设DAC_CTLR寄存器的TENx位为1。 2.MAMPx[3:0]位必须在使能DAC之前设置否则其值不能修改。 图17-4 三角波生成 MAMPx[3:0] maximum amplitude + DAC_DHRx base value Decreasing Cumulative DAC_DHRx base value 0 17.2.5 DAC 噪声生成器 模块内置了一个噪声生成器是利用线性反馈移位寄存器Linear Feedback Shift Register LFSR产生幅度变化的伪噪声。设置WAVE[1:0]位为01选择DAC噪声生成功能。设置DAC_CTLR 寄存器的MAMPx[3:0]位来选择屏蔽部分LFSR的数据。 寄存器LFSR的预装入值为0xAAA。按照特定算法在每次触发事件后3个PB1时钟周期之后更 新该寄存器的值。设置DAC_CR寄存器的MAMPx[3:0]位可以屏蔽部分或者全部LFSR的数据这样的 V2.4 246

Page 250

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 得到的LSFR值与DAC_DHRx的数值相加去掉溢出位之后即被写入DAC_DORx寄存器。如果寄存器 LFSR值为0x000则会注入1防锁定机制。将WAVEx[1:0]位置00可以复位LFSR波形 的生成算法。 注为了产生噪声必须使能DAC触发即设DAC_CTLR寄存器的TENx位为1。 图17-5 LFSR寄存器算法 17.3 双 DAC 转换 当需要2个DAC同时转换的情况下为了更加便捷和高效的操作DAC模块模块集成3个双 DAC模式下的数据寄存器DAC_RD8BDHR、DAC_LD12BDHR、DAC_RD12BDHR。只需操作其中之一寄存器即 可更新2个DAC的转换值。 针对双DAC的转换可配合模块的其他寄存器可实现11种不同组合的转换模式两个通道待转 换值需写入上述3个双通道数据寄存器之一。 17.3.1 不同触发下使用相同 LFSR 设置TENx置位TSELx为不同值WAVEx为0b01MAMPx为相同的LFSR屏蔽值。当通道1触发 事件发生时将通道1数据寄存器DAC_DHR1值加上带相同屏蔽的LFSR1计数值延迟3个PB1时钟 后送给DAC_DOR1用于转换并更新LFSR1当通道2触发事件发生时将通道2数据寄存器 DAC_DHR2值加上带相同屏蔽的LFSR2计数值延迟3个PB1时钟后送给DAC_DOR2用于转换并更 新LFSR2。 17.3.2 不同触发下使用不同 LFSR 设置TENx置位TSELx为不同值WAVEx为0b01MAMPx为不同的LFSR屏蔽值。当通道1触发 事件发生时将通道1数据寄存器DAC_DHR1值加上按MAMP1[3:0所设屏蔽的LFSR1计数值延迟 3个PB1时钟后送给DAC_DOR1用于转换并更新LFSR1当通道2触发事件发生时将通道2数 据寄存器DAC_DHR2值加上按MAMP2[3:0所设屏蔽的LFSR2计数值延迟3个PB1时钟后送给 DAC_DOR2用于转换并更新LFSR2。 17.3.3 不同触发下产生相同三角波 设置TENx置位TSELx为不同值WAVEx为0b1xMAMPx设为相同三角波幅值。当通道1触发 事件发生时将通道1数据寄存器DAC_DHR1值加上MAMPx所设的相同幅值的三角波计数器值延迟 3个PB1时钟后送给DAC_DOR1用于转换并更新通道1三角波计数器当通道2触发事件发生 时将通道2数据寄存器DAC_DHR2值加上MAMPx所设的相同幅值的三角波计数器值延迟3个PB1 时钟后送给DAC_DOR2用于转换并更新通道2三角波计数器。 17.3.4 不同触发下产生不同三角波 设置TENx置位TSELx为不同值WAVEx为0b1xMAMPx设为不同的三角波幅值。当通道1触 发事件发生时将通道1数据寄存器DAC_DHR1值加上MAMP1所设幅值的三角波计数器值延迟3个 PB1时钟后送给DAC_DOR1用于转换并更新通道1三角波计数器当通道2触发事件发生时将 通道2数据寄存器DAC_DHR2值加上MAMP2所设幅值的三角波计数器值延迟3个PB1时钟后送给 V2.4 247

Page 251

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn DAC_DOR2用于转换并更新通道2三角波计数器。 17.3.5 不同触发下不使用波形发生器 设置TENx置位TSELx为不同值选择不同触发源。当通道1触发事件发生时将通道1数据寄 存器DAC_DHR1值延迟3个PB1时钟后送给DAC_DOR1用于转换当通道2触发事件发生时将通 道2数据寄存器DAC_DHR2值延迟3个PB1时钟后送给DAC_DOR2用于转换。 17.3.6 均使用软件触发 在此配置下双通道数据寄存器写入需要转换值1个PB1时钟周期后DAC_DHR1和DAC_DHR2 的数据被分别送到DAC_DOR1和DAC_DOR2用于转换。 17.3.7 相同触发下使用相同 LFSR 设置TENx置位TSELx为相同值WAVEx为0b01MAMPx为相同的LFSR屏蔽值。当触发事件发 生后寄存器DAC_DHR1的值加上带相同屏蔽的LFSR1计数值延迟3个PB1时钟后送给 DAC_DOR1用于转换并更新LFSR1同时寄存器DAC_DHR2的值加上带相同屏蔽的LFSR2计数值 延迟3个PB1时钟后送给DAC_DOR2用于转换并更新LFSR2。 17.3.8 相同触发下使用不同 LFSR 设置TENx置位TSELx为相同值WAVEx为0b01MAMPx为不同的LFSR屏蔽值。当触发事件发 生后寄存器DAC_DHR1的值加上带不同屏蔽值的LFSR1计数值延迟3个PB1时钟后送给 DAC_DOR1用于转换并更新LFSR1同时寄存器DAC_DHR2的值加上带不同屏蔽值的LFSR2计数 值延迟3个PB1时钟后送给DAC_DOR2用于转换并更新LFSR2。 17.3.9 相同触发下产生相同三角波 设置TENx置位TSELx为相同值WAVEx为0b1xMAMPx为相同的三角波幅值。当触发事件发 生后寄存器DAC_DHR1的值加上相同三角波幅值的计数器值延迟3个PB1时钟后送给 DAC_DOR1用于转换并更新通道1三角波计数器同时寄存器DAC_DHR2的值加上相同三角波幅值 的计数器值延迟3个PB1时钟后送给DAC_DOR2用于转换并更新通道2三角波计数器值。 17.3.10 相同触发下产生不同三角波 设置TENx置位TSELx为相同值WAVEx为0b1xMAMPx为不同的三角波幅值。当触发事件发 生后寄存器DAC_DHR1的值加上MAMP1[3:0]所设的三角波幅值计数器值延迟3个PB1时钟后送 给DAC_DOR1用于转换并更新通道1三角波计数器同时寄存器DAC_DHR2的值加上MAMP2[3:0] 所设的三角波幅值计数器值延迟3个PB1时钟后送给DAC_DOR2用于转换并更新通道2三角波 计数器值。 17.3.11 相同触发下不使用波形发生器 设置TENx置位TSELx为相同值。该配置下当触发事件发生后寄存器DAC_DHR1和 DAC_DHR2的值在延迟3个PB1时钟后分别送给DAC_DOR1和DAC_DOR2用于DAC转换。 17.4 寄存器描述 表17-2 DAC相关寄存器列表 名称 访问地址 描述 复位值 R32_DAC_CTLR 0x40007400 DAC配置寄存器 0x00000000 R32_DAC_SWTR 0x40007404 DAC软件触发寄存器 0x00000000 V2.4 248

Page 252

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn DAC 通道 1 右对齐 12 位数据保存寄存 R32_DAC_R12BDHR1 0x40007408 0x00000000 器 DAC 通道 1 左对齐 12 位数据保存寄存 R32_DAC_L12BDHR1 0x4000740C 0x00000000 器 R32_DAC_R8BDHR1 0x40007410 DAC通道1右对齐8位数据保存寄存器 0x00000000 DAC 通道 2 右对齐 12 位数据保存寄存 R32_DAC_R12BDHR2 0x40007414 0x00000000 器 DAC 通道 2 左对齐 12 位数据保存寄存 R32_DAC_L12BDHR2 0x40007418 0x00000000 器 R32_DAC_R8BDHR2 0x4000741C DAC通道2右对齐8位数据保存寄存器 0x00000000 R32_DAC_RD12BDHR 0x40007420 双通道右对齐12位数据保存寄存器 0x00000000 R32_DAC_LD12BDHR 0x40007424 双通道左对齐12位数据保存寄存器 0x00000000 R32_DAC_RD8BDHR 0x40007428 双通道右对齐8位数据保存寄存器 0x00000000 R32_DAC_DOR1 0x4000742C DAC通道1数据输出寄存器 0x00000000 R32_DAC_DOR2 0x40007430 DAC通道2数据输出寄存器 0x00000000 17.4.1 DAC 配置寄存器DAC_CTLR 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved DMAEN2 MAMP2[3:0] WAVE2[2:0] TSEL2[2:0] TEN2 BOFF2 EN2 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DMAEN1 MAMP1[3:0] WAVE1[2:0] TSEL1[2:0] TEN1 BOFF1 EN1 位 名称 访问 描述 复位值 [31:29] Reserved RO 保留。 0 DAC通道2的DMA使能 28 DMAEN2 RW 0关闭DAC通道2 DMA功能 0 1使能DAC通道2 DMA功能。 DAC 通道 2 屏蔽/幅值设置,软件设置这个区域用来在 噪声生成模式下选择LFSR数据屏蔽位在三角波形生 成模式下选择波形的幅值: 0000不屏蔽LFSR位0/三角波幅值为1 0001不屏蔽LFSR位[1:0]/三角波幅值为3 0010不屏蔽LFSR位[2:0]/三角波幅值为7 0011不屏蔽LFSR位[3:0]/三角波幅值为15 [27:24] MAMP2[3:0] RW 0100不屏蔽LFSR位[4:0]/三角波幅值为31 0000b 0101不屏蔽LFSR位[5:0]/三角波幅值为63 0110不屏蔽LFSR位[6:0]/三角波幅值为127 0111不屏蔽LFSR位[7:0]/三角波幅值为255 1000不屏蔽LFSR位[8:0]/三角波幅值为511 1001不屏蔽LFSR位[9:0]/三角波幅值为1023 1010不屏蔽LFSR位[10:0]/三角波幅值为2047 ≥1011不屏蔽LFSR位[11:0]/三角波幅值为4095。 [23:22] WAVE2[1:0] RW DAC通道2的噪声/三角波生成使能 00b V2.4 249

Page 253

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 00关闭波形发生器 01使能噪声波形发生器 1x使能三角波波形发生器。 DAC通道2触发事件选择设置 000TIM6 TRGO事件 001TIM8 TRGO事件 010TIM7 TRGO事件 011TIM5 TRGO事件 [21:19] TSEL2[2:0] RW 000b 100TIM2 TRGO事件 101TIM4 TRGO事件 110外部中断线9 111软件触发 其他:保留。 DAC通道2外部触发模式使能 0关闭 DAC 通道 2 触发功能,写入 DAC_xDHR 寄存器 的数据在1个PB1时钟周期后送入DAC_DOR2寄存器。 18 TEN2 RW 1使能 DAC 通道 2 触发功能,写入 DAC_xDHR 寄存器 0 的数据在3个PB1时钟周期后送入DAC_DOR2寄存器。 注如果选择软件触发DAC_xDHR中的数据只需1个 PB1时钟周期后送入DAC_DOR2寄存器。 DAC通道2输出缓冲关闭控制建议打开 17 BOFF2 RW 0打开DAC通道2输出缓存 0 1关闭DAC通道2输出缓存。 DAC通道2使能 16 EN2 RW 0关闭DAC通道2 0 1使能DAC通道2。 [15:13] Reserved RO 保留。 0 DAC通道1的DMA使能 12 DMAEN1 RW 0关闭DAC通道1 DMA功能 0 1使能DAC通道1 DMA功能。 DAC 通道 1 屏蔽/幅值设置,软件设置这个区域用来在 噪声生成模式下选择LFSR数据屏蔽位在三角波形生 成模式下选择波形的幅值: 0000不屏蔽LFSR位0/三角波幅值为1 0001不屏蔽LFSR位[1:0]/三角波幅值为3 0010不屏蔽LFSR位[2:0]/三角波幅值为7 0011不屏蔽LFSR位[3:0]/三角波幅值为15 [11:8] MAMP1[3:0] RW 0100不屏蔽LFSR位[4:0]/三角波幅值为31 0000b 0101不屏蔽LFSR位[5:0]/三角波幅值为63 0110不屏蔽LFSR位[6:0]/三角波幅值为127 0111不屏蔽LFSR位[7:0]/三角波幅值为255 1000不屏蔽LFSR位[8:0]/三角波幅值为511 1001不屏蔽LFSR位[9:0]/三角波幅值为1023 1010不屏蔽LFSR位[10:0]/三角波幅值为2047 ≥1011不屏蔽LFSR位[11:0]/三角波幅值为4095。 [7:6] WAVE1[1:0] RW DAC通道1的噪声/三角波生成使能。 00b V2.4 250

Page 254

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 00关闭波形发生器 01使能噪声波形发生器 1x使能三角波波形发生器。 DAC通道1触发事件选择设置 000TIM6 TRGO事件 001TIM8 TRGO事件 010TIM7 TRGO事件 011TIM5 TRGO事件 [5:3] TSEL1[2:0] RW 000b 100TIM2 TRGO事件 101TIM4 TRGO事件 110外部中断线9 111软件触发 其他:保留。 DAC通道1外部触发模式使能 0关闭 DAC 通道 1 触发功能,写入 DAC_xDHR 寄存器 的数据在1个PB1时钟周期后送入DAC_DOR1寄存器。 2 TEN1 RW 1使能 DAC 通道 1 触发功能,写入 DAC_xDHR 寄存器 0 的数据在3个PB1时钟周期后送入DAC_DOR1寄存器。 注如果选择软件触发DAC_xDHR中的数据只需1个 PB1时钟周期后送入DAC_DOR1寄存器。 DAC通道1输出缓冲关闭控制建议打开 1 BOFF1 RW 0打开DAC通道1输出缓存 0 1关闭DAC通道1输出缓存。 DAC通道1使能 0 EN1 RW 0关闭DAC通道1 0 1使能DAC通道1。 17.4.2 DAC 软件触发寄存器DAC_SWTR 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SW SW Reserved TRIG2 TRIG1 位 名称 访问 描述 复位值 [31:2] Reserved RO 保留。 0 DAC通道2软件触发控制位 0关闭DAC通道2软件触发 1使能DAC通道2软件触发。 1 SWTRIG2 WO 0 注一旦DAC_xDHR中的数据1个PB1时钟 周期后送入DAC_DOR2寄存器该位将硬件 清0。 0 SWTRIG1 WO DAC通道1软件触发控制位 0 V2.4 251

Page 255

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0关闭DAC通道1软件触发 1使能DAC通道1软件触发。 注一旦DAC_xDHR中的数据1个PB1时钟 周期后送入DAC_DOR1寄存器该位将硬件 清0。 17.4.3 DAC 通道 1 右对齐 12 位数据保存寄存器DAC_R12BDHR1 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DACC1DHR[11:0] 位 名称 访问 描述 复位值 [31:12] Reserved RO 保留。 0 [11:0] DACC1DHR[11:0] RW DAC通道1的12位右对齐数据。 0 17.4.4 DAC 通道 1 左对齐 12 位数据保存寄存器DAC_L12BDHR1 偏移地址0x0C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DACC1DHR[11:0] Reserved 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 [15:4] DACC1DHR[11:0] RW DAC通道1的12位左对齐数据。 0 [3:0] Reserved RO 保留。 0 17.4.5 DAC 通道 1 右对齐 8 位数据保存寄存器DAC_R8BDHR1 偏移地址0x10 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DACC1DHR[7:0] 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留。 0 [7:0] DACC1DHR[7:0] RW DAC通道1的8位右对齐数据。 0 V2.4 252

Page 256

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 17.4.6 DAC 通道 2 右对齐 12 位数据保存寄存器DAC_R12BDHR2 偏移地址0x14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DACC2DHR[11:0] 位 名称 访问 描述 复位值 [31:12] Reserved RO 保留。 0 [11:0] DACC2DHR[11:0] RW DAC通道2的12位右对齐数据。 0 17.4.7 DAC 通道 2 左对齐 12 位数据保存寄存器DAC_L12BDHR2 偏移地址0x18 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DACC2DHR[11:0] Reserved 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 [15:4] DACC2DHR[11:0] RW DAC通道2的12位左对齐数据。 0 [3:0] Reserved RO 保留。 0 17.4.8 DAC 通道 2 右对齐 8 位数据保存寄存器DAC_R8BDHR2 偏移地址0x1C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DACC2DHR[7:0] 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留。 0 [7:0] DACC2DHR[7:0] RW DAC通道2的8位右对齐数据。 0 17.4.9 DAC 双通道右对齐 12 位数据保存寄存器DAC_RD12BDHR 偏移地址0x20 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved DACC2DHR[11:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DACC1DHR[11:0] V2.4 253

Page 257

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 [31:28] Reserved RO 保留。 0 [27:16] DACC2DHR[11:0] RW DAC通道2的12位右对齐数据。 0 [15:12] Reserved RO 保留。 0 [11:0] DACC1DHR[11:0] RW DAC通道1的12位右对齐数据。 0 17.4.10 DAC 双通道左对齐 12 位数据保存寄存器DAC_LD12BDHR 偏移地址0x24 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DACC2DHR[11:0] Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DACC1DHR[11:0] Reserved 位 名称 访问 描述 复位值 [31:20] DACC2DHR[11:0] RW DAC通道2的12位左对齐数据。 0 [19:16] Reserved RO 保留。 0 [15:4] DACC1DHR[11:0] RW DAC通道1的12位左对齐数据。 0 [3:0] Reserved RO 保留。 0 17.4.11 DAC 双通道右对齐 8 位数据保存寄存器DAC_RD8BDHR 偏移地址0x28 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DACC2DHR[7:0] DACC1DHR[7:0] 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 [15:8] DACC2DHR[7:0] RW DAC通道2的8位右对齐数据。 0 [7:0] DACC1DHR[7:0] RW DAC通道1的8位右对齐数据。 0 17.4.12 DAC 通道 1 数据输出寄存器DAC_DOR1 偏移地址0x2C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DACC1DOR[11:0] 位 名称 访问 描述 复位值 [31:12] Reserved RO 保留。 0 V2.4 254

Page 258

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [11:0] DACC1DOR[11:0] RO DAC通道1输出数据。 0 17.4.13 DAC 通道 2 数据输出寄存器DAC_DOR2 偏移地址0x30 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DACC2DOR[11:0] 位 名称 访问 描述 复位值 [31:12] Reserved RO 保留。 0 [11:0] DACC2DOR[11:0] RO DAC通道2输出数据。 0 V2.4 255

Page 259

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 18 章 通用同步异步收发器USART 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 该模块包含3个通用同步异步收发器USART1/2/3和5个通用异步收发器UART4/5/6/7/8。 注对于CH32V203C8、CH32F203C8串口4为同步异步收发器USART4。 18.1 主要特征  全双工或半双工的同步或异步通信  NRZ数据格式  分数波特率发生器最高9Mbps  可编程数据长度  可配置的停止位  支持LINIrDA编码器智能卡  支持DMA  多种中断源 V2.4 256

Page 260

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 18.2 概述 图18-1 通用同步/异步收发器的结构框图 当 TE发送使能位置位时发送移位寄存器里的数据在 TX 引脚上输出,时钟在 CK 引脚上输 出。在发送时,最先移出的是最低有效位,每个数据帧都由一个低电平的起始位开始,然后发送器根 据M字长位上的设置发送八位或九位的数据字最后是数目可配置的停止位。如果配有奇偶检验 位,数据字的最后一位为校验位。在 TE置位后会发送一个空闲帧空闲帧是 10 位或 11位高电平 包含停止位。断开帧是10位或11位低电平后跟着停止位。 18.3 波特率发生器 收发器的波特率 = FCLK/16*USARTDIVFCLK是PBx的时钟即PCLK1或PCLK2USART1模 块使用PCLK2其余的使用PCLK1。USARTDIV的值是根据USART_BRR中的DIV_M和DIV_F两个域决定 的,具体计算的公式为: V2.4 257

Page 261

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn USARTDIV = DIV_M+DIV_F/16 需要注意的是,波特率产生器产生的波特率不一定能刚好生成用户所需要的,这其中可能是存在 偏差。除了尽量取接近的值减小偏差的方法还可以是增大PBx的时钟。比如设定波特率为9600bps 的时USARTDIV的值设为78.125在12MHz时可以得到9600bps的波特率但是如果你需要115200bps 的波特率时,计算的 USARTDIV 是 6.51,但是实际上在 USART_BRR里填入的值最接近只能是 6.5,实 际产生的波特率是115384bps误差达到0.16%。 发送方发出的串口波形传到接收端时,接收方和发送方的波特率是有一定误差的。误差主要来自 三个方面:接收方和发送方实际的波特率不一致;接收方和发送方的时钟有误差;波形在线路中产生 的变化。外设模块的接收器是有一定接收容差能力的,当以上三个方面产生的总偏差之和小于模块的 容差能力极限时这个总偏差不影响收发。模块的容差能力极限受是否采用分数波特率和M位数据 域字长影响采用分数波特率和使用9位数据域长度会使容差能力极限降低但不低于3%。 18.4 同步模式 同步模式使得系统在使用USART模块时可以输出时钟信号。在开启同步模式对外发送数据时CK 引脚会同时对外输出时钟。 开启同步模式的方式是对控制寄存器2R16_USARTx_CTLR2的CLKEN位置位但同时需要关闭 LIN模式、智能卡模式、红外模式和半双工模式即保证SCEN、HDSEL和IREN位处于复位状态这三 位在控制寄存器3R16_USARTx_CTLR3中。 同步模式使用的要点在于时钟的输出控制。有以下几点需要注意: USART模块同步模式只工作在主模式即CK引脚只输出时钟不接收输入 只在TX引脚输出数据时输出时钟信号 LBCL位决定在发送最后一位数据位时是否输出时钟CPOL位决定时钟的极性CPHA决定时钟的 相位这三个位在控制寄存器2R16_USARTx_CTLR2这三个位需要在TE和RE未被使能的情况 下设置具体区别见图18-2。 接收器在同步模式下只会在输出时钟时采样,需要从设备保持一定的信号建立时间和保持时间, 具体见图18-3。 V2.4 258

Page 262

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图18-2 USART时钟时序示例M=0 图18-3 数据采样保持时间 CK (capture strobe on CK rising edge in this example) Data on RX valid DATA bit (from slave) t t SETUP HOLD t = t 1/16 bit time SETUP HOLD 18.5 单线半双工模式 半双工模式支持使用单个引脚只使用TX引脚来接收和发送TX引脚和RX引脚在芯片内部连 接。 开启半双工模式的方式是对控制寄存器3R16_USARTx_CTLR3的HDSEL位置位但同时需要关 闭 LIN 模式、智能卡模式、红外模式和同步模式,即保证 SCEN、CLKEN 和 IREN 位处于复位状态,这 三位在控制寄存器2和3R16_USARTx_CTLR2和R16_USARTx_CTLR3中。 设置成半双工模式之后,需要把 TX的 IO 口设置成开漏输出高模式。在 TE置位的情况下只要 将数据写到数据寄存器上,就会发送出去。特别要注意的是,半双工模式可能会出现多设备使用单总 线收发时的总线冲突,这需要用户用软件自行避免。 18.6 智能卡 智能卡模式支持ISO7816-3协议访问智能卡控制器。 开启智能卡模式的方式是对控制寄存器3R16_USARTx_CTLR3的SCEN位置位但同时需要关闭 LIN 模式、半双工模式和红外模式,即保证 LINEN、HDSEL 和 IREN 位处于复位状态,但是可以开启 V2.4 259

Page 263

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn CLKEN来输出时钟这些位在控制寄存器2和3R16_USARTx_CTLR2和R16_USARTx_CTLR3中。 为了支持智能卡模式USART应当被置为8位数据位外加1位校验位它的停止位建议配置成发 送和接收都为 1.5 位,智能卡模式是一种单线半双工的协议,它使用 TX 线作为数据通讯,应当被配 置为开漏输出加上拉。当接收方接收一帧数据检测到奇偶校验错误时会在停止位时发出一个NACK 信号即在停止位期间主动把TX拉低一个周期发送方检测到NACK信号后会产生帧错误应用程 序据此可以重发。图17-4展示了正确情况下和发生奇偶校验错误情况下的TX引脚上的波形图。USART 的TC标志发送完成标志可以延迟GT保护时间个时钟产生接收方也不会将自己置的NACK信 号认成起始位。 图18-4 (未)发生奇偶校验错误示意图 在智能卡模式下CK引脚使能后输出的波形和通讯无关它仅仅是给智能卡提供时钟的它的值 是PB时钟再经过五位可设置的时钟分频分频值为PSC的两倍最高62分频。 18.7 IrDA USART模块支持控制IrDA红外收发器进行物理层通信。使用IrDA必须清除LINEN、STOP、CLKEN、 SCEN和HDSEL位。USART模块和SIR物理层红外收发器之间使用NRZ不归零编码最高支持 到115200bps速率。 IrDA是一个半双工的协议如果UASRT正在给SIR物理层发数据那么IrDA解码器将会忽视新 发来的红外信号,如果 USART 正在接受从 SIR 发来的数据,那么 SIR 不会接受来自 USART 的信号。 USART 发给 SIR 和 SIR 发给 USART 的电平逻辑是不一样的SIR 接收逻辑中,高电平为 1低电平为 0但是在SIR发送逻辑中高电平为0低电平为1。 18.8 DMA USART模块支持DMA功能可以利用DMA实现快速连续收发。当启用DMA时TXE被置位时DMA 就会从设定的内存空间向发送缓冲区写数据。当使用DMA接收时每次RXNE置位后DMA就会将接收 缓冲区里的数据转移到特定的内存空间。 18.9 中断 USART模块支持多种中断源包括发送数据寄存器空TXE、CTS、发送完成TC、接收数据 就绪RXNE、数据溢出ORE、线路空闲IDLE、奇偶校验出错PE、断开标志LBD、噪 声NE、多缓冲通信的溢出ORE和帧错误FE等等。 表18-1 中断和对应的使能位的关系 中断源 使能位 V2.4 260

Page 264

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 数据寄存器空TXE TXEIE 允许发送CTS CTSIE 发送完成TC TCIE 接收数据就绪RXNE RXNEIE 数据溢出ORE 线路空闲IDLE IDLEIE 奇偶校验出错PE PEIE 断开标志LBD LBDIE 噪声NE 多缓冲通信的溢出ORE EIE 多缓冲通信的帧错误FE 18.10 寄存器描述 表18-2 USART1相关寄存器列表 名称 访问地址 描述 复位值 R32_USART1_STATR 0x40013800 UASRT1状态寄存器 0x000000C0 R32_USART1_DATAR 0x40013804 UASRT1数据寄存器 0x00000000 R32_USART1_BRR 0x40013808 UASRT1波特率寄存器 0x00000000 R32_USART1_CTLR1 0x4001380C UASRT1控制寄存器1 0x00000000 R32_USART1_CTLR2 0x40013810 UASRT1控制寄存器2 0x00000000 R32_USART1_CTLR3 0x40013814 UASRT1控制寄存器3 0x00000000 R32_USART1_GPR 0x40013818 UASRT1保护时间和预分频寄存器 0x00000000 R32_USART1_CTRL4 0x4001381C UASRT1控制寄存器4 0x00000000 表18-3 USART2相关寄存器列表 名称 访问地址 描述 复位值 R32_USART2_STATR 0x40004400 UASRT2状态寄存器 0x000000C0 R32_USART2_DATAR 0x40004404 UASRT2数据寄存器 0x00000000 R32_USART2_BRR 0x40004408 UASRT2波特率寄存器 0x00000000 R32_USART2_CTLR1 0x4000440C UASRT2控制寄存器1 0x00000000 R32_USART2_CTLR2 0x40004410 UASRT2控制寄存器2 0x00000000 R32_USART2_CTLR3 0x40004414 UASRT2控制寄存器3 0x00000000 R32_USART2_GPR 0x40004418 UASRT2保护时间和预分频寄存器 0x00000000 R32_USART2_CTRL4 0x4000441C UASRT2控制寄存器4 0x00000000 表18-4 USART3相关寄存器列表 名称 访问地址 描述 复位值 R32_USART3_STATR 0x40004800 UASRT3状态寄存器 0x000000C0 R32_USART3_DATAR 0x40004804 UASRT3数据寄存器 0x00000000 R32_USART3_BRR 0x40004808 UASRT3波特率寄存器 0x00000000 R32_USART3_CTLR1 0x4000480C UASRT3控制寄存器1 0x00000000 R32_USART3_CTLR2 0x40004810 UASRT3控制寄存器2 0x00000000 R32_USART3_CTLR3 0x40004814 UASRT3控制寄存器3 0x00000000 V2.4 261

Page 265

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R32_USART3_GPR 0x40004818 UASRT3保护时间和预分频寄存器 0x00000000 R32_USART3_CTRL4 0x4000481C UASRT3控制寄存器4 0x00000000 表18-5 USART4相关寄存器列表 名称 访问地址 描述 复位值 R32_USART4_STATR 0x40004C00 USART4状态寄存器 0x000000C0 R32_USART4_DATAR 0x40004C04 USART4数据寄存器 0x00000000 R32_USART4_BRR 0x40004C08 USART4波特率寄存器 0x00000000 R32_USART4_CTLR1 0x40004C0C USART4控制寄存器1 0x00000000 R32_USART4_CTLR2 0x40004C10 USART4控制寄存器2 0x00000000 R32_USART4_CTLR3 0x40004C14 USART4控制寄存器3 0x00000000 R32_USART4_GPR 0x40004C18 USART4保护时间和预分频寄存器 0x00000000 R32_USART4_CTRL4 0x40004C1C UASRT4控制寄存器4 0x00000000 表18-6 USART5相关寄存器列表 名称 访问地址 描述 复位值 R32_USART5_STATR 0x40005000 USART5状态寄存器 0x000000C0 R32_USART5_DATAR 0x40005004 USART5数据寄存器 0x00000000 R32_USART5_BRR 0x40005008 USART5波特率寄存器 0x00000000 R32_USART5_CTLR1 0x4000500C USART5控制寄存器1 0x00000000 R32_USART5_CTLR2 0x40005010 USART5控制寄存器2 0x00000000 R32_USART5_CTLR3 0x40005014 USART5控制寄存器3 0x00000000 R32_USART5_GPR 0x40005018 USART5保护时间和预分频寄存器 0x00000000 R32_USART5_CTRL4 0x4000501C UASRT5控制寄存器4 0x00000000 表18-7 USART6相关寄存器列表 名称 访问地址 描述 复位值 R32_USART6_STATR 0x40001800 USART6状态寄存器 0x000000C0 R32_USART6_DATAR 0x40001804 USART6数据寄存器 0x00000000 R32_USART6_BRR 0x40001808 USART6波特率寄存器 0x00000000 R32_USART6_CTLR1 0x4000180C USART6控制寄存器1 0x00000000 R32_USART6_CTLR2 0x40001810 USART6控制寄存器2 0x00000000 R32_USART6_CTLR3 0x40001814 USART6控制寄存器3 0x00000000 R32_USART6_GPR 0x40001818 USART6保护时间和预分频寄存器 0x00000000 R32_USART6_CTRL4 0x4000181C UASRT6控制寄存器4 0x00000000 表18-8 USART7相关寄存器列表 名称 访问地址 描述 复位值 R32_USART7_STATR 0x40001C00 USART7状态寄存器 0x000000C0 R32_USART7_DATAR 0x40001C04 USART7数据寄存器 0x00000000 R32_USART7_BRR 0x40001C08 USART7波特率寄存器 0x00000000 R32_USART7_CTLR1 0x40001C0C USART7控制寄存器1 0x00000000 R32_USART7_CTLR2 0x40001C10 USART7控制寄存器2 0x00000000 R32_USART7_CTLR3 0x40001C14 USART7控制寄存器3 0x00000000 V2.4 262

Page 266

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R32_USART7_GPR 0x40001C18 USART7保护时间和预分频寄存器 0x00000000 R32_USART7_CTRL4 0x40001C1C UASRT7控制寄存器4 0x00000000 表18-9 USART8相关寄存器列表 名称 访问地址 描述 复位值 R32_USART8_STATR 0x40002000 USART8状态寄存器 0x000000C0 R32_USART8_DATAR 0x40002004 USART8数据寄存器 0x00000000 R32_USART8_BRR 0x40002008 USART8波特率寄存器 0x00000000 R32_USART8_CTLR1 0x4000200C USART8控制寄存器1 0x00000000 R32_USART8_CTLR2 0x40002010 USART8控制寄存器2 0x00000000 R32_USART8_CTLR3 0x40002014 USART8控制寄存器3 0x00000000 R32_USART8_GPR 0x40002018 USART8保护时间和预分频寄存器 0x00000000 R32_USART8_CTRL4 0x4000201C UASRT8控制寄存器4 0x00000000 18.10.1 USART 状态寄存器USARTx_STATRx=1/2/3/4/5/6/7/8 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MS_ER RX_BU Reserved CTS LBD TXE TC RXNE IDLE ORE NE FE PE R SY 位 名称 访问 描述 复位值 [31:12] Reserved RO 保留。 0 MARK或SPACE校验错误标志。在接收模式下 如果产生 MARK 或 SPACE 校验错误,硬件置位 此位。读此位再读数据寄存器的操作会复位此 位。如果之前MS_ERRIE被置位那么此位被置 11 MS_ERR RO 0 位会产生相应中断。 注:仅适用于 CH32F20x_D8、CH32F20x_D8C、 CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C批 号倒数第六位不为0的产品。 接收状态指示位: 0处于非接收状态 1工作在接收状态时此位置位。 10 RX_BUSY RO 0 注:仅适用于 CH32F20x_D8、CH32F20x_D8C、 CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C批 号倒数第六位不为0的产品。 CTS 状态改变标志。如果设置了 CTSE 位,当 nCTS输出状态改变时该位将由硬件置高。由 软件清零。如果CTSIE位已经被置位则会产 9 CTS RW0 0 生中断。 0nCTS状态线上没有变化 1nCTS状态线上存在变化。 V2.4 263

Page 267

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn LIN Break检测标志。当检测到LIN Break时 该位被硬件置位。由软件清零。如果LBDIE已 8 LBD RW0 经被置位,则将会产生中断。 0 0没有检测待LIN Break 1检测到LIN Break。 发送数据寄存器空标志。当TDR寄存器中的的 数据被硬件转移到移位寄存器的时候,该位被 硬件置位。如果TXEIE已经被置位时就会产 7 TXE RO 生中断,对数据寄存器进行写操作,此位将会 1 被复位。 0数据还没被转移到移位寄存器 1数据已经被转移到移位寄存器。 发送完成标志。当含有数据的一帧发送完成 后并且TXE被置位则硬件将会此位置位 如果TCIE被置位还会产生对应中断软件读 6 TC RW0 了此位再写数据寄存器则会清除此位。也可以 1 直接写0来清除此位。 0发送还未完成 1发送完成。 读数据寄存器非空标志,当移位寄存器中的数 据被转移到数据寄存器中,该位会被硬件置 位。如果RXNEIE已经被置位则还会产生对应 5 RXNE RW0 的中断。对数据寄存器的读操作可以将该位清 0 除。也可以直接写0来清除该位。 0数据还没收到 1数据收到能够读出。 总线空闲标志。当总线空闲时,该位将会被硬 件置位。如果IDLEIE已经被置位则会产生对 应的中断。读状态寄存器再读数据寄存器的操 4 IDLE RO 作会清除此位。 0 0没有检测到总线空闲 1总线正空闲。 注此位不会被再次置位直到RXNE被置位。 过载错误标志。当接收移位寄存器存在数据需 要转到数据寄存器时,但是数据寄存器的接收 域还有数据未读出时,此位将会被置位。如果 RXNEIE被置位了还会产生对应中断。 0没有过载错误 3 ORE RO 0 1发生过载错误。 注:发生过载错误时,数据寄存器的值不会丢 失,但是移位寄存器的值会被覆盖。如果设置 可EIE位在多缓冲区通讯模式下ORE标志 位置位会产生中断。 噪声错误标志。当检测到噪声错误标志时,由 2 NE RO 硬件置位。读状态寄存器后,再读数据寄存器 0 的操作会复位此位。 V2.4 264

Page 268

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0没有检测到噪声 1检测到噪声。 注该位不会产生中断。如果设置了EIE位 在多缓冲区通讯模式下FE标志位置位会产生 中断。 帧错误标志。当检测到同步错误,过多的噪声 或者断开符,该位将会被硬件置位。读此位再 读数据寄存器的操作会复位此位。 0没有检测到帧错误 1 FE RO 0 1检测到帧错误。 注该位不会产生中断如果设置了EIE位 在多缓冲区通讯模式下FE标志位置位会产生 中断。 校验错误标志。在接收模式下,如果产生奇偶 检验错误,硬件置位此位。读此位再读数据寄 存器的操作会复位此位。在清除此位前,软件 必须等RXNE标志位被置位。如果PEIE之前已 0 PE RO 0 经被置位,那么此位被置位会产生对应的中 断。 0没有检验错误 1出现奇偶校验错误。 18.10.2 USART 数据寄存器USARTx_DATARx=1/2/3/4/5/6/7/8 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DR[8:0] 位 名称 访问 描述 复位值 [31:9] Reserved RO 保留。 0 数据寄存器。这个寄存器实际上是接收数据寄 存器RDR和发送寄存器TDR两个寄存器 [8:0] DR[8:0] RW 0 组成DR的读写操作起始分别是读接收寄存器 RDR和写发送寄存器TDR。 18.10.3 USART 波特率寄存器USARTx_BRRx=1/2/3/4/5/6/7/8 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DIV_Mantissa[11:0] DIV_Fraction[3:0] V2.4 265

Page 269

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 DIV_Mantissa [15:4] RW 这12位定义了分频器除法因子的整数部分。 0 [11:0] [3:0] DIV_Fraction[3:0] RW 这4位定义了分频器除法因子的小数部分。 0 18.10.4 USART 控制寄存器 1USARTx_CTLR1x=1/2/3/4/5/6/7/8 偏移地址0x0C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 M_EXT UE M WAKE PCE PS PEIE TXEIE TCIE RXNEIE IDLEIE TE RE RWU SBK 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 字长扩展位: 00无效M位决定数据长度。 017个数据位 106个数据位 [15:14] M_EXT RW 0 115个数据位。 注:仅适用于 CH32F20x_D8、CH32F20x_D8C、 CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C批 号倒数第六位不为0的产品。 USART使能位。 0禁止USART 13 UE RW 1使能USART。 0 当此位被清零后,在当前字节传输完成后, USART的分频器和输出都会停止工作。 字长位。 12 M RW 08个数据位 0 19个数据位。 唤醒位。此位决定了把USART唤醒的方法 11 WAKE RW 0总线空闲 0 1地址标记。 校验位使能。 0校验位关闭 1校验位使能。 10 PCE RW 对于接收方,就是进行对数据的奇偶校验;对 0 于发送方,就是插入校验位。一旦设置了此位, 只有当前字节传输完成后,校验位使能才生 效。 奇偶校验选择: 9 PS RW 0偶校验 0 1奇校验。 V2.4 266

Page 270

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 设置了该位后,只有当前字节传输完成后,校 验位使能才生效。 奇偶检验中断使能位。 8 PEIE RW 0禁止产生奇偶检验错误中断 0 1允许产生奇偶检验错误中断。 发送缓冲区空中断使能: 7 TXEIE RW 0禁止产生发送缓冲区空中断 0 1允许产生发送缓冲区空中断。 发送完成中断使能: 6 TCIE RW 0禁止产生发送完成中断 0 1允许产生发送完成中断。 接收缓冲区非空中断使能: 5 RXNEIE RW 0禁止产生接收缓冲区非空中断 0 1允许产生接收缓冲区非空中断。 总线空闲中断使能: 4 IDLEIE RW 0禁止产生总线空闲中断 0 1允许产生总线空闲中断。 发送使能。 3 TE RW 0关闭发送器 0 1使能发送器。 接收使能。 0关闭接收器 2 RE RW 0 1使能接收器接收器开始检测RX引脚上的 起始位。 接收唤醒。该位决定是否把USART置于静默模 式: 0接收器处于正常工作模式 1接收器处于静默模式。 1 RWU RW 注1置RWU位之前USART需要先接收一个数 0 据字节,否则在静默模式下,不能被总线空闲 唤醒; 注2当配置成地址标记唤醒时在RXNE被置 位时不能用软件修改RWU位。 发送帧断开字符控制位。置此位来发送一个帧 断开字符。在断开帧的停止位时,由硬件复位。 0 SBK RW 0 0不发送 1发送。 18.10.5 USART 控制寄存器 2USARTx_CTLR2x=1/2/3/4/5/6/7/8 偏移地址0x10 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ReserLINEN STOP CLKEN CPOL CPHA LBCL Reser LBDIE LBDL Reser ADD[3:0] V2.4 267

Page 271

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn ved ved ved 位 名称 访问 描述 复位值 [31:15] Reserved RO 保留。 0 LIN模式使能位置位则使能LIN模式。在LIN 14 LINEN RW 模式下可以使用SBK位发送LIN同步断开符 0 号以及检测LIN同步断开符。 停止位设置域。这两位来设置停止位。 001个停止位 [13:12] STOP RW 010.5个停止位; 00b 102个停止位 111.5个停止位。 时钟使能使能CK引脚。 11 CLKEN RW 0禁止 0 1使能。 时钟极性设置位。在同步模式下,可以用该位 选择SLCK引脚上时钟输出的极性和CPHA一 起配合来产生需要的时钟/数据的采样关系。 10 CPOL RW 0 0总线空闲时CK引脚上保持低电平 1总线空闲时CK引脚上保持高电平。 注:使能发送后此位不可被修改。 时钟相位设置位。在同步模式下,可以用该位 选择 SLCK 引脚上的时钟输出的相位,和 CPOL 位一起配合来产生需要的时钟/数据的采样关 9 CPHA RW 系。 0 0在时钟的第一个边沿进行数据捕获 1在时钟的第二个边沿进行数据捕获。 注:使能发送后此位不可被修改。 最后一个时钟脉冲控制位: 在同步模式下,使用该位来控制是否在 CK 引 脚上输出最后发送的那个数据字节对应的时 8 LBCL RW 钟脉冲; 0 0最后一位数据的时钟脉冲会从CK输出 1最后一位数据的时钟脉冲不从CK输出。 注:使能发送后此位不可被修改。 7 Reserved RW 保留。 0 LIN Break检测中断使能 6 LBDIE RW 0关闭LBD引起的中断 0 1使能LBD引起的中断。 LIN Break检测长度该位用来选择是11位还 是10位的断开符检测。 5 LBDL RW 0 010位的断开符检测 111位的断开符检测。 4 Reserved RW 保留。 0 [3:0] ADD[3:0] RW 地址域用来设置本设备的USART节点地址。 0 V2.4 268

Page 272

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 在多处理器通讯下的静默模式中使用的,使用 地址标记来唤醒某个USART设备。 18.10.6 USART 控制寄存器 3USARTx_CTLR3x=1/2/3/4/5/6/7/8 偏移地址0x14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved CTSIE CTSE RTSE DMAT DMAR SCEN NACK HDSEL IRLP IREN EIE 位 名称 访问 描述 复位值 [31:11] Reserved RO 保留。 0 CTSIE中断使能位 10 CTSIE RW 0在CTS被置位时不产生中断 0 1在CTS被置位时会产生中断。 CTS使能位 9 CTSE RW 0关闭CTS流控 0 1使能CTS流控。 RTS使能位 8 RTSE RW 0关闭RTS流控 0 1使能RTS流控。 DMA发送使能位 7 DMAT RW 0在发送时不使用DMA 0 1在发送时使用DMA。 DMA接收使能位 6 DMAR RW 0在接收时不使用DMA 0 1在接收时使用DMA。 智能卡模式使能位: 5 SCEN RW 0关闭智能卡模式 0 1使能智能卡模式。 智能卡NACK使能位 4 NACK RW 0在校验错误出现时不发送NACK 0 1在校验错误出现时发送NACK。 半双工模式选择位: 3 HDSEL RW 0关闭半双工模式 0 1开启半双工模式。 红外低功耗选择位: 2 IRLP RW 0在选择红外线时关闭低功耗模式 0 1在选择红外线时启用低功耗模式。 红外线使能位: 1 IREN RW 0关闭红外模式 0 1使能红外模式。 错误中断位使能: 0 EIE RW 0 0关闭错误中断 V2.4 269

Page 273

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1使能错误中断。 置此位后在DMAR被置位的前提下如果FE、 ORE或NE被置位就会产生中断。 18.10.7 USART 保护时间和预分频寄存器USARTx_GPRx=1/2/3/4/5/6/7/8 偏移地址0x18 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 GT[7:0] PSC[7:0] 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 保护时间值域。该域规定了以波特率时钟为单 [15:8] GT[7:0] RW 位的保护时间。在智能卡模式下,当保护时间 0 过去后,才会设置发送完成标志。 预分频器值域。 在红外低功耗模式下,源时钟被该值(全部 8 位有效分频值为0时表示保留 [7:0] PSC[7:0] RW 在红外正常模式下此位只能被设置为1 0 在智能卡模式下源时钟被该值低5位有效 的两倍分频来给智能卡提供时钟值为0表 示保留。 18.10.8 USART 控制寄存器 4USARTx_CTLR4x=1/2/3/4/5/6/7/8 偏移地址0x1C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CHECK_SEL[ MS_ER Reser Reserved 1:0] RIE ved 位 名称 访问 描述 复位值 [31:4] Reserved RO 保留。 0 校验功能选择位: 0x关闭MARK和SPACE校验。 [3:2] CHECK_SEL[1:0] RW 0 10使能MARK校验。 11使能SPACE校验。 SPACE或MARK校验使能位 1 MS_ERRIE RW 0禁止产生SPACE或MARK校验错误中断 0 1允许产生SPACE或MARK校验错误中断。 0 Reserved RO 保留。 0 注USARTx_CTLR4 寄存器仅适用于 CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、 V2.4 270

Page 274

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn CH32V31x_D8C批号倒数第六位不为0的产品。 V2.4 271

Page 275

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 19 章 两线通信总线I2C 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 内部集成电路总线I2C广泛用在微控制器和传感器及其他片外模块的通讯上它本身支持多 主多从模式仅仅使用两根线SDA和SCL就能以100kHz标准和400kHz快速两种速度通讯。 I2C总线还兼容SMBus协议不仅支持I2C的时序还支持仲裁、定时和DMA拥有CRC校验功能。 19.1 主要特征  支持主模式和从模式  支持7位或10位地址  从设备支持双7位地址  支持两种速度模式100kHz和400kHz  多种状态模式,多种错误标志  支持加长的时钟功能  2个中断向量  支持DMA  支持PEC  兼容SMBus 19.2 概述 I2C是半双工的总线它同时只能运行在下列四种模式中之一主设备发送模式、主设备接收模 式、从设备发送模式和从设备接收模式。I2C模块默认工作在从模式在产生起始条件后会自动地 切换到主模式当仲裁丢失或产生停止信号后会切换到从模式。I2C模块支持多主机功能。工作在 主模式时I2C模块会主动发出数据和地址。数据和地址都以8位为单位进行传输高位在前低位 在后在起始事件后的是一个字节7位地址模式下或两个字节10位地址模式下地址主机每 发送8位数据或地址从机需要回复一个应答ACK即把SDA总线拉低如图19-1所示。 图19-1 I2C时序图 为了正常使用必须给I2C输入正确的时钟其中标准模式下输入时钟最低为2MHz在快速模式 下输入时钟最低为4MHz。 图19-2是I2C模块功能框图。 V2.4 272

Page 276

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图19-2 I2C功能框图 Data register Noise Data SDA Data shift register filter control Comparator PEC calculation Own address register Dual address register Noise Clock PEC register SCL filter control Clock control Register (CKCFGR) Control registers (CTLR1&CTLR2) Control Status registers logic (STAR1&STAR2) SMBA Interrupts DMA requests & ACK 19.3 主模式 主模式时I2C模块主导数据传输并输出时钟信号数据传输以开始事件开始以结束事件结束。 使用主模式通讯的步骤为: 在控制寄存器2R16_I2Cx_CTLR2和时钟控制寄存器R16_I2Cx_CKCFGR中设置正确的时 钟; 在上升沿寄存器R16_I2Cx_RTR设置合适的上升沿 在控制寄存器R16_I2Cx_CTLR1中置PE位启动外设 在控制寄存器R16_I2Cx_CTLR1中置START位产生起始事件。 在置 START 位后I2C 模块会自动切换到主模式MSL 位会置位,产生起始事件,在产生起始事 件后SB 位会置位,如果 ITEVTEN 位(在 R16_I2Cx_CTLR2被置位则会产生中断。此时应该读取 状态寄存器1R16_I2Cx_STAR1写从地址到数据寄存器后SB位会自动清除 如果是使用10位地址模式那么写数据寄存器发送头序列头序列为11110xx0b其中的xx位 是10位地址的最高两位。 在发送完头序列之后状态寄存器的ADD10位会被置位如果ITEVTEN位已经置位则会产生中 断此时应读取R16_I2Cx_STAR1寄存器后写第二个地址字节到数据寄存器后清除ADD10位。 然后写数据寄存器发送第二个地址字节,在发送完第二个地址字节后,状态寄存器的 ADDR 位会 被置位,如果 ITEVTEN 位已经置位,则会产生中断,此时应读取 R16_I2Cx_STAR1 寄存器后再读一次 R16_I2Cx_STAR2寄存器以清除ADDR位 如果使用的是7位地址模式那么写数据寄存器发送地址字节在发送完地址字节后状态寄存 器的ADDR位会被置位如果ITEVTEN位已经置位则会产生中断此时应读取R16_I2Cx_STAR1寄存 器后再读一次R16_I2Cx_STAR2寄存器以清除ADDR位 V2.4 273

Page 277

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 在7位地址模式下发送的第一个字节为地址字节头7位代表的是目标从设备地址第8位决 定了后续报文的方向0代表是主设备写入数据到从设备1代表是主设备向从设备读取信息。 在10位地址模式下如图18-3所示在发送地址阶段第一个字节为11110xx0xx为10位地 址的最高 2 位,第二个字节为 10 位地址的低 8位。若后续进入主设备发送模式则继续发送数据 若后续准备进入主设备接收模式则需要重新发送一个起始条件跟随发送一个字节为11110xx1然 后进入主设备接收模式。 图19-3 10位地址时主机收发数据示意图 Transmitter S 1 1 1 1 0 X X 0 A Address 7- 0 A DATA A DATA A P (The upper 2 bits (Write) The lower 8 bits of of the address) the address Receiver S 1 1 1 1 0 X X 0 A Address 7- 0 A S 1 1 1 1 0 X X 1 A DATA A DATA A P (The upper 2 bits (Write) The lower 8 bits of (Read) of the address) the address 主发送模式: 主设备内部的移位寄存器将数据从数据寄存器发送到SDA线上当主设备接收到ACK时状态寄 存器1R16_I2Cx_STAR1的TxE被置位如果ITEVTEN和ITBUFEN被置位还会产生中断。向数据 寄存器写入数据将会清除TxE位。 如果 TxE 位被置位且上次发送数据之前没有新的数据被写入数据寄存器,那么 BTF 位会被置位, 在其被清除之前SCL将保持低电平读R16_I2Cx_STAR1后向数据寄存器写入数据将会清除BTF位。 图19-4 主发送器传送序列图 7-bit master transmit S Address A Data1 A Data2 A DataN A P …… EVT5 EVT6 EVT8_1 EVT8 EVT8 EVT8 EVT8_2 10-bit master transmit Frame S A Address A Data1 A DataN A P header …… EVT5 EVT9 EVT6 EVT8_1 EVT8 EVT8 EVT8_2 Description: S=Start (start condition), Sr=repeated start condition, P=Stop (stop condition), A=response, NA=non- response, EVTx=event (interrupt generated when ITEVFEN=1) EVT5: SB=1, reading SR1 and then writing the address to the DR register will clear the event. EVT6;ADDR=1,reading SR1 then reading SR2 will clear the event. EVT8_1: TxE=1, shift register empty, data register empty, write DR register. EVT8: TxE=1,shift register is not empty,data register is empty,writing DR register will clear the event. EVT8_2: TxE=1, BTF=1, request to set the stop bit. the TxE and BTF bits are cleared by hardware when the stop condition is generated. EVT9: ADDR10=1, reading SR1 and then writing to DR register will clear the event. Note: 1: EVT5, EVT6, EVT9, EVT8_1 and EVT8_2 events elongate the SCL low until the end of the corresponding software sequence. 2: The software sequence of EVT8 must be completed before the end of the current byte transfer. 主接收模式: I2C模块会从SDA线接收数据通过移位寄存器写进数据寄存器。在每个字节之后如果ACK位 被置位,那么 I2C 模块将会发出一个应答低电平,同时 RxNE 位会被置位,如果 ITEVTEN 和 ITBUFEN 被置位还会产生中断。如果RxNE被置位且在新的数据被接收前原有的数据没有被读出则BTF位 将被置位在清除BTF之前SCL将保持低电平读取R16_I2Cx_STAR1后再读取数据寄存器将会清 V2.4 274

Page 278

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 除BTF位。 图19-5 接收器传送序列图 7-bit master reception S Address A Data1 A1 Data2 A DataN NA P …… EVT5 EVT6 EVT6_1 EVT7 EVT7 EVT7_1 EVT7 10-bit master reception Frame S A Address A header EVT5 EVT9 EVT6 Frame Sr header A Data1 A1 Data2 A DataN NA P …… EVT5 EVT6 EVT6_1 EVT7 EVT7 EVT7_1 EVT7 Description: S=Start (start condition), Sr=repeated start condition, P=Stop (stop condition), A=response, NA=non-response, EVTx=event (interrupt generated when ITEVFEN=1) EVT5: SB=1, reading SR1 and then writing the address to DR register will clear the event. EVT6: ADDR=1,reading SR1 and then reading SR2 will erase this event. In 10-bit master receive mode, START=1 of CR2 should be set after this event. EVT6_1: There is no corresponding event flag and it is only suitable for receiving 1 byte. Exactly after EVT6 (i.e. after ADDR is cleared), the response and stop condition generation bits should be cleared. EVT7: RxNE=1, read DR register to clear the event. EVT7_1: RxNE=1, read the DR register to clear this event. Set ACK=0 and STOP request. EVT9: ADDR10=1, reading SR1 and then writing to DR register will clear this event. 主设备在结束发送数据时会主动发一个结束事件即置STOP位I2C将切换至从模式。在接收 模式时主设备需要在最后一个数据位的应答位置NAK接收到NACK后从设备释放对SCL和SDA线 的控制;主设备就可以发送一个停止/重起始条件。注意产生停止条件后I2C模块将会自动切换至 从模式。 19.4 从模式 从模式时I2C模块能识别它自己的地址和广播呼叫地址。软件能控制开启或禁止广播呼叫地 址的识别。一旦检测到起始事件I2C模块将SDA的数据通过移位寄存器与自己的地址位数取决 于ENDUAL和ADDMODE或广播地址ENGC置位时相比较如果不匹配将会忽略直到产生新的起 始事件如果与头序列相匹配则会产生一个ACK信号并等待第二个字节的地址如果第二字节的 地址也匹配或者7位地址情况下全段地址匹配那么 首先产生一个ACK应答 ADDR位被置位如果ITEVTEN位已经置位那么还会产生相应的中断 如果使用的是双地址模式ENDUAL位被置位还需要读取DUALF位来判断主机唤起的是哪一 个地址。 从模式默认是接收模式在接收的头序列的最后一位为1或者7位地址最后一位为1后取 决于第一次接收到头序列还是普通的7位地址当接收到重复的起始条件时I2C模块将进入到 发送器模式TRA位将指示当前是接收器还是发送器模式。 从发送模式: 在清除ADDR位后I2C模块将字节从数据寄存器通过移位寄存器发送到SDA线上。从设备保持 SCL为低电平直到ADDR位被清除且待发送数据已写入数据寄存器。见下图中的EVT1和 EVT3。在收到一个应答ACK后TxE位将被置位如果设置了ITEVTEN和ITBUFEN还会产生一个 中断。如果TxE被置位但在下一个数据发送结束前没有新的数据被写入数据寄存器时BTF位将被 置位。在清除BTF前SCL将保持低电平读取状态寄存器1R16_I2Cx_STAR1再向数据寄存 器写入数据将会清除BTF位。 V2.4 275

Page 279

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图19-6 从发送器的传送序列图 7-bit slave send S Address A Data1 A Data2 A DataN NA P …… EVT1 EVT3_1 EVT3 EVT3 EVT3 EVT3_2 10-bit slave send Frame S A Address A header EVT1 Frame Sr A Data1 A DataN NA P header …… EVT1 EVT3_1 EVT3 EVT3 EVT3_2 Description: S=Start (start condition), Sr=repeated start condition, P=Stop (stop condition), A=response, NA=non- response, EVTx=event (interrupt is generated when ITEVFEN=1) EVT1;ADDR=1,read SR1 then read SR2 will eliminate the event. EVT3_1: TxE=1, shift register empty, data register empty, write DR. EVT3: TxE=1,shift register is not empty,data register is empty,writing DR will clear the event. EVT3_2: AF=1, write '0' in AF bit of SR1 register to clear AF bit. Note: 1: EVT1 and EVT3_1 events elongate SCL low until the end of the corresponding software sequence. 2: The software sequence of EVT3 must be completed before the end of the current byte transfer. 从接收模式: 在ADDR被清除后I2C模块将SDA上的数据通过移位寄存器存进数据寄存器在每接收到一个 字节后I2C模块都会置一个ACK位并置RxNE位。如果设置了ITEVTEN和ITBUFEN还会产生一 个中断。如果RxNE被置位且在接收到新的数据前旧的数据没有被读出那么BTF会被置位。在清 除BTF位之前SCL会保持低电平。读取状态寄存器1R16_I2Cx_STAR1并读取数据寄存器里的数 据会清除BTF位。 图19-7 从接收器的传送序列图 7-bit slave reception S Address A Data1 A Data2 A DataN A P …… EVT1 EVT2 EVT2 EVT2 EVT4 10-bit slave reception Frame S A Address A Data1 A DataN A P header …… EVT1 EVT2 EVT2 EVT4 Description: S=Start (start condition), Sr=repeated start condition, P=Stop (stop condition), A=response, NA=non- response, EVTx=event (interrupt generated when ITEVFEN=1) EVT1;ADDR=1,reading SR1 then SR2 will erase the event. EVT2: RxNE=1, reading DR will clear the event. EVT4: STOPF=1,reading SR1 and then writing CR1 register will clear the event. Note: 1: EVT1 event elongates SCL low until the end of the corresponding software sequence. 2: The software sequence of EVT2 must be completed before the end of the current byte transfer. 主设备在传输完最后一个数据字节后将产生一个停止条件当I2C模块检测到停止事件时 将置STOPF位如果设置了ITEVFEN位还会产生一个中断。用户需要读取状态寄存器 R16_I2Cx_STAR1再写控制寄存器比如复位控制字SWRST来清除。见上图中的EVT4。 V2.4 276

Page 280

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 19.5 错误 19.5.1 总线错误 BERR 在传输地址或数据期间I2C模块检测到外部的起始或停止事件时将产生一个总线错误。产生 总线错误时BERR位被置位如果设置了ITERREN还会产生一个中断。在从模式下数据被丢弃硬 件释放总线。如果是起始信号,硬件会认为是重启信号,开始等待地址或停止信号;如果是停止信号, 则提前按正常的停止条件操作。在主模式下,硬件不会释放总线,同时不影响当前传输,由用户代码 决定是否中止传输。 19.5.2 应答错误 AF 当I2C模块检测到一个字节后没有应答时会产生应答错误。产生应答错误时AF会被置位如 果设置了 ITERREN还会产生一个中断遇到 AF 错误,如果 I2C 模块工作在从模式,硬件必须释放总 线,如果处于主模式,软件必须生成一个停止事件。 19.5.3 仲裁丢失 ARLO 当I2C模块检测到仲裁丢失时产生仲裁丢失错误。产生仲裁丢失错误时ARLO位被置位如果 设置了ITERREN还会产生一个中断I2C模块切换到从模式并不再响应针对它的从地址发起的传输 除非有主机发起新的起始事件;硬件会释放总线。 19.5.4 过载/欠载错误 OVR  过载错误: 在从机模式下如果禁止时钟延长I2C模块正在接收数据如果已经接受到一个字节的数 据,但是上一次接收到数据还没有被读出,则会产生过载错误。发生过载错误时,最后收到的字节 将被丢弃,发送方应当重发最后一次发送的字节。  欠载错误: 在从模式下如果禁止时钟延长I2C模块正在发送数据如果在下一个字节的时钟到来之前 新的数据还没有被写入到数据寄存器,那么将产生欠载错误。在发生欠载错误时,前一次数据寄存 器里的数据将被发送两次,如果发生欠载错误,那么接收方应该丢弃重复收到的数据。为了不产生 欠载错误I2C模块应当在下一个字节的第一个上升沿之前将数据写入数据寄存器。 19.6 时钟延长 如果禁止时钟延长,那么就存在发生过载/欠载错误的可能。但如果使能了时钟延长:  在发送模式下如果TxE置位且BTF置位SCL将一直为低一直等待用户读取状态寄存器 并向数据寄存器写入待发送的数据;  在接收模式下如果RxNE置位且BTF置位那么SCL在接收到数据后将保持低直到用户读取 状态寄存器,并读取数据寄存器; 由此可见,使能时钟延长可以避免出现过载/欠载错误。 19.7 SMBus SMBus也是一种双线接口它一般应用在系统和电源管理之间。SMBus和I2C有很多相似的地 方例如SMBus使用和I2C一样的7位地址模式以下是SMBus和I2C的共同点 1 主从通信模式,主机提供时钟,支持多主多从; 2 两线通讯结构其中SMBus可选一个警示线 V2.4 277

Page 281

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 3 都支持7位地址格式。 同时SMBus和I2C也存在区别 1 I2C支持的速度最高400kHz而SMBus支持的最高是100kHz且SMBus有最小10kHz的速度限 制; 2 SMBus的时钟为低超过35mS时会报超时但I2C无此限制 3 SMBus有固定的逻辑电平而I2C没有取决于V DD 4 SMBus有总线协议而I2C没有。 SMBus还包括设备识别、地址解析协议、唯一的设备标识符、SMBus提醒和各种总线协议具体 请参考SMBus规范2.0版本。当使用SMBus时只需要置控制寄存器的SMBus位按需配置 SMBTYPE位和ENAARP位。 19.8 中断 每个I2C模块都有两种中断向量分别是事件中断和错误中断。两种中断支持图19-4的中断 源。 图19-8 I2C中断请求 19.9 DMA 可以使用DMA来进行批量数据的收发。使用DMA时不能对控制寄存器的ITBUFEN位进行置位。  利用DMA发送 通过将CTLR2寄存器的DMAEN位置位可以激活DMA模式。只要TxE位被置位数据将由DMA从 设定的内存装载进I2C的数据寄存器。需要进行以下设定来为I2C分配通道。 1 向DMA_PADDRx寄存器设置I2Cx_DATAR寄存器地址DMA_MADDRx寄存器中设置存储器地址这 样在每个TxE事件后数据将从存储器送至I2Cx_DATAR寄存器。 2 在DMA_CNTRx寄存器中设置所需的传输字节数。在每个TxE事件后此值将被递减。 3 利用DMA_CFGRx寄存器中的PL[0:1]位配置通道优先级。 4 设置DMA_CFGRx寄存器中的DIR位并根据应用要求可以配置在整个传输完成一半或全部完成 时发出中断请求。 5 通过设置DMA_CFGRx寄存器上的EN位激活通道。 V2.4 278

Page 282

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 当DMA控制器中设置的数据传输字节数目已经完成时DMA控制器给I2C接口发送一个传输结 束的 EOT/ EOT_1信号。在中断允许的情况下将产生一个DMA中断。  利用DMA接收 置位CTLR2寄存器的DMAEN后即可进行DMA接收模式。使用DMA接收时DMA将数据寄存器里 的数据传送到预设的内存区域。需要以下步骤来为I2C分配通道。 1 向DMA_PADDRx寄存器设置I2Cx_DATAR寄存器地址DMA_MADDRx寄存器中设置存储器地址这 样在每个RxNE事件后数据将从I2Cx_DATAR寄存器写入存储器。 2 在DMA_CNTRx寄存器中设置所需的传输字节数。在每个RxNE事件后此值将被递减。 3 用DMA_CFGRx寄存器中的PL[0:1]配置通道优先级。 4 清除DMA_CFGRx寄存器中的DIR位根据应用要求可以设置在数据传输完成一半或全部完成时 发出中断请求。 5 设置DMA_CFGRx寄存器中的EN位激活该通道。 当DMA控制器中设置的数据传输字节数目已经完成时DMA控制器给I2C接口发送一个传输结 束的EOT/EOT_1信号。在中断允许的情况下将产生一个DMA中断。 19.10 包校验错误 包错误校验PEC是为了提供传输的可靠性而增加一项CRC8校验的步骤使用以下多项式对 每一位串行数据进行计算: C=X8+X2+X+1 PEC计算是由控制寄存器的ENPEC位激活对所有信息字节进行计算包括地址和读写位在 内。在发送时启用PEC会在最后一字节数据之后加上一个字节的CRC8计算结果而在接收模式 在最后一字节被认为是CRC8校验结果如果和内部的计算结果不符合就会回复一个NAK如果是 主接收器无论校验结果正确与否都会回复一个NAK。 19.11 调试模式 当系统进入调试模式之后可以通过DEBUG模块的DBG_I2Cx_SMBUS_TIMEOUT位来决定 I2CSMBus的超时控制是继续工作还是停止。 19.12 寄存器描述 表19-1 I2C1相关寄存器列表 名称 访问地址 描述 复位值 R16_I2C1_CTLR1 0x40005400 I2C1控制寄存器1 0x0000 R16_I2C1_CTLR2 0x40005404 I2C1控制寄存器2 0x0000 R16_I2C1_OADDR1 0x40005408 I2C1地址寄存器1 0x0000 R16_I2C1_OADDR2 0x4000540C I2C1地址寄存器2 0x0000 R16_I2C1_DATAR 0x40005410 I2C1数据寄存器 0x0000 R16_I2C1_STAR1 0x40005414 I2C1状态寄存器1 0x0000 R16_I2C1_STAR2 0x40005418 I2C1状态寄存器2 0x0000 R16_I2C1_CKCFGR 0x4000541C I2C1时钟寄存器 0x0000 R16_I2C1_RTR 0x40005420 I2C1上升时间寄存器 0x0002 V2.4 279

Page 283

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 表19-2 I2C2相关寄存器列表 名称 访问地址 描述 复位值 R16_I2C2_CTLR1 0x40005800 I2C2控制寄存器1 0x0000 R16_I2C2_CTLR2 0x40005804 I2C2控制寄存器2 0x0000 R16_I2C2_OADDR1 0x40005808 I2C2地址寄存器1 0x0000 R16_I2C2_OADDR2 0x4000580C I2C2地址寄存器2 0x0000 R16_I2C2_DATAR 0x40005810 I2C2数据寄存器 0x0000 R16_I2C2_STAR1 0x40005814 I2C2状态寄存器1 0x0000 R16_I2C2_STAR2 0x40005818 I2C2状态寄存器2 0x0000 R16_I2C2_CKCFGR 0x4000581C I2C2时钟寄存器 0x0000 R16_I2C2_RTR 0x40005820 I2C2上升时间寄存器 0x0002 19.12.1 I2C 控制寄存器I2Cx_CTLR1x=1/2 偏移地址0x00 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reser NOSTR SMBTY Reser SWRST ALERT PEC POS ACK STOP START ENGC ENPEC ENARP SMBUS PE ved ETCH PE ved 位 名称 访问 描述 复位值 软件重置用户代码置此位会使I2C外设重置。 在复位前确定I2C总线的引脚被释放总线处 15 SWRST RW 于空闲状态。 0 注:该位可以在总线上没有检测到停止条件但 是busy位为1时重置I2C模块。 14 Reserved RO 保留。 0 SMBus 提醒位,用户代码可以设置此位或清除 此位当PE置位后此位可以被硬件清除。 0释放SMBusALERT引脚使其变高响应地址 13 ALERT RW 0 头应紧跟在NACK信号后面 1驱动SMBusALERT引脚使其变低响应地址 头应紧跟在ACK信号后面。 数据包出错检测使能位,置此位启用数据包出 错检测。用户代码可以对此位置位或清零;当 PEC被传输后产生开始或结束信号或PE位 12 PEC RW 清0时硬件清零该位 0 0不带PEC 1带PEC。 注仲裁丢失时PEC失效。 ACK 和 PEC 位置设置位,该位可以被用户代码 置位或清零,在 PE 被清零后,可以被硬件清 除; 11 POS RW 0 0ACK位控制当前移位寄存器内正在接受的字 节的 ACK 或 NAK。PEC 位表明当位前移位寄存 器的字节是PEC。 V2.4 280

Page 284

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1ACK位控制在移位寄存器里接收的下一个字 节的 ACK 或 NAK。PEC 移位寄存器里接收的下 一字节是PEC。 注POS位在2字节数据接收中的用法如下 必须在接收之前配置好。为了NACK第2个字 节必须在清除ADDR位后立刻清除ACK位为 了检测第二个字节的PEC必须在ADDR事件发 生后配置POS位后设置PEC位。 应答使能位,该位可以被用户代码置位或清 零当PE位被置位时该位可以被硬件清除 10 ACK RW 0 0不设应答 1在接收到一个字节后返回一个应答。 停止事件产生位,该位可以被用户代码置位或 清零,或当检测到停止事件时,由硬件清除, 或检测到超时错误时,由硬件将其置位。 主模式下: 0无停止事件产生 9 STOP RW 0 1在当前字节传输或当前起始条件发出后产 生停止事件。 从模式下: 0无停止事件产生 1在当前字节传输后释放SCL和SDA线。 起始事件产生位,该位可以被用户代码置位或 清零当起始条件发出后或PE被清零时由硬 件清零。 主模式下: 8 START RW 0无起始事件产生 0 1重复产生起始事件。 从模式下: 0无起始事件产生 1当总线空闲时产生起始事件。 禁止时钟延长位,此位用于在 ADDR 或 BTF 标 志被置位的情况下,禁止从模式下的时钟延 7 NOSTRETCH RW 长,直至被软件清零。 0 0允许时钟延长 1禁止时钟延长 广播呼叫使能位,置此位使能广播呼叫,应答 6 ENGC RW 0 广播地址00h。 PEC使能位 5 ENPEC RW 0关闭PEC计算 0 1开启PEC计算。 ARP使能位 0关闭ARP 4 ENARP RW 1使能ARP。 0 如果 SMBTYPE=0则使用 SMBus 设备的默认地 址如果SMBTYPE=1则使用SMBus的主地址。 V2.4 281

Page 285

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn SMBus设备类型 3 SMBTYPE RW 0SMBus从设备 0 1SMBus主设备。 2 Reserved RO 保留。 0 SMBus模式选择位 1 SMBUS RW 0使用I2C模式 0 1使用SMBus模式。 I2C外设使能位。 0 PE RW 0禁用I2C模块 0 1启用I2C模块。 19.12.2 I2C 控制寄存器 2I2Cx_CTLR2x=1/2 偏移地址0x04 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ITBUFITEVT ITERR Reserved LAST DMAEN Reserved FREQ[5:0] EN EN EN 位 名称 访问 描述 复位值 [15:13] Reserved RO 保留。 0 DMA最后一次传输设置位。 0下一次DMA的EOT不是最后的传输 12 LAST RW 1下一次DMA的EOT是最后的传输。 0 注:该位在主接收模式使用,可以在最后一次 接收数据时产生一个NAK。 DMA请求使能位 11 DMAEN RW 0在TxE或RxNE被置位时禁止DMA请求 0 1在TxE或RxNE被置位时允许DMA请求。 缓冲器中断使能位。 10 ITBUFEN RW 0当TxE或RxNE被置位时不产生中断 0 1当TxE或RxNE被置位时产生事件中断。 事件中断使能位: 0关闭事件中断 1使能事件中断 在下列条件下,将产生此中断: SB=1主模式 9 ITEVTEN RW ADDR=1主从模式 0 ADDR10=1主模式 STOPF=1从模式 BTF=1但是没有TxE或RxNE事件 如果ITBUFEN=1TxE事件为1 如果ITBUFEN=1RxNE事件为1。 出错中断使能位: 0禁止出错中断 8 ITERREN RW 0 1允许出错中断 在下列条件下,将产生该中断; V2.4 282

Page 286

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn BERR=1ARLO=1AF=1OVR=1PECERR=1 TIMEOUT=1SMBAlert=1。 [7:6] Reserved RO 保留。 0 I2C 模块时钟频率域,必须输入正确的时钟频 率以产生正确的时序,允许的范围在 4-60MHz [5:0] FREQ[5:0] RW 0 之间。必须设置在000100b到111100b之间 单位为MHz。 19.12.3 I2C 地址寄存器 1I2Cx_OADDR1x=1/2 偏移地址0x08 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADD Reserved ADD[9:8] ADD[7:1] ADD0 MODE 位 名称 访问 描述 复位值 地址模式。 15 ADDMODE RW 07位从机地址不响应10位地址 0 110位从机地址不响应7位地址。 [14:10] Reserved RO 保留。 0 接口地址在使用10位地址时为第9-8位在 [9:8] ADD[9:8] RW 0 使用7位地址时忽略。 [7:1] ADD[7:1] RW 接口地址第7-1位。 0 接口地址使用10位地址时为第0位在使用 0 ADD0 RW 0 7位地址时忽略。 19.12.4 I2C 地址寄存器 2I2Cx_OADDR2x=1/2 偏移地址0x0C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved ADD2[7:1] ENDUAL 位 名称 访问 描述 复位值 [15:8] Reserved RO 保留。 0 [7:1] ADD2[7:1] RW 接口地址双地址模式下地址的7-1位。 0 双地址模式使能位,置此位可以让 ADD2 也能 0 ENDUAL RW 0 被识别。 19.12.5 I2C 数据寄存器I2Cx_DATARx=1/2 偏移地址0x10 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DR[7:0] 位 名称 访问 描述 复位值 [15:8] Reserved RO 保留。 0 V2.4 283

Page 287

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 数据寄存器,该域用来存放接收到的数据或存 [7:0] DR[7:0] RW 0 放用于发送到总线的数据。 19.12.6 I2C 状态寄存器 1I2Cx_STAR1x=1/2 偏移地址0x14 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SMBAL TIME Reser PECER Reser OVR AF ARLO BERR TxE RxNE STOPF ADD10 BTF ADDR SB ERT OUT ved R ved 位 名称 访问 描述 复位值 SMBus 警示位,该位可以由用户写 0 复位,或 在PE变低时由硬件复位。 在SMBus主机模式下 0无SMBus警示 15 SMBALERT RW0 1在引脚上产生了SMBus警示。 0 在SMBus从机模式下 0没有收到SMBAlert响应地址头序列 1收到 SMBAlert 响应地址头序列直到 SMBAlert变低。 超时或Tlow错误标志位该位可以由用户写0 复位或在PE变低时由硬件复位。 0无超时错误 1SCL处于低已达到25ms或主机低电平累计 14 TIMEOUT RW0 时钟扩招时间超过10ms或从设备低电平累计 0 时间超过25ms。 注:在从模式下此位被置位,从设备会复位通 讯,硬件会释放总线;在主模式下此位被置位, 硬件会发出停止条件。 13 Reserved RO 保留。 0 在接收时发生PEC错误标志位该位可以由用 户写0复位或在PE变低时由硬件复位。 12 PECERR RW0 0 0无PEC错误 1有PEC错误接收到PEC后返回NAK。 过载、欠载标志位: 0无过载、欠载事件 1有过载、欠载事件发生当NOSTRETCH=1时 11 OVR RW0 在接收模式中收到一个新的字节时,数据寄存 0 器里的内容还未被读出,则新接收的字节将丢 失;在发送模式时,没有新的数据写入数据寄 存器,同样的字节将被发送两次。 应答失败标志位该位可以由用户写0复位 或在PE变低时由硬件复位。 10 AF RW0 0 0应答正常 1应答错误。 9 ARLO RW0 仲裁丢失标志位该位可以由用户写0复位 0 V2.4 284

Page 288

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 或在PE变低时由硬件复位。 0仲裁正常 1检测到仲裁丢失模块失去对总线的控制。 总线出错标志位该位可以由用户写0复位 或在PE变低时由硬件复位。 8 BERR RW0 0 0正常 1起始或停止条件出错。 数据寄存器为空标志位,向数据寄存器写数据 可以清除,或产生一个起始或停止位后,或当 7 TxE RO PE为0后由硬件自动清除。 0 0数据寄存器非空 1发送数据时发送数据寄存器为空。 数据寄存器非空标志位,对数据寄存器的读写 操作将清除此位或当PE为0后由硬件清除 6 RxNE RO 此位。 0 0正常 1接收数据时数据寄存器不为空。 5 Reserved RO 保留。 0 停止事件标志位用户读取状态寄存器1之后 对控制寄存器1的写操作将会清除该位或当 PE为0后由硬件清除此位。 4 STOPF RO 0 0没有检测到停止事件 1在应答之后从设备在总线上检测到停止事 件。 10位地址头序列发送标志位用户读取状态寄 存器1之后对控制寄存器1的写操作将会清 除该位或当PE为0后由硬件清除此位。 3 ADD10 RO 0 0 1在10位地址模式下主设备已经将第一个 地址字节发送出去。 字节发送结束标志位,用户读取状态寄存器 1 后,对数据寄存器的读写将清除此位;在传输 中发起一个起始或者停止事件后或当PE为 0后由硬件清除此位。 2 BTF RO 0 0 1字节发送结束。当NOSTRETCH=0时发送时 当一个新数据被发送且数据寄存器还未被写 入新数据;接收时,当接收一个新的字节但是 数据寄存器还未被读取。 地址被发送/地址匹配标志位,用户读取状态 寄存器1后对状态寄存器2的读操作将会清 除此位或当PE为0时由硬件清除此位。 1 ADDR RW0 主模式: 0 0地址发送没有结束 1地址发送结束在10位地址模式下当收 到地址的第二个字节的ACK后改为被置位在 V2.4 285

Page 289

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 7位地址模式下当收到地址的ACK后被置位。 从模式: 0地址不匹配或没有收到地址 1收到的地址匹配。 起始位发送标志位读取状态寄存器1后写数 据寄存器的操作将清除该位或当PE为0时 0 SB RO 硬件将会清除此位。 0 0未发送起始位 1已发送起始位。 19.12.7 I2C 状态寄存器 2I2Cx_STAR2x=1/2 偏移地址0x18 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SMBHO SMBDE GENCA Reser PEC[7:0] DUALF TRA BUSY MSL ST FAULT LL ved 位 名称 访问 描述 复位值 包错误检查域当PEC使能时ENPEC置位 [15:8] PEC[7:0] RO 0 此域存放PEC的值。 匹配检测标志位,在产生停止位或起始位时, 或在PE=0时硬件会将该位清零。 7 DUALF RO 0 0接收到的地址与OAR1中的内容相符 1接收到的地址与OAR2中的内容相符。 SMBus 主机头标志位,在产生停止位或起始位 时或在PE=0时硬件会将该位清零。 6 SMBHOST RO 0未接收到SMBus主机地址 0 1当SMBTYPE=1且ENARP=1时收到了SMBus 主机地址。 SMBus 设备默认地址标志位,在产生停止位或 起始位时或在PE=0时硬件会将该位清零。 5 SMBDEFAULT RO 0 0未收到地址 1当ENARP=1收到SMBus设备的默认地址。 广播呼叫地址标志位,在产生停止位或起始位 时或者在PE=0时硬件会将该位清零。 4 GENCALL RO 0 1当ENGC=1时收到广播呼叫的地址 0未收到广播呼叫地址。 3 Reserved RO 保留。 0 发送/接收标志位,在检测到停止事件 STOPF=1重复的起始条件、总线仲裁丢失 ARLO=1或PE=0时硬件会将其清零。 2 TRA RO 0 0接收到数据 1数据已发送。 该位根据地址字节的R/W位来决定。 1 BUSY RO 总线忙标志位,该位在检测到一个停止位时会 0 V2.4 286

Page 290

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 被清零。在接口被禁用时PE=0该信息仍 被更新。 0总线空闲无通讯 1总线忙SDA或SCL存在低电平。 主从模式指示位,当接口处于主模式时 SB=1硬件将该位置位当总线检测到一 0 MSL RO 0 个停止位仲裁丢失时或PE=0时硬件会清 除该位。 19.12.8 I2C 时钟寄存器I2Cx_CKCFGRx=1/2 偏移地址0x1C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 F/S DUTY Reserved CCR[11:0] 位 名称 访问 描述 复位值 主模式选择位。 15 F/S RW 0标准模式 0 1快速模式。 快速模式时的占空比: 14 DUTY RW 0T /T = 2 0 低电平 高电平 1T /T = 16/9。 低电平 高电平 [13:12] Reserved RO 保留。 0 [11:0] CCR[11:0] RW 时钟分频系数域决定SCL时钟的频率波形。 0 19.12.9 I2C 上升时间寄存器I2Cx_RTRx=1/2 偏移地址0x20 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved TRISE[5:0] 位 名称 访问 描述 复位值 [15:6] Reserved RO 保留。 0 最大上升时间域。这个位设置主模式的SCL的 上升时间。最大的上升沿时间等于TRISE-1个 时钟周期。此位只能在PE清零下设置。比如如 [5:0] TRISE[5:0] RW 000010b 果I2C模块的输入时钟周期为125ns而TRISE 的值为 9那么最大上升沿时间为9-1 *125ns即1000ns。 V2.4 287

Page 291

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 20 章 串行外设接口SPI/I2S 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 SPI支持以三线同步串行模式进行数据交互加上片选线支持硬件切换主从模式支持以单根数 据线通讯。 I2S 也是三线的同步串行接口通信协议,它支持四种音频标准,包括飞利浦 I2S 标准、MSB 对齐 标准、LSB对齐标准和PCM标准。 20.1 主要特征 20.1.1 SPI 特征  支持全双工同步串行模式  支持单线半双工模式  支持主模式和从模式,多从模式  支持8位或16位数据结构  最高时钟频率支持到Fpclk的一半  数据顺序支持MSB或LSB在前  支持硬件或软件控制NSS引脚  收发支持硬件CRC校验  收发缓冲器支持DMA传输  支持修改时钟相位和极性 20.1.2 I2S 特征  支持单工通信  支持主模式和从模式  支持16位、24位和32位数据格式  音频采样频率支持范围8kHz-562.2kHz  支持时钟极性可编程  支持常用I2S协议飞利浦标准、MSB对齐标准、LSB对齐标准和PCM标准  收发缓冲器支持DMA传输  支持主时钟向外部音频设备输出 V2.4 288

Page 292

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 20.2 SPI 功能描述 20.2.1 概述 图20-1 SPI结构框图 Address and data bus Read Rx buffer SPI_CTLR2 MOSI TXE RXNE ERR TXDM RXDM 0 0 SSOE IE IE IE AEN AEN Shift register MISO LSB first SPI_STATR CRC Tx buffer BSY OVR MODF ERR 0 0 TXE RXNE Write 0 Communication control 1 SCK Baud rate BR[2:0] generator LSB SPE BR2 BR1 BR0 MSTR CPOL CPHA FIRST SPI_CTLR1 Master control logic BIDI BIDI CRC CRC RX DFF SSM SSI MODE OE EN Next ONLY NSS 由图20-1可以看出与SPI相关的主要是MISO、MOSI、SCK和NSS四个引脚。其中MISO引脚在 SPI模块工作在主模式下时是数据输入引脚工作在从模式下时是数据输出引脚。MOSI引脚工作 在主模式下时是数据输出引脚工作在从模式时是数据输入引脚。SCK是时钟引脚时钟信号一 直由主机输出从机接收时钟信号并同步数据收发。NSS引脚是片选引脚有以下用法 1 NSS由软件控制此时SSM被置位内部NSS信号由SSI决定输出高还是低这种情况一般用于 SPI主模式 2 NSS 由硬件控制:在 NSS 输出使能时,即 SSOE 置位时,在 SPI 主机向外发送输出时会主动拉低 NSS引脚如果不能成功拉低NSS脚说明主线上还有其他主设备正在通信则会产生一个硬件 错误SSOE 不置位则可以用于多主机模式如果它被拉低则会强行进入从机模式MSTR 位会 被自动清除。 可以通过 CPHA 和 CPOL 配置 SPI 的工作模式。CPHA 置位表示模块在时钟的第二个边沿进行数据 采样数据被锁存CPHA 不置位表示 SPI 模块在时钟的第一个边沿进行采样数据被锁存。CPOL 则 表示无数据时时钟保持高电平还是低电平。具体见下图20-2。 V2.4 289

Page 293

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图20-2 SPI模式 主机和设备需要设置为相同的SPI模式在配置SPI模式前需要清除SPE位。DEF位可以决定 SP的单个数据长度是8位还是16位。LSBFIRST可以控制单个数据字是高位在前还是低位在前。 20.2.2 主模式 在SPI模块工作在主模式时由SCK产生串行时钟。配置成主模式进行以下步骤 配置控制寄存器的BR[2:0]域来确定时钟; 配置CPOL和CPHA位来确定SPI模式 配置DEF确定数据字长 配置LSBFIRST确定帧格式 配置NSS引脚比如置SSOE位让硬件去置NSS。也可以置SSM位并把SSI位置高 置MSTR位和SPE位需要保证NSS此时已经是高。 需要发送数据时只需要向数据寄存器写要发送的数据就行了。SPI会从发送缓冲区并行地把数据 送到移位寄存器,然后按照 LSBFIRST 的设置将数据从移位寄存器发出去,当数据已经到了移位寄存 器时TXE 标志会被置位,如果已经置位了 TXEIE那么会产生中断。如果 TXE 标志位置位需要向数 据寄存器里填数据,维持完整的数据流。 当接收器接收数据时,当数据字的最后一个采样时钟沿到来时,数据从移位寄存器并行地转移到 接收缓冲区RXNE位被置位如果之前置位了RXNEIE位还会产生中断。此时应该尽快读取数据寄 V2.4 290

Page 294

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 存器取走数据。 20.2.3 从模式 当SPI模块工作在从模式时SCK用于接收主机发来的时钟自身的波特率设置无效。配置成从 模式的步骤如下: 配置DEF位设置数据位长度 配置CPOL和CPHA位匹配主机模式 配置LSBFIRST匹配主机数据帧格式 硬件管理模式下NSS 管脚需要保持为低电平,如果设置 NSS 为软件管理SSM 置位),那么请 保持SSI不被置位 清除MSTR位置SPE位开启SPI模式。 在发送时当SCK出现第一个从机接收采样沿时从机开始发送。发送的过程就是发送缓冲区的 数据移到发送移位寄存器当发送缓冲区的数据移到了移位寄存器之后会置位TXE标志如果之前 置位了TXEIE位那么会产生中断。 在接收时最后一个时钟采样沿之后RXNE位被置位移位寄存器接收到的字节被转移到接收缓 冲区读数据寄存器的读操作可以获得接收缓冲区里的数据。如果在RXNE置位之前RXNEIE已经被置 位,那么会产生中断。 20.2.4 单工模式 SPI接口可以工作在半双工模式即主设备使用MOSI引脚从设备使用MISO引脚进行通讯。使 用半双工通讯时需要把BIDIMODE置位使用BIDIOE控制传输方向。 在正常全双工模式下将RXONLY位置位可以将SPI模块设置为仅仅接收的单工模式在RXONLY置 位之后会释放一个数据脚主模式和从模式释放的引脚并不相同。也可以不理会接收的数据将SPI置 成只发送的模式。 20.2.5 CRC SPI 模块使用 CRC 校验保证全双工通信的可靠性,数据收发分别使用单独的 CRC 计算器。CRC 计 算的多项式由多项式寄存器决定对于8位数据宽度和16位数据宽度会分别使用不同的计算方法。 设置 CRCEN 位会启用 CRC 校验,同时会使 CRC 计算器复位。在发送完最后一个数据字节后,置 CRCNEXT 位会在当前字节发送结束后发送 TXCRCR 计算器的计算结果,同时最后接收到的接收移位寄 存器的值如果与本地算出来的RXCRCR的计算值不相符那么CRCERR位会被置位。使用CRC校验需要 在配置 SPI 工作模式时设置多项式计算器并置 CRCEN 位,并在最后一个字或半字置 CRCNEXT 位发送 CRC并进行接收CRC的校验。注意收发双方的CRC计算多项式应该统一。 20.2.6 DMA SPI模块支持使用DMA加快数据通讯速度可以使用DMA向发送缓冲区填写数据或使用DMA从 接收缓冲区及时取走数据。DMA会以RXNE和TXE为信号及时取走或发来数据。DMA也可以工作在单工 或加CRC校验的模式。 20.2.7 错误  主模式失效错误 当SPI工作在NSS引脚硬件管理模式下发生了外部拉低NSS引脚的操作或在NSS引脚软件管 理模式下SSI位被清零或 SPE位被清零导致SPI被关闭或MSTR位被清零SPI进入从模式。 如果ERRIE位已经被置位还会产生中断。清除MODF位步骤首先执行一次对R16_SPI1_STATR的读 或写操作然后写R16_SPI1_CTLR1。 V2.4 291

Page 295

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn  溢出错误 如果主机发送了数据而从设备的接收缓冲区中还有未读取的数据就会发生溢出错误OVR位 被置位如果ERRIE被置位还会产生中断。发送溢出错误应该重新开始当前传输。读取数据寄存器再 读取状态寄存器会消除此位。  CRC错误 当接收到的CRC校验字和RXCRCR的值不匹配时会产生CRC校验错误CRCERR位会被置位。 20.2.8 中断 SPI模块的中断支持五个中断源其中发送缓冲区空、接收缓冲区非空这两个事件分别会置位TXE 和RXNE在分别置位了TXEIE和RXNEIE位的情况下会产生中断。除此之外上面提到的三种错误也会 产生中断分别是MODF、OVR和CRCERR在使能了ERRIE位之后这三种错误也会产生错误中断。 20.3 I2S 功能描述 20.3.1 I2S 概述 图20-3 I2S结构框图 Address and data bus Tx buffer BYS OVRMODFCRC UDR CH TxE RxNE ERR SIDE 16-bit MOSI/SD MISO Shift register LSB first Communication 16-bit control Rx buffer NSS/WS I2SCFG I2SSTD CK DATLEN CH (1:0) (1:0) POL (1:0) LEN I2S I2SE MOD Master control logic Bidi Bidi CRC CRC Rx DFF SSM SSI modeOE EN Next only SPI LSB SPE BR2 BR1 BR0MSTRCPOLCPHA First Baud rate generator CK I2S Clock generator I2S_CK I2SMOD MCK MCKOEODD I2SDIV[7:0] I2SxCLK V2.4 292

Page 296

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 通过将寄存器 I2SCFGR的I2SMOD位置位使能 I2S功能。此时可以把 SPI模块用作 I2S音频 接口。I2S与SPI共用3个引脚 ● SD串行数据映射至MOSI引脚用来发送和接收2路时分复用通道的数据 ● WS字选映射至NSS引脚主模式下作为数据控制信号输出从模式下作为输入 ● CK串行时钟映射至SCK引脚主模式下作为时钟信号输出从模式下作为输入。 在某些外部音频设备需要主时钟时,可以另有一个附加引脚输出时钟: ● MCK主时钟独立映射在I2S配置为主模式寄存器I2SPR的MCKOE位为1时作为输出额 外的时钟信号引脚使用。输出时钟信号的频率预先设置为256×Fs其中Fs是音频信号的采样频率。 设置成主模式时I2S使用自身的时钟发生器来产生通信用的时钟信号。这个时钟发生器也是主 时钟输出的时钟源。I2S模式下有2个额外的寄存器一个是与时钟发生器配置相关的寄存器I2SPR 另一个是I2S通用配置寄存器I2SCFGR可设置音频标准、从/主模式、数据格式、数据包帧、时钟极 性等参数。在I2S模式下不使用寄存器CTLR1和所有的CRCR寄存器。同样I2S模式下也不使用寄 存器CTLR2的SSOE位和寄存器STATR的MODF位和CRCERR位。I2S使用与SPI相同的寄存器DATAR 用作16位宽模式数据传输。 20.3.2 支持的音频协议 三线总线支持 2 个声道上音频数据的时分复用:左声道和右声道,但是只有一个 16 位寄存器用 作发送或接收。因此,软件必须在对数据寄存器写入数据时,根据当前传输中的声道写入相应的数据; 同样在读取寄存器数据时通过检查寄存器STATR的CHSIDE位来判断接收到的数据属于哪个声道。 左声道总是先于右声道发送数据CHSIDE位在PCM协议下无意义。有四种可用的数据和包帧组合。 可以通过以下四种数据格式发送数据: ● 16位数据打包进16位帧 ● 16位数据打包进32位帧 ● 24位数据打包进32位帧 ● 32位数据打包进32位帧 在使用16位数据扩展到32位帧时前16位MSB是有意义的数据后16位LSB被强制为 0该操作不需要软件干预也不需要有DMA请求仅需要一次读或写操作。24位和32位数据帧需 要CPU对寄存器DATAR进行2次读或写操作在使用DMA时需要2次DMA传输。对于24位数据 扩展到32位后最低8位由硬件置0。对于所有的数据格式和通讯标准总是先发送最高位MSB。 I2S接口支持四种音频标准可以通过设置寄存器I2SCFGR的I2SSTD[1:0]位和PCMSYNC位来选择。 20.3.2.1 I2S 飞利浦标准 在此标准下引脚WS用来指示正在发送的数据属于哪个声道。在发送第一位数据MSB前1个 时钟周期该引脚即为有效。发送方在时钟信号CK的下降沿改变数据接收方在上升沿读取数据。 WS信号也在时钟信号的下降沿变化。 V2.4 293

Page 297

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图20-4 飞利浦协议波形16/32全精度CPOL=0 CK WS Transmission Reception May be 16-bit,32-bit SD MSB LSB MSB Channel left Channle right 图20-5 飞利浦协议波形24位帧CPOL=0 CK Transmission WS Reception 24-bit data 8-bit remaining SD MSB LSB Channel left 32 -bit Channel right 此模式需要对寄存器 SPI_DATAR 进行 2 次读或写操作。在发送模式下:如果需要发送 0x8EAA3324 位): First write to Data register Second write to Data register 0x8EAA 0x33XX Only the 8 MSB are sent to complete the 24 bits 8 LSB bit have no meaning and could be anything 在接收模式下如果接收0x8EAA33 First read from Data register Second read from Data register 0x8EAA 0x3300 Only the 8MSB are right The 8 LSB will always be 00 V2.4 294

Page 298

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图20-6 飞利浦协议标准波形16位扩展至32位包帧CPOL=0 CK WS Transmission Reception 16-bit data 16-bit remaining 0 forced SD MSB LSB Channel left 32-bit Channel right 在I2S配置阶段如果选择将16位数据扩展到32位声道帧只需要访问一次寄存器DATAR用来 扩展到 32 位的低 16 位被硬件置为 0x0000。如果待传输或接收的数据是 0x76A3扩展到 32 位是 0x76A30000只需要操作一次 DATAR。在发送时需要将 MSB写入寄存器DATAR标志位TXE为 1表 示可以写入新的数据,如果允许了相应的中断,则可以产生中断。发送是由硬件完成的,即使还未发 送出后16位的0x0000也会设置TXE并产生相应的中断。接收时每次收到高16位半字MSB 标志位 RXNE 置 1如果允许了相应的中断则可以产生中断。这样在 2 次读和写之间有更多的时 间,可以防止下溢或上溢的情况发生。 20.3.2.2 MSB 对齐标准 在此标准下WS信号和第一个数据位即最高位MSB同时产生。 图20-7 MSB对齐16位或32位全精度CPOL = 0 CK WS Transmission Peception May be 16-bit,32-bit SD MSB LSB MSB Channel left Channel right 发送方在时钟信号的下降沿改变数据;接收方是在上升沿读取数据。 V2.4 295

Page 299

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图20-8 MSB对齐24位数据CPOL = 0 CK Transmission Reception WS 24-bit data 8-bit remaining 0 forced SD MSB LSB Channel left 32-bit Channel right 图20-9 MSB对齐16位数据扩展到32位包帧CPOL = 0 CK Transmission Reception WS 16-bit data 16-bit remaining 0 forced SD MSB LSB Channel left 32-bit Channel right 20.3.2.3 LSB 对齐标准 此标准与MSB对齐标准类似在16位或32位全精度帧格式下无区别。 图20-10 LSB对齐16或 32位全精度CPOL = 0 CK WS Transmission Peception May be 16-bit,32-bit SD MSB LSB MSB Channel left Channel right V2.4 296

Page 300

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图20-11 LSB对齐24位数据CPOL = 0 CK WS Transmission Reception 8-bit data 24-bit remaining 0 forced SD MSB LSB Channel left 32 -bit Channel right 在发送模式下如果要发送数据0x3478AE需要通过软件或DMA对寄存器DATAR进行2次写操作。 TEX='1 ' when the data register is written TEX='1 ' when the data register is written for the first time for the second time 0xXX34 0x78AE Only the lower 8 bits in the halfword have meaning, the higher 8 bits are forced to be set to 0x00 在接收模式下如果要接收数据 0x3478AE需要在 2 个连续的 RXNE 事件发生时,分别对寄存器 DATAR进行1次读操作。 RXNE='1' when the data register is read out RXNE='1' when the data register is read out for the first time for the second time 0xXX34 0x78AE Only the lower 8 bits in the halfword have meaning, the higher 8 bits are forced to be set to 0x00 图20-12 LSB对齐16位数据扩展到32位包帧 CPOL = 0 CK Reception WS Transmission 16-bit data Remaining 16-bit data 0 forced SD MSB LSB Channel left 32-bit Channel right 在I2S配置阶段如果选择将16位数据扩展到32声道帧只需要访问一次寄存器DATAR。此时 扩展到32位后的高半字16位MSB被硬件置为0x0000。 如果待传输或接收的数据是0x76A3扩展到32位是0x000076A3只需要操作一次DATAR在 发送时如果TXE为1用户需要写入待发送的数据即0x76A3。用来扩展到32位的0x0000部分 V2.4 297

Page 301

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 由硬件首先发送出去,一旦有效数据开始从 SD 引脚送出,即发生下一次 TXE 事件。在接收时,一旦 接收到有效数据而不是0x0000部分即发生RXNE事件。这样在2次读和写之间有更多的时间 可以防止下溢或上溢的情况发生。 20.3.2.4 PCM 标准 在PCM标准下不存在声道选择的信息。PCM标准有2种可用的帧结构短帧或长帧可以通过 设置寄存器I2SCFGR的PCMSYNC位来选择。 图20-13 PCM标准波形16位 CK WS Short frame fixed to 1-3bit WS long frame 16-bit SD MSB LSB MSB 对于长帧,主模式下,用来同步的 WS 信号有效的时间固定为 13 位。对于短帧,用来同步的 WS 信号长度只有1位。 图20-14 PCM标准波形16位 CK WS short frame fixed to 13-bit WS long frame 16-bit SD MSB LSB 无论哪种模式主或从、哪种同步方式短帧或长帧连续的2帧数据之间和2个同步信号 之间的时间差即使是从模式需要通过设置I2SCFGR寄存器的DATLEN位和CHLEN位来确定。 20.3.3 时钟发生器 I2S的比特率即确定了在I2S数据线上的数据流和I2S的时钟信号频率。I2S比特率 = 每个声道 的比特数×声道数目×音频采样频率。 对于一个具有左右声道和16位音频信号I2S比特率计算如下 I2S比特率 = 16 × 2 × Fs V2.4 298

Page 302

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 如果包长为32位I2S比特率计算如下 I2S比特率 = 32 × 2 × Fs 图20-15 音频采样频率定义 16-bit or 32-bit left channel 16-bit or 32-bit right channel 16-bit or 32-bit Fs Sample point Fs: Audio sampling frequency Sample point 在主模式下,为了获得需要的音频频率,需要正确地对线性分频器进行设置。 图20-16 I2S时钟发生器结构 MCK CK 0 I2SxCLK 8-bit Linear 1 Divider + Dividecr by 4 Dicv2 0 Reshaping stage 1 MCKOE MCKOEODD I2SDIV[7:0] I2SMOD CHLEN 图中I2SxCLK的时钟源是系统时钟即驱动HB时钟的HSI、HSE或PLL。I2SxCLK可以来自 SYSCLK或PLL3 VCO2xPLL3CLK时钟可以通过RCC_CFGR2寄存器的I2S2SRC和I2S3SRC位选 择。音频的采样频率可以是96kHz、48kHz、44.1kHz、32kHz、22.05kHz、16kHz、11.025kHz或 8kHz或任何此范围内的数值。为了获得需要的频率需按照以下公式设置线性分频器 当需要生成主时钟时寄存器SPI_I2SPR的MCKOE位为1 声道的帧长为16位时 Fs = I2SxCLK / [162 * 2I2SDIV + ODD8] 声道的帧长为32位时 Fs = I2SxCLK / [322 * 2I2SDIV + ODD4] 当关闭主时钟时MCKOE位为0 声道的帧长为16位时 Fs = I2SxCLK / [162 * 2I2SDIV + ODD] 声道的帧长为32位时 Fs = I2SxCLK / [322 * 2I2SDIV + ODD] 20.3.4 I2S 主模式 设置I2S工作在主模式串行时钟由引脚CK输出字选信号由引脚WS产生。可以通过设置寄 存器I2SPR的MCKOE位来选择输出或不输出主时钟MCK。 20.3.4.1 配置流程  设置寄存器I2SPR的I2SDIV[7:0]定义与音频采样频率相符的串行时钟波特率。同时也要定义 寄存器I2SPR的ODD位。 V2.4 299

Page 303

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn  设置CKPOL位定义通信时钟在空闲时的电平状态。如果需要向外部的DAC/ADC音频器件提供主 时钟MCK需寄存器I2SPR的MCKOE位置为。  设置寄存器I2SCFGR的I2SMOD位为1激活I2S功能设置I2SSTD[1:0]和PCMSYNC位选择所用 的I2S标准设置CHLEN选择每个声道的数据位数。还要设置寄存器SPI_I2SCFGR的I2SCFG[1:0] 选择I2S主模式和方向发送端还是接收端。  如果需要可以通过设置寄存器CR2来打开所需的中断功能和DMA功能。  必须将寄存器I2SCFGR的I2SE位置为1。  引脚WS和CK需要配置为输出模式。如果寄存器SPI_I2SPR的MCKOE位为1引脚MCK也要配 置成输出模式。 20.3.4.2 发送流程 当写入1个半字16位的数据至发送缓存发送流程开始。假设第一个写入发送缓存的数据 对应的是左声道数据。当数据从发送缓存移到移位寄存器时标志位TXE置1这时要把对应右 声道的数据写入发送缓存。标志位CHSIDE提示了目前待传输的数据对应哪个声道。标志位CHSIDE 的值在TXE为1时更新因此它在TXE为1时有意义。在先左声道后右声道的数据都传输完成后 才能被认为是一个完整的数据帧。不可以只传输部分数据帧,如仅有左声道的数据。 当发出第一位数据的同时半字数据被并行地传送至16位移位寄存器然后后面的位依次按高 位在先的顺序从引脚MOSI/SD发出。每次数据从发送缓存移至移位寄存器时标志位TXE置为1 如果寄存器CR2的TXEIE位为1则产生中断。 为了保证连续的音频数据传输建议在当前传输完成之前对寄存器DATAR写入下一个要传输 的数据。建议在要关闭I2S功能时等待标志位TXE=1及BSY=0再将I2SE位清0。 20.3.4.3 接收流程 接收流程的配置步骤除了第3点外与发送流程的一致参见前述的”发送流程”需要通 过配置I2SCFG[1:0]来选择主接收模式。无论何种数据和声道长度音频数据总是以16位包的形式 接收。即每次填满接收缓存后标志位RXNE置1如果寄存器CR2的RXNEIE位为1则产生中断。 根据配置的数据和声道长度收到左声道或右声道的数据会需要1次或2次把数据传送到接收缓存 的过程。对寄存器DATAR进行读操作即可清除RXNE标志位。每次接收以后即更新CHSIDE。它的值 取决于I2S单元产生的WS信号。如果前一个接收到的数据还没有被读取又接收到新数据即发生 上溢标志位OVR被置为1如果寄存器CR2的ERRIE位为1则产生中断表示发生了错误。若要 关闭I2S功能需要执行特别的操作以保证I2S模块可以正常地完成传输周期而不会开始新的数 据传输。操作过程与数据配置和通道长度、以及音频协议的模式相关: ● 16位数据扩展到32位通道长度DATLEN=00并且CHLEN=1使用LSB低位对齐模式 I2SSTD=10 a 等待倒数第二个n-1RXNE=1 b 等待17个I2S时钟周期使用软件延迟 c 关闭I2SI2SE=0。 ● 16位数据扩展到32位通道长度DATLEN=00并且CHLEN=1使用MSB高位对齐、I2S或 PCM模式分别为I2SSTD=00、I2SSTD=01或I2SSTD=11 a 等待最后一个RXNE=1 b 等待1个I2S时钟周期使用软件延迟 c 关闭I2SI2SE=0。 ● 所有其它DATLEN和CHLEN的组合I2SSTD选择的任意音频模式使用下述方式关闭I2S a 等待倒数第二个n-1RXNE=1 b 等待一个I2S时钟周期使用软件延迟 c 关闭I2SI2SE=0。 注: 在传输期间BSY标志始终为低。 V2.4 300

Page 304

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 20.3.5 I2S 从模式 在从模式下I2S可以设置成发送和接收模式。从模式的配置方式基本遵循和配置主模式一样 的流程。在从模式下不需要I2S接口提供时钟。时钟信号和WS信号都由外部主I2S设备提供连 接到相应的引脚上。因此用户无需配置时钟。 配置步骤如下:  设置寄存器I2SCFGR的I2SMOD位激活I2S功能设置I2SSTD[1:0]来选择所用的I2S标准设 置DATLEN[1:0]选择数据的比特数设置CHLEN选择每个声道的数据位数。设置寄存器I2SCFGR 的I2SCFG[1:0]选择I2S从模式的数据方向发送端还是接收端。  根据需要设置寄存器CR2打开所需的中断功能和DMA功能。  必须设置寄存器I2SCFGR的I2SE位为1。 20.3.5.1 发送流程 当外部主设备发送时钟信号并且当NSS_WS信号请求传输数据时发送流程开始。必须先使能 从设备并且写入I2S数据寄存器之后外部主设备才能开始通信。对于I2S的MSB对齐和LSB对 齐模式,第一个写入数据寄存器的数据项对应左声道的数据。当开始通信时,数据从发送缓冲器传 送到移位寄存器然后标志位TXE置为1这时要把对应右声道的数据项写入I2S数据寄存器。 标志位CHSIDE提示了目前待传输的数据对应哪个声道。与主模式的发送流程相比在从模式中 CHSIDE取决于来自外部主I2S的WS信号。这意味着从I2S在接收到主机生成的时钟信号之前就 要准备好第一个要发送的数据。WS信号为1表示先发送左声道。 20.3.5.2 接收流程 配置步骤除了第1点外与发送流程一致。需要通过配置I2SCFG[1:0]来选择主接收模式。无 论何种数据和声道长度音频数据总是以16位包的形式接收即每次填满接收缓存标志位RXNE 置1如果寄存器I2S_CTLR2的RXNEIE位为1则产生中断。按照不同的数据和声道长度设置收 到左声道或右声道数据会需要1次或2次传输数据至接收缓冲器的过程。每次接收到数据将要从 DATAR读出以后即更新CHSIDE它对应I2S单元产生的WS信号。读取SPI_DATAR寄存器将清除 RXNE位。在还没有读出前一个接收到的数据又接收到新数据时即产生上溢并设置标志位OVR 为1如果寄存器I2S_CTLR2的ERRIE位为1则产生中断指示发生了错误。要关闭I2S功能时 需要在接收到最后一次RXNE=1时将I2SE位清0。 20.3.6 状态标志位 有3个状态标志位供用户监控I2S总线的状态。 20.3.6.1 状态标志位BSY BSY标志由硬件设置与清除写入此位无效果该标志位指示I2S通信层的状态。该位为1 时表明I2S通讯正在进行中但有一个例外主接收模式I2SCFG=11在接收期间BSY标志始 终为低。在软件要关闭SPI模块之前可以使用BSY标志检测传输是否结束这样可以避免破坏最 后一次传输,因此需要严格按照下述过程执行。当传输开始时, BSY标志被置为1除非I2S模块 处于主接收模式。当传输结束时或者当关闭I2S模块时该标志位被清除。当通信是连续的时候在 主发送模式时,整个传输期间, BSY标志始终为高在从模式时每个数据项传输之间 BSY标志 在1个I2S时钟周期内变低。 20.3.6.2 发送缓冲标志位TXE 该标志位为1表示发送缓冲器为空可以对发送缓冲器写入新的待发送数据。在发送缓冲器中 已有数据时标志位清0。在I2S被关闭时I2SE位为0该标志位也为0。 V2.4 301

Page 305

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 20.3.6.3 接收缓存非空标志位RXNE 该标志位置1表示在接收缓存里有接收到的有效数据。在读取寄存器DATAR时该位清0。 20.3.6.4 声道标志位CHSIDE 在发送模式下该标志位在TXE为高时刷新指示从SD引脚上发送的数据所在的声道。如果在 从发送模式下发生了下溢错误该标志位的值无效在重新开始通讯前需要把I2S关闭再打开。在 接收模式下该标志位在寄存器DATAR接收到数据时刷新指示接收到的数据所在的声道。注意 如果发生错误该标志位无意义需要将I2S关闭再打开。在PCM标准下无论短帧格式还是长帧 格式这个标志位都没有意义。如果寄存器STATR的标志位OVR或UDR为1且寄存器CR2的ERRIE 位为1则会产生中断。中断源已经被清除后可以通过读寄存器STATR来清除中断标志。 20.3.7 错误标志位 20.3.7.1 下溢标志位UDR 在从发送模式下如果数据传输的第一个时钟边沿到达时新的数据仍然没有写入DATAR寄存 器该标志位会被置1。在寄存器I2SCFGR的I2SMOD位置1后该标志位才有效。如果寄存器CR2 的ERRIE位为1就会产生中断。通过对寄存器STATR进行读操作来清除该标志位。 20.3.7.2 上溢标志位OVR 如果还没有读出前一个接收到的数据时又接收到新的数据即产生上溢该标志位置1如 果寄存器CTLR2的ERRIE位为1则产生中断指示发生了错误。这时接收缓存的内容不会刷新 为从发送设备送来的新数据。对寄存器DATAR的读操作返回最后一个正确接收到的数据。其他所有 在上溢发生后由发送设备发出的16位数据都会丢失。通过先读寄存器DATAR再读寄存器STATR来 清除该标志位。 20.3.8 I2S 中断 I2S有4个中断源其中发送缓冲区空接收缓冲区非空这两个事件分别会置位TXE和RXNE 在分别置位了TXEIE和RXNEIE位的情况下会产生中断。如果还没有读出前一个接收到的数据时又 接收到新的数据即产生上溢如果置位了ERRIE会产生上溢中断在从发送模式下如果数据传 输的第一个时钟边沿到达时新的数据仍然没有写入DATAR寄存器如果置位了ERRIE会产生下溢中 断。 20.3.9 DMA 功能 DMA的工作方式在I2S模式除了CRC功能不可用以外与在SPI模式完全相同。因为在I2S模 式下没有数据传输保护系统。 20.4 寄存器描述 表20-1 SPI1相关寄存器列表 名称 访问地址 描述 复位值 R16_SPI1_CTLR1 0x40013000 SPI1控制寄存器1 0x0000 R16_SPI1_CTLR2 0x40013004 SPI1控制寄存器2 0x0000 R16_SPI1_STATR 0x40013008 SPI1状态寄存器 0x0002 R16_SPI1_DATAR 0x4001300C SPI1数据寄存器 0x0000 R16_SPI1_CRCR 0x40013010 SPI1多项式寄存器 0x0007 R16_SPI1_RCRCR 0x40013014 SPI1接收CRC寄存器 0x0000 V2.4 302

Page 306

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R16_SPI1_TCRCR 0x40013018 SPI1发送CRC寄存器 0x0000 R16_SPI1_I2S_CFGR 0x4001301C SPI1_I2S配置寄存器 0x0000 R16_SPI1_HSCR 0x40013024 SPI1高速控制寄存器 0x0000 表20-2 SPI2相关寄存器列表 名称 访问地址 描述 复位值 R16_SPI2_CTLR1 0x40003800 SPI2控制寄存器1 0x0000 R16_SPI2_CTLR2 0x40003804 SPI2控制寄存器2 0x0000 R16_SPI2_STATR 0x40003808 SPI2状态寄存器 0x0002 R16_SPI2_DATAR 0x4000380C SPI2数据寄存器 0x0000 R16_SPI2_CRCR 0x40003810 SPI2多项式寄存器 0x0007 R16_SPI2_RCRCR 0x40003814 SPI2接收CRC寄存器 0x0000 R16_SPI2_TCRCR 0x40003818 SPI2发送CRC寄存器 0x0000 R16_SPI2_I2S_CFGR 0x4000381C SPI2_I2S配置寄存器 0x0000 R16_SPI2_I2SPR 0x40003820 SPI2_I2S预分频寄存器 0x0000 R16_SPI2_HSCR 0x40003824 SPI2高速控制寄存器 0x0000 表20-3 SPI3相关寄存器列表 名称 访问地址 描述 复位值 R16_SPI3_CTLR1 0x40003C00 SPI3控制寄存器1 0x0000 R16_SPI3_CTLR2 0x40003C04 SPI3控制寄存器2 0x0000 R16_SPI3_STATR 0x40003C08 SPI3状态寄存器 0x0002 R16_SPI3_DATAR 0x40003C0C SPI3数据寄存器 0x0000 R16_SPI3_CRCR 0x40003C10 SPI3多项式寄存器 0x0007 R16_SPI3_RCRCR 0x40003C14 SPI3接收CRC寄存器 0x0000 R16_SPI3_TCRCR 0x40003C18 SPI3发送CRC寄存器 0x0000 R16_SPI3_I2S_CFGR 0x40003C1C SPI3_I2S配置寄存器 0x0000 R16_SPI3_I2SPR 0x40003C20 SPI3_I2S预分频寄存器 0x0000 R16_SPI3_HSCR 0x40003C24 SPI3高速控制寄存器 0x0000 20.4.1 SPI 控制寄存器 1SPIx_CTLR1x=1/2/3 偏移地址0x00 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 BIDI BIDI CRC RX LSB CRCEN DFF SSM SSI SPE BR[2:0] MSTR CPOL CPHA MODE OE NEXT ONLY FIRST 位 名称 访问 描述 复位值 单向数据模式使能位。 15 BIDIMODE RW 0选择双线双向模式 0 1选择单线双向模式。 单线输出使能位和BIDIMODE配合使用。 14 BIDIOE RW 0禁止输出仅接收 0 1使能输出仅发送。 13 CRCEN RW 硬件CRC校验使能位该位只能在SPE为0时 0 V2.4 303

Page 307

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 写入,该位只能在全双工模式下使用。 0禁止CRC计算 1启动CRC计算。 在接下来的一次数据传输后发送CRC寄存器 的值。这位应该在向数据寄存器写入最后一个 12 CRCNEXT RW 数据后立刻置位。 0 0继续发送数据寄存器的数据 1发送CRC校验结果。 数据帧长度位此位只能在SPE为0时写入。 11 DFF RW 0使用8位数据长度进行收发 0 1使用16位数据长度进行收发。 双线模式下只接收位,该位和 BIDIMODE 配合 使用。置此位可以让设备只接收不发送。 10 RXONLY RW 0 0全双工模式 1只接收单工模式。 片选引脚管理位此位决定NSS引脚的电平由 硬件还是软件控制。 9 SSM RW 0 0硬件控制NSS引脚 1软件控制NSS引脚。 片选引脚控制位在SSM置位的情况下此位 决定NSS引脚的电平。 8 SSI RW 0 0NSS为低电平 1NSS为高电平。 帧格式控制位。不可以在通讯时修改此位。 7 LSBFIRST RW 0先发送MSB 0 1先发送LSB。 SPI使能位。 6 SPE RW 0禁用SPI 0 1启用SPI。 波特率设置域,在通讯时不可以修改此域。 当HSRXEN位为0时SCK频率为 000F /2 001F /4 PCLK PCLK 010F /8 011F /16 PCLK PCLK 100F /32 101F /64 PCLK PCLK 110F /128 111F /256。 PCLK PCLK 当HSRXEN位为1时SCK频率为 [5:3] BR[2:0] RW 000b 000F /2 001F /3 PCLK PCLK 010F /4 011F /5 PCLK PCLK 100F /6 101F /7 PCLK PCLK 110F /8 111F /9。 PCLK PCLK 注此位仅适用于批号倒数第六位不等于0的 CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C系列芯片。 主从设置位,在通讯时不可以修改此位。 2 MSTR RW 0配置为从设备 0 1配置为主设备。 V2.4 304

Page 308

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 时钟极性选择位,在通讯时不可以修改此位。 1 CPOL RW 0空闲状态时SCK保持低电平 0 1空闲状态时SCK保持高电平。 时钟相位设置位,在通讯时不可以修改此位。 0 CPHA RW 0数据采样从第一个时钟沿开始 0 1数据采样从第二个时钟沿开始。 20.4.2 SPI 控制寄存器 2SPIx_CTLR2x=1/2/3 偏移地址0x04 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RXNE TXDMA RXDMA Reserved TXEIE ERRIE Reserved SSOE IE EN EN 控制寄存器2 位 名称 访问 描述 复位值 [15:8] Reserved RO 保留。 0 发送缓冲区空中断使能位: 7 TXEIE RW 0禁止TXE被置位时产生中断 0 1允许TXE被置位时产生中断。 接收缓冲区非空中断使能位: 6 RXNEIE RW 0禁止RXNE被置位时产生中断 0 1允许RXNE被置位时产生中断。 错误中断使能位: 0禁止在产生错误CRCERROVRMODF时 5 ERRIE RW 产生中断; 0 1允许在产生错误CRCERROVRMODF时 产生中断。 [4:3] Reserved RO 保留。 0 SS 输出使能。禁止 SS 输出可以工作在多主模 式下。 2 SSOE RW 0 0禁止主模式下的SS输出 1使能SS输出。 发送缓冲区DMA使能位。 1 TXDMAEN RW 0禁用发送缓冲区DMA 0 1启用发送缓冲区DMA。 接收缓冲区DMA使能位。 0 RXDMAEN RW 0禁用接收缓冲区DMA 0 1启用接收缓冲区DMA。 20.4.3 SPI 状态寄存器SPIx_STATRx=1/2/3 偏移地址0x08 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CRC CHSID Reserved BSY OVR MODF UDR TXE RXNE ERR E V2.4 305

Page 309

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 [15:8] Reserved RO 保留。 0 忙标志位,该位由硬件置位或复位。 7 BSY RO 0SPI不在通讯 0 1SPI正在通讯或发送缓冲区非空。 溢出标志位,该位由硬件置位,软件复位。 6 OVR RO 0没有出现溢出错误 0 1出现溢出错误。 模式错误标志位,该位由硬件置位,软件复位。 5 MODF RO 0没有出现模式错误 0 1出现了模式错误。 CRC错误标志位该位由硬件置位软件复位。 4 CRCERR RW0 0收到的CRC值与RCRCR的值一致 0 1收到的CRC值与RCRCR的值不一致。 下溢标志位,该位由硬件置位,软件复位。 3 UDR RO 0未发生下溢 0 1发生下溢。 声道,该位由硬件置位,软件复位。 2 CHSIDE RO 0需要传输或接收左声道 0 1需要传输或接收右声道。 发送缓冲区为空标志位: 1 TXE RO 0发送缓冲区非空 1 1发送缓冲区为空。 接收缓冲区非空标志位: 0接收缓冲区为空 0 RXNE RO 0 1接收缓冲区非空。 注读DATAR自动清零。 20.4.4 SPI 数据寄存器SPIx_DATARx=1/2/3 偏移地址0x0C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DR[15:0] 位 名称 访问 描述 复位值 数据寄存器。数据寄存器用于存放接收到的数 据或预存将要发送出去的数据,因此数据寄存 器的读写实际上是对应操作不同的区域,其中 读对应接收缓冲区,写对应发送缓冲区。数据 [15:0] DR[15:0] RW 的接收和发送可以是 8 位或者 16 位的,需要 0 在传输之前就确定使用多少位的数据。使用 8 位进行数据传输时只有数据寄存器的低8位 被使用接收时高8位强制为0。使用16位数 据结构则会使全部16位数据寄存器被使用。 V2.4 306

Page 310

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 20.4.5 SPI 多项式寄存器SPIx_CRCRx=1/2/3 偏移地址0x10 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CRCPOLY[15:0] 位 名称 访问 描述 复位值 [15:0] CRCPOLY[15:0] RW CRC多项式。此域定义CRC计算用到的多项式。 0x0007 20.4.6 SPI 接收 CRC 寄存器SPIx_RCRCRx=1/2/3 偏移地址0x14 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RXCRC[15:0] 位 名称 访问 描述 复位值 接收CRC值。存储着计算出来的接收到的字节 的CRC校验的结果。对CRCEN置位会复位该寄 存器。计算方法使用CRCPOLY用到的多项式。 [15:0] RXCRC[15:0] RO 0 8位模式下只有低8位参与计算16位模式下 全部 16 位都会参与计算。需要在 BSY 为 0 时 去读取这个寄存器。 20.4.7 发送 CRC 寄存器SPIx_TCRCRx=1/2/3 偏移地址0x18 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TXCRC[15:0] 位 名称 访问 描述 复位值 发送CRC值。存储着计算出来的已经发送出去 的字节的CRC校验的结果。对CRCEN置位会复 位该寄存器。计算方法使用CRCPOLY用到的多 [15:0] TXCRC[15:0] RO 0 项式。8位模式下只有低8位参与计算16位 模式下全部16位都会参与计算。需要在BSY为 0时去读取这个寄存器。 20.4.8 SPI_I2S 配置寄存器SPIx_I2S_CFGRx=1/2/3 偏移地址0x1C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 I2S I2SCFG PCM Reser I2SSTD DATLEN Reserved I2SE CKPOL CHLEN MOD [1:0] SYNC ved [1:0] [1:0] 位 名称 访问 描述 复位值 V2.4 307

Page 311

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [15:12] Reserved RO 保留。 0 I2S模式选择该位只有在关闭了SPI或者I2S 时才能设置。 11 I2SMOD RW 0 0选择SPI模式 1选择I2S模式。 I2S使能在SPI模式下不使用。 10 I2SE RW 0关闭I2S 0 1I2S使能。 I2S 模式选择,此该位只有在关闭了 I2S 时才 能设置: 00从设备发送 [9:8] I2SCFG[1:0] RW 00b 01从设备接收 10主设备发送 11主设备接受。 PCM帧同步。该位只在I2SSTD = 11 使用PCM 标准)时有意义。 7 PCMSYNC RW 0 0短帧同步 1长帧同步。 6 Reserved RO 保留 0 I2S 标准选择,只有在关闭了 I2S 时才能设置 该位。 00I2S飞利浦标准 [5:4] I2SSTD[1:0] RW 00b 01高字节对齐标准 (左对齐); 10低字节对齐标准右对齐 11PCM 标准。 静止态时钟极性,为了正确操作,该位只有在 关闭了I2S时才能设置。 3 CKPOL RW 0 0I2S时钟静止态为低电平 1I2S时钟静止态为高电平。 待传输数据长度,为了正确操作,该位只有在 关闭了I2S时才能设置。 0016位数据长度 [2:1] DATLEN[1:0] RW 00b 0124位数据长度 1032位数据长度 11不允许。 声道长度,只有在 DATLEN = 00 时该位的写 操作才有意义,否则声道长度都由硬件固定为 0 CHLEN RW 32位。。 0 016位宽 132位宽。 20.4.9 SPI_I2S 预分频寄存器SPIx_I2SPRx=2/3 偏移地址0x20 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved MCKOE ODD I2SDIV[7:0] V2.4 308

Page 312

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 [15:10] Reserved RO 保留 0 主设备时钟输出使能,为了正确操作,该位只 0 有在关闭了I2S时才能设置。仅在I2S主设备 9 MCKOE RW 模式下使用该位。 0关闭主设备时钟输出 1主设备时钟输出使能。 奇系数预分频,为了正确操作,该位只有在关 0 闭了I2S时才能设置。仅在I2S主设备模式下 8 ODD RW 使用该位。 0实际分频系数 = I2SDIV *2 1实际分频系数 = I2SDIV * 2+1。 I2S 线性预分频。为了正确操作,该位只有在 0 关闭了I2S时才能设置。仅在I2S主设备模式 [7:0] I2SDIV[7:0] RW 下使用该位。禁止设置I2SDIV [7:0] = 0或 者I2SDIV[7:0] = 1。 参见20.3.3节。 20.4.10 SPI 高速控制寄存器SPIx_HSCRx=1/2/3 偏移地址0x24 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 HSRXE Reser HSRX Reserved N2 ved EN 位 名称 访问 描述 复位值 [15:3] Reserved RO 保留 0 SPI高速读模式2 该模式仅在开启HSRXEN且SPI PCLK大于等于 120M 时使用,小于 120M 不建议使用此位。可 以获得比仅开启HSRXEN更高的主机读速度。 2 HSRXEN2 RW 0关闭高速读模式2 0 1使能高速读模式2。 注:仅适用于 CH32F20x_D8、CH32F20x_D8C、 CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C批 号倒数第六位不为0的产品。 1 Reserved RO 保留 0 高速读模式使能位: 0关闭高速读模式 1使能高速读模式。 该 位 除 CH32F20x_D8 、 CH32F20x_D8C 、 0 HSRXEN WO 0 CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C批 号倒数第六位不为0的产品可读可写外其他 型号芯片均为只写。 V2.4 309

Page 313

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 对于CH32F20x_D6、CH32V20x_D6系列芯片所有 版本支持该模式仅在时钟2分频即CTLR1寄 存器的BR = 000时有效。 对 于 CH32F20x_D8 、 CH32F20x_D8C 、 CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C系 列芯片批号倒数第五位小于2且批号倒数第六 位为 0 的、CH32V20x_D8、CH32V20x_D8W、 CH32F20x_D8W系列芯片批号倒数第五位小于2 的,只支持该模式仅在时钟 2 分频(即 CTLR1 寄存器的BR = 000时有效其他批次不受限 制。 V2.4 310

Page 314

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 21 章 USB 全速设备控制器USBD 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器系列部分产品。 USBD模块是基于USB2.0全速设备技术规范设计的USB全速、低速协议通讯控制器。内置硬件 自动处理物理信号的反向不归零NRZI编码/解码、位填充。控制可驱动出 USB 总线多种状态、协 议包收发,并提供自动应答进行流控保证应用程序处理时间等功能。 21.1 主要特性  符合USB2.0全速设备技术规范  支持USB全速12Mbps、低速1.5Mbps模式  支持配置16个传输通道  支持端点地址范围0-15  支持控制、中断、批量、同步传输  支持批量/同步端点的双缓冲机制  USB挂起、唤醒、恢复操作  硬件自动进行数据PID翻转、传输流控  帧锁定时钟脉冲生成 注USBD和CAN控制器在设计中共享了一个专用的512字节SRAM区域用于数据的发送和接收因此 同时使用USBD和CAN功能时需要合理分配此共享区域防止出现数据冲突。 21.2 功能描述 21.2.1 功能介绍 USBD 模块为 USB主机一般是 PC和微控制器之间的数据通讯提供了一条符合 USB 规范的通信 连接,使用时由应用程序和模块硬件配合完成。模块中包含一块共享的 512 字节专用 SRAM 区域作为 USB收发数据缓冲区由配置的端点数目和每个端点最大数据包长度决定实际使用范围。最多可用于 16个单向或8个双向端点。 USBD模块功能包括  物理信号编码/解码根据USB规范实现令牌包、数据包、握手包的PID检测包括位填充、CRC 的生成和校验、帧头同步识别等。  事务处理:判断正确传输和错误状态,提供各自标志状态及中断通知。  总线挂起/复位/唤醒状态识别通知。  自动数据包 PID根据协议对非同步端点、同步端点的收发数据包 PID 进行硬件翻转或锁定, 减少应用程序工作。  自动应答包PID根据协议完成一次USB事务后对非同步端点会自动修改应答包状态来为应 用程序提供足够的处理和准备时间但不影响USB总线上的物理收发。  管理数据收发:定位端点配置及缓冲区描述区域,检测缓冲区边界防溢出。单缓冲/双缓冲区域 管理、按端点类型中断上报优先级管理等。  提供通用类、端点类、缓冲区描述类寄存器配置。 应用程序可以:  获取基于USB协议的帧间隔时间点总线状态挂起、复位。  自定义端点数目、端点类型、端点大小。自定义传输数据缓冲区域。  获取当前或已挂起端点的服务进行处理。  获取如位填充、格式、CRC、协议、缺失ACK、缓冲区溢出/缓冲区未满等错误状态。  驱动模块进入低功耗模式。 V2.4 311

Page 315

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn USBD模块提USB事件映射到3个不同的NVIC或PFIC请求线上使用了3个中断号 1 USB高优先级中断仅能由同步和双缓冲批量传输的正确传输事件触发目的是保证最大的传输 速率。 2 USB 低优先级中断:可由所有 USB 事件触发正确传输USB 复位等)。固件在处理中断前应当 首先确定中断源。 3 USB唤醒中断由USB挂起模式的唤醒事件触发。 21.2.2 功能配置 1GPIO端口 一旦使能了USBD模块作为UDP和UPM的GPIO口会自动连接到内部USB收发器而断开其GPIO 外设的端口设置。所以推荐GPIO口配置为推挽方式输出低电平防止在未开启USBD功能前出现端 口不确定状态或连接PC主机时提前通知有USB设备接入。 USBD模块内置USB设备模式的1.5K上拉电阻,无需外接上拉电阻。具体配置请参考配置扩展控 制寄存器EXTEN_CTR说明。 2模块初始化 首先USB收发器相关的模拟部分需要标准的48MHz时钟作为基准时钟此时钟来源于HB总线。 应用程序需要先通过配置时钟管理逻辑的相应控制位RCC_CFGR0寄存器保证当前USB时钟是48MHz 再使能USB接口时钟使程序可以访问USBD模块的寄存器。 其次在模块强制复位时USBD_CNTR寄存器上的FRES位默认为1应用程序应该初始化所需 要的寄存器和分组缓冲区描述表。包括分组缓冲区描述表地址寄存器USBD_BTABLE、端点配置寄 存器USBD_EPRx和分组缓冲区描述表寄存器。配置USBD_DADDR寄存器ADD[6:0]域为0USB协议 默认地址置位EF位使能端点传输功能。 最后启用内部1.5K上拉电阻和设置速度模式EXTEN_CTR寄存器然后清除USBD_CNTR寄 存器上的 FRES位撤销 USBD模块强制复位状态来使能 USBD模块清除 USBD_ISTR寄存器的各种状 态标志以便在使能其他任何单元的操作之前清除未处理的假中断标志。开启USBD_CNTR寄存器中需 要的中断控制位。 3USB复位 USB复位包括USBD模块强制复位和USB总线复位协议复位。两者皆会产生USBD_ISTR寄存 器的 RST 标志。发生 USB 复位时所有端点的通信都被禁止USBD 模块不会响应任何包传输)。在 USB复位后USBD模块被使能同时USB端点也需要被使能以便可以响应USB主机USBD_DADDR寄存 器的 EF 位为 1。在 USB 设备的枚举阶段,主机将分配给设备一个唯一的地址,这个地址必须写入 USBD_DADDR寄存器的ADD[6:0]位中。 注RST标志来源USBD模块强制复位控制位FRES的状态和USB总线复位信号起始。 4端点配置及缓冲区描述表 每个端点配置寄存器可以配置一个双向端点单缓冲属性,也可以配置一个单向端点双缓冲属性。 例如配置双向端点单缓冲属性端点配置寄存器3USBD_EPRxEA[3:0]为2那么可以在USB传 输上存在端点 2 上传通道和端点 2 下传通道(具体由描述符信息决定);配置单向端点双缓冲属性 只针对批量端点和同步端点端点配置寄存器3USBD_EPRxEA[3:0]为2端点类型EPTYPE 为同步或批量端点EP_KIND位置1那么可以在USB传输上存在端点2上传通道或端点2下传通道 2选1收发速度上与单缓冲相比更快微控制器处理和USBD模块物理收发可以同步进行降低等待 时间。 注USBD模块内置冲突仲裁机制使得微控制器和USBD模块对分组缓冲区的访问如同对一个双端口 V2.4 312

Page 316

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn SRAM的访问即使微控制器连续访问缓冲区也不会产生访问冲突。 每个端点配置寄存器对应一组缓冲区描述类寄存器(描述表)及相应数据收发缓冲区域,他们都 位于共享的 512 字节专用 SRAM 区域内(基地址 0x40006000。其中USBD_BTABLE 寄存器定义缓冲 区描述表在 SRAM 区域内的起始地址,而数据收发缓冲区域可以位于整个专用 SRAM 区域内的任意位 置,因为它们的地址和长度都定义在对应的缓冲区描述表中,注意分配冲突问题。 注CH32V20x_D6、CH32V20x_D8、CH32V20x_D8W、CH32F20x_D6、CH32F20x_D8W系列产品使用CAN时 CAN过滤器表使用共享的512字节专用SRAM区域中的高128字节USB使用低384字节。 CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C、CH32F20x_D8、CH32F20x_D8C系列产品使用CAN1时 CAN过滤器表使用共享的512字节专用SRAM区域中的高128字节USB使用低384字节同时使用 CAN1&CAN2时CAN过滤器表使用共享的512字节专用SRAM区域中的高256字节USB使用低256字 节。 图21-1 缓冲区描述表结构 ... ... ... 双缓冲模式 端点3发送缓冲区1 3CH Reserved COUNT3_TX_1 38H Reserved ADD3_TX_1 双缓冲模式 EA=3 端点3发送缓冲区0 34H Reserved COUNT3_TX_0 0x4000 6400 30H Reserved ADD3_TX_0 双缓冲模式 端点2接收缓冲区1 2CH Reserved COUNT0_RX_1 28H Reserved ADD2_RX_1 EA=2 双缓冲模式 24H Reserved COUNT0_RX_0 端点2接收缓冲区0 20H Reserved ADD2_RX_0 1CH Reserved COUNT1_RX 单缓冲模式 端点1接收缓冲区 18H Reserved ADD1_RX EA=1 14H Reserved COUNT1_TX 单缓冲模式 端点1发送缓冲区 10H Reserved ADD1_TX USBD_BTABLE 基址 0CH Reserved COUNT0_RX 单缓冲模式 08H Reserved ADD0_RX 端点0接收缓冲区 EA=0 04H Reserved COUNT0_TX 单缓冲模式 (00H) Reserved ADD0_TX 端点0发送缓冲区 0x4000 6000 偏移地址 共享的专用SRAM 缓冲区描述表 数据包缓冲区 有效区域512字节 不论接收或发送分组缓冲区都是从底部开始使用的。USBD模块不会改变超出当前分配到的缓冲 区区域以外的其他缓冲区的内容。如果缓冲区收到一个比自己大的数据分组,它只会接收最大为自身 大小的数据,其他的丢掉,即发生了所谓的缓冲区溢出异常。 1端点初始化 初始化端点的第一步是把适当的值写到 USBD_ADDRx_TX 或 USBD_ADDRx_RX 寄存器中,以便 USBD 模块能找到要传输的数据或准备好接收数据的缓冲区。USBD_EPRx 寄存器的 EPTYPE[1:0]位确定端点 的基本类型EP_KIND 位确定端点的特殊特性。作为发送方,需要设置 USBD_EPRx 寄存器的 STAT_TX 位来使能端点,并配置 COUNTx_TX 位决定发送长度。作为接收方,需要设置 STAT_RX 位来使能端点, 并且设置BL_SIZE和NUM_BLOCK位确定接收缓冲区的大小以检测缓冲区溢出的异常。对于非同步 非双缓冲批量传输的单向端点,只需要设置一个传输方向上的寄存器。一旦端点被使能,应用程序就 不 能 再 修 改 USBD_EPRx 寄 存 器 的 值 和 USBD_ADDRx_TX/USBD_ADDRx_RX 、 USBD_COUNTx_TX/ USBD_COUNTx_RX寄存器所在的位置因为这些值会被硬件实时修改。当数据传输完成时CTR中断会 产生,此时上述寄存器可以被访问,并重新使能新的传输。 V2.4 313

Page 317

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 2IN事务进行数据发送 当接收到 IN 令牌包时,如果接收到的地址和一个配置好的端点地址相符合,并且此时寄存器 USBD_EPRx上的STAT_TX位表示可发送的话USBD模块将会根据缓冲区描述表的内容及DTOG_TX位进 行组包编码发出数据包。如果收到的令牌包所对应的端点是无效的,将根据 USBD_EPRx 寄存器上的 STAT_TX位发送NAK或STALL握手包而不发送数据包。 在接收到主机响应的 ACK 握手包后USBD_EPRx 寄存器的值有以下更新DTOG_TX 位被翻转, STAT_TX位为10NAK状态使端点无效CTR_TX位被置位。应用程序需要通过USBD_ISTR寄 存器的 EP_ID 和 DIR 位识别产生中断的 USB 端点。CTR_TX 事件的中断服务程序需要首先清除中断标 志位,如果要继续发送数据(可以在任何需要发送数据时执行),需要准备好需要发送的数据缓冲区, 更新 COUNTx_TX 为下次需要传输的字节数,最后再设置 STAT_TX 位为11ACK端点有效再 次使能数据传输。当 STAT_TX 位为10NAK状态任何发送到该端点的 IN 请求都会被 NAK USB主机会重发IN请求直到该端点确认请求有效。 3OUT事务和SETUP事务进行数据接收 USBD 模块对这两种事务的处理方式基本相同;当接收到一个 OUT 或 SETUP 包时,如果接收到的 地址和一个配置好的端点地址相符合,并且此时寄存器 USBD_EPRx 上的 STAT_RX 位表示可接收的话, USBD 模块根据 DTOG_RX 位判断接收数据是否 PID 匹配,如果匹配将访问缓冲区描述表,找到与该端 点相关的ADDRx_RX和COUNTx_RX寄存器将接收的数据包先收到的为低字节保存到ADDRx_RX定 义的地址空间内并根据BL_SIZE和NUM_BLOCK的值检测接收是否溢出缓冲区。如果传输中没有任何错 误发生则发送ACK握手包到主机。即使发生CRC错误或其他类型的错误位填充帧错误等数 据还是会被保存到分组缓冲区中至少会保存到发生错误的数据点只是不会发送ACK握手包并且 USBD_ISTR寄存器的ERR位将会置位。在这种情况下应用程序通常不需要干涉处理USBD模块将从 传输错误中自动恢复并为下一次传输做好准备。如果收到的包所对应的端点没有准备好USBD模块 将根据USBD_EPRx寄存器的STAT_RX位发送NAK或STALL握手包数据将不会被写入接收缓冲区。 ADDRx_RX的值决定接收缓冲区的起始地址COUNTx_RX决定接收缓冲区大小期望有效数据长度 +2 字节 CRC。如果接收到的数据包长度超出了缓冲区的范围超过范围的数据不会被写入缓冲区 USBD模块将报告缓冲区发生溢出并向主机发送STALL握手包并置位分组缓冲区溢出标志PMAOVR。 如果传输正确完成USBD 模块将发送 ACK 握手包,并将实际接收数据包中的有效数据字节数写 入 COUNTx_RX 寄存器中。USBD_EPRx 寄存器的值有以下更新DTOG_RX 位翻转STAT_RX 位为10 NAK状态使端点无效CTR_RX位被置位。应用程序需要通过USBD_ISTR寄存器的EP_ID和DIR位 识别产生中断的 USB 端点。CTR_RX 事件的中断服务程序首先要根据 SETUP 位确定传输的类型,同时 清除中断标志位然后读相关的缓冲区描述表表项指向的COUNTx_RX寄存器获得此次传输的总字节 数处理接收数据。处理完后应用程序需要将USBD_EPRx中的STAT_RX位置成11ACK状态 使能下一次的传输。当STAT_RX位为10NAK状态任何一个发送到端点上的OUT请求都会 被 NAKSETUP请求除外协议规定 SETUP请求必须以 ACK握手包接收。PC主机将不断重发被 NAK 的OUT事务包直到收到端点的ACK握手包。 4控制传输 控制SETUP传输一定发生在端点 0 上,所以也称端点 0 位控制端点。控制传输由 3个阶段组 成首先是主机发送SETUP事务的SETUP阶段然后是主机发送零个或多个数据IN/OUT事务的数 据阶段,最后是状态阶段,由与数据阶段方向相反的数据事务构成。 SETUP 事务非常类似于 OUT 事务的传输过程,所以控制端点在每次发生 CTR_RX 中断时,都必须 检查USBD_EPRx寄存器的SETUP位以识别是普通的OUT事务还是SETUP事务。当主机发送SETUP事 务下来USBD模块会固定回复ACK握手包接收下来而忽略判断STAT_RX和DTOG_RX的内容。然后强 制将 DTOG_RX和DTOG_TX设置为 DATA1状态并设置 STAT_RX和 STAT_TX为10NAK保证应 V2.4 314

Page 318

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 用程序可以根据 SETUP 事务中的相应数据决定后面的传输是 IN 还是 OUT。如果拒绝后续数据传输或 出现错误应用程序可以设置STAT_RX或STAT_TX为01应答STALL握手包。如果应用程序收到 一个 SETUP 事务并处理时,此时 CTR_RX 仍然保持置位,又收到一个 SETUP 包USBD 模块会丢掉此 SETUP包并不给于任何握手包应答以此来模拟一个接收错误迫使主机再次发送SETUP包这样 做是为了避免丢失紧随一次CTR_RX中断之后的又一个SETUP事务传输。 在控制传输的状态阶段,如果执行的是由主机发送给设备的 OUT 事务,那么 STATUS_OUT 位 USBD_EPRx 寄存器中的 EP_KIND应该被置位只有这样在状态阶段传输过程中收到了非零长度 的数据分组,才会产生传输错误。在完成状态阶段传输后,应用程序应该清除 STATUS_OUT 位,并且 将STAT_RX设为ACK表示已准备好接收一个新的命令请求将STAT_TX则设为NAK不接受任何数据 上传的请求。 21.2.3 双缓冲机制 在USB协议标准里对不同的数据传输方式进行了应用描述。其中批量传输适用于USB主机和 设备间进行大批量的数据传输,主机在帧时间内利用尽可能多的带宽执行批量传输。但这种传输需要 保证数据的正确性和完整性,所以传输中包含令牌包、数据包、握手包的顺序进行。同步传输适用于 对数据要求恒定速率传送,但对错误有一定容忍性,认为传输一般都可以成功,主机在每个帧时间内 有固定的带宽来执行同步传输以此保证传输速率,所以传输中包含令牌包、数据包的顺序进行,没有 握手包来确认传输状态和终止传输。 21.2.3.1 单向双缓冲批量端点 批量传输,在单缓冲方式下,当应用程序处理批量端点的前一次的数据传输时,又收到新的数据 包USBD模块将回应NAK握手包使PC主机不断重发同样的数据包直到应用程序重新设置ACK握 手包。这样的重传占用了很多带宽,影响了批量传输的速率。因此对批量端点引入双缓冲机制来提高 数据传输率。在双缓冲方式下单向批量端点有2个数据缓冲区即该端点的接收和发送两块数据缓 冲区。数据翻转位DTOG_RX 或 DTOG_TX用来选择当前使用到两块缓冲区中的哪一块使应用程序 可以在 USBD 模块访问其中一块缓冲区的同时,对另一块缓冲区进行操作。例如,对一个双缓冲批量 端点进行OUT事务传输时USBD模块将来自PC主机的数据保存到一个缓冲区同时应用程序可以对 另一个缓冲区中的数据进行处理对于IN事务来说情况是一样的。这样利用USBD模块的接收或 发送数据的时间完成应用程序的数据处理提高了USB收发效率。因为对于一个传输方向需要2个缓 冲区所以配置双向缓冲区的批量端点必须配置为单向端点其USBD_EPRx寄存器只需设定STAT_RX 位作为双缓冲批量接收端点或STAT_TX位作为双缓冲批量发送端点。为尽可能利用双缓冲的 优势达到较高的传输速率USBD模块处理双缓冲批量端点的流控与其他端点的稍有不同。它只在缓 冲区发生访问冲突时才会设置端点为NAK状态而不是在每次传输成功后都将端点设为NAK状态。 USBD_EPRx 寄存器中的 DTOG_xx 位用来标识 USBD 模块和应用程序当前分别使用的存储缓存区, 以避免发生访问冲突。当配置为单向发送双缓冲区端点时DTOG_TX标识USBD模块当前使用缓冲区 而DTOG_RX标识应用程序当前使用缓冲区当配置为单向接收双缓冲区端点时DTOG_RX标识USBD模 块当前使用缓冲区,而 DTOG_TX 标识应用程序当前使用缓冲区。我们命名 USBD 模块使用缓冲区标识 为DTOG应用程序使用缓冲区标识为SW_BUF。所以双缓冲单向批量端点标识定义如下 表21-1 缓冲区标识 缓冲区标识位 发送端点 接收端点 DTOG DTOG_TXUSBD_EPRx寄存器bit6 DTOG_RXUSBD_EPRx寄存器bit14 SW_BUF DTOG_RXUSBD_EPRx寄存器bit14 DTOG_TXUSBD_EPRx寄存器bit6 表21-2 双缓冲批量端点缓冲区 端点类型 DTOG SW_BUF USBD模块使用缓冲区 应用程序使用缓冲区 IN端点 0 1 ADDRx_TX_0/COUNTx_TX_0 ADDRx_TX_1/COUNTx_TX_1 V2.4 315

Page 319

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1 0 ADDRx_TX_1/COUNTx_TX_1 ADDRx_TX_0/COUNTx_TX_0 0 0 设置端点处于NAK状态 ADDRx_TX_0/COUNTx_TX_0 1 1 设置端点处于NAK状态 ADDRx_TX_1/COUNTx_TX_1 0 1 ADDRx_RX_0/COUNTx_RX_0 ADDRx_RX_1/COUNTx_RX_1 1 0 ADDRx_RX_1/COUNTx_RX_1 ADDRx_RX_0/COUNTx_RX_0 OUT端点 0 0 设置端点处于NAK状态 ADDRx_RX_0/COUNTx_RX_0 1 1 设置端点处于NAK状态 ADDRx_RX_1/COUNTx_RX_1 应用程序配置一个双缓冲批量端点需要设置USBD_EPRx寄存器的EPTYPE[1:0]为00EP_KIND 位为1。根据传输开始时用到的缓冲区来初始化DTOG和SW_BUF位。每成功完成一次传输后USBD 模块将根据双缓冲批量端点的流量控制操作并且持续到EP_KIND变为无效为止。每次传输结束根 据端点的传输方向CTR_RX位或CTR_TX位将会置位。与此同时硬件将设置相应的DTOG_xx位翻 转并实现缓冲区交换如果没有发生USBD模块和应用程序的缓冲区访问冲突即DTOG和SW_BUF 为相同的值见表154则保持STAT_xx位的状态值否则将会被置为10NAK状态。所以应 用程序访问缓冲区之后需要及时翻转SW_BUF位以通知USB模块该块缓冲区已变为可用状态。 21.2.3.2 同步端点 同步传输一般用于传输音频流、压缩的视频流等对数据传输率有严格要求的数据。执行同步传输 的端点即为同步端点。USB 主机会在每个帧时间内分配固定的带宽给同步端点进行 IN 事务或 OUT 事 务传输并且没有重传机制无握手协议同时传输的数据包PID固定为DATA0不会出现DATA0和 DATA1数据翻转机制控制/批量/中断传输中出现)。 因为同步传输中没有握手机制USBD_EPRx寄存器的STAT_RX位和STAT_TX位分别只能设成00 禁止传输11运行传输两种状态。同步传输使用双缓冲机制来简化软件流程它同样使 用两个缓冲区以确保在USB模块使用其中一块缓冲区时应用程序可以访问另外一块缓冲区。不同 于单向批量端点的双缓冲机制同步端点由于在USB标准中传输有固定的时间间隔及容错能力所 以 USBD 模块不判断与应用程序缓冲区冲突情况,只使用 DTOG 位来标识自身当前使用的缓冲区 USBD_EPRx寄存器中的DTOG_RX位用来标识接收同步端点DTOG_TX位用来标识发送同步端点。 表21-3 同步端点缓冲区标识 端点类型 DTOG USBD模块使用缓冲区 应用程序使用缓冲区 0 ADDRx_TX_0/COUNTx_TX_0 ADDRx_TX_1/COUNTx_TX_1 IN端点 1 ADDRx_TX_1/COUNTx_TX_1 ADDRx_TX_0/COUNTx_TX_0 0 ADDRx_RX_0/COUNTx_RX_0 ADDRx_RX_1/COUNTx_RX_1 OUT端点 1 ADDRx_RX_1/COUNTx_RX_1 ADDRx_RX_0/COUNTx_RX_0 应用程序配置一个同步端点需要设置USBD_EPRx寄存器的EPTYPE[1:0]为10。根据传输开 始时用到的缓冲区来初始化 DTOG 位。每成功完成一次传输后根据端点的传输方向CTR_RX 位或 CTR_TX位将会置位。与此同时硬件将设置相应的DTOG_xx位翻转实现缓冲区交换但不会改变 期望或发送的数据包PID固定为DATA0。STAT_RX或STAT_TX位不会发生变化。同步传输中即使 OUT 事务发生 CRC 错误或者缓冲区溢出,本次传输仍被看作是正确的,并且可以触发 CTR_RX 中断事 件但是发生CRC错误时硬件会设置USB_ISTR寄存器的ERR位提醒应用程序数据可能损坏。 21.2.4 挂起/唤醒流程 USB标准中定义了一种总线状态——总线挂起如果USB总线在3ms内没有任何活动就进入挂起 状态。在这种状态下USB总线上提供电流会降低低速设备一般不超过500uA高速或支持远程唤醒 功能设备一般不超过2.5mA。这种电流限制对于由总线供电的USB设备至关重要而自供电的设备 V2.4 316

Page 320

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 则不需要严格遵守这样的电流消耗限制。 正常工作状态下USB 主机会以 1ms 间隔时间发送 SOF 包,所以如果 USBD 模块检测到 3 个连续 的 SOF 包丢失事件即可判断主机发出了挂起请求,此时,它会置位 USBD_ISTR 寄存器的 SUSP位如 果使能了中断还会触发挂起中断。USBD模块会不断检测总线的挂起状态并更新SUSP位一直处于 总线挂起状态下清除 SUSP 位标志仍然会由硬件再次置位)。所以当应用程序收到 USB 总线挂起事件 后,需要执行以下流程: 将USBD_CNTR寄存器的FSUSP位置1屏蔽硬件的挂起状态检测防止不断触发挂起事件。 消除或减少USBD模块以外其他模块的静态电流消耗。 将USBD_CNTR寄存器的LPMODE位置1让USBD模块处于低功耗运行状态但仍可检测总线唤醒 信号。 可选择关闭外部振荡器和PLL以停止设备的任何活动。 处于挂起状态的USB设备或主机将由“唤醒”序列唤醒。所谓的“唤醒”序列可以由USB主机 发起唤醒挂起的USB设备也可以由USB设备触发唤醒挂起的USB主机但最终由USB主机结束“唤 醒”序列。此外作为挂起的USB设备还需能够检测RST信号总线复位的功能并将其当作一 次正常的复位操作来执行。 挂起的USBD模块收到唤醒信号后会触发一个WKUP中断事件通道42并将USBD_ISTR寄存器 的WKUP位置1自动清除LPMODE位。当应用程序收到USB唤醒事件后需要执行以下流程 清除USBD_CNTR寄存器的FSUSP位重新开启USB总线的挂起状态检测功能 可选择启动外部振荡器和PLL。 查询USBD_FNR寄存器的RXDP和RXDM位判断是什么触发了唤醒事件并执行相应软件操作。 USBD 模块可以发出唤醒序列唤醒被挂起的 USB 主机。在这种情况下,先将 USBD_CNTR 寄存器的 RESUME位置1然后在1ms-15ms之间再把它清为0可以启动唤醒序列。RESUME位被清零后唤醒过 程将由主机PC完成USB主机唤醒后会继续执行此序列以唤醒其他挂载的USB设备。应用程序可以 查询USBD_FNR寄存器的RXDP和RXDM位来判断唤醒是否完成。 注只有在USBD模块被设置为挂起状态时设置USB_CNTR寄存器的FSUSP位为1才可以设 置RESUME位。 表21-4 USB总线状态 RXDP RXDM 条件 USB总线状态 0 0 >10ms 总线复位

1ms全速设备 唤醒序列开始 0 1 3ms低速设备 挂起状态 3ms全速设备 挂起状态 1 0 1ms低速设备 唤醒序列开始 1 1 - 总线错误(或干扰) 21.3 寄存器描述 USBD模块有以下3类寄存器  通用类寄存器USBD模块控制、中断相关基地址0x40005C40。  端点类寄存器端点配置、收发状态相关基地址0x40005C00。  缓冲区描述类寄存器数据收发缓冲区相关基地址0x40006000。 表21-5 USBD通用类寄存器列表 名称 访问地址 描述 复位值 R16_USBD_CNTR 0x40005C40 USB控制寄存器 0x0003 V2.4 317

Page 321

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R16_USBD_ISTR 0x40005C44 USB中断状态寄存器 0x0000 R16_USBD_FNR 0x40005C48 USB帧编号寄存器 0x0XXX R16_USBD_DADDR 0x40005C4C USB设备地址寄存器 0x0000 R16_USBD_BTABLE 0x40005C50 USB分组缓冲区描述表地址寄存器 0x0000 表21-6 USBD端点类寄存器列表 名称 访问地址 描述 复位值 R16_USBD_EPR0 0x40005C00 USB端点配置寄存器0 0x0000 R16_USBD_EPR1 0x40005C04 USB端点配置寄存器1 0x0000 R16_USBD_EPR2 0x40005C08 USB端点配置寄存器2 0x0000 R16_USBD_EPR3 0x40005C0C USB端点配置寄存器3 0x0000 R16_USBD_EPR4 0x40005C10 USB端点配置寄存器4 0x0000 R16_USBD_EPR5 0x40005C14 USB端点配置寄存器5 0x0000 R16_USBD_EPR6 0x40005C18 USB端点配置寄存器6 0x0000 R16_USBD_EPR7 0x40005C1C USB端点配置寄存器7 0x0000 表21-7 USBD缓冲区描述类寄存器列表 名称 访问地址 描述 复位值 R16_USBD_ADDR0_TX 0x40006000+[USBD_BTABLE] 端点发送缓存区地址寄存器0 0x0000 R16_USBD_COUNT0_TX 0x40006004+[USBD_BTABLE] 端点发送数据字节数寄存器0 0x0000 R16_USBD_ADDR0_RX 0x40006008+[USBD_BTABLE] 端点接收缓存区地址寄存器0 0x0000 R16_USBD_COUNT0_RX 0x4000600C+[USBD_BTABLE] 端点接收数据字节数寄存器0 0x0000 R16_USBD_ADDR1_TX 0x40006010+[USBD_BTABLE] 端点发送缓存区地址寄存器1 0x0000 R16_USBD_COUNT1_TX 0x40006014+[USBD_BTABLE] 端点发送数据字节数寄存器1 0x0000 R16_USBD_ADDR1_RX 0x40006018+[USBD_BTABLE] 端点接收缓存区地址寄存器1 0x0000 R16_USBD_COUNT1_RX 0x4000601C+[USBD_BTABLE] 端点接收数据字节数寄存器1 0x0000 R16_USBD_ADDR2_TX 0x40006020+[USBD_BTABLE] 端点发送缓存区地址寄存器2 0x0000 R16_USBD_COUNT2_TX 0x40006024+[USBD_BTABLE] 端点发送数据字节数寄存器2 0x0000 R16_USBD_ADDR2_RX 0x40006028+[USBD_BTABLE] 端点接收缓存区地址寄存器2 0x0000 R16_USBD_COUNT2_RX 0x4000602C+[USBD_BTABLE] 端点接收数据字节数寄存器2 0x0000 R16_USBD_ADDR3_TX 0x40006030+[USBD_BTABLE] 端点发送缓存区地址寄存器3 0x0000 R16_USBD_COUNT3_TX 0x40006034+[USBD_BTABLE] 端点发送数据字节数寄存器3 0x0000 R16_USBD_ADDR3_RX 0x40006038+[USBD_BTABLE] 端点接收缓存区地址寄存器3 0x0000 R16_USBD_COUNT3_RX 0x4000603C+[USBD_BTABLE] 端点接收数据字节数寄存器3 0x0000 R16_USBD_ADDR4_TX 0x40006040+[USBD_BTABLE] 端点发送缓存区地址寄存器4 0x0000 R16_USBD_COUNT4_TX 0x40006044+[USBD_BTABLE] 端点发送数据字节数寄存器4 0x0000 R16_USBD_ADDR4_RX 0x40006048+[USBD_BTABLE] 端点接收缓存区地址寄存器4 0x0000 R16_USBD_COUNT4_RX 0x4000604C+[USBD_BTABLE] 端点接收数据字节数寄存器4 0x0000 R16_USBD_ADDR5_TX 0x40006050+[USBD_BTABLE] 端点发送缓存区地址寄存器5 0x0000 R16_USBD_COUNT5_TX 0x40006054+[USBD_BTABLE] 端点发送数据字节数寄存器5 0x0000 R16_USBD_ADDR5_RX 0x40006058+[USBD_BTABLE] 端点接收缓存区地址寄存器5 0x0000 R16_USBD_COUNT5_RX 0x4000605C+[USBD_BTABLE] 端点接收数据字节数寄存器5 0x0000 R16_USBD_ADDR6_TX 0x40006060+[USBD_BTABLE] 端点发送缓存区地址寄存器6 0x0000 R16_USBD_COUNT6_TX 0x40006064+[USBD_BTABLE] 端点发送数据字节数寄存器6 0x0000 V2.4 318

Page 322

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R16_USBD_ADDR6_RX 0x40006068+[USBD_BTABLE] 端点接收缓存区地址寄存器6 0x0000 R16_USBD_COUNT6_RX 0x4000606C+[USBD_BTABLE] 端点接收数据字节数寄存器6 0x0000 R16_USBD_ADDR7_TX 0x40006070+[USBD_BTABLE] 端点发送缓存区地址寄存器7 0x0000 R16_USBD_COUNT7_TX 0x40006074+[USBD_BTABLE] 端点发送数据字节数寄存器7 0x0000 R16_USBD_ADDR7_RX 0x40006078+[USBD_BTABLE] 端点接收缓存区地址寄存器7 0x0000 R16_USBD_COUNT7_RX 0x4000607C+[USBD_BTABLE] 端点接收数据字节数寄存器7 0x0000 注以上缓冲区描述类寄存器和端点配置寄存器使用相对应。例如USB端点配置寄存器0对应端点 发送缓存区地址寄存器0、端点发送数据字节数寄存器0、端点接收缓存区地址寄存器0、端点接收数 据字节数寄存器0。 21.3.1 USB 控制寄存器USBD_CNTR 偏移地址0x40 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PMA MODE_ LP CTRM ERRM WKUPM SUSPM RSTM SOFM ESOFM Reserved RESUME FSUSP PDWN FRES OVRM 1WIRE MODE 位 名称 访问 描述 复位值 正确传输中断使能位: 0禁止正确传输CTR中断 15 CTRM RW 0 1使能正确传输CTR中断在中断寄存器的相应位 被置1时产生中断。 分组缓冲区溢出中断使能位: 0禁止PMAOVR中断 14 PMAOVRM RW 0 1使能PMAOVR中断在中断寄存器的相应位被置1时 产生中断。 出错中断使能位: 0禁止出错中断 13 ERRM RW 0 1使能出错中断在中断寄存器的相应位被置1时产 生中断。 唤醒中断使能位: 0禁止唤醒中断 12 WKUPM RW 0 1使能唤醒中断在中断寄存器的相应位被置1时产 生中断。 挂起中断使能位: 0禁止挂起SUSP中断 11 SUSPM RW 0 1使能挂起SUSP中断在中断寄存器的相应位被 置1时产生中断。 USB复位总线复位或强制复位中断使能位 0禁止USB复位中断 10 RSTM RW 0 1使能 USB复位中断在中断寄存器的相应位被置 1 时产生中断。 帧首SOF中断使能位 0禁止SOF中断 9 SOFM RW 0 1使能SOF中断在中断寄存器的相应位被置1时产 生中断。 V2.4 319

Page 323

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 定时帧首丢失中断使能位: 0禁止ESOF中断 8 ESOFM RW 0 1使能 ESOF 中断,在中断寄存器的相应位被置 1 时 产生中断。 USB单线模式使能 0禁止USB单线模式 [7] MODE_1WIRE RW 1使能USB单线模式。 0 注仅适用于CH32F20x_D8批号倒数第六位不为0的 产品。 [6:5] Reserved RO 保留。 0 唤醒请求控制位: 0空闲状态 1输出唤醒信号。 4 RESUME RW 0 根据USB协议如果此位在1ms到15ms内保持有效 主机将对USBD模块实行唤醒操作。 注只有在FSUSP位为1时才可以设置此位。 屏蔽挂起检测控制位: 0打开总线挂起状态检测 1屏蔽总线挂起状态检测。此时USB模拟收发器的时 钟和静态功耗仍然保持。如果需要进入低功耗状态(总 3 FSUSP RW 0 线供电类的设备需要先置位FSUSP再置位LPMODE。 注当USB总线上保持3ms没有数据通信包括SOFSUSP中断会被触发此时软件必需设置此位否 则会一直触发SUSP中断。 低功耗模式控制位: 此模式用于在USB挂起状态下降低功耗。在此模式下 除了外接上拉电阻的供电,其他的静态功耗都被关闭, 系统时钟将会停止或者降低到一定的频率来减少耗 2 LPMODE RW 0 电。USB总线上的活动唤醒事件将会清除此位软 件也可以清0。 0非低功耗模式 1低功耗模式。 断电模式Power down 此模式用于彻底关闭 USB 模块。当此位被置位时,不 1 PDWN RW 能使用USB模块。 1 0退出断电模式 1进入断电模式 强制USB复位控制位 0清除USB复位 0 FRES RW 1对 USBD 模块强制复位。USBD模块将一直保持在复 1 位状态下直到软件清除此位。如果 USB 复位中断被使 能,将产生复位中断。 21.3.2 USB 中断状态寄存器USBD_ISTR 偏移地址0x44 V2.4 320

Page 324

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CTR PMAOVR ERR WKUP SUSP RST SOF ESOF Reserved DIR EP_ID[3:0] 位 名称 访问 描述 复位值 正确的传输状态指示。此位在端点正确完成一次数据 15 CTR RO 传输后由硬件置位。应用程序可以通过 DIR 和 EP_ID 0 位来识别是哪个端点完成了正确的数据传输。 分组缓冲区溢出标志。 此位在微控制器长时间没有响应一个访问 USB 分组缓 冲区请求时由硬件置位。USBD 模块通常在以下情况时 置位该位:在接收过程中一个 ACK 握手分组没有被发 送,或在发送过程中发生了比特填充错误,在以上两种 情况下主机都会要求数据重传。在正常的数据传输中 14 PMAOVR RW0 0 不会产生PMAOVR中断。由于失败的传输都将由主机发 起重传,应用程序就可以在这个中断的服务程序中加 速设备的其他操作,并准备重传。但这个中断不会在同 步传输中产生(同步传输不支持重传)因此数据可能会 丢失。 此位可读写0清除写1无效。 出错标志,下列错误发生时硬件会置位此位: NANS无应答。主机的应答超时。 CRC校验错误。USB的包中的CRC校验出错。 BST位填充错误。USB数据位中检测出位填充错误。 FVIO帧格式错误。收到非标准帧如EOP出现在错误 的时刻,错误的令牌等)。 13 ERR RW0 0 USB 应用程序通常可以忽略这些错误,因为 USBD 模块 和主机在发生错误时都会启动重传机制。此位产生的 中断可以用于应用程序的开发阶段可以用来监测USB 总线的传输质量,标识用户可能发生的错误(连接线 松环境干扰严重USB线损坏等。 此位可读写0清除写1无效。 唤醒信号标志: 当USBD模块处于挂起状态时如果检测到唤醒信号 此位将由硬件置 1。此时 CTLR寄存器的 LP_MODE位将 12 WKUP RW0 被清 0FSUSP 位需要软件清 0 开启挂起检测。同时 0 USB_WAKEUP 被激活,通知设备的其他部分(如唤醒单 元)将开始唤醒过程。 此位可读写0清除写1无效。 总线挂起标志: 此位在USB线上超过3ms没有信号传输时由硬件置位。 USB复位总线复位或强制复位撤销后硬件立即使 11 SUSP RW0 0 能对挂起信号的检测但在挂起模式下FSUSP1硬 件不会再检测挂起信号直到唤醒过程结束。 此位可读写0清除写1无效。 10 RST RW0 USB复位总线复位或者强制复位标志 0 V2.4 321

Page 325

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 此位在USBD模块检测到USB总线复位信号边沿或强制 复位状态时由硬件置位。此时USBD模块将复位内部协 议状态机,并在中断使能的情况下触发复位中断来响 应。USBD 模块的发送和接收部分将被禁止,直到此位 被清除。所有的配置寄存器不会被复位,除非应用程序 对他们清零。这用来保证在复位撤销后 USB 传输还可 以立即正确执行。但设备的地址和端点寄存器会被USB 复位所复位。 此位可读写0清除写1无效。 帧首SOF标志 此位在 USBD 模块检测到总线上的 SOF 包时由硬件置 位。中断服务程序可以通过检测 SOF 事件来完成与主 9 SOF RW0 0 机的 1ms 同步,并正确读出寄存器在收到 SOF 时的更 新内容(此功能在同步传输时非常有意义)。 此位可读写0清除写1无效。 定时帧首ESOF丢失标志 此位在USBD模块未按时收到SOF包时由硬件置位。主 机应该每毫秒都发送SOF包但如果USBD模块没有收 8 ESOF RW0 到挂起定时器将触发此中断。如果连续发生3次ESOF 0 中断也就是连续3次未收到SOF包将产生SUSP中 断。 此位可读写0清除写1无效。 [7:5] Reserved RO 保留。 0 事务数据传输方向。此位在完成数据传输产生中断后 由硬件根据传输方向写入。 如果DIR0相应端点的CTR_TX位被置位标志一个 IN事务数据从 USBD模块传输到 PC主机的传输完 成。 4 DIR RO 如果DIR1相应端点的CTR_RX位被置位标志一个 0 OUT事务数据从PC主机传输到USBD模块的传输完 成。如果CTR_TX位同时也被置位就标志同时存在挂 起的OUT事务和IN事务。 应用程序可以利用该信息访问 USBD_EPnR 位对应的操 作,它表示挂起中断传输方向的信息。 端点号。 此位在USBD模块完成数据传输产生中断后由硬件根据 请求中断的端点号写入。如果同时有多个端点的请求 中断,硬件写入优先级最高的端点号。端点的优先级按 以下方法定义:同步端点和双缓冲批量端点具有高优 [3:0] EP_ID[3:0] RO 0 先级,其他的端点为低优先级。如果多个同优先级的端 点请求中断则根据端点号来确定优先级即端点0具 有最高优先级,端点号越小,优先级越高。 应用程序可以通过上述的优先级策略顺序处理端点的 中断请求。 21.3.3 USB 帧编号寄存器USBD_FNR V2.4 322

Page 326

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 偏移地址0x48 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RXDP RXDM LCK LSOF[1:0] FN[10:0] 位 名称 访问 描述 复位值 15 RXDP RO D+数据线电平状态。 0 14 RXDM RO D-数据线电平状态。 0 SOF包计数停止锁定位。 USBD 模块在复位或唤醒序列结束后会检测 SOF 包,如 13 LCK RO 果连续检测到至少 2 个 SOF 包,则硬件会置位此位。 0 此位一旦锁定,帧计数器将停止计数,一直等到 USBD 模块复位或总线挂起时再恢复计数。 帧首丢失标志位。 [12:11] LSOF[1:0] RO 当ESOF事件发生时硬件会将丢失的SOF包的数目写 X 入此域。如果再次收到SOF包此域被清除。 帧编号。 此域为最新收到的SOF包中的11位帧编号。主机每发 [10:0] FN[10:0] RO X 送一个帧,帧编号都会自加,这对于同步传输非常有意 义。此域在发生SOF中断时更新。 21.3.4 USB 设备地址寄存器USBD_DADDR 偏移地址0x4C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved EF ADD[6:0] 位 名称 访问 描述 复位值 [15:8] Reserved RO 保留。 0 USB功能使能位。此位在需要使能USB设备功能时由应 用程序置位。如果此位为0USBD模块将停止工作忽 7 EF RW 略所有寄存器的设置不响应任何USB通信。 0 0停止USB设备功能 1使能USB设备功能。 USB设备地址。 此域是 USB 主机在枚举过程中为 USB 设备分配的地址 [6:0] ADD[6:0] RW 0 值。该地址值和EA位必需和USB令牌包中的地址信息 匹配才能在指定的端点进行正确的USB传输。 21.3.5 USB 分组缓冲区描述表地址寄存器USBD_BTABLE 偏移地址0x50 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 BTABLE[15:3] Reserved 位 名称 访问 描述 复位值 V2.4 323

Page 327

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 缓冲表。 此域是分组缓冲区描述表的基地址。分组缓冲区描述 表用来指示每个端点的分组缓冲区地址和大小按8字 [15:3] BTABLE[15:3] RW 0 节对齐即最低3位为000。每次传输开始时USBD 模块读取相应端点所对应的分组缓冲区描述表获得缓 冲区地址和大小信息。 [2:0] Reserved RO 保留。 0 21.3.6 USB 端点配置寄存器 xUSBD_EPRxx=0/1/2/3/4/5/6/7 偏移地址0x00-0x1C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CTR DTOG STAT_RX EPT_YPE EP CTR DTOG STAT_TX SETUP EA[3:0] _RX _RX [1:0] [1:0] _KIND _TX _TX [1:0] 位 名称 访问 描述 复位值 正确接收标志位OUT/SETUP。 此位在正确接收到OUT或SETUP事务发送ACK应答 时由硬件置位。如果CTRM位已置位相应的中断会产 生,应用程序需要在处理完该事件后清除此位。收到的 15 CTR_RX RW0 是 OUT 事务还是 SETUP 事务可以通过下面的 SETUP 位 0 确定。 此位可读写0清除写1无效。 注以NAK或STALL应答的事务或出错的传输此位不 会置位。 期望下次接收的数据包PIDOUT/SETUP硬件设置 0期望DATA0 1期望DATA1。 对于非同步端点,在接收正确的 PID 数据包后USBD 模块发送ACK握手包硬件自动翻转此位。 对于控制端点,硬件在收到正确的 SETUP 包后置位 DATA1。 14 DTOG_RX RW1T 对于有双缓冲属性的端点,硬件除了自动翻转此位表 0 示期望数据包 PID 外,还根据此位标识来支持双缓冲 区的交换(请参考双缓冲机制中描述)。 对于同步端点硬件不判断数据包PID仅通过此位标 识支持双缓冲区的交换。 此位可读写0无效写1翻转。 注:应用程序可以对此位进行初值设定,或者翻转此位 用于特殊用途。 表示数据接收的状态位OUT/SETUP事务中 00DISABLED端点忽略所有的接收请求不应答 01STALL端点以STALL包响应接收请求 [13:12] STAT_RX[1:0] RW1T 00b 10NAK端点以NAK包响应接收请求 11ACK端点以ACK包响应接收请求。 当一次正确的 OUT 或 SETUP 数据传输完成后 V2.4 324

Page 328

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn CTR_RX=1硬件会自动设置此位为NAK状态使应 用程序有足够的时间处理并响应下一个事务。 对于双缓冲批量端点,由于使用特殊的传输流量控制 策略,会根据使用的缓冲区状态控制传输状态(请参考 双缓冲端点)。 对于同步端点,由于端点状态只能是有效或禁用,因此 硬件不会在正确的传输之后设置此位。 如果将此域设为 STALL 或 NAKUSBD 模块响应的操作 是未定义的。 此域可读位写0无效写1翻转。 注:应用程序可以对域位进行初值设定。 SETUP事务传输完成标志位 0非SETUP事务 11 SETUP RO 0 1是SETUP事务并正确接收发送ACK应答。 注意硬件会在CTR_RX=0条件时才可能修改此位。 传输端点类型: 00BULK批量端点 01CONTROL控制端点 10ISO同步端点 11INTERRUPT中断端点。 只有控制端点才会有 SETUP 传输,其他类型的端点无 视此类传输。SETUP传输不能以NAK或STALL包响应 [10:9] EP_TYPE[1:0] RW 00b 如果控制端点在收到 SETUP 包时处于 NAK 状态USBD 模块将不响应请求,就会出现接收错误。如果控制端点 处于STALL状态SETUP包会被正确接收数据会被正 确传输,并产生一个正确传输完成的中断。控制端点的 OUT包按普通端点的方式处理。 批量端点和中断端点的处理方式非常类似,仅在对 EP_KIND位的处理上有差别。 端点特殊类型控制位配合EP_TYPE使用 EPTYPE[1:0] EP_KIND BULK DBL_BUF开启双缓冲。 STATUS_OUT控制传输状态阶段数 CONTROL 据包长度判断。 ISO 未使用。 INTERRUTP 未使用。 8 EP_KIND RW 0 DBL_BUF设置此位使能批量端点的双缓冲功能。 STATUS_OUT设置此位表示 USB 设备期望主机发送控 制传输中的状态阶段事务,此时,设备对于任何长度不 为 0 的数据包都响应 STALL 握手包。(此功能仅用于 控制端点,有利于提供对于协议层错误的检测。)如果 STATUS_OUT 位被清除,处于状态阶段的 OUT事务可以 包含任意长度的数据。 正确发送标志位IN 7 CTR_TX RW0 0 此位在正确的IN事务收到ACK应答完成时由硬件 V2.4 325

Page 329

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 置位。如果CTRM位已被置位会产生相应的中断应 用程序需要在处理完该事件后清除此位。在IN分组结 束时如果主机响应NAK或STALL则此位不会被置位 因为数据传输没有成功。 此位可读写0清除写1无效。 注如果主机以NAK或STALL响应则此位不会置位。 要发送的数据包PIDIN硬件设置 0发送DATA0 1发送DATA1。 对于非同步端点,在发送正确的 PID 数据包后,如果 USBD模块收到主机的ACK握手包硬件自动翻转此位。 对于控制端点,硬件在收到正确的 SETUP 包后置位 DATA1。 6 DTOG_TX RW1T 对于有双缓冲属性的端点,硬件除了自动翻转此位表 0 示发送数据包 PID 外,还根据此位标识来支持双缓冲 区的交换(请参考双缓冲机制中描述)。 对于同步端点硬件强制发送数据包DATA0并且通过 此位标识支持双缓冲区的交换。 此位可读写0无效写1翻转。 注:应用程序可以对此位进行初值设定,或翻转此位用 于特殊用途。 表示发送数据的状态位IN事务中 00DISABLED端点忽略所有的发送请求不应答 01STALL端点以STALL包响应主机IN请求 10NAK端点以NAK包响应主机IN请求 11ACK端点可以发送数据。 当正确完成一次IN事务数据传输完成后CTR_TX=1 硬件会自动设置此位为 NAK 状态,以保证应用程序有 足够的时间处理并响应下一个事务传输。 [5:4] STAT_TX[1:0] RW1T 对于双缓冲批量端点,由于使用特殊的传输流量控制 00b 策略,会根据使用的缓冲区状态控制传输状态(请参考 双缓冲端点)。 对于同步端点,由于端点状态只能是有效或禁用,因此 硬件不会在正确的传输之后设置此位。 如果将此域设为 STALL 或者 NAKUSBD 模块响应的操 作是未定义的。 此域可读位写0无效写1翻转。 注:应用程序可以对域位进行初值设定。 端点地址域(设置端点号): [3:0] EA[3:0] RW 0 应用程序要为此端点配置寄存器设置一个端点地址。 21.3.7 端点发送缓存区地址寄存器 xUSBD_ADDRx_TXx=0/1/2/3/4/5/6/7 偏移地址:[USBD_BTABLE] + x*16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADDRx_TX[15:1] - V2.4 326

Page 330

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 [15:1] ADDRx_TX[15:1] RW 待发送数据缓冲区起始地址IN事务中。 0 0 - RZ 缓冲区的地址必须按2字节对齐所以此位必须为0。 0 21.3.8 端点发送数据字节数寄存器 xUSBD_COUNTx_TXx=0/1/2/3/4/5/6/7 偏移地址:[USBD_BTABLE] + x16 + 4 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved COUNTx_TX[9:0] 位 名称 访问 描述 复位值 [15:10] Reserved RO 保留。 0 [9:0] COUNTx_TX[9:0] RW 待发送数据长度字节数IN事务中。 0 注双缓冲区和同步IN端点有2个USBD_ADDRx_TX寄存器和2个USB_COUNTx_TX寄存器分别为 USBD_ADDRx_TX_1和USBD_ADDRx_TX_0USB_COUNTx_TX_1和USB_COUNTx_TX_0内容如下 USBD_ADDRx_TX映射为USBD_ADDRx_TX_0 USBD_ADDRx_RX映射为USBD_ADDRx_TX_1 USBD_COUNTx_TX映射为USB_COUNTx_TX_0 USBD_COUNTx_RX映射为USB_COUNTx_TX_1 21.3.9 端点接收缓存区地址寄存器 xUSBD_ADDRx_RXx=0/1/2/3/4/5/6/7 偏移地址:[USBD_BTABLE] + x16 + 8 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ADDRx_RX[15:1] - 位 名称 访问 描述 复位值 [15:1] ADDRx_RX[15:1] RW 待接收数据缓冲区起始地址OUT或SETUP事务中。 0 0 - RZ 缓冲区的地址必须按2字节对齐所以此位必须为0。 0 21.3.10 端点接收数据字节数寄存器 xUSBD_COUNTx_RXx=0/1/2/3/4/5/6/7 偏移地址:[USBD_BTABLE] + x*16 + 12 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 BLSIZE NUM_BLOCK[4:0] COUNTx_RX[9:0] 位 名称 访问 描述 复位值 存储区块大小: 0块大小2字节配合NUM_BLOCK使用可分配接收 15 BL_SIZE RW 缓冲区范围2-62字节 0 1块大小 32 字节,配合 NUM_BLOCK 使用,可分配接 收缓冲区范围32-512字节。 [14:10] NUM_BLOCK[4:0] RW 存储区块数目。 0 [9:0] COUNTx_RX[9:0] RO 端点实际接收数据长度字节数OUT或SETUP事务中。 X 注双缓冲区和同步IN端点有2个USBD_ADDRx_RX寄存器和2个USB_COUNTx_RX寄存器分别为 USBD_ADDRx_RX_1和USBD_ADDRx_RX_0USB_COUNTx_RX_1和USB_COUNTx_RX_0内容如下 V2.4 327

Page 331

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn USBD_ADDRx_TX映射为USBD_ADDRx_RX_0 USBD_ADDRx_RX映射为USBD_ADDRx_RX_1 USBD_COUNTx_TX映射为USB_COUNTx_RX_0 USBD_COUNTx_RX映射为USB_COUNTx_RX_1 USBD_COUNTx_RX寄存器的高6位定义了接收分组缓冲区的大小以便USBD模块可以检测缓冲区 的溢出边界。缓冲区的大小可以依据设备枚举过程中的端点描述符中参数maxPacketSize表述。 表20-8 缓冲区大小定义 接收缓冲区限制大小 NUM_BLOCK[4:0] BLSIZE = 0 BLSIZE = 1 00000 不允许使用 32字节 00001 2字节 64字节 00010 4字节 96字节 00011 6字节 128字节 … … … 01111 30字节 512字节 10000 32字节 保留 … … … 11110 60字节 保留 11111 62字节 保留 V2.4 328

Page 332

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 22 章 USB 高速主机/设备控制器USBHS 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器系列部分产品。 22.1 USB 控制器简介 内嵌USB2.0控制器和USB-PHY具有主机控制器和USB设备控制器双重角色。当作为主机控制 器时它可支持低速、全速和高速的USB设备/HUB。当作为设备控制器时可以灵活设置为低速、 全速或高速模式以适应各种应用。 USB控制器特性如下  支持USB Host主机功能和USB Device设备功能。  主机模式下支持下行端口连接高速/全速HUB。  设备模式下支持USB2.0高速480Mbps、全速12Mbps或低速1.5Mbps。  支持USB控制传输、批量传输、中断传输和同步/实时传输。  支持DMA直接访问各端点缓冲区的数据。  支持挂起,唤醒/远程唤醒。  端点0支持最大64字节的数据包除设备端点0外其他端点均支持最大1024字节的数据 包,且均支持双缓冲。 22.2 寄存器描述 USB相关寄存器分为3个部分部分寄存器是在主机和设备模式下进行复用的。  USB全局寄存器  USB设备控制寄存器  USB主机控制寄存器 22.2.1 全局寄存器描述 表22-1 USBHS相关寄存器列表 名称 访问地址 描述 复位值 R8_USB_CTRL 0x40023400 USB控制寄存器 0x06 R8_USB_INT_EN 0x40023402 USB中断使能寄存器 0x00 R8_USB_DEV_AD 0x40023403 USB设备地址寄存器 0x00 R16_USB_FRAME_NO 0x40023404 USB帧号寄存器 0x0000 R8_USB_SUSPEND 0x40023406 USB挂起控制寄存器 0x00 R8_USB_SPPED_TYPE 0x40023408 USB当前速度类型寄存器 0x00 R8_USB_MIS_ST 0x40023409 USB杂项状态寄存器 0xX8 R8_USB_INT_FG 0x4002340A USB中断标志寄存器 0x00 R8_USB_INT_ST 0x4002340B USB中断状态寄存器 0xXX R16_USB_RX_LEN 0x4002340C USB接收长度寄存器 0xXXXX 22.2.1.1 USB 控制寄存器R8_USB_CTRL 位 名称 访问 描述 复位值 USB工作模式选择位 7 RB_UC_HOST_MODE RW 0设备模式DEVICE 0 1主机模式HOST。 [6:5] RB_UC_SPEED_TYPE RW USB总线信号传输速率选择位 00b V2.4 329

Page 333

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [1:0] 00全速 01高速 10低速 11保留。 设备模式下USB设备使能和内部上拉电阻控 制位: 4 RB_UC_DEV_PU_EN RW 0 0不启用 1使能USB设备传输并且启用内部上拉电阻。 USB 传输完成中断标志未清零前自动暂停使 能位: 0不暂停 3 RB_UC_INT_BUSY RW 0 1在中断标志 UIF_TRANSFER 未清零前自动 暂停设备模式下自动应答忙NAK主机模式 下自动暂停后续传输。 USB协议处理器软件复位控制位 0不复位 2 RB_UC_RST_SIE RW 1强制复位USB协议处理器SIE需要软 1 件清零。 该位清除后PB6/PB7自动切换为USBIO模式 USB的FIFO和中断标志清零 0不清空 1 RB_UC_CLR_ALL RW 1 1清空 USB 中断标志和 FIFO需要软件清 零。 使能 USB 的 DMA正常传输模式下该位必须 设置为1 0 RB_UC_DMA_EN RW 0 0关闭DMA 1使能DMA功能和DMA中断。 22.2.1.2 USB 中断使能寄存器R8_USB_INT_EN 位 名称 访问 描述 复位值 USB设备模式接收到NAK中断 7 RB_UIE_DEV_NAK RW 0禁止相应中断 0 1使能相应中断。 同步传输开始发送/接收数据中断: 6 RB_UIE_ISO_ACT RW 0禁止相应中断 0 1使能相应中断。 SETUP事务完成中断 5 RB_UIE_SETUP_ACT RW 0禁止相应中断 0 1使能相应中断。 FIFO溢出中断 4 RB_UIE_FIFO_OV RW 0禁止中断 0 1使能中断。 USB主机模式SOF定时中断 3 RB_UIE_SOF_ACT RW 0禁止中断 0 1使能中断。 V2.4 330

Page 334

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn USB设备模式使能后接收SOF包产生传输 完成中断。 USB总线挂起或唤醒事件中断 2 RB_UIE_SUSPEND RW 0禁止中断 0 1使能中断。 USB传输不包括SETUP事务完成中断 1 RB_UIE_TRANSFER RW 0禁止中断 0 1使能中断。 USB主机模式USB设备连接或断开事件中 断: RB_UIE_DETECT RW 0 0禁止中断 0 1使能中断。 USB设备模式USB总线复位事件中断 RB_UIE_BUS_RST RW 0禁止中断 0 1使能中断。 22.2.1.3 USB 设备地址寄存器R16_USB_DEV_AD 位 名称 访问 描述 复位值 7 Reserved RO 保留。 0 主机模式下是当前操作的 USB 设备的 RB_MASK_USB_ADDR [6:0] RW 地址或HUB地址 0 [6:0] 设备模式该USB自身地址。 22.2.1.4 USB 帧号寄存器R16_USB_FRAME_NO 位 名称 访问 描述 复位值 帧号,主机模式下表示即将发送的 SOF 包的帧号,设备模式下表示当前接收到 [15:0] USB_FRAME_NO[15:0] RO 0 的SOF包的帧号。其中低11位为有效帧 号高3位为高速模式的微帧号。 注USB_FRAME_NO是16为寄存器其中低11位表示SOF包帧号高3为表示当前属于第几个微帧 可在操作高速HUB下进行中断、同步/实时传输时使用。 22.2.1.5 USB 挂起寄存器R8_USB_SUSPEND 位 名称 访问 描述 复位值 [7:6] Reserved RO 保留。 0 RB_USB_LINESTATE [5:4] RO PHY的Linestate信号。 X [1:0] 3 Reserved RO 保留。 0 在挂起状态下,如果接收到主机的唤醒 2 RB_USB_WAKEUP_ST RO X 信号该位置1直到退出挂起状态。 [1:0] RB_USB_SYS_MOD[1:0] RW 主机模式下的测试模式。 0 注需要远程唤醒时将RB_UH_REMOTE_WKUP位拉高再拉低即可。 22.2.1.6 USB 速度类型寄存器R8_USB_SPEED_TYPE 位 名称 访问 描述 复位值 V2.4 331

Page 335

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [7:2] Reserved RO 保留。 0 在主机模式下,表示当前连接的设备速 度类型,在设备模式下,表示当前设备 的速度类型; RB_USB_SPEED_TYPE [1:0] RO 00全速 00b [1:0] 01高速 10低速 11保留。 注区别于R8_USB_CTRL寄存器中的RB_UC_SPEED_TYPERB_UC_SPEED_TYPE表示期望处于的最高速 度假设在设备模式下设置RB_UC_SPEED_TYPE为高速当该设备连接在一个全速主机下则实际 的速度类型就是全速,通过查询 R8_USB_SPEED_TYPE 寄存器可以获知。在主机模式下,设置 RB_UC_SPEED_TYPE 为高速,当连接一个全速设备时,则实际通讯速度就是全速,通过查询 R8_USB_SPEED_TYPE寄存器可以获知。 22.2.1.7 USB 杂项状态寄存器R8_USB_MIS_ST 位 名称 访问 描述 复位值 USB主机模式下SOF包预示状态位 0无SOF包发送 7 RB_UMS_SOF_PRES RO X 1将要发送SOF包此时如有其它USB 数据包将被自动延后。 USB主机模式下SOF包传输状态位 6 RB_UMS_SOF_ACT RO 0发送完成或空闲 X 1正在发出SOF包。 USB协议处理器的空闲状态位 5 RB_UMS_SIE_FREE RO 0正在进行USB传输 1 1协议器空闲。 USB接收FIFO数据就绪状态位 4 RB_UMS_R_FIFO_RDY RO 0接收FIFO为空 0 1接收FIFO非空。 USB总线复位状态位 3 RB_UMS_BUS_RST RO 0当前USB总线处于非复位态 X 1当前USB总线处于复位态。 USB挂起状态位 0USB总线处于非挂起态 2 RB_UMS_SUSPEND RO 0 1USB总线处于挂起态有一段时间没 有USB活动。 USB 主机模式下端口的 USB 设备连接状 态位: 1 RB_UMS_DEV_ATTACH RO 0 0端口没有USB设备连接 1端口已经连接USB设备。 USB主机模式下SPLIT包发送允许位 0 RB_UMS_SPLIT_CAN RO 0禁止发送 0 1允许发送SPLIT包。 22.2.1.8 USB 中断标志寄存器R8_USB_INT_FG V2.4 332

Page 336

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 7 Reserved RO 保留。 0 同步传输开始发送/接收数据中断标志 位写1清零 0无事件 6 RB_UIF_ISO_ACT RO 1开始发送/接收数据触发。 0 注对于接收如果接收CRC16错误将 不会产生UIF_TRANSFER否则在事务完 成后依然会产生UIF_TRANSFER。 SETUP事务完成中断标志位写1清零 5 RB_UIF_SETUP_ACT RO 0无事件 1 1SETUP事务完成。 USB FIFO溢出中断标志位写1清零 4 RB_UIF_FIFO_OV RW 0无事件 0 1FIFO溢出触发。 USB 主机模式下 SOF 定时中断标志位, 写1清零 3 RB_UIF_HST_SOF RW 0 0无事件 1SOF包传输完成触发。 USB总线挂起或唤醒事件中断标志位写 1清零 2 RB_UIF_SUSPEND RW 0 0无事件 1USB挂起事件或唤醒事件触发。 USB传输完成中断标志位写1清零 1 RB_UIF_TRANSFER RW 0无事件 0 1一个USB传输完成触发。 USB 主机模式下 USB 设备连接或断开事 件中断标志位写1清零 RB_UIF_DETECT RW 0 0无事件 1检测到USB设备连接或断开触发。 0 USB 设备模式下 USB 总线复位事件中断 标志位写1清零 RB_UIF_BUS_RST RW 0 0无事件 1USB总线复位事件触发。 22.2.1.9 USB 中断状态寄存器R8_USB_INT_ST 位 名称 访问 描述 复位值 USB 设备模式下NAK 响应状态位,同 RB_U_IS_NAK 7 RB_UIS_IS_NAK RO 0 0无NAK响应 1当前USB传输过程中回应NAK。 USB事务接收完成后接收到的数据包 的Toggle与设置的期望值 6 RB_UIS_TOG_OK RO 0 匹配状态位: 0toggle不匹配 V2.4 333

Page 337

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1toggle匹配。 设备模式下,当前 USB 传输事务的令牌 [5:4] MASK_UIS_TOKEN[1:0] RO X PID标识。 设备模式下,当前 USB 传输事务的端点 MASK_UIS_ENDP[3:0] RO X 号。 [3:0] 主机模式下,当前 USB 传输事务的应答 MASK_UIS_H_RES[3:0] RO PID标识0000表示设备无应答或超时 X 其它值表示应答PID。 注MASK_UIS_TOKEN用于USB设备模式下标识当前USB传输事务的令牌PID00表示OUT包01表 示SOF包10表示IN包11表示SETUP包。 MASK_UIS_H_RES仅在主机模式下有效。在主机模式下若主机发送OUT/SETUP令牌包时则该 PID是握手包ACK/NAK/STALL或是设备无应答/超时。若主机发送IN令牌包则该PID是数据包的 PIDDATA0/DATA1或握手包PID。 22.2.1.10 USB 接收长度寄存器R16_USB_RX_LEN 位 名称 访问 描述 复位值 R16_USB_RX_LEN [15:0] RO 当前USB端点接收的数据字节数。 X [15:0] 22.2.2 设备寄存器描述 USBHS模块在USB设备模式下提供了端点0-15共16组双向端点除端点0之外的所有端点的 最大数据包长度都是1024字节端点0的最大数据包长度为64字节。  端点0是默认端点支持控制传输发送和接收共用一个64字节数据缓冲区。  端点1-15各自包括一个发送端点IN和一个接收端点OUT发送和接收各有一个独立的数据缓冲 区,支持批量传输、中断传输和实时/同步传输。  端点 0 具有独立的 DMA 地址,收发共用,端点 115 的发送和接收各有一个 DMA 地址。通过入 R32_UEPn_BUF_MOD寄存器可以设置数据缓冲区的模式为双缓冲或单缓冲。若使用双缓冲区模式 该端点只能使用单方向传输。  每组端点都具有收发控制寄存器 R8_UEPn_TX_CTRL、R8_UEPn_RX_CTRL 和发送长度寄存器 R16_UEPn_T_LEN 和 R32_UEPn_*_DMAn=015用于配置该端点的同步触发位、对 OUT 事务和 IN事务的响应以及发送数据的长度等。 作为 USB 设备所必要的 USB 总线上拉电阻可以由软件随时设置是否启用,当 USB 控制寄存器 R8_USB_CTRL 中的 RB_UC_DEV_PU_EN 置 1 时,控制器根据 RB_UC_SPEED_TYPE 的速度设置,在内部为 USB总线的DP/DM引脚连接上拉电阻并启用USB设备功能。 当检测到USB总线复位、USB总线挂起或唤醒事件或当USB成功处理完数据发送或数据接收后 USB协议处理器都将设置相应的中断标志如果中断使能打开还会产生相应的中断请求。应用程序 可以直接查询或在 USB 中断服务程序中查询并分析中断标志寄存器 R8_USB_INT_FG根据 RB_UIF_BUS_RST和RB_UIF_SUSPEND进行相应的处理并且如果RB_UIF_TRANSFER有效那么还需 要继续分析 USB 中断状态寄存器 R8_USB_INT_ST根据当前端点号 MASK_UIS_ENDP 和当前事务令牌 PID 标识 MASK_UIS_TOKEN 进行相应的处理。如果事先设定了各个端点的 OUT 事务的同步触发位 RB_UEP_R_TOG那么可以通过RB_U_TOG_OK或RB_UIS_TOG_OK判断当前所接收到的数据包的同步触发 位是否与该端点的同步触发位匹配,如果数据同步,则数据有效;如果数据不同步,则数据应该被丢 弃。每次处理完USB发送或接收中断后都应该正确修改相应端点的同步触发位用于下次所发送的 数据包或下次所接收的数据包是否同步检测另外设置RB_UEP_T_TOG_AUTO或RB_UEP_R_TOG_AUTO 可以实现在发送成功或接收成功后自动修改相应的同步触发位(翻转或自减)。 各个端点准备发送的数据在各自的缓冲区中准备发送的数据长度是独立设定在R16_UEPn_T_LEN V2.4 334

Page 338

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 中;各个端点接收到的数据在各自的缓冲区中,但是接收到的数据长度都在 USB 接收长度寄存器 R16_USB_RX_LEN中可以在USB接收中断时根据当前端点号区分。 表22-2 设备相关寄存器列表 名称 访问地址 描述 复位值 R32_UEP_CONFIG 0x40023410 端点使能配置寄存器 0x00000000 R32_UEP_TYPE 0x40023414 端点类型配置寄存器 0x00000000 R32_UEP_BUF_MOD 0x40023418 端点缓冲区模式寄存器 0x00000000 R32_UEP0_DMA 0x4002341C 端点0缓冲区的起始地址 0xXXXXXXXX R32_UEP1_RX_DMA 0x40023420 端点1接收缓冲区的起始地址 0xXXXXXXXX R32_UEP2_RX_DMA 0x40023424 端点2接收缓冲区的起始地址 0xXXXXXXXX R32_UEP3_RX_DMA 0x40023428 端点3接收缓冲区的起始地址 0xXXXXXXXX R32_UEP4_RX_DMA 0x4002342C 端点4接收缓冲区的起始地址 0xXXXXXXXX R32_UEP5_RX_DMA 0x40023430 端点5接收缓冲区的起始地址 0xXXXXXXXX R32_UEP6_RX_DMA 0x40023434 端点6接收缓冲区的起始地址 0xXXXXXXXX R32_UEP7_RX_DMA 0x40023438 端点7接收缓冲区的起始地址 0xXXXXXXXX R32_UEP8_RX_DMA 0x4002343C 端点8接收缓冲区的起始地址 0xXXXXXXXX R32_UEP9_RX_DMA 0x40023440 端点9接收缓冲区的起始地址 0xXXXXXXXX R32_UEP10_RX_DMA 0x40023444 端点10接收缓冲区的起始地址 0xXXXXXXXX R32_UEP11_RX_DMA 0x40023448 端点11接收缓冲区的起始地址 0xXXXXXXXX R32_UEP12_RX_DMA 0x4002344C 端点12接收缓冲区的起始地址 0xXXXXXXXX R32_UEP13_RX_DMA 0x40023450 端点13接收缓冲区的起始地址 0xXXXXXXXX R32_UEP14_RX_DMA 0x40023454 端点14接收缓冲区的起始地址 0xXXXXXXXX R32_UEP15_RX_DMA 0x40023458 端点15接收缓冲区的起始地址 0xXXXXXXXX R32_UEP1_TX_DMA 0x4002345C 端点1发送缓冲区的起始地址 0xXXXXXXXX R32_UEP2_TX_DMA 0x40023460 端点2发送缓冲区的起始地址 0xXXXXXXXX R32_UEP3_TX_DMA 0x40023464 端点3发送缓冲区的起始地址 0xXXXXXXXX R32_UEP4_TX_DMA 0x40023468 端点4发送缓冲区的起始地址 0xXXXXXXXX R32_UEP5_TX_DMA 0x4002346C 端点5发送缓冲区的起始地址 0xXXXXXXXX R32_UEP6_TX_DMA 0x40023470 端点6发送缓冲区的起始地址 0xXXXXXXXX R32_UEP7_TX_DMA 0x40023474 端点7发送缓冲区的起始地址 0xXXXXXXXX R32_UEP8_TX_DMA 0x40023478 端点8发送缓冲区的起始地址 0xXXXXXXXX R32_UEP9_TX_DMA 0x4002347C 端点9发送缓冲区的起始地址 0xXXXXXXXX R32_UEP10_TX_DMA 0x40023480 端点10发送缓冲区的起始地址 0xXXXXXXXX R32_UEP11_TX_DMA 0x40023484 端点11发送缓冲区的起始地址 0xXXXXXXXX R32_UEP12_TX_DMA 0x40023488 端点12发送缓冲区的起始地址 0xXXXXXXXX R32_UEP13_TX_DMA 0x4002348C 端点13发送缓冲区的起始地址 0xXXXXXXXX R32_UEP14_TX_DMA 0x40023490 端点14发送缓冲区的起始地址 0xXXXXXXXX R32_UEP15_TX_DMA 0x40023494 端点15发送缓冲区的起始地址 0xXXXXXXXX R16_UEP0_MAX_LEN 0x40023498 端点0最大长度包寄存器 0xXXXX R16_UEP1_MAX_LEN 0x4002349C 端点1最大长度包寄存器 0xXXXX R16_UEP2_MAX_LEN 0x400234A0 端点2最大长度包寄存器 0xXXXX R16_UEP3_MAX_LEN 0x400234A4 端点3最大长度包寄存器 0xXXXX R16_UEP4_MAX_LEN 0x400234A8 端点4最大长度包寄存器 0xXXXX R16_UEP5_MAX_LEN 0x400234AC 端点5最大长度包寄存器 0xXXXX V2.4 335

Page 339

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R16_UEP6_MAX_LEN 0x400234B0 端点6最大长度包寄存器 0xXXXX R16_UEP7_MAX_LEN 0x400234B4 端点7最大长度包寄存器 0xXXXX R16_UEP8_MAX_LEN 0x400234B8 端点8最大长度包寄存器 0xXXXX R16_UEP9_MAX_LEN 0x400234BC 端点9最大长度包寄存器 0xXXXX R16_UEP10_MAX_LEN 0x400234C0 端点10最大长度包寄存器 0xXXXX R16_UEP11_MAX_LEN 0x400234C4 端点11最大长度包寄存器 0xXXXX R16_UEP12_MAX_LEN 0x400234C8 端点12最大长度包寄存器 0xXXXX R16_UEP13_MAX_LEN 0x400234CC 端点13最大长度包寄存器 0xXXXX R16_UEP14_MAX_LEN 0x400234D0 端点14最大长度包寄存器 0xXXXX R16_UEP15_MAX_LEN 0x400234D4 端点15最大长度包寄存器 0xXXXX R16_UEP0_T_LEN 0x400234D8 端点0发送长度寄存器 0xXXXX R8_UEP0_TX_CTRL 0x400234DA 端点0发送控制寄存器 0x00 R8_UEP0_RX_CTRL 0x400234DB 端点0接收控制寄存器 0x00 R16_UEP1_T_LEN 0x400234DC 端点1发送长度寄存器 0xXXXX R8_UEP1_TX_CTRL 0x400234DE 端点1发送控制寄存器 0x00 R8_UEP1_RX_CTRL 0x400234DF 端点1接收控制寄存器 0x00 R16_UEP2_T_LEN 0x400234E0 端点2发送长度寄存器 0xXXXX R8_UEP2_TX_CTRL 0x400234E2 端点2发送控制寄存器 0x00 R8_UEP2_RX_CTRL 0x400234E3 端点2接收控制寄存器 0x00 R16_UEP3_T_LEN 0x400234E4 端点3发送长度寄存器 0xXXXX R8_UEP3_TX_CTRL 0x400234E6 端点3发送控制寄存器 0x00 R8_UEP3_RX_CTRL 0x400234E7 端点3接收控制寄存器 0x00 R16_UEP4_T_LEN 0x400234E8 端点4发送长度寄存器 0xXXXX R8_UEP4_TX_CTRL 0x400234EA 端点4发送控制寄存器 0x00 R8_UEP4_RX_CTRL 0x400234EB 端点4接收控制寄存器 0x00 R16_UEP5_T_LEN 0x400234EC 端点5发送长度寄存器 0xXXXX R8_UEP5_TX_CTRL 0x400234EE 端点5发送控制寄存器 0x00 R8_UEP5_RX_CTRL 0x400234EF 端点5接收控制寄存器 0x00 R16_UEP6_T_LEN 0x400234F0 端点6发送长度寄存器 0xXXXX R8_UEP6_TX_CTRL 0x400234F2 端点6发送控制寄存器 0x00 R8_UEP6_RX_CTRL 0x400234F3 端点6接收控制寄存器 0x00 R16_UEP7_T_LEN 0x400234F4 端点7发送长度寄存器 0xXXXX R8_UEP7_TX_CTRL 0x400234F6 端点7发送控制寄存器 0x00 R8_UEP7_RX_CTRL 0x400234F7 端点7接收控制寄存器 0x00 R16_UEP8_T_LEN 0x400234F8 端点8发送长度寄存器 0xXXXX R8_UEP8_TX_CTRL 0x400234FA 端点8发送控制寄存器 0x00 R8_UEP8_RX_CTRL 0x400234FB 端点8接收控制寄存器 0x00 R16_UEP9_T_LEN 0x400234FC 端点9发送长度寄存器 0xXXXX R8_UEP9_TX_CTRL 0x400234FE 端点9发送控制寄存器 0x00 R8_UEP9_RX_CTRL 0x400234FF 端点9接收控制寄存器 0x00 R16_UEP10_T_LEN 0x40023500 端点10发送长度寄存器 0xXXXX R8_UEP10_TX_CTRL 0x40023502 端点10发送控制寄存器 0x00 R8_UEP10_RX_CTRL 0x40023503 端点10接收控制寄存器 0x00 R16_UEP11_T_LEN 0x40023504 端点11发送长度寄存器 0xXXXX R8_UEP11_TX_CTRL 0x40023506 端点11发送控制寄存器 0x00 V2.4 336

Page 340

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R8_UEP11_RX_CTRL 0x40023507 端点11接收控制寄存器 0x00 R16_UEP12_T_LEN 0x40023508 端点12发送长度寄存器 0xXXXX R8_UEP12_TX_CTRL 0x4002350A 端点12发送控制寄存器 0x00 R8_UEP12_RX_CTRL 0x4002350B 端点12接收控制寄存器 0x00 R16_UEP13_T_LEN 0x4002350C 端点13发送长度寄存器 0xXXXX R8_UEP13_TX_CTRL 0x4002350E 端点13发送控制寄存器 0x00 R8_UEP13_RX_CTRL 0x4002350F 端点13接收控制寄存器 0x00 R16_UEP14_T_LEN 0x40023510 端点14发送长度寄存器 0xXXXX R8_UEP14_TX_CTRL 0x40023512 端点14发送控制寄存器 0x00 R8_UEP14_RX_CTRL 0x40023513 端点14接收控制寄存器 0x00 R16_UEP15_T_LEN 0x40023514 端点15发送长度寄存器 0xXXXX R8_UEP15_TX_CTRL 0x40023516 端点15发送控制寄存器 0x00 R8_UEP15_RX_CTRL 0x40023517 端点15接收控制寄存器 0x00 22.2.2.1 USB 端点配置寄存器R32_UEP_CONFIG 位 名称 访问 描述 复位值 端点1-15接收使能 [31:17] RB_UEP_R_EN RW 0禁止 0 1使能。 16 Reserved RO 保留。 0 端点1-15发送使能 [15:1] RB_UEP_T_EN RW 0禁止 0 1使能。 0 Reserved RO 保留。 0 注端点0的收发使能信号始终有效。 22.2.2.2 USB 端点类型控制寄存器R32_UEP_TYPE 位 名称 访问 描述 复位值 端点1-15OUT方向传输类型 [31:17] RB_UEP_R_TYPE RW 0非同步传输 0 1同步传输。 16 Reserved RO 保留。 0 端点1-15IN方向传输类型 [15:1] RB_UEP_T_TYPE RW 0非同步传输 0 1同步传输。 0 Reserved RO 保留。 0 22.2.2.3 USB 端点缓冲区模式控制寄存器R32_UEP_BUF_MOD 位 名称 访问 描述 复位值 [31:16] RB_UEP_ISO_BUF_MOD RW 同步端点缓冲区模式控制位1有效。 0 [15:0] RB_UEP_BUF_MOD RW 端点缓冲区模式控制位。 0 注当RB_UEP_ISO_BUF_MOD为1时对于同步IN端点在接收到SOF包后硬件会有以下操作将 EPx_R_TOG内容加载到EPx_T_TOG中将EPx_MAX_LEN值加载到EPx_T_LEN中将UEPn_RX_DMA值加 载到UEPn_TX_DMA中。 当RB_UEP_ISO_BUF_MOD为1时对于同步OUT端点在接收到SOF包后硬件会有以下操作 V2.4 337

Page 341

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 将EPx_T_TOG内容加载到EPx_R_TOG中将UEPn_TX_DMA的值加载到UEPn_RX_DMA中。 表21-3 端点n缓冲区模式n=1-15 UEPn_RX_EN UEPn_TX_EN UEPn_BUF_MOD 描述以UEPn_DMA为起始地址由低向高排列 0 0 x 端点被禁用未用到UEPn_*_DMA缓冲区。 1 0 0 接收OUT缓冲区首地址为UEPn_RX_DMA RB_UEPn_RX_TOG[0]=0使用缓冲区UEPn_RX_DMA 1 0 1 RB_UEPn_RX_TOG[0]=1使用缓冲区UEPn_TX_DMA 0 1 0 发送IN缓冲区首地址为UEPn_TX_DMA。 RB_UEPn_TX_TOG[0]=0使用缓冲区UEPn_TX_DMA 0 1 1 RB_UEPn_TX_TOG[0]=1使用缓冲区UEPn_RX_DMA 22.2.2.4 端点 n 缓冲区起始地址R32_UEP0_DMA 位 名称 访问 描述 复位值 端点0缓冲区起始地址。 [31:0] R32_UEPn_DMA[31:0] RW X 地址必须4字节对齐。 22.2.2.5 USB 端点 n 发送缓冲区起始地址R32_UEPn_TX_DMAn=1-15 位 名称 访问 描述 复位值 R32_UEPn_TX_DMA[31: 端点n发送缓冲区起始地址。 [31:0] RW X 0] 地址必须4字节对齐。 22.2.2.6 USB 端点 n 接收缓冲区起始地址R32_UEPn_RX_DMAn=1-15 位 名称 访问 描述 复位值 R32_UEPn_RX_DMA[31: 端点n接收缓冲区起始地址。 [31:0] RW X 0] 地址必须4字节对齐。 22.2.2.7 端点 n 最大长度包寄存器R16_UEPn_MAX_LENn=0-15 位 名称 访问 描述 复位值 [15:11] Reserved RO 保留。 0 [10:0] UEPn_MAX_LEN[10:0] RW 端点n接收数据的最大包长度。 X 注:这个最大包长度决定了端点可接收数据最大长度,超出此长度的数据会被丢弃,不会写入缓冲区。 22.2.2.8 端点 n 发送长度寄存器R16_UEPn_T_LENn=0-15 位 名称 访问 描述 复位值 设置USB端点n准备发送的数据字节数 [10:0] UEPn_T_LEN[10:0] RW X 对于控制端点0低7位有效。 22.2.2.9 端点 n 发送控制寄存器R8_UEPn_TX_CTRLn=0-15 位 名称 访问 描述 复位值 [7:6] Reserved RO 保留。 0 同步触发位自动翻转使能控制位,软件 可修改: 5 RB_UEP_T_TOG_AUTO RW 0 0不自动翻转可以手动切换 1对于非同步端点数据发送成功后自 V2.4 338

Page 342

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 动翻转MASK_UEP_T_TOG [0],对于同步 端点数据发送成功后MASK_UEP_T_TOG 自动减1。 注端点0此位为保留位。 USB端点n的发送器处理IN事务准 备的同步触发位: 00发送DATA0 [4:3] MASK_UEP_T_TOG[1:0] RW 00b 01发送DATA1 10发送DATA2 11发送MDATA。 2 Reserved RO 保留 0 端点n的发送器对IN事务的响应控制 00数据就绪并期望ACK [1:0] MASK_UEP_T_RES[1:0] RW 01保留 00b 10应答NAK或忙 11应答STALL或错误。 22.2.2.10 端点 n 接收控制寄存器R8_UEPn_RX_CTRLn=0-15 位 名称 访问 描述 复位值 [7:6] Reserved RO 保留 0 同步触发位自动翻转使能控制位: 0不自动翻转可以手动切换 5 RB_UEP_R_TOG_AUTO RO 1 数 据 接 收 成 功 后 自 动 翻 转 0 MASK_UEP_R_TOG[0]。 注端点0此位为保留位。 USB 端点 n 的接收器(处理 OUT 事务) 准备的同步触发位: 00期望DATA0 [4:3] MASK_UEP_R_TOG[1:0] RW 01期望DATA1 00b 10期望DATA2 11期望MDATA。 对于实时/同步传输无效。 2 Reserved RO 保留。 0 端点n的接收器对OUT事务的响应控制 00数据就绪并期望ACK 01应答NYET [1:0] MASK_UEP_R_RES[1:0] RW 00b 10应答NAK或忙 11应答STALL或错误 对于实时/同步传输无效。 22.2.3 USB 主机寄存器 在USB主机模式下芯片提供了一组双向主机端点包括一个发送端点OUT和一个接收端点IN 一个数据包的最大长度是1024字节同步传输支持控制传输、中断传输、批量传输和实时/同步 传输。 主机端点发起的每一个USB事务在处理结束后总是自动设置RB_UIF_TRANSFER中断标志。应用 程序可以直接查询或在USB中断服务程序中查询并分析中断标志寄存器R8_USB_INT_FG根据各中断 V2.4 339

Page 343

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 标志分别进行相应的处理并且如果RB_UIF_TRANSFER有效那么还需要继续分析USB中断状态寄 存器R8_USB_INT_ST根据当前USB传输事务的应答PID标识MASK_UIS_H_RES进行相应的处理。 如果事先设定了主机接收端点的 IN 事务的同步触发位RB_UH_R_TOG那么可以通过 RB_U_TOG_OK或RB_UIS_TOG_OK判断当前所接收到的数据包的同步触发位是否与主机接收端点的同步 触发位匹配如果数据同步则数据有效如果数据不同步则数据应该被丢弃。每次处理完USB发 送或接收中断后,都应该正确修改相应主机端点的同步触发位,用于同步下次所发送的数据包和检测 下次所接收的数据包是否同步另外通过设置RB_UH_T_AUTO_TOG和RB_UH_R_AUTO_TOG可以实现在 发送成功或接收成功后自动翻转相应的同步触发位。 USB 主机令牌设置寄存器 R8_UH_EP_PID 用于设置被操作的目标设备的端点号和本次 USB 传输事 务的令牌PID包标识。SETUP令牌和OUT令牌所对应的数据由主机发送端点提供准备发送的数据在 R16_UH_TX_DMA缓冲区中准备发送的数据长度设置在R16_UH_TX_LEN中IN令牌所对应数据由目标 设备返回给主机接收端点,接收到数据存放 R16_UH_RX_DMA 缓冲区中,接收到的数据长度存放在 R16_USB_RX_LEN中。 表22-3 主机相关寄存器列表 名称 访问地址 描述 复位值 R8_UHOST_CTRL 0x40023401 USB主机控制寄存器 0x00 R32_UH_CONFIG 0x40023410 USB主机端点配置寄存器 0x00000000 R32_UH_EP_TYPE 0x40023414 USB主机端点类型寄存器 0x00000000 R32_UH_RX_DMA 0x40023424 USB主机接收缓冲区起始地址 0x0000XXXX R32_UH_TX_DMA 0x40023464 USB主机发送缓冲区起始地址 0x0000XXXX R16_UH_RX_MAX_LEN 0x400234A0 USB主机接收最大长度包寄存器 0xXXXX R8_UH_EP_PID 0x400234E0 USB主机令牌设置寄存器 0x00 R8_UH_RX_CTRL 0x400234E3 USB主机接收端点控制寄存器 0x00 R16_UH_TX_LEN 0x400234E4 USB主机发送长度寄存器 0xXXXX R8_UH_TX_CTRL 0x400234E6 USB主机发送端点控制寄存器 0x00 R16_UH_SPLIT_DATA 0x400234E8 USB主机发送SPLIT包的数据 0xXXXX 22.2.3.1 USB 主机控制寄存器R8_UHOST_CTRL 位 名称 访问 描述 复位值 自动产生SOF包使能控制位 0不产生SOF包 7 RB_UH_SOF_EN RW 1主机自动发生SOF包。 0 该位在从连接状态变为断开状态时由硬 件自动清零。 6 RB_UH_SOF_FREE RO 总线空闲。 0 5 Reserved RO 保留。 0 USB-PHY的处于挂起状态内部USB-PLL 4 RB_UH_PHY_SUSPENDM RW 0 将被关闭,低有效。 3 RB_UH_REMOTE_WKUP RW 远程唤醒。 0 主机模式下,表示主机唤醒设备,软件 2 RB_UH_TX_BUS_RESUME RW 拉高 50ns 后,硬件自动发送 30ms 的唤 0 醒信号。 RB_UH_TX_BUS_SUSPEN USB 主机发送挂起信号,需由软件拉高 1 RW 0 D 10ms。 0 RB_UH_TX_BUS_RST RW USB主机发送总线复位信号需由软件拉 0 V2.4 340

Page 344

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 高10ms。 注复位的时间由RB_UH_TX_BUS_RST的高电平持续时间决定建议至少10ms10ms后直接查询速度 类型)。如果主机唤醒设备, bUH_TX_BUS_RESUME 拉高之后硬件自动发送30ms的唤醒信号K bUH_TX_BUS_RESUME需要手动清除以免影响下一次主机挂起bUH_TX_BUS_RESUME高电平至少维持 50ns。 22.2.3.2 USB 主机端点配置控制寄存器R32_UH_CONFIG 位 名称 访问 描述 复位值 [31:19] Reserved RO 保留。 0 主机接收使能: 18 RB_UH_EP_RX_EN RW 0禁止 0 1使能。 [17:4] Reserved RO 保留。 0 主机发送使能: 3 RB_UH_EP_TX_EN RW 0禁止 0 1使能。 [2:0] Reserved RO 保留。 0 22.2.3.3 USB 主机端点类型寄存器R32_UH_EP_TYPE 位 名称 访问 描述 复位值 [31:19] Reserved RO 保留。 0 主机接收端点类型: 18 RB_UH_EP_RX_TYPE RW 0非同步传输 0 1同步传输。 [17:4] Reserved RO 保留。 0 主机发送端点类型: 3 RB_UH_EP_TX_TYPE RW 0非同步传输 0 1同步传输。 [2:0] Reserved RO 保留。 0 22.2.3.4 USB 主机接收缓冲区起始地址R32_UH_RX_DMA 位 名称 访问 描述 复位值 [31:17] Reserved RO 保留。 0 主机端点数据接收缓冲区起始地址,最 [16:0] R16_UH_RX_DMA[16:0] RW X 低2位固定为04字节对齐。 22.2.3.5 USB 主机发送缓冲区起始地址R32_UH_TX_DMA 位 名称 访问 描述 复位值 [31:17] Reserved RO 保留。 0 主机端点数据发送缓冲区起始地址(不 [16:0] R16_UH_TX_DMA[16:0] RW X 需要4字节对齐。 22.2.3.6 USB 主机接收最大长度包寄存器R16_UH_RX_MAX_LEN 位 名称 访问 描述 复位值 V2.4 341

Page 345

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [15:11] Reserved RO 保留。 0 [10:0] UH_RX_MAX_LEN[10:0] RW 主机端点接收数据的最大包长度。 X 注:这个最大包大小决定了端点可接收数据最大长度,超出此长度的数据会被丢弃。 22.2.3.7 USB 主机令牌设置寄存器R8_UH_EP_PID 位 名称 访问 描述 复位值 [7:4] MASK_UH_TOKEN[3:0] RW 设置本次USB传输事务的令牌PID标识。 0 [3:0] MASK_UH_ENDP[3:0] RW 设置本次被操作的目标设备的端点号。 0 22.2.3.8 USB 主机接收端点控制寄存器R8_UH_RX_CTRL 位 名称 访问 描述 复位值 7 Reserved RO 保留。 0 0期望数据包IN 6 RB_UH_R_DATA_NO RW 1不期待数据包用于主机模式下的操 0 作高速HUB。 同步触发位自动翻转使能控制位: 0不自动翻转可以手动切换。 1对于非同步传输数据接收成功后自 5 RB_UH_R_AUTO_TOG RW 0 动翻转相应MASK_UH_R_TOG[0];对于同 步传输数据接收成功后MASK_UH_R_TOG 会自动减1。 主机接收器处理IN事务期望的同步 触发位, 00期望DATA0 [4:3] MASK_UH_R_TOG[1:0] RW 00b 01期望DATA1 10期望DATA2 11期望MDATA。 0接收数据成功后发送应答 2 RB_UH_R_RES_NO RW 1无应答用于实现非端点 0 的实时/ 0 同步传输。此时忽略MASK_UEP_R_RES。 主机接收器对IN事务的响应控制位 [1:0] MASK_UH_R_RES[1:0] RW 00应答ACK 00b 对于实时/同步传输无效。 22.2.3.9 USB 主机发送长度寄存器R16_UH_TX_LEN 位 名称 访问 描述 复位值 [15:11] Reserved RO 保留 0 设置 USB 主机发送端点准备发送的数据 [10:0] R16_UH_TX_LEN[10:0] RW X 字节。 22.2.3.10 USB 主机发送端点控制寄存器R8_UH_TX_CTRL 位 名称 访问 描述 复位值 7 Reserved RO 保留。 0 0发送数据包OUT/SETUP 6 RB_UH_T_DATA_NO RW 0 1不发送数据包PING/SPLIT。 V2.4 342

Page 346

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 同步触发位自动翻转使能控制位,可软 件修改: 5 RB_UH_T_AUTO_TOG RW 0不自动翻转可以手动切换 0 1对于非同步传输数据发送成功后自 动翻转MASK_UH_T_TOG[0]。 USB主机发送器处理SETUP/OUT事务 准备的同步触发位 00表示发送DATA0 [4:3] MASK_UH_T_TOG[1:0] RW 00b 01表示发送DATA1 10表示发送DATA2 11表示发送MDATA。 0发送数据成功后期待应答 2 RB_UH_T_RES_NO RW 1无应答用于实现非端点 0 的实时/ 0 同步传输。此时忽略MASK_UEP_T_RES。 USB 主机发送器对 SETUP/OUT 事务的响 应控制位 00期望应答ACK [1:0] MASK_UH_T_RES[1:0] RW 01期望应答NYET 00b 10期望应答NAK或忙 11期望应答STALL或错误。 对于实时/同步传输无效。 22.2.3.11 USB 主机发送 SPLIT 包的数据R16_UH_SPLIT_DATA 位 名称 访问 描述 复位值 [15:12] Reserved RO 保留。 0 主机端点发送 SPLIT 包的数据内容,低 [11:0] UH_SPLIT_DATA[11:0] RW 0x0XXX 12位有效高4位固定为0。 V2.4 343

Page 347

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 23 章 USB 全速主机/设备控制器USBFS/OTG_FS 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器系列部分产品。 23.1 USB 控制器简介 芯片内嵌USB控制器及收发器特性如下  双重角色设备控制器支持USB Host主机功能和USB Device设备功能。  遵循On-The-GoSupplement to the USB2.0规范主机和设备模式均支持USB2.0全速12Mbps 或低速1.5Mbps。  支持软件HNP和SRP协议。  支持USB控制传输、批量传输、中断传输、同步/实时传输。  支持最大64字节的数据包内置FIFO支持中断和DMA。 23.2 寄存器描述 USB相关寄存器分为3个部分部分寄存器是在主机和设备模式下进行复用的。  USB全局寄存器  USB设备控制寄存器  USB主机控制寄存器 23.2.1 全局寄存器描述 表23-1 USBFS相关寄存器列表 名称 访问地址 描述 复位值 R8_USB_CTRL 0x50000000 USB控制寄存器 0x06 R8_USB_INT_EN 0x50000002 USB中断使能寄存器 0x00 R8_USB_DEV_AD 0x50000003 USB设备地址寄存器 0x00 R8_USB_MIS_ST 0x50000005 USB杂项状态寄存器 0xXX R8_USB_INT_FG 0x50000006 USB中断标志寄存器 0x20 R8_USB_INT_ST 0x50000007 USB中断状态寄存器 0xXX R16_USB_RX_LEN 0x50000008 USB接收长度寄存器 0x0XXX R32_USB_OTG_CR 0x50000054 USB OTG控制寄存器 0x00000000 R32_USB_OTG_SR 0x50000058 USB OTG状态寄存器 0x0000000X 23.2.1.1 USB 控制寄存器R8_USB_CTRL 位 名称 访问 描述 复位值 USB工作模式选择位 7 RB_UC_HOST_MODE RW 0设备模式DEVICE 0 1主机模式HOST。 USB总线信号传输速率选择位 6 RB_UC_LOW_SPEED RW 012Mbps 0 11.5Mbps。 USB设备模式下USB设备使能和内部上拉 5 RB_UC_DEV_PU_EN RW 电阻控制位为1则使能USB设备传输并 0 且启用内部上拉电阻。 [5:4] MASK_UC_SYS_CTRL RW 见下表配置USB系统。 0 V2.4 344

Page 348

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn USB 传输完成中断标志未清零前自动暂停 使能位: 0不暂停 3 RB_UC_INT_BUSY RW 0 1在中断标志UIF_TRANSFER 未清零前自 动暂停,设备模式下自动应答忙 NAK主 机模式下自动暂停后续传输。 USB协议处理器软件复位控制位 0不复位 2 RB_UC_RST_SIE RW 1 1强制复位 USB协议处理器SIE需 要软件清零。 USB的FIFO和中断标志清零 1 RB_UC_CLR_ALL RW 0不清 1 1强制清空和清零。 USB的DMA和DMA中断控制位 0 RB_UC_DMA_EN RW 0关闭DMA 0 1使能DMA功能和DMA中断。 由RB_UC_HOST_MODE和MASK_UC_SYS_CTRL组成USB系统控制组合 表23-2 USB系统控制组合 RB_UC_HOST_MODE MASK_UC_SYS_CTRL USB系统控制描述 0 00 禁止USB设备功能关闭内部上拉电阻。 0 01 使能USB设备功能关闭内部上拉电阻需加外部上拉。 使能 USB 设备功能,启用内部 1.5K 上拉电阻。该上拉 0 1x 电阻优先于下拉电阻也可用于GPIO模式。 1 00 USB主机模式正常工作状态。 1 01 USB主机模式强制DP/DM输出SE0状态。 1 10 USB主机模式强制DP/DM输出J状态。 1 11 USB主机模式强制DP/DM输出K状态/唤醒。 23.2.1.2 USB 中断使能寄存器R8_USB_INT_EN 位 名称 访问 描述 复位值 7 Reserved RO 保留。 0 USB设备模式接收到NAK中断 6 RB_UIE_DEV_NAK RW 0禁止中断 0 1使能中断。 USB单线模式使能 0禁止USB单线模式 1使能USB单线模式。 [5] RB_U_1WIRE_MODE RW 注 仅 适 用 于 CH32F20x_D8C 、 0 CH32V30x_D8 、 CH32V30x_D8C 、 CH32V31x_D8C批号倒数第六位不为0的 产品。 FIFO溢出中断 4 RB_UIE_FIFO_OV RW 0禁止中断 0 1使能中断。 V2.4 345

Page 349

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn USB主机模式SOF定时中断 3 RB_UIE_HST_SOF RW 0禁止中断 0 1使能中断。 USB总线挂起或唤醒事件中断 2 RB_UIE_SUSPEND RW 0禁止中断 0 1使能中断。 USB传输完成中断 1 RB_UIE_TRANSFER RW 0禁止中断 0 1使能中断。 USB主机模式USB设备连接或断开事件 中断: RB_UIE_DETECT RW 0 0禁止中断 0 1使能中断。 USB设备模式USB总线复位事件中断 RB_UIE_BUS_RST RW 0禁止中断 0 1使能中断。 23.2.1.3 USB 设备地址寄存器R8_USB_DEV_AD 位 名称 访问 描述 复位值 7 RB_UDA_GP_BIT RW USB通用标志位用户自定义。 0 主机模式当前操作的USB设备地址 [6:0] MASK_USB_ADDR RW 0 设备模式该USB自身地址。 23.2.1.4 USB 杂项状态寄存器R8_USB_MIS_ST 位 名称 访问 描述 复位值 USB主机模式下SOF包预示状态位 0无SOF包发送 7 RB_UMS_SOF_PRES RO x 1将要发送SOF包此时如有其它USB 数据包将被自动延后。 USB主机模式下SOF包传输状态位 6 RB_UMS_SOF_ACT RO 0发送完成或者空闲 x 1正在发出SOF包。 USB协议处理器的空闲状态位 5 RB_UMS_SIE_FREE RO 0正在进行USB传输 1 1协议器空闲。 USB接收FIFO数据就绪状态位 4 RB_UMS_R_FIFO_RDY RO 0接收FIFO为空 0 1接收FIFO非空。 USB总线复位状态位 3 RB_UMS_BUS_RST RO 0当前USB总线处于非复位态 x 1当前USB总线处于复位态。 USB挂起状态位 0USB总线处于非挂起态 2 RB_UMS_SUSPEND RO 0 1USB总线处于挂起态有一段时间没 有USB活动。 V2.4 346

Page 350

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn USB 主机模式下,设备刚连入 USB 端口 时DM引脚的电平状态用于判断速度 1 RB_UMS_DM_LEVEL RO 0 0低电平/全速; 1高电平/低速。 USB 主机模式下端口的 USB 设备连接状 态位: 0 RB_UMS_DEV_ATTACH RO 0 0端口没有USB设备连接 1端口已经连接USB设备。 23.2.1.5 USB 中断标志寄存器R8_USB_INT_FG 位 名称 访问 描述 复位值 USB设备模式下NAK响应状态位 7 RB_U_IS_NAK RO 0无NAK响应 0 1当前USB传输过程中回应NAK。 当前 USB 传输 DATA0/1 同步标志匹配状 态位: 6 RB_U_TOG_OK RO 0 0不同步 1同步。 USB协议处理器空闲状态位 5 RB_U_SIE_FREE RO 0正在进行USB传输 1 1USB空闲。 USB FIFO溢出中断标志位写1清零 4 RB_UIF_FIFO_OV RW 0无事件 0 1FIFO溢出触发。 USB 主机模式下 SOF 定时中断标志位, 写1清零 3 RB_UIF_HST_SOF RW 0 0无事件 1SOF包传输完成触发。 USB总线挂起或唤醒事件中断标志位写 1清零 2 RB_UIF_SUSPEND RW 0 0无事件 1USB挂起事件或唤醒事件触发。 USB传输完成中断标志位写1清零 1 RB_UIF_TRANSFER RW 0无事件 0 1一个USB传输完成触发。 USB 主机模式下 USB 设备连接或断开事 件中断标志位写1清零 RB_UIF_DETECT RW 0 0无事件 1检测到USB设备连接或断开触发。 0 USB 设备模式下 USB 总线复位事件中断 标志位写1清零 RB_UIF_BUS_RST RW 0 0无事件 1USB总线复位事件触发。 23.2.1.6 USB 中断状态寄存器R8_USB_INT_ST V2.4 347

Page 351

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 USB 设备模式下NAK 响应状态位,同 RB_U_IS_NAK 7 RB_UIS_IS_NAK RO 0 0无NAK响应 1当前USB传输过程中回应NAK。 当前 USB 传输 DATA0/1 同步标志匹配状 态位同RB_U_TOG_OK 6 RB_UIS_TOG_OK RO 0 0不同步 1同步。 设备模式下,当前 USB 传输事务的令牌 [5:4] MASK_UIS_TOKEN RO x PID标识。 设备模式下,当前 USB 传输事务的端点 MASK_UIS_ENDP RO x 号。 [3:0] 主机模式下,当前 USB 传输事务的应答 MASK_UIS_H_RES RO PID标识0000表示设备无应答或超时 x 其它值表示应答PID。 MASK_UIS_TOKEN 用于 USB设备模式下标识当前 USB传输事务的令牌 PID00表示 OUT包01保 留10表示IN包11表示SETUP包。 MASK_UIS_H_RES 仅在主机模式下有效。在主机模式下,若主机发送 OUT/SETUP 令牌包时,则该 PID 是握手包 ACK/NAK/STALL或是设备无应答/超时。若主机发送 IN 令牌包,则该 PID是数据包的 PIDDATA0/DATA1或握手包PID。 23.2.1.7 USB 接收长度寄存器R16_USB_RX_LEN 位 名称 访问 描述 复位值 [15:10] Reserved RO 保留 0 [9:0] R16_USB_RX_LEN RO 当前USB端点接收的数据字节数 x 23.2.1.8 USB OTG 控制寄存器R32_USB_OTG_CR 位 名称 访问 描述 复位值 [31:6] Reserved RO 保留 0 OTG会话有效阈值电压设置 5 RB_CR_SESS_VTH RW 0SESS_VLD电平为0.8V 0 1SESS_VLD电平为1.4V。 OTG VBUS阈值电压设置 4 RB_CR_VBUS_VTH RW 0VBUS_VLD电平为4.8V 0 1VBUS_VLD电平为4.4V。 OTG功能使能 3 RB_CR_OTG_EN RW 0禁止 0 1使能。 USB_OTG_ID引脚上拉使能 2 RB_CR_IDPU RW 0禁止 0 1使能。 OTG VBUS充电使能 1 RB_CR_CHARGE_VBUS RW 0 0禁止 V2.4 348

Page 352

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1使能。 OTG VBUS放电使能 0 RB_CR_DISCHAR_VBUS RW 0禁止 0 1使能。 注此寄存器仅适用于CH32V305、CH32V307、CH32F205和CH32F207。 23.2.1.9 USB OTG 状态寄存器R32_USB_OTG_SR 位 名称 访问 描述 复位值 [31:4] Reserved RO 保留 0 OTG ID标志 3 RB_SR_ID_DIG RO 0A设备 0 1B设备。 OTG 会话结束有效标志 2 RB_SR_SESS_END RO 0无效 0 1有效。 OTG 会话有效标志 1 RB_SR_SESS_VLD RO 0无效会话有效电平小于阈值电压 0 1有效会话有效电平大于阈值电压。 OTG VBUS输入电平 0 RB_SR_VBUS_VLD RO 0VBUS电压小于阈值电压 X 1VBUS电压大于阈值电压。 注此寄存器仅适用于CH32V305、CH32V307、CH32F205和CH32F207。 23.2.2 设备寄存器描述 USB OTG模块在USB设备模式下提供了端点号0-7共8组双向端点配置寄存器可映射端点号 8-15的配置除3号端点外所有端点最大包长度为64字节3号端点的最大数据包长度都是1023字 节(同步传输)。  端点0是默认端点支持控制传输发送和接收共用一个64字节数据缓冲区  端点1-15可配置独立的64字节发送和接收缓冲区或者双64字节数据缓冲区支持批量传输、 中断传输和实时/同步传输。 每组端点都具有一个控制寄存器R8_UEPn_CTRL和发送长度寄存器R16_UEPn_T_LEN用于设定该 端点的同步触发位、对OUT事务和IN事务的响应以及发送数据的长度等。 USB OTG模块主机和设备的角色由OTG_FS_ID引脚状态决定当OTG_FS_ID引脚悬空其内置的 上拉电阻会使得USB OTG状态寄存器R32_USB_OTG_SR的RB_SR_ID_DIG位置1此时控制器应初始化 为B设备。当OTG_FS_ID引脚接地此时USB OTG状态寄存器R32_USB_OTG_SR的RB_SR_ID_DIG位为 0控制器应初始化为A设备。 B 设备在开始会话根据 OTG 状态寄存器 R32_USB_OTG_SR 的 RB_SR_SESS_VLD 来确保 VBUS 的电平 低于V 若该位为0则可开始新的会话。若该位为1则可将OTG控制寄存器R32_USB_OTG_CR SESS_VLD,min 的RB_CR_DISCHAR_VBUS位置1进行放电使得VBUS小于会话阈值电平。 作为B类设备时需从VBUS取电则外部需一个转换电路如图23-1所示。 V2.4 349

Page 353

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图23-1 OTG B类设备连接图 VDD 5V to VDD 转换电路 CH32V205xx/CH32V207xx CH32F205xx/CH32F207xx VBUS DM OSC_IN DP GND OSC_OUT V2.4 350 口接B-orciMBSU PA9 PA11 PA12 作为 USB 设备所必要的 USB 总线上拉电阻可以由软件随时设置是否启用,当 USB 控制寄存器 R8_USB_CTRL中的RB_UC_DEV_PU_EN置1时控制器根据RB_UD_LOW_SPEED的速度设置在内部为USB 总线的DP/DM引脚连接上拉电阻并启用USB设备功能。 当检测到USB总线复位、USB总线挂起或唤醒事件或当USB成功处理完数据发送或数据接收后 USB协议处理器都将设置相应的中断标志如果中断使能打开还会产生相应的中断请求。应用程序 可以直接查询或在 USB 中断服务程序中查询并分析中断标志寄存器 R8_USB_INT_FG根据 RB_UIF_BUS_RST和RB_UIF_SUSPEND进行相应的处理并且如果RB_UIF_TRANSFER有效那么还需 要继续分析 USB 中断状态寄存器 R8_USB_INT_ST根据当前端点号 MASK_UIS_ENDP 和当前事务令牌 PID 标识 MASK_UIS_TOKEN 进行相应的处理。如果事先设定了各个端点的 OUT 事务的同步触发位 RB_UEP_R_TOG那么可以通过RB_U_TOG_OK或RB_UIS_TOG_OK判断当前所接收到的数据包的同步触发 位是否与该端点的同步触发位匹配,如果数据同步,则数据有效;如果数据不同步,则数据应该被丢 弃。每次处理完USB发送或接收中断后都应该正确修改相应端点的同步触发位用于下次所发送的 数据包或下次所接收的数据包是否同步检测另外设置RB_UEP_T_AUTO_TOG或RB_UEP_R_AUTO_TOG 可以实现在发送成功或接收成功后自动翻转相应的同步触发位。 各个端点准备发送的数据在各自的缓冲区中准备发送的数据长度是独立设定在R8_UEPn_T_LEN 中;各个端点接收到的数据在各自的缓冲区中,但是接收到的数据长度都在 USB 接收长度寄存器 R8_USB_RX_LEN中可以在USB接收中断时根据当前端点号区分。 表23-3 设备相关寄存器列表 名称 访问地址 描述 复位值 R8_UDEV_CTRL 0x50000001 USB设备物理端口控制寄存器 0xX0 端点19/48/12模式控制寄 R8_UEP4_1_MOD 0x5000000C 0x00 存器 端点210/311模式控制寄存 R8_UEP2_3_MOD 0x5000000D 0x00 器 端点513/614模式控制寄存 R8_UEP5_6_MOD 0x5000000E 0x00 器 R8_UEP7_MOD 0x5000000F 端点715模式控制寄存器 0x00

Page 354

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R32_UEP0_DMA 0x50000010 端点0缓冲区起始地址 0xXXXXXXXX R32_UEP1_DMA 0x50000014 端点19缓冲区起始地址 0xXXXXXXXX R32_UEP2_DMA 0x50000018 端点210缓冲区起始地址 0xXXXXXXXX R32_UEP3_DMA 0x5000001C 端点311缓冲区起始地址 0xXXXXXXXX R32_UEP4_DMA 0x50000020 端点48/12缓冲区起始地址 0xXXXXXXXX R32_UEP5_DMA 0x50000024 端点513缓冲区起始地址 0xXXXXXXXX R32_UEP6_DMA 0x50000028 端点614缓冲区起始地址 0xXXXXXXXX R32_UEP7_DMA 0x5000002C 端点715缓冲区起始地址 0xXXXXXXXX R8_UEP0_T_LEN 0x50000030 端点0发送长度寄存器 0xXX R8_UEP0_TX_CTRL 0x50000032 端点0发送控制寄存器 0x00 R8_UEP0_RX_CTRL 0x50000033 端点0接收控制寄存器 0x00 R8_UEP1_T_LEN 0x50000034 端点19发送长度寄存器 0xXX R8_UEP1_TX_CTRL 0x50000036 端点19发送控制寄存器 0x00 R8_UEP1_RX_CTRL 0x50000037 端点19接收控制寄存器 0x00 R8_UEP2_T_LEN 0x50000038 端点210发送长度寄存器 0xXX R8_UEP2_TX_CTRL 0x5000003A 端点210发送控制寄存器 0x00 R8_UEP2_RX_CTRL 0x5000003B 端点210接收控制寄存器 0x00 R8_UEP3_T_LEN 0x5000003C 端点311发送长度寄存器 0xXX R8_UEP3_TX_CTRL 0x500003E 端点311发送控制寄存器 0x00 R8_UEP3_RX_CTRL 0x500003F 端点311接收控制寄存器 0x00 R8_UEP4_T_LEN 0x50000040 端点48/12发送长度寄存器 0xXX R8_UEP4_TX_CTRL 0x50000042 端点48/12发送控制寄存器 0x00 R8_UEP4_RX_CTRL 0x50000043 端点48/12接收控制寄存器 0x00 R8_UEP5_T_LEN 0x50000044 端点513发送长度寄存器 0xXX R8_UEP5_TX_CTRL 0x50000046 端点513发送控制寄存器 0x00 R8_UEP5_RX_CTRL 0x50000047 端点513接收控制寄存器 0x00 R8_UEP6_T_LEN 0x50000048 端点614发送长度寄存器 0xXX R8_UEP6_TX_CTRL 0x5000004A 端点614发送控制寄存器 0x00 R8_UEP6_RX_CTRL 0x5000004B 端点614接收控制寄存器 0x00 R8_UEP7_T_LEN 0x5000004C 端点715发送长度寄存器 0xXX R8_UEP7_TX_CTRL 0x5000004E 端点715发送控制寄存器 0x00 R8_UEP7_RX_CTRL 0x5000004F 端点715接收控制寄存器 0x00 23.2.2.1 USB 设备物理端口控制寄存器R8_UDEV_CTRL 位 名称 访问 描述 复位值 USB 设备端口 UD+/UD-引脚内部下拉电 阻控制位: 7 RB_UD_PD_DIS RW 0使能内部下拉 1 1禁用内部下拉。 可用于GPIO模式提供下拉电阻。 6 Reserved RO 保留。 0 当前UD+引脚状态: 5 RB_UD_DP_PIN RO 0低电平 x 1高电平。 4 RB_UD_DM_PIN RO 当前UD-引脚状态: x V2.4 351

Page 355

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0低电平 1高电平。 3 Reserved RO 保留。 0 USB设备物理端口低速模式使能位 2 RB_UD_LOW_SPEED RW 0选择12Mbps全速模式 0 1选择1.5Mbps低速模式。 1 RB_UD_GP_BIT RW USB设备模式通用标志位用户自定义。 0 USB设备物理端口使能位 0 RB_UD_PORT_EN RW 0禁用物理端口 0 1使能物理端口。 23.2.2.2 端点 19/48/12模式控制寄存器R8_UEP4_1_MOD 位 名称 访问 描述 复位值 0禁止端点19接收 7 RB_UEP1_RX_EN RW 0 1使能端点19接收OUT。 0禁止端点19发送 6 RB_UEP1_TX_EN RW 0 1使能端点19发送IN。 5 Reserved RO 保留。 0 4 RB_UEP1_BUF_MOD RW 端点19数据缓冲区模式控制位。 0 0禁止端点48/12接收 3 RB_UEP4_RX_EN RW 0 1使能端点48/12接收OUT。 0禁止端点48/12发送 2 RB_UEP4_TX_EN RW 0 1使能端点48/12发送IN。 1 Reserved RO 保留。 0 0 RB_UEP4_BUF_MOD RW 端点48/12数据缓冲区模式控制位。 0 注端点1配置选项映射端点9端点4配置选项映射端点8和12。 23.2.2.3 端点 210/311模式控制寄存器R8_UEP2_3_MOD 位 名称 访问 描述 复位值 0禁止端点311接收 7 RB_UEP3_RX_EN RW 0 1使能端点311接收OUT。 0禁止端点311发送 6 RB_UEP3_TX_EN RW 0 1使能端点311发送IN。 5 Reserved RO 保留。 0 4 RB_UEP3_BUF_MOD RW 端点311数据缓冲区模式控制位。 0 0禁止端点210接收 3 RB_UEP2_RX_EN RW 0 1使能端点210接收OUT。 0禁止端点210发送 2 RB_UEP2_TX_EN RW 0 1使能端点210发送IN。 1 Reserved RO 保留。 0 0 RB_UEP2_BUF_MOD RW 端点210数据缓冲区模式控制位。 0 注端点2配置选项映射端点10端点3配置选项映射端点11。 23.2.2.4 端点 513/614模式控制寄存器R8_UEP5_6_MOD 位 名称 访问 描述 复位值 V2.4 352

Page 356

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0禁止端点614接收 7 RB_UEP6_RX_EN RW 0 1使能端点614接收OUT。 0禁止端点614发送 6 RB_UEP6_TX_EN RW 0 1使能端点614发送IN。 5 Reserved RO 保留。 0 4 RB_UEP6_BUF_MOD RW 端点614数据缓冲区模式控制位。 0 0禁止端点513接收 3 RB_UEP5_RX_EN RW 0 1使能端点513接收OUT。 0禁止端点513发送 2 RB_UEP5_TX_EN RW 0 1使能端点513发送IN。 1 Reserved RO 保留。 0 0 RB_UEP5_BUF_MOD RW 端点513数据缓冲区模式控制位。 0 注端点5配置选项映射端点13端点6配置选项映射端点14。 23.2.2.5 端点 715模式控制寄存器R8_UEP7_MOD 位 名称 访问 描述 复位值 [7:4] Reserved RO 保留。 0 0禁止端点715接收 3 RB_UEP7_RX_EN RW 0 1使能端点715接收OUT。 0禁止端点715发送 2 RB_UEP7_TX_EN RW 0 1使能端点715发送IN。 1 Reserved RO 保留。 0 0 RB_UEP7_BUF_MOD RW 端点715数据缓冲区模式控制位。 0 注端点7配置选项映射端点15。 由 RB_UEPn_RX_EN 和RB_UEPn_TX_EN以及RB_UEPn_BUF_MOD 组合分别配置 USB端点 1-15的数据 缓冲区模式,具体参考表 23-4。其中在双 64 字节缓冲区模式下USB 数据传输时将根据 RB_UEP_TOG=0 选择前 64 字节缓冲区,根据 RB_UEPTOG=1 选择后 64 字节缓冲区,设置 RB_UEP*AUTO_TOG=1 可 实 现 自 动 切 换 。 需 要 注 意 的 是 在 同 步 传 输 时 RB_UEPn_RX_EN,RB_UEPn_TX_EN,RB_UEPn_BUF_MOD仅为1,0,00,1,0端点3支持最大 1023字节。 表23-4 端点n缓冲区模式n=1-7 RB_UEPn RB_UEPn_ RB_UEPn_ 描述以R16_UEPn_DMA为起始地址由低向高排列 RX_EN TX_EN BUF_MOD 0 0 X 端点被禁用未用到R16_UEPn_DMA缓冲区。 1 0 0 单64字节接收缓冲区OUT。 1 0 1 双64字节接收缓冲区OUT由RB_UEP_R_TOG选择。 0 1 0 单64字节发送缓冲区IN。 0 1 1 双64字节发送缓冲区IN由RB_UEP_T_TOG选择。 1 1 0 单64字节接收缓冲区OUT单64字节发送缓冲区IN。 双64字节接收缓冲区OUT通过RB_UEP_R_TOG选择 双64字节发送缓冲区IN通过RB_UEP_T_TOG选择。 1 1 1 全部256字节排列如下 UEPn_DMA+0地址RB_UEP_R_TOG=0时端点接收地址 UEPn_DMA+64地址RB_UEP_R_TOG=1时端点接收地址 V2.4 353

Page 357

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn UEPn_DMA+128地址RB_UEP_T_TOG=0时端点发送地址 UEPn_DMA+192地址RB_UEP_T_TOG=1时端点发送地址。 注表21-4的配置选择支持n=1-7端点8-15配置映射端点1-7配置。 23.2.2.6 端点 n 缓冲区起始地址R32_UEPn_DMAn=0-7 位 名称 访问 描述 复位值 端点n缓冲区起始地址。 [31:0] R32_UEPn_DMA RW x 地址必须4字节对齐。 注1.接收数据的缓冲区的长度 >= min可能收到的最大数据包长度 + 2字节64字节。 2.端点DMA配置支持0-7端点可映射配置端点8-15端点。 23.2.2.7 端点 n 发送长度寄存器R16_UEPn_T_LENn=0-7 位 名称 访问 描述 复位值 [9:0] R8_UEP3_T_LEN RW 设置USB端点3准备发送的数据字节数。 x 设置 USB 端点 n 准备发送的数据字节数 [7:0] R8_UEPn_T_LEN RW x n=0124567。 注1.端点发送长度配置支持0-7端点可映射配置8-15端点的发送。 2.主机发送支持最大1023字节针对同步端点 23.2.2.8 端点 n 控制寄存器R8_UEPn_TX_CTRLn=0-7 位 名称 访问 描述 复位值 [7:4] Reserved RO 保留。 0 同步触发位自动翻转使能控制位: 0不自动翻转可以手动切换 3 RB_UEP_T_AUTO_TOG RW 1数据发送成功后自动翻转相应的同步 0 触发位。 注端点0此位保留。 USB端点n的发送器处理IN事务准 备的同步触发位: 2 RB_UEP_T_TOG RW 0 0发送DATA0 1发送DATA1。 端点n的发送器对IN事务的响应控制 00DATA0/DATA1数据就绪并期望ACK 01应答 DATA0/DATA1 并期望无响应, [1:0] MASK_UEP_T_RES RW 00b 用于非端点0的实时/同步传输; 10应答NAK或忙 11应答STALL或错误。 注端点配置支持0-7端点可映射配置端点8-15端点。 23.2.2.9 端点 n 控制寄存器R8_UEPn_RX_CTRLn=0-7 位 名称 访问 描述 复位值 [7:4] Reserved RO 保留。 0 同步触发位自动翻转使能控制位: 3 RB_UEP_R_AUTO_TOG RW 0不自动翻转可以手动切换 0 1数据接收成功后自动翻转相应的同步 V2.4 354

Page 358

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 触发位。 注端点0此位保留。 USB 端点 n 的接收器(处理 OUT 事务) 期望的同步触发位: 2 MASK_UEP_R_TOG RW 0 0期望DATA0 1期望DATA1。 端点n的接收器对OUT事务的响应控制 00应答ACK 01超时/无响应用于非端点0的实时 [1:0] MASK_UEP_R_RES RW 00b /同步传输; 10应答NAK或忙 11应答STALL或错误。 注端点配置支持0-7端点可映射配置端点8-15端点。 23.2.3 USB 主机寄存器 在USB OTG主机模式下芯片提供了一组双向主机端点包括一个发送端点OUT和一个接收端点 IN一个数据包的最大长度是1023字节支持控制传输、中断传输、批量传输和实时/同步传输。 在USB OTG主机模式下若控制器不能为VUBS提供5V电源则需外接电荷泵若应用板能提供5V 电源则可采用模拟开关控制VBUS的打开和关断如图23-2所示。 图23-2 OTG 的A类设备连接 5V VDD 5V to VDD 转换电路 CH32V205xx/CH32V207xx CH32F205xx/CH32F207xx 5V_in EN GPIO 模拟开关 5V_out VBUS DM OSC_IN DP ID GND OSC_OUT V2.4 355 口接A-orciMBSU PA9 PA11 PA12 PA10 主机端点发起的每一个USB事务在处理结束后总是自动设置RB_UIF_TRANSFER中断标志。应用 程序可以直接查询或在USB中断服务程序中查询并分析中断标志寄存器R8_USB_INT_FG根据各中断 标志分别进行相应的处理并且如果RB_UIF_TRANSFER有效那么还需要继续分析USB中断状态寄 存器R8_USB_INT_ST根据当前USB传输事务的应答PID标识MASK_UIS_H_RES进行相应的处理。 如果事先设定了主机接收端点的 IN 事务的同步触发位RB_UH_R_TOG那么可以通过 RB_U_TOG_OK或RB_UIS_TOG_OK判断当前所接收到的数据包的同步触发位是否与主机接收端点的同步 触发位匹配如果数据同步则数据有效如果数据不同步则数据应该被丢弃。每次处理完USB发

Page 359

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 送或接收中断后,都应该正确修改相应主机端点的同步触发位,用于同步下次所发送的数据包和检测 下次所接收的数据包是否同步;另外,通过设置 RB_UH_T_AUTO_TOG 和 RB_UH_R_AUTO_TOG 可以实现 在发送成功或接收成功后自动翻转相应的同步触发位。 USB主机令牌设置寄存器R8_UH_EP_PID用于设置被操作的目标设备的端点号和本次USB传输事 务的令牌PID包标识。SETUP令牌和OUT令牌所对应的数据由主机发送端点提供准备发送的数据 在R16_UH_TX_DMA缓冲区中准备发送的数据长度设置在R16_UH_TX_LEN中IN令牌所对应数据由 目标设备返回给主机接收端点接收到数据存放R16_UH_RX_DMA缓冲区中接收到的数据长度存放 在R16_USB_RX_LEN中主机端点可接收的最大包长度需要提前写入到R16_UH_RX_MAX_LEN寄存器 中。 表23-5 主机相关寄存器列表 名称 访问地址 描述 复位值 R8_UHOST_CTRL 0x50000001 USB主机物理端口控制寄存器 0xX0 R32_UH_EP_MOD 0x5000000D USB主机端点模式控制寄存器 0x00 R16_UH_RX_DMA 0x50000018 USB主机接收缓冲区起始地址 X R16_UH_TX_DMA 0x5000001C USB主机发送缓冲区起始地址 X R16_UH_SETUP 0x50000036 USB主机辅助设置寄存器 0x00 R8_UH_EP_PID 0x50000038 USB主机令牌设置寄存器 0x00 R8_UH_RX_CTRL 0x5000003B USB主机接收端点控制寄存器 0x00 R16_UH_TX_LEN 0x5000003C USB主机发送长度寄存器 X R8_UH_TX_CTRL 0x5000003E USB主机发送端点控制寄存器 0x00 23.2.3.1 USB 主机物理端口控制寄存器R8_UHOST_CTRL 位 名称 访问 描述 复位值 USB 主机端口 UD+/UD-引脚内部下拉电 阻控制位: 7 RB_UH_PD_DIS RW 0使能内部下拉 1 1禁用内部下拉。 可用于GPIO模式提供下拉电阻。 6 Reserved RO 保留。 0 当前UD+引脚状态: 5 RB_UH_DP_PIN RO 0低电平 x 1高电平。 当前UD-引脚状态: 4 RB_UH_DM_PIN RO 0低电平 x 1高电平。 3 Reserved RO 保留。 0 USB主机端口低速模式使能位 2 RB_UH_LOW_SPEED RW 0选择12Mbps全速模式 0 1选择1.5Mbps低速模式。 USB主机模式总线复位控制位 1 RB_UH_BUS_RST RW 0结束输出 0 1强制输出USB总线复位。 USB主机端口使能位 0 RB_UH_PORT_EN RW 0禁用主机端口 0 1使能主机端口。 V2.4 356

Page 360

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 当USB设备断开连接时该位自动清0。 23.2.3.2 USB 主机端点模式控制寄存器R32_UH_EP_MOD 位 名称 访问 描述 复位值 7 Reserved RO 保留。 0 主机发送端点发送SETUP/OUT使能位 6 RB_UH_EP_TX_EN RW 0禁止端点发送 0 1使能端点发送。 5 Reserved RO 保留。 0 主机发送端点发送数据缓冲区模式控制 4 RB_UH_EP_TBUF_MOD RW 0 位。 主机接收端点接收IN使能位 3 RB_UH_EP_RX_EN RW 0禁止端点接收 0 1使能端点接收。 [2:1] Reserved RO 保留。 0 USB 主机接收端点接收数据缓冲区模式 0 RB_UH_EP_RBUF_MOD RW 0 控制位。 由RB_UH_EP_TX_EN和RB_UH_EP_TBUF_MOD组合控制主机发送端点数据缓冲区模式参考下表。 表23-6 主机发送缓冲区模式 RB_UH_EP_TX_EN RB_UH_EP_TBUF_MOD 描述以R16_UH_TX_DMA为起始地址 0 X 端点被禁用未用到R16_UH_TX_DMA缓冲区。 1 0 单64字节发送缓冲区SETUP/OUT。 双64字节发送缓冲区通过RB_UH_T_TOG选择 1 1 当RB_UH_T_TOG=0时选择前64字节缓冲区 当RB_UH_T_TOG=1时选择后64字节缓冲区。 由RB_UH_EP_RX_EN和RB_UH_EP_RBUF_MOD组合控制主机接收端点数据缓冲区模式参考下表。 表23-7 主机接收缓冲区模式 RB_UH_EP_RX_EN RB_UH_EP_RBUF_MOD 结构描述以R16_UH_TX_DMA为起始地址 0 X 端点被禁用未用到R16_UH_RX_DMA缓冲区。 1 0 单64字节接收缓冲区IN。 双64字节接收缓冲区通过RB_UH_R_TOG选择 1 1 当RB_UH_R_TOG=0时选择前64字节缓冲区 当RB_UH_R_TOG=1时选择后64字节缓冲区。 USB主机接收缓冲区起始地址R16_UH_RX_DMA 位 名称 访问 描述 复位值 主机端点数据接收缓冲区起始地址。 [15:0] R16_UH_RX_DMA RW x 低15位有效地址必须4字节对齐。 USB主机发送缓冲区起始地址R16_UH_TX_DMA 位 名称 访问 描述 复位值 [15:0] R16_UH_TX_DMA RW 主机端点数据发送缓冲区起始地址。 x V2.4 357

Page 361

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 低15位有效地址必须4字节对齐。 23.2.3.3 USB 主机辅助设置寄存器R16_UH_SETUP 位 名称 访问 描述 复位值 [15:11] Reserved RO 保留。 0 低速前导包PRE PID使能位 0禁用低速前导包 10 RB_UH_PRE_PID_EN RW 0 1使能用于通过外部HUB与低速USB 设备通讯。 [9:3] Reserved RO 保留。 0 自动产生SOF包使能位 2 RB_UH_SOF_EN RW 0关闭自动SOF功能 0 1主机自动产生SOF包。 [1:0] Reserved RO 保留。 0 23.2.3.4 USB 主机令牌设置寄存器R8_UH_EP_PID 位 名称 访问 描述 复位值 [7:4] MASK_UH_TOKEN RW 设置本次USB传输事务的令牌PID标识。 0 [3:0] MASK_UH_ENDP RW 设置本次被操作的目标设备的端点号。 0 23.2.3.5 USB 主机接收端点控制寄存器R8_UH_RX_CTRL 位 名称 访问 描述 复位值 [7:4] Reserved RO 保留。 0 同步触发位自动翻转使能控制位: 0手动控制同步触发位RB_UH_R_TOG 3 RB_UH_R_AUTO_TOG RW 0 1数据接收成功后自动翻转相应的期待 同步触发位RB_UH_R_TOG。 主机接收器处理IN事务准备的同步 触发位: 2 RB_UH_R_TOG RW 0应答ACK 0 1无响应用于非 0 端点的实时/同步 传输。 1 Reserved RO 保留。 0 主机接收器对IN事务的响应控制位 0应答ACK 0 RB_UH_R_RES RO 0 1无响应用于非 0 端点的实时/同步 传输。 23.2.3.6 USB 主机发送长度寄存器R16_UH_TX_LEN 位 名称 访问 描述 复位值 设置 USB 主机发送端点准备发送的数据 [15:0] R16_UH_TX_LEN RW x 字节数。 23.2.3.7 USB 主机发送端点控制寄存器R8_UH_TX_CTRL V2.4 358

Page 362

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 [7:4] Reserved RO 保留。 0 同步触发位自动翻转使能控制位: 0手动控制同步触发位RB_UH_T_TOG 3 RB_UH_T_AUTO_TOG RO 0 1数据发送成功后自动翻转相应的同步 触发位RB_UH_T_TOG。 USB主机发送器处理SETUP/OUT事务 准备的同步触发位: 2 RB_UH_T_TOG RW 0 0表示发送DATA0 1表示发送DATA1。 1 Reserved RO 保留。 0 USB 主机发送器对 SETUP/OUT 事务的响 应控制位: 0 RB_UH_T_RES RW 0期望应答ACK 0 1期望无响应用于非 0 端点的实时/ 同步传输。 V2.4 359

Page 363

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 24 章 控制器局域网CAN 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器系列部分产品。 控制器局域网是一种用于串行数据通信的高性能通信协议。CAN控制器提供了一个完整的CAN协 议实现方案,支持 CAN协议 2.0A 和 2.0B。CAN控制器可以用来构建强大的局域网来实现安全的分布 式实时控制以较小的CPU负荷来处理大量的数据报文在工业和汽车领域有着广泛的应用。 24.1 主要特性  兼容CAN规范2.0A和2.0B  可编程的传输速率最高可达1Mbit/s  支持时间触发通信功能,避免低优先级消息阻塞  支持三个发送邮箱,发送报文优先级可由报文标识符或发送请求的次序决定,并可记录发送报 文SOF时刻的时间戳  支持三级邮箱深度的2个接收FIFO28个报文过滤器组可供配置大容量产品CAN1和CAN2共 用28个过滤器每个过滤器组可配置成32或16位模式屏蔽位或标识符列表模式能够尽量减少 软件对报文筛选的干预FIFO溢出处理方式灵活并可记录接收报文SOF时刻的时间戳  占用4个中断向量每个中断源可以独立配置 24.2 CAN 控制器工作模式 CAN控制器可以对寄存器CAN_CTLR中的SLEEP或INRQ位进行操作实现在初始化模式、睡眠模 式和正常模式3个工作模式下切换。 24.2.1 初始化模式 在复位后CAN默认工作在睡眠模式以减低功耗此时禁止报文收发TX引脚的内部上拉电阻使 能TX引脚输出隐性位。对寄存器CAN_CTLR中的INRQ位置1请求CAN控制器进入初始化模式当 寄存器 CAN_STATR的INAK位自动置 1则成功进入初始化状态。同样对寄存器CAN_CTLR中的 INRQ位 清零,请求 CAN控制器退出初始化模式当寄存器CAN_STATR的 INAK位自动清 0则成功退出初始化 状态。 对过滤器组进行初始化可以在非初始化模式下进行不过必须对寄存器CAN_FCTLR的FINIT位 进行置1此时禁止接收报文。 24.2.2 睡眠模式 对寄存器 CAN_CTLR 中的 SLEEP 位置 1请求 CAN 控制器进入睡眠模式,当寄存器 CAN_STATR 的 SLAK位自动置1则CAN成功进入睡眠模式此时CAN控制器的时钟停止但邮箱寄存器仍可访问。 由睡眠模式进入初始化模式必须对CAN_CTLR的SLEEP位清0INRQ位置1当寄存器CAN_STATR的 INAK位自动置1则切换为初始化状态完成。 由睡眠模式进入正常模式必须对CAN_CTLR的SLEEP位清0当寄存器CAN_STATR的SLAK位自 动清0则进入正常模式。 V2.4 360

Page 364

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图24-1 CAN工作模式切换 Normal mode SLAK=0 INAK=0 INRQ=0 Sleep mode INRQ=1 SLEEP=0 Reset Query INAK=1 SLAK=1 Synchronous INAK=0 Initialization mode SLAK=0 INAK=1 24.3 CAN 控制器测试模式 在初始化模式下对寄存器CAN_BTIMR的SILM和LBKM位进行操作可以选择一种测试模式然 后通过对寄存器CAN_CTLR的INRQ位清零退出初始化模式进入测试模式。测试模式分为静默模式、 环回模式和静默环回模式三种。 24.3.1 静默模式 对寄存器CAN_BTIMR的SILM位置1可选择进入静默模式。该模式下CAN控制器可以接收不 能对外发送报文,对外总是处于隐性位,可以避免对总线产生影响,但是报文能够被所在节点的控制 器所接收。通常静默模式被用于CAN总线的状态分析。 24.3.2 环回模式 对寄存器CAN_BTIMR的LBKM位置1可选择进入环回模式。该模式下CAN控制器可以对外发送 报文,不能接收外部报文,但是发送报文能够被所在节点的控制器所接收,接收过滤机制有效。通常 环回模式被用于CAN控制器的收发测试。 24.3.3 静默环回模式 对寄存器CAN_BTIMR的SILM和LBKM位置1可选择进入静默环回模式。该模式通常用于CAN控 制器封闭自测试在该模式下对CAN总线无影响RX引脚与总线断开TX引脚置隐性位。 V2.4 361

Page 365

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图24-2 CAN总线的三种测试模式 Silent mode Loopback mode Silent loopback mode CAN CAN CAN Send Receive Send Receive Send Receive =1 =1 CANTX CANRX CANTX CANRX CANTX CANRX 24.4 MCU 处于调试模式下 CAN 控制器的工作状态 当MCU进入调试模式后内核处于暂停状态但可以通过调试模块中配置位来决定CAN控制器是 处于正常运行或停止状态。 24.5 CAN 控制器功能描述 24.5.1 发送处理流程 发送处理流程如下:如果三个发送邮箱中有空置的邮箱,应用层软件仅对空置邮箱的寄存器具有 写入权限,对寄存器 CAN_TXMIRx、CAN_TXMDTRx、CAN_TXMDLRx 和 CAN_TXMDHRx 进行操作,可以设置 报文标识符、报文长度、时间戳和报文数据等。在数据准备好之后对寄存器CAN_TXMIRx的TXRQ位 置1请求发送邮箱进入挂号状态并进行优先级排队一旦成为最高优先级邮箱则变为预定发送 状态等待CAN总线空闲当CAN总线空闲时预定发送邮箱的报文立刻进入发送状态报文发送完 毕后邮箱重新成为空置邮箱并且寄存器CAN_TSTATR的RQCP和TXOK位置1来指示发送成功若 发送时仲裁失败寄存器CAN_TSTATR的ALST位置1若发送错误则TERR位置1。 24.5.2 发送优先级 发送优先级可以由标识符或发送请求先后次序决定寄存器CAN_CTLR的TXFP位置1按发送请求 先后次序发送按发送请求先后次序主要应用于分段发送TXFP 位清 0 按标识符优先级决定发送次 序,标识符越小则优先级越高,同标识符的情况下,则低编号的邮箱有更高优先级。 24.5.3 发送中止处理 若对寄存器CAN_TSTATR的ABRQ位置1则可以中止发送请求。当邮箱状态为挂号或预定发送状 态时,发送请求直接中止;当邮箱处于发送状态时,中止请求可能会成功(停止发送),也有可能会 失败发送完成结果可由寄存器CAN_TSTATR的TXOK位来查询。 24.5.4 基于时间触发模式 传统的CAN通信总线繁忙时容易造成低优先级的消息长时间阻塞甚至无法满足其时限的要求。 为了解决该瓶颈,推出了基于时间触发模式的相关协议,此类协议在工业上有一定规模的应用,基于 时间触发模式的功能即为配合此类协议的应用。 在时间触发模式下有两种模式可供选择使用该模式需关闭自动重传功能通过配置CAN_TTCTLR 寄存器的MODE位来选择默认模式和增强模式。对寄存器CAN_CTLR的TTCM和NART位置1使能时间 触发模式并禁止自动重传CAN_TTCTLR 寄存器的 MODE 位默认为 0此时工作在默认模式内部定时 器被激活用来产生发送和接收邮箱的时间戳定时器在CAN位时间累加内部定时器在接收和发送的 V2.4 362

Page 366

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 帧起始位的采样点位置被采样并产生时间戳。若使用增强模式需要将配置CAN_TTCTLR寄存器的MODE 位为1来开启增强模式使用该模式在整个CAN网络中必须存在三个或三个以上的节点其中 一个节点发送时间基准,其他节点收到该基准节点的时间戳后,通过向 CAN_TTCTLR寄存器的TIMRST 位写1复位内部计数器将内部计数器进行同步这样除了发送时间基准的节点之外其余CAN节点 实现了时间同步之后将待发送的数据写入发送邮箱依次配置各节点的时间触发计数值CAN_TTCNT 寄存器的TIMCNT和内部计数器计数终值CAN_TTCTLR寄存器TIMCMV时间触发计数值和内部计 数器计数终值由CAN节点的个数、CAN通信速率和一帧数据位数决定配置完成后各节点等待内部 计数器计数到时间触发计数值后,触发发送动作。 24.5.5 接收处理流程 CAN总线报文的接收由控制器硬件来完成无需MCU的干涉减轻了MCU的处理负荷。所接收 到的报文,根据寄存器 CAN_FAFIFOR 的设置,分别被存储到两个具有 3 级邮箱深度的 FIFO中应用 层如需获取报文只能通过接收FIFO邮箱来读取有效接收报文。 初始时,接收 FIFO为空接收 FIFO寄存器 CAN_RFIFOx的 FMR[1:0]值为二进制 00b接到一个 有效接收报文后,变为挂号 1 状态,控制器自动把接收 FIFO 寄存器 CAN_RFIFOx 的 FMR[1:0]设置二 进制 01b若此时读取邮箱数据寄存器 CAN_RXMDLRx 和 CAN_RXMDHRx通过对接收 FIFO 寄存器 CAN_RFIFOx的RFOM位置1来释放邮箱接收FIFO状态又变为空如果在挂号1状态时不释放邮箱 下一个有效接收报文被接到后接收FIFO状态切换为挂号2状态此时接收FIFO寄存器CAN_RFIFOx 的FMR[1:0]自动置二进制10b若读取邮箱数据寄存器并释放邮箱则状态回到挂号1如果在挂号 2 状态不释放邮箱,则接收 FIFO 进入挂号 3 状态;同样在挂号 3 状态下读取报文并释放邮箱,则返 回挂号2状态若在挂号3状态不释放邮箱则在接收到下一个有效报文时必然导致报文丢失情况 出现。 图24-3 接收FIFO状态切换图 Valid message Valid message Valid message Valid message Empty received Registered received Registered received Registered received Overflow 1 2 3 FMP=00b FMP=11b FMP=01b FMP=10b FMP=11b FOVR=0 Release Mailbox FOVR=0 Release Mailbox FOVR=0 Release Mailbox FOVR=0 Release Mailbox FOVR=1 RFOM=1 RFOM=1 RFOM=1 RFOM=1 Valid message received 上文中的报文丢失情况即接收FIFO为满报文溢出导致报文丢失接收FIFO寄存器CAN_RFIFOx 的 FOVR位会硬件自动置 1以供溢出查询。寄存器CAN_CTLR的 RFLM位置 1则接收 FIFO锁定功能 启用丢弃的报文为新接收报文寄存器CAN_CTLR的RFLM位清0则接收FIFO锁定功能停用接收 FIFO的三个原报文中最后接收的报文会被新报文覆盖。 当寄存器CAN_INTENR相关位置位可以使接收FIFO状态切换时产生中断以便更高效的处理接 收报文详见24.6节CAN中断。 24.5.6 接收报文标识符过滤 模块中有着多达 28 个过滤器组,通过设置过滤器组,每个 CAN 节点都可以接收到符合过滤规则 的报文,不符合过滤规则的报文被硬件丢弃,无需软件干涉。 每个过滤器组由 2个 32位寄存器 CAN_FxR0和 CAN_FxR1组成。过滤器组的位宽都可以通过设置 寄存器 CAN_FSCFGR的各个位独立配置成 1个 32位过滤器或两个 16位过滤器。每个过滤器组可通过 设置寄存器 CAN_FMCFGR 的各个位配置为屏蔽位或标识符列表模式,各个过滤器组可以通过设置寄存 器CAN_FWR的各个位选择启用或禁用。设置寄存器CAN_FAFIFOR的各个位可以把选择通过过滤器的报 文存放到哪个接收FIFO。 如下表 24-1 所示,屏蔽位模式下,两个寄存器分别为标识符寄存器和屏蔽寄存器,两者需要配 V2.4 363

Page 367

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 合使用,标识符寄存器每一位指示相应的位期望值为显性或隐性,屏蔽寄存器每一位指示相应位是否 需要对应标识符寄存器位期望值一致。 表24-1 32位屏蔽位模式 标识符寄存 CAN_FxR1[31:24] CAN_FxR1[23:16] CAN_FxR1[15:8] CAN_FxR1[7:0] 器 屏蔽位寄存 CAN_FxR2[31:24] CAN_FxR2[23:16] CAN_FxR2[15:8] CAN_FxR2[7:0] 器 映射 STID[10:3] STID[2:0] EXID[17:13] EXID[12:5] EXID[4:0] IDE RTR 0 标识符列表模式下,两个寄存器都被用作标识符寄存器,接收报文标识符必须与其中一个寄存器 保持一致才能通过筛选。 表24-2 32位标识符列表模式 标识符寄存 CAN_FxR1[31:24] CAN_FxR1[23:16] CAN_FxR1[15:8] CAN_FxR1[7:0] 器 屏蔽位寄存 CAN_FxR2[31:24] CAN_FxR2[23:16] CAN_FxR2[15:8] CAN_FxR2[7:0] 器 映射 STID[10:3] STID[2:0] EXID[17:13] EXID[12:5] EXID[4:0] IDE RTR 0 在 16 位模式下,寄存器组被拆分成四个寄存器,屏蔽位模式每组过滤器的屏蔽位模式可以有 2 个过滤器每个过滤器里各包含一个16位标识符寄存器和16位屏蔽寄存器标识符列表模式下四个 寄存器都用作标识符寄存器。 表24-3 16位屏蔽位模式 标识符寄存器n CAN_FxR1[15:8] CAN_FxR1[7:0] 屏蔽位寄存器n CAN_FxR1[31:24] CAN_FxR1[23:16] 标识符寄存器n+1 CAN_FxR2[15:8] CAN_FxR2[7:0] 屏蔽位寄存器n+1 CAN_FxR2[31:24] CAN_FxR2[23:16] 映射 STID[10:3] STID[2:0] RTR IDE EXID[17:15] 表24-4 16位标识符列表模式 标识符寄存器n CAN_FxR1[15:8] CAN_FxR1[7:0] 屏蔽位寄存器n CAN_FxR1[31:24] CAN_FxR1[23:16] 标识符寄存器n+1 CAN_FxR2[15:8] CAN_FxR2[7:0] 屏蔽位寄存器n+1 CAN_FxR2[31:24] CAN_FxR2[23:16] 映射 STID[10:3] STID[2:0] RTR IDE EXID[17:15] 报文进入 FIFO 邮箱中,会被应用程序读取并存放,通常应用程序根据报文标识符来区分报文数 据。CAN控制器对接收FIFO中通过不同过滤器筛选的报文提供了过滤器编号编号被存放在寄存器 CAN_RXMDTRx的FMI[7:0]中编号时不考虑过滤器组是否启用。编号规则详见图24-4的示例。 当出现某个报文能通过多个过滤器的过滤,则接收邮箱中存放的过滤器编号根据过滤器优先级规 则来决定存放哪个过滤器的编号,过滤器优先级规则如下:  所有32位的过滤器优先级均高于16位的过滤器  对于同样宽度的过滤器,标识符列表的过滤器优先级高于屏蔽位模式的过滤器  宽度和模式都一致的过滤器,编号小的过滤器优先级更高 如图24-5所示在接收报文时先把标识符与32位标识符列表模式过滤器进行匹配筛选没有 匹配再与32位屏蔽位模式过滤器进行匹配筛选没有匹配则继续与16位标识符列表模式过滤器进行 V2.4 364

Page 368

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 匹配筛选没有匹配最后与16位屏蔽位模式过滤器进行匹配筛选最后如果都没有匹配则丢弃报文 出现匹配则报文存入接收FIFO的邮箱标识符编号存入寄存器CAN_RXMDTRx的FMI中。 图24-4 过滤器编号的示例 Filter group Filter Filter group Filter FIFO0 FIFO1 number number number number 0 0 32-bit shield mode 0 1 16-bit list mode 1 2 3 1 2 16-bit list mode 2 4 16-bit shield mode 4 3 5 4 3 32-bit list mode 5 6 32-bit list mode 6 6 7 Disabled 16-bit 5 shield Mode 7 8 9 32-bit shield mode 8 7 32-bit shield mode 9 11 Disabled 16-bit 9 shield Mode 10 8 32-bit list mode 10 12 32-bit list mode 11 11 12 10 16-bit shield mode 12 13 32-bit list mode 13 13 14 图24-5 过滤器过滤示例 Messages received identifier Control Data List filter 0 List filter 1 32-bit List filter 7 Passed the screening filter List filter 8 Save Shield filter 2 messages Shield filter 11 Save the number to FMI. List filter 3 List filter 4 16-bit List filter 5 filter List filter 6 Shield filter 9 Shield filter 10 No match, discard message 24.5.7 出错处理 CAN控制器依靠状态错误寄存器CAN_ERRSR对于总线上的出错管理。状态错误寄存器CAN_ERRSR 里的TEC和REC分别代表发送和接收错误计数值根据随着收发错误的增加而增加收发成功而减 V2.4 365

Page 369

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn可以根据它们的值来判断CAN总线的稳定性。 当状态错误寄存器CAN_ERRSR里的TEC和REC小于128时当前CAN节点处于错误主动状态可 以正常参与总线通信,并且在侦测到错误的时候发出主动错误标志。 当状态错误寄存器CAN_ERRSR里的TEC和REC大于127时当前CAN节点处于错误被动状态并 且在侦测到错误的时候不允许发出主动错误标志,只能发出被动错误标志。 当状态错误寄存器CAN_ERRSR里的TEC大于255时当前CAN节点进入离线状态。 当总线监测到 128 次出现 11 个连续的隐性位时,恢复到错误主动状态,该恢复方式受主控制寄 存器 CAN_CTLR里的 ABOM位影响。若 ABOM置 1则硬件自动退出离线状态。若 ABOM为 0则需要软 件操作INRQ位进入初始化模式随后退出初始化才能退出离线状态。 图24-6 CAN错误状态切换图 When TEC or REC>127 Error active Error passive status state When TEC or REC<128 When TEC> When the bus 255 appears 128 times, 11 recessive bits Offline status 24.5.8 位时序 按照CAN总线的标准将每一位时间分为四段分别为同步段、传播时间段、相位缓冲段1和相 位缓冲段2。这些段由最小时间单元Tq组成。CAN控制器通过采样来监测CAN总线变化通过帧起始 位的边沿进行同步 CAN控制器把上述四段重新划分为三段分别为  同步段SS也就是CAN标准里的同步段固定为1个最小时间单元正常情况下所期望的 位跳变发生在本时间段内。  时间段1BS1包含CAN标准里的传播时间段和相位缓冲段1可以被设置为包含1到16最 小时间单元可以被自动延长用于补偿CAN总线上不同节点频率精度误差带来的相位正向漂移。 该时间段结束为采样点位置。  时间段2BS2也就是CAN标准里的相位缓冲段2可以被设置为1到8个最小时间单元 可以被自动缩短以补偿CAN总线上不同节点频率精度误差带来的相位负向漂移。 重新同步跳转宽度SJW是每位中可以延长和缩小的最小时间单元数量上限范围可设置为1 到4个最小时间单元。 上述参数都可以在CAN总线时序寄存器CAN_BTIMR里配置。 V2.4 366

Page 370

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图24-7 跳变出现在BS1中 Before adjustment: SS BS1 BS2 SS After adjustment: SS BS1 BS2 SS 如图24-7SJW为2总线电平跳变在时间段1被检测到则需要延长时间段1的长度最大延 长SJW从而延迟采样点的位置。 图24-8 跳变出现在BS2中 Before adjustment: BS2 SS BS1 BS2 After adjustment: BS2 SS BS1 BS2 SS 如图24-8SJW为2总线电平跳变在时间段2被检测到则需要缩小时间段2的长度最大缩 小SJW从而提前采样点的位置。 CAN波特率计算公式为 tpclk1 这里tpclk1为PCBA1N时bp钟s周=期BRP[9:0]、TS1[3:0]、TS2[2:0]为CANx_BTIMR寄存器对应位。 TS1[3:0]+1+TS2[2:0]+1+1 ×BRP[9:0] 24.6 CAN 中断 CAN 控制器有四个中断向量分别为发送中断、FIFO_0 中断、FIFO_1 中断、错误及状态变化中 断。 设置CAN中断允许寄存器CAN_INTENR可以允许或禁用各个中断源。 发送中断由发送邮箱变空事件产生,中断产生后,查询寄存器 CAN_TSTATR 的 RQCP0、RQCP1 和 RQCP2位来判断是哪个邮箱变空事件产生。 FIFO0中断由接收新报文、接收邮箱变满和溢出事件产生中断产生后查询寄存器CAN_RFIFO0 的FMP0、FULL0和FOVER0位来判断是哪个邮箱变空事件产生。 FIFO1中断由接收新报文、接收邮箱变满和溢出事件产生中断产生后查询寄存器CAN_RFIFO1 的FMP1、FULL1和FOVER1位来判断是哪个邮箱变空事件产生。 V2.4 367

Page 371

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 错误及状态变化中断由出错、唤醒和睡眠事件产生。 图24-9 CAN中断逻辑图 R32_CAN_INTENR Send interrupt RQCP0 TMEIE R32_CAN_TSTART RQCP1 RQCP2 FMPIE0 FMP0 FIFO0 interrupts FFIE0 R32_CAN_RFIF00 FULL0 FOVIE0 FOVR0 FMPIE1 FMP1 FIFO1 interrupts FFIE1 R32_CAN_RFIF01 FULL1 FOVIE1 FOVR1 ERRIE EWGIE EWGF EPVIE EPVF R32_CAN_ERRSR ERRI BOFIE BOFF R32_CAN_STATR LECIE Status change 1≤LEC≤6 error interrupt WKUIE WKUI R32_CAN_STATR SLKIE SLAKI 24.7 寄存器描述 CAN 控制器相关的寄存器必须用 32 位字的方式来操作。为了避免当前节点对整个 CAN 总线的影 响所以应用软件只能在初始化模式下修改位时序寄存器CAN_BTIMR。 表24-5 CAN1相关寄存器列表 名称 访问地址 描述 复位值 R32_CAN1_CTLR 0x40006400 CAN1主控制寄存器 0x00010002 R32_CAN1_STATR 0x40006404 CAN1主状态寄存器 0x00000X02 R32_CAN1_TSTATR 0x40006408 CAN1发送状态寄存器 0x1C000000 R32_CAN1_RFIFO0 0x4000640C CAN1接收FIFO0控制和状态寄存器 0x00000000 R32_CAN1_RFIFO1 0x40006410 CAN1接收FIFO1控制和状态寄存器 0x00000000 R32_CAN1_INTENR 0x40006414 CAN1中断使能寄存器 0x00000000 V2.4 368

Page 372

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R32_CAN1_ERRSR 0x40006418 CAN1错误状态寄存器 0x00000000 R32_CAN1_BTIMR 0x4000641C CAN1位时序寄存器 0x01230000 R32_CAN1_TTCTLR 0x40006420 CAN1时间触发控制寄存器 0x0000FFFF R32_CAN1_TTCNT 0x40006424 CAN1时间触发计数值寄存器 0x00000000 表24-6 CAN2相关寄存器列表 名称 访问地址 描述 复位值 R32_CAN2_CTLR 0x40006800 CAN2主控制寄存器 0x00010002 R32_CAN2_STATR 0x40006804 CAN2主状态寄存器 0x00000X02 R32_CAN2_TSTATR 0x40006808 CAN2发送状态寄存器 0x1C000000 R32_CAN2_RFIFO0 0x4000680C CAN2接收FIFO0控制和状态寄存器 0x00000000 R32_CAN2_RFIFO1 0x40006810 CAN2接收FIFO1控制和状态寄存器 0x00000000 R32_CAN2_INTENR 0x40006814 CAN2中断使能寄存器 0x00000000 R32_CAN2_ERRSR 0x40006818 CAN2错误状态寄存器 0x00000000 R32_CAN2_BTIMR 0x4000681C CAN2位时序寄存器 0x01230000 R32_CAN2_TTCTLR 0x40006820 CAN2时间触发控制寄存器 0x0000FFFF R32_CAN2_TTCNT 0x40006824 CAN2时间触发计数值寄存器 0x00000000 表24-7 CAN1邮箱相关寄存器列表 复位 名称 访问地址 描述 值 R32_CAN1_TXMIR0 0x40006580 CAN1发送邮箱0标识符寄存器 X R32_CAN1_TXMDTR0 0x40006584 CAN1发送邮箱0数据长度和时间戳寄存器 X R32_CAN1_TXMDLR0 0x40006588 CAN1发送邮箱0低字节数据寄存器 X R32_CAN1_TXMDHR0 0x4000658C CAN1发送邮箱0高字节数据寄存器 X R32_CAN1_TXMIR1 0x40006590 CAN1发送邮箱1标识符寄存器 X R32_CAN1_TXMDTR1 0x40006594 CAN1发送邮箱1数据长度和时间戳寄存器 X R32_CAN1_TXMDLR1 0x40006598 CAN1发送邮箱1低字节数据寄存器 X R32_CAN1_TXMDHR1 0x4000659C CAN1发送邮箱1高字节数据寄存器 X R32_CAN1_TXMIR2 0x400065A0 CAN1发送邮箱2标识符寄存器 X R32_CAN1_TXMDTR2 0x400065A4 CAN1发送邮箱2数据长度和时间戳寄存器 X R32_CAN1_TXMDLR2 0x400065A8 CAN1发送邮箱2低字节数据寄存器 X R32_CAN1_TXMDHR2 0x400065AC CAN1发送邮箱2高字节数据寄存器 X R32_CAN1_RXMIR0 0x400065B0 CAN1接收FIFO0邮箱标识符寄存器 X CAN1 接收 FIFO0 邮箱数据长度和时间戳寄存 R32_CAN1_RXMDTR0 0x400065B4 X 器 R32_CAN1_RXMDLR0 0x400065B8 CAN1接收FIFO0邮箱低字节数据寄存器 X R32_CAN1_RXMDHR0 0x400065BC CAN1接收FIFO0邮箱高字节数据寄存器 X R32_CAN1_RXMIR1 0x400065C0 CAN1接收FIFO1邮箱标识符寄存器 X CAN1 接收 FIFO1 邮箱数据长度和时间戳寄存 R32_CAN1_RXMDTR1 0x400065C4 X 器 R32_CAN1_RXMDLR1 0x400065C8 CAN1接收FIFO1邮箱低字节数据寄存器 X R32_CAN1_RXMDHR1 0x400065CC CAN1接收FIFO1邮箱高字节数据寄存器 X V2.4 369

Page 373

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 表24-8 CAN2邮箱相关寄存器列表 复位 名称 访问地址 描述 值 R32_CAN2_TXMIR0 0x40006980 CAN2发送邮箱0标识符寄存器 X R32_CAN2_TXMDTR0 0x40006984 CAN2发送邮箱0数据长度和时间戳寄存器 X R32_CAN2_TXMDLR0 0x40006988 CAN2发送邮箱0低字节数据寄存器 X R32_CAN2_TXMDHR0 0x4000698C CAN2发送邮箱0高字节数据寄存器 X R32_CAN2_TXMIR1 0x40006990 CAN2发送邮箱1标识符寄存器 X R32_CAN2_TXMDTR1 0x40006994 CAN2发送邮箱1数据长度和时间戳寄存器 X R32_CAN2_TXMDLR1 0x40006998 CAN2发送邮箱1低字节数据寄存器 X R32_CAN2_TXMDHR1 0x4000699C CAN2发送邮箱1高字节数据寄存器 X R32_CAN2_TXMIR2 0x400069A0 CAN2发送邮箱2标识符寄存器 X R32_CAN2_TXMDTR2 0x400069A4 CAN2发送邮箱2数据长度和时间戳寄存器 X R32_CAN2_TXMDLR2 0x400069A8 CAN2发送邮箱2低字节数据寄存器 X R32_CAN2_TXMDHR2 0x400069AC CAN2发送邮箱2高字节数据寄存器 X R32_CAN2_RXMIR0 0x400069B0 CAN2接收FIFO0邮箱标识符寄存器 X CAN2 接收 FIFO0 邮箱数据长度和时间戳寄存 R32_CAN2_RXMDTR0 0x400069B4 X 器 R32_CAN2_RXMDLR0 0x400069B8 CAN2接收FIFO0邮箱低字节数据寄存器 X R32_CAN2_RXMDHR0 0x400069BC CAN2接收FIFO0邮箱高字节数据寄存器 X R32_CAN2_RXMIR1 0x400069C0 CAN2接收FIFO1邮箱标识符寄存器 X CAN2 接收 FIFO1 邮箱数据长度和时间戳寄存 R32_CAN2_RXMDTR1 0x400069C4 X 器 R32_CAN2_RXMDLR1 0x400069C8 CAN2接收FIFO1邮箱低字节数据寄存器 X R32_CAN2_RXMDHR1 0x400069CC CAN2接收FIFO1邮箱高字节数据寄存器 X 表24-9 CAN1过滤器相关寄存器列表 名称 访问地址 描述 复位值 R32_CAN1_FCTLR 0x40006600 CAN1过滤器主控制寄存器 0x2A1C0E01 R32_CAN1_FMCFGR 0x40006604 CAN1过滤器模式寄存器 0x00000000 R32_CAN1_FSCFGR 0x4000660C CAN1过滤器位宽寄存器 0x00000000 R32_CAN1_FAFIFOR 0x40006614 CAN1过滤器FIFO关联寄存器 0x00000000 R32_CAN1_FWR 0x4000661C CAN1过滤器激活寄存器 0x00000000 R32_CAN1_F0R1 0x40006640 CAN1过滤器组0寄存器1 X R32_CAN1_F0R2 0x40006644 CAN1过滤器组0寄存器2 X R32_CAN1_F1R1 0x40006648 CAN1过滤器组1寄存器1 X R32_CAN1_F1R2 0x4000664C CAN1过滤器组1寄存器2 X R32_CAN1_F2R1 0x40006650 CAN1过滤器组2寄存器1 X R32_CAN1_F2R2 0x40006654 CAN1过滤器组2寄存器2 X R32_CAN1_F3R1 0x40006658 CAN1过滤器组3寄存器1 X R32_CAN1_F3R2 0x4000665C CAN1过滤器组3寄存器2 X R32_CAN1_F4R1 0x40006660 CAN1过滤器组4寄存器1 X R32_CAN1_F4R2 0x40006664 CAN1过滤器组4寄存器2 X R32_CAN1_F5R1 0x40006668 CAN1过滤器组5寄存器1 X V2.4 370

Page 374

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R32_CAN1_F5R2 0x4000666C CAN1过滤器组5寄存器2 X R32_CAN1_F6R1 0x40006670 CAN1过滤器组6寄存器1 X R32_CAN1_F6R2 0x40006674 CAN1过滤器组6寄存器2 X R32_CAN1_F7R1 0x40006678 CAN1过滤器组7寄存器1 X R32_CAN1_F7R2 0x4000667C CAN1过滤器组7寄存器2 X R32_CAN1_F8R1 0x40006680 CAN1过滤器组8寄存器1 X R32_CAN1_F8R2 0x40006684 CAN1过滤器组8寄存器2 X R32_CAN1_F9R1 0x40006688 CAN1过滤器组9寄存器1 X R32_CAN1_F9R2 0x4000668C CAN1过滤器组9寄存器2 X R32_CAN1_F10R1 0x40006690 CAN1过滤器组10寄存器1 X R32_CAN1_F10R2 0x40006694 CAN1过滤器组10寄存器2 X R32_CAN1_F11R1 0x40006698 CAN1过滤器组11寄存器1 X R32_CAN1_F11R2 0x4000669C CAN1过滤器组11寄存器2 X R32_CAN1_F12R1 0x400066A0 CAN1过滤器组12寄存器1 X R32_CAN1_F12R2 0x400066A4 CAN1过滤器组12寄存器2 X R32_CAN1_F13R1 0x400066A8 CAN1过滤器组13寄存器1 X R32_CAN1_F13R2 0x400066AC CAN1过滤器组13寄存器2 X R32_CAN1_F14R1 0x400066B0 CAN1过滤器组14寄存器1 X R32_CAN1_F14R2 0x400066B4 CAN1过滤器组14寄存器2 X R32_CAN1_F15R1 0x400066B8 CAN1过滤器组15寄存器1 X R32_CAN1_F15R2 0x400066BC CAN1过滤器组15寄存器2 X R32_CAN1_F16R1 0x400066C0 CAN1过滤器组16寄存器1 X R32_CAN1_F16R2 0x400066C4 CAN1过滤器组16寄存器2 X R32_CAN1_F17R1 0x400066C8 CAN1过滤器组17寄存器1 X R32_CAN1_F17R2 0x400066CC CAN1过滤器组17寄存器2 X R32_CAN1_F18R1 0x400066D0 CAN1过滤器组18寄存器1 X R32_CAN1_F18R2 0x400066D4 CAN1过滤器组18寄存器2 X R32_CAN1_F19R1 0x400066D8 CAN1过滤器组19寄存器1 X R32_CAN1_F19R2 0x400066DC CAN1过滤器组19寄存器2 X R32_CAN1_F20R1 0x400066E0 CAN1过滤器组20寄存器1 X R32_CAN1_F20R2 0x400066E4 CAN1过滤器组20寄存器2 X R32_CAN1_F21R1 0x400066E8 CAN1过滤器组21寄存器1 X R32_CAN1_F21R2 0x400066EC CAN1过滤器组21寄存器2 X R32_CAN1_F22R1 0x400066F0 CAN1过滤器组22寄存器1 X R32_CAN1_F22R2 0x400066F4 CAN1过滤器组22寄存器2 X R32_CAN1_F23R1 0x400066F8 CAN1过滤器组23寄存器1 X R32_CAN1_F23R2 0x400066FC CAN1过滤器组23寄存器2 X R32_CAN1_F24R1 0x40006700 CAN1过滤器组24寄存器1 X R32_CAN1_F24R2 0x40006704 CAN1过滤器组24寄存器2 X R32_CAN1_F25R1 0x40006708 CAN1过滤器组25寄存器1 X R32_CAN1_F25R2 0x4000670C CAN1过滤器组25寄存器2 X R32_CAN1_F26R1 0x40006710 CAN1过滤器组26寄存器1 X R32_CAN1_F26R2 0x40006714 CAN1过滤器组26寄存器2 X R32_CAN1_F27R1 0x40006718 CAN1过滤器组27寄存器1 X R32_CAN1_F27R2 0x4000671C CAN1过滤器组27寄存器2 X V2.4 371

Page 375

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 24.7.1 CANx 主控制寄存器CANx_CTLRx=1/2 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved DBF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RST Reserved TTCM ABOM AWUM NART RFLM TXFP SLEEP INRQ 位 名称 访问 描述 复位值 [31:17] Reserved RO 保留。 0 调试是否禁止CAN总线工作 0调试时CAN控制器正常工作 16 DBF RW 1 1调试时CAN的收发被禁止但是接收FIFO 的控制和读写操作一切正常。 CAN控制器软件复位请求该位写0无效 0CAN控制器正常状态 15 RST RW1Z 0 1对CAN控制器进行复位复位后控制器进 入睡眠模式然后硬件自动清0。 [14:8] Reserved RO 保留 0 是否允许时间触发模式: 0禁止时间触发模式 7 TTCM RW 0 1使能时间触发模式。 时间触发模式主要是配合TTCAN协议使用。 离线自动退出控制: 0需要软件操作寄存器CAN_CTLR的INRQ位 置1然后清0当检测到128次连续11个隐 6 ABOM RW 0 性位后,退出离线状态; 1硬件检测到 128 次连续 11 个隐性位,自 动退出离线状态。 CAN控制器自动唤醒使能 0需要软件操作寄存器 CAN_CTLR 的 SLEEP 5 AWUM RW 位清0唤醒CAN控制器 0 1当检测到报文时硬件自动唤醒寄存器 CAN_STATR的SLEEP和SLAK位自动清0。 报文自动重传功能禁止: 4 NART RW 0CAN控制器一直重传至发送成功为止 0 1无论发送成功与否报文只能被发送一次。 接收FIFO报文锁定模式使能 0当接收 FIFO 溢出时,已接收邮箱报文未 读出,邮箱未释放时,新接收到的报文会覆 3 RFLM RW 0 盖原有报文; 1当接收FIFO溢出时已接收邮箱报文未读 出,邮箱未释放时,新接收到的报文被丢弃。 2 TXFP RW 发送邮箱优先级方式选择: 0 V2.4 372

Page 376

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0优先级由报文标识符来决定 1优先级由发送请求的先后顺序决定。 睡眠模式请求位: 0软件清0后控制器退出睡眠模式 1置1请求CAN控制器进入睡眠模式当前 1 SLEEP RW 1 活动完成后控制器进入睡眠模式若AWUM 位置1则在接收到报文时控制器把SLEEP 位清0。 初始化模式请求位: 0置0请求CAN控制器退出初始化模式进 入正常模式,硬件对寄存器 CAN_STATR 的 0 INRQ RW INAK位清0 0 1置1请求CAN控制器进入初始化模式当 前活动完成后,控制器进入初始化模式,硬 件对寄存器CAN_STATR的INAK位置1。 24.7.2 CANx 主状态寄存器CANx_STATRx=1/2 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved RX SAMP RXM TXM Reserved SLAKI WKUI ERRI SLAK INAK 位 名称 访问 描述 复位值 [31:12] Reserved RO 保留。 0 11 RX RO CAN控制器接收引脚RX当前实际电平。 x CAN 控制器接收引脚 RX 上一个接收位的电 10 SAMP RO x 平。 接收模式查询位: 9 RXM RO 0当前CAN控制器非接收模式 0 1当前CAN控制器为接收模式。 发送模式查询位: 8 TXM RO 0当前CAN控制器非发送模式 0 1当前CAN控制器为发送模式。 [7:5] Reserved RO 保留 0 睡眠中断使能时,即寄存器 CAN_INTENR 的 SLKIE 位置 1 时,中断产生标志位,写 1 清 4 SLAKI RW1Z 0写0无效。 0 0退出睡眠模式时硬件清0也可软件清0 1进入睡眠模式时中断产生硬件置1。 唤醒中断标志位。当寄存器 CAN_INTENR 的 WKUI位置1时若 CAN控制器处于睡眠模式 3 WKUI RW1Z 0 时检测到SOF位则硬件置1。软件置1清 0置0无效。 V2.4 373

Page 377

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 出错中断状态标志位。当寄存器 CAN_INTENR 2 ERRI RW1Z 的 ERRIE 位置 1 时,产生错误及状态变化中 0 断。该位软件置1清0置0无效。 睡眠模式指示位。 1 SLAK RO 0CAN控制器不在睡眠模式 1 1CAN控制器正处于睡眠模式。 初始化模式指示位。 0 INAK RO 0CAN控制器工作在非初始化模式 0 1CAN控制器正在初始化模式。 24.7.3 CANx 发送状态寄存器CANx_TSTATRx=1/2 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 LOW2 LOW1 LOW0 TME2 TME1 TME0 CODE[1:0] ABRQ2 Reserved TERR2 ALST2 TXOK2 RQCP2 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ABRQ1 Reserved TERR1 ALST1 TXOK1 RQCP1 ABRQ0 Reserved TERR0 ALST0 TXOK0 RQCP0 位 名称 访问 描述 复位值 发送邮箱2的最低优先级标志位 31 LOW2 RO 0表示发送邮箱2的优先级非最低 0 1表示发送邮箱2的优先级最低。 发送邮箱1的最低优先级标志位 30 LOW1 RO 0表示发送邮箱1的优先级非最低 0 1表示发送邮箱1的优先级最低。 发送邮箱0的最低优先级标志位 29 LOW0 RO 0表示发送邮箱0的优先级非最低 0 1表示发送邮箱0的优先级最低。 发送邮箱2的空标志位 28 TME2 RO 0表示发送邮箱2有等待发送报文 1 1表示发送邮箱2无等待发送报文。 发送邮箱1的空标志位 27 TME1 RO 0表示发送邮箱1有等待发送报文 1 1表示发送邮箱1无等待发送报文。 发送邮箱0的空标志位 26 TME0 RO 0表示发送邮箱0有等待发送报文 1 1表示发送邮箱0无等待发送报文。 邮箱编号: 当有 1 个以上邮箱为空时,表示下一个为空 [25:24] CODE[1:0] RO 0 的邮箱号;当邮箱全空时,表示优先级最低 的邮箱号。 发送邮箱2的发送中止请求。软件置1可以 23 ABRQ2 RW1 中止邮箱 2 的发送请求,发送报文被清除时 0 硬件清0若邮箱2清空软件置1无效。 [22:20] Reserved RO 保留。 0 V2.4 374

Page 378

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 发送邮箱 2 发送失败标志位,当发送邮箱 2 19 TERR2 RW1Z 发送失败该位自动置1。软件置1清0软 0 件写0无效。 发送邮箱 2 仲裁失败标志位,当发送邮箱 2 18 ALST2 RW1Z 仲裁优先级低导致发送失败该位自动置1。 0 软件置1清0软件写0无效。 发送邮箱2发送成功标志位 0上次发送失败 17 TXOK2 RW1Z 0 1上次发送成功。 软件置1清0软件写0无效。 发送邮箱 2 请求完成标志位,当发送邮箱 2 16 RQCP2 RW1Z 的发送或中止请求完成时该位自动置1。软 0 件置1清0软件写0无效。 发送邮箱1的发送中止请求。软件置1可以 15 ABRQ1 RW1Z 中止邮箱 1 的发送请求,发送报文被清除时 0 硬件清0。软件写0无效。 [14:12] Reserved RO 保留。 0 发送邮箱 1 发送失败标志位,当发送邮箱 1 11 TERR1 RW1Z 发送失败该位自动置1。软件置1清0软 0 件写0无效。 发送邮箱 1 仲裁失败标志位,当发送邮箱 1 10 ALST1 RW1Z 0 仲裁优先级低导致发送失败该位自动置1。 发送邮箱1发送成功标志位 0上次发送失败 9 TXOK1 RW1Z 0 1上次发送成功。 软件置1清0软件写0无效。 发送邮箱 1 请求完成标志位,当发送邮箱 1 8 RQCP1 RW1Z 的发送或中止请求完成时该位自动置1。 0 软件置1清0软件写0无效。 发送邮箱0的发送中止请求。软件置1可以 7 ABRQ0 RW1Z 中止邮箱 0 的发送请求,发送报文被清除时 0 硬件清0。软件写0无效。 [6:4] Reserved RO 保留 0 发送邮箱 0 发送失败标志位,当发送邮箱 0 3 TERR0 RW1Z 发送失败该位自动置1。软件置1清0软 0 件写0无效。 发送邮箱 0 仲裁失败标志位,当发送邮箱 0 2 ALST0 RW1Z 仲裁优先级低导致发送失败该位自动置1。 0 软件置1清0软件写0无效。 发送邮箱0发送成功标志位 0上次发送失败 1 TXOK0 RW1Z 0 1上次发送成功。 软件置1清0软件写0无效。 发送邮箱 0 请求完成标志位,当发送邮箱 0 0 RQCP0 RW1Z 的发送或中止请求完成时该位自动置1。软 0 件置1清0软件写0无效。 V2.4 375

Page 379

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 24.7.4 CANx 接收 FIFO 0 状态寄存器CANx_RFIFO0x=1/2 偏移地址0x0C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reser Reserved RFOM0 FOVR0 FULL0 FMP0[1:0] ved 位 名称 访问 描述 复位值 [31:6] Reserved RO 保留。 0 软件对该位置1则释放接收FIFO_0的当前 5 RFOM0 RW1Z 邮箱报文,释放完后自动清 0软件写 0 无 0 效。 接收 FIFO_0 溢出标志位。当 FIFO_0 中有三 4 FOVR0 RW1Z 个报文时又接到新报文硬件置1。该位需 0 要软件置1清0软件写0无效。 接收 FIFO_0 满标志位。当 FIFO_0 中有三个 3 FULL0 RW1Z 报文时硬件置1。该位需要软件置1清0 0 软件写0无效。 2 Reserved RO 保留。 0 [1:0] FMP0[1:0] RO 接收FIFO_0报文数目。 0 24.7.5 CANx 接收 FIFO 1 状态寄存器CANx_RFIFO1x=1/2 偏移地址0x10 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reser Reserved RFOM1 FOVR1 FULL1 FMP1[1:0] ved 位 名称 访问 描述 复位值 [31:6] Reserved RO 保留。 0 软件对该位置1则释放接收FIFO_1的当前 5 RFOM1 RW1Z 邮箱报文,释放完后自动清 0软件写 0 无 0 效。 接收 FIFO_1 溢出标志位。当 FIFO_1 中有三 4 FOVR1 RW1Z 个报文时又接到新报文硬件置1。该位需 0 要软件置1清0软件写0无效。 接收 FIFO_1 满标志位。当 FIFO_1 中有三个 3 FULL1 RW1Z 报文时硬件置1。该位需要软件置1清0 0 软件写0无效。 2 Reserved RF 保留。 0 V2.4 376

Page 380

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [1:0] FMP1[1:0] RO 接收FIFO_1报文数目。 0 24.7.6 CANx 中断使能寄存器CANx_INTENRx=1/2 偏移地址0x14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved SLKIE WKUIE 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reser FOV FMP FOV FMP ERRIE Reserved LECIE BOFIE EPVIE EWGIE FFIE1 FFIE0 TMEIE ved IE1 IE1 IE0 IE0 位 名称 访问 描述 复位值 [31:18] Reserved RO 保留。 0 睡眠中断使能位: 17 SLKIE RW 0进入睡眠状态时不产生中断 0 1进入睡眠状态时产生中断。 唤醒中断使能位: 16 WKUIE RW 0当CAN控制器被唤醒时不产生中断 0 1当CAN控制器被唤醒时产生中断。 错误中断使能位CAN错误中断总使能位 15 ERRIE RW 0当CAN控制器产生错误时不产生中断 0 1当CAN控制器产生错误时产生中断。 [14:12] Reserved RF 保留。 0 上次错误号中断使能位: 0检测到错误时硬件更新LEC[2:0],不更 11 LECIE RW 新ERRI位不触发错误中断 0 1检测到错误时硬件更新LEC[2:0],更新 ERRI位为1触发错误中断。 离线中断使能位: 0进入离线状态时不更新 ERRI 位,不触 10 BOFIE RW 发错误中断; 0 1进入离线状态时更新ERRI位为1触发 错误中断。 错误被动中断使能位: 0进入错误被动状态时不更新 ERRI 位, 9 EPVIE RW 不触发错误中断; 0 1进入错误被动状态时更新ERRI位为1 触发错误中断。 错误警告中断使能位: 0出错次数达到警告阈值时不更新 ERRI 8 EWGIE RW 位,不触发错误中断; 0 1出错次数达到警告阈值时更新 ERRI 位 为1触发错误中断。 7 Reserved RF 保留。 0 6 FOVIE1 RW 接收FIFO_1溢出中断使能位 0 V2.4 377

Page 381

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0当FIFO_1溢出不触发FIFO_1中断 1当FIFO_1溢出触发FIFO_1中断。 接收FIFO_1满中断使能位 5 FFIE1 RW 0当FIFO_1为满不触发FIFO_1中断 0 1当FIFO_1为满触发FIFO_1中断。 接收FIFO_1消息挂号中断使能位 0当FIFO_1更新FMP位且不为0不触发 4 FMPIE1 RW FIFO_1中断 0 1当 FIFO_1 更新 FMP 位,且不为 0触发 FIFO_1中断。 接收FIFO_0溢出中断使能位 3 FOVIE0 RW 0当FIFO_0溢出不触发FIFO_0中断 0 1当FIFO_0溢出触发FIFO_0中断。 接收FIFO_0满中断使能位 2 FFIE0 RW 0当FIFO_0为满不触发FIFO_0中断 0 1当FIFO_0为满触发FIFO_0中断。 接收FIFO_0消息挂号中断使能位 0当FIFO_0更新FMP位且不为0不触发 1 FMPIE0 RW FIFO_0中断 0 1当 FIFO_0 更新 FMP 位,且不为 0触发 FIFO_0中断。 发送邮箱空中断: 0 TMEIE RW 0当发送邮箱为空时不产生中断 0 1当发送邮箱为空时产生中断。 24.7.7 CANx 错误状态寄存器CANx_ERRSRx=1/2 偏移地址0x18 2 31 30 29 28 27 26 25 24 23 22 21 19 18 17 16 0 REC[7:0] TEC[7:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved LEC[2:0] Reserved BOFF EPVF EWGF 位 名称 访问 描述 复位值 接收错误计数器: 当 CAN 接收出错时,根据出错条件,该计数 [31:24] REC[7:0] RO 器加 1 或 8接收成功后该计数器减 1 或 0 设为120错误计数值大于127。计数器值 超过127时CAN进入错误被动状态。 发送错误计数器: 当 CAN 发送出错时,根据出错条件,该计数 [23:16] TEC[7:0] RO 器加 1 或 8发送成功后该计数器减 1 或 0 设为120错误计数值大于127。计数器值 超过127时CAN进入错误被动状态。 V2.4 378

Page 382

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [15:7] Reserved RO 保留。 0 上次错误代号: 检测到 CAN 总线上发送错误时,控制器根据 出错情况设置当正确收发报文时置000b。 000无错误 001位填充错误 010FORM格式错误 [6:4] LEC{2:0} RW 011ACK确认错误 000b 100隐性位错误 101显性位错误 110CRC错误 111软件设置。 通常应用软件读取到错误时,把代号设置为 111b可以检测到代号更新。 3 Reserved RO 保留。 0 离线状态标志位: 2 BOFF RO 当 CAN 控制器进入离线状态时,硬件自动置 0 1退出离线状态时硬件自动清0。 错误被动标志位: 1 EPVF RO 当收发错误计数器达到错误被动阈值时,即 0 大于127时硬件置1。 错误警告标志位: 0 EWGF RO 当收发错误计数器达到警告阈值时,即大于 0 等于96时硬件置1。 24.7.8 CANx 位时序寄存器CANx_BTIMRx=1/2 偏移地址0x1C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 SILM LBKM Reserved SJW[1:0] Reserved TS2[2:0] TS1[3:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved BRP[9:0] 位 名称 访问 描述 复位值 静默模式设置位: 31 SILM RW 0退出静默模式 0 1进入静默模式。 环回模式设置位: 30 LBKM RW 0退出环回模式 0 1进入环回模式。 [29:26] Reserved RO 保留。 0 定义了重新同步跳转宽度设置值: 实现重新同步时,位中可以延长和缩小的最 [25:24] SJW[1:0] RW 01b 小 时 间 单 元 数 量 上 限 实 际 值 为 SJW[1:0]+1范围可设置为 1 到 4 个最 V2.4 379

Page 383

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 小时间单元。 23 Reserved RO 保留。 0 时间段2设置值 [22:20] TS2[2:0] RW 定义了时间段 2 占用了多少个最小时间单 010b 元实际值为TS2[2:0]+1。 时间段1设置值 [19:16] TS1[3:0] RW 定义了时间段 1 占用了多少个最小时间单 0011b 元实际值为TS1[3:0]+1。 [15:10] Reserved RO 保留。 0 最小时间单元长度设置值 Tq =BRP[9:0]+1×t pclk [9:0] BRP[9:0] RW 注CAN波特率计算公式为 0 CANbps=PCLK1/((TSI[3:0]+1+TS2[2:0]+1+1 )*BPR[9:0]+1) 24.7.9 CANx 时间触发控制寄存器CANx_TTCTLRx=1/2 偏移地址0x20 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TIMRS Reserved MODE T 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TIMCMV[15:0] 位 名称 访问 描述 复位值 [31:18] Reserved RO 保留。 0 时间触发模式选择位: 17 MODE RW 0默认模式 0 1增强模式。 内部计数器复位控制位: 16 TIMRST WZ 0 写1复位内部计数器硬件自动清0 [15:0] TIMCMV[15:0] RW 内部计数器计数终值。 0xFFFF 24.7.10 CANx 时间触发计数值寄存器CANx_TTCNTx=1/2 偏移地址0x24 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TIMCNT[15:0] 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 [15:0] TIMCNT[15:0] RW 时间触发计数值。 0 V2.4 380

Page 384

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 24.7.11 CANx 发送邮箱标识符寄存器CANx_TXMIRyx=1/2y=0/1/2 偏移地址0x1800x1900x1A0 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 STID[10:0]/EXID[28:18] EXID[17:13] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 EXID[12:0] IDE RTR TXRQ 位 名称 访问 描述 复位值 STID[10:0] [31:21] RW 标准标识符或扩展标识符的高11位。 x /EXID[28:18] [20:3] EXID[17:0] RW 扩展标识符的低18位。 x 标识符选择标志位: 2 IDE RW 0选用标准标识符 x 1选用扩展标识符。 远程帧(也称遥控帧)选择标志位: 1 RTR RW 0当前为数据帧 x 1当前为远程帧。 数据发送请求标志位: 0 TXRQ RW 软件置 1 时,请求发送邮箱里的数据,发送 0 完毕邮箱为空时硬件清0。 24.7.12 CANx 发送邮箱数据长度和时间戳寄存器CANx_TXMDTRyx=1/2 y=0/1/2 偏移地址0x1840x1940x1A4 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TIME[15:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved TGT Reserved DLC[3:0] 位 名称 访问 描述 复位值 [31:16] TIME[15:0] RW 用于发送报文SOF时刻的16位定时器值。 x [15:9] Reserved RO 保留。 0 报文时间戳发送选择标志位。该位在TTCM置 1并报文长度为8时有效。 8 TGT RW 0不发送时间戳 x 1发送时间戳值为TIME[15:0]的即时值, 替换了8字节报文的最后两个字节。 [7:4] Reserved RO 保留。 0 数据帧的数据长度或远程帧请求数据长度 [3:0] DLC[3:0] RW 0 数据长度可设置范围为0到8。 24.7.13 CANx 发送邮箱低字节数据寄存器CANx_TXMDLRyx=1/2y=0/1/2 偏移地址0x1880x1980x1A8 V2.4 381

Page 385

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DATA3[7:0] DATA2[7:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATA1[7:0] DATA0[7:0] 位 名称 访问 描述 复位值 [31:24] DATA3[7:0] RW 发送数据字节3的内容。 x [23:16] DATA2[7:0] RW 发送数据字节2的内容。 x [15:8] DATA1[7:0] RW 发送数据字节1的内容。 x [7:0] DATA0[7:0] RW 发送数据字节0的内容。 x 24.7.14 CANx 发送邮箱高字节数据寄存器CANx_TXMDHRyx=1/2y=0/1/2 偏移地址0x18C0x19C0x1AC 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DATA7[7:0] DATA6[7:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATA5[7:0] DATA4[7:0] 位 名称 访问 描述 复位值 [31:24] DATA7[7:0] RW 发送数据字节7的内容。 x [23:16] DATA6[7:0] RW 发送数据字节6的内容。 x [15:8] DATA5[7:0] RW 发送数据字节5的内容。 x [7:0] DATA4[7:0] RW 发送数据字节4的内容。 x 24.7.15 CANx 接收邮箱标识符寄存器CANx_RXMIRyx=1/2y=0/1 偏移地址0x1B00x1C0 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 STID[10:0]/EXID[28:18] EXID[17:13] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 EXID[12:0] IDE RTR TXRQ 位 名称 访问 描述 复位值 STID[10:0] [31:21] RO 标准标识符或扩展标识符的高11位。 x /EXIDH[28:18] [20:3] EXIDL[17:0] RO 扩展标识符的低18位。 x 标识符选择标志位。 2 IDE RO 0选用标准标识符 x 1选用扩展标识符。 远程帧(也称遥控帧)选择标志位。 1 RTR RO x 0当前为数据帧 V2.4 382

Page 386

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1当前为远程帧。 0 Reserved RO 保留。 x 24.7.16 CANx 接收邮箱数据长度和时间戳寄存器CANx_RXMDTRyx=1/2y=0/1 偏移地址0x1B40x1C4 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TIME[15:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 FMI[7:0] Reserved DLC[3:0] 位 名称 访问 描述 复位值 [31:16] TIME[15:0] RO 用于接收报文SOF时刻的16位定时器值。 x [15:8] FMI[7:0] RO 报文所匹配的过滤器编号。 x [7:4] Reserved RO 保留。 0 接收报文数据长度。 [3:0] DLC[3:0] RO x 数据帧长度0到8远程帧为0。 24.7.17 CANx 接收邮箱低字节数据寄存器CANx_RXMDLRyx=1/2y=0/1 偏移地址0x1B80x1C8 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DATA3[7:0] DATA2[7:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATA1[7:0] DATA0[7:0] 位 名称 访问 描述 复位值 [31:24] DATA3[7:0] RO 接收报文的数据字节3。 x [23:16] DATA2[7:0] RO 接收报文的数据字节2。 x [15:8] DATA1[7:0] RO 接收报文的数据字节1。 x [7:0] DATA0[7:0] RO 接收报文的数据字节0。 x 24.7.18 CANx 接收邮箱高字节数据寄存器CANx_RXMDHRyx=1/2y=0/1 偏移地址0x1BC0x1CC 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DATA7[7:0] DATA6[7:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATA5[7:0] DATA4[7:0] 位 名称 访问 描述 复位值 [31:24] DATA7[7:0] RO 接收报文的数据字节7。 x [23:16] DATA6[7:0] RO 接收报文的数据字节6。 x [15:8] DATA5[7:0] RO 接收报文的数据字节5。 x V2.4 383

Page 387

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [7:0] DATA4[7:0] RO 接收报文的数据字节4。 x 24.7.19 CANx 过滤器主控制寄存器CANx_FCTLRx=1/2 偏移地址0x200 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved CAN2SB[5:0] Reserved FINIT 位 名称 访问 描述 复位值 [31:14] Reserved RO 保留。 0 [13:8] CAN2SB[5:0] RW CAN2过滤器开始组取值范围1-27。 01110b [7:1] Reserved RO 保留。 0 过滤器初始化模式使能标志位。 0 FINIT RW 0过滤器组为正常模式 1 1过滤器组为初始化模式。 24.7.20 CANx 过滤器模式寄存器CANx_FMCFGRx=1/2 偏移地址0x204 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved FBM27 FBM26 FBM25 FBM24 FBM23 FBM22 FBM21 FBM20 FBM19 FBM18 FBM17 FBM16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 FBM15 FBM14 FBM13 FBM12 FBM11 FBM10 FBM9 FBM8 FBM7 FBM6 FBM5 FBM4 FBM3 FBM2 FBM1 FBM0 位 名称 访问 描述 复位值 [31:28] Reserved RO 保留。 0 过滤器组x的工作模式控制位FINIT为1才 能写入。 [27:0] FBMx RW 0 0过滤器组x的寄存器为屏蔽位模式 1过滤器组x的寄存器为标识符列表模式。 注CAN1使用bit[13:0]CAN2使用bit[27:14]。 24.7.21 CANx 过滤器位宽寄存器CANx_FSCFGRx=1/2 偏移地址0x20C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved FSC27 FSC26 FSC25 FSC24 FSC23 FSC22 FSC21 FSC20 FSC19 FSC18 FSC17 FSC16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 FSC15 FSC14 FSC13 FSC12 FSC11 FSC10 FSC9 FSC8 FSC7 FSC6 FSC5 FSC4 FSC3 FSC2 FSC1 FSC0 位 名称 访问 描述 复位值 [31:28] Reserved RO 保留。 0 V2.4 384

Page 388

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 过滤器组 x 的位宽控制位FINIT 为 1 才能写 入。 [27:0] FSCx RW 0 0过滤器组x的寄存器为2个16位 1过滤器组x的寄存器为单个32位。 注CAN1使用bit[13:0]CAN2使用bit[27:14]。 24.7.22 CANx 过滤器 FIFO 关联寄存器CANx_FAFIFORx=1/2 偏移地址0x214 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved FFA27 FFA26 FFA25 FFA24 FFA23 FFA22 FFA21 FFA20 FFA19 FFA18 FFA17 FFA16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 FFA15 FFA14 FFA13 FFA12 FFA11 FFA10 FFA9 FFA8 FFA7 FFA6 FFA5 FFA4 FFA3 FFA2 FFA1 FFA0 位 名称 访问 描述 复位值 [31:28] Reserved RO 保留。 0 过滤器组 x的关联 FIFO控制位FINIT 为 1 才能写入。 [27:0] FFAx RW 0 0过滤器组x被关联到FIFO_0 1过滤器组x被关联到FIFO_1。 注CAN1使用bit[13:0]CAN2使用bit[27:14]。 24.7.23 CANx 过滤器激活寄存器CANx_FWRx=1/2 偏移地址0x21C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 FACT FACT FACT FACT FACT FACT FACT FACT FACT FACT FACT FACT Reserved 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 FACT FACT FACT FACT FACT FACT FACT FACT FACT FACT FACT FACT FACT FACT FACT FACT 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 位 名称 访问 描述 复位值 [31:28] Reserved RO 保留。 0 过滤器组x的激活控制位。 [27:0] FACTx RW 0过滤器组x禁用 0 1过滤器组x激活。 注CAN1使用bit[13:0]CAN2使用bit[27:14]。 24.7.24 CANx 过滤器组的过滤寄存器CANx_FiRyx=1i=0-27y=1/2 偏移地址0x240-0x31C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 FB31 FB30 FB29 FB28 FB27 FB26 FB25 FB24 FB23 FB22 FB21 FB20 FB19 FB18 FB17 FB16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 V2.4 385

Page 389

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn FB15 FB14 FB13 FB12 FB11 FB10 FB9 FB8 FB7 FB6 FB5 FB4 FB3 FB2 FB1 FB0 位 名称 访问 描述 复位值 过滤器组中寄存器的标志位FINIT为1才能 写入。 标识符模式下: 0相应位期望电平为显性位 [31:0] FB WO 1相应位期望电平为隐性位。 0 屏蔽位模式下: 0不需要和对应的标识符寄存器位一致 1必须和对应的标识符寄存器位一致。 V2.4 386

Page 390

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 25 章 数字图像接口DVP 本章模块描述适用于CH32F20x、CH32V30x和CH32V31x微控制器系列部分产品。 数字图像接口DVP它支持使用 DVP 接口时序来获取图像数据流,支持按原始的行、帧格式 组织的图像数据如YUV、RGB等也支持如JPEG格式的压缩图像数据能够接收外部8位、10位、 12位的摄像头模块输出的高速并行数据流。 25.1 主要特性  可配置8/10/12位数据宽度模式  支持YUV、RGB格式数据  支持JPEG压缩格式数据  内置FIFO支持DMA传输  支持双缓冲接收  支持裁剪功能  支持连续模式和快照模式 25.2 功能描述 25.2.1 与传感器相连 图25-1 DVP接口连接 VSYNC HSYNC PCLK Sensor Controller DOD11 SCL SDA XCLK  PLCKPixel clk像素时钟每个时钟对应一个像素数据非压缩数据。外部DVP接口传 感器输出的PCLK时钟最大支持96MHz。  HSYNChorizonal synchronization行同步信号。  VSYNCvertical synchronization帧同步信号。  DATA像素数据或压缩数据位宽支持8/10/12位。  XCLKSensor的参考时钟可以由微控制器提供或外部提供一般使用晶振。  I2C接口用来配置sensor的寄存器可通过控制的普通GPIO口模拟I2C时序通讯亦可使用 硬件I2C接口操作。 表25-1 DVP引脚 名称 信号类型描述 PLCK 像素时钟输入 DATA[11:0] 像素数据输入 VSYNC 帧同步信号输入 HSYNC 行同步信号输入 V2.4 387

Page 391

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 25.2.2 工作时序 一般使用的DVP接口传感器模块输出的数字信号数据流和图像大小存在一定的关系下面以一 个图像数据举例。 如图25-2所示传感器内部是一个35761145大小完整的图像尺寸经过内部缩放处理最终 从接口输出的图像数据大小为19201080图像刷新率为25。 图25-2 时序描述 3576 1920 1145 1080 1 frame cycle VSYNC 25 frame cy cles = 1 second 1 row cycle 3576 1920 HSYNC 1656 1145 row cycles = 1 frame cycle 1920 PCLK cycles 1656 PCLK cycles 1 PCLK cycle PCLK 1 row cycle = 3576 PCLKs 251145 row periods = 1 second PCLK是一个像素传输的时间所以HSYNC是PCLK的3576倍在3576个像素中只有1920个 像素是有效的剩下的1656个像素点时间内Sensor不传输数据。VSYNC是帧同步信号所以VSYNC 时间是PCLK的35761145倍同样只有在1920*1080个有效像素时间内Sensor在传输数据。 如果传感器传输的是JPEG压缩后的数据可能无需使用HSYNC信号。 DVP接口信号和图像数据的关系具体以选用的传感器数据手册说明为主。 25.2.3 RGB/YUV/JPEG 压缩数据格式说明  RGB 三原色:红色、绿色、蓝色  YUV 亮度信号Y色度信号U和V、Pb和Pr、Cb和Cr。  JPEGJoint Photographic Experts Group 有损失压缩,但损失的部分是人视觉不易察觉的部分,利用人眼对计算机色彩中高频信息部分 不敏感的特点。去除视觉上多余信息(空间冗余度),去除数据本身的多余信息(结构冗余度)。 V2.4 388

Page 392

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 25.3 数字图像接口的应用 25.3.1 数字图像接口配置说明 1 DVP 的数据接收中,每一帧数据由 BUF0 和 BUF1 交替存储,从 BUF0 开始。对于 RGB 和 YUV 数据 流,硬件在每次帧信号从无效电平变为有效电平时会复位选择 BUF0 开始,存满一行数据将会切 换的 BUF1实现交替存储对于 JPEG 压缩数据,硬件会根据设置的 DMA 接收长度设置 BUF0 和 BUF1的切换阈值。 2 当数据总线宽度为10位或者12位时每接收一个数据时系统将自动对数据进行无符号扩展到 16位再进行存储。 3 R16_DVP_ROW_NUM和R16_DVP_COL_NUM寄存器必须与传感器实际输出的图像大小匹配。 4 在视频流RGB模式下R16_DVP_COL_NUM表示一行数据的有效PCLK周期数R16_DVP_ROW_NUM表 示一帧图像数据内包含的行数在图像JPEG模式下R16_DVP_COL_NUM用于配置DMA长度此模 式下R16_DVP_ROW_NUM寄存器不起作用。 25.3.2 数字图像接口应用说明 在使用数字图像接口接收图像数据时须正确配置DVP相关的控制寄存器使其与图像传感器的 模式相匹配,具体操作步骤如下: 1 通过R8_DVP_CR1寄存器清除RB_DVP_ALL_CLR和RB_DVP_RCV_CLR字段。 2 通过 R8_DVP_CR0 寄存器配置图像模式、数据位宽、PCLK 极性、HSYNC 极性和 VSYNC 极性,使其 与SENSOR的输出相匹配。 3 根据配置后的图像传感器输出的有效图像像素配置R16_DVP_ROW_NUM和R16_DVP_COL_NUM寄存 器使其与SENSOR的输出相匹配在图像JPEG模式下只需配置R16_DVP_COL_NUM寄存器。 4 通过R32_DVP_DMA_BUF0/1寄存器配置DMA接收地址。 5 若使用快照模式需通过R8_DVP_CR1寄存器配置RB_DVP_CM字段开启快照模式。 6 若使用裁剪模式,需通过 R8_DVP_CR1 寄存器,配置 RB_DVP_CROP 和 RB_DVP_FCRC 字段,开启裁 剪功能和控制帧捕获率,同时通过配置 R16_DVP_HOFFCNT、R16_DVP_VST、R16_DVP_CAPCNT 和 R16_DVP_VLINE设置裁剪图像的尺寸。 7 根据需求,通过 R8_DVP_IER 寄存器使能相应中断,通过中断控制器 NVIC 或 PFIC 配置中断优先 级以及使能DVP中断。 8 通过R8_DVP_CR1寄存器使能DMA通过R8_DVP_CR0寄存器使能DVP接口。 9 等待相关接收中断的产生,及时处理接收数据。 25.3.3 捕获模式说明 DVP接口支持两种捕获模式快照单帧模式和连续模式。 25.3.3.1 快照模式 在该模式下只捕获单帧R8_DVP_CR1寄存器中RB_DVP_CM置1当使能DVP接口后等待 系统检测帧起始之后开始进行图像数据采样在接收完整一帧数据后将会关闭DVP接口 R8_DVP_CR0寄存器的RB_DVP_ENABLE字段清0。快照模式下的单帧捕获波形如图25-3所 示。 V2.4 389

Page 393

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图25-3 快照模式下的单帧捕获波形 Frame 1 is captured Frame 2 is not captured 25.3.3.2 连续模式 在该模式下R8_DVP_CR1寄存器中RB_DVP_CM清0当使能DVP接口后在R8_DVP_CR0寄存 器的RB_DVP_ENABLE字段清0前会持续采样每帧数据。连续模式下的帧捕获波形如图25-4所示。 图25-4 连续模式下帧捕获波形 Frame 1 is captured Frame 2 is captured 25.3.4 裁剪功能说明 DVP可以使用裁剪功能从接收到的图像中截取一个矩形窗口该矩形窗口起始坐标矩形左上 角X坐标R16_DVP_HOFFCNTY坐标R16_DVP_VST和窗口大小R16_DVP_CAPCNT表示水平尺寸、 R16_DVP_VLINE表示垂直尺寸可配置。裁剪窗口的坐标和大小如图25-5所示。裁剪窗口数据捕获 波形如图25-6所示。 图25-5 裁剪窗口的坐标和大小 V2.4 390

Page 394

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图25-6 裁剪窗口数据捕获波形 HSYNC VSYNC HOFFCNT CAPCNT Data that is not captured at this stage Data captured at this stage 25.4 寄存器描述 表25-2 DVP相关寄存器列表 名称 访问地址 描述 复位值 R8_DVP_CR0 0x50050000 DVP控制寄存器0 0x00 R8_DVP_CR1 0x50050001 DVP控制寄存器1 0x06 R8_DVP_IER 0x50050002 DVP中断使能寄存器 0x00 R16_DVP_ROW_NUM 0x50050004 图像行数配置寄存器 0x0000 R16_DVP_COL_NUM 0x50050006 图像列数配置寄存器 0x0000 R32_DVP_DMA_BUF0 0x50050008 DVP DMA地址0寄存器 0x00000000 R32_DVP_DMA_BUF1 0x5005000C DVP DMA地址1寄存器 0x00000000 R8_DVP_IFR 0x50050010 DVP中断标志寄存器 0x00 R8_DVP_STATUS 0x50050011 DVP接收FIFO状态寄存器 0x00 R16_DVP_ROW_CNT 0x50050014 DVP行计数器寄存器 0x0000 R16_DVP_HOFFCNT 0x50050018 窗口开始的水平方向位移寄存器 0x0000 R16_DVP_VST 0x5005001A 窗口开始的行数寄存器 0x0000 R16_DVP_CAPCNT 0x5005001C 捕获计数寄存器 0x0000 R16_DVP_VLINE 0x5005001E 垂直行计数寄存器 0x0000 R32_DVP_DR 0x50050020 数据寄存器 0x00000000 25.4.1 DVP 配置寄存器R8_DVP_CR0 偏移地址0x00 位 名称 访问 描述 复位值 JPEG模式使能 6 RB_DVP_JPEG RW 0原始数据格式 0 1JPEG压缩格式。 DVP数据位宽配置 [5:4] RB_DVP_MSK_DAT_MOD[1:0] RW 008位模式 00b 0110位模式 V2.4 391

Page 395

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1x12位模式。 PCLK极性配置 3 RB_DVP_P_POLAR RW 0在PCLK上升沿采样数据 0 1在PCLK下降沿采样数据。 HSYNC极性配置 2 RB_DVP_H_POLAR RW 0HSYNC高电平数据有效 0 1HSYNC低电平数据有效。 VSYNC极性配置 1 RB_DVP_V_POLAR RW 0VSYNC低电平数据有效 0 1VSYNC高电平数据有效。 DVP功能使能 0 RB_DVP_ENABLE RW 0禁用DVP 0 1使能DVP。 25.4.2 DVP 配置寄存器R8_DVP_CR1 偏移地址0x01 位 名称 访问 描述 复位值 DVP帧捕获率控制 00捕获所有帧 [7:6] RB_DVP_FCRC[1:0] RW 01每隔一帧捕获一次 00b 10每隔三帧捕获一次。 11保留 裁剪功能控制: 5 RB_DVP_CROP RW 0捕获完整图像 0 1仅捕获剪裁寄存器所指定的窗口中的数据。 捕获模式: 4 RB_DVP_CM RW 0连续模式 0 1快照模式。 缓冲地址标志位。硬件控制翻转软件置1翻 转该位写0无效。 3 RB_DVP_BUF_TOG RWT 0 0数据存储在接收地址0 1数据存储在接收地址1。 接收逻辑复位控制: 2 RB_DVP_RCV_CLR RW 0取消复位操作 1 1复位接收逻辑电路。 标志与FIFO清除控制由软件写1或写0 1 RB_DVP_ALL_CLR RW 0取消复位操作 1 1复位标志与FIFO。 DMA使能控制位 0 RB_DVP_DMA_ENABLE RW 0禁用DMA 0 1使能DMA。 V2.4 392

Page 396

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 25.4.3 DVP 中断使能寄存器R8_DVP_IER 偏移地址0x02 位 名称 访问 描述 复位值 [7:5] Reserved RO 保留。 0 帧结束中断使能。在VSYNC从有效电平变为 无效电平时产生中断。) 4 RB_DVP_IE_STP_FRM RW 0 0禁止帧结束中断 1使能帧结束中断。 接收FIFO溢出中断使能 3 RB_DVP_IE_FIFO_OV RW 0禁止FIFO溢出中断 0 1使能FIFO溢出中断。 帧接收完成中断使能。(计数器达到 ROW/COL_NUM 配置值时产生中断,表示最后一 2 RB_DVP_IE_FRM_DONE RW 个数据已写入RAM 0 0禁止帧接收完成中断 1使能帧接收完成中断。 行结束中断使能。计数器达到COL_NUM配置 值时产生中断) 1 RB_DVP_IE_ROW_DONE RW 0 0禁止行结束中断 1使能行结束中断。 新一帧开始中断使能。在VSYNC从无效电平 变为有效电平时产生中断,表示新的一帧开 0 RB_DVP_IE_STR_FRM RW 始,数据即将到来。) 0 0禁止新一帧开始中断 1使能新一帧开始中断。 25.4.4 DVP 图像有效行数配置寄存器R16_DVP_ROW_NUM 偏移地址0x04 位 名称 访问 描述 复位值 在RGB模式下表示一帧图像数据内包含的行 [15:0] RB_DVP_ROW_NUM[15:0] RW 0 数。在JPEG模式下该寄存器无实际意义。 25.4.5 DVP 图像有效列配置寄存器16_DVP_COL_NUM 偏移地址0x06 位 名称 访问 描述 复位值 在RGB模式下表示一行数据内包含的PCLK周 [15:0] RB_DVP_COL_NUM[15:0] RW 期数。在 JPEG 模式下,用于配置 DMA 接收长 0 度。 25.4.6 DVP DMA 接收地址 0 寄存器R32_DVP_DMA_BUF0 偏移地址0x08 位 名称 访问 描述 复位值 [31:0] RB_DVP_DMA_BUF0[31:0] RW DMA接收地址0。 0 25.4.7 DVP DMA 接收地址 1 寄存器R32_DVP_DMA_BUF1 V2.4 393

Page 397

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 偏移地址0x0C 位 名称 访问 描述 复位值 [31:0] RB_DVP_DMA_BUF1[31:0] RW DMA接收地址1。 0 25.4.8 DVP 中断标志寄存器R8_DVP_IFR 偏移地址0x10 位 名称 访问 描述 复位值 [7:5] Reserved RO 保留。 0 4 RB_DVP_IF_STP_FRM RW 帧结束中断标志高有效写0清除。 0 3 RB_DVP_IF_FIFO_OV RW 接收FIFO溢出中断标志高有效写0清除。 0 2 RB_DVP_IF_FRM_DONE RW 帧接收完成中断标志高有效写0清除。 0 1 RB_DVP_IF_ROW_DONE RW 行结束中断标志高有效写0清除。 0 0 RB_DVP_IF_STR_FRM RW 帧开始中断标志高有效写0清除。 0 25.4.9 DVP 接收 FIFO 状态寄存器R8_DVP_STATUS 偏移地址0x11 位 名称 访问 描述 复位值 7 Reserved RO 保留。 0 [6:4] RB_DVP_FIFO_CNT[2:0] RO FIFO计数器。 0 3 Reserved RO 保留。 0 FIFO溢出状态 2 RB_DVP_FIFO_OV RO 0FIFO未溢出 0 1FIFO溢出。 FIFO满状态 1 RB_DVP_FIFO_FULL RO 0FIFO未满 0 1缓存已满。 FIFO就绪状态 0 RB_DVP_FIFO_RDY RO 0FIFO中无数据 0 1FIFO中有数据。 25.4.10 DVP 接收图像行数寄存器R16_DVP_ROW_CNT 偏移地址0x14 位 名称 访问 描述 复位值 实际接收中,一帧图像数据包含的行数,此寄 [15:0] RB_DVP_ROW_CNT[15:0] RO 存器在帧结束时更新。 0 在JPEG格式下该寄存器的值没有意义。 25.4.11 DVP 窗口开始的水平方向位移寄存器R16_DVP_HOFFCNT 偏移地址0x18 位 名称 访问 描述 复位值 窗口行内每行在捕获数据前需要空出PCLK周 [15:0] RB_DVP_HOFFCNT[15:0] RW 0 期数。低14位有效。 V2.4 394

Page 398

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 25.4.12 DVP 窗口开始的行数寄存器R16_DVP_VST 偏移地址0x1A 位 名称 访问 描述 复位值 图像开始捕获的行数,此行之前的数据不捕 [15:0] RB_DVP_VST[15:0] RW 0 获。低13位有效。 25.4.13 DVP 捕获计数寄存器R16_DVP_CAPCNT 偏移地址0x1C 位 名称 访问 描述 复位值 裁剪窗口内需要捕获的PCLK周期数。低14位 [15:0] RB_DVP_CAPCNT[15:0] RW 0 有效。 25.4.14 DVP 垂直行计数寄存器R16_DVP_VLINE 偏移地址0x1E 位 名称 访问 描述 复位值 [15:0] RB_DVP_VLINE[15:0] RW 裁剪窗口内需要捕获的行数。低14位有效。 0 25.4.15 DVP 数据寄存器R32_DVP_DR 偏移地址0x20 位 名称 访问 描述 复位值 DVP 接口每次接收 4 字节数据,才会触发一次 [31:0] RB_DVP_DR[31:0] RO DMA请求4字节深度的FIFO可为DMA传输留 0 有充足的时间。可有效防止出现DMA溢出情况。 V2.4 395

Page 399

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 26 章 可变静态存储控制器FSMC 本章模块描述适用于CH32F20x和CH32V30x微控制器系列部分产品。 可变静态存储控制器FSMC支持多种静态存储器类型以及丰富的存储操作方法可根据系统 应用需要,对不同类型大容量静态存储器进行扩展。 26.1 主要特性  支持操作SRAM、ROM、NOR FLASH和PSRAM  支持操作NAND FLASH并且内置硬件ECC最多可检测8KByte数据  支持对同步器件操作如PSRAM  支持8bit或16bit数据总线宽度  时序信号可软件编程 26.2 功能描述 26.2.1 模块结构 FSMC主要包括HB总线接口、NOR存储控制器、NAND存储控制器和外部设备接口。 图26-1 FSMC模块框图 26.2.2 外部设备地址映射 FSMC根据地址线将存储块分为固定大小16MByte的两个存储块见图26-2。 V2.4 396

Page 400

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图26-2 FSMC存储块 Address Memory block Supported storage types 6000 0000h Block 1 NOR/PSRAM 1x16MB 60FF FFFFh 7000 0000h Block 2 NAND flash 1x16MB 70FF FFFFh 26.2.2.1 NOR/PSRAM 地址映射 表26-1 外部存储器地址 最大访问存储器空间 数据宽度 配连接到存储器的地址线 bit HADDR[23:0]与FSMC_A[23:0]对应相 8bit 16MBx8=128Mbit 连 HADDR[23:1]与FSMC_A[22:0]对应相 16bit 16MB/2x16=128Mbit 连HADDR[0]未接 注100脚芯片支持FSMC并且仅支持地址和数据线复用模式。 NOR FLASH和PSRAM支持非对齐访问。对于异步模式每次操作需要准确的地址对于同步模式 只需发出一次地址信号之后批量的数据通过CLK顺序进行。对于支持非对齐批量访问的NOR FLASH 可以将存储器的非对齐访问模式设置为和 HB 相同的模式,若不能设置,则禁用非对齐访问模式,并 把非对齐的访问请求分开成两个连续的访问操作。 26.2.2.2 NAND 地址映射 NAND FLASH映像和时序寄存器见表26-2。 表26-2 存储器映像和时序寄存器 起始地址 结束地址 FSMC存储块 存储空间 时序寄存器 0x78000000 0x78FFFFFF 属性 FSMC_PATT20x6C 块2-NAND FLASH 0x70000000 0x70FFFFFF 通用 FSMC_PMEM20x68 通用和属性空间可以在低 256KB 划分为地址区(第二个 128KB 区域)、命令区(第二个 64KB 区 域和数据区前64KB区域见表26-3。 软件通过操作这3个区域访问NAND FLASH的具体流程  向NAND FLASH发送读写等操作命令软件可以操作命令区任何地址发送命令  向NAND FLASH发送将要操作的地址软件可以操作地址区任何地址发送命令 V2.4 397

Page 401

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn  从NAND FLASH读写数据软件可以操作数据区任何地址写入或读出数据。 表26-3 NAND存储块选择 区域名称 HADDR[17:16] 地址范围 地址区 1X 0x020000-0x03FFFF 命令区 01 0x010000-0x01FFFF 数据区 00 0x000000-0x00FFFF 26.2.3 NOR/PSRAM 控制器 FSMC 支持 8bit、16bit 和 32bit 异步操作 SRAM 和 ROM支持异步模式和突发模式操作 PSRAM 支持异步模式和突发模式操作 NOR FLASH。所有控制器的输出信号在内部时钟 HCLK 的上升沿改变, 对于同步写模式PSRAM输出的数据在存储器时钟CLK的下降沿改变具体参照同步传输和 异步传输时序图。存储器的读写参数可软件配置见表26-4。 表26-4 软件可控的NOR/PSRAM读写参数 参数 读写方式 参数取值范围 地址建立时间 异步 1<< T <<16 HB HCLK 地址保持时间 异步 1<< T <<16 HB HCLK 数据建立时间 异步 2<< T <<256 HB HCLK 总线恢复时间 异步或同步读 1<< T <<16 HB HCLK 时钟分频因子 同步 2<< T <<16 HB HCLK 数据产生时间 同步 2<< T <<17 Memory CLK 26.2.3.1 外部存储器复用接口信号 NOR FLASH和PSRAM接口见表26-5、表26-6。 表26-5 复用NOR FLASH接口 FSMC引脚 方向 描述 CLK 输出 时钟线(仅用于同步突发模式) A[23:16] 输出 地址线 AD[15:0] 输入/输出 16bit地址/数据线(复用) NE[1] 输出 片选线 NOE 输出 输出使能 NWE 输出 写使能 NLNADV 输出 锁存使能 NWAIT 输入 等待信号线仅用于NOR FLASH 表26-6 复用PSRAM接口 FSMC引脚 方向 描述 CLK 输出 时钟线(仅用于同步突发模式) A[23:16] 输出 地址线 AD[15:0] 输入/输出 16bit地址/数据线(复用) NE[1] 输出 片选线 NOE 输出 输出使能 NWE 输出 写使能 NLNADV 输出 锁存使能 NWAIT 输入 等待信号线 V2.4 398

Page 402

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn NBL[1] 输出 高字节使能NUB NBL[0] 输出 低字节使能NLB前缀“N”的信号表示低电平有效。 26.2.3.2 支持的存储器以及操作方式 支持的存储器以及操作方式见表26-7。 表26-7 支持存储器和操作方式 存储器 模式 HB数据宽度 存储器宽度 描述 异步读 8 16 异步读 16 16 异步写 16 16 NOR FLASH 异步读 32 16 分成2次FSMC访问 异步写 32 16 分成2次FSMC访问 同步读 16 16 同步读 32 16 分成2次FSMC访问 异步读 8 16 异步写 8 16 使用字节信NBL[1:0] 异步读 16 16 异步写 16 16 异步读 32 16 分成2次FSMC访问 PSRAM 异步写 32 16 分成2次FSMC访问 同步读 16 16 同步读 32 16 分成2次FSMC访问 同步写 8 16 使用字节信NBL[1:0] 同步写 16/32 16 异步读 8/16/32 8/16 使用字节信NBL[1:0] SRAM和ROM 异步写 8/16/32 8/16 使用字节信NBL[1:0] 26.2.3.3 NOR/PSRAM 异步传输地址/数据复用的时序图 对于异步静态存储器NOR FLASH和PSRAM操作需注意如下  当启用扩展模式时可混合使用模式A、B、C和D对存储器的读写操作。 V2.4 399

Page 403

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图26-3 模式1读操作复用 Memory operation cycle A[23:16] NBL[1:0] NADV NEx NOE NWE High level AD[15:0] The data bus is driven by Lower 16-bit address 1HCLK external memory ADDSET+1 DATAST+1 BUSTURN+1 HCLK HCLK 2 HCLK (ADDHLD+1) HCLK HCLK Data sampling Data storage 图26-4 模式1写操作复用 Memory operation cycle A[23:16] NBL[1:0] NADV NEX NOE 1HCLK NWE AD[15:0] Lower 16-bit address The data bus is driven by FSMC ADDSET+1 ADDHLD+1 (DATAST+1) (BUSTURN+1) HCLK HCLK HCLK HCLK 注在写操作的最后一个HCLK周期可以保证NWE上升沿后地址和数据的保持时间因为存在这个HCLK V2.4 400

Page 404

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 周期DATAST的数值必须大于0(DATAST > 0)。 表26-8 模式1 FSMC_BCR1位域 Bitx 名称 配置值 [31:20] Reserved 0x000 19 CBURSTRW 0x0 [18:16] Reserved 0x0 15 ASYNCWAIT 如果存储器支持该功能则为1否则为0 14 EXTMOD 0x0 13 WAITEN 0x0 12 WREN 根据需要设置 11 WAITCFG 该位不起作用 10 Reserved 0x0 9 WAITPOL 当bit15为1时有意义 8 BURSTEN 0x0 7 Reserved 0x1 6 FACCEN 该位不起作用 [5:4] MWID 根据需要设置 [3:2] MTYP 根据需要设置不包含0x2NOR FLASH 1 MUXEN 0x1 0 MBKEN 0x1 表26-9 模式1 FSMC_BTR1位域 Bitx 名称 配置值 [31:30] Reserved 0x0 [29:28] ACCMOD 该位不起作用 [27:24] DATLAT 该位不起作用 [23:20] CLKDIV 该位不起作用 [19:16] BUSTURN 0x0 数据建立时间。写操作为DATAST+1 HCLK [15:8] DATAST 读操作为DATAST+3 HCLK。该位最小为1。 [7:4] ADDHLD 地址保持时间。ADDHLD+1 HCLK [3:0] ADDSET 地址建立时间。ADDSET+1 HCLK。 V2.4 401

Page 405

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图26-5 模式A读操作复用 Memory operation cycle A[23:16] NBL[1:0] NADV NEx NOE NWE High level AD[15:0] Lower 16-bit address The data bus is driven by 1HCLK external memory ADDSET+1 DATAST+1 BUSTURN+1 HCLK HCLK 2 HCLK (ADDHLD+1) HCLK HCLK Data sampling Data storage 图26-6 模式A写操作复用 Memory operation cycle A[23:16] NBL[1:0] NADV NEX NOE 1HCLK NWE AD[15:0] Lower 16-bit address The data bus is driven by FSMC ADDSET+1 ADDHLD+1 (DATAST+1) (BUSTURN+1) HCLK HCLK HCLK HCLK V2.4 402

Page 406

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 表26-10 模式A FSMC_BCR1位域 Bitx 名称 配置值 [31:20] Reserved 0x000 19 CBURSTRW 0x0 [18:16] Reserved 0x0 15 ASYNCWAIT 如果存储器支持该功能则为1否则为0 14 EXTMOD 0x1 13 WAITEN 0x0 12 WREN 根据需要设置 11 WAITCFG 该位不起作用 10 Reserved 0x0 9 WAITPOL 当bit15为1时有意义 8 BURSTEN 0x0 7 Reserved 0x1 6 FACCEN 该位不起作用 [5:4] MWID 根据需要设置 [3:2] MTYP 根据需要设置不包含0x2NOR FLASH 1 MUXEN 0x1 0 MBKEN 0x1 表26-11 模式A FSMC_BTR1位域 Bitx 名称 配置值 [31:30] Reserved 0x0 [29:28] ACCMOD 0x0 [27:24] DATLAT 该位不起作用 [23:20] CLKDIV 该位不起作用 [19:16] BUSTYRN 0x0 数据建立时间。读操作为DATAST+3 [15:8] DATAST HCLK。该位最小为1。 [7:4] ADDHLD 该位不起作用 地址建立时间。读操作为ADDSET+1 [3:0] ADDSET HCLK。 表26-12 模式A FSMC_BWTR1位域 Bitx 名称 配置值 [31:30] Reserved 0x0 [29:28] ACCMOD 0x0 [27:24] DATLAT 该位不起作用 [23:20] CLKDIV 该位不起作用 [19:16] BUSTURN 0x0 数据建立时间。写操作为DATAST+1 [15:8] DATAST HCLK。该位最小为1。 [7:4] ADDHLD 地址保持时间。ADDHLD+1 HCLK [3:0] ADDSET 地址建立时间。写操作为ADDSET+1 V2.4 403

Page 407

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn HCLK。 图26-7 模式B读操作复用 Memory operation cycle A[23:16] NADV NEx NOE NWE High level AD[15:0] Lower 16-bit address The data bus is driven by external memory 1HCLK ADDSET+1 DATAST+1 BUSTURN+1 HCLK HCLK 2 HCLK (ADDHLD+1) HCLK HCLK Data samplingData storage V2.4 404

Page 408

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图26-8 模式B写操作复用 Memory operation cycle A[23:16] NADV NEx NOE 1HCLK NWE AD[15:0] Lower 16-bit address The data bus is driven by FSMC ADDSET+1 ADDHLD (DATAST+2) (BUSTURN+1) HCLK HCLK HCLK HCLK 表26-13 模式B FSMC_BCR1位域 Bitx 名称 配置值 [31:20] Reserved 0x000 19 CBURSTRW 0x0 [18:16] Reserved 0x0 15 ASYNCWAIT 如果存储器支持该功能则为1否则为0 14 EXTMOD 0x1 13 WAITEN 0x0 12 WREN 根据需要设置 11 WAITCFG 该位不起作用 10 Reserved 0x0 9 WAITPOL 当bit15为1时有意义。 8 BURSTEN 0x0 7 Reserved 0x1 6 FACCEN 0x1 [5:4] MWID 根据需要设置 [3:2] MTYP 0x2NOR FLASH 1 MUXEN 0x1 0 MBKEN 0x1 V2.4 405

Page 409

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 表26-14 模式B FSMC_BTR1位域 Bitx 名称 配置值 [31:30] Reserved 0x0 [29:28] ACCMOD 0x1 [27:24] DATLAT 该位不起作用 [23:20] CLKDIV 该位不起作用 [19:16] BUSTURN 0x0 数据建立时间。读操作为DATAST+3 [15:8] DATAST HCLK。该位最小为1。 [7:4] ADDHLD 地址保持时间。ADDHLD+1 HCLK 地址建立时间。读操作为ADDSET+1 [3:0] ADDSET HCLK。 表26-15 模式B FSMC_BWTR1位域 Bitx 名称 配置值 [31:30] Reserved 0x0 [29:28] ACCMOD 0x1 [27:24] DATLAT 该位不起作用 [23:20] CLKDIV 该位不起作用 [19:16] BUSTURN 0x0 数据建立时间。写操作为DATAST+1 [15:8] DATAST HCLK。该位最小为1。 [7:4] ADDHLD 地址保持时间。ADDHLD+1 HCLK 地址建立时间。写操作为ADDSET+1 [3:0] ADDSET HCLK。 V2.4 406

Page 410

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图26-9 模式C读操作复用 Memory operation cycle A[23:16] NBL[1:0] NADV NEx NOE NWE High level AD[15:0] Lower 16-bit address The data bus is driven by external memory 1HCLK ADDSET+1 DATAST+1 BUSTURN+1 HCLK HCLK 2 HCLK (ADDHLD+1) HCLK HCLK Data samplingData storage 图26-10 模式C写操作复用 Memory operation cycle A[23:16] NADV NEX NOE 1HCLK NWE AD[15:0] Lower 16-bit address The data bus is driven by FSMC ADDSET+1 ADDHLD (DATAST+2) (BUSTURN+1) HCLK HCLK HCLK HCLK 表26-16 模式C FSMC_BCR1位域 Bitx 名称 配置值 [31:20] Reserved 0x000 19 CBURSTRW 0x0 [18:16] Reserved 0x0 V2.4 407

Page 411

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 15 ASYNCWAIT 如果存储器支持该功能则为1否则为0 14 EXTMOD 0x1 13 WAITEN 0x0 12 WREN 根据需要设置 11 WAITCFG 该位不起作用 10 Reserved 0x0 9 WAITPOL 当bit15为1时有意义。 8 BURSTEN 0x0 7 Reserved 0x1 6 FACCEN 0x1 [5:4] MWID 根据需要设置 [3:2] MTYP 0x2NOR FLASH 1 MUXEN 0x1 0 MBKEN 0x1 表26-17 模式C FSMC_BTR1位域 Bitx 名称 配置值 [31:30] Reserved 0x0 [29:28] ACCMOD 0x2 [27:24] DATLAT 该位不起作用 [23:20] CLKDIV 该位不起作用 [19:16] BUSTURN 0x0 数据建立时间。读操作为DATAST+3 [15:8] DATAST HCLK。该位最小为1。 [7:4] ADDHLD 地址保持时间。ADDHLD+1 HCLK 地址建立时间。读操作为ADDSET+1 [3:0] ADDSET HCLK。 表26-18 模式C FSMC_BWTR1位域 Bitx 名称 配置值 [31:30] Reserved 0x0 [29:28] ACCMOD 0x2 [27:24] DATLAT 该位不起作用 [23:20] CLKDIV 该位不起作用 [19:16] BUSTURN 0x0 数据建立时间。写操作为DATAST+1 [15:8] DATAST HCLK。该位最小为1。 [7:4] ADDHLD 地址保持时间。ADDHLD+1 HCLK 地址建立时间。写操作为ADDSET+1 [3:0] ADDSET HCLK。 V2.4 408

Page 412

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图26-11 模式D读操作复用 Memory operation cycle A[23:16] NADV NEx NOE NWE High level AD[15:0] Lower 16-bit address The data bus is driven by external memory 1HCLK ADDSET+1 DATAST+1 BUSTURN+1 HCLK HCLK 2 HCLK (ADDHLD+1) HCLK HCLK Data sampling Data storage V2.4 409

Page 413

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图26-12 模式D写操作复用 Memory operation cycle A[23:16] NADV NEX NOE 1HCLK NWE AD[15:0] Lower 16-bit address The data bus is driven by FSMC ADDSET+1 ADDHLD (DATAST+2) (BUSTURN+1) HCLK HCLK HCLK HCLK 表26-19 模式D FSMC_BCR1位域 Bitx 名称 配置值 [31:20] Reserved 0x000 19 CBURSTRW 0x0 [18:16] Reserved 0x0 15 ASYNCWAIT 如果存储器支持该功能则为1否则为0 14 EXTMOD 0x1 13 WAITEN 0x0 12 WREN 根据需要设置 11 WAITCFG 该位不起作用 10 Reserved 0x0 9 WAITPOL 当bit15为1时有意义。 8 BURSTEN 0x0 7 Reserved 0x1 6 FACCEN 根据需要设置 [5:4] MWID 根据需要设置 [3:2] MTYP 根据需要设置 1 MUXEN 0x1 0 MBKEN 0x1 表26-20 模式D FSMC_BTR1位域 Bitx 名称 配置值 [31:30] Reserved 0x0 V2.4 410

Page 414

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [29:28] ACCMOD 0x3 [27:24] DATLAT 该位不起作用 [23:20] CLKDIV 该位不起作用 [19:16] BUSTURN 0x0 数据建立时间。读操作为DATAST+3 [15:8] DATAST HCLK。该位最小为1。 [7:4] ADDHLD 地址保持时间。ADDHLD+1 HCLK。 地址建立时间。读操作为ADDSET+1 [3:0] ADDSET HCLK。 表26-21 模式D FSMC_BWTR1位域 Bitx 名称 配置值 [31:30] Reserved 0x0 [29:28] ACCMOD 0x3 [27:24] DATLAT 0x0 [23:20] CLKDIV 0x0 [19:16] BUSTYRN 0x0 数据建立时间。写操作为DATAST+1 [15:8] DATAST HCLK。该位最小为1。 [7:4] ADDHLD 地址保持时间。ADDHLD+1 HCLK。 地址建立时间。写操作为ADDSET+1 [3:0] ADDSET HCLK。 26.2.3.4 NOR/PSRAM 同步传输地址/数据复用的时序图 数据延迟与NOR FLASH的延时需注意DATALAT数值必须与NOR FLASH配置寄存器中的定义一致。 NADV 信号为低时的时钟周期不计算在延迟参数中。FSMC 的 DATLAT 参数可以为 DATALAT+2 或为 DATALAT+3对于特别的存储器会在数据保持时间阶段产生 NWAIT 信号DATLAT 需要设置为最小值, 对于另外一些存储器不会在数据保持时间阶段产生 NWAIT 信号FSMC 和存储器的数据保持时间必须 设置一致。 对于单次批量传输需注意存储器配置位同步批量模式若传输16bit数据FSMC会执行1次长 度为1的批量传输若传输32bit数据FSMC分为2次16bit传输执行1次长度为2的批量传输。 NOR FLASH同步批量模式访问时在保持时间DATLAT+1 CLK之后若检测NWAIT信号为低电 平时在NWAIT变成高电平之前FSMC需要插入等待周期当NWAIT变为高电平时FSMC认为数据有 效。在NWAIT信号控制的等待状态插入期间控制器会持续向存储器发送时钟脉冲、保持片选信号和 输出有效信号同时忽略无效的数据信号。在批量传输模式下NOR FLASH 的 NWAIT 信号通过配置 WAITCFG位选择两种时序配置。 V2.4 411

Page 415

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图26-13 同步总线复用读操作(复用) 表26-22 FSMC_BCR1位域同步读模式 Bitx 名称 配置值 [31:20] Reserved 0x000 19 CBURSTRW 该位不起作用 [18:16] Reserved 0x0 15 ASYNCWAIT 0x0 14 EXTMOD 0x0 13 WAITEN 0x0 12 WREN 该位不起作用 11 WAITCFG 根据需要设置 10 Reserved 0x0 9 WAITPOL 根据需要设置 8 BURSTEN 0x1 7 Reserved 0x1 6 FACCEN 根据需要设置 V2.4 412

Page 416

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [5:4] MWID 根据需要设置 [3:2] MTYP 0x1或0x2 1 MUXEN 0x1 0 MBKEN 0x1 表26-23 FSMC_BTR1位域同步读模式 Bitx 名称 配置值 [31:30] Reserved 0x0 [29:28] ACCMOD 0x0 [27:24] DATLAT 数据保持时间 0x0 保留 [23:20] CLKDIV 0x1 - CLK=2 HCLK [19:16] BUSTURN 该位不起作用 [15:8] DATAST 该位不起作用 [7:4] ADDHLD 该位不起作用 [3:0] ADDSET 该位不起作用 图26-14 同步总线复用写操作(复用) V2.4 413

Page 417

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 表26-24 FSMC_BCR1位域同步写模式 Bitx 名称 配置值 [31:20] Reserved 0x000 19 CBURSTRW 0x1 [18:16] Reserved 0x0 15 ASYNCWAIT 0x0 14 EXTMOD 0x0 13 WAITEN 如果存储器支持该功能则为1否则为0 12 WREN 0x1 11 WAITCFG 0x0 10 Reserved 0x0 9 WAITPOL 根据需要设置 8 BURSTEN 该位不起作用 7 Reserved 0x1 6 FACCEN 根据需要设置 [5:4] MWID 根据需要设置 [3:2] MTYP 0x1 1 MUXEN 0x1 0 MBKEN 0x1 表26-25 FSMC_BTR1位域同步写模式 Bitx 名称 配置值 [31:30] Reserved 0x0 [29:28] ACCMOD 0x0 [27:24] DATLAT 数据保持时间 0x0 保留 [23:20] CLKDIV 0x1 - CLK=2 HCLK [19:16] BUSTURN 该位不起作用 [15:8] DATAST 该位不起作用 [7:4] ADDHLD 该位不起作用 [3:0] ADDSET 该位不起作用 26.2.4 NAND FLASH 控制器 FSMC支持8bit、16bit操作NAND FLASHFSMC 可以根据需要产生多个地址周期理论上FSMC 对NAND FLASH的容量没有限制。NAND FLASH的读写参数可软件配置见表26-26。 表26-26 软件可控的NAND读写参数 参数 功能 读写方式 参数取值范围 发出命令之前建立地址的 1<< T <<256 HB 存储器建立时间 读/写 时间 HCLK 1<< T <<256 HB 存储器等待时间 发出命令的最短持续时间 读/写 HCLK 在发送命令结束后保持地 1<< T <<255 HB 存储器保持时间 址的时间,写操作时也是数 读/写 HCLK 据的保持时间 V2.4 414

Page 418

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 存储器数据总线 启动写操作之后数据总线 0<< T <<255 HB 写 高阻时间 持续为高阻态时间 HCLK 26.2.4.1 外部存储器接口信号 8bit和16bit NAND FLASH接口见表26-27、表26-28。 表26-27 8bit NAND FLASH FSMC引脚 方向 描述 A[17] 输出 地址锁存允许信号ALE A[16] 输出 命令锁存允许信号CLE D[7:0] 输入/输出 8bit双向地址/数据复用总线 NCE[2] 输出 片选线 NOE 输出 输出使能 NWE 输出 写使能 NWAIT 输入 等待信号线 表26-28 16bit NAND FLASH FSMC引脚 方向 描述 A[17] 输出 地址锁存允许信号ALE A[16] 输出 命令锁存允许信号CLE D[15:0] 输入/输出 16bit双向地址/数据复用总线 NCE[2] 输出 片选线 NOE 输出 输出使能 NWE 输出 写使能 NWAIT 输入 等待信号线 26.2.4.2 支持的存储器以及操作方式 支持的存储器以及操作方式见表26-29。 表26-29 支持存储器和操作方式 存储器 模式 HB数据宽度 存储器宽度 描述 异步读 8 8 异步写 8 8 异步读 16 8 分成2次FSMC访问 8bit NAND 异步写 16 8 分成2次FSMC访问 异步读 32 8 分成4次FSMC访问 异步写 32 8 分成4次FSMC访问 异步读 8 16 异步读 16 16 16bit NAND 异步写 16 16 异步读 32 16 分成2次FSMC访问 异步写 32 16 分成2次FSMC访问 26.2.4.3 NAND FLASH 时序图(包括预等待功能) NAND FLASH操作时序控制涉及FSMC_PMEM2和FSMC_PATT2时序寄存器每一个寄存器包含4个 参数。MEMHOLD、MEMWAIT和ATTSET三个参数对应操作NAND FLASH的三个阶段的HCLK周期数MEMHIZ V2.4 415

Page 419

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 参数对应FSMC开始驱动数据总线的时机。NAND FLASH控制器通用存储空间访问时序见图26-15。 图26-15 NAND FLASH控制器通用存储空间的访问时序 HCLK A[23:0] NCEx NREG, NIOW,NIOR High level MEMxSET+1 MEMxWAIT+1 MEMxHOLD+1 NWE, NOE MEMxHIZ+1 WR DATA RD DATA Valid 26.2.4.4 NAND FLASH 操作流程 NAND FLASH的命令锁存使能信号CLE和地址锁存使能信号ALE分别由FSMC地址线A16和 A17 驱动,故在对 NAND FLASH 操作发送命令或地址时,需要对存储空间的特定地址执行写操作。对 NAND FLASH的读操作过程如下 1 根据即将操作的NAND FLASH特性配置FSMC_PCR2、FSMC_PMEM2和FSMC_PATT2寄存器的PWID、 PTYP、PWAITEN和PBKEN。 2 在通用存储空间写入命令字节在NWE为低电平期间CLE输出高电平此时该命令字节被NAND FLASH识别为一个命令并锁存该命令随后的页读操作不需要重复发送该命令。 3 之后通过向存储器空间写入4个字节作为读操作的起始地址。在NWE为低电平期间ALE输出 高电平此时4个字节被NAND FLASH识别为读操作的起始地址。在操作属性存储空间时可以 使FSMC产生不同的时序实现某些NAND FLASH预等待功能。 4 FSMC控制器开始新的操作前需要等待NAND FLASH的R/NB信号变为高电平在等待期间FSMC控 制器需要保持NCE信号为低电平。 5 FSMC控制器可以通过操作通用存储空间可以从NAND FLASH逐字节的读出存储页。 26.2.4.5 NAND FLASH 预等待功能 某些特殊的NAND FLASH需要在输入最后一个地址字节后R/NB信号变为低电平见图26-16。 图中1为 CPU写字节命令 0x00到 0x70010000图中2为 CPU写 NAND FLASH 的地址 A7-A0至 0x70020000图中3为CPU写NAND FLASH的地址A15-A8至0x70020000图中4为CPU写NAND FLASH的地址A23-A16至0x70020000图中5为CPU写NAND FLASH的地址A31-A24至0x70020000 V2.4 416

Page 420

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图26-16 操作特殊型NAND FLASH NCE must be kept low NCE CLE ALE NWE NOE High level tR I/O[7:0] 0x00 A7-A0 A15-A8 A23-A16 A31-A24 tWB R/NB (1) (2) (3) (4) (5) 使用该功能时通过配置FSMC_PMEM2寄存器的MEMHOLD位来保证tWB的时序之后对NAND FLASH 的读写操作FSMC控制器都会在NEW信号的上升沿至下一次操作之间插入MEMHOLD+1HCLK保持延 时。为了解决该问题这里使用属性空间配置ATTHOLD数值使之符合tWB的时序同时需要保持MEMHOLD 为最小值。此时只有在写入NAND FLASH地址的最后一个字节时FSMC控制器需要写入属性存储空 间其余NAND FLASH的读写操作使用通用存储空间。 26.2.4.6 NAND FLASH ECC 功能 FSMC的NAND FLASH控制器包含1个纠错码计算硬件模块可有效减少CPU在处理纠错码时的软 件工作量。ECC模块在读写NAND FLASH时支持每256、512、1024、2048、4096或8192个字节中 矫正1个bit错误并且检测出2个bit错误。页大小对应ECC结果有效位见表26-30。在ECC计算 电路使能后ECC模块监测NAND FLASH的数据总线和读/写信号NCE和NWE。ECC使用时需注意如 下:  在访问NAND FLASH时出现在D[15:0]总线上的数据被锁存并用于ECC计算。  当规定数目的字节已经被写入NAND FLASH或从NAND FLASH读出后软件从FSMC_ECCR2寄 存器读出ECC值。若需再次计算ECC先将ECCEN清0再写1重新使能ECC计算。 表26-30 页大小对应ECC结果有效位 ECCPS[2:0] 页大小(字节) ECC有效位 000 256 ECC[21:0] 001 512 ECC[23:0] 010 1024 ECC[25:0] 011 2048 ECC[27:0] 100 4096 ECC[29:0] 101 8192 ECC[31:0] V2.4 417

Page 421

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 26.3 寄存器描述 表26-31 FSMC相关寄存器列表 名称 访问地址 描述 复位值 SRAM/NOR-Flash 片选控制寄存器 R32_FSMC_BCR1 0xA0000000 0x000030DX 1 SRAM/NOR-Flash 片选时序寄存器 R32_FSMC_BTR1 0xA0000004 0x0FFFFFFF 1 R32_FSMC_PCR2 0xA0000060 NAND-Flash控制寄存器2 0x00000018 R32_FSMC_SR2 0xA0000064 FIFO状态和中断寄存器2 0x00000040 R32_FSMC_PMEM2 0xA0000068 通用存储空间时序寄存器2 0xFCFCFCFC R32_FSMC_PATT2 0xA000006C 属性存储空间时序寄存器2 0xFCFCFCFC R32_FSMC_ECCR2 0xA0000074 ECC结果寄存器2 0x00000000 R32_FSMC_BWTR1 0xA0000104 SRAM/NOR-Flash写时序寄存器1 0x0FFFFFFF 26.3.1 SRAM/NOR-Flash 片选控制寄存器 1FSMC_BCR1 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CBURS Reserved Reserved TRW 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ASYNC EXTM WAIT WAIT Reser WAIT BURST Reser FACC WREN MWID[1:0] MTYP[1:0] MUXEN MBKEN WAIT OD EN CFG ved POL EN ved EN 位 名称 访问 描述 复位值 [31:20] Reserved RO 保留。 0 批量写使能: 19 CBURSTRW RW 0写操作处于异步模式 0 1写操作处于同步模式。 [18:16] Reserved RO 保留。 0 异步传输期间的等待信号: 15 ASYNCWAIT RW 0禁用异步传输期间等待信号 0 1启用异步传输期间等待信号。 扩展模式使能: 14 EXTMOD RW 0不允许写使用FSMC_BWTR寄存器 0 1允许写使用FSMC_BWTR寄存器。 等待使能。当闪存存储器处于批量传输模式 时,该位控制是否根据 NWAIT 信号插入等待 13 WAITEN RW 信号。 1 0禁用NWAIT信号 1使用NWAIT信号。 写操作使能: 12 WREN RW 1 0禁止FSMC对存储器进行写操作 V2.4 418

Page 422

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1允许FSMC对存储器进行写操作。 等待时序配置: 0NWAIT信号在等待状态前的一个数据周期 11 WAITCFG RW 0 有效; 1NWAIT信号在等待状态期间有效。 10 Reserved RO 保留。 0 等待信号极性: 9 WAITPOL RW 0NWAIT等待信号为低有效 0 1NWAIT等待信号为高有效。 批量模式使能: 8 BURSTEN RW 0不使能批量模式 0 1使能批量模式。 7 Reserved RO 保留。 1 NOR FLASH访问使能 6 FACCEN RW 0禁止对NOR FLASH访问 1 1允许对NOR FLASH访问。 数据总线宽度: 008位 [5:4] MWID[1:0] RW 0116位 01b 10保留 11保留。 储存器类型: 00SRAM、ROM [3:2] MTYP[1:0] RW 01PSRAM xxb 10NOR FLASH 11保留。 地址/数据复用使能: 1 MUXEN RW 0地址/数据不复用; x 1地址/数据复用。 存储器块使能: 0 MBKEN RW 0禁用对应的存储器块 x 1启用对应的存储器块。 26.3.2 SRAM/NOR-Flash 片选时序寄存器 1FSMC_BTR1 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved ACCMOD[1:0] DATLAT[3:0] CLKDIV[3:0] BUSTURN[3:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATAST[7:0] ADDHLD[3:0] ADDSET[3:0] 位 名称 访问 描述 复位值 [31:30] Reserved RO 保留。 0 异步访问模式: [29:28] ACCMOD[1:0] RW 00b 00模式A V2.4 419

Page 423

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 01模式B 10模式C 11模式D。 数据保持时间。用于同步批量模式(仅适用 于NOR FLASH。 0000第一个数据保持时间为2个CLK时钟 …… [27:24] DATLAT[3:0] RW 1111b 1110第一个数据保持时间为 16 个 CLK 时 钟; 1111第一个数据保持时间为 17 个 CLK 时 钟。 时钟分频比CLK信号。访问异步NOR FLASH、 SRAM和ROM时该参数不起作用。 0000保留 [23:20] CLKDIV[3:0] RW 00011个CLK周期=2个HCLK周期 1111b …… 11101个CLK周期=15个HCLK周期 11111个CLK周期=16个HCLK周期。 总线恢复时间。仅适用于NOR FLASH 0000总线恢复时间=1个HCLK周期 [19:16] BUSTURN[3:0] RW …… 1111b 1110总线恢复时间=15个HCLK周期 1111总线恢复时间=16个HCLK周期。 数据保持时间。 00000000保留。 00000001数据保持时间=2个HCLK周期 …… 11111110数据保持时间=255个HCLK周期 11111111数据保持时间=256个HCLK周期。 [15:8] DATAST[7:0] RW 0xFF 对于每一种存储器类型和访问方式的数据保 持时间,请参考对应的图表(见图 26-3 至图 26-12)。 例如模式1和模式A读操作时DATAST=1 数据保持时间=DATAST+3=4 个 HCLK 时钟周 期。 地址保持时间。(仅适用于异步操作) 0000地址保持时间=1个HCLK周期 [7:4] ADDHLD[3:0] RW …… 1111b 1110地址保持时间=15个HCLK周期 1111地址保持时间=16个HCLK周期。 地址建立时间。(仅适用于异步操作) 0000地址建立时间=1个HCLK周期 …… [3:0] ADDSET[3:0] RW 1111b 1110地址建立时间=15个HCLK周期 1111地址建立时间=16个HCLK周期。 对于每一种存储器类型和访问方式的数据保 V2.4 420

Page 424

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 持时间,请参考对应的图表(见图 26-3 至图 26-12)。 例如模式1和模式A读操作时DATAST=1 数据保持时间=DATAST+3=4 个 HCLK 时钟周 期。 26.3.3 NAND-Flash 控制寄存器 2FSMC_PCR2 偏移地址0x60 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved ECCPS[2:0] TAR[3] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PWAI Reser TAR[2:0] TCLR[3:0] Reserved ECCEN PWID[1:0] PTYP PBKEN TEN ved 位 名称 访问 描述 复位值 [31:20] Reserved RO 保留。 0 ECC页面大小 000256Byte 001512Byte 0101024Byte [19:17] ECCPS[2:0] RW 000b 0112048Byte 1004096Byte 1018192Byte 111保留。 ALE至RE的延迟 00001个HCLK周期 [16:13] TAR[3:0] RW …… 0000b 111015个HCLK周期 111116个HCLK周期。 CLE至RE的延迟 00001个HCLK周期 [12:9] TCLR[3:0] RW …… 0000b 111015个HCLK周期 111116个HCLK周期。 [8:7] Reserved RO 保留。 0 ECC使能 6 ECCEN RW 0禁用ECC 0 1使能ECC。 数据总线宽度: 008位 [5:4] PWID[1:0] RW 0116位 01b 10保留 11保留。 3 PTYP RW 存储器类: 1 V2.4 421

Page 425

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0保留 1NAND闪存。 NAND存储器使能 2 PBKEN RW 0禁用对应的存储器块 0 1使能对应的存储器块。 等待功能使能: 1 PWAITEN RW 0禁用 0 1使能。 0 Reserved RO 保留。 0 26.3.4 FIFO 状态和中断寄存器 2FSMC_SR2 偏移地址0x64 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved FEMPT Reserved 位 名称 访问 描述 复位值 [31:7] Reserved RO 保留。 0 FIFO空标志。 6 FEMPT RO 0FIFO不空 1 1FIFO空。 [5:0] Reserved RO 保留。 0 26.3.5 通用存储空间时序寄存器 2FSMC_PMEM2 偏移地址0x68 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 MEMHIZx[7:0] MEMHOLDx[7:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MEMWAITx[7:0] MEMSETx[7:0] 位 名称 访问 描述 复位值 通用空间数据总线的高阻时间: 00000000NAND FLASH为0个HCLK周期 [31:24] MEMHIZx[7:0] RW …… 0xFC 11111110NAND FLASH为254个HCLK周期 11111111NAND FLASH为255个HCLK周期。 通用空间保持时间: 00000000保留 000000011个HCLK周期 [23:16] MEMHOLDx[7:0] RW 0xFC …… 11111110254个HCLK周期 11111111255个HCLK周期。 V2.4 422

Page 426

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 通用空间等待时间。(需要加上由 NWAIT 信 号变低引入的等待周期) 00000000保留 [15:8] MEMWAITx[7:0] RW 000000012个HCLK周期 0xFC …… 11111110255个HCLK周期 11111111256个HCLK周期。 通用空间建立时间: 00000000NAND FLASH 2个HCLK周期 [7:0] MEMSETx[7:0] RW …… 0xFC 11111110NAND FLASH 256个HCLK周期 11111111NAND FLASH 257个HCLK周期。 26.3.6 属性存储空间时序寄存器 2FSMC_PATT2 偏移地址0x6C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ATTHIZx[7:0] ATTHOLDx[7:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ATTWAITx[7:0] ATTSETx[7:0] 位 名称 访问 描述 复位值 属性空间数据总线的高阻时间: 000000000个HCLK周期 [31:24] ATTHIZx[7:0] RW …… 0xFC 11111110254个HCLK周期 11111111255个HCLK周期。 属性空间保持时间: 00000000保留 000000011个HCLK周期 [23:16] ATTHOLDx[7:0] RW 0xFC …… 11111110254个HCLK周期 11111111255个HCLK周期。 属性空间等待时间。(需要加上由 NWAIT 信 号变低引入的等待周期) 000000001个HCLK周期 [15:8] ATTWAITx[7:0] RW 000000012个HCLK周期 0xFC …… 11111110255个HCLK周期 11111111256个HCLK周期。 属性空间建立时间。 000000001个HCLK周期 [7:0] ATTSETx[7:0] RW …… 0xFC 11111110255个HCLK周期 11111111256个HCLK周期。 V2.4 423

Page 427

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 26.3.7 ECC 结果寄存器 2FSMC_ECCR2 偏移地址0x74 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ECC[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ECC[15:0] 位 名称 访问 描述 复位值 [31:0] ECC[31:0] RO ECC计算结果。 0 26.3.8 SRAM/NOR-Flash 写时序寄存器 1FSMC_BWTR1 偏移地址0x104 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ACCMOD Reserved Reserved BUSTYRN[3:0] [1:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATAST[7:0] ADDHLD[3:0] ADDSET[3:0] 位 名称 访问 描述 复位值 [31:30] Reserved RO 保留。 0 访问模式。该位在EXTMOD为1时有效 00访问模式A [29:28] ACCMOD[1:0] RW 01访问模式B 00b 10访问模式C 11访问模式D。 [27:20] Reserved RO 保留。 0 总线恢复时间。 00001个HCLK周期 00012个HCLK周期 [19:16] BUSTYRN[3:0] RW 1111b …… 111015个HCLK周期 111116个HCLK周期。 数据保持时间: 00000000保留 000000012个HCLK周期 [15:8] DATAST[7:0] RW 0xFF …… 11111110255个HCLK周期 11111111256个HCLK周期。 地址保持时间: 0000保留 [7:4] ADDHLD[3:0] RW 1111b 00012个HCLK周期 …… V2.4 424

Page 428

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 111015个HCLK周期 111116个HCLK周期。 地址建立时间: 00001个HCLK周期 00012个HCLK周期 [3:0] ADDSET[3:0] RW 1111b …… 111015个HCLK周期 111116个HCLK周期。 V2.4 425

Page 429

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 27 章 以太网收发器ETH 本章模块描述适用于CH32V30x、CH32V31x和CH32F20x微控制器系列部分产品。 本章提到的“以太网收发器”是一个专有名词意为微控制器内部的以太网Ethernet数据链 路层收发器通讯速率最高为千兆位每秒1Gbps是一个通讯外设。本章提到的“MAC”指的是以 太网收发器在数据链路层的角色名称,是以太网收发器的组成部分。 以太网收发器Ethernet Transceiver MAC是微控制器一个重要的高速通讯部件它允许微控 制器以千兆位Gigabit的连接速度接入以太网实现极快的数据沟通。 27.1 关于 CH32F207、CH32V307、CH32V317 产品 27.1.1 主要特征 CH32V307、CH32F207芯片的MAC支持MII/RMII/RGMII接口且内置一个10Mbps PHYCH32V317芯 片支持以太网控制器MAC和内置10Mbps/100Mbps PHY。 以太网MAC通过SMI接口控制PHY接口的时序由MAC自动实现无需用户通过软件生成。RGMII 接口支持发送时钟相位翻转和相对数据延迟最大延迟4纳秒。 以太网MAC支持标准IEEE802.3协议的以太网,支持魔法帧和特定唤醒帧。以太网收发器搭配的 DMA控制器以描述符的形式进行数据的收发管理和内存搬运描述符的数量由用户根据沟通密集程度 自行确定DMA 控制器能以 32 位宽的速度向描述符指定的内存空间写入接收到的数据或从取出将发 送的数据。此外以太网收发器的MAC还支持IEEE1588精确时间协议。 27.1.1.1 MAC 特征  支持MII/RMII/RGMII接口  RGMII支持发送时钟延迟和翻转  支持全双工与半双工支持10M/100M/1000Mbps的数据传输速率  支持自动插入帧头序列和SFD  支持自动插入和校验CRC  支持自动计算和校验IP/ICMP/TCP/UDP协议数据包的检验和  支持发送帧长控制  支持发送间隙调节  支持VLAN帧  支持帧接收地址的完美地址过滤、HASH过滤  支持帧发送地址过滤  支持多播广播帧接收控制  支持混杂模式  支持SMI管理接口RGMII与MII各一套  支持魔法帧和自定义的唤醒帧唤醒微控制器  支持专门的以太网唤醒中断入口  支持链路层的数据回环  CH32V307、CH32F207芯片应用可选以太网控制器MAC + 内置10Mbps PHY或外置1Gbps PHY  CH32V317芯片应用为以太网控制器MAC + 内置10Mbps/100Mbps PHY 27.1.1.2 DMA 特征  32位宽的MAC专享DMA  最大程度减小CPU的操作  支持以字节对齐方式访问RAM V2.4 426

Page 430

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn  以描述符的方式管理收发缓冲区  接收发送的一部分状态反馈在描述符中  可以动态修改非正在使用的描述符和缓冲区  支持手动停止或启动  支持链式或环式的形式连接描述符  支持收发完成中断等多种中断源 27.1.1.3 MMC 模块特征  支持手动复位、停止或冻结  多个支持发送和接收的多种计数模式的计数器  支持多种中断 27.1.1.4 PTP 模块特征  支持IEEE 1588协议  支持自动在收发时保存当前的时刻  自带一个32位的秒计时器和一个32位有符号的亚秒计时器  支持以精调和粗调两种方式调节时间  支持一个中断源  支持PPS输出 27.1.1.5 内部 10M 物理层特征  支持10BASE-T  通过SMI接口管理  支持MDIX自动翻转  支持MDI接口的差分对p/n极性翻转  支持手动复位  支持物理层的数据回环  支持半双工、全双工 27.1.1.6 内部 10M/100M 物理层特征(仅 CH32V317)  支持10BASE-T和100BASE-TX及自动协商  支持Auto-MDIX交换TX/RX自动识别正负信号线  支持RMII接口模式  支持支持WOL网络唤醒  支持中断功能  支持半双工、全双工  两种网络状态LED 27.1.2 概述 以太网收发器工作在 OSI 七层模型中的数据链路层和物理层。如果需要实现大于 10Mbps 的数据 传输速率需要外接百兆或千兆物理层芯片PHY实现物理连接。为了能在广泛使用的以太网中建 立 IP、TCP 和 UDP等协议的通讯用户还需要用软件实现 TCP/IP协议栈。以太网收发器由媒体访问 控制层MAC、搭配的DMA及二者的控制寄存器及十兆物理层组成。 V2.4 427

Page 431

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图27-1 以太网收发器在OSI模型和TCP/IP模型中的位置 Application Layer Representation Several application Application Layer Layer protocols Session Layer Several transport Transport Layer Transport Layer protocols Network protocols Network Layer Network Layer and other ancillary Ethernet protocols Transceiver Data Link Layer Data Link Layer Low-level LAN and WAN technologies Physical Layer Physical Layer PHY OSI model TCP/IP protocol family 以太网收发器的 MAC 按照 IEEE802.3 协议的规范设计,搭配 32 位宽的 DMA保证数据能快速地 从网线上转发到微控制器的内存中。以太网收发器拥有强大完整的DMA控制寄存器、MAC控制寄存器 和模式控制寄存器,微控制器的 CPU 通过 HB 总线操作以太网收发器的寄存器。以太网收发器通过 RGMII 接口和千兆以太网物理层连接,如果只需要百兆以太网的速度,则可以通过 MII 或 RMII 接口 和百兆以太网物理层连接。以太网收发器的MII、RMII和RGMII接口的管脚是复用的具体参看27.1.3 节。以太网收发器通过 SMI 接口管理以太网物理层。使用以太网收发器时HB 总线的时钟不能低于 50MHz。 图27-2 以太网收发器的结构框图 MII DMA Operation Media access HB control & mode Control RMII status register MAC 802.3 registers RGMII Checksum PTP offload IEEE1588 125MHz External PHY PMT MMC MDC MAC control MDIO registers RAM Ethernet DMA MDI Magnetics PHY 此外以太网收发器还支持IEEE1588精确时间协议PTP为微控制器系统或片外提供精确的 时间数据。 27.1.3 以太网收发器使用引脚的分布和配置 微控制器支持三种MII接口即标准MII、RMII和RGMII。MII/RMII接口专用于十兆和百兆以太 网物理层RGMII接口可用于十兆、百兆和千兆以太网。下表显示了标准MIIRMII和RGMII接口及 内部物理层在封装引脚上的分布。 V2.4 428

Page 432

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 表27-1 微控制器的媒体独立接口、内置物理层的介质相关接口 及其他相关的引脚分布和需要进行的配置 RGMII的 MII/RMII的 引脚 RGMII MII RMII 引脚配置 引脚配置 PA2 TXCLK MDIO 推挽复用输出 PC1 RXCTL 浮空输入 MDC 推挽复用输出 PC0 RXCLK 浮空输入 PA1 RXD3 浮空输入 RX_CLK REF_CLK 浮空输入 PA7 TXD0 推挽复用输出 RX_DV CRS_DV 浮空输入 PC4 TXD1 推挽复用输出 RXD0 RXD0 浮空输入 PC5 TXD2 推挽复用输出 RXD1 RXD1 浮空输入 PB0 TXD3 推挽复用输出 RXD2 浮空输入 PB1 125MHz_IN 浮空输入 RXD3 浮空输入 PB10 RXER 浮空输入 PC3 RXD1 浮空输入 TX_CLK 浮空输入 PB11 TX_EN TX_EN 推挽复用输出 PB12 MDC 推挽复用输出 TXD0 TXD0 推挽复用输出 PB13 MDIO 推挽复用输出 TXD1 TXD1 推挽复用输出 PC2 RXD0 浮空输入 TXD2 推挽复用输出 PB8 TXD3 推挽复用输出 PA0 RXD2 浮空输入 CRS 浮空输入 PA3 TXCTL 推挽复用输出 COL 浮空输入 PB5 PPS_OUT推挽复用输出 PC6 10BASE-T_RX_p无需IO配置 PC7 10BASE-T_RX_n无需IO配置 PC8 10BASE-T_TX_p无需IO配置 PC9 10BASE-T_TX_n无需IO配置 27.1.4 物理层PHY管理和数据交互 以太网收发器的 MAC 通过站点管理接口SMI 接口)对 PHY 进行管理使用媒体独立接口MII 接口)与 PHY 进行数据交互。微控制器支持的 MII 接口包括标准 MII一般就写为 MII、精简 MII RMII和精简的千兆MIIRGMII。微控制器在MII/RMII模式下和RGMII模式下使用不同管脚引 出SMI接口。 27.1.4.1 SMI 接口 SMI接口是一种串行通讯接口使用MDC时钟线和MDIO数据线两线来访问PHY的寄存器 实现对PHY的管理最多可以管理32个PHY芯片。其中MDC是时钟线空闲时保持低MDIO是数据 线。SMI的读写操作和帧的组成都是由MAC主导的用户只需要写入地址和数据。相关的寄存器分别 为MII地址寄存器R32_ETH_MACMIIAR和MII数据寄存器R32_ETH_MACMIIDR。 27.1.4.1.1 帧格式 SMI接口管理帧的格式如下表27-2所示。 V2.4 429

Page 433

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 表27-2 SMI帧格式 Preamble STR OP PHY ADR REG ADR T DATA P 32个 读 01 10 PPPPP RRRRR Z0 DDDDDDDDDDDDDDDD Z “1” 32个 写 01 01 PPPPP RRRRR 10 DDDDDDDDDDDDDDDD Z “1” 管理帧各域的定义如下: 1 Preamble先导符由32个“1”组成用于MAC和PHY同步 2 STR起始符固定为“01” 3 OP操作符读为“10”写为“01” 4 PHY ADR物理层地址5位 5 REG ADR寄存器地址5位 6 T转换符两位用来切换MAC和PHY对MDIO线的控制权。在读操作时MAC保持对MDIO线的 高阻PHY对第一位保持高阻对第二位下拉并获取MDIO的控制权在写操作时MAC对MDIO 线先置高再下拉PHY对MDIO保持高阻状态MAC保持对MDIO的控制权 7 DATA数据域16位MAC对PHY读写的数据MSB在前 8 PMAC和PHY都对MDIO保持高阻状态但PHY的上拉电阻会把MDIO拉高。 27.1.4.1.2 读写时序 写PHY寄存器操作如下 当用户设置了MII写位ETH_MACMIIAR:MW和忙位ETH_MACMIIAR:MBSMI接口会向PHY发 送PHY地址和寄存器地址然后发送数据ETH_MACMIIDR。在SMI接口发送数据的过程中不能修 改MII地址寄存器和MII数据寄存器的值在此过程中忙位保持为高对MII地址寄存器或MII数 据寄存器的写操作将被忽视并且不对整个传输造成影响。当完成写操作时SMI 接口将清除忙位, 用户可以根据忙位判断写操作结束。如图27-3的写部分。 读PHY寄存器操作如下 当用户把以太网MAC的MII地址寄存器ETH_MACMIIAR的MII忙位置位而保持MII写位复位 时SMI接口则发送PHY地址和寄存器地址执行读PHY寄存器的操作。在整个传输过程中用户不 能修改MII地址寄存器和MII数据寄存器的内容。在传输过程中忙位保持为高对MII地址寄存器 或MII数据寄存器的写操作将被忽视并且不影响整个传输的正确完成。在读操作完成后SMI接口 将清除忙位并把从PHY读回的数据写入MII数据寄存器。如图27-3的读部分。 图27-3 SMI接口读写时速图 MDC MDIO 32 1's 0 1 0 1 A4 A3 A2 A1 A0 R4 R3 R2 R1 R0 D15D14 D1 D0 Start OP Turn Preamble of code PHY address Register address around data frame Write Data to PHY Read Data to PHY Data to PHY 27.1.4.1.3 SMI时钟 V2.4 430

Page 434

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 一般来说SMI时钟需要保持在一个固定的范围以保证实际上SMI的时钟需要被PHY接收。具体 参考用户选用的PHY芯片的手册。 SMI时钟频率通过MII地址寄存器ETH_MACMIIAR的CR域从HB时钟分频得到。下表显示和SMI 时钟和HB时钟的分频关系。默认选择42分频。 表27-3 SMI时钟和HB时钟的分频关系 适合搭配的HB时钟的范围 SMI时钟 0000b 60MHz以上 HB时钟/42 0010b 20-35MHz HB时钟/16 0011b 35-60MHz HB时钟/26 其它值 无意义 27.1.4.2 MII/RMII 接口 27.1.4.2.1 概述 媒体独立接口MII是MAC和PHY进行数据沟通的接口根据速度和引线数量区分有标准MII、 RMII、GMII、RGMII和SGMII等。媒体独立接口一般是有接收、发送各一组每组由时钟线、若干数 据线和辅助线组成。支持的MII接口为标准MII/RMII支持十兆和百兆物理层RGMII支持十兆、百 兆和千兆物理层。由于市场上常用的物理层一般是10M/100M自动协商物理层、10M/100M/1000M自动 协商物理层,所以用户在使用 10M/100M 自动协商物理层时应该使用标准 MII/RMII 接口,在使用 10M/100M/1000M物理层时应该使用RGMII接口。 一般情况下媒体独立接口发送方向TX开头的时钟和数据是由MAC发出的接收方向RX开 头的时钟和数据是由PHY发出的但是RMII的时钟是公用的。同方向的引脚走线应注意等长布线 具体布线要点参看用户选用的物理层芯片的Layout手册或本手册27.1.4.2.2章节。 27.1.4.2.2 引脚 MII接口的引脚和功能如下 表27-4 MII接口的引脚和功能 引脚 功能 TXC 发送时钟2.5MHz或25MHz TXEN 发送数据使能 TXD0 TXD1 发送数据线[0:3] TXD2 TXD3 RXC 接收时钟2.5MHz或25MHz RXDV 指示接收数据有效 RXER 接收数据错误 RXD0 RXD1 接收数据线[0:3] RXD2 RXD3 COL 冲突检测 CRS 载波检测 图27-4显示了使用MII接口的定义时MAC和PHY如何连接。 V2.4 431

Page 435

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图27-4 以太网收发器使用MII接口MAC和PHY如何接线 TX_CLK TXD[3:0] TX_EN RX_CLK RXD[3:0] MAC RX_DV External PHY RX_ER COL CRS MDC MDIO RMII接口的引脚和功能如下 表27-5 RMII接口的引脚和功能 引脚 功能 CLK_REF 收发时钟50MHz TXEN 发送数据使能 TXD0 发送数据线[0:1] TXD1 CRSDV 接收数据有效 RXD0 接收数据线[0:1] RXD1 使用RMII接口时收发时钟共用同一根线传输时钟频率固定为50MHz。当RMII使用在10Mbps 的速率时RX和 TX每隔10个周期采样一个数据数据线需要将数据保留 10个周期MAC和PHY需 要使用同一个时钟源。可以将 MAC的 MCO输出接到PHY的外部时钟源输入引脚上。图 27-5显示了使 用RMII接口时MAC和PHY如何接线。 图27-5 使用RMII接口MAC和PHY的接线示意图 TXD[1:0] TX_EN RXD[1:0] External MAC RXDV PHY MDC MDIO REF_CLK Clock source 注以太网收发器需要从RXC引脚输入外界提供的REF_CLK 50MHz时钟频率。 27.1.4.2.3 时序 RMII和MII的时序的区别在于  RMII的时钟固定为50MHz而MII的收发时钟随着实际连接速度的不同而工作在2.5MHz或25MHz  RMII收发共用同一个时钟线 V2.4 432

Page 436

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn  RMII是两位数据线而MII是四位数据线。 如图27-6 显示了RMII和MII的时序。 图27-6 MII和RMII的时序图 MII_TX_ CLK MII_TX_ EN MII_TXD[3: 0] RMII_ REF_CLK RMII_TX_ EN RMII_TXD[1: 0] 27.1.4.3 RGMII 接口 27.1.4.3.1引脚 RGMII的引脚和功能如下表 表27-6 RGMII的引脚和功能 引脚 功能 TXC 发送时钟 TXCTL 发送数据控制 TXD0 TXD1 发送数据线[0:3] TXD2 TXD3 RXC 接收时钟 RXCTL 接收数据控制 RXD0 RXD1 接收数据线[0:3] RXD2 RXD3 注1.TXCTL/RXCTL在本微控制器的以太网收发器中用作收发数据有效信号来使用 2.RGMII有独立的SMI接口。 27.1.4.3.2时序 RGMII工作在十兆和百兆速率的模式下时序和MII类似工作在千兆时RGMII的时钟为125MHz 采用双边沿采样的方式。RGMII不支持半双工。 由于 RGMII 使用双边沿采样且工作在 125MHz 的时钟频率下,因此电路设计人员应注意信号完整 性问题。 RGMII的接收方接收到的时钟应相对数据滞后90°以保证正确采样。以太网收发器设计了发送时 钟延迟输出和相位翻转的功能。 V2.4 433

Page 437

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图27-7 RGMII的时序示意图 27.1.4.4 内部 10M、100M 物理层使用时的注意事项 27.1.4.4.1 内部 10M物理层使用时的注意事项仅适用于 CH32F207、CH32V307 在置位扩展寄存器的内部物理层使能位时所有的MII相关的配置都将被无视对SMI接口的读 写将直接映射到内部物理层且忽略SMI接口写入的物理层地址。用户可以对内部物理层的寄存器进 行访问以获取物理层连接状态详见27.1.8.5章节。 27.1.4.4.2 内部 10/100M物理层使用时的注意事项仅适用于 CH32V317 内部10/100M物理层由Control register地址0x00和Auto-Negotiation Advertisement地 址0x04寄存器进行配置相关配置位已默认开启相关寄存器请参考《CH182DS2》手册。 10/100M以太网收发器使用RMII接口MAC和内部PHY接线如下图所示 PE7 RSTB PE8 TXEN PE9 CRSDV PE10 TXD1 PE11 TXD0 MAC Internal PE12 TXC PHY PE13 RXD1 PE14 RXD0 PE15 MDC PD8 MDI0 10/100M以太网收发器使用RMII接口相关的引脚分布和需要进行的配置如下表所示以下引脚 仅用于EHT 引脚 RMII RMII的引脚配置 PE7 RSTB 推挽复用输出 PE8 TXEN 推挽复用输出 PE9 CRSDV 浮空输入 PE10 TXD1 推挽复用输出 PE11 TXD0 推挽复用输出 PE12 TXC 推挽复用输出 PE13 RXD1 浮空输入 PE14 RXD0 浮空输入 V2.4 434

Page 438

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn PE15 MDC 推挽复用输出 PD8 MDIO 推挽复用输出/浮空输入 27.1.4.5 时钟产生和输出 27.1.4.5.1 外设时钟源配置 图27-8 以太网外设时钟树 60MHz XTI to MCO ETH-PHY PREDIV2 PLL3MUL OSC_IN 3-25MHz /1,/2,… /8,/9,… PLL3CLK OSC_OUT HSE OSC /15,/16 /16,/20 MII/RMII interface MII_TXC MACTXCLK MII__RMII_SEL in AFIO_MAPR MII_RXC MACRXCLK to Ethernet MAC GTXC GTXC RGMIION GRXC GRXC ETH1G_EN EXT_125M ETH1G_125M PLL2VCO PLL3VCO ETH1G_SRC RGMII interface 内部10M以太网物理层的时钟由PLL3提供且必须为60MHz。使用内部物理层时需要把扩展寄 存器的第2位置位置位后MII/RMII/RGMII相关的设置均无效。 在使用MII时收发时钟都由外部的物理层提供为2.5MHz或25MHz。在使用RMII时REF_CLK 是唯一的时钟从RXC引脚输入微控制器固定为50MHz使用RMII时需要将AFIO重映射寄存器中 的第23位置位。 在使用 RGMII 时MAC 需要频率为 125MHz 的时钟,由内部 PLL2/PLL3 的 VCO 产生VCO 输出是 PLL 输出频率的两倍)或外部输入,通过 EXT_125M 引脚输入 125MHz 时钟。RGMII 的发送时钟由 MAC 产生接收时钟由PHY产生。开启RGMII需要在扩展寄存器中将第3位置位并在RCC的第二个配置 寄存器中将第22位置位同时在[21:20]中选择合适的125MHz时钟源详见官网EVT例程。 27.1.4.5.2 MCO输出 已知MCO支持HSE、HSI、系统主频、PLLCLK/2、PLL2CLK、PLL3CLK、PLL3CLK/2和XTI这八种时 钟的输出,用户可以利用 MCO 输出应用中所需要的频率,比如常见物理层芯片所需要的 25MHz 时钟, 并以此节省一颗晶体。MCO的输出频率不应大于100MHz。 27.1.5 IEEE802.3 和 IEEE1588 IEEE802.3协议及其补充协议组成目前以太网的官方标准,它详细定义了目前使用的以太网的方 方面面。我们可以认为以太网处于OSI模型中的物理层和数据链路层的一部分。本节在应用的角度上 讨论IEEE802.3协议中用户需要用到的部分即帧格式和MAC地址相关的内容。同时微控制器的以 太网收发器还支持IEEE1588精确时间协议本文还将讨论IEEE1588的部分内容。 V2.4 435

Page 439

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn IEEE802.3协议构建的以太网模型中,数据传输单元是以太网帧。以太网帧在不同的介质上以不 同的速率传输时有不同的编码形式,接收后经过物理层解码,通过 MII 接口发给 MACMAC 校验和过 滤通过后由TCP/IP协议栈提取出应用信息发给不同的应用进程。 27.1.5.1 帧格式 以太网帧的帧格式如表27-7所示。 表27-7 普通以太网帧格式 前同步码 SFD 目标地址 源地址 长度或类型 数据域 CRC 46-1500 7 Bytes 1Byte 6 Bytes 6 Bytes 2 Bytes 4 Bytes Bytes 总长度64至1518字节加上8字节的物理层首部前同步码和SFD 前同步码56位7字节交替的低电平和高电平跳跃值固定用十六进制表示即为0xAA-0xAA- 0xAA-0xAA-0xAA-0xAA-0xAA。此域用来进行时钟同步。该域由硬件自动添加/去除,用户不需要理会。 SFD帧首定界符8 位1 字节),值为 10101011bSFD 用来提醒接收方这是最后一次进行时 钟同步的机会,其后为目标地址。该字节由硬件自动添加/去除,用户不需要理会。 目标地址发送这个帧的设备希望接收这个帧的设备地址这里指的是硬件地址又称MAC地址 由IEEE为生产商分配全球唯一6字节48位。本公司WCH的微控制器的MAC地址出厂时已烧录 在芯片内部。地址的发送遵循低有效位在前的原则。 源地址:发送这个帧的设备的硬件地址。源地址必须为单播地址。 长度或类型2字节以太网一般用作类型IEEE802.3标准中也用作长度以1536即0x0600 分界1536 以上表示协议,表示数据部分是根据何种上层协议组织起来的,例如 0x0806 表示 ARP 0x0800表示IPv40x86dd表示IPv61536以下表示数据长度。 数据域:最小 46 字节,最大 1500 字节。当数据域不足 46 字节需要加填充增至 46 字节,超过 1500字节请另组一帧。数据域中装载着需要实际发送的数据。 CRC循环冗余校验此处用的是CRC32校验。 27.1.5.2 帧发送 以太网收发器发送数据帧的时候,其专有的 DMA 控制器从发送描述符trans descript 在 27.1.4.1.1 节)指定的 RAM 中取出要发送的数据通过专用数据总线压进 MAC。FIFO 的填充程度会返 回到 DMA 控制器中当要发送的数据全部发送完DMA 控制器会向 MAC 发送一个数据开始信号MAC 会启动发送从FIFO中读取数据向MII接口RMII/RGMII发送先导、SFD发送实际数据在DMA 控制器向MAC发送数据结束信号后MAC加上自动计算的CRC。 MAC会按照配置自动设备发送帧的类型并为其中的检验和域计算校验和并取代原来校验和域 的值。此功能可以关闭。 MAC会自动向填充后面加上CRC32校验也可以设置成不加上CRC校验位。按照IEEE802.3协议 的规定数据域长度不低于46字节当MAC检测到将要发送的数据域短于46字节时会自动在数字 域后加上填充,如果选择自动填充,则必然会加上 CRC32 校验无视寄存器配置。MAC 采用的 CRC32 检验公式如下: 在使能了IEE"E# 158#8$PTP#" 功能##的情%况$下,%#MAC在%%发送以%&太网'帧时(,将保) 存当*前时#间戳在描述符 G ! =! +! +! +! +! +! +! +! +! +! +! +! +! +!+1 中,但同时会覆盖掉部分信息,用户可以在接收中断中及时读取时间戳并补全描述符。 27.1.5.3 帧接收 以太网收发器在接收以太网帧的时候以太网帧从MII、RMII或RGMII进入到MAC在MAC中首 先进入到FIFO然后被DMA转发到RAM中的缓冲区。MAC会对以太网帧进行过滤和检查过滤包括完 V2.4 436

Page 440

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 美地址过滤和HASH过滤检查则一般是对帧进行帧长度IP/ICMP/TCP/UDP的检验和CRC检查未通 过过滤或检查的帧会被描述符标记出来或被丢弃,超过长度的包可能会被掐断。 在使能了IEEE 1588PTP功能的情况下接收帧时MAC会保存当前时间戳在描述符中但同 时会覆盖掉部分信息,用户可以在接收中断中及时读取时间戳并补全描述符。 27.1.5.4 帧过滤 使用 MAC帧过滤器可以对接收的帧的目标 MAC地址和源 MAC地址进行完美过滤或 HASH过滤并 可以设置使不通过过滤的帧被丢弃、被接收、或是被在接收描述符中标记出来。此功能请详细阅读MAC 帧过滤寄存器R32_ETH_MACFFR的描述。MAC内置了四个 MAC 地址寄存器,其中 MAC地址寄存器 0 被默认用作存储自身的MAC地址其余三个MAC地址寄存器可以被用作完美过滤与接收到帧的源地 址或目标地址对比。在置位 R32_ETH_MACFFRRA 后,所有接收到的帧都将会被收到,但相应的状态 会在之后描述符的第一个字的状态域中被标记出来如果置位R32_ETH_MACFFRPM会有类似的效果 但是状态不会被标记。在置位R32_ETH_MACFFRDAIF/SAIF后会有结果翻转的效果原来通过过滤 的将会被丢弃或标记未通过过滤的反而会被转给RAM中的缓冲区。 27.1.5.4.1 单播过滤 MAC通过HPF位和HU位来确定单播帧进行HASH过滤还是完美地址过滤。 27.1.5.4.2 多播过滤 MAC通过HPF位和HM位来确定多播帧进行HASH过滤还是完美地址过滤。当PAM位置位后所有 的多播包都能通过过滤器。 27.1.5.4.3 广播过滤 通过置位BFD位MAC可以阻断所有的广播包。 27.1.5.4.4 源地址过滤选择 通过设置 MAC 地址寄存器中的 AE 位,可以启用该 MAC 地址寄存器,而设置 SA 位可以决定将该 MAC地址寄存器作为源地址样本还是目标地址样本来进行对比。 27.1.5.4.5 小结 对目标地址和源地址的过滤设置分别如表27-8和表27-9。 表27-8 R32_ETH_MACFFR各个位的设置对接收到帧的目的MAC地址的接受程度 帧类型 PM HPF HU DAIF HM PAM 效果 1 - - - - - 通过 广播帧 0 - - - - - 不通过BFD置位 1 - - - - - 所有帧通过 0 - 0 0 - - 完美滤波匹配时通过 0 - 0 1 - - 完美滤波匹配时不通过 单播帧 0 0 1 0 - - HASH滤波匹配时通过 0 0 1 1 - - HASH滤波匹配时不通过 0 1 1 0 - - 完美滤波或HASH滤波匹配时通过 0 1 1 1 - - 完美滤波或HASH滤波匹配时不通过 1 - - - - - 通过

          • 1 通过 多播帧 0 - - 0 0 0 完美滤波匹配时通过 0 0 - 0 1 0 HASH滤波匹配时通过 V2.4 437

Page 441

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0 1 - 0 1 0 完美滤波或HASH滤波匹配时通过 0 - - 1 0 0 完美滤波匹配时不通过 0 0 - 1 1 0 HASH滤波匹配时不通过 0 1 - 1 1 0 完美滤波或HASH滤波匹配时不通过 表27-9 R32_ETH_MACFFR各个位的设置对接收到帧的源MAC地址的接受程度 帧类型 RA SAIF SAF 效果 1 - - 所有帧通过 0 0 0 完美过滤器匹配时通过,标记但不丢弃未通过的帧 单播帧 0 1 0 完美过滤器匹配时不通过,标记但不丢弃未通过的帧 0 0 1 完美过滤器匹配时通过,丢弃未通过的帧 0 1 1 完美过滤器匹配时不通过,丢弃未通过的帧 注:“-”表示不关心该位的设置。 27.1.5.5 MMC 管理计数器MMC的作用主要是对各种指示帧接收发送状态和 MAC 运转状态进行计数。它可以 产生设置并产生中断。一般情况下我们可以通过接收“好”帧计数器MMCRGUFCR获取当前接收到 的完好的帧的数量通过发送“好”帧计数器MMCTGFCR来获取成功发送出去的帧的数量通过接 收 CRC 校验错误的帧计数器MMCRFCECR查看有无接收 CRC 错误的帧,一般情况下,如果数据时正 确的但是CRC错误可以认为RGMII线layout方面有问题。 用户需要明晰一个概念:什么样的帧是“好”的帧。正常情况下,只要一个帧启动发送,它的帧 长符合要求开启了自动填充并且开启了自动计算CRC那么它就会是一个“好”帧。而一个帧 被接收到只要它CRC正确帧长在以太网帧长度范围内帧长和长度域的值一致如果长度类型域 表示的是长度),或没有发生不对齐,那么就会被认为是一个“好”的接收帧。 27.1.5.6 PMT 27.1.5.6.1 概述 PMTpower management部分的功能主要是通过以太网使微控制器从低功耗模式唤醒。千兆以 太网控制器支持两种帧使系统唤醒,即魔法帧和(远程)唤醒帧。当以太网收到这两种帧时,由于微 控制器处于低功耗模式因此并不一定会产生接收中断即使其合法但是如果其通过MAC的魔法帧 和唤醒帧识别就会产生PMT中断PMT中断是和以太网中断独立的中断通过查询PMT控制和状态 寄存器就能查出是哪种以太网帧产生了中断。 27.1.5.6.2 魔法帧 AMD公司定义的魔法帧magic package也有称幻数据包是常用的一种唤醒微控制器的以太网 帧,它有固定而特殊的帧格式,即通过帧过滤能让目标网卡接收到,可以封装成广播帧,帧中有连续 6个字节的全高OXFF之后紧跟16次重复的目标网卡的MAC地址。这个组合可以存在于帧的任何 位置因此魔法帧可以封装成Mac帧或IP包甚至UDP包。以下是魔法帧的格式。 xx xx xx xx xx xx xx xx之前的数据无限制甚至可以没有之前的数据—ff ff ff ff ff ff 84 c2 e4 01 02 02 84 c2 e4 01 02 02 84 c2 e4 01 02 02 84 c2 e4 01 02 02 84 c2 e4 01 02 02 84 c2 e4 01 02 02 84 c2 e4 01 02 02 84 c2 e4 01 02 02 84 c2 e4 01 02 02 84 c2 e4 01 02 02 84 c2 e4 01 02 02 84 c2 e4 01 02 02 84 c2 e4 01 02 02 84 c2 e4 01 02 02 84 c2 e4 01 02 02 84 c2 e4 01 02 02 xx xx xx xx xx xx有的网卡要求魔法帧最后附带上密码。 27.1.5.6.3 唤醒帧 由于魔法帧的格式存在限制,(远程)唤醒帧的格式可以由用户自行定义。只要是通过远程唤醒 V2.4 438

Page 442

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 帧过滤寄存器ETH_MACRWUFFR组的以太网帧都被认为是唤醒帧用户通过设置远程唤醒帧过滤寄 存器组来定义满足自己需要的唤醒帧。需要注意的是,远程唤醒帧过滤寄存器组只有一个地址入口, 用户可以通过连续的八次写操作向其中写数据,再通过连续的八次读数据即可读出原来写进远程唤醒 帧过滤寄存器组的数据。 远程唤醒帧过滤寄存器组的结构如下表: 表27-10 远程唤醒帧过滤寄存器组的结构 过滤寄存器0 过滤寄存器0的字节掩码 过滤寄存器1 过滤寄存器1的字节掩码 过滤寄存器2 过滤寄存器2的字节掩码 过滤寄存器3 过滤寄存器3的字节掩码 过滤器 过滤器 过滤器 过滤器 过滤寄存器4 保留 保留 保留 保留 3命令 2命令 1命令 0命令 过滤寄存器5 过滤器3偏移 过滤器2偏移 过滤器1偏移 过滤器0偏移 过滤寄存器6 过滤器1 CRC-16 过滤器0 CRC-16 过滤寄存器7 过滤器3 CRC-16 过滤器2 CRC-16 由上表可以看出,过滤寄存器的字节掩码、命令、偏移、过滤器这四个域共同作用能确定一个帧 是否是远程唤醒帧,实际上可以设置四种不同的满足要求的帧。 32位的字节掩码最高位必须为0bit[30:0]是对应由偏移域定义的开头的31字节数据此中若 有bit置1则表明对应字节参与CRC-16校验且最多有31个字节参与计算 4位命令域的最高位表示对什么样的帧起作用1为只对多播地址有效0为只对单播地址有效 命令域的第2位和第1位保留第0位为使能位置高表示启用这组过滤器 偏移域表示从帧头开始偏移多少个字节开始计算 CRC16 的值,最小填 12如若偏移域为 12则 为从开头第13个字节开始计算CRC16的值参数模型使用CRC-16-IBM参数默认。 过滤器则存放了用户期望计算出的CRC结果的值MAC会将自己计算出的CRC16的值与这个域之 中的值进行比对如果一致则认定为远程唤醒帧如果使能了唤醒帧中断和PMT中断则还会 产生PMT中断。 另外,根据 PMT 控制状态寄存器的位定义,如果置位了 GU 位,那么通过帧过滤的单播帧也会被 认为是唤醒帧。 27.1.5.7 IEEE1588 PTP 27.1.5.7.1 PTP原理和实现 IEEE1588 标准定义了一套获取时间的精确协议,它的目标是实现 10 微秒误差之内的时间同步。 原本NTP协议已经可以实现200微秒的级别的时间同步但实际上这个级别还无法满足工业自动化领 域的时间同步需求于是网络精密时钟同步委员会起草了PTP协议并在2002年底被IEEE标准委员 会通过作为IEEE1588标准。 PTP协议的实现需要主机和从机都能精确记录MAC接收和发送以太网帧的时间这需要主机和从 机都有一套自己的高精度时间计数器。随后支持PTP的主从机通过一套流程进行对时从机可以以 此得到自己和主机的时间差并进行修正。下图显示了主从机对时的流程: V2.4 439

Page 443

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图27-9 IEEE1588 PTP协议同步报文时序图 分步描述:  主机向从机发送syn消息从机接收到此消息记录下接收到syn消息时的本地时间t2  主机向从机发送follow_up消息包含主机发送syn消息时的主机时间t1  从机向主机发送delay_req消息从机记录下发送时间t3  主机向从机发送delay_resq消息包含delay_req消息的接收时间t4 实际使用中主机是每隔两秒对外发一次syn消息的而每隔一个syn消息都可以认为是上个 syn消息的follow_up消息他们都会附带上一次syn消息的发送时间。从机经过这个过程可以得 知主机网络到从机网络延迟时间Tdelay然后算出主机时间和从机时间的时间偏移。 t2-t1 + t4-t3 Tdelay = 2 任一主机发出的时间减去偏移即是主机的时间。 PTP的同步流程一般通过UDP协议实现当然用户也可以自定协议实现。PTP高度依赖内网的延 迟稳定性。 27.1.5.7.2 本地时间更新与校正 为了实现PTP的主机设备本地是需要有一个高精度的时间计数器的起码要精确到纳秒级。微 控制器的千兆以太网计数器的PTP模块拥有一个32位以秒为单位的计数器和一个31位的亚秒计数 器当亚秒计数器溢出时会引起秒计数器自增因此本地时间的分辨率可以做到0.46纳秒左右。 本地时间的更新方式分为两种,即粗调和精调。粗调方式的更新时机是由外部决定的,在需要进 行时间更新时将时间戳控制寄存器的时间更新位PTPTSCR:TSSTU置位微控制器的 PTP 模块会 将秒计数器和亚秒计数器减去或加上时间戳更新寄存器TSHUR、TSLUR的值。粗调是一种较为简单 且方便的时间更新机制,但是精确较差。 精调的时间更新方式是更常用的。其更新流程如下: V2.4 440

Page 444

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图27-10 使用精调方式更新时间的流程 Addend register Addend update + Accumulator register Constant value Increment Subsecond register + Subsecond register Increment Second register Second register 使用精调模式的方式需要对系统主频和精调的流程有较清晰的了解。与粗调方式不同,精调方式 更新事件的时机是累加器32位寄存器列表中未列出。图中的Accumlator register溢出累加 器在每个系统主频时钟周期都会自增加数寄存器PTPTSAR图中的Addend register的值一旦溢 出就会产生时间更新事件即亚秒自增寄存器PTPSSIR图中的Constant Value的值会加到亚秒 计数器Subsecond register完成时间更新。在亚秒计数器溢出时秒计数器会自增。而实际上 亚秒计数器自增一位的时间为1/2^31=0.46566128730…纳秒,用户需要自行保证累加器溢出花费 的时间刚好等于亚秒自增寄存器的值乘以亚秒计数器自增一位的时间。 本地时间的校正较为简单将时间戳控制寄存器的时间校正位PTPTSCR:TSSTI置位则秒计数 器和亚秒计数器的值会被时间戳更新计数器TSHUR、TSLUR的值替代。 27.1.6 DMA 操作 27.1.6.1 概述 在以太网收发器中数据从MII接口进入FIFO然后被DMA转入RAM中。即使是最大的普通以太 网帧,数据部分达到最大的 1500 字节,也只需要几十微秒左右就能接收发送完毕,即使算上 MAC 的 接收检测DMA 转移时间和帧间隔时间CPU 也需要在一百微秒内就要处理一个帧。以太网收发器的 优势是速度快和吞吐量大为了维持这个优势必须把以太网帧接受发送过程中需要CPU进行的干 预尽可能得减少这里就要使用以太网收发器专用DMA。 以太网使用的DMA是32位的它通过两种数据结构接受CPU的管理传统的控制和状态寄存器 接收和发送描述符。由于DMA是 32位宽的所以要求收发描述符队列在 RAM中的基地址是 4字节对 齐的。收发缓冲区则没有对齐要求。 27.1.6.2 DMA 描述符DMA Desciptor 用户使用传统外设主要是通过写寄存器的控制位实现,并且以读取状态寄存器的方式来获取外设 的状态和返回信息。这些寄存器是独立于内核SRAM和非易失性存储器之外的空间是实际存在的 可以称之为“硬件寄存器”。传统的通讯外设比如USART或SPI都有一个数据寄存器来暂存收发 的数据有一组DMA将收到的所有数据统一保存到特定的地址空间。 而以太网收发器以其极高的数据传输速度、极大的数据吞吐量和独特的数据帧组织形式,使得它 的操作不同于传统的通讯收发器。以太网收发器尽可能密集地接收大量的数据,它必须将收到的数据 流以帧为单位存到单独的内存空间自行完成接收和发送操作使CPU能以最少的操作就能读取并处 理掉这些数据释放出对应的内存空间并保证DMA控制器和CPU不会就内存的使用权限起冲突。内 V2.4 441

Page 445

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 存中被开辟用来暂存以太网帧的缓冲区单个大小一般设置为以太网帧的最大包长IEEE802.3规定为 1518个字节包括源止硬件地址、长度或类型域和CRC32校验域共18个字节以太网帧收发缓冲 区的数量根据实际交互的频度和微控制器内存资源由用户自行确定。 以太网帧的缓冲区以类似队列的形式组织起来在接收方向以太网帧通过MAC被DMA写入内存 而入队,被 CPU 读取而出队;在发送方向,以太网帧被 CPU 写入内存而入队,被 DMA 读取压入发送 FIFO而出队。队列的深度即为缓冲区的个数。和普通的通讯外设不同以太网帧的缓冲区的起始地址 和数量并不是固化在某个寄存器中,而是由一类特殊的数据结构管理,这类数据结构存储在内存中, 单个此类数据结构单元管理一个缓冲区里面保存着缓冲区的起始地址、长度、DMA控制器调用此缓 冲区时需要进行的设置、DMA发送完成回写的发送状态以及下一个此类数据结构的地址。这种数据结 构起到传统通讯外设控制寄存器、状态寄存器的作用,但是实际位置又在内存中,所以可以称之为“软 件寄存器”正式名称为“DMA描述符”。 DMA 描述符分发送和接收两种每种的格式固定。DMA 描述符的存储结构分为两种,一种是链表 形式即每个描述符的第四个字为下一个描述符的地址DMA控制器会直接从TDes3/RDes3读取下一 个描述符另一种是环式结构所有的描述符必须紧密排列DMA控制从当前描述符结束的位置取下 一个描述符当DMA控制器检测到TDes4/RDes4的TER/RER位置位时即从描述符列表开头的位置取 下一个描述符。描述符数组的地址必须4字节对齐单个描述符的大小为16字节。 图27-11分别描述了环式结构和链式结构的一种缓冲区分配方案供用户分配空间时参考。 Ring structure Chain structure 0x2000_8000 D 0 e x2 s 0 c 0 r 0 ip _ t 0 o 0 r 0 0 0 Buffer 1 0 0 x x 2 2 0 0 0 0 0 0 _ _ 8 8 4 4 0 0 0 0 0 D x e 2 s 0 c 0 r 0 i _ p 0 t 0 o 0 r 0 0 Buffer 1 0 0 x x 2 2 0 0 0 0 0 0 _ _ 0 0 0 8 1 0 0 0 Buffer 2 0x2000_0010 0x2000_8800 0x2000_0010 0x2000_8800 0x2000_0010 Buffer 1 0x2000_8C00 Descriptor 1 0x2000_8C00 Buffer 2 0x2000_0020 0x2000_9000 0x2000_0800 0x2000_0810 0x2000_0020 0x2000_9000 Buffer 1 Descriptor 2 Buffer 1 0x2000_9400 Descriptor 1 0x2000_1000 0x2000_9400 Buffer 2 0x2000_0810 0x2000_0030 0x2000_9800 0x2000_1010 0x2000_0010 Buffer 1 0x2000_1800 0x2000_0000+0x10n 0x2000_8000+0x0400n Descriptor 2 Buffer 1 Descriptor n 0x2000_8000+0x0400*(n+1) 0x2000_0020 0x2000_8000+0x0400*(n+1) 0x2000_0000+0x10*(n+1) Buffer 2 0x2000_8000+0x0400*(n+2) Next descriptor 27.1.6.2.1 发送 DMA描述符 表27-11表明了发送描述符的结构。 表27-11 发送描述符的结构 31 0 OWM CTRL TTSE 保 控制 保留 TTSS 状态 TDes0 31 30:26 2523:20 19:18 17 16:0 保留 缓冲区2字节计数 保留 缓冲区1字节计数 TDes1 31:29 28:16 15:13 12:0 TDes2 缓冲区1地址/时间戳低位 TDes3 缓冲区2地址/下一个描述符的地址/时间戳高位 V2.4 442

Page 446

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 由上表可以看出发送描述符由四个32位字组成分别是TDes0、TDes1、TDes2和TDes3其中 TDes0用作控制和返回发送状态TDes1用以指示发送长度TDes2用以表示发送缓冲区的位置或返 回发送时间戳的低位TDes3用以表示用于第二个发送缓冲区的地址TCH未置位时或下一描述符 的地址TCH置位时时间戳使能时发送后返回IEEE1588时间戳高位。各32位字的描述如 下。 表27-12 TDes0的各位定义 31 30 29 28 27 26 25 24 23:22 21 19 19:18 17 16 OWN IC LS FS DC DP TTE Res CIC TER TCH Res TSS IHE 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ES JT FF IPE LCA NC LCO EC VF CC ED UF DB 位 名称 描述 描述符归属位。此位指示此描述符被谁占用。 0此描述符归CPU所有CPU可以修改此描述符的值 1此描述符归DMA所有CPU无权限修改此描述符。 31 OWN 此位为0时在CPU完成对描述符和缓冲区的操作后由 CPU 置 1此位为 1时在 DMA 完成对描述符和缓冲区的 操作后由DMA自动写0。以此完成用户软件和硬件对描 述符和收发缓冲区的操作交接。 发送完成中断使能位。置此位后,在发送完当前帧之后, 30 IC 发送中断位标志位ETH_DMASRTS将被置位。 末段指示位。此位被置位表示此描述符指示的缓冲区里包 29 LS 含帧的结束部分。 首段指示位。此位被置位表示此描述符指示的缓冲区里包 28 FS 含帧的开头部分。 禁止自动CRC计算位。置此位后DMA控制器不会计算以 太网帧的CRC32检验值也不会有值附加到帧末尾。此位 27 DC 只有在FS位被置位时有效。另外DP位的设置优先级高 于此位。 禁止自动填充位。置此位后DMA控制器不会为不足64字 节的以太网帧添加自动填充。当此位为0时DMA会自动 26 DP 为不足 64 字节的以太网帧添加填充和 CRC 校验值,忽视 DC是否被置位。 时间戳发送使能位。在ETH_PTPTSCRTSE置位的前提下 25 TTE 置此位后 DMA 控制器将在当面描述符指示的以太网帧打 开IEEE1588时间戳功能。该位仅在FS被置位时有效。 24 Reserved 未使用。 校验和和插入控制域。 00禁止插入校验和 01仅使能IP报头校验和的计算和插入 2322 CIC 10保留 11使能IP报头校验和和有效负载检验和的计算和插入 使能计算伪报头检验和; 21 TER 发送描述符结束标志设置位。用户对此位置位指示DMA控 V2.4 443

Page 447

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 制器,当前发送描述符已经是发送描述符数组的最后一个 描述符。DMA控制器下次会读取发送描述符数组最前面的 一个描述符。 下一描述符地址有效指示位。该位置位表示第二个地址是 下一个描述符的地址而不是下一个缓冲区的地址。此位置 20 TCH 位时TBS2域的值不起作用。该位只在FS位置位时有效。 TER位的优先级高于此位。 1918 Reserved 未使用。 发送时间戳捕获状态位。DMA控制器置此位表示发送时 17 TSS 间戳已经捕获到并存放到TDes2和TDes3中。 IP报头错误状态位。DMA控制器会根据接收到的数据检查 IP报头对于IPv4DMA控制器会检查报头长度域是否正 16 IHE 确对于IPv6DMA控制器会检查报头是否为40个字节。 另外IP协议类型必须和以太网帧中类型/长度域一致。 错误汇总位。如果发送帧时遇到错误DMA控制器会置此 位。在下列位有一位被置位时ES位就会被置位 UF[TDES0:1]数据下溢错误位; 15 ES IPE[TDES0:12]IP数据错误位 FF[TDES0:13]帧清空位; JT[TDES0:14]啰嗦超时位Jabber timeout IHE[TDES0:16]IP报头错误位。 啰嗦超时位Jabber timeout。此位被置位时表示MAC 14 JT 发送端发生了啰嗦超时错误。该位只有在 JD 位 ETH_MACCR:22没有被置位时才会被置位。 帧清空位。此位被置位表示由于CPU发出命令DMA控制 13 FF 器把帧从FIFO清空。 IP 包头错误指示位。MAC 会把接收到 TCP/UDP/ICMP 包的 12 IPE IPv4或IPv6包头中的包总长度和实际包长度做对比若 不一致就会置此位。 载波丢失指示位。此位置位表示帧在发送时发生了载波丢 11 LCA 失即CSR信号存在无效状态。该位只在半工模式下起作 用。 无载波指示位。该位表示帧在发送时物理层的载波侦听信 10 NC 号无效。该位只在半工模式下起作用。 迟到冲突指示位。该位表示帧在发送完前导符之后出现冲 9 LCO 突。该位只在半工模式下起作用。 冲突过多指示位。该位表示帧发送时出现了 16 位以上的 8 EC 冲突。如果 MACCR 的 RD 位置位,该位表示只发送了一次 冲突。该位只在半工模式下起作用。 7 VF VLAN位。在发送VLAN帧时此位会被置位。 冲突计数器域。此域表示帧在发送时发生了多少次冲突。 63 CC EC置位时无效。该域只在半工模式下起作用。 顺延过多指示位。此位置位表示在 MACCR 的 DC 置位时, 2 EC 发送帧因为顺延超过24288位而导致发送失败。该位只在 半工模式下起作用。 1 UF UF数据下溢错误位。当DMA控制器发送时从指定的RAM取 V2.4 444

Page 448

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 数据发现缓冲区为空时,发送进入暂停状态,并置该位和 DMASR寄存器的相关位。 顺延指示位。此位置位表示发送过程由于载波占用而失 0 DB 败。该位只在半工模式下起作用。 表27-13 TDes1的各位定义 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved TBS2 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved TBS1 位 名称 描述 31:29 Reserved 未使用。 28:16 TBS2 发送缓冲区2的大小。 15:13 Reserved 未使用。 12:0 TBS1 发送缓冲区1的大小。 表27-14 TDes2的各位定义 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TBAD1/TTSL 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TBAD1/TTSL 位 名称 描述 TDes2 全部 32 位作为一整个单元用来存放发送缓冲区 1 的地址。在启用IEEE1588模式中在完成发送之后TDes2 31:0 TBAD1/TTSL 也用来存放 MAC 返回的时间戳,同时 MAC 会把 OWN 位 TDes0:31清零。此域存放时间戳的低32位。 表27-15 TDes3的各位定义 31 30 29 28 27 26 25 24 23 22 21 20 19 20 17 16 TDAD2/TTSH 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TDAD2/TTSH 位 名称 描述 此域用来存放下一个描述符的地址在TCH未置位时此 域存放发送缓冲区 2 的地址。在启用 IEEE1588 模式中, 31:0 TDAD2/TTSH 在完成发送之后TDes3用来存放 MAC返回的时间戳同 时MAC会把OWN位TDes0:31清零。此域存放时间戳的 V2.4 445

Page 449

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 高32位。 27.1.6.2.2 接收 DMA描述符 表27-16 接收描述符的结构 31 0 OWM 状态 RDes0 31 30:0 控制 保留 RER 缓冲区1字节计 缓冲区2字节计数 保留 RDes1 31 30:29 15:14 数 28:16 13 12:0 RDes2 缓冲区1地址、时间戳低位 RDes3 缓冲区2地址、下一个描述符的地址、时间戳高位 由上图可以看出接收描述符也是由四个32位字组成的其中第一个32位字主要是返回接收时的 状态第二个32位字包含了接收的数据长度第三个32位字定义了接收缓冲区的地址或者返回时间 戳的低位第四个32位字做第二个缓冲区的地址RCH未置位下一缓冲区的地址RCH置位或 返回时间戳的高位。 接收描述符各字的各位意义如下: 表27-17 RDes0的各位定义 31 30 2916 OWN AFM FL 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ES DE SAF LE OE VLAN FS LS IPHCE LCO PT RWT RE DE CE PCE 位 名称 描述 描述符归属位。此位指示此描述符被谁占用。 0此描述符归CPU所有CPU可以修改此描述符的值 1此描述符归DMA所有CPU无权限修改此描述符。 31 OWN 此位为 0 时,在 CPU 完成对描述符和缓冲区的操作 后由CPU置1此位为1时在DMA完成对描述符和缓 冲区的操作后由DMA自动写0。以此完成用户软件和硬 件对描述符和收发缓冲区的操作交接。 目标地址未通过标志位。如果接收的帧未通过MAC的目标 30 AFM 地址过滤器,那么此标志位会被置位。 帧长域。此域在 ES 位[RDes0:15]为 0 时有效。在 LS 位 [RDes0:8]为 1 时,此域指示了 DMA 控制器接收到的帧的 29:16 FL 长度包括CRC在LS位为0时此域表示目前为止DMA 控制器发往内存的累计长度,单位都是字节。 错误汇总位。当MAC检测到以下任一错误时会置位此位 15 ES CE[RDes0:1]CRC错误 RE[RDes0:3]:接收错误; V2.4 446

Page 450

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn RWT[RDes0:4]:看门狗超时; IPHCE[RDes0:7]巨型帧注意报IPHCE时需要分辨到 底是巨形帧还是由IP头错误 OE[RDes0:11]:溢出错误; DE[RDes0:14]:描述符错误。 描述符错误位。该位被置位表示由于描述符指示的缓冲区 14 DE 装不上当前帧而被切断DMA又不占用下一描述符。该位 只在LS位[RDes0:8]被置位时才有效。 源地址过滤未通过标志位。此位被置位表示帧没有通过 13 SAF MAC的源地址过滤器。 长度错误位。此位被置位表示实际收到的帧长度和以太网 12 LE 类型/长度域中指示的长度不符合。此位只在FT[RDes0:5] 被置位时有效。 溢出错误位。此位被置位表示由于接收 FIFO 溢出,接收 11 OE 到的帧被破坏。 10 VLAN VLAN标签位。该位被置位表示接收到的是VLAN帧。 首描述符指示位。该位置位表示这个描述符包含帧的开 9 FS 头。 尾描述符指示位。该位置位表示这个描述符包含帧的结 8 LS 尾。 IP报头校验和错误标志位。该位置位表示IPv4或者IPv6 报头存在错误,具体原因可能是: 1、以太网帧类型/长度域指示的协议与实际的 IP 版本不 7 IPHCE 一致; 2、IP报头校验和不对 3、IP报头指示的长度不对。 迟到冲突指示位。该位置位表示产生了迟到冲突。该位只 6 LCO 在半双工模式下起作用。 帧类型指示位。此位为1时表示接收到的帧为以太网类型 封装的帧RFC 894。此位为 0 时表示接收到的帧为 5 FT IEEE802.3 类型封装的帧RFC1042。当帧长度小于 14 字节时,此位无效。 注FT具有的特殊含义参考表27-18 接收看门狗超时标志位。该位置位表示在接收当前帧时, 4 RWT 看门狗超时,当前帧被截断。 接收错误标志位。该位置位表示在接收帧的过程中RX_DV 3 RE 有效时RX_ERR信号有效。 Dribble比特错误位。该位置位表示MAC接收到的帧的长 2 DE 度不是8bit的整数倍可能有漏掉周期的现象。 CRC错误。该位置位表示接收到的帧存在CRC校验错误。 1 CE 该位只在LS位[RDes0:8]置位时有效。 负载校验和错误。该位置位表示 MAC 接收到的 0 PCE TCP/UDP/ICMP包与其校验和域标示的值不符。 可以看出 MAC 的接收流程中做了校验检验机制。实际上在以太网帧层(数据链路层)、网络层 IPv4/IPv6和运输层TCP/UDP/SCTP都有对本层数据长度进行说明对数据内容正确性采取某种 V2.4 447

Page 451

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 手段的校验。RDes0的第0、5和7位都提到了对数据的校验检验下表进行归纳。 表27-18 RDes0:7/5/0的值和接收到的帧状态的关系 RDes0:5 RDes0:7 RDes0:0 IP报头校 负载校 帧类型 验和错误 验和错 帧状态 指示位 标志位 误 FT IPHCE PCE 1 0 0 IP类型帧未检测到IP报头和负载校验和错误 1 0 1 IP类型帧负载校验和错误 1 1 0 IP类型帧IP报头校验和错误 1 1 1 IP类型帧IP报头校验和错误负载校验和错误 0 0 0 IEEE802.3类型封装帧RFC1042 IP类型帧未检测到IP报头校验和错误因负载校验不受 0 0 1 支持而未检测 0 1 1 不是IP类型帧例如ARP帧 0 1 0 保留 表27-19 RDes1的各位定义 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DIC Reserved RBS2 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RER RCH Res RBS1 位 名称 描述 31 DIC 关闭接收完成中断设置位。 30:29 Reserved 未使用。 28:16 RBS2 接收缓冲区2大小。 末端接收描述符标志。指示当前描述符是最后一个描述 15 RER 符。DMA 控制器会回到描述符对列基地址寄存器 ETH_DMARDLAR去取下一个描述符。 下一接收描述符地址有效位。该位置位表示最后一个 32 14 RCH 位字中是下一个接收描述符的地址否则则是第2个缓冲 区的地址。 13 Reserved 未使用。 12:0 RBS1 接收缓冲区1大小。 表27-20 RDes2的各位定义 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 RBAD1/RTSL 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RBAD1/RTSL V2.4 448

Page 452

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 描述 RDes2 全部 32 位作为一整个单元用来存放接收缓冲区的 地址。在启用IEEE1588模式中在完成接收之后RDes2 31:0 RBAD/RTSL 也用来存放 MAC 返回的时间戳,同时 MAC 会把 OWN 位 [RDes0:31]清零。 表27-21 RDes3的各位定义 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 RDAD2/RTSH 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RDAD2/RTSH 位 名称 描述 RCR 置位时用来存放下一个缓冲区的地址,否则用来存在 第二个缓冲区的地址。在启用IEEE1588模式中在完成接 31:0 RDAD/RTSH 收之后RDes3 用来存放 MAC 返回的时间戳,同时 MAC 会 把OWN位[RDes0:31]清零。此域存放时间戳的高32位。 27.1.6.3 数据缓存对齐 由于收发缓冲区和收发描述符都是由 DMA 控制器调用,并实质存在于 RAM 空间的,而 DMA 是 32 位的因此设置收发描述符队列都需要保证它们的起始地址在4字节对齐的位置但是设置缓冲区没 有这个强制要求。 为了提高效率一个以太网帧由一个缓冲区接收完毕是最恰当的如将缓冲区设为1518个字节 可以容纳下最大的以太网普通帧包括源止地址域、长度类型域、数据填充域和CRC校验域。需要 注意的是带标签的VLAN帧的最大帧长比一般的以太网帧长4个字节即1522个字节如果用户 想做到4字节对齐一个缓冲区可以为1524字节。 27.1.6.4 DMA 收发配置 接收和发送的数据由DMA负责自动转存和推送但是如果遇到致命错误DMA会停止运转并更 新DMA状态寄存器。用户用需要初始化DMA后手动启动DMA才能继续运转。 27.1.6.4.1 发送 DMA配置 DMA控制器建立运转机制的步骤如下 1 设置发送缓冲区队列,将要发送的内容填入发送缓冲区。设置发送描述符队列,填好发送描述符 的各域各位并将OWN置位将发送描述符的管理权交付给DMA控制器将描述符初始地址注册 到DMATDLAR寄存器中 2 置位ST位DMAOMR:13开启DMA 3 在运行模式下DMA描述符会自动读取发送描述符的内容根据其指示的地址和长度把数据推送 到发送 FIFO。结束后 DMA 会按照链式结构读取紧接着的下一个发送描述符进行下一次发送。当 DMA 控制器检测到 OWM 位未置位导致无权访问发送描述符或者其他正常的错误,就会终止传输, 并将TBUS位DMASR:2或其他位非OWN为0引起的错误和NIS位DMASR:16置位。 4 不允许单个帧跨越多个描述符,一帧必须由一个描述符和一个缓冲区关联清楚。 5 如果MAC开启了IEEE1588 PTP模式那么在DMA控制器把数据推送到FIFO之后MAC会把发送 V2.4 449

Page 453

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 时间戳写到TDes2和TDes3中并复位OWN位。 6 在发送完一个帧之后如果发送描述符使能了发送完成中断置位TDes1:31DMA控制器就会 置位发送完成中断标志位DMASR:0然后继续取下一个发送描述符。 下图展示了默认发送流程。 图27-11发送流程 Start Start TxDMA Stop TxDMA (Re-)fetch next descriptor Poll demand (HB) Yes error? No TxDMA suspended No b O it w se n t ? Yes Transfer data from buffer(s) (HB) Yes error? No Wait for Txfer completed Wait for Tx status Time stamp Yes Write time stamp to present? TDES2 and TDES3 No Write status word No (HB) Yes to TDES0 error? No (HB) Yes error? 27.1.6.4.2 接收 DMA配置 建立DMA接收流转机制的步骤如下 1 设置发送缓冲区队列和描述符队列,设置好接收描述符的各个域各个位;将描述符初始地址注册 到DMARDLAR寄存器中置位OWN位将描述符使用权限交给DMA控制器 2 置位SR位开始接收流程 3 在接收流转机制运行时DMA控制器获取下一个描述符检查接收描述符配置在FIFO接收到下 一帧时,对帧内容进行过滤和识别等多项检查,将帧数据转发描述符指定的缓冲区中,写描述符 状态域并获取下一个接收描述符,报接收完成中断。如果帧未通过过滤会被标记或丢弃,如果帧 存在检验和错误、CRC错误或帧过短将会被标记如果帧过长可能会被掐断或报接收看门狗超时 错误。DMA控制器遇到接收描述符不可用等致命错误将会停止接收流程用户需要特别留意 4 用户至少需要使能一个接收完成中断,在以太网中断函数中将使用过的接收描述符恢复到待命状 态,以保证接收流程可以不间断地运行下去。用户可以在中断函数中将待处理的数据缓冲区地址 传递出来,或处理一些打断接收流程的异常事件。 V2.4 450

Page 454

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 5 如果使能了PTP时间戳再DMA控制器转存数据写描述符状态域时同时也会将当前的时间戳 写进描述符的后两个字。用户应及时将时间戳读出并补全原写在后两个字的缓冲区地址和下一描 述符地址。 下图展示了默认接收流转机制: 图27-12 接收流程 Start Start RxDMA Stop RxDMA Poll demand/ (Re-)Fetch next new frame available descriptor RxDMA suspended (HB) error? Yes Yes No Frame transfer No Own bit set? complete? No Yes Yes Flush disabled? Frame data No available? No Yes rem F a l i u n s i h ng t h fr e a me Write data to buffer(s) Wait for frame data (HB) error? Yes No Flush No Own bit set No Frame transfer disabled? for next desc? complete? No Yes Yes Yes Set descriptor error inter C m lo e s d e i a R t D e E d S e 0 s c a r s i ptor Ti p m re e s s e t n a t m ? p Yes W R r D it E e S t 2 im an e d s t R a D m E p S 3 to No Close d e R s D c E ri S p 0 t o a r s last No (HB) error? Yes (HB) No error? Yes 27.1.7 中断 以太网收发器拥有两个中断向量,一个是以太网唤醒事件,另一个是普通的收发事件。当检测 到唤醒帧或魔法帧的时候会触发以太网唤醒事件。普通的以太网收发中断事件包括DMA中断和 ETH中断。 27.1.7.1 DMA 中断 DMA中断大致可以分为两组即正常的中断NIS和异常的中断AIS异常的中断一般意味 着数据收发的异常,需要特别注意。用户在处理中断时需要检索所有的中断标志位,并将已经产生的 中断源全部处理掉。下图是以太网收发器的中断示意图。 V2.4 451

Page 455

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图27-13 中断示意图 DMA中断是以太网收发器中最重要的中断一般的用户逻辑中都需要依靠中断接收帧确认帧 发送出去,或是及时处理被打断的收发逻辑。 27.1.7.2 ETH 中断 ETH中断主要包括PTP的时间闹钟触发收发计数到了MMC寄存器的某种设定值以及PMT。ETH 的用处主要是功能性的,相对 DMA 中断而言并不十分复杂和重要。用户可以使用 PTP 中断实现闹钟, 使用MMC中断实现测速或使用PMT中断实现远程唤醒。另外ETH还支持当内置物理层连接状态发 生改变时产生中断。 27.1.7.3 PMT 中断 将PMT中断单独提出来重述一遍的原因是这个中断拥有独立的中断向量使用时需注意。 27.1.8 寄存器描述 表27-22 以太网相关寄存器列表 MAC控制相关寄存器地址映射 名称 偏移地址 描述 复位值 R32_ETH_MACCR 0x40028000 MAC控制寄存器 0x00000000 R32_ETH_MACFFR 0x40028004 帧过滤寄存器 0x00000000 R32_ETH_MACHTHR 0x40028008 哈希值列表寄存器高位 0x00000000 R32_ETH_MACHTLR 0x4002800C 哈希值列表寄存器低位 0x00000000 R32_ETH_MACMIIAR 0x40028010 MII地址寄存器 0x00000000 R32_ETH_MACMIIDR 0x40028014 MII数据寄存器 0x00000000 R32_ETH_MACFCR 0x40028018 MAC流控寄存器 0x00000000 R32_ETH_MACVLAN 0x4002801C VLAN标签寄存器 0x00000000 R32_ETH_MACRWUFFR 0x40028028 唤醒帧过滤器寄存器 0x00000000 R32_ETH_MACPMTCSR 0x4002802C PMT控制和状态寄存器 0x00000000 R32_ETH_MACSR 0x40028038 MAC中断状态寄存器 0x00000000 R32_ETH_MACIMR 0x4002803C MAC中断屏蔽寄存器 0x00000000 R32_ETH_MACA0HR 0x40028040 MAC地址寄存器0高32位 0x8000FFFF R32_ETH_MACA0LR 0x40028044 MAC地址寄存器0低32位 0xFFFFFFFF V2.4 452

Page 456

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R32_ETH_MACA1HR 0x40028048 MAC地址寄存器1高32位 0x0000FFFF R32_ETH_MACA1LR 0x4002804C MAC地址寄存器1低32位 0xFFFFFFFF R32_ETH_MACA2HR 0x40028050 MAC地址寄存器2高32位 0x0000FFFF R32_ETH_MACA2LR 0x40028054 MAC地址寄存器2低32位 0xFFFFFFFF R32_ETH_MACA3HR 0x40028058 MAC地址寄存器3高32位 0x0000FFFF R32_ETH_MACA3LR 0x4002805C MAC地址寄存器3低32位 0xFFFFFFFF R32_ETH_MACCFG0 0x40028098 MAC软件复位控制寄存器0 0x00000000 MMC控制相关寄存器地址映射注意地址非连续 名称 偏移地址 描述 复位值 R32_ETH_MMCCR 0x40028100 MMC控制寄存器 0x00000000 R32_ETH_MMCRIR 0x40028104 MMC接收寄存器 0x00000000 R32_ETH_MMCTIR 0x40028108 MMC发送中断寄存器 0x00000000 R32_ETH_MMCRIMR 0x4002810C MMC接收中断屏蔽寄存器 0x00000000 R32_ETH_MMCTIMR 0x40028110 MMC发送中断屏蔽寄存器 0x00000000 R32_ETH_MMCTGFSCCR 0x4002814C MMC一次冲突后发送好帧计数器 0x00000000 R32_ETH_MMCTGFMSCCR 0x40028150 MMC多次冲突后发送好帧计数器 0x00000000 R32_ETH_MMCTGFCR 0x40028168 MMC发送好帧计数寄存器 0x00000000 R32_ETH_MMCRFCECR 0x40028194 MMC接收CRC有误帧计数寄存器 0x00000000 R32_ETH_MMCRFAECR 0x40028198 MMC接收对齐错误帧计数寄存器 0x00000000 R32_ETH_MMCRGUFCR 0x400281C4 MMC接收好单播帧计数寄存器 0x00000000 IEEE1588PTP相关寄存器地址映射 名称 偏移地址 描述 复位值 R32_ETH_PTPTSCR 0x40028700 PTP时间戳控制寄存器 0x00000000 R32_ETH_PTPSSIR 0x40028704 PTP亚秒递增寄存器 0x00000000 R32_ETH_PTPTSHR 0x40028708 PTP时间戳寄存器高位 0x00000000 R32_ETH_PTPTSLR 0x4002870C PTP时间戳寄存器低位 0x00000000 R32_ETH_PTPTSHUR 0x40028710 PTP时间戳更新寄存器高位 0x00000000 R32_ETH_PTPTSLUR 0x40028714 PTP时间戳更新寄存器低位 0x00000000 R32_ETH_PTPTSAR 0x40028718 PTP时间戳加数寄存器 0x00000000 R32_ETH_PTPTTHR 0x4002871C PTP目标寄存器高位 0x00000000 R32_ETH_PTPTTLR 0x40028720 PTP目标寄存器低位 0x00000000 DMA相关寄存器地址映射注意地址非连续 名称 偏移地址 描述 复位值 R32_ETH_DMABMR 0x40029000 DMA总线模式寄存器 0x00000001 R32_ETH_DMATPDR 0x40029004 DMA发送查询寄存器 0x00000000 R32_ETH_DMARPDR 0x40029008 DMA接收查询寄存器 0x00000000 R32_ETH_DMARDLAR 0x4002900C DMA接收描述符地址寄存器 0x00000000 R32_ETH_DMATDLAR 0x40029010 DMA发送描述符地址寄存器 0x00000000 R32_ETH_DMASR 0x40029014 DMA状态寄存器 0x00000000 R32_ETH_DMAOMR 0x40029018 DMA操作模式寄存器 0x00000000 R32_ETH_DMAIER 0x4002901C DMA中断使能寄存器 0x00000000 V2.4 453

Page 457

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn R32_ETH_DMAMFBOCR 0x40029020 DMA丢失帧寄存器 0x00000000 R32_ETH_DMACHTDR 0x40029048 DMA当前发送描述符寄存器 0x00000000 R32_ETH_DMACHRDR 0x4002904C DMA当前接收描述符寄存器 0x00000000 R32_ETH_DMACHTBAR 0x40029050 DMA当前发送缓存寄存器 0x00000000 R32_ETH_DMACHRBAR 0x40029054 DMA当前接收缓存寄存器 0x00000000 内部10M物理层相关寄存器地址 名称 偏移地址 描述 复位值 BMCR 0x00 基本控制寄存器 0x2100 BMSR 0x01 基本状态寄存器 0x1809 ETH_ANLPAR 0x05 自动协商链接方能力寄存器 0x0001 PHY_SR 0x10 物理层状态寄存器 0x0000 PHY_MDIX 0x1E 自动翻转寄存器 0x0000 注内部物理层寄存器的偏移地址在SMI接口中使用 27.1.8.1 MAC 控制相关寄存器各位域 27.1.8.1.1 MAC控制寄存器R32_ETH_MACCR 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reser TCD[2:0] Reserved WD JD PI PR IFG[2:0] ved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reser Reser FES[1:0] LM DM IPCO Reserved APCS Reserved TE RE TCF ved ved 位 名称 访问 描述 复位值 发送时钟延迟域。此域用来延迟发送时钟。MAC控 制器把经过CES位ETH_MACCR[1])选择的发送时 [31:29] TCD[2:0] RW 0 钟进行延时输出。延时时间计算公式: Tdalay=TCDETH_MACCR[31:29]*0.5ns [28:24] Reserved RO 保留。 0 看门狗设置位: 0MAC打开看门狗只能接受最大2048字节的以 23 WD RW 太网帧,超长部分会被切断; 0 1MAC关闭开门狗能接收最大16384个字节的 以太网帧。 Jabber设置位 0如果用户试图发送超过2048字节以上长度的以 22 JD RW 太网帧MAC会关闭发送器 0 1MAC关闭Jabber定时器最多能发送16384字 节的以太网帧。 内置10MPHY发送驱动偏置电流设置位 21 PI RW 0 0额定驱动 V2.4 454

Page 458

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1节能发送。 内置10MPHY片内50欧电阻上拉开启设置位。 20 PR RW 0片内50欧电阻断开 0 1片内50欧电阻连接 帧间隙设置域。这里设置了发送两个帧之间的最短 时间间隙。 00096位时间 00188位时间 01080位时间 [19:17] IFG[2:0] RW 0 01172位时间 10064位时间 10156位时间 11048位时间 11140位时间。 16 Reserved RO 保留。 0 以太网速度设置域: 0010Mbit/s [15:14] FES[1:0] RW 01100Mbit/s 0 101Gbit/s 11保留未使用。 13 Reserved RO 保留。 0 12 LM RW 自循环模式使能位。置该位使能自循环模式。 0 11 DM RW 双工模式使能位。置该位使能全双工模式。 0 IPv4校验检验使能位 0关闭接收端IPv4的校验和检验功能相应的 PCE、PHCE标志位总是为0。见接收描述符各位定 10 IPCO RW 0 义; 1使能IPv4的校验检验MAC控制器会对TCP、 UDP和ICMP报头进行校验和检验。 [9:8] Reserved RO 保留。 0 填充&CRC自动剥离使能位 0MAC不修改帧内容 7 APCS RW 1MAC仅在长度/类型字段值小于或等于1500字 0 节时去除帧上的Pad/FCS字段。如果长度/类型 字段大于或等于1501字节不会更改帧内容。 [6:4] Reserved RO 保留。 0 发送使能位: 0MAC在发送完当前帧之后关闭发送器不再 3 TE RW 0 发送任何帧; 1使能MAC发送器。 接收使能位: 0MAC在接收完当前帧之后关闭接收器不再 2 RE RW 0 接收任何帧; 1使能MAC接收器。 发送时钟翻转设置位: 1 TCF RW 0 0将TCES选择的TXC直接作为芯片输出的 V2.4 455

Page 459

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn GTX_CLK 1将TCES选择的TXC的反相作为芯片输出的 GTX_CLK。 0 Reserved RO 保留。 0 27.1.8.1.2 MAC帧过滤寄存器R32_ETH_MACFFR 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 RA Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved HPF SAF SAIF PCF[1:0] BFD PAM DAIF HM HU PM 位 名称 访问 描述 复位值 接收全部位: 0MAC只把通过了过滤器的帧转发到接收队列中 31 RA RW 0 1MAC把所有收到的帧转发到接收队列中不管其 是否通过了过滤器。 [30:11] Reserved RO 保留。 0 HASH过滤或者完美过滤选择位 0在HM或者HU置位的前提下只要符合HASH过 10 HPF RW 滤器,就能通过地址过滤; 0 1根据HM或者HU的值来确定单播/多播模式下使 用什么过滤方式。 源地址过滤选择位: 9 SAF RW 0MAC对未通过源MAC地址过滤的帧进行标记 0 1MAC会直接丢弃未通过源MAC地址过滤的帧。 源地址过滤结果颠倒位: 0接收的帧的源地址如果和 MAC 地址寄存器中启 8 SAIF RW 用的源地址不一致则认为是未通过源地址过滤器; 0 1接收的帧的源地址如果和 MAC 地址寄存器中启 用的源地址一致则认为是未通过源地址过滤器。 流控帧通过控制域: 00/01MAC不转发任何流控帧给应用程序 [7:6] PCF[1:0] RW 10MAC 转发所有流控帧到应用程序中,包括未通 00b 过地址过滤器的流控帧; 11MAC只转发通过地址过滤器的流控帧。 广播帧接收控制位: 5 BFD RW 0接收所有广播帧 0 1丢弃所有广播帧。 通过全部多播帧控制位; 4 PAM RW 0多播帧能否通过过滤取决于HM的值 0 1全部的多播帧都能通过地址过滤。 目的MAC地址过滤器过滤结果颠倒控制位 3 DAIF RW 0 0过滤器结果正常生效 V2.4 456

Page 460

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1对多播帧和单播帧是否过滤器通过的结果进行 颠倒再生效。 多播帧过滤模式选择位: 2 HM RW 0进行完美地址过滤 0 1进行HASH地址过滤。 单播帧过滤模式选择位: 1 HU RW 0进行完美地址过滤 0 1进行HASH地址过滤。 混杂模式使能位。所有帧都能通过地址过滤器,且 0 PM RW 0 不标记过滤结果。 27.1.8.1.3 哈希值列表寄存器R32_ETH_MACHTHR、R32_ETH_MACHTLR 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 HTH[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 HTH[15:0] 偏移地址0x0C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 HTL[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 HTL[31:15] 位 名称 访问 描述 复位值 [31:0] HTH[31:0] RW 哈希列表高32位。 0 [31:0] HTL[31:0] RW 哈希列表低32位。 0 27.1.8.1.4 MII地址寄存器R32_ETH_MACMIIAR 偏移地址0x10 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PA[4:0] MR[4:0] Reserved CR[2:0] MW MB 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 物理层地址域。用户将需要操作的物理层地址写进 [15:11] PA[4:0] RW 0 此域。 物理层寄存器地址域。用户将需要操作的寄存器地 [10:6] MR[4:0] RW 0 址写进此域。 V2.4 457

Page 461

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 5 Reserved RO 保留。 0 时钟范围设定域。用户请保持为000b使MII频率 [4:2] CR[2:0] RW 0 为主频的42分频。 读写设定位: 1 MW RW 0对物理层进行读操作 0 1对物理层进行写操作。 MII忙标志位 该位由用户置位,表示命令硬件开始进行读或者写 0 MB RW1Z 0 的操作,读写期间应保持物理地址,寄存器地址和 数据域不变。在硬件将此位清零后,表示完成操作。 27.1.8.1.5 MII数据寄存器R32_ETH_MACMIIDR 偏移地址0x14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MD[15:0] 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 MII操作数据域。此域用来存放将要通过MII接口从 [15:0] MD[15:0] RW 0 物理层读取的数据,或者存放向物理层写入的数据。 27.1.8.1.6 MAC流控寄存器R32_ETH_MACFCR 偏移地址0x18 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PT[15:0] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved UPFD RFCE TFCE FCB 位 名称 访问 描述 复位值 Pause 间隔域。此域用来作为控制 Pause 时间域的 [31:16] PT[15:0] RW 0 值单位为当前的MII接口发送64字节的耗时。 [15:4] Reserved RO 保留。 0 单播Pause帧检测位 0MAC只接收带协议规范定义的唯一地址的Pause帧 3 UPFD RW 0 1MAC同时检测Pause帧是否MAC地址寄存器0中 定义的单播地址。 接收流控使能位: 2 RFCE RW 0MAC不解析Pause帧 0 1MAC解析Pause帧并关闭发送器一段时间。 1 TFCE RW 发送流控使能位: 0 V2.4 458

Page 462

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0MAC关闭发送流控不发送Pause帧 1MAC使能发送流控可以发送Pause帧。 流控忙标志位。对此位置位可以发送一个Pause帧 0 FCB RW1Z 发送完成后由硬件清零。在对整个MACFCR寄存器进 0 行操作时需要保证FCB位为0。 27.1.8.1.7 VLAN标签寄存器MACVLAN 偏移地址0x1C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved VLANT 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 VLANTI[15:0] 位 名称 访问 描述 复位值 [31:17] Reserved RO 保留。 0 标签比较控制位: 0将VLAN帧的第1516字节的全部16位数据都 16 VLANT RW 与VLANTI域进行比较 0 1只使用VLAN帧的第1516字节的[11:0]位数据 都与VLANTI域的相应位进行比较。 标签对比样本域。根据IEEE 802.1协议VLAN帧 的第[15:13]位是用户优先级,[12]是规范格式指示 符,位[11:0]VLAN标识符域。 [15:0] VLANTI[15:0] RW 0 如果 VLANTI全为 0那么 MAC 将不再关心 VLAN 帧 的第1516字节而当其第1314字节为0x8100 注意大小端时即判定为VLAN帧。 27.1.8.1.8 唤醒帧过滤寄存器R32_MACRWUFFR 偏移地址0x28 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 RWUFFR[3116] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RWUFFR[150] 位 名称 访问 描述 复位值 唤醒帧过滤寄存器实际上时八个不同的寄存器,对 其进行连续八次的读操作可以读出全部寄存器,同 [310] RWUFFR[310] RW 样对其进行连续八次的写操作可以写进全部八个寄 0 存器。这八个寄存器各个位的说明详见27.1.5.6.3 节的描述。 27.1.8.1.9 PMT控制和状态寄存器R32_ETH_MACPMTCSR V2.4 459

Page 463

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 偏移地址0x2C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 WFFRP Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved GU Reserved WFR MPR Reserved WFE MPE PD 位 名称 访问 描述 复位值 唤醒帧过滤寄存器指针复位。置此位会将 31 WFFRP RW1Z MACRWUFFR 寄存器全部清零。此位会在一个时钟周 0 期自动清零。 [30:10] Reserved RO 保留。 0 全局单播位。置此位会使MAC将所有通过过滤器的 9 GU RW 0 单播帧都认为是唤醒帧。 [8:7] Reserved RO 保留。 0 唤醒帧接收标志位。当收到唤醒帧时,此位会被置 6 WFR RZ 0 位。读取自动清零。 魔法帧接收标志位。当收到魔法帧时,此位会被置 5 MPR RZ 0 位。读取自动清零。 [4:3] Reserved RO 保留。 0 唤醒帧使能位。置此位允许在接收到唤醒帧时产生 2 WFE RW 0 PMT事件。 魔法帧使能位。置此位允许在接收到魔法帧时产生 1 MPE RW 0 PMT事件。 掉电控制位。置此位会使MAC进入掉电模式丢弃 其他所有帧,直到其收到了唤醒帧或魔法帧,唤醒 0 PD RW1Z 0 后 MAC 自动清零。在置此位前需要将 WFE 或者 MPE 置位。 27.1.8.1.10 MAC中断状态寄存器R32_ETH_MACSR 偏移地址0x38 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved TSTS Reserved MMCTS MMCRS MMCS PMTS Reserved 位 名称 访问 描述 复位值 [31:10] Reserved RO 保留。 0 时间戳触发中断标志位。当到达PTP系统时钟设定 9 TSTS RZ 0 的时间时,此标志位会被置位。 [8:7] Reserved RO 保留。 0 MMC发送中断标志位。当MMC寄存器组中的MMCTIR 6 MMCTS RO 0 寄存器产生任一中断时该位置位。当MMC寄存器 V2.4 460

Page 464

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 组中的MMCTIR寄存器全部清零时此位也即清零。 MMC接收中断标志位。当MMC寄存器组中的MMCRIR 5 MMCRS RO 寄存器产生任一中断时该位置位。当MMC寄存器 0 组中的MMCRIR寄存器全部清零时此位也即清零。 MMC 状态标志位。当 MMCTS 或 MMCRS 置位时会触发 4 MMCS RO 此位置位;当 MMCTS、MMCRS 全部清零时此位即清 0 零。 PMT 状态标志位。在掉电模式下,如果 MAC 收到魔 3 PMTS RO 法帧或者唤醒帧唤醒了 MAC那么此位会被置位 0 清除WFR和MPR两位后此位被清零。 [2:0] Reserved RO 保留。 0 27.1.8.1.11 MAC中断屏蔽寄存器R32_ETH_MACIMR 偏移地址0x3C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved TSTIM Reserved PMTIM Reserved 位 名称 访问 描述 复位值 [31:10] Reserved RO 保留。 0 9 TSTIM RW 时间戳中断屏蔽位。置此位将禁止产生时间戳中断。 0 [8:4] Reserved RO 保留。 0 3 PMTIM RW PMT中断屏蔽位。置此位将屏蔽PMT中断。 0 [2:0] Reserved RO 保留。 0 27.1.8.1.12 MAC地址寄存器 0高 32位R32_ETH_MACA0HR 偏移地址0x40 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 MO Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MACA0H[15:0] 位 名称 访问 描述 复位值 31 MO RO 总是为1。 1 [30:16] Reserved RO 保留。 0 [15:0] MACA0H[15:0] RW MAC地址的高16位即47:32位。 0xFFFF 27.1.8.1.13 MAC地址寄存器 0低 32位R32_ETH_MACA0LR 偏移地址0x44 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 V2.4 461

Page 465

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn MACA0L[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MACA0L[15:0] 位 名称 访问 描述 复位值 MAC地址的低32位即31:0位。一般情况下MAC 0xFFFF [31:0] MACA0L[31:0] RW 地址寄存器0的地址是MAC本身的地址。 FFFF 27.1.8.1.14 MAC地址寄存器 1高 32位R32_ETH_MACA1HR 偏移地址0x48 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 AE SA MBC[5:0] Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MACA1H[15:0] 位 名称 访问 描述 复位值 地址过滤使能位: 31 AE RW 0地址过滤器忽略MAC地址1 0 1地址过滤器使用MAC地址1来进行完美过滤。 地址角色选择位: 0MAC 地址 1 被用来和接收到的帧的目标地址对 30 SA RW 0 比; 1MAC地址1被用来和接收到的帧的源地址对比。 屏蔽字控制域。MBC 的各个位用来对应屏蔽 MAC 地 址1的某个字节用来禁止将MAC地址1的某个字 节参与到接收帧的源地址或目标地址的比较中。 R32_ETH_MACA1HR[29]置位则屏蔽MACA1H[15:8] R32_ETH_MACA1HR[28]置位则屏蔽MACA1H[7:0] R32_ETH_MACA1HR[27]置位则屏蔽 [29:24] MBC[5:0] RW MACA1L[31:24] 0 R32_ETH_MACA1HR[26]置位则屏蔽 MACA1L[23:16] R32_ETH_MACA1HR[25]置位则屏蔽MACA1L[15:8] R32_ETH_MACA1HR[24]置位则屏蔽MACA1L[7:0]。 注R32_ETH_MACA1HR[29:27]的功能应同时开启或 关闭。 [23:16] Reserved RO 保留。 0 [15:0] MACA1H[15:0] RW MAC地址的高16位即47:32位。 0xFFFF 27.1.8.1.15 MAC地址寄存器 1低 32位R32_ETH_MACA1LR 偏移地址0x4C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 V2.4 462

Page 466

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn MACA1L[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MACA1L[15:0] 位 名称 访问 描述 复位值 0xFFFF [31:0] MACA1L[31:0] RW MAC地址的低32位即31:0位。 FFFF 27.1.8.1.16 MAC地址寄存器 2高 32位R32_ETH_MACA2HR 偏移地址0x50 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 AE SA MBC[5:0] Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MACA2H[15:0] 位 名称 访问 描述 复位值 地址过滤使能位: 31 AE RW 0地址过滤器忽略MAC地址2 0 1地址过滤器使用MAC地址2来进行完美过滤。 地址角色选择位: 0MAC 地址 2 被用来和接收到的帧的目标地址对 30 SA RW 0 比; 1MAC地址2被用来和接收到的帧的源地址对比。 屏蔽字控制域。MBC 的各个位用来对应屏蔽 MAC 地 址2的某个字节用来禁止将MAC地址2的某个字 节参与到接收帧的源地址或目标地址的比较中。 R32_ETH_MACA2HR[29]置位则屏蔽MACA2H[15:8] R32_ETH_MACA2HR[28]置位则屏蔽MACA2H[7:0] R32_ETH_MACA2HR[27]置位则屏蔽 [29:24] MBC[5:0] RW MACA2L[31:24] 0 R32_ETH_MACA2HR[26]置位则屏蔽 MACA2L[23:16] R32_ETH_MACA2HR[25]置位则屏蔽MACA2L[15:8] R32_ETH_MACA2HR[24]置位则屏蔽MACA2L[7:0]。 注R32_ETH_MACA2HR[29:27]的功能应同时开启或 关闭。 [23:16] Reserved RO 保留。 0 [15:0] MACA2H[15:0] RW MAC地址的高16位即47:32位。 0xFFFF 27.1.8.1.17 MAC地址寄存器 2低 32位R32_ETH_MACA2LR 偏移地址0x54 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 V2.4 463

Page 467

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn MACA2L[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MACA2L[15:0] 位 名称 访问 描述 复位值 0xFFFF [31:0] MACA2L[31:0] RW MAC地址的低32位即31:0位。 FFFF 27.1.8.1.18 MAC地址寄存器 3高 32位R32_ETH_MACA3HR 偏移地址0x58 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 AE SA MBC[5:0] Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MACA3H[15:0] 位 名称 访问 描述 复位值 地址过滤使能位: 31 AE RW 0地址过滤器忽略MAC地址3 0 1地址过滤器使用MAC地址3来进行完美过滤。 地址角色选择位: 0MAC 地址 3 被用来和接收到的帧的目标地址对 30 SA RW 0 比; 1MAC地址3被用来和接收到的帧的源地址对比。 屏蔽字控制域。MBC 的各个位用来对应屏蔽 MAC 地 址3的某个字节用来禁止将MAC地址3的某个字 节参与到接收帧的源地址或目标地址的比较中。 R32_ETH_MACA3HR[29]置位则屏蔽MACA3H[15:8] R32_ETH_MACA3HR[28]置位则屏蔽MACA3H[7:0] R32_ETH_MACA3HR[27]置位则屏蔽 [29:24] MBC[5:0] RW MACA2L[31:24] 0 R32_ETH_MACA3HR[26]置位则屏蔽 MACA2L[23:16] R32_ETH_MACA3HR[25]置位则屏蔽MACA3L[15:8] R32_ETH_MACA3HR[24]置位则屏蔽MACA3L[7:0]。 注R32_ETH_MACA3HR[29:27]的功能应同时开启或 关闭。 [23:16] Reserved RO 保留。 0 0xFFFF [15:0] MACA3H[15:0] RW MAC地址的高16位即47:32位。 FFFF 27.1.8.1.19 MAC地址寄存器 3低 32位R32_ETH_MACA3LR 偏移地址0x5C V2.4 464

Page 468

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 MACA3L[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MACA3L[15:0] 位 名称 访问 描述 复位值 0xFFFF [31:0] MACA3L[31:0] RW MAC地址的低32位即31:0位。 FFFF 27.1.8.1.20 MAC软件复位控制寄存器 0R32_ETH_MACCFG0 偏移地址0x98 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 MACRXMACTX DMARX DMATX Reserved _RST _RST _RST _RST 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved 位 名称 访问 描述 复位值 MAC接收复位控制 0不复位 31 MACRX_RST RW 0 1复位。 一个周期后该位自动清零。 MAC发送复位控制 0不复位 30 MACTX_RST RW 0 1复位。 一个周期后该位自动清零。 DMA接收复位控制 0不复位 29 DMARX_RST RW 0 1复位。 一个周期后该位自动清零。 DMA发送复位控制 0不复位 28 DMATX_RST RW 0 1复位。 一个周期后该位自动清零。 [27:0] Reserved RO 保留。 0 注R32_ETH_MACCFG0寄存器仅适用于批号倒数第六位不为0的CH32F207、CH32V307、CH32V317产 品。 27.1.8.2 MMC 相关寄存器各位域 27.1.8.2.1 MMC控制寄存器R32_ETH_MMCCR 偏移地址0x0100 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 V2.4 465

Page 469

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved MCF ROR CSR CR 位 名称 访问 描述 复位值 [31:4] Reserved RO 保留。 0 计数器冻结控制位。置此位会将MMC所有的计数器 值全部冻结。复此位即恢复各计数器计数。在冻结 3 MCF RW 0 时置位ROR再读取任意计数器会导致该计数器清 零。 读时复位控制位。置此位会使读取任一计数器之后 2 ROR RW 0 清零计数器的值。 计数器回转停止位。置此位会使计数器增正到最大 1 CSR RW 0 值后停止而不自动归零。 计数器复位控制位。置此位将复位全部计数器。此 0 CR RW1Z 0 位在一个系统周期后将自动清零。 27.1.8.2.2 MMC接收中断寄存器R32_ETH_MMCRIR 偏移地址0x0104 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reser Reserved RGUFS ved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved RFCES Reserved 位 名称 访问 描述 复位值 [31:18] Reserved RO 保留。 0 17 RGUFS RZ 接收好帧数量过半时会置此位。 0 [16:6] Reserved RO 保留。 0 5 RFCES RZ 接收CRC校验错误的帧数量过半时会置此位。 0 [4:0] Reserved RO 保留。 0 27.1.8.2.3 MMC发送中断寄存器R32_ETH_MMCTIR 偏移地址0x0108 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved TGFS Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved 位 名称 访问 描述 复位值 V2.4 466

Page 470

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [31:22] Reserved RO 保留。 0 21 TGFS RZ 发送帧数过半时此位会置位。 0 [20:0] Reserved RO 保留。 0 27.1.8.2.4 MMC接收中断屏蔽寄存器R32_ETH_MMCRIMR 偏移地址0x010C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reser Reserved RGUFM ved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved RFCEM Reserved 位 名称 访问 描述 复位值 [31:18] Reserved RO 保留。 0 接收好帧过半中断屏蔽位。置此位将屏蔽接收好帧 17 RGUFM RW 0 计数器值达到一半时产生的中断。 [16:6] Reserved RO 保留。 0 接收CRC错误帧过半中断屏蔽位。置此位将屏蔽接 5 RFCEM RW 收到 CRC 错误的帧计数器值达到一半时产生的中 0 断。 [4:0] Reserved RO 保留。 0 27.1.8.2.5 MMC发送中断屏蔽寄存器R32_ETH_MMCTIMR 偏移地址0x0110 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved TGFM Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved 位 名称 访问 描述 复位值 [31:22] Reserved RO 保留。 0 发送好帧过半中断屏蔽位。置此位将屏蔽发送好帧 21 TGFM RW 0 计数器值达到一半时产生的中断。 [20:0] Reserved RO 保留。 0 27.1.8.2.6 MMC一次冲突后发送好帧计数器R32_ETH_MMCTGFSCCR 偏移地址0x014C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TGFSCCR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 V2.4 467

Page 471

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn TGFSCCR[15:0] 位 名称 访问 描述 复位值 这个域包含在半双工模式下,单个冲突后成功发送 [31:0] TGFSCCR[31:0] RO 0 的帧的数量,即单个冲突后发送好帧的计数器。 27.1.8.2.7 MMC多次冲突后发送好帧计数器R32_ETH_MMCTGFMSCCR 偏移地址0x0150 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TGFMSCCR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TGFMSCCR[15:0] 位 名称 访问 描述 复位值 这个域包含在半双工模式下,一个以上冲突后成功 [31:0] TGFMSCCR[31:0] RO 0 发送的帧的数量,即多个冲突后发送好帧的计数器。 27.1.8.2.8 MMC发送好帧计数寄存器R32_ETH_MMCTGFCR 偏移地址0x0168 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TGFC[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TGFC[15:0] 位 名称 访问 描述 复位值 [31:0] TGFC[31:0] RO MAC发送出去的正确帧的计数量。 0 27.1.8.2.9 MMC接收 CRC有误帧计数寄存器R32_ETH_MMCRFCECR 偏移地址0x0194 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 RFCECR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RFCECR[15:0] 位 名称 访问 描述 复位值 [31:0] RFCECR[31:0] RO MAC接收到的存在CRC校验错误的帧的计数器。 0 27.1.8.2.10 MMC接收对齐错误计数寄存器R32_ETH_MMCRFAECR 偏移地址0x0198 V2.4 468

Page 472

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 RFAECR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RFAECR[15:0] 位 名称 访问 描述 复位值 [31:0] RFAECR[31:0] RO MAC接收到的存在对齐错误的帧的计数器。 0 27.1.8.2.11 MMC接收好帧计数寄存器R32_ETH_MMCRGUFCR 偏移地址0x01C4 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 RGUFCR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RGUFCR[15:0] 位 名称 访问 描述 复位值 [31:0] RGUFCR[31:0] RO MAC接收到的正常的帧的数量。 0 27.1.8.3 IEEE 1588PTP相关寄存器各位域 27.1.8.3.1 PTP时间戳控制寄存器R32_ETH_PTPTSCR 偏移地址0x0700 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved TSARU TSITE TSSTU TSSTI TSFCU TSE 位 名称 访问 描述 复位值 [31:6] Reserved RO 保留。 0 加数寄存器更新控制位。置此位后,加数寄存器的 值将会加到累加器中。精调模式下使用此位。累加 5 TSARU RW 0 器自增完毕后此位自动清零。此位只能在为0时置 位。 时间戳中断触发使能位。置此位后当PTP系统时 4 TSITE RW 0 间达到设定目标时间寄存器的值时,将产生中断。 系统时间更新控制位。置此位后PTP 系统时间将 3 TSSTU RW 0 加上更新寄存器中的值。更新完毕后此位自动清零。 时间戳初始化控制位。置此位后PTP 的系统时间 2 TSSTI RW 将会被替换成更新寄存器中的值。更新完毕后此位 0 自动清零。 1 TSFCU RW 更新模式选择控制位: 0 V2.4 469

Page 473

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0表示使用粗调模式 1表示使用精调模式。 附加时间戳使能位: 0 TSE RW 0不向描述符中添加时间戳 0 1发送或接收完成后向描述符中添加时间戳。 27.1.8.3.2 PTP亚秒递增寄存器R32_ETH_PTPSSIR 偏移地址0x0704 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved STSSI[7:0] 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留。 0 亚秒步进值。在粗调模式下每个主频周期PTP系 [7:0] STSSI[7:0] RW 统时间会自增这个值;在精调模式下,在累加器溢 00h 出时PTP系统时间会自增这个值。 27.1.8.3.3 PTP时间戳寄存器高位R32_ETH_PTPTSHR 偏移地址0x0708 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 STS[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 STS[15:0] 位 名称 访问 描述 复位值 [31:0] TSHR[31:0] RO PTP系统时间值实时值单位为秒。 0 27.1.8.3.4 PTP时间戳寄存器低位R32_ETH_PTPTSLR 偏移地址0x070C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 STPNS STSS[30:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 STSS[15:0] 位 名称 访问 描述 复位值 系统时间正负标志位。1表示当前时间为负0表示 31 STPNS RO 0 当前时间为正。 [30:0] STSS[30:0] RO PTP系统时间值实时值单位为亚秒即约0.46 0 V2.4 470

Page 474

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 纳秒。STSS溢出时STS自增1秒。 27.1.8.3.5 PTP时间戳更新寄存器高 32位R32_ETH_PTPTSHUR 偏移地址0x0710 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TSUS[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TSUS[15:0] 位 名称 访问 描述 复位值 时间戳更新秒值用来替换到PTP系统时间高位或 [31:0] TSUS[31:0] RW 0 者表示其在系统时间上加减的秒值。 27.1.8.3.6 PTP时间戳更新寄存器低 32位R32_ETH_PTPTSLUR 偏移地址0x0714 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TSUPN TSUSS[30:16] S 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TSUSS[30:0] 位 名称 访问 描述 复位值 时间戳更新正负标志位。当更新时间方式为使用 TSUS和TSUSS直接替换PTP系统时间时TSUPNS应 为0当更新时间方式为使用TSUS和TSUSS作在原 31 TSUPNS RW 0 PTP系统时间值上的加减时TSUPNS为1表示在PTP 系统时间的基础上减去TSUS和TSUSS为0表示在 PTP系统时间的基础上加上TSUS和TSUSS。 时间戳更新亚秒值用来替换到PTP系统时间高位 [30:0] TSUSS[30:0] RW 0 或者表示其在系统时间上加减的亚秒值。 27.1.8.3.7 PTP时间戳加数寄存器R32_ETH_PTPTSAR 偏移地址0x0718 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TSA[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TSA[15:0] 位 名称 访问 描述 复位值 [31:0] TSA[31:0] RW 时间戳加数值。这个寄存器只在精调模式下才会被 0 V2.4 471

Page 475

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 使用。TSA的值会在每个系统周期被加到累加器中 如果累加器溢出,则会触发精调模式下的系统时间 更新。 27.1.8.3.8 PTP目标时间寄存器高 32位R32_ETH_PTPTTHR 偏移地址0x071C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TTSH[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TTSH[15:0] 位 名称 访问 描述 复位值 目标时间秒值。如果PTP系统时间达到或者超过这 [31:0] TTSH[31:0] RW 0 个值,且使能了相关中断,那么会产生一个中断。 27.1.8.3.9 PTP目标时间寄存器低 32位R32_ETH_PTPTTLR 偏移地址0x0720 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TTSL[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TTSL[15:0] 位 名称 访问 描述 复位值 目标时间亚秒值。如果PTP系统时间达到或超过这 [31:0] TTSL[31:0] RW 0 个值,且使能了相关中断,那么会产生一个中断。 27.1.8.4 DMA 控制相关寄存器各位域 27.1.8.4.1 DMA总线模式寄存器R32_ETH_DMABMR 偏移地址0x1000 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reser Reserved DSL[4:0] SR ved 位 名称 访问 描述 复位值 [31:7] Reserved RO 保留。 0 [6:2] DSL[4:0] RW 描述符跳跃长度: 0 V2.4 472

Page 476

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 这些位定义了2个不以链式结构连接的描述符之间 的跳跃距离单位为字32位。地址跳跃是指从 当前描述符的结尾到下一个描述符开头的地址差 值。当 DSL 域为 0 时在环形结构下DMA 认为描 述符是相邻地连续排列的。 1 Reserved RO 保留。 0 软件复位: 置 1 时MAC 的 DMA控制器复位 MAC 所有子系统的 0 SR RW 内部寄存器和逻辑电路。在MAC内部不同时钟域模 1 块完成复位操作后,自动清除该位。在重新写 MAC 的寄存器前应当确保该位为0。 27.1.8.4.2 DMA发送查询寄存器R32_ETH_DMATPDR 偏移地址0x1004 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TPDR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TPDR[15:0] 位 名称 访问 描述 复位值 发送查询命令。用户通过向这个寄存器写任意值来 [31:0] TPDR[31:0] RW 启动被暂停的发送流程。重启发送流程后,这个寄 0 存器会被自动清零。 27.1.8.4.3 DMA接收查询寄存器R32_ETH_DMARPDR 偏移地址0x1008 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 RPDR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RPDR[15:0] 位 名称 访问 描述 复位值 接收查询命令。接收流程可能会被各种意外而打断, [31:0] RPDR[31:0] RW 需要用户向这个寄存器写任意值来重启接收流程。 0 重启接收流程后,这个寄存器会被自动清零。 27.1.8.4.4 DMA接收描述符地址寄存器R32_ETH_DMARDLAR 偏移地址0x100C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 V2.4 473

Page 477

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn RDLAR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RDLAR[15:0] 位 名称 访问 描述 复位值 这个寄存器用来存储第一个接收 DMA 描述符的地 [31:0] RDLAR[31:16] RW 址。注意描述符需要16字节对齐所以这个寄存器 0 的后4位应该为0。 27.1.8.4.5 DMA发送描述符地址寄存器R32_ETH_DMATDLAR 偏移地址0x1010 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TDLAR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TDLAR[15:0] 位 名称 访问 描述 复位值 这个寄存器用来存储第一个发送 DMA 描述符的地 [31:0] TDLAR[31:0] RW 址。注意描述符需要16字节对齐所以这个寄存器 0 的后4位应该为0。 27.1.8.4.6 DMA状态寄存器R32_ETH_DMASR 偏移地址0x1014 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reser Reser PLS TSTS PMTS MMCS EBS[2:0] TPS[2:0] RPS[2:0] NIS ved ved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 AIS ERS FBES Reserved ETS RWTS RPSS RBUS RS TUS ROS TJTS TBUS TPSS TS 位 名称 访问 描述 复位值 内部10M物理层连接状态改变标志位。此位置位表 31 PLS RW1Z 0 示物理层连接上或者已断开。或写1清零。 30 Reserved RO 保留。 0 时间戳触发状态标志位。在PTP部分产生中断事件 时此位会被置位如果使能了PTP中断则会产生 29 TSTS RO 0 中断。清除PTP部分的全部标志位后此位会自动 清除。 PMT触发状态标志位。在PMT部分产生中断事件时 28 PMTS RO 此位会被置位如果使能了PMT中断则会产生中断。 0 清除PMT部分的全部标志位后此位会自动清除。 V2.4 474

Page 478

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn MMC触发状态标志位。在MMC部分产生中断事件时 27 MMCS RO 此位会被置位如果使能了MMC中断则会产生中断。 0 清除MMC部分的全部标志位后此位会自动清除。 26 Reserved RO 保留。 0 错误状态域。该域表示造成总线错误的类型。此域 只在DMASR[13]位被置位的情况下才有效。 DMASR[23]:0发送DMA转发数据时出错 1接收DMA转发数据时出错 [25:23] EBS[2:0] RO 0 DMASR[24]:0读数据转发时出错 RO 1写数据转发时出错 DMASR[25]:0访问描述符时出错 1访问数据缓存时出错 发送流程状态域。这个域用来表示当前发送DMA的 状态。 000停止接收到复位或者停止发送命令 001运行正在取发送描述符 010运行正在等待状态信息 [22:20] TPS[2:0] RO 000b 011运行正在读取发送缓冲区数据并压进FIFO 100101保留 110暂停发送描述符不可用或者发送缓存数据下 溢; 111运行正在关闭发送描述符 接收流程状态域。这个域用来表示当前接收DMA的 状态。 000停止接收到复位或者停止发送命令 001运行正在取接收描述符 010保留 [19:17] RPS[2:0] RO 000b 011运行正在等待接收数据包 100暂停接收描述符不可用 101运行正在关闭接收描述符 110保留 111运行正在把接收数据从FIFO压入内存中 正常中断汇总位。在 DMAIER 寄存器中使能的中断 下如果下列位任一被置位NIS位同样会被置位。 -DMASR[0]:发送中断; -DMASR[2]:发送缓存不可用; -DMASR[6]:接收中断; 16 NIS RW1Z 0 -DMASR[14]:早接收中断; -DMASR[31]:内部10M物理层连接状态改变 NIS 位为黏着位,当导致 NIS 位置 1 的对应中断状 态位被清零时必须通过写1的方式将NIS位也清 零。 异常中断汇总位。在 DMAIER 寄存器中使能的中断 下如果下列位任一被置位AIS位同样会被置位。 15 AIS RW1Z 0 -DMASR[1]:发送流程停止; -DMASR[3]:发送啰嗦Jabber超时 V2.4 475

Page 479

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn -DMASR[4]:接收FIFO溢出 -DMASR[5]:发送数据下溢; -DMASR[7]:接收缓存不可用; -DMASR[8]:接收流程停止; -DMASR[9]:接收看门狗超时; -DMASR[10]:早发送; -DMASR[13]:总线错误; AIS 位为黏着位,当导致 AIS 位置 1 的对应中断状 态位被清零时必须通过写1的方式将AIS位也清 零。 早接收状态位。该位被置位时,表示收到数据帧时 14 ERS RW1Z DMA 已经填满了第一个缓冲区,但是完整的帧还没 0 接收完毕。RS置位后ERS位自动清零。 总线错误位。该位被置位时,表示发送了总线错误。 13 FBES RW1Z 具体原因见[25:23]位。该位被置位后相应的DMA 0 控制器将关闭总线访问。 [12:11] Reserved RO 保留。 0 早发送状态位。置位时表示发送帧已经全部压入 10 ETS RW1Z 0 FIFO。 看门狗超时标志位。置位时表示帧长已经超过了 9 RWTS RW1Z 0 2048字节。 接收流程停止状态位。该位置位表示接收流程已经 8 RPSS RW1Z 0 停止。 接收缓存不可用状态位。该位置位表示接收描述符 权限归属CPUDMA无法获得接收流程已经暂停。 7 RBUS RW1Z 用户需要释放描述符并向 RPDR 寄存器中填入一个 0 值来恢复接收流程。DMA 会在接收下一帧时重试获 取描述符。 接收完成状态位。该位置位表示已经完成一帧的接 6 RS RW1Z 0 收,帧信息也更新到描述符中。 发送数据下溢位。该位置位表示发送缓存在发送帧 5 TUS RW1Z 时发生了发送数据下溢。此时发送进程暂停并把数 0 据下溢错误位置位。 接收状态溢出位。该位被置位表示接收缓冲发生了 4 ROS RW1Z 0 数据溢出。 发送啰嗦Jabber定时器超时位。该位被置位表 3 TJTS RW1Z 示发送器过于繁忙,发送已经停止,描述符的啰嗦 0 Jabber超时位已经置位。 发送缓存不可用状态位。该位被置位表示发送描述 符被CPU占用DMA无法获取发送流程已经暂停。 2 TBUS RW1Z 0 第[22:20]位显示了当前的发送状态。应用程序需要 释放发送描述符。 发送流程停止状态位。该位被置位表示发送流程已 1 TPSS RW1Z 0 经停止。 发送完成标志位。该位被置位表示已经完成一帧的 0 TS RW1Z 0 发送描述符归属权已经交还CPU。 V2.4 476

Page 480

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 27.1.8.4.7 DMA操作模式寄存器R32_ETH_DMAOMR 偏移地址0x1018 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DTCEF Reserved Reserved TSF FTF Reserved D 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reser Reserved ST Reserved FEF FUGF Reserved SR ved 位 名称 访问 描述 复位值 [31:27] Reserved RO 保留。 0 不丢弃TCP/IP校验和错误帧控制位 0如果FEF位为0MAC会丢弃所有有错误的帧 26 DTCEFD RW 0 1发现TCP/IP/ICMP/UDP之类协议的检验和存在错 误时,不丢弃该帧。 [25:22] Reserved RO 保留。 0 发送存储转发控制位: 0发送流程写入FIFO的数据达到确定值之后就会 21 TSF RW 启动发送; 0 1发送流程将完整的帧全部写入FIFO后才会启动 发送。 20 FTF RW 发送FIFO清空控制位。置此位将复位发送FIFO。 0 [19:14] Reserved RO 保留。 0 开始或停止发送控制位: 13 ST RW 0发送完当前帧之后发送进程进入停止状态 0 1把发送进程置为运行状态。 [12:8] Reserved RO 保留。 0 转发错误帧控制位: 7 FEF RW 0接收FIFO会丢弃有错误的帧 0 1除了过短的帧之外所有的帧都会转发给DMA。 转发过短的帧控制位: 6 FUGF RW 0接收FIFO丢弃所有长度小于64字节的帧 0 1接收FIFO转发长度过短的帧。 [5:2] Reserved RO 保留。 0 开始或停止接收控制位: 0在转发完当前接收到的帧后接收DMA进入停止 1 SR RW 模式,下一次传输从当前接收描述符位置开始; 0 1开启接收流程DMA从当前位置取接收描述符或 者从标识符表头位置取接收描述符。 0 Reserved RO 保留。 0 27.1.8.4.8 DMA中断使能寄存器R32_ETH_DMAIER 偏移地址0x101C V2.4 477

Page 481

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PLE Reserved NISE 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 AISE ERS FBES Reserved ETIE RWTIE RPSIE RBUIE RIE TUIE ROIE TJTIE TBUIE TPSIE TIE 位 名称 访问 描述 复位值 31 PLE RW 内部10M物理层连接状态改变中断使能位。 0 [30:17] Reserved RO 保留。 0 正常中断使能位。使能该位将使能以下中断。 -DMASR[0]:发送中断; 16 NISE RW -DMASR[2]:发送缓存不可用; 0 -DMASR[6]:接收中断; -DMASR[14]:早接收中断。 异常中断。使能该位将使能以下中断。 -DMASR[1]:发送流程停止; -DMASR[3]:发送啰嗦Jabber超时 -DMASR[4]:接收FIFO溢出 -DMASR[5]:发送数据下溢; 15 AISE RW 0 -DMASR[7]:接收缓存不可用; -DMASR[8]:接收流程停止; -DMASR[9]:接收看门狗超时; -DMASR[10]:早发送; -DMASR[13]:总线错误。 早接收中断使能位。使能该位即可以产生早接收中 14 ERS RW 0 断。NISE须置位。AISE须置位。 总线致命错误中断使能位。使能该位即可以产生总 13 FBES RW 0 线错误中断。AISE须置位。 [12:11] Reserved RO 保留。 0 早发送中断使能位。使能该位即可以产生早发送中 10 ETIE RW 0 断。AISE须置位。 接收看门狗中断使能位。使能该位即可以产生接收 9 RWTIE RW 0 看门狗超时中断。AISE须置位。 接收流程停止中断使能位。使能该位即可以产生接 8 RPSIE RW 0 受流程停止中断。 接收缓存不可用中断使能位。使能该位即可以产生 7 RBUIE RW 0 接受缓存不可用中断。AISE须置位。 接收完成中断使能位。使能该位即可以产生接收完 6 RIE RW 0 成中断。NISE须置位。 发送下溢中断使能。使能该位即可以产生发送下溢 5 TUIE RW 0 中断。AISE须置位。 接收溢出中断。使能该位即可以产生接收溢出中断。 4 ROIE RW 0 AISE须置位。 发送啰嗦Jabber超时中断使能。使能该位即可 3 TJTIE RW 0 以产生发送啰嗦Jabber超时中断。AISE须置位。 V2.4 478

Page 482

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 发送缓存不可用中断使能。使能该位即可以产生发 2 TBUIE RW 0 送缓存不可用中断。NISE须置位 发送流程停止中断使能。使能该位即可以产生发送 1 TPSIE RW 0 流程停止中断。AISE须置位。 发送完成中断使能。使能该位即可以产生发送完成 0 TIE RW 0 中断。NISE须置位。 27.1.8.4.9 DMA丢失帧寄存器R32_ETH_DMAMFBOCR 偏移地址0x1020 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved OFOC MFA[10:0] OMFC 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MFC[15:0] 位 名称 访问 描述 复位值 [31:29] Reserved RO 保留。 0 28 OFOC RZ FIFO上溢计数器的上溢位。 0 [27:17] MFA[10:0] RZ 应用程序所丢失的帧。 0 16 OMFC RZ 丢失帧计数器溢出位。 0 丢失帧计数器。这个域表示由于接收缓冲区不可用 [15:0] MFC[15:0] RZ 0 导致的帧丢失的数量。 27.1.8.4.10 DMA当前发送描述符寄存器R32_ETH_DMACHTDR 偏移地址0x1048 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 HTDAR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 HTDAR[15:0] 位 名称 访问 描述 复位值 这个寄存器值指向目前正在使用的发送描述符。此 [31:0] HTDAR[31:0] RO 0 寄存器由DMA负责实时更新。 27.1.8.4.11 DMA当前接收描述符寄存器R32_ETH_DMACHRDR 偏移地址0x104C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 HRDAR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 HRDAR[15:0] V2.4 479

Page 483

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 位 名称 访问 描述 复位值 这个寄存器值指向目前正在使用的接收描述符。此 [31:0] HRDAR[31:0] RO 0 寄存器由DMA负责实时更新。 27.1.8.4.12 DMA当前发送缓冲区寄存器R32_ETH_DMACHTBAR 偏移地址0x1050 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 HTBAR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 HTBAR[15:0] 位 名称 访问 描述 复位值 这个寄存器值指向目前正在使用的发送缓冲区。此 [31:0] HTBAR[31:0] RO 0 寄存器由DMA负责实时更新。 27.1.8.4.13 DMA当前接收缓冲区寄存器R32_ETH_DMACHRBAR 偏移地址0x1054 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 HRBAR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 HRBAR[15:0] 位 名称 访问 描述 复位值 这个寄存器值指向目前正在使用的接收缓冲区。此 [31:0] HRBAR[31:0] RO 0 寄存器由DMA负责实时更新。 27.1.8.5 内部 10M 物理层相关寄存器地址 27.1.8.5.1 基础控制寄存器BMCR 偏移地址0x00 位 名称 访问 描述 复位值 0正常操作 15 RST RW/SC 0 1PHY复位。 0正常操作 14 Loopback RW 0 1使能回环。 13 Speed Selection RO 010Mb/s 0 0禁止自动协商 12 Auto-Negotiation RW 1 1使能自动协商。 [11:10] Reserved RO 保留。 0 Restart Auto- 0正常操作 9 RW/SC 0 Negotiation 1重新自动协商。 V2.4 480

Page 484

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0半双工 8 Duplex Mode RW 1 1全双工。 0正常操作 7 Collision Test RW 0 1冲突检测使能。 [6:0] Reserved RO 保留。 0 27.1.8.5.2 基础状态寄存器BMSR 地址偏移0x01 位 名称 访问 描述 复位 [15:6] Reserved RO 保留。 0 Auto- 0自动协商未完成 5 Negotiation RO 0 1自动协商完成。 Complete [4:3] Reserved RO 保留。 0 0物理层未建立链接 2 Link RO 0 1物理层建立链接。 [1:0] Reserved RO 保留。 0 27.1.8.5.3 自动协商链接方能力寄存器R16_ETH_ANLPAR 偏移地址0x05 位 名称 访问 描述 复位值 下一页位。 15 NP RO 0发送基本能力数据页 0 1发送协议细节数据页。 0没有应答 14 ACK RO 0 1链接方确认接收到本地节点的能力数据字。 0链接方没有指示远端故障 13 RF RO 0 1链接方正在指示一个远端故障。 12 Reserved RO 保留。 0 0链接方不支持非对称流控 11 ASYPAUSE RO 1链接方支持非对称流控。 0 启用自动协商时,此位反映链接方的能力。 0链接方不支持流控 10 PAUSE RO 1链接方支持流控。 0 启用自动协商时,此位反映链接方的能力。 0链接方不支持100Base-T4 9 100Base-T4 RO 0 1链接方支持100Base-T4。 0链接方不支持100Base-TX全双工 8 100Base-TX-FD RO 0 1链接方支持100Base-TX全双工。 0链接方不支持100Base-TX 7 100Base-TX RO 0 1链接方支持100Base-TX。 V2.4 481

Page 485

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 由并行检测建立了100Base-TX链接之后该位同样 会被置位。 0链接方不支持10Base-TX全双工 6 10Base-T-FD RO 0 1链接方支持10Base-TX全双工。 0链接方不支持10Base-T 1链接方支持10Base-T。 5 10Base-T RO 0 由并行检测建立了10 Base-T链接之后该位同样 会被置位。 链接方的二进制编码节点选择器,当前仅 CSMA/CD [4:0] SELECT[4:0] RO 00001b <00001>被指定。 27.1.8.5.4 物理层状态寄存器PHYSR 偏移地址0x10 位 名称 访问 描述 复位值 [15:4] Reserved RO 保留。 0 0正常模式 3 Loopback_10M RO 0 1PHY工作于10M自循环。 0半双工模式 2 Full_10M RO 0 1PHY工作于10M全双工。 [1:0] Reserved RO 保留。 0 27.1.8.5.5 自动翻转寄存器MDIX 偏移地址寄存器0x1E 位 名称 访问 描述 复位值 [15:4] Reserved RO 保留。 0 1x保留 [3:2] P/N RW 00P/N极性正常 0 01P/N极性颠倒。 00自动 [1:0] T/R RW 01MDIX 0 1xMDI。 27.2 关于 CH32F208、CH32V203、CH32V208 产品 27.2.1 以太网控制器简介 芯片集成了以太网控制器MAC和PHY以及DMA兼容IEEE802.3协议。内部DMA传输数据和接收 数据到系统RAM中。PHY物理层是一个10Mbit/S的以太网络收发器提供部分网络PHY寄存器可以 设置发送和接收性能。 网络底层操作主要以子程序库提供应用支持,对寄存器不作详细介绍。主要特性:  支持全双工和半双工  支持短包填充设置  支持CRC设置和填充  支持巨型帧接收  支持不同的过滤模式组合 V2.4 482

Page 486

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn  支持pause帧发送和设置  支持自动协商机制  支持DMA用于发送和接收数据  PHY收发器兼容10BASE-T发送模块支持节能模式  内置50欧姆传输阻抗匹配电阻也可选择外接  提供由IEEE分配的全球唯一MAC地址 27.2.2 寄存器描述 表27-23 以太网控制器相关寄存器列表 名称 偏移地址 描述 复位值 R8_ETH_EIE 0x40028003 中断使能寄存器 0x00 R8_ETH_EIR 0x40028004 中断标志寄存器 0x00 R8_ETH_ESTAT 0x40028005 状态寄存器 0x00 R8_ETH_ECON2 0x40028006 PHY模拟参数设置寄存器 0x0A R8_ETH_ECON1 0x40028007 收发控制寄存器 0x00 R32_ETH_TX 0x40028008 发送DMA控制寄存器 0xXXXXXXXX 发送DMA缓存区起始地址寄存 R16_ETH_ETXST 0x40028008 0xXXXX 器 R16_ETH_ETXLN 0x4002800A 发送长度寄存器 0xXXXX R32_ETH_RX 0x4002800C 接收DMA控制寄存器 0x00000000 接收DMA缓冲区起始地址寄存 R16_ETH_ERXST 0x4002800C 0x0000 器 R16_ETH_ERXLN 0x4002800E 接收长度寄存器 0x0000 R32_ETH_HTL 0x40028010 Hash表低字节寄存器 0x484EA033 R32_ETH_HTH 0x40028014 Hash表高字节寄存器 0x5000EF97 R32_ETH_MACON 0x40028018 接收过滤设置寄存器 0x10000000 R8_ETH_ERXFCON 0x40028018 接收包过滤控制寄存器 0x00 R8_ETH_MACON1 0x40028019 Mac层流控制寄存器 0x00 R8_ETH_MACON2 0x4002801A Mac层封包控制寄存器 0x00 R8_ETH_MABBIPG 0x4002801B 最小包间间隔寄存器 0x10 R32_ETH_TIM 0x4002801C 流控制暂停帧时间寄存器 0xXXXXXXXX R16_ETH_EPAUS 0x4002801C 流控制暂停帧时间寄存器 0xXXXX R16_ETH_MAMXFL 0x4002801E 最大接收包长度寄存器 0x0000 R16_ETH_MIRD 0x40028020 MII读数据寄存器 0x1100 R32_ETH_MIWR 0x40028024 MII写寄存器 0x00000000 R8_ETH_MIREGADR 0x40028024 MII地址寄存器 0x00 R8_ETH_MISTAT 0x40028025 MII状态寄存器 0x00 R16_ETH_MIWR 0x40028026 MII写数据寄存器 0x0000 R32_ETH_MAADRL 0x40028028 MAC地址低字节寄存器 0xXXXXXXXX R16_ETH_MAADRH 0x4002802C MAC地址高字节寄存器 0xXXXX 27.2.2.1 中断使能寄存器R8_ETH_EIE 位 名称 访问 描述 复位值 以太网中断使能: 7 RB_ETH_EIE_INTIE RW 0 0关闭中断 V2.4 483

Page 487

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1开启中断。 接收完成中断使能: 6 RB_ETH_EIE_RXIE RW 0关闭中断 0 1开启中断。 5 Reserved RO 保留。 0 Link变化中断使能 4 RB_ETH_EIE_LINKIE RW 0关闭中断 0 1开启中断。 发送完成中断使能: 3 RB_ETH_EIE_TXIE RW 0关闭中断 0 1开启中断。 内置的 50 欧姆阻抗匹配电阻使能: 2 RB_ETH_EIE_R_EN50 RW 0片内电阻断开 0 1片内电阻连接。 发送错误中断使能: 1 RB_ETH_EIE_TXERIE RW 0关闭中断 0 1开启中断。 接收错误中断使能: 0 RB_ETH_EIE_RXERIE RW 0关闭中断 0 1开启中断。 27.2.2.2 中断标志寄存器R8_ETH_EIR 位 名称 访问 描述 复位值 7 Reserved RO 保留。 0 6 RB_ETH_EIR_RXIF RW1 接收完成标志。 0 5 Reserved RO 保留。 0 4 RB_ETH_EIR_LINKIF RW1 Link变化标志。 0 3 RB_ETH_EIR_TXIF RW1 发送完成标志。 0 2 Reserved RO 保留。 0 1 RB_ETH_EIR_TXERIF RW1 发送错误标志。 0 0 RB_ETH_EIR_RXERIF RW1 接收错误标志。 0 27.2.2.3 状态寄存器R8_ETH_ESTAT 位 名称 访问 描述 复位值 7 RB_ETH_ESTAT_INT RW1 中断。 0 6 RB_ETH_ESTAT_BUFER RW1 Buffer错误。 0 5 RB_ETH_ESTAT_RXCRCER RO 接收CRC出错。 0 4 RB_ETH_ESTAT_RXNIBBLE RO 接收nibble错误。 0 3 RB_ETH_ESTAT_RXMORE RO 接收超过设定最大数据包。 0 2 RB_ETH_ESTAT_RXBUSY RO 接收进行中。 0 1 RB_ETH_ESTAT_TXABRT RO 发送被MCU打断。 0 0 Reserved RO 保留。 0 27.2.2.4 PHY 模拟参数设置寄存器R8_ETH_ECON2 位 名称 访问 描述 复位值 V2.4 484

Page 488

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [7:4] Reserved RO 保留。 0 RB_ETH_ECON2_RX [3:1] RW 保留必须写入110b。 110b RB_ETH_ECON2_MUST 发送端节能驱动控制: 0 RB_ETH_ECON2_TX RW 0额定驱动 0 1节能驱动。 27.2.2.5 收发控制寄存器R8_ETH_ECON1 位 名称 访问 描述 复位值 发送模块复位: 7 RB_ETH_ECON1_TXRST RW 0不复位 0 1复位发送模块。 接收模块复位: 6 RB_ETH_ECON1_RXRST RW 0不复位 0 1复位接收模块。 [5:4] Reserved RO 保留。 0 发送开始,发送完成后自动清零: 3 RB_ETH_ECON1_TXRTS RW 0无动作 0 1启动发送。 接收使能控制: 2 RB_ETH_ECON1_RXEN RW 0关闭接收 0 1开启接收。 [1:0] Reserved RO 保留。 0 27.2.2.6 发送 DMA 缓存区地址寄存器R16_ETH_ETXST 位 名称 访问 描述 复位值 R16_ETH_ETXST[15:0 发送DMA缓冲区起始地址。 [15:0] RW X ] 低15位有效地址必须4字节对齐。 27.2.2.7 发送长度R16_ETH_ETXLN 位 名称 访问 描述 复位值 R16_ETH_ETXLN[15:0 [15:0] RW 发送长度。 X ] 27.2.2.8 接收 DMA 缓冲区地址寄存器R16_ETH_ERXST 位 名称 访问 描述 复位值 R16_ETH_ERXST[15:0 接收DMA缓冲区起始地址。 [15:0] RW X ] 低15位有效地址必须4字节对齐。 27.2.2.9 接收长度寄存器R16_ETH_ERXLN 位 名称 访问 描述 复位值 R16_ETH_ERXLN[15:0 [15:0] RO 接收长度。 0 ] V2.4 485

Page 489

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 27.2.2.10 Hash 表低字节寄存器R32_ETH_HTL 位 名称 访问 描述 复位值 [31:24] R8_ETH_EHT3[7:0] RW Hash Table字节3。 X [23:16] R8_ETH_EHT2[7:0] RW Hash Table字节2。 X [15:8] R8_ETH_EHT1[7:0] RW Hash Table字节1。 X [7:0] R8_ETH_EHT0[7:0] RW Hash Table字节0。 X 27.2.2.11 Hash 表高字节寄存器R32_ETH_HTH 位 名称 访问 描述 复位值 [31:24] R8_ETH_EHT7[7:0] RW Hash Table字节7。 X [23:16] R8_ETH_EHT6[7:0] RW Hash Table字节6。 X [15:8] R8_ETH_EHT5[7:0] RW Hash Table字节5。 X [7:0] R8_ETH_EHT4[7:0] RW Hash Table字节4。 X 27.2.2.12 接收过滤设置寄存器R8_ETH_ERXFCON 位 名称 访问 描述 复位值 单播匹配过滤设置: 7 RB_ETH_ERXFCON_UCEN RW 0丢弃所有单播包 0 1接收目标地址匹配的包。 6 Reserved RO 保留。 0 CRC校验过滤设置 5 RB_ETH_ERXFCON_CRCEN RW 0丢弃CRC错误的包 0 1接收CRC错误的包。 接收过滤使能: 4 RB_ETH_ERXFCON_EN RW 0关闭接收过滤功能 0 1开启接收过滤功能。 魔法包过滤设置: 3 RB_ETH_ERXFCON_MPEN RW 0丢弃魔法包 0 1接收魔法包。 hash表匹配过滤设置 2 RB_ETH_ERXFCON_HTEN RW 0丢弃hash表匹配的包 0 1接收hash表匹配的包。 组播包匹配过滤设置: 1 RB_ETH_ERXFCON_MCEN RW 0丢弃所有组播包 0 1接收所有组播包。 广播包匹配过滤设置: 0 RB_ETH_ERXFCON_BCEN RW 0丢弃所有广播包 0 1接收所有广播包。 27.2.2.13 Mac 层流控制寄存器R8_ETH_MACON1 位 名称 访问 描述 复位值 [7:6] Reserved RO 保留。 0 pause帧设置全双工下有效 [5:4] RB_ETH_MACON1_FCEN RW 00停止发送暂停帧 0 01发送一次暂停帧然后停止发送 V2.4 486

Page 490

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 10周期性发送暂停帧 11发送0 timer暂停帧然后停止发 送。 发送pause帧使能控制 3 RB_ETH_MACON1_TXPAUS RW 0不发送pause帧 0 1使能发送。 接收pause帧使能 2 RB_ETH_MACON1_RXPAUS RW 0不接收pause帧 0 1使能接收。 控制帧设置: RB_ETH_MACON1_PASSAL 1 RW 0控制帧将被过滤 0 L 1没被过滤的控制帧将写入缓存。 MAC层接收使能 0 RB_ETH_MACON1_MARXEN RW 0MAC不接收数据 0 1MAC接收使能。 27.2.2.14 Mac 层封包控制寄存器R8_ETH_MACON2 位 名称 访问 描述 复位值 短包填充设置: 000不填充短包 001所有短包填充0至60字节再4 字节CRC 010不填充短包 011所有短包填充0至64字节再4 RB_ETH_MACON2_PADCFG 字节CRC [7:5] RW 0 [2:0] 100不填充短包 101检测到字段为0x8100的VLAN网 络包自动填充0至64字节否则短包 填充60字节0填充后再4字节CRC 110不填充短包 111所有短包填充0至64字节再4 字节CRC。 发送添加CRC控制 RB_ETH_MACON2_TXCRCE 4 RW 0硬件不填充CRC 0 N 1硬件填充CRC。 3 RB_ETH_MACON2_PHDREN RW 特殊4字节不参与CRC校验。 0 允许接收巨型帧: 2 RB_ETH_MACON2_HFRMEN RW 0不允许接收巨型帧 0 1允许接收。 1 Reserved RO 保留。 0 以太网络通讯模式: 0 RB_ETH_MACON2_FULDPX RW 0半双工 0 1全双工。 V2.4 487

Page 491

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 27.2.2.15 最小包间间隔寄存器R8_ETH_MABBIPG 位 名称 访问 描述 复位值 7 Reserved RO 保留。 0 [6:0] R8_ETH_MABBIPG[6:0] RW 最小包间间隔字节数。 0010000b 27.2.2.16 流控制暂停帧时间寄存器R16_ETH_EPAUS 位 名称 访问 描述 复位值 [15:0] R16_ETH_EPAUS[15:0] RW 流控制暂停帧时间。 X 27.2.2.17 最大接收包长度寄存器R16_ETH_MAMXFL 位 名称 访问 描述 复位值 R16_ETH_MAMXFL[15:0 [15:0] RW 最大接收包长度。 0 ] 27.2.2.18 MII 读数据寄存器R16_ETH_MIRD 位 名称 访问 描述 复位值 [15:0] R16_ETH_MIRD[15:0] RW MII读数据寄存器。 0x1100 27.2.2.19 MII 地址寄存器R8_ETH_MIREGADR 位 名称 访问 描述 复位值 [7:5] Reserved RO 保留。 0 [4:0] RB_ETH_MIREGADR_MIRDL RW PHY寄存器地址。 0 27.2.2.20 MII 状态寄存器R8_ETH_MISTAT 位 名称 访问 描述 复位值 [7:1] Reserved RO 保留。 0 MII寄存器操作状态 0 R8_ETH_MII_STA RO 0读MII寄存器 0 1写MII寄存器。 27.2.2.21 MII 写数据寄存器R16_ETH_MIWR 位 名称 访问 描述 复位值 [15:0] R16_ETH_MIWR WO MII 写数据寄存器。 0 27.2.2.22 MAC 地址寄存器R32_ETH_MAADRL、R16_ETH_MAADRH 位 名称 访问 描述 复位值 R32_ETH_MAADRL [31:0] RW MAC Address字节14。 x [31:0] R16_ETH_MAADRH [15:0] RW MAC Address字节56。 x [15:0] 注内部10M物理层相关寄存器内容详见27.1.8.5内部10M物理层相关寄存器地址部分。 27.2.3 操作指南 V2.4 488

Page 492

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1.初始化 1、配置安全寄存器进入安全模式打开以太网络的时钟和电源 2、开启相应的中断可选的启动阻抗匹配电阻 3、配置接收过滤模式、CRC功能、MAC地址 4、设置缓存 5、启动接收开启中断。 2.发送数据 1、写入R16_ETH_ETXLN数据长度 2、写入R16_ETH_ETXST数据地址 3、使能RB_ETH_ECON1_TXRTS标志启动发送。 3.接收数据 1、预先设置好接收地址使能接收 2、使用中断或查询到接收完成状态 3、读取R16_ETH_ERXLN接收长度 4、更新R16_ETH_ERXST接收地址。 具体的应用请基于以太网协议栈库使用,并参考提供的网络应用示例。 V2.4 489

Page 493

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 28 章 SDIO 接口SDIO 本章模块描述适用于CH32F20x和CH32V30x、CH32V31x微控制器全系列部分产品。 本章单独所述“SDIO”是指微控制器上一个为操作 SD 卡等外部存储卡或其他设备而设计的通 信接口,是微控制器的一个外设。微控制器的 SDIO直接挂载在 HB总线上由 HCLK 直接提供时钟, 能实现较高的通讯速度,微控制器的 SDIO 用作 SDIO 主机,被控制的设备也被统称 SDIO 设备。应用 中一般使用 SDIO 来读写 SD 卡、TF 卡或 eMMC 颗粒,或控制其他使用 SDIO 作为通讯接口的设备,比 如WiFi/4G模块。 28.1 主要特征 28.1.1 特征  支持SD卡、SDIO卡和MMC卡  支持1位、4位和8位总线  SDIO的时钟最快可达到HCLK的一半  兼容MMC 规范4.5  兼容SD卡规范2.0SDIO卡规范2.0  不兼容SPI或QSPI 28.1.2 概述 微控制器的 SDIO 支持与 SD 卡或 MMC 卡等存储器通讯需要明确的是SDIO 仅仅是提供一组实 现SD卡、MMC卡规范单次命令传输所需要的时钟数据和命令控制时序各命令间的先后组合需用用 户通过程序自行确定。此外对于各种存储卡而言SDIO仅仅只能实现读写功能文件系统所提供的 对文件的功能需要用户自行通过程序构建文件系统而实现。 SDIO 不同于 QSPI 接口,其没有片选引脚,并多出一个 CMD引脚CMD可以认为是一个特殊数据 线专门用来传输命令和响应SDIO有1位、4位和8位三种数据线宽度可选SDIO的时钟在配置时 一般工作在 400kHz 以下的频率,当正式进行数据传输时,则可以配成 SDIO 设备所支持的最大时钟, 微控制器所支持的最大 SDIO 时钟输出为 HCLK的一半按照协议当 SDIO 设备接收的时钟大于某个阈 值时,需要降低时钟线、数据线和命令线的波形峰值,以节省波形上升和下降的耗时。 与 SD卡不同SDIO卡经常指代使用 SDIO接口的 WIFI/蓝牙模块和 4G模块等非存储设备。如果 没有特殊说明,本章叙述的内容一定适用于 SD 卡,只适用于 SDIO卡或 MMC 卡的内容将会特别指出。 本章在叙述时优先将SD卡视为潜在操作对象其次为SDIO卡最后为MMC卡。 28.2 接口和时钟 SDIO 通过 HB 总线接收 CPU 对其的控制SDIO 的寄存器中有一个 FIFO 接口CPU 或 DMA 通过读 写 FIFO 获取或发生数据。SDIO 由 HCLK 直接供给时钟,并拥有一个中断入口,支持多种中断源。由 SDIO直接控制的引脚有SDIO_CK、SDIO_CMD、SDIO_D[7:0]这十个通过几个引脚连接到SDIO设备上。 SDIO是一个主机主导的通讯接口所有的传输必须由微控制器发起。 28.2.1 外设结构 SDIO的结构如图28-1所示。 V2.4 490

Page 494

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图28-1 SDIO的结构图 Power management SDIO_CK Clock management Interrupt DMA request Status Control Command flag logic timer IN CMD SDIO_CMD OUT Bus in H t B erface R R e e g s i p s o t n e s r e re S g h is if t t e r CRC Status Contro Data HB bus CMD flag l logic timer IN Parameter SDIO_D[7:0] OUT Send and Shift CRC receive FIFO register HCLK/2 SDIO是微控制器作为主机直接操作SDIO设备的外设其大概由HB接口、时钟控制部分、CMD线 控制部分数据线控制部分和控制寄存器部分这五个模块组成SDIO是一个半双工的外设CPU向控 制寄存器写入需要发送的命令和数据,命令线和数据线控制模块负责将命令或数据推到 IO 上,并加 上CRC。SDIO的数据流由通用DMA负责完成从RAM到SDIO的FIFO的搬移SDIO的FIFO有32个32 位的大小。 28.2.2 引脚及其配置 SDIO需要配置的引脚及其模式见表28-1。 表28-1 SDIO的引脚配置 GPIO SDIO复用功能 需要配置成的引脚模 需要配置成的引脚速 式 度 PC[8:11] SDIO_D[0:3] 推挽复用输出 50MHz PC12 SDIO_CK 推挽复用输出 50MHz PD2 SDIO_CMD 推挽复用输出 50MHz PB8 SDIO_D4 推挽复用输出 50MHz PB9 SDIO_D5 推挽复用输出 50MHz PC6 SDIO_D6 推挽复用输出 50MHz PC7 SDIO_D7 推挽复用输出 50MHz 注从机模式时SDIO_CK引脚应配置为浮空输入且从机模式仅适用于CH32F20x_D8、 CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C批号倒数第六位不为0的产品。 28.2.3 时钟 SDIO 的时钟引脚为 SDIO_CK其输出时钟由 HCLK分频得到分频系数可配置为 2-261之间的任 意整数值。SDIO设备在初始化的时候一般只支持最高400kHz时钟的单总线模式在初始化后主机 一般会发起切换至低电压的操作,同时将时钟提升至微控制器和 SDIO 设备双方能接受的最大时钟。 不同版本和速度等级的SD卡所支持时钟速度和切换流程有所区别用户需要自行了解。 V2.4 491

Page 495

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 28.2.4 命令状态机 SDIO的命令工作流程遵循如下图的状态机。 图28-2 命令状态机 Receive CE-ATA Resetting command Wait_CPL completion signal, or CPSM disabled or command CRC failed CPSM enable and Idle suspend commands Receive response or Receive response in CE-ATA Disable disable or command mode, no interrupt, wait CPSM CRC failure for CE-ATA command to complete signal enable Suspend Enable and CPSM disabled or Receive command start CPSM disabled command timeout Final data or unresponsive Response Send start Wait response Wait Receive response in CE-ATA mode without interruption, wait for CE-ATA command to complete signal disable 28.2.5 数据状态机 SDIO的数据工作流程遵循如下图的状态机。 图28-3 数据状态机 Disable DPSM Resetting DPSM enable, read wait start, Read wait SDI/O mode Idle enable Disable or Enable and do not CRC failure Disable or send Read wait stop Disable or FIFO or timeout data end Disable or Rx FIFO underload or data empty or timeout end or CRC failure Enable or start bit error receive data, Start Busy and send Wait_R read wait, enable Idle SDI/O mode Wait_R Packet End End of packet, Disable or or end of data, CRC failure or FIFO overload Data Start bit preparation Send Receive V2.4 492

Page 496

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 28.3 SDIO 协议简述 SDIO 上的通讯以传输为最小单位,每个传输总是以主机在 CMD 线上发送命令为起始,有的命令 发送之后SDIO设备同样会在CMD线上发送一段数据回复主机称为“响应”有时还会伴随着数据 的传输数据的传输是在D线上。命令和响应的格式是固定的各域各位的定义根据不同的命令或响 应而确定。响应和数据传输需要在命令或响应结束后规定的时间内发出或停止,否则将产生超时错误。 本小节的目的是以较小的篇幅让用户对使用 SDIO 所必要的一些规范的细节有初步的了解,并不 保证详尽和更新及时。微控制器的SDIO也仅仅保证其实现了SD 2.0SDIO 2.0及MMC 4.5规范的硬 件操作基础,对于更高版本规范定义的功能,例如双边沿采样等,并不一定支持。用户在做具体开发 时应以SD规范SDIO规范和MMC规范为依据进行SDIO交互编程。 28.3.1 总线时序 SD 卡的传输都是以主机发起 CMD 发起的SD 卡可能不回复响应,可能回复短响应和长响应,有 的响应后面还会伴随数据传输。而在SDIO卡或MMC卡的通讯中还可能会有SDIO设备主动报中断的 情况。时序如下图组所示。 图28-4 SDIO的无响应时序和无数据时序以SD卡为例 From host to card From host to card From card to host SDIO_CMD Command Command Response SDIO_D Operation(no response) Operation(no response) 图28-5 SDIO的多块读时序以SD卡为例 From host to card From card to host Data From card to host Stop command Stop data transmission SDIO_CMD Command Response Command Response SDIO_D Data block crc Data block crc Data block crc Block read operation Multi-block Data stop read operation operation V2.4 493

Page 497

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图28-6 SDIO的多块写时序以SD卡为例 From host to cardFrom card to host Stop command Data from host to card Stop data transmission SDIO_CMD Command Response Command Response Busy Busy SDIO_D Busy signalData block crc signal Data block crc signal Optional for CE-ATA Block write Data stop Card Busy Signal operation operation Multi-block write operation 图28-7 SDIO的数据流读时序以SDIO卡为例 From host to cardFrom card to host Stop command Data from card to host Stop data transmission SDIO_CMD Command Response Command Response SDIO_D Data Flow Data transfer Data stop operation operation 图28-8 SDIO的数据流写时序以SDIO卡为例 From host to card From card to host Stop command Data from host to card Stop data transmission SDIO_CMD Command Response Command Response SDIO_D Data Flow Data transfer Data stop operation operation 28.3.2 命令 SDIO传输大部分以命令CMD开始SDIO主机通过命令向设备告知自己的意图。命令的格式如 下表。 V2.4 494

Page 498

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 表28-2 命令格式 位/域的名 结束 起始位 传输位 命令索引 命令参数 CRC7 称 位 位次/宽度 47 46 [45:40] / 6 [39:8] / 32 [7:1] / 7 0 bits bits bits 值 0b 1b X X X 1b 命令大致有四种: 1 广播命令bc发给总线上的所有的卡没有响应返回 2 带响应的广播命令bcr发给总线上的所有的卡有响应返回 3 点对点命令ac发给特定的卡但没有数据传输 4 带数据传输的点对点命令adtc发给特定的卡并附带数据传输 下面是一些常用的命令。 28.3.2.1 基础命令 基础命令是SD卡所支持的一些较基本的功能。 表28-3 SD卡的基础命令 命令索引 类型 参数 回复类型 简写 描述 复位所有的卡到 CMD0 bc [31:0]填充位无意义; 无 GO_IDLE_STATE IDLE状态 CMD2 bcr [31:0]填充位无意义; R2 ALL_SEND_CID 所有卡回复CID CMD3 bcr [31:0]填充位无意义; R6 SEND_RELATIVE_ADDR 回复新的RCA [31:16]RCA R1b 选中或者取消选 CMD7 ac SELECT/DESELECT_CARD [15:0]填充位无意义; 选中卡 选中某个卡 [31:12]保留; 发送SD卡接口条 CMD8 bcr [11:8]供电; R7 SEND_IF_COND 件。 [7:0]校验模式; [31:16]RCA CMD9 ac R2 SEND_CSD 要求CSD。 [15:0]填充位无意义; [31:16]RCA CMD10 ac R2 SEND_CID 要求CID。 [15:0]填充位无意义; 切换到 1.8V 电 CMD11 ac [31:0]填充位无意义; R1 VOLATGE_SWITCH 平。 强制卡停止 传 CMD12 ac [31:0]填充位无意义; R1b STOP_TRANSMISSION 输; [31:16]RCA [15]发送任务状态寄 发送状态或任务 CMD13 ac R1 SEND_STATUS/SEND_TASK_STATUS 存器; 状态寄存器 [14:0] 填充位; [31:16]RCA 要 求 卡 进 到 CMD15 ac 无 GO_INACTIVE_STATE [15:0]填充位无意义; INACTIVE模式 28.3.2.2 擦除命令 SD卡也是FLASH的结构写入前也需要擦除FLASH但是SD卡内部集成了擦除逻辑在执行写命 令前如果发现没有擦除会自动补上擦除操作。在很多情况下特别是大批量写之前,如果主动执行擦除 有助于提高效率。 V2.4 495

Page 499

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 表28-4 SD卡的擦除命令[1] 命令 类型 参数 回复类型 简写 描述 索引 [31:0]开始擦除的地址 设定擦除的首地 CMD32 ac R1 ERASE_WR_BLK_START [2] 址 [31:0]结束擦除的地址 设定擦除的尾地 CMD33 ac R1 ERASE_WR_BLK_END [2] 址 参数为 0 即普通 CMD38 ac [31:0]擦除模式 R1b ERASE 擦 注1这里的擦除命令是SD协议规范定义的SD卡的擦除命令SDIO卡和MMC卡的擦除命令与此 有区别2目前常用的SDHC/SDXC2GB到2TB级别的卡写入的擦除地址必须是块地址即512字 节对齐; 28.3.2.3 块传输的读命令 表28-5 SD卡的块读命令[1] 命令索 类型 参数 回复类型 简写 描述 引 CMD16 ac [31:0]块长度 R1 SET_BLOCKLEN 写入块长度512 adtc [31:0]单个块的地址 设定单个读的起 CMD17 R1 READ_SINGLE_BLOCK [1] 始地址 adtc [31:0]多个块的地址 设定单个读的起 CMD18 R1 READ_MULTIPLE_BLOCK [1] 始地址 adtc 发送表示模式变 CMD19 [31:0]保留位 R1 SEND_TUNING_BLOCK 化的64字节序列 ac [31:28]保留位 CMD20 R1b SPEED_CLASS_CONTROL 速度控制控制 [27:0]速度控制位 ac [31:6]保留位 SDUC 才会用用 CMD22 R1 ADDRESS_EXTENSION [5:0]扩展地址 到。 CMD23 ac [31:0]块计数器 R1 SET_BLOCK_COUNT 块计数器 注1目前常用的SDHC/SDXC2GB到2TB级别的卡写入的擦除地址必须是块地址即512字节对 齐。 28.3.2.4 块传输的写命令 表28-6 SD卡的块读命令[1] 命令索 类型 参数 回复类型 简写 描述 引 CMD16 ac [31:0]块长度 R1 SET_BLOCKLEN 写入块长度512 设定单个块写的 CMD24 adtc [31:0]块的地址[1] R1 WRITE_BLOCK 起始地址 [31:0]多个块的地址 设定多个块写的 CMD25 adtc R1 WRITE_MULTIPLE_BLOCK [1] 起始地址 对 CSD 可编程的 CMD27 adtc [31:0]填充位 R1 PROGRAM_CSD 字编程 注1目前常用的SDHC/SDXC2GB到2TB级别的卡写入的擦除地址必须是块地址即512字节对 齐。 V2.4 496

Page 500

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 28.3.3 响应 响应作为 SDIO 设备对主机的必要回复,同样也是在 CMD 线上传输的,且必须在规定的时间内回 复。响应传输为高位在前低位在后,响应长度和各比特各域的定义由响应的类型具体决定,但所有的 响应都是由一个固定为0的起始位开始跟着一个为固定0的传输方向位[1]。所有的响应最后都有一 个停止位固定为1[1]。大致有7种响应SD卡支持R1 / R1b / R2 / R3 / R6 / R7SDIO卡还支 持R4 / R5格式见下文。 28.3.3.1 R1 响应 普通响应总长48位有CRC7校验卡状态域为32位。格式如下表。 表28-7 R1的格式 位/域的名称 起始位 传输位 响应索引 卡状态 CRC7 结束位 位次/宽度 47 46 [45:40] / 6 bits [39:8] / 32 bits [7:1] / 7 bits 0 值 0b 0b 跟随CMD索引 X X 1b 28.3.3.2 R1b 响应 R1b 的格式和 R1 一致,但是可以在响应后添加繁忙信号,即钳住数据线 D2。主机收到繁忙信号 检测到SDIO_D2为低后需要进行相应处理。 28.3.3.3 R2 响应 应对特定几个命令的响应总长136位CRC7校验包含在卡状态域中卡状态域为128位。卡状 态域存放CID寄存器或CSD寄存器的值CID寄存器一般作为CMD2/CMD10的回复CSD寄存器一般作 为 CMD9 的回复CID/CSD 寄存器的具体含义见 28.4.2 设备寄存器部分。需要注意的是 R2 只会回复 CID/CSD 寄存器的[127:1]段CID/CSD[0]固定为 1 的保留位[2]被结束位占据,结束位固定也为 1。 格式如下表。 表28-8 R2的格式 位/域的名 起始 传输 命令索引 卡状态 结束位 称 位 位 位次/宽度 135 134 [133:128] / 6 bits [127:1] / 127 bits 0 值 0b 0b 111111b CID/CSD 1b 28.3.3.4 R3 响应 回复OCR寄存器的专用响应总长48位没有CRC7校验。OCR寄存器一般作为ACMD41的回复。 格式如下表。 表28-9 R3的格式 位/域的名 起始 传输位 命令索引 卡状态 保留 结束位 称 位 位次/宽度 47 46 [45:40] / 6 [39:8] / 32 [7:1] / 7 0 bits bits bits 值 0b 0b 111111b OCR 1111111b 1b 28.3.3.5 R4 响应 应对CMD5的响应回复OCR及相关寄存器的专用响应总长48位有CRC7校验。R4应用在SDIO 卡中,格式如下表。 表28-10 R4的格式 位/域的名称 位次 宽度单位bit 值 V2.4 497

Page 501

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 起始位 47 1 0b 传输位 46 1 0b 保留 [45:40] 6 111111b 卡就绪 39 1 X IO功能数目 [38:36] 3 X 当前寄存器 [35] 1 X 填充位 [34:33] 2 00b S18A 32 1 X IO OCR [31:8] 24 OCR CRC校验域 [7:1] 7 1111111b 结束位 0 1 1b 注MMC卡R4的格式和SDIO卡不同。 28.3.3.6 R5 响应 应对CMD5的专用响应总长48位有CRC7校验。R5应用在SDIO卡中格式如下表。 表28-11 R5的格式 位/域的名 起始 传输位 命令索引 填充位 响应格式 读写数据 CRC7 结束 称 位 位 位次 47 46 [45:40] [39:24] [23:16] [15:8] [7:1] 0 宽度 1 1 6 16 8 8 7 1 值 0b 0b 110100b 0000h X X X 1b 注MMC卡R5的格式和SDIO卡不同。 28.3.3.7 R6 响应 回复RCA的专用响应总长48位有CRC7校验格式如下表。 表28-12 R6的格式 位/域的名 起始位 传输位 命令索引 卡的RCA 卡状态位 CRC7 结束 称 位 位次 47 46 [45:40] [39:24] [23:8] [7:1] 0 宽度 1 1 6 16 16 7 1 值 0b 0b 000011b X X X 1b 28.3.3.8 R7 响应 应对CMD8的专用响应表明支持的电压的信息总长48位有CRC7校验格式如下表。 表28-13 R7的格式 位/域的 起始 传输 命令索 PCIe 1V2 PCIe响 接受的电 检查回 结束 保留位 CRC7 名称 位 位 引 支持 应 压 馈 位 位次 47 46 [45:40] [39:22] 21 20 [19:16] [15:8] [7:1] 0 宽度 1 1 6 18 1 1 4 8 7 1 值 0b 0b 001000b 00000h X X X X X 1b 28.3.4 数据传输 数据传输在数据线SDIO_D上进行有1/4/ 8位三种宽度数据传输时一般是一个时钟的起始位 在最前面,每个字节的高位在前,低位在后。对于 SD 卡仅仅支持的块传输模式,每个块的数据传输 V2.4 498

Page 502

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 结束后还跟着CRC校验。 开启RANDOM_LEN_EN位配置DBLOCKSIZE2表示的字节长度配置R32_SDIO_DLEN表示的传输数 据总长度,使能 DTEN 位,填写数据至 R32_SDIO_FIFO即可完成任意字节长度且带 CRC 校验的块传 输。仅适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C批号 倒数第六位不为0的产品 MMC卡还支持数据流传输模式此时不附带CRC。下图为数据传输的格式。 图28-9 SD卡单总线数据传输字节的格式 图28-10 SD卡4总线数据传输字节的格式 图28-11 SD卡单总线数据传输一个512位字的格式 图28-12 SD卡4总线数据传输一个512位字的格式 28.3.5 从模式 开启SLV_MODE位即处于等待主机命令的状态接收到的命令参数会放在RESP1接收到的命令 V2.4 499

Page 503

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 索引会放在RESP2同时自动向主机应答R1类型的应答应答参数为CMDARG的值。 从模式下的数据收发参考主模式但从机可以使用SLV_FORCE_ERR位强制数据块CRC错从而表 示不期望的数据读写。 注1从机只支持R1类型的应答主从通信所用的命令索引和参数含义均由软件定义 2从机模式仅适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、CH32V31x_D8C 批号倒数第六位不为0的产品。 28.4 应用 28.4.1 设备初始化和设备寄存器 28.4.1.1 OCR 寄存器 操作条件寄存器Operation Conditions Register存储了SD卡的一些其接收的供电电压的信 息和相关的状态位。相关的位定义如下表。 表28-14 OCR寄存器位定义 位次 位定义 描述 0-3 保留。 4 保留。 5 保留。 6 保留。 7 为低电压范围保留 8 保留 9 保留 10 保留 11 保留 12 保留 13 保留 支持的V 电压范围,单位为伏特。 DD 14 保留 15 2.7-2.8 16 2.8-2.9 17 2.9-3.0 18 3.0-3.1 19 3.1-3.2 20 3.2-3.3 21 3.3-3.4 22 3.4-3.5 23 3.5-3.6 24 接受切换到1.8V 25-26 保留 27 超过2TB支持状态位 28 保留 29 UHS-II卡状态位 此位被置位表示此卡支持UHS-II接口。 30 卡容量状态CCS 此位被置位表示卡容量大于2GB。 31 卡上电状态位busy 此位在卡上电完成后被置位。上电完成后,其他位才有意义。 28.4.1.2 CID 寄存器 V2.4 500

Page 504

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn CID存储了一些身份识别信息。 表28-15 CID寄存器各位各域的定义 位/域名称 简写 宽度 位次 厂商ID MID 8 [127:120] 应用ID OID 16 [119:104] 产品名称 PNM 40 [103:64] 产品版本 PRV 8 [63:56] 产品序列号 PSN 32 [55:24] 保留 无 4 [23:20] 生产日期 MDT 12 [19:8] CRC7 CRC 7 [7:1] 固定位固定为1 无 1 [0] 28.4.1.3 CSD 寄存器 CSD 寄存器存储了 SD 卡的特征数据。以目前最常用的 SDHC 和 SDXC 卡最常用的第二版的 CSD 为 例,各位域的定义如下表。 表28-16 CSD寄存器各位域的含义 名称 简写 宽度 值 读写 位次 CSD版本 CSD_STRUCTURE 2 01b RO [127:126] 保留 无 6 00_0000b RO [125120 读数访问时 TAAC 8 0Eh RO [119:112] 间 用时钟周期 表示的读数 NSAC 8 00h RO [111:104] 访问时间 最大数据发 TRAN_SPEED 8 32h5Ah0Bh2Bh RO [103:96] 送速度 卡命令类 CCC 12 X1X1101101X1b RO [95:84] 读数据块最 READ_BL_LEN 4 9 RO [83:80] 大长度 允许块部分 READ_BL_PARTIAL 1 0 RO [79] 读 块写不对齐 WRITE_BLK_MISALIGN 1 0 RO [78] 块读不对齐 READ_BLK_MISALIGN 1 0 RO [77] 执行的DSR DSR_IMP 1 X RO [76] 保留 无 6 00_0000b RO [75:70] 设备大小 C_SIZE 22 XXXXXXh RO [69:48] 保留 无 1 0 RO [47] 单块擦使能 ERASE_BLK_EN 1 1 RO [46] 擦扇区尺寸 SECTOR_SIZE 7 7Fh RO [45:39] 写保护组大 WP_GRP_SIZE 7 0000000b RO [38:32] 小 写保护组使 WP_GRP_ENABLE 1 0 RO [31] 能 保留 无 2 00b RO [30:29] V2.4 501

Page 505

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 写速度因素 R2W_FACTOR 3 010b RO [28:26] 最大写数据 WRITE_BL_LEN 4 9 RO [25:22] 块长度 允许块部分 WRITE_BL_PARTIAL 1 0 RO [21] 写 保留 无 5 00000b RO [20:16] 文件格式组 FILE_FORMAT_GRP 1 0 RO [15] 复制标志 TMP_WRITE_PROTECT 1 X RW OTP [14] 永久写保护 PERM_WRITE_PROTECT 1 X RW OTP [13] 临时写保护 TMP_WRITE_PROTECT 1 X RW [12] 文件格式 FILE_FOMAT 2 00b RO [11:10] 保留 无 2 00b RO [9:8] CRC CRC 7 0000000b RW [7:1] 未使用,必 无 1 1b RO [0] 须使用1 28.4.1.4 RCA 寄存器 相对卡地址寄存器存储了卡的地址为16位默认值为0. 28.4.2 电压切换 在 SD 卡初始化后期,需要进行接口电平切换,将 SD卡的时钟线数据线和命令线的 IO 电平切换 到1.8V水平。对于压摆率不是足够优秀的器件使用更低的电平标准有助于提升频率。但是SD的供 电电压并不一定变化只在较新版本的协议才出现了低电压供电的SD卡。 切换电压的步骤如下图。 图28-13 电压切换序列 CMD55 R1 CMD41 R3 CMD55 R1 CMD41 R3 CMD11 R1 电压切换 CMD2 R2 28.4.3 时钟切换 初始化时 SD 卡的时钟只有 400kHz在电压完成切换之后可以将时钟提升至较高的水平例如 SDHC 卡 UHS-I 模式第一档速度,总线时钟可以达到 80MHz鉴于微控制器的 IO 输出能力,应将时钟 限制在50MHz之内。 28.5 中断 28.5.1 SDIO 中断 SDIO支持多种中断源如中断使能寄存器R32_SDIO_IER所示的有24种情况都可以触发中断 用户可酌情自行开启。 28.5.2 SDIO 设备中断 需要注意的是不光SDIO外设可以向CPU报中断外接SDIO卡和MMC卡也能向SDIO外设报中断。 在 4 位总线模式下,中断线是 D1在 8 位总线模式下,中断线是 D7低电平有效。如果在空闲状态 下 SDIO检测到 D1或 D7为低电平应读取 SDIO设备的状态寄存器或中断标志寄存器及时响应中断。 CPU通过R32_SDIO_STA寄存器的SDIOIT 位可以得到SDIO主机是否收到中断。 V2.4 502

Page 506

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 28.6 寄存器描述 表28-17 SDIO相关寄存器列表 名称 访问地址 描述 复位值 R32_SDIO_POWER 0x40018000 电源寄存器 0x00000000 R32_SDIO_CLKCR 0x40018004 时钟寄存器 0x00000000 R32_SDIO_ARG 0x40018008 命令参数寄存器 0x00000000 R32_SDIO_CMD 0x4001800C 命令寄存器 0x00000000 R32_SDIO_RESPCMD 0x40018010 响应寄存器 0x00000000 R128_SDIO_RESPX 0x40018014 响应参数寄存器 0x00000000 R32_SDIO_DTIMER 0x40018024 数据定时寄存器 0x00000000 R32_SDIO_DLEN 0x40018028 传输长度寄存器 0x00000000 R32_SDIO_DCTLR 0x4001802C 数据控制寄存器 0x00000000 R32_SDIO_DCOUNT 0x40018030 传输计数寄存器 0x00000000 R32_SDIO_STA 0x40018034 状态寄存器 0x00000000 R32_SDIO_ICR 0x40018038 中断清除寄存器 0x00000000 R32_SDIO_MASK 0x4001803C 中断使能寄存器 0x00000000 R32_SDIO_FIFOCNT 0x40018048 FIFO计数器 0x00000000 R32_SDIO_DCTRL2 0x40018060 数据控制寄存器2 0x00000000 R32_SDIO_FIFO 0x40018080 FIFO寄存器 0x00000000 28.6.1 电源寄存器R32_SDIO_POWER 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PWRCTRL Reserved [1:0] 位 名称 访问 描述 复位值 [31:2] Reserved RO 保留。 0 电源检测位: 00电源关闭时钟停止 [1:0] PWRCTRL[1:0] RW 01保留 0 10保留的上电状态 11上电状态卡时钟开启。 28.6.2 时钟寄存器R32_SDIO_CLKCR 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 V2.4 503

Page 507

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn Rese HWFC_ NEGE BYPAS PWRSA WIDBUS[1:0] CLKEN CLKDIV[7:0] rved EN DGE S V 位 名称 访问 描述 复位值 [31:15] Reserved RO 保留。 0 硬件流控使能位此位置位后TXFIFOE 和 RXFIFOF信号才起作用。 14 HWFC_EN RW 0 0关闭硬件流控 1开启硬件流控。 SDIO_CK相位选择位。 13 NEGEDGE RW 0在HCLK的上升沿产生SDIO_CK 0 1在HLCK的下降沿生产SDIO_CK。 总线宽度配置域: 001位总线模式使用SDIO_D0 [12:11] WIDBUS[1:0] RW 014位总线模式使用SDIO_D[3:0] 0 108位总线模式使用SDIO_D[7:0] 11未使用。 时钟旁路使能位: 0SDIO_CK通过分频器分频得出 10 BYPASS RW 0 1SDIO_CK直接接到HCLK上。 注使用该位时需使能HWFC_EN位。 空闲时时钟状态配置位。此位置位后,总线空 闲时关闭SDIO_CK输出以节省电能。 9 PWRSAV RW 0 0SDIO_CK始终输出 1SDIO_CK只在需要时输出。 时钟使能位: 8 CLKEN RW 0SDIO_CK被禁止输出 0 1SDIO_CK被允许输出。 时钟分频系数域此域表示SDIO_CK与HCLK的 关系。SDIO_CK=HCLK/CLKDIV+2。 [7:0] CLKDIV[7:0] RW 0 注意在初始化阶段SDIO_CK应低于400kHz。 注CLKDIV[7:0]的设置值最小为1。 注1时钟配置寄存器用来控制SDIO_CK相关的参数需要注意的是本寄存器在读写数据期间到 7个HCLK周期内不能更改 2从机时无需配置时钟寄存器。 28.6.3 命令参数寄存器R32_SDIO_ARG 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CMDARG[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CMDARG[15:0] 位 名称 访问 描述 复位值 V2.4 504

Page 508

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 主机模式:命令的参数域。此域存放的是命令 中的参数,会作为命令的一部分一起发生到 [31:0] CMDARG RW CMD线上。 0 从机模式:从机回复应答的 32 位响应参数寄 存器。 28.6.4 命令寄存器R32_SDIO_CMD 偏移地址0x0C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SDIOS ATACM ENCMD CPSME WAITP WAITI WAITRESP Res NIEN uspen CMDINDEX[5:0] D Compl N END NT [1:0] d 位 名称 访问 描述 复位值 [31:15] Reserved RO 保留。 0 进行 CE-ATA 命令。如果置此位CPSM 将转到 14 ATACMD RW 0 CMD61。 不使能CE-ATA中断设置位。如果置此位CE- 13 NIEN RW 0 ATA将不产生中断。 使能CMD完成信号使能位。如果置此位命令 12 ENCMDCompl RW 0 完成将产生信号。 暂停命令发生位。如果置此位,将发送一个暂 11 SDIOSuspend RW 0 停信号。仅适用于SDIO卡。 CPSM命令通道状态机使能位。如果置此位 10 CPSMEN RW 0 将使能CPSM。 命令等待控制位。如果设置此位,发送命令前, 9 WAITPEND RW 0 CPSM会等待数据传输完成。 命令等待中断控制位。如果置此位CPSM会关 8 WAITINT RW 0 闭超时控制并等待中断产生。 响应类型等位域。此域指示 CPSM 期望收到的 响应类型。 00无响应等待CMDSENT标志 [7:6] WAITRESP[1:0] RW 0 01短响应等待CMDREND或CCRCFAIL标志 10无响应等待CMDSENT标志 11长响应等待CMDREND或CCRCFAIL标志 [5:0] CMDINDEX[5:0] RW 命令索引域。此域表明具体的命令值。 0 28.6.5 响应寄存器R32_SDIO_RESPCMD 偏移地址0x10 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved V2.4 505

Page 509

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved RESPCMD[5:0] 位 名称 访问 描述 复位值 [31:6] Reserved RO 保留。 0 [5:0] RESPCMD[5:0] RO 这个域记录了收到的响应的索引值。 0 28.6.6 响应参数寄存器R128_SDIO_RESPX 位 名称 访问 描述 复位值 主机模式当响应为长响应时整128位均表 示卡状态当响应为短响应时低32位表示卡 [127:0] CARDSTATUSx RO 0 状态。SDIO外设先收到卡状态的最高位并从 R128_SDIO_RESX最低位开始存储。 28.6.6.1 响应参数寄存器高 32 位R128_SDIO_RESP1[127:96] 偏移地址0x14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CARDSTATUS1[127:112] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CARDSTATUS1[111:96] 位 名称 访问 描述 复位值 主机模式:卡状态[127:96] 从机模式:接收命令收到的命令参数。 注:从机模式仅适用于 CH32F20x_D8、 [31:0] CARDSTATUS1 RO 0 CH32F20x_D8C 、 CH32V30x_D8 、 CH32V30x_D8C、CH32V31x_D8C批号倒数 第六位不为0的产品。 28.6.6.2 响应参数寄存器次高 32 位R128_SDIO_RESP2[95:64] 偏移地址0x18 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CARDSTATUS2[95:80] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CARDSTATUS2[79:64] 位 名称 访问 描述 复位值 主机模式:卡状态[95:64] 从机模式:接收命令收到的命令索引。 [31:0] CARDSTATUS2 RO 注:从机模式仅适用于 CH32F20x_D8、 0 CH32F20x_D8C 、 CH32V30x_D8 、 CH32V30x_D8C、CH32V31x_D8C批号倒数 V2.4 506

Page 510

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第六位不为0的产品。 28.6.6.3 响应参数寄存器次低 32 位R128_SDIO_RESP3[63:32] 偏移地址0x1C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CARDSTATUS3[63:48] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CARDSTATUS3[47:32] 位 名称 访问 描述 复位值 [31:0] CARDSTATUS3 RO 主机模式:卡状态[63:32]。 0 28.6.6.4 响应参数寄存器低 32 位R128_SDIO_RESP4[31:0] 偏移地址0x20 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CARDSTATUS4[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CARDSTATUS4[15:0] 位 名称 访问 描述 复位值 [31:0] CARDSTATUS4 RO 主机模式:卡状态[31:0]。 0 28.6.7 数据定时寄存器R32_SDIO_DTIMER 偏移地址0x24 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 DATATIME[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATATIME[15:0] 位 名称 访问 描述 复位值 [31:0] DATATIME RW 数据超时时长。以SDIO_CK的周期数为单位。 0 28.6.8 传输长度寄存器R32_SDIO_DLEN 偏移地址0x28 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved DATALENGTH[24:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATALENGTH[15:0] 位 名称 访问 描述 复位值 V2.4 507

Page 511

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [31:25] Reserved RO 保留。 0 传输数据长度域。此域的值在开启传输时会被 加载到传输计数器。对于块传输,此域的值必 [24:0] DATALENGTH[24:0] RW 须是块大小的整数倍,块大小由 SDIO 设备定 0 义,存储在 R32_SDIO_DCTLR[7:4]中,常见值 为512B等。 28.6.9 数据控制寄存器R32_SDIO_DCTRL 偏移地址0x2C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SDIO RWSTO RWSTA DTMOD Reserved RWMOD DBLOCKSIZE[3:0] DMAEN DTDIR DTEN EN P RT E 位 名称 访问 描述 复位值 [31:12] Reserved RO 保留。 0 SDIO 使能位此位被置位后DPSM 可以执行 11 SDIOEN RW 0 SDIO卡特定的一些操作。 读等待模式: 10 RWMOD RW 0停止SDIO_CK控制读等待 0 1使用SDIO_D2控制读等待。 读等待停止位如果RWSTART位被置位那么 9 RWSTOP RW 0 读等待将被停止。 8 RWSTART RW 读等待开始位,置此位将执行读等待操作。 0 数据块长度域。此域存储了数据块的长度,采 用块传输前必须定义块传输长度。此域可以写 [7:4] DBLOCKSIZE[3:0] RW 0 入的值为0到1110b之间表示的块传输长度 为2BLKLEN即0到16384字节之间。 DMA使能位 3 DMAEN RW 0关闭DMA 0 1使能DMA。 传输模式设置位,置此位设置传输模式。 0块传输 1流传输。 2 DTMODE RW 注:流传输的 4 位、8 位总线模式仅支持 0 CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C批号倒数第六位 不为0的产品。 传输方向设置位。置此位设置传输方向。 1 DTDIR RW 0控制器到卡 0 1卡到控制器 传输使能位。置此位开始数据传输。 0 DTEN RW 0 具体流程为置此位后DPSM 进入 Wait_S 或 V2.4 508

Page 512

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn Wait_R的流程取决于传输方向 28.6.10 传输计数寄存器R32_SDIO_DCOUNT 偏移地址0x30 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved DATACOUNT[24:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATACOUNT[15:0] 位 名称 访问 描述 复位值 [31:25] Reserved RO 保留。 0 传输数据计数器域。在启动传输时,发送长度 [24:0] DATACOUNT[24:0] RO 寄存器的值将会被加载到此计数器中,并随着 0 传输过程递减。 28.6.11 状态寄存器R32_SDIO_STA 偏移地址0x34 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CEAT SDIOI RXDAV TXDAV RXFI TXFIF RXFIF TXFI Reserved AEND T L L FOE OE OF FOF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RXFI TXFI DBCK STBI DATA CMDS CMDRE RXOV TXUND DTIME CTIM DCRCF CCRCF RXACT TXACT CMDACT FOHF FOHE END TERR END ENT ND ERR ERR OUT EOUT AIL AIL 位 名称 访问 描述 复位值 [31:24] Reserved RO 保留。 0 此位被置位时CMD61 接收到 CE-ATA 完成信 23 CEATAEND RO 0 号。 22 SDIOIT RO 此位被置位时SDIO收到设备中断。 0 21 RXDAVL RO 此位被置位时接收FIFO数据可用。 0 20 TXDAVL RO 此位被置位时发送FIFO中的数据可用。 0 19 RXFIFOE RO 此位被置位时接收FIFO空。 0 18 TXFIFOE RO 此位被置位时发送FIFO空。 0 17 RXFIFOF RO 此位被置位时接收FIFO满。 0 16 TXFIFOF RO 此位被置位时发送FIFO满。 0 15 RXFIFOHF RO 此位被置位时接收FIFO半满。 0 14 TXFIFOHE RO 此位被置位时发送FIFO半空。 0 13 RXACT RO 此位被置位时,正在接收数据。 0 12 TXACT RO 此位被置位时,正在发送数据。 0 11 CMDACT RO 此位被置位时,正在传输命令。 0 此位被置位时,已经发送或者接受了数据块且 10 DBCKEND RO 0 CRC校验通过。 V2.4 509

Page 513

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 此位被置位时,在宽总线模式下,所有数据线 9 STBITERR RO 0 都没有检测到起始信号。 此位被置位时,数据传输结束(传输计数器为 8 DATAEND RO 0 零)。 7 CMDSENT RO 此位被置位时,命令已经发送出去。 0 6 CMDREND RO 此位被置位时已经收到响应CRC检验成功。 0 5 RXOVERR RO 此位被置位时接收FIFO上溢。 0 4 TXUNDERR RO 此位被置位时发送FIFO下溢。 0 3 DTIMEOUT RO 此位被置位时,数据超时。 0 此位被置位时命令超时超过了64个SDIO_CK 2 CTIMEOUT RO 0 周期。 此位被置位时,已经发送或者接受了数据块但 1 DCRCFAIL RO 0 CRC校验失败。 此位被置位时已经收到响应但CRC检验失 0 CCRCFAIL RO 0 败。 28.6.12 中断清除寄存器R32_SDIO_ICR 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 CEATA SDIOI Reserved Reserved ENDC TC 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CTIM DBCKE STBIT DATA CMDSEN CMDR RXOV TXUND DTIME DCRCF CCRCF Reserved EOUT NDC ERRC ENDC TC ENDC ERRC ERRC OUTC AILC AILC C 位 名称 访问 描述 复位值 [31:24] Reserved RO 保留。 0 23 CEATAENDC RW 置此位清除状态寄存器中的CEATAEND位。 0 22 SDIOITC RW 置此位清除状态寄存器中的SDIOIT位。 0 [21:11] Reserved RW 保留。 0 10 DBCKENDC RW 置此位清除状态寄存器中的DBCKEND位。 0 9 STBITERRC RW 置此位清除状态寄存器中的STBITERR位。 0 8 DATAENDC RW 置此位清除状态寄存器中的DATAEND位。 0 7 CMDSENTC RW 置此位清除状态寄存器中的CMDSENT位。 0 6 CMDRENDC RW 置此位清除状态寄存器中的CMDREND位。 0 5 RXOVERRC RW 置此位清除状态寄存器中的RXOVERR位。 0 4 TXUNDERRC RW 置此位清除状态寄存器中的TXUNDERR位。 0 3 DTIMEOUTC RW 置此位清除状态寄存器中的DTIMEOUT位。 0 2 CTIMEOUTC RW 置此位清除状态寄存器中的CTIMEOUT位。 0 1 DCRCFAILC RW 置此位清除状态寄存器中的DCRCFAIL位。 0 0 CCRCFAILC RW 置此位清除状态寄存器中的CCRCFAIL位。 0 28.6.13 中断使能寄存器R32_SDIO_MASK V2.4 510

Page 514

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 偏移地址0x3C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 RXFI TXFI CEATAE SDIOI RXDAV TXDAV TXFIF RXFIF Reserved FOEI FOFI NDIE TIE LIE LIE OEIE OFIE E E 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RXFI TXFI DBCK STBI DATA CMDS RXOV CTIM RXACT TXACT CMDACT CMDRE TXUND DTIME DCRCF CCRCF FOHF FOHE ENDI TERR ENDI ENTI ERRI EOUT IE IE IE NDIE ERRIE OUTIE AILIE AILIE IE IE E IE E E E IE 位 名称 访问 描述 复位值 [31:24] Reserved RO 保留。 0 置此位后状态寄存器在置CEATAEND位时将产生中 23 CEATAENDIE RW 0 断。 置此位后,状态寄存器在置 SDIOIT 位时将产生中 22 SDIOITIE RW 0 断。 置此位后,状态寄存器在置 RXDAVL 位时将产生中 21 RXDAVLIE RW 0 断。 置此位后,状态寄存器在置 TXDAVL 位时将产生中 20 TXDAVLIE RW 0 断。 置此位后状态寄存器在置RXFIFOE位时将产生中 19 RXFIFOEIE RW 0 断。 置此位后状态寄存器在置TXFIFOE位时将产生中 18 TXFIFOEIE RW 0 断。 置此位后状态寄存器在置RXFIFOF位时将产生中 17 RXFIFOFIE RW 0 断。 置此位后状态寄存器在置TXFIFOF位时将产生中 16 TXFIFOFIE RW 0 断。 置此位后状态寄存器在置RXFIFOHF位时将产生中 15 RXFIFOHFIE RW 0 断。 置此位后状态寄存器在置TXFIFOHE位时将产生中 14 TXFIFOHEIE RW 0 断。 13 RXACTIE RW 置此位后状态寄存器在置RXACT位时将产生中断。 0 12 TXACTIE RW 置此位后状态寄存器在置TXACT位时将产生中断。 0 11 CMDACTIE RW 置此位后状态寄存器在置CMDACT位时将产生中断。 0 置此位后状态寄存器在置DBCKEND位时将产生中 10 DBCKENDIE RW 0 断。 置此位后状态寄存器在置STBITERR位时将产生中 9 STBITERRIE RW 0 断。 置此位后状态寄存器在置DATAEND位时将产生中 8 DATAENDIE RW 0 断。 置此位后状态寄存器在置CMDSENT位时将产生中 7 CMDSENTIE RW 0 断。 6 CMDRENDIE RW 置此位后状态寄存器在置CMDREND位时将产生中 0 V2.4 511

Page 515

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 断。 置此位后状态寄存器在置RXOVERR位时将产生中 5 RXOVERRIE RW 0 断。 置此位后状态寄存器在置TXUNDERR位时将产生中 4 TXUNDERRIE RW 0 断。 置此位后状态寄存器在置DTIMEOUT位时将产生中 3 DTIMEOUTIE RW 0 断。 置此位后状态寄存器在置CTIMEOUT位时将产生中 2 CTIMEOUTIE RW 0 断。 置此位后状态寄存器在置DCRCFAIL位时将产生中 1 DCRCFAILIE RW 0 断。 置此位后状态寄存器在置CCRCFAIL位时将产生中 0 CCRCFAILIE RW 0 断。 28.6.14 FIFO 计数寄存器R32_SDIO_FIFOCNT 偏移地址0x48 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 FIFOCOUNT[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 FIFOCOUNT[15:0] 位 名称 访问 描述 复位值 FIFO包含还未写入FIFO或者还未从FIFO读出 的字32bit数。在设置 R32_SDIO_DCTLR R32_SDIO_DCTLR时如果DPSM空闲FIFO计 [31:0] FIFOCOUNT[31:0] RO 0 数器将从R32_SDIO_TLEN中加载传输长度值 如果此值不能被4整除则最后的1至3个字 节会被当做一个字处理。 28.6.15 数据控制寄存器 2R32_SDIO_DCTRL2 偏移地址0x60 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 SLV_C SLV_F RANDO SLV_M Reserved K_PHA ORCE_ Reserved M_LEN ODE SE ERR _EN 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved DBLOCKSIZE2 位 名称 访问 描述 复位值 [31:27] Reserved R0 保留。 0 SLV_MODE 为 1 时,从模式输出 DATA 时的相位 [26] SLV_CK_PHASE RW 选择位: 0 0在内部SDCK上升沿输出DATA V2.4 512

Page 516

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1在内部SDCK下降沿输出DATA。 SLV_MODE为0时 0DTEN位写0清空FIFO 1DTEN位写0不清空FIFO。 从机模式下软件强制数据块CRC错误 [25] SLV_FORCE_ERR RW 0使用硬件正确的CRC值 0 1软件强制数据块CRC为错误值。 从模式使能位: [24] SLV_MODE RW 0控制器工作在主机模式下 0 1控制器CPSM和DPSM工作在从模式下。 [23:17] Reserved R0 保留。 0 数据块任意字节长度使能位: 0数据块只能是 2DBLOCKSIZE字节 [16] RANDOM_LEN_EN RW 0 1数据块可以是02048的任意长度长度为 DBLOCKSIZE2。 [15:12] Reserved R0 保留。 0 [11:0] DBLOCKSIZE2 RW 任意字节长度模式的数据块长度域。 0 注R32_SDIO_DCTRL2寄存器仅适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、 CH32V31x_D8C批号倒数第六位不为0的产品。 28.6.16 FIFOR32_SDIO_FIFO 偏移地址0x80 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 FIFODATA[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 FIFODATA[31:15] 位 名称 访问 描述 复位值 FIFO 数据域。此域即为 FIFO 的数据。读写此 [31:0] FIFODATA[31:0] RW 域将读出接收到的数据或者发送待发的数据。 0 SDIO的FIFO共32个字一个字为32位。 V2.4 513

Page 517

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 29 章 随机数发生器RNG 本章模块描述适用于CH32F20x、CH32V30x和CH32V31x微控制器系列部分产品。 随机数发生器RNG以连续模拟噪声为基础在主机读取数据时提供32bit的随机数。 29.1 主要特性  可产生32bit随机数  可实现错误管理  可被单独禁止,降低功耗 图29-1 RNG模块框图 32-bit HB bus Data register Control register RNG_DR RNG_CR RNG_CLK LFSR Status register Feeds linear feedback Clock checker shift register RNG_SR and Fault detector Simulated seeds 29.2 功能描述 随机发送器采用模拟电路实现该电路产生线性反馈移位寄存器RNG_LFSR的种子用于生成 32位随机数。RNG_LFSR由专用时钟PLL48CLK按照恒定频率提供时钟信息故随机数质量与HCLK 时钟有关。当有大量种子引入RNG_LFSR后RNG_LFSR的内容会传入数据寄存器RNG_DR。 29.2.1 RNG 操作 RNG具体操作步骤如下 1 若使能中断需通过将RNG_CR寄存器中的IE位置1当准备好随机数或出现错误时产生该中 断)。 2 通过配置RNG_CR寄存器的RNGEN位使能随机数产生同时激活模拟部分、RNG_LFSR和错误检 测器。 3 若使能中断每次产生中断时通过查询RNG_SR寄存器中的SEIS和CEIS位为0确定未出现错 误且DRDY为为1确定随机数已准备就绪。之后即可读取RNG_DR寄存器中的内容。 29.2.2 错误管理 RNG出错包括时钟错误和种子错误。当出现时钟错误时RNG无法再产生随机数此时需检查时 钟控制器是否正确配置是否可提供RNG时钟然后将CEIS位清零。当CECS位为0时RNG可正 常工作。当产生时钟错误时,对上一个随机数没有影响,可正常使用。当出现种子错误时,此时 V2.4 514

Page 518

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn RNG_DR寄存器中的值不可使用该随机数若用重新使用RNG需要先将SEIS位清零然后将RNGEN 位清零并置1重新初始化和重新启动RNG。 29.3 寄存器描述 表29-1 RNG相关寄存器列表 名称 访问地址 描述 复位值 R32_RNG_CR 0x40023C00 RNG控制寄存器 0x00000000 R32_RNG_SR 0x40023C04 RNG状态寄存器 0x00000000 R32_RNG_DR 0x40023C08 RNG数据寄存器 0x00000000 29.3.1 RNG 控制寄存器RNG_CR 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved IE RNGEN Reserved 位 名称 访问 描述 复位值 [31:4] Reserved RO 保留。 0 中断使能控制: 3 IE RW 0禁止RNG中断 0 1使能RNG中断。 随机数发生器使能: 2 RNGEN RW 0禁止随机数发生器 0 1使能随机数发生器。 [1:0] Reserved RW 保留。 0 29.3.2 RNG 状态寄存器RNG_SR 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved SEIS CEIS Reserved SECS CECS DRDY 位 名称 访问 描述 复位值 [31:7] Reserved RO 保留。 0 种子错误中断状态此位与SECS同时设置 0未检测倒错误序列 6 SEIS RW 1检测到以下错误序列之一 0 -超过64个相同连续位 -超过32个连续交替的0和1。 5 CEIS RW 时钟错误中断状态此位与CECS同时设置 0 V2.4 515

Page 519

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0正确检测到PLL48CLK时钟 1未正确检测到PLL48CLK时钟。 [4:3] Reserved RO 保留。 0 种子错误当前状态: 0未检测出错误序列 2 SECS RO 1检测到以下错误序列之一 0 -超过64个相同连续位 -超过32个连续交替的0和1。 时钟错误当前状态: 1 CECS RO 0正确检测到PLL48CLK时钟 0 1未正确检测到PLL48CLK时钟。 数据就绪读取RNG_DR寄存器后该位清0 0 DRDY RO 0RNG_DR寄存器无效此随机数不可用 0 1RNG_DR寄存器有效此随机数可用。 29.3.3 RNG 数据寄存器RNG_DR 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 RNDATA[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RNDATA[15:0] 位 名称 访问 描述 复位值 [31:0] RNDATA RO 32位随机数。 0 V2.4 516

Page 520

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 30 章 运算放大器OPA 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器系列部分产品。 运算放大器模块OPA包含4个可独立配置的运算放大器。每个运算放大器的输入和输出均 连接至I/O口且输入引脚可选择输出引脚可选择配置到通用I/O口或复用为ADC采样通道的 I/O。 30.1 主要特性  输入引脚可选择  输出引脚可选择通用I/O口或ADC采样通道 30.2 功能描述 置位OPAx_EN即可使能对应的OPAx配置OPAx_MODE可选择OPAx的输出通道为ADC采样通道 或者普通I/O口配置OPAx_PSEL可选择OPAx的正向输入引脚配置OPAx_NSEL可选择OPAx的 负向输入引脚。 图30-1 OPA结构框图 EN1 OPA1_CH0P 0 OPA1_CH1P 1 PSEL1 MODE1 0 OPA1_OUT0 + 1 OPA1_OUT1 OPA1_CH0N 0 OPA1_CH1N 1 NSEL1 - OPA1 EN2 OPA2_CH0P 0 OPA2_CH1P 1 PSEL2 MODE2 0 OPA2_OUT0 + 1 OPA2_OUT1 OPA2_CH0N 0 OPA2_CH1N 1 NSEL2 - OPA2 EN3 OPA3_CH0P 0 OPA3_CH1P 1 PSEL3 MODE3 0 OPA3_OUT0 + 1 OPA3_OUT1 OPA3_CH0N 0 OPA3_CH1N 1 NSEL3 - OPA3 EN4 OPA4_CH0P 0 OPA4_CH1P 1 PSEL4 MODE4 0 OPA4_OUT0 + 1 OPA4_OUT1 OPA4_CH0N 0 OPA4_CH1N 1 NSEL4 - OPA4 注各OPA详细说明请参考对应型号的数据手册。 V2.4 517

Page 521

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 30.3 寄存器描述 表30-1 OPA相关寄存器列表 名称 访问地址 描述 复位值 R32_OPA_CTLR 0x40023804 OPA配置寄存器 0x00000000 30.3.1 OPA 配置寄存器OPA_CTLR 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 PSEL4 NSEL4 MODE4 EN4 PSEL3 NSEL3 MODE3 EN3 PSEL2 NSEL2 MODE2 EN2 PSEL1 NSEL1 MODE1 EN1 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0 OPA4正向输入端选择 0CH0P 15 PSEL4 RW 1CH1P。 0 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C。 OPA4负向输入端选择 0CH0N 14 NSEL4 RW 1CH1N。 0 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C。 OPA4输出通道选择 0输出通道为OPA4_OUT0 13 MODE4 RW 1输出通道为OPA4_OUT1。 0 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C。 OPA4使能 0禁止OPA4 12 EN4 RW 1使能OPA4。 0 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C。 OPA3正向输入端选择 0CH0P 11 PSEL3 RW 1CH1P。 0 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C。 OPA3负向输入端选择 0CH0N 10 NSEL3 RW 0 1CH1N。 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 V2.4 518

Page 522

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn CH32V30x_D8C、CH32V31x_D8C。 OPA3输出通道选择 0输出通道为OPA3_OUT0 9 MODE3 RW 1输出通道为OPA3_OUT1。 0 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C。 OPA3使能 0禁止OPA3 8 EN3 RW 1使能OPA3。 0 注适用于CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、 CH32V30x_D8C、CH32V31x_D8C。 OPA2正向输入端选择 7 PSEL2 RW 0CH0P 0 1CH1P。 OPA2负向输入端选择 6 NSEL2 RW 0CH0N 0 1CH1N。 OPA2输出通道选择 5 MODE2 RW 0输出通道为OPA2_OUT0 0 1输出通道为OPA2_OUT1。 OPA2使能 4 EN2 RW 0禁止OPA2 0 1使能OPA2。 OPA1正向输入端选择 3 PSEL1 RW 0CH0P 0 1CH1P。 OPA1负向输入端选择 2 NSEL1 RW 0CH0N 0 1CH1N。 OPA1输出通道选择 1 MODE1 RW 0输出通道为OPA1_OUT0 0 1输出通道为OPA1_OUT1。 OPA1使能 0 EN1 RW 0禁止OPA1 0 1使能OPA1。 V2.4 519

Page 523

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 31 章 电子签名ESIG 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 电子签名包含了芯片识别信息:闪存区容量和唯一身份标识。它由厂家在出厂时烧录到存储器模 块的系统存储区域可以通过SWDSDI或者应用代码读取。 31.1 功能描述 闪存区容量:指示当前芯片用户应用程序可以使用大小。 唯一身份标识96位二进制码对任意一个微控制器都是唯一的用户只能读访问不能修改。此 唯一标识信息可以用作微控制器(产品)的安全密码、加解密钥、产品序列号等,用来提高系统安全 机制或表明身份信息。 以上内容用户都可以按8/16/32位进行读访问。 31.2 寄存器描述 表31-1 ESIG相关寄存器列表 名称 访问地址 描述 复位值 R16_ESIG_FLACAP 0x1FFFF7E0 闪存容量寄存器 0xXXXX R32_ESIG_UNIID1 0x1FFFF7E8 UID寄存器1 0xXXXXXXXX R32_ESIG_UNIID2 0x1FFFF7EC UID寄存器2 0xXXXXXXXX R32_ESIG_UNIID3 0x1FFFF7F0 UID寄存器3 0xXXXXXXXX 31.2.1 闪存容量寄存器ESIG_FLACAP 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 F_SIZE[15:0] 位 名称 访问 描述 复位值 以Kbyte为单位的闪存容量。 [15:0] F_SIZE RO x 例0x0080 = 128 K字节 31.2.2 UID 寄存器ESIG_UNIID1 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 U_ID[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 U_ID[15:0] 位 名称 访问 描述 复位值 [31:0] U_ID[31:0] RO UID的0-31位。 x 31.2.3 UID 寄存器ESIG_UNIID2 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 U_ID[63:48] V2.4 520

Page 524

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 U_ID[47:32] 位 名称 访问 描述 复位值 [31:0] U_ID[63:32] RO UID的32-63位。 x 31.2.4 UID 寄存器ESIG_UNIID3 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 U_ID[95:80] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 U_ID[79:64] 位 名称 访问 描述 复位值 [31:0] U_ID[95:64] RO UID的64-95位。 x V2.4 521

Page 525

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 32 章 闪存及用户选择字FLASH 本章模块描述适用于CH32F20x、CH32V20x、CH32V30x和CH32V31x微控制器全系列产品。 32.1 闪存组织 芯片内部闪存组织结构如下以xVCT6为例 表32-1 闪存组织结构 块 名称 地址范围 大小(字节) 页0 0x08000000 0x080000FF 256 页1 0x08000100 0x080001FF 256 页2 0x08000200 0x080002FF 256 页3 0x08000300 0x080003FF 256 页4 0x08000400 0x080004FF 256 主存储器 页5 0x08000500 0x080005FF 256 页6 0x08000600 0x080006FF 256 页7 0x08000700 0x080007FF 256 … … … 页1919 0x08077F00 0x08077FFF 256 系统引导代码存储 0x1FFF8000 0x1FFFEFFF 28K 信息块 用户选择字 0x1FFFF800 0x1FFFF87F 128 注: 1 上述主存储器区域用于用户的应用程序存储以4K字节16页单位进行写保护划分除 了“厂商配置字”区域出厂锁定,用户不可访问,其他区域在一定条件下用户可操作。 2 在进行FLASH相关操作时强烈建议系统主频不大于120M。 若实际应用一定要求使用系统主频大于120M需注意 在进行非零等待区域FLASH 和零等待区域FLASH、用户字读写以及厂商配置字和Boot区域 读时需做以下操作首先将HCLK进行2分频相关外设时钟也同时分频影响需评估FLASH 操作完成后再恢复,保证 FLASH 访问时钟频率不超过 60MhzFLASH_CTLR 寄存器的 bit[25]- SCKMOD可配置FLASH访问时钟频率为系统时钟或系统时钟的一半该bit默认配置为系统时钟 的一半)。 32.2 闪存编程及安全性 32.2.1 两种编程/擦除方式  标准编程:此方式是默认编程方式(兼容方式)。这种模式下 CPU 以单次 2 字节方式执行编程, 单次4K字节执行擦除及整片擦除操作。  快速编程此方式采用页操作方式推荐。经过特定序列解锁后执行单次256字节的编程及 256字节擦除、32K字节擦除、整片擦除。 注FLASH擦写相关函数仅可放在零等待区FLASH中。 32.2.2 安全性-防止非法访问(读、写、擦)  页写入保护  读保护 芯片处于读保护状态下时: 1 主存储器 0-15 页4K 字节)自动写保护状态,不受 FLASH_WPR 寄存器控制;解除读保护状态, V2.4 522

Page 526

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 所有主存储页都由FLASH_WPR寄存器控制。 2 系统引导代码区、SWD或SDI模式、RAM区域都不可对主存储器进行擦除或编程整片擦除除外。 可擦除或编程用户选择字区域。如果试图解除读保护(编程用户字),芯片将自动擦除整片用户 区。 32.3 FLASH 增强读模式 FLASH 增强读模式适用于用户程序运行在 FLASH 中(用户代码空间超过用户选择字 RAM_CODE_MOD[1:0]位配置的CODE大小空间开启该模式可提高FLASH访问效率。开启该模式需 将FLASH_CTLR寄存器的EHMOD位置1此时读EHMODS位EHMODS位置1即增强读模式已生效关闭 该模式需先将 EHMOD位清0再将 RSENACT置 1。同时可通过配置 FLASH_CTLR寄存器的 SCKMOD位选 择访问时钟频率。 注在使用FLASH增强读模式需注意以下几点 1 在对FLASH进行任何模式的擦除或编程包括解除读保护等用户字编程等操作之前须先退出 增强读模式,否者会导致擦除和编程操作失败; 2 在进入停止模式之前,须先退出增强读模式,否者可能导致停止模式异常; 3 在电源复位和系统复位结束后,芯片由硬件控制自动退出增强读模式。 32.4 寄存器描述 表32-2 FLASH相关寄存器列表 名称 访问地址 描述 复位值 R32_FLASH_KEYR 0x40022004 FPEC键寄存器 0xXXXXXXXX R32_FLASH_OBKEYR 0x40022008 OBKEY寄存器 0xXXXXXXXX R32_FLASH_STATR 0x4002200C 状态寄存器 0x00000000 R32_FLASH_CTLR 0x40022010 配置寄存器 0x00008080 R32_FLASH_ADDR 0x40022014 地址寄存器 0x00000000 R32_FLASH_OBR 0x4002201C 选择字寄存器 0xXXXXXXXX R32_FLASH_WPR 0x40022020 写保护寄存器 0xXXXXXXXX R32_FLASH_MODEKEYR 0x40022024 扩展键寄存器 0xXXXXXXXX 32.4.1 FPEC 键寄存器FLASH_KEYR 偏移地址0x04 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 KEYR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 KEYR[15:0] 位 名称 访问 描述 复位值 FPEC键用于输入FPEC的解锁键包括 RDPRT键 = 0x000000A5 [31:0] KEYR[31:0] WO x KEY1 = 0x45670123 KEY2 = 0xCDEF89AB。 V2.4 523

Page 527

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 32.4.2 OBKEY 寄存器FLASH_OBKEYR 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 OBKEYR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OBKEYR[15:0] 位 名称 访问 描述 复位值 [31:0] OBKEYR[31:0] WO 选择字键用于输入选择字键解除OBWRE。 x 32.4.3 状态寄存器FLASH_STATR 偏移地址0x0C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reser WRPRT Reserved EHMODS EOP Reserved WRBSY BSY ved ERR 位 名称 访问 描述 复位值 [31:8] Reserved RO 保留。 0 FLASH增强读模式启用状态位 7 EHMODS RO 0FLASH增强读模式未启用 0 1FLASH增强读模式已启用。 6 Reserved RO 保留。 0 指示操作结束写1清零。 5 EOP RW1 0 每次成功擦除或编程时,硬件会置位。 指示写保护错误写1清零。 4 WRPRTERR RW1 0 如果对写保护的地址编程时,硬件会置位。 [3:2] Reserved RO 保留。 0 该位在快速页编程时使用,指示编程数据正 在写入。在页编程时,当写入数据,该位被设 1 WRBSY RO 0 置1硬件自动清0如果该位为0 表示允许写入下个数据。 指示忙状态: 0 BSY RO 0操作结束 0 1表示闪存操作正在进行。 注进行编程操作时需要确定FLASH_CTLR寄存器的STRT位为0。 V2.4 524

Page 528

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 32.4.4 配置寄存器FLASH_CTLR 偏移地址0x10 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 SCKM EHMO Rese RSEN PGSTR Reserved Reserved BER32 FTER FTPG OD D rved ACT T 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reser Reser Rese FLOCK Reserved EOPIE ERRIE OBWRE LOCK STRT OBER OBPG MER PER PG ved ved rved 位 名称 访问 描述 复位值 [31:26] Reserved RO 保留。 0 FLASH访问时钟配置 0FLASH 访问时钟频率=系统时钟一半 SYSCLK/2 25 SCKMOD RW 0 1FLASH访问时钟频率=系统时钟SYSCLK。 注FLASH访问时钟频率不超过60MHZ。 此位为普通解锁+快速解锁。 FLASH增强读模式 该模式,在程序运行在 FLASH 时,可提高访 问效率。 0关闭FLASH增强读模式需配合RSENACT 24 EHMOD RW 0 位一起操作退出步骤先将EHMOD位清0再 将RSENACT置1。 1使能FLASH增强读模式。 此位为普通解锁+快速解锁。 23 Reserved RO 保留。 0 退出增强读模式,硬件自动清除,需配合 EHMOD 位一起操作,退出步骤先将 EHMOD 位 22 RSENACT WO 0 清0再将RSENACT置1。 此位为普通解锁。 开始。置1启动一次页编程硬件自动清除。 21 PGSTRT RW0 0 此位为普通解锁。 [20:19] Reserved RO 保留。 0 执行32KB擦除。 18 BER32 RW 0 此位为普通解锁+快速解锁。 执行快速页256Byte擦除操作。 17 FTER RW 0 此位为普通解锁+快速解锁。 执行快速页编程操作。 16 FTPG RW 0 此位为普通解锁+快速解锁。 快速编程锁。只能写1。当该位为1时 表示快速编程/擦除模式不可用。在检测到正 15 FLOCK RW1 确的解锁序列后硬件清除此位为0。 1 软件置1重新加锁。 此位为普通解锁。 V2.4 525

Page 529

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn [14:13] Reserved RO 保留。 0 操作完成中断控制FLASH_STATR 寄存器中 EOP置位 12 EOPIE RW 0禁止产生中断 0 1允许产生中断。 此位为普通解锁。 11 Reserved RO 保留。 0 错误状态中断控制FLASH_STATR 寄存器中 PGERR/WRPRTERR置位 10 ERRIE RW 0禁止产生中断 0 1允许产生中断。 此位为普通解锁。 用户选择字锁软件清0 0软件清零后重新加锁用户选择字 1表示可以对用户选择字进行编程操作。需 9 OBWRE RW0 0 要在 FLASH_OBKEYR 寄存器中写入正确序列 后由硬件置位。 此位为普通解锁。 8 Reserved RO 保留。 0 锁。只能写1。当该位为1时表示FPEC 和FLASH_CTLR被锁住不可写。在检测到正确 的解锁序列后硬件清除此位为0。 7 LOCK RW1 1 在一次不成功的解锁操作后,直到下次系统 复位前,该位不会再改变。 此位为普通解锁。 开始。置 1 启动一次擦除动作,硬件自动清 6 STRT RW1 0BSY变0。 0 此位为普通解锁。 执行用户选择字擦除 5 OBER RW 0 此位为普通解锁。 执行用户选择字编程 4 OBPG RW 0 此位为普通解锁。 3 Reserved RO 保留。 0 执行全擦除操作(擦除整个用户区)。 2 MER RW 0 此位为普通解锁。 执行标准页4KB擦除操作。 1 PER RW 0 此位为普通解锁。 执行标准编程操作。 0 PG RW 0 此位为普通解锁。 32.4.5 地址寄存器FLASH_ADDR 偏移地址0x14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 FAR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 V2.4 526

Page 530

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn FAR[15:0] 位 名称 访问 描述 复位值 闪存地址,进行编程时为编程的地址,进行 擦除时为擦除的起始地址。 [31:0] FAR[31:0] WO 0 当 FLASH_STATR 寄存器中的 BSY 位为1 时,不能写此寄存器。 32.4.6 选择字寄存器FLASH_OBR 偏移地址0x1C 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IWD RAM_CODE_M STANDY STOP Reserved Reserved G RDPRT OBERR OD[2:0] RST RST SW 位 名称 访问 描述 复位值 [31:10] Reserved RO 保留。 0 00xCODE-192KB + RAM-128KB 01xCODE-224KB + RAM-96KB 10xCODE-256KB + RAM-64KB 110CODE-128KB + RAM-192KB 111CODE-288KB + RAM-32KB 注1适用于CH32V303RC、CH32V303VC、 CH32V307RC、CH32V307WC、CH32V307VC、 CH32F203RC、CH32F203VC、CH32F207VC、 RAM_CODE_M [9:7] RO CH32V317VC、CH32V317WC、CH32V317SC x OD[2:0] 2110b仅适用于批号倒数第六位不为0的 USER 产品。 00xCODE-128KB + RAM-64KB 01xCODE-144KB + RAM-48KB 1xxCODE-160KB + RAM-32KB 注:适用于 CH32V20x_D8W、CH32V20x_D8、 CH32F20x_D8W。 [6:5] Reserved RO 保留。 x 4 STANDYRST RO 待机模式下系统复位控制。 x 3 STOPRST RO 停止模式下系统复位控制。 x 2 IWDGSW RO 独立看门狗IWDG硬件使能位。 1 读保护状态。 1 RDPRT RO 0表示闪存当前读保护失效 1 1表示闪存当前读保护有效。 V2.4 527

Page 531

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 选择字错误。 0 OBERR RO 0表示选择字和它的反码匹配 0 1表示选择字和它的反码不匹配。 注USER和RDPRT在系统复位后从用户选择字区域加载。 32.4.7 写保护寄存器FLASH_WPR 偏移地址0x20 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 WRP[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 WRP[15:0] 位 名称 访问 描述 复位值 闪存写保护状态。 0写保护有效 [31:0] WRP[31:0] RO 1写保护失效。 X 每个比特位代表4K字节16页存储写保护 状态。 注WPR在系统复位后从用户选择字区域加载。 32.4.8 扩展键寄存器FLASH_MODEKEYR 偏移地址0x24 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 MODEKEYR[31:16] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MODEKEYR[15:0] 位 名称 访问 描述 复位值 输入下面序列解锁快速编程/擦除模式: [31:0] MODEKEYR[31:0] WO KEY1 = 0x45670123 X KEY2 = 0xCDEF89AB。 32.5 闪存操作流程 32.5.1 读操作 在通用地址空间内进行直接寻址任何8/16/32位数据的读操作都能访问闪存模块的内容并得到 相应的数据。 32.5.2 解除闪存锁 系统复位后闪存控制器FPEC和 FLASH_CTLR 寄存器是被锁定的,不可访问。通过写入序列 到FLASH_KEYR寄存器可解锁闪存控制器模块。 解锁序列: 1 向FLASH_KEYR寄存器写入KEY1 = 0x45670123第1步必须是KEY1 V2.4 528

Page 532

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 2 向FLASH_KEYR寄存器写入KEY2 = 0xCDEF89AB第2步必须是KEY2。 上述操作必须按序并连续执行否则属于错误操作会锁死FPEC模块和FLASH_CTLR寄存器并产 生总线错误,直到下次系统复位。 闪存控制器FPEC和FLASH_CTLR寄存器可以通过将FLASH_CTLR寄存器的“LOCK”位置1来 再次锁定。 32.5.3 主存储器标准编程 标准编程每次可以写入 2字节。当 FLASH_CTLR 寄存器的 PG 位为1每次向闪存地址写入 半字2 字节将启动一次编程写入任何非半字数据FPEC 都会产生总线错误。编程过程中BSY 位为1编程结束BSY位为0EOP位为1。 注当BSY位为1将禁止对任何寄存器执行写操作。 图32-1 FLASH编程 读FLASH_CTRL的LOCK位 LOCK位=1? 是 执行“解除闪存锁”操作 否 置FLASH_CTLR的PG位=1 指定地址写入半字2字节 BSY位=1 是 否 读EOP/WRPRTERR判断编程结果 读编程地址检查写入数据 继续编程? 是 否 结束PG位=0 1检查FLASH_CTLR寄存器LOCK如果为1需要执行“解除闪存锁”操作。 2设置FLASH_CTLR寄存器的PG位为1开启标准编程模式。 3向指定闪存地址偶地址写入要编程的半字。 4等待BSY位变为0或FLASH_STATR寄存器的EOP位为1表示编程结束将EOP位清0。 5查询FLASH_STATR寄存器看是否有错误或者读编程地址数据校验。 6继续编程可以重复3-5步骤结束编程将PG位清0。 32.5.4 主存储器标准擦除 闪存可以按标准页4K字节擦除也可以整片擦除。 V2.4 529

Page 533

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 图32-2 FLASH页擦除 读FLASH_CTRL的LOCK位 LOCK位=1? 是 执行“解除闪存锁”操作 否 置FLASH_CTLR的PER位=1 在FLASH_ADDR寄存器写入擦除 的页首地址一次擦除16页 置FLASH_CTLR的STRT位=1 BSY位=1 是 否 读出擦除页数据验证 继续擦除? 是 否 结束PEG位=0 1检查FLASH_CTLR寄存器LOCK位如果为1需要执行“解除闪存锁”操作。 2设置FLASH_CTLR寄存器的PER位为1开启标准页擦除模式。 3向FLASH_ADDR寄存器写入选择擦除的页首地址。 4设置FLASH_CTLR寄存器的STRT位为1启动一次擦除动作。 5等待BSY位变为0或FLASH_STATR寄存器的EOP位为1表示擦除结束将EOP位清0。 6读擦除页的数据进行校验。 7继续标准页擦除可以重复3-5步骤结束擦除将PEG位清0。 注:擦除成功后,字读- 0xe339e339半字读- 0xe339偶地址字节读- 0x39奇地址读0xe3。 图32-3 FLASH整片擦除 读FLASH_CTRL的LOCK位 LOCK位=1? 是 执行“解除闪存锁”操作 否 置FLASH_CTLR的MER位=1 置FLASH_CTLR的STRT位=1 BSY位=1 是 否 读出所有页数据验证 结束MEG位=0 1检查FLASH_CTLR寄存器LOCK位如果为1需要执行“解除闪存锁”操作。 2设置FLASH_CTLR寄存器的MER位为1开启整片擦除模式。 3设置FLASH_CTLR寄存器的STRT位为1启动擦除动作。 4等待BSY位变为0或FLASH_STATR寄存器的EOP位为1表示擦除结束将EOP位清0。 5读擦除页的数据进行校验。 V2.4 530

Page 534

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 6将MER位清0。 32.5.5 快速编程模式解锁 通过写入序列到FLASH_MODEKEYR寄存器可解锁快速编程模式操作。解锁后FLASH_CTLR寄存器 的FLOCK位将清0表示可以进行快速擦除和编程操作。通过将FLASH_CTLR寄存器的“FLOCK”位软 件置1来再次锁定。 解锁序列: 1向FLASH_MODEKEYR寄存器写入KEY1 = 0x45670123 2向FLASH_MODEKEYR寄存器写入KEY2 = 0xCDEF89AB。 上述操作必须按序并连续执行,否则属于错误操作会锁定,直到下次系统复位才能重新解锁。 注快速编程操作需要解除“LOCK”和“FLOCK”两层锁定。 32.5.6 主存储器快速编程 快速编程按页256字节进行编程。 1检查FLASH_CTLR寄存器LOCK位如果为1需要执行“解除闪存锁”操作。 2检查FLASH_CTLR寄存器FLOCK位如果为1需要执行“快速编程模式解锁”操作。 3检查FLASH_STATR寄存器的BSY位以确认没有其他正在进行的编程操作。 4设置FLASH_CTLR寄存器的FTPG位为1使能快速页编程模式。 5使用32位方式向FLASH地址写入数据例如 uint32_t0x8000000 = 0x12345678 6等待FLASH_STATR寄存器的WR_BSY为0写入下个数据。 7重复步骤5-6共64次。 8设置FLASH_CTLR寄存器的PGSTRT位为1启动快速页编程。 9等待BSY位变为0或FLASH_STATR寄存器的EOP位为1表示一次快速页编程完成将EOP位 清0。 10查询FLASH_STATR寄存器看是否有错误或者读编程地址数据校验。 11继续快速页编程可以重复5-10步骤结束编程将FTPG位清0。 32.5.7 主存储器快速擦除 快速擦除按页256字节进行擦除。 1检查FLASH_CTLR寄存器LOCK位如果为1需要执行“解除闪存锁”操作。 2检查FLASH_CTLR寄存器FLOCK位如果为1需要执行“快速编程模式解锁”操作。 3检查FLASH_STATR寄存器的BSY位以确认没有其他正在进行的编程操作。 4设置FLASH_CTLR寄存器的FTER位为1开启快速页擦除256字节模式功能。 5向FLASH_ADDR寄存器写入快速擦除页的首地址。 6设置FLASH_CTLR寄存器的STRT位为1启动一次快速页擦除256字节动作。 7等待BSY位变为0或FLASH_STATR寄存器的EOP位为1表示擦除结束将EOP位清0。 8查询FLASH_STATR寄存器看是否有错误或者读擦除页地址数据校验。 9继续快速页擦除可以重复5-8步骤结束擦除将FTER位清0。 注:擦除成功后,字读- 0xe339e339半字读- 0xe339偶地址字节读- 0x39奇地址读0xe3。 快速擦除按块32K字节进行擦除。 1检查FLASH_CTLR寄存器LOCK位如果为1需要执行“解除闪存锁”操作。 2检查FLASH_CTLR寄存器FLOCK位如果为1需要执行“快速编程模式解锁”操作。 3检查FLASH_STATR寄存器的BSY位以确认没有其他正在进行的编程操作。 4设置FLASH_CTLR寄存器的BER32位为1开启快速块擦除32K字节模式功能。 V2.4 531

Page 535

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 5向FLASH_ADDR寄存器写入快速擦除块的首地址。 6设置FLASH_CTLR寄存器的STRT位为1启动一次快速块擦除32K字节动作。 7等待BSY位变为0或FLASH_STATR寄存器的EOP位为1表示擦除结束将EOP位清0。 8查询FLASH_STATR寄存器看是否有错误或者读擦除页地址数据校验。 9继续快速页擦除可以重复5-8步骤结束擦除将BER32位清0。 注:擦除成功后,字读- 0xe339e339半字读- 0xe339偶地址字节读- 0x39奇地址读0xe3。 32.6 用户选择字 用户选择字固化在FLASH中在系统复位后会被重新装载到相应寄存器用户可以任意的进行擦 除和编程。用户选择字信息块总共有8个字节4个字节为写保护1个字节为读保护1个字节为配 置选项2个字节存储用户数据每个位都有其反码位用于装载过程中的校验。下面描述了选择字 信息结构和意义。 表32-3 32位选择字格式划分 [31:24] [23:16] [15:8] [7:0] 选择字字节1反码 选择字字节1 选择字字节0反码 选择字字节0 表32-4 用户选择字信息结构 地址 [31:24] [23:16] [15:8] [7:0] 位 0x1FFFF800 nUSER USER nRDPR RDPR 0x1FFFF804 nData1 Data1 nData0 Data0 0x1FFFF808 nWRPR1 WRPR1 nWRPR0 WRPR0 0x1FFFF80C nWRPR3 WRPR3 nWRPR2 WRPR2 名称/字节 描述 复位值 读保护控制位,配置是否可以读出闪存中的代码。 0xA5若此字节为0xA5nRDP必须为0x5A表示 RDPR 当前代码处于非读保护状态,可以读出; 0xA5 其他值表示代码读保护状态不可读0-15页4K 将自动写保护不受WRPR0控制。 00xCODE-192KB + RAM-128KB 01xCODE-224KB + RAM-96KB 10xCODE-256KB + RAM-64KB 110CODE-128KB + RAM-192KB 111CODE-288KB + RAM-32KB 注1适用于 CH32V303RC、CH32V303VC、 RAM_CODE_M CH32V307RC、CH32V307WC、CH32V307VC、CH32F203RC、 USER [7:5] x OD CH32F203VC、CH32F207VC、CH32V317VC、CH32V317WC、 CH32V317SC系列芯片 2110b仅适用于批号倒数第六位不为0的产品。 00xCODE-128KB + RAM-64KB 01xCODE-144KB + RAM-48KB 1xxCODE-160KB + RAM-32KB V2.4 532

Page 536

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 注:适用于 CH32V20x_D8W、CH32V20x_D8、 CH32F20x_D8W系列芯片。 [4:3] Reserved 保留。 11b 待机模式下系统复位控制: 2 STANDYRST 0启用进入待机模式产生系统复位 1 1不启用进入待机模式系统不复位。 停止模式下系统复位控制: 1 STOPRST 0启用进入停止模式产生系统复位 1 1不启用进入停止模式不复位系统。 独立看门狗IWDG硬件使能位 0 IWDGSW 0IWDG功能由硬件开启随LSI时钟决定 1 1IWDG功能由软件开启禁止硬件开启。 Data0Data1 存储用户数据2字节。 0xFFFF 写保护控制位。每个比特位用于控制主存储器中1个 扇区4K字节/扇区)的写保护状态: 0启用写保护 1关闭写保护。 4个字节用于保护总共480K字节的主存储器。 WRPR0 - WRPR3 0xFFFFFFFF WRPRO第0-7扇区存储写保护控制 WRPR1第8-15扇区存储写保护控制 WRPR2第16-23扇区存储写保护控制 WRPR3位0-6提供第24-30扇区的写保护位7提 供第31-119扇区的写保护。 32.6.1 用户选择字解锁 通过写入序列到 FLASH_OBKEYR 寄存器可解锁用户选择字操作。解锁后FLASH_CTLR 寄存器的 OBWRE位将置1表示可以进行用户选择字的擦除和编程。通过将FLASH_CTLR寄存器的“OBWRE”位 软件清0来再次锁定。 解锁序列: 1向FLASH_OBKEYR寄存器写入KEY1 = 0x45670123 2向FLASH_OBKEYR寄存器写入KEY2 = 0xCDEF89AB。 注用户选择字操作需要解除“LOCK”和“OBWRE”两层锁定。 32.6.2 用户选择字编程 只支持标准编程方式一次写入半字2字节。实际过程中对用户选择字进行编程时FPEC 只使用半字中的低字节,并自动计算出高字节(高字节为低字节的反码),然后开始编程操作,这将 保证用户选择字中的字节和它的反码始终是正确的。 1检查FLASH_CTLR寄存器LOCK位如果为1需要执行“解除闪存锁”操作。 2检查FLASH_STATR寄存器的BSY位以确认没有其他正在进行的编程操作。 3检查FLASH_CTLR寄存器OBWRE位如果为0需要执行“用户选择字解锁”操作。 4设置FLASH_CTLR寄存器的OBPG位为1。 5写入要编程的半字2字节到指定地址。 6等待BSY位变为0或FLASH_STATR寄存器的EOP位为1表示编程结束将EOP位清0。 7读编程地址数据校验。 8继续编程可以重复5-7步骤结束编程将OBPG位清0。 V2.4 533

Page 537

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 注:当修改选择字中的“读保护”变成“非保护”状态时,会自动执行一次整片擦除主存储区操作。 如果修改“读保护”之外的选型,则不会出现整片擦除的操作。 32.6.3 用户选择字擦除 直接擦除整个128字节用户选择字区域。 1检查FLASH_CTLR寄存器LOCK位如果为1需要执行“解除闪存锁”操作。 2检查FLASH_STATR寄存器的BSY位以确认没有正在进行的编程操作。 3检查FLASH_CTLR寄存器OBWRE位如果为0需要执行“用户选择字解锁”操作。 4设置FLASH_CTLR 寄存器的 OBER位为1之后设置 FLASH_CTLR寄存器的 STRT位为1开 启用户选择字擦除。 5等待BSY位变为0或FLASH_STATR寄存器的EOP位为1表示擦除结束将EOP位清0 6读擦除地址数据校验。 7结束将OBER位清0。 注:擦除成功后,字读- 0xe339e339半字读- 0xe339字节读- 0x39。 32.6.4 解除读保护 闪存是否读保护,由用户选择字决定。读取 FLASH_OBR 寄存器,当 RDPRT 位为1表示当前闪 存处于读保护状态,闪存操作上受到读保护状态的一系列安全防护。解除读保护过程如下: 1擦除整个用户选择字区域此时读保护字段RDPR此时读保护仍然有效。 2用户选择字编程写入正确的 RDPR 代码 0xA5 以解除闪存的读保护。(此步骤首先将导致系统自 动对闪存执行整片擦除操作) 3进行上电复位以重新加载选择字节包括新的RDPR码此时读保护被解除。 32.6.5 解除写保护 闪存是否写保护,由用户选择字决定。读取 FLASH_WPR 寄存器,每个比特位代表 4K 字节闪存空 间当比特位为1表示非写保护状态0表示写保护。解除写保护过程如下 1擦除整个用户选择字区域。 2写入正确的RDPR码0xA5允许读访问 3进行系统复位重新加载选择字节包括新的WRPR[3:0]字节),写保护被解除。 V2.4 534

Page 538

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 33 章 扩展配置EXTEN 33.1 扩展配置 系统提供了EXTEN扩展配置单元EXTEN_CTR寄存器。该单元使用HB时钟只在系统复位执行 复位动作。主要包括以下几个扩展控制位功能:

  1. 调节内置电压LDOTRIM和ULLDOTRIM字段选择默认值在调节性能和功耗时可以修改其值。
  2. PLL时钟选择HSIPRE字段配合原有的时钟配置寄存器提供了HSI时钟进行分频或不分频作为 PLL的输入时钟的选择。
  3. Lock-up功能监控LKUPEN字段启用将打开系统的Lock-up情况监控一旦发生Lock-up情况 系统将进行软件复位并将LKUPRST字段置1读取后可以写1清除此标志。
  4. USBD 模块的内置电阻及传输速度控制USB 全速设备控制器USBD通过 USBDPU 字段选择是否 使用内置的上拉电阻1.5KΩ不启用时需要在USB的引脚接上拉电阻低速模式接UD-引脚, 全速模式接UD+引脚。USBDLS字段配置当前USB设备速度模式。
  5. ETH模块10M以太网和1000M以太网RGMII接口是否启用控制位通过ETH_10M启用10M以太网 功能通过ETH_RGMII启用1000M以太网RGMII接口。
  6. 低功耗模式下HSE振荡控制位通过该位可控制在低功耗模式下HSE是否振荡。 注不同型号扩展寄存器位定义不同具体细节参考配置扩展控制寄存器EXTEN_CTR。 33.2 寄存器描述 表33-1 EXTEN相关寄存器列表 名称 访问地址 描述 复位值 R32_EXTEN_CTR 0x40023800 配置扩展控制寄存器 0x00000A40 R32_EXTEN_CTR2 0x40023808 配置扩展控制寄存器2 0x00000000 R32_FEATURE_SIGN 0x1FFFF7D0 特征信息指示寄存器 0xE339XXXX 33.2.1 配置扩展控制寄存器EXTEN_CTR 偏移地址0x00 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 HSEK LDOTRIM ULLDOTRIM LKUP LKUP Reser HSI RGMII ETH10 USBD USBD Reserved PLP [1:0] [1:0] RST EN ved PRE ON M PU LS 位 名称 访问 描述 复位值 [31:13] Reserved RO 保留。 0 低功耗模式下HSE振荡控制位 0低功耗模式下HSE不振荡 12 HSEKPLP RW 1低功耗模式下HSE保持振荡。 0 注:适用于 CH32V20x_D8、CH32V20x_D8W、 CH32F20x_D8W。 调整数字内核电压值LDO电压值 [11:10] LDOTRIM[1:0] RW 10b 001.3V V2.4 535

Page 539

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 011.2V 101.1V 111.0V。 [9:8] ULLDOTRIM[1:0] RW 调整低功耗模式下ULLDO电压值 10b LOCKUP复位标志 7 LKUPRST RW1 0正常 0 1发生LOCKUP导致系统复位写1清除。 LOCKUP监测功能 0不启用 6 LKUPEN RW 1 1启用系统发生lock-up时执行复位并将 LOCKUP_RST置位。 5 Reserved RO 保留。 0 HSI 时钟是否分频:(只能在 PLL 关闭下写 入) 4 HSIPRE RW 0 0HSI时钟经2分频作为PLL输入时钟 1HSI时钟作为PLL输入时钟。 1000M 以太网 RGMII 接口是否启用和时钟使 能: 0不启用并关闭时钟 3 RGMIION RW 0 1启用 1000M 以太网 RGMII 接口并使能时 钟。 注适用于CH32F207、CH32V307。 10M以太网是否启用和时钟使能 0不启用并关闭时钟 2 ETH10M RW 1启用10M以太网功能并使能时钟。 0 注适用于CH32F207、CH32V307、CH32V203、 CH32V208、CH32F208产品。 USBD内部上拉电阻是否启用 1 USBDPU RW 0不启用外部要接上拉电阻 0 1启用外部不用接上拉电阻。 USBD工作模式选择 0 USBDLS RW 0全速模式 0 1低速模式。 33.2.2 配置扩展控制寄存器 2EXTEN_CTR2 偏移地址0x08 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OPA4_ OPA3_ OPA2_ OPA1_ Reserved HSMD HSMD HSMD HSMD 位 名称 访问 描述 复位值 [31:4] Reserved R0 保留。 0 V2.4 536

Page 540

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn OPA4高速模式使能 [3] OPA4_HSMD RW 0OPA4关闭高速模式 0 1OPA4开启高速模式。 OPA3高速模式使能 [2] OPA3_HSMD RW 0OPA3关闭高速模式 0 1OPA3开启高速模式。 OPA2高速模式使能 [1] OPA2_HSMD RW 0OPA2关闭高速模式 0 1OPA2开启高速模式。 OPA1高速模式使能 [0] OPA1_HSMD RW 0OPA1关闭高速模式 0 1OPA1开启高速模式。 注EXTEN_CTR2 寄存器仅适用于 CH32F20x_D8、CH32F20x_D8C、CH32V30x_D8、CH32V30x_D8C、 CH32V31x_D8C批号倒数第六位不为0的产品。 33.2.3 特征信息指示寄存器FEATURE_SIGN 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Reserved 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Reserved Reserved VLEVEL 位 名称 访问 描述 复位值 [31:16] Reserved RO 保留。 0xE339 [15:8] Reserved RO bit[15:8]复位值为bit[7:0]复位值取反。 X [7:1] Reserved RO 保留。 0x7F V 支持最低供电电压: DD 0 VLEVEL RO 01.8V x 12.4V。 注仅适用于bit[7:0]复位值与bit[15:8]复位值取反的产品。若非取反,则V 支持最低供电电压为 DD 2.4V。 V2.4 537

Page 541

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 第 34 章 调试支持DBG 34.1 主要特征 此寄存器允许在调试状态下配置MCU。包括  支持独立看门狗IWDG的计数器  支持窗口看门狗WWDG的计数器  支持定时器的计数器  支持I2CSMBus的超时控制  支持bxCAN通信 34.2 寄存器描述 34.2.1 RISC-V 调试 MCU 配置寄存器DBGMCU_CR 地址0x7C0CSR 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TIM10 TIM9_ CAN2_ CAN1_ TIM8_ TIM7_ TIM6_ TIM5_ Reserved STOP STOP STOP STOP STOP STOP STOP STOP 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 I2C2 I2C1_ TIM4_TIM3_TIM2_TIM1_ SMBUS SMBUS WWDG_IWDG_ STAND Reserved STOP SLEEP STOP STOP STOP STOP _TIME _TIME STOP STOP BY OUT OUT 位 名称 访问 描述 复位值 [31:24] Reserved RW 保留。 0 定时器 10 调试停止位。当内核进入调试状态时计 数器停止工作。 23 TIM10_STOP RW 0 0定时器10的计数器仍然正常工作 1定时器10的计数器停止工作。 定时器9调试停止位。当内核进入调试状态时计数 器停止工作。 22 TIM9_STOP RW 0 0定时器9的计数器仍然正常工作 1定时器9的计数器停止工作。 CAN2 调试停止位。当内核进入调试状态时 CAN2 停 止运行。 21 CAN2_STOP RW 0 0CAN2仍然正常运行 1CAN2的接收寄存器不继续接收数据 CAN1 调试停止位。当内核进入调试状态时 CAN1 停 止运行。 20 CAN1_STOP RW 0 0CAN1仍然正常运行 1CAN1的接收寄存器不继续接收数据。 定时器8调试停止位。当内核进入调试状态时计数 19 TIM8_STOP RW 器停止工作。 0 0定时器8的计数器仍然正常工作 V2.4 538

Page 542

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 1定时器8的计数器停止工作 定时器7调试停止位。当内核进入调试状态时计数 器停止工作。 18 TIM7_STOP RW 0 0定时器7的计数器仍然正常工作 1定时器7的计数器停止工作 定时器6调试停止位。当内核进入调试状态时计数 器停止工作。 17 TIM6_STOP RW 0 0定时器6的计数器仍然正常工作 1定时器6的计数器停止工作。 定时器5调试停止位。当内核进入调试状态时计数 器停止工作。 16 TIM5_STOP RW 0 0定时器5的计数器仍然正常工作 1定时器5的计数器停止工作。 定时器4调试停止位。当内核进入调试状态时计数 器停止工作。 15 TIM4_STOP RW 0 0定时器4的计数器仍然正常工作 1定时器4的计数器停止工作。 定时器3调试停止位。当内核进入调试状态时计数 器停止工作。 14 TIM3_STOP RW 0 0定时器3的计数器仍然正常工作 1定时器3的计数器停止工作。 定时器2调试停止位。当内核进入调试状态时计数 器停止工作。 13 TIM2_STOP RW 0 0定时器2的计数器仍然正常工作 1定时器2的计数器停止工作。 定时器1调试停止位。当内核进入调试状态时计数 器停止工作。 12 TIM1_STOP RW 0 0定时器1的计数器仍然正常工作 1定时器1的计数器停止工作。 SMBUS 超时模式调试停止位。当内核进入调试状态 I2C2_SMBUS_TIMEOU 时停止SMBUS超时模式。 11 RW 0 T 0与正常模式操作相同 1冻结SMBUS的超时控制。 SMBUS 超时模式调试停止位。当内核进入调试状态 I2C1_SMBUS_TIMEOU 时停止SMBUS超时模式。 10 RW 0 T 0与正常模式操作相同 1冻结SMBUS的超时控制。 窗口看门狗调试停止位。当内核进入调试状态时调 试窗口看门狗停止工作。 9 WWDG_STOP RW 0 0窗口看门狗计数器仍然正常工作 1窗口看门狗计数器停止工作。 独立看门狗调试停止位。当内核进入调试状态时看 门狗停止工作。 8 IWDG_STOP RW 0 0看门狗计数器仍然正常工作 1看门狗计数器停止工作。 [7:3] Reserved RW 保留。 0 V2.4 539

Page 543

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 调试待机模式位: 0FCLK关HCLK关整个数字电路部分都断电。 从软件的观点看退出STANDBY模式与复位是一样 的(除了一些状态位指示了微控制器刚从 STANDBY 2 STANDBY RW 状态退出); 0 1FCLK开HCLK开数字电路部分不下电FCLK 和HCLK时钟由内部RL振荡器提供时钟。另外微 控制器通过产生系统复位来退出STANDBY模式和复 位是一样的。 调试停止模式位: 0FCLK关HCLK关在停止模式时时钟控制 器禁止一切时钟包括HCLK和FCLK。当从STOP 模式退出时,时钟的配置和复位之后的配置一样(微 控制器由8MHz的内部RC振荡器HIS提供时钟。 1 STOP RW 因此,软件必需重新配置时钟控制系统启动 PLL 0 晶振等; 1FCLK开HCLK开在停止模式时FCLK和HCLK 时钟由内部RC振荡器提供。当退出停止模式时软 件必需重新配置时钟系统启动 PLL晶振等与配 置此比特位为0时的操作一样。 调试睡眠模式位: 0FCLK开HCLK关在睡眠模式时FCLK由原 先已配置好的系统时钟提供HCLK则关闭。由于睡 0 SLEEP RW 眠模式不会复位已配置好的时钟系统,因此从睡眠 0 模式退出时,软件不需要重新配置时钟系统; 1FCLK开HCLK开在睡眠模式时FCLK和HCLK 时钟都由原先配置好的系统时钟提供。 注适用于CH32V20x、CH32V30x和CH32V31x系列。当系统进入调试模式之后芯片具有某外设调 试模块则具有配置该外设的功能调试MCU配置寄存器则具有该外设所对应的配置位。 34.2.2 ARM 调试 MCU 配置寄存器DBGMCU_CR 地址0xE0042004 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 I2C2_ TIM10 TIM9_ CAN2_ TIM8_ TIM7_ TIM6_ TIM5_ SMBUS Reserved STOP STOP STOP STOP STOP STOP STOP TIME OUT 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 I2C1 SMBUSCAN1_TIM4_TIM3 TIM2_ TIM1_ WWDG_IWDG_ TRACE_MODE TRACE STAND Reserved STOP SLEEP _TIME STOP STOP STOP STOP STOP STOP STOP [1:0] _IOEN BY OUT 位 名称 访问 描述 复位值 [31:24] Reserved RW 保留。 0 V2.4 540

Page 544

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 定时器 10 调试停止位。当内核进入调试状态时计 数器停止工作。 23 TIM10_STOP RW 0 0定时器10的计数器仍然正常工作 1定时器10的计数器停止工作。 定时器9调试停止位。当内核进入调试状态时计数 器停止工作。 22 TIM9_STOP RW 0 0定时器9的计数器仍然正常工作 1定时器9的计数器停止工作。 CAN2 调试停止位。当内核进入调试状态时 CAN2 停 止运行。 21 CAN2_STOP RW 0 0CAN2仍然正常运行 1CAN2的接收寄存器不继续接收数据。 定时器8调试停止位。当内核进入调试状态时计数 器停止工作。 20 TIM8_STOP RW 0 0定时器8的计数器仍然正常工作 1定时器8的计数器停止工作。 定时器7调试停止位。当内核进入调试状态时计数 器停止工作。 19 TIM7_STOP RW 0 0定时器7的计数器仍然正常工作 1定时器7的计数器停止工作。 定时器6调试停止位。当内核进入调试状态时计数 器停止工作。 18 TIM6_STOP RW 0 0定时器6的计数器仍然正常工作 1定时器6的计数器停止工作。 定时器5调试停止位。当内核进入调试状态时计数 器停止工作。 17 TIM5_STOP RW 0 0定时器5的计数器仍然正常工作 1定时器5的计数器停止工作。 SMBUS 超时模式调试停止位。当内核进入调试状态 I2C2_SMBUS_TIMEOU 时停止SMBUS超时模式。 16 RW 0 T 0与正常模式操作相同 1冻结SMBUS的超时控制。 SMBUS 超时模式调试停止位。当内核进入调试状态 I2C1_SMBUS_TIMEOU 时停止SMBUS超时模式。 15 RW 0 T 0与正常模式操作相同 1冻结SMBUS的超时控制。 CAN1 调试停止位。当内核进入调试状态时 CAN1 停 止运行。 14 CAN1_STOP RW 0 0CAN1仍然正常运行 1CAN1的接收寄存器不继续接收数据。 定时器4调试停止位。当内核进入调试状态时计数 器停止工作。 13 TIM4_STOP RW 0 0定时器4的计数器仍然正常工作 1定时器4的计数器停止工作。 定时器3调试停止位。当内核进入调试状态时计数 12 TIM3_STOP RW 0 器停止工作。 V2.4 541

Page 545

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 0定时器3的计数器仍然正常工作 1定时器3的计数器停止工作。 定时器2调试停止位。当内核进入调试状态时计数 器停止工作。 11 TIM2_STOP RW 0 0定时器2的计数器仍然正常工作 1定时器2的计数器停止工作。 定时器1调试停止位。当内核进入调试状态时计数 器停止工作。 10 TIM1_STOP RW 0 0定时器1的计数器仍然正常工作 1定时器1的计数器停止工作。 窗口看门狗调试停止位。当内核进入调试状态时调 试窗口看门狗停止工作。 9 WWDG_STOP RW 0 0窗口看门狗计数器仍然正常工作 1窗口看门狗计数器停止工作。 独立看门狗调试停止位。当内核进入调试状态时看 门狗停止工作。 8 IWDG_STOP RW 0 0看门狗计数器仍然正常工作 1看门狗计数器停止工作。 跟踪引脚分配控制位,该位和 TRACE_IOEN 配合使 用。 当TRACE_IOEN0时 xx不分配跟踪引脚默认状态。 [7:6] TRACE_MODE[1:0] RW 当TRACE_IOEN=1时 xx 00跟踪引脚使用异步模式 01跟踪引脚使用同步模式并且数据长度为1 10跟踪引脚使用同步模式并且数据长度为2 11跟踪引脚使用同步模式并且数据长度为4。 跟踪引脚分配使能位,该位和 TRACE_MODE 配合使 用。 5 TRACE_IOEN RW 0 0不分配跟踪引脚默认状态 1分配跟踪引脚。 [4:3] Reserved RW 保留。 0 调试待机模式位: 0FCLK关HCLK关整个数字电路部分都断电。 从软件的观点看退出STANDBY模式与复位是一样 的(除了一些状态位指示了微控制器刚从 STANDBY 2 STANDBY RW 状态退出); 0 1FCLK开HCLK开数字电路部分不下电FCLK 和HCLK时钟由内部RL振荡器提供时钟。另外微 控制器通过产生系统复位来退出STANDBY模式和复 位是一样的。 调试停止模式位: 0FCLK关HCLK关在停止模式时时钟控制 1 STOP RW 器禁止一切时钟包括HCLK和FCLK。当从STOP 0 模式退出时,时钟的配置和复位之后的配置一样(微 控制器由8MHz的内部RC振荡器HIS提供时钟。 V2.4 542

Page 546

CH32F/V20x_V30x_V31x系列应用手册 https://wch.cn 因此,软件必需重新配置时钟控制系统启动 PLL 晶振等。 1FCLK开HCLK开在停止模式时FCLK和HCLK 时钟由内部RC振荡器提供。当退出停止模式时软 件必需重新配置时钟系统启动 PLL晶振等与配 置此比特位为0时的操作一样。 调试睡眠模式位: 0FCLK开HCLK关在睡眠模式时FCLK由原 先已配置好的系统时钟提供HCLK则关闭。由于睡 0 SLEEP RW 眠模式不会复位已配置好的时钟系统,因此从睡眠 0 模式退出时,软件不需要重新配置时钟系统; 1FCLK开HCLK开在睡眠模式时FCLK和HCLK 时钟都由原先配置好的系统时钟提供。 注适用于CH32F20x系列。当系统进入调试模式之后芯片具有某外设调试模块则具有配置该外 设的功能调试MCU配置寄存器则具有该外设所对应的配置位。 V2.4 543