用定时器的外部时钟模式来数脉冲数,外部时钟模式1好像记一次就中断一次,所以最好是模式2的 谁有相关代码,给小弟参考一下!谢谢了 小弟有点白,弄了一天没弄出来,打印出来老是为0. 我的定时器是这么配置的,不晓得哪有问题,,,
void TIM3_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能TIM3时钟
TIM_ETRClockMode2Config(TIM3,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted,0x0);
//TIM3的时钟源选择外部时钟模式2(即外部触发输入ETR)
//无预分频器,捕获入口上检测到的每一个边沿都触发一次捕获。
//TIM_ExtTRGPolarity_NonInverted上升沿极性
//第四个参数必须是0x00-0x0F之间的数,表示输入捕获滤波器
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能PA端口时钟
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//不重映射时,PA6、7、PB0、1对应着四个通道
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz时钟速度
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入,当配置成外部触发时钟输入时要求为浮空输入
GPIO_Init(GPIOA,&GPIO_InitStructure);//根据上面指定参数初始化GPIO结构体
TIM3->SMCR|=1<<14;//使能外部时钟模式2 ,不知道库函数怎么操作这句话 所以用寄存器操作
TIM_Cmd(TIM3,ENABLE);//使能定时器3
}
//然后我在主函数里面打印计数值
int main(void)
{
u16 TIM3CH1_CAPTURE_VAL;
SystemInit();
TIM2_Config();
TIM3_Config();
UART1_Init();
while(1)
{
TIM_GetCounter(TIM3);
//u16 TIM3CH1_CAPTURE_VAL;
TIM3CH1_CAPTURE_VAL=TIM3->CCR1; //[获取当前的计数值]
printf("Pulse Count:%d \r\n",TIM3CH1_CAPTURE_VAL);//[把计数值打印出来]
//printf("Pulse Count:%d \r\n",TIM_GetCounter(TIM3));//[把计数值打印出来]
}
}
//关于打印,我试了寄存器法操作也试了库函数法操作,打印出来的就是0,脉冲源没问题,这点我肯定。
|