return TIMx->CNT; } 当捕获成功时,TIM_GetCapture1()和TIM_GetCounter()得到的值一样吗? TIM_GetCapture1对应寄存器CRR1,TIM_GetCounter对应寄存器CNT 答: 看你处理的速度了, 正常来说TIM_GetCapture1才是最准确的.完全硬件级别的保存. 捕获/比较寄存器 1: TIMx_CCR1,该寄存器用来存储捕获发生时, TIMx_CN...
void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD) - 设置时钟分频 uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx) - 用于获取定时器输入捕获通道1的捕获值 uint16_t TIM_GetCounter(TIM_TypeDef* TIMx) - 获取当前计数值 uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx) - 获取定时器分...
TIMx_CCMR1 控制 CH1(通道1) 和CH2(通道2),而 TIMx_CCMR2 控制 CH3(通道3) 和 CH4(通道4)。 1、CC1S[1:0],这两个位用于 配置CCR1 的通道方向,这里我们设置 IC1S[1:0]=01,也就是配置为输入。 2、IC1PSC[1:0],设置输入捕获 1 预分频器。我们是 1 次边沿就触发 1 次捕获,所以选择 00 就...
if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) { TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); capture = TIM_GetCapture1(TIM2); TIM_SetCompare1(TIM2, capture + CCR1_Val); ///设置TIMx捕获比较1寄存器值然后动态修改其CCR的值 使整个程序一直进行下去 // PC.04 GPIO_WriteBit(GPIOC, GPIO...
011:翻转。当TIMx_CCR1=TIMx_CNT时,翻转OC1REF的电平。也就是toggle模式 程序如下: TIM_TimeBaseStructure.TIM_Period = 65535; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; ...
输入:TIMx:其中x可以是1到4来选择TIM外围设备;Prescaler:指定预分频器寄存器值;TIM_PSCReloadMode:指定TIM预分频器重新加载模式。 1.23、void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode) 功能:指定要使用的TIMx计数器模式。
(这在TIM2的初始化函数执行的时候就设置好了),然后等待上升沿中捕获断到来,当捕获到上升沿中断,此时如果 Capture_State的第 6 位为 0,则表示还没有捕获到新的上升沿,就先把 Capture_State、Capture_Value和TIM2->CNT等清零,然后再设置 Capture_State的第 6 位为 1,标记捕获到高电平,最后设置为下降沿捕获,...
TIM_GetCapture1获得TIMx输入捕获1的值 TIM_GetCapture2获得TIMx输入捕获2的值 TIM_GetCapture3获得TIMx输入捕获3的值 TIM_GetCapture4获得TIMx输入捕获4的值 TIM_GetCounter获得TIMx计数器的值 TIM_GetPrescaler获得TIMx预分频值 TIM_GetFlagStatus检查指定的TIM标志位设置与否 TIM_ClearFlag清除TIMx的待处理标志位...
TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_BaseInitStructure.TIM_RepetitionCounter =0; TIM_TimeBaseInit(TIM1, &TIM_BaseInitStructure); //清中断,以免一启用中断后立即产生中断 TIM_ClearFlag(TIM1, TIM_FLAG_Update); //使能TIM1中断源 ...
u16 CCR1_Val = 1000; u16 CCR2_Val = 500; u16 CCR3_Val = 250; u16 CCR4_Val = 125; if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) { TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); capture = TIM_GetCapture1(TIM2); TIM_SetCompare1(TIM2, capture + CCR1_Val); ...