3.2 捕获/比较使能寄存器CCER
我们要用到这个寄存器的Zui低 2 位, CC1E 和 CC1P。
位 15、11、7、3 CCxNP:捕获/比较x 输出极性 (Capture/Comparex output Polarity)。
CCx 通道配置为输出:CCxNP 必须保持清零。
CCx 通道配置为输入:此位与 CCxP 配合使用,用以定义 TI1FP1/TI2FP1 的极性。请参见 CCxP说明。
位 14、10、6、2 保留,必须保持复位值。
位 13、9、5、1 CCxP:捕获/比较x 输出极性 (Capture/Comparex output Polarity)。
00:非反相/上升沿触发电路对TIxFP1 上升沿敏感 (在复位模式、外部时钟模式或触发模式下执行捕获或触发操作), TIxFP1 未反相(在门控模式或编码器模式下执行触发操作)。
01:反相/下降沿触发电路对TIxFP1 下降沿敏感 (在复位模式、外部时钟模式或触发模式下执行捕获或触发操作), TIxFP1 反相(在门控模式或编码器模式下执行触发操作)。
10:保留,不使用此配置。
11:非反相/上升沿和下降沿均触发电路对TIxFP1 上升沿和下降沿都敏感(在复位模式、外部时钟模式或触发模式下执行捕获或触发操作),TIxFP1未反相(在门控模式下执行触发操作)。编码器模式下不得使用此配置。
0:OCx 高电平有效
1:OCx低电平有效
CCx 通道配置为输出:
CCx 通道配置为输入:
CCxNP/CCxP 位可针对触发或捕获操作选择 TI1FP1 和 TI2FP1 的极性。
位 12、8、4、0 CCxE:捕获/比较 x 输出使能 (Capture/Comparex output enable)。
0:禁止捕获
1:使能捕获
0:关闭––OCx 未激活
1:开启––在相应输出引脚上输出 OCx信号
CCx 通道配置为输出:
CCx 通道配置为输入:
此位决定了是否可以实际将计数器值捕获到输入捕获/比较寄存器 1 (TIMx_CCR1) 中。
3.3 DMA/中断使能寄存器DIER
我们需要用到中断来处理捕获数据,必须开启通道 1 的捕获比较中断,即 CC1IE 设置为 1 。
位 15、13、7、5 保留,必须保持复位值。
位 14 TDE:触发DMA 请求使能 (Trigger DMA request enable)
位 12~位9 CCxDE:捕获/比较xDMA 请求使能 (Capture/Compare 1 DMA request enable)
位 8 UDE:更新DMA 请求使能 (Update DMA request enable)
位 6 TIE:触发信号(TRGI)中断使能(Trigger interrupt enable)
位 4~位1 CCxIE:捕获/比较x中断使能 (Capture/Compare 1 interrupt enable)
位 0 UIE:更新中断使能(Update interrupt enable)
4.1 定时器初始化
4.1.1 GPIO初始化
这里用到的是定时器5的通道1,根据STM32F407的数据手册“3Pinouts and pin description”中的“Table 9. Alternate functionmapping”复用引脚说明表,可以看到定时器5通道1对应的引脚位A0,使用A0作为信号的输入引脚。
程序中对A0引脚可以这样配置,注意一定要配置引脚的复用功能:
/*输入信号的GPIO初始化*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIOA0GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; /*复用功能*/GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; /*下拉*/GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA0
GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5); //PA0复用位定时器5