输入捕获,简而言之,即 记录信号到来时刻的CNTR的值,然后把该值传给CCR。下面以PC1为例,代码如下:
TIM1_CR1_DIR = 0;//计数器向上计数
TIM1_IER_UIE = 1;//使能TIM1溢出中断
TIM1_PSCRH = 0x00;
TIM1_PSCRL = 0x05; //配置TIM1为6分频->0.75us记一次数
TIM1_ARRH = 0xFF;
TIM1_ARRL = 0xFF; //自动重装载的值,49ms中断
TIM1_CNTRH = 0xFF;
TIM1_CNTRL = 0xFF;
TIM1_CCER1_CC1E = 0;//禁止捕获使能
TIM1_CCMR1_CC1S = 1;//输入捕捉//采样频率f SAMPLING =f MASTER ,N=8 //捕获输入口上检测到的每个事件触发一次捕获
TIM1_CCER1_CC1P = 1;//1:捕捉发生在TI1F的低电平或下降沿 0:捕捉发生在TI1F的高电平或上升沿
TIM1_CCR1L;//读取低8位,清除CC1IF ,躲过一开始进入中断//也可以直接清零TIM1_SR1_CC1IF位
TIM1_IER_CC1IE = 1;//允许捕获/比较1中断
TIM1_CCER1_CC1E = 1;//捕获使能
TIM1_CR1_CEN = 1; //使能TIM1
注意:PC1为TIM1的CH1,中断函数中读取CCRH和CCRL的值即可得到信号到来时CNTR的值,CC1S仅在通道关闭时(TIM1_CCER1寄存器的CC1E=0)才是可写的