在STM32中配置定时器的DMA功能时,需要将外设的地址作为源地址或者目的地址,本文举2例说明计算方法。
例一 、 使用PB1作为PWM输出,采用TIM3_CH4的DMA实现,初始化配置如下
在上述代码中有一个peri_base_addr,这个就是此DMA对应的外设基地址,也就是TIM3_CH4捕获比较寄存器的地址,现在通过手册来查找到这个寄存器的地址。
1.1、首先查询GPIO引脚描述表,找到目标引脚对应着TIM3_CH4,
1.2、然后查看DMA请求映像,对应着DMA通道3
1.3、查看寄存器组起始地址列表,TIM3定时器起始地址为:0x4000 0400
1.4、查看TIM3寄存器组地址列表,捕获比较寄存器偏移地址为:0x40
1.5、综上信息可以计算TIM3_CH4的DMA对应的外设基地址
DMA外设基地址 = TIM3基地址+CH4捕获比较寄存器偏移地址,其中TIM3基地址又等于APB1外设基地址加一个TIM3的偏移地址,最后计算过程如下:
例二 、 使用PB15作为PWM输出,采用TIM1_CH3N的DMA实现,初始化配置如下
2.1、首先查询GPIO引脚描述表,找到目标引脚对应着TIM1_CH3N,
2.2、然后查看DMA请求映像,对应着DMA通道6
2.3、查看前面寄存器组起始地址列表,TIM1定时器起始地址为:0x4001 2C00
2.4、查看TIM1寄存器组地址列表,捕获比较寄存器偏移地址为:0x3C
2.5、综上信息可以计算TIM1_CH3的DMA对应的外设基地址
DMA外设基地址 = TIM1基地址+CH3捕获比较寄存器偏移地址,其中TIM1基地址又等于APB2外设基地址加一个TIM1的偏移地址,最后计算过程如下: