调试的过程中,总能遇到一些问题,很庆幸能遇到那么多的问题,也许这就是最好的学习过程:
继续我的笔记:
在main函数中,文件名:main.c
对TIM2的CH1,CH2配置如下: TIM_ICInitStructure.TIM_ICMode = TIM_ICMode_ICAP; //配置为输入捕获模式
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; //选择通道1
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //输入上升沿捕获
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; // 通道方向选择
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //每次检测到捕获输入就触发一次捕获
TIM_ICInitStructure.TIM_ICFilter = 0x0; //
TIM_ICInit(TIM2, &TIM_ICInitStructure);
TIM_ICInitStructure.TIM_ICMode = TIM_ICMode_ICAP; //配置为输入捕获模式
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; //选择通道2
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //输入上升沿捕获
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; // 通道方向选择
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //每次检测到捕获输入就触发一次捕获
TIM_ICInitStructure.TIM_ICFilter = 0x0; //
TIM_ICInit(TIM2, &TIM_ICInitStructure);
TIM1->PSC = 10; //由于要测量的信号频率为200-1000HZ 采取10倍的预分频
TIM2->PSC = 10; //如果不分频最小的频率为1100hz,分频后可以测量的频率为110HZ,为了达到最佳捕捉效果,且满足要求建议分频系数设为6;
/* Select the TIM2 Input Trigger: TI2FP2 【输入触发源选择】*/
TIM_SelectInputTrigger(TIM2,TIM_TS_TI1FP1); //参考TIM结构图选择滤波后的TI2输入 寄存器SMCR
/* Select the slave Mode: Reset Mode */
TIM_SelectSlaveMode(TIM2,TIM_SlaveMode_Reset); //复位模式-选中的触发输入(TRGI)的上升沿初始化计数器,并且产生一个更新线号
/* Enable the Master/Slave Mode */
TIM_SelectMasterSlaveMode(TIM2,TIM_MasterSlaveMode_Enable); //主从模式选择
说说我要测量两路信号频率的思路吧:
我想把两路信号跟别加到TIM2的CH1跟CH2上面去,然后通过TI1FP1跟TI2FP2轮流触发 ,TIM2->CCR1与TIM2->CCR2记录下来的数据就是信号的周期,接着根据具体的情况计算出信号的频率。那么,究竟是怎么实现TI1FP1跟TI2FP2轮流触发呢?这就是DMA的问题了,当信号的周期被TIM2->CRRx收到,DMA就会将这个数据送到一个存储器区。DMA传输完数据后就会发生中断,我在DMA传输中断函数中修改触发信号源。
比如说DMA-CH5传输到是TIM2->CRR1
他的中断函数如下:
void DMAChannel5_IRQHandler(void)
{
if (DMA_GetITStatus(DMA_IT_TC5) != RESET)
{
DMA_ClearITPendingBit(DMA_IT_TC5);
/* Select the TIM2 Input Trigger: TI2FP2 【输入触发源选择】*/
TIM_SelectInputTrigger(TIM2,TIM_TS_TI2FP2);
上句就是修改触发源轮流触发 }
}
但是实验的过程中发现 两个通道所测量得到信号的周期 怎么着都只有一组是正确
例如:最后通过高人的指点才发现:
原来这个定时器只有一个COUNT(计数器)
当我选择执行 TIM_SelectSlaveMode(TIM2,TIM_SlaveMode_Reset);这个函数,问题就来了,当一路有信号触发,count复位,那么另一路永远也得不到正确的值。。所以测量信号频率还有待改良。。。。
2008年10.14 晚九点
实验室看门的又来催了 ,记录到此
用户165162 2008-12-26 16:41
用户165162 2008-12-26 16:40
用户151974 2008-12-15 14:30