金牌会员
 
- 积分
- 1242
- 金钱
- 1242
- 注册时间
- 2017-3-18
- 在线时间
- 312 小时
|

楼主 |
发表于 2018-7-27 13:47:10
|
显示全部楼层
对不住各位,后面的注释贴上来就乱码了。void TIM9_CH1_Cap_Init(u16 arr,u16 psc)是定时器9的初始化函数,void TIM1_BRK_TIM9_IRQHandler(void)是TIM9的中断服务函数。Fpclk为定时器的采样频率,为1M。
addr_data2[6]=(Fpclk/(StandSign2m))*((StandSign2Num-1));为从第一个上升沿开始至今的频率
addr_data2[12]=(StandSign2Num-1);为所捕获的脉冲数量,上升沿捕获,脉冲数量=捕获数量-1。
addr_data2[18]=(StandSign2m)/(Fpclk); 为第一个上升沿开始至今的时间
提到的不准的问题, 就是上面三个参数不准。
另贴出TIM5的源码,和这大同小异,仅在溢出情况下一个左移16位,一个左移32位。
[mw_shl_code=c,false]void TIM5_CH1_Cap_Init(u32 arr,u16 psc)
{
RCC->APB1ENR|=1<<3; //TIM5 ê±Öóê1Äü
RCC->AHB1ENR|=1<<0; //ê1ÄüPORTAê±Öó
GPIO_Set(GPIOA,PIN0,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PD);//¸′óÃ1|Äü,ÏÂà-
GPIO_AF_Set(GPIOA,0,2); //PA0,AF2
TIM5->ARR=arr; //é趨¼ÆêyÆ÷×Ô¶ˉ֨װÖμ
TIM5-> SC=psc; //Ô¤·ÖÆμÆ÷
TIM5->CCMR1|=1<<0; //CC1S=01 Ñ¡Ôñêäèë¶Ë IC1ó3éäμ½TI1éÏ
TIM5->CCMR1|=0<<4; //IC1F=0000 ÅäÖÃêäèëÂË2¨Æ÷ 2»ÂË2¨
TIM5->CCMR1|=0<<10; //IC1PS=00 ÅäÖÃêäèë·ÖÆμ,2»·ÖÆμ
if(addr_data[8] == 0x0005||addr_data[8] == 0x0001)//¸ßμçÆ½′¥·¢
{
TIM5->CCER&=~(1<<3); //CC1NP=0
TIM5->CCER|=(0<<1); //CC1P=0 ϽμÑØ2¶»ñ
}
else if(addr_data[8] == 0x0009)//¸ßμíμçÆ½¾ù′¥·¢
{
TIM5->CCER|=(1<<3); //CC1NP=1
TIM5->CCER|=(1<<1); //CC1P=1
}
TIM5->CCER|=1<<0; //CC1E=1 ÔêDí2¶»ñ¼ÆêyÆ÷μÄÖμμ½2¶»ñ¼Ä′æÆ÷ÖD
TIM5->EGR=1<<0; //èí¼t¿ØÖÆ2úéú¸üDÂê¼t,ê1D′èë SCμÄÖμᢼ′éúD§,·ñÔò½«»áòaμèμ½¶¨ê±Æ÷òç3ö2Å»áéúD§!
TIM5->DIER|=1<<1; //ÔêDí2¶»ñ1ÖD¶Ï
TIM5->DIER|=1<<0; //ÔêDí¸üDÂÖD¶Ï
TIM5->CR1|=0x01; //ê1Äü¶¨ê±Æ÷2
MY_NVIC_Init(0,4,TIM5_IRQn,4);//ÇàÕ¼2£¬×óóÅÏè¼¶0£¬×é2
}[/mw_shl_code]
[mw_shl_code=c,false]void TIM5_IRQHandler(void)
{
u16 tsr;
tsr=TIM5->SR;
if(tsr&0X01)//òç3ö
{
TIM5CH1_CAPTURE_STA++;
TIM5->SR=0;//Îñ±ØÇå3yÖD¶Ï±ê־λ
}
else if(tsr&0x02)//2¶»ñ1·¢éú2¶»ñê¼t
{
StandSign1Num+=1;
TIM5->SR=0;//Çå3yÖD¶Ï±ê־λ
if(StandSign1Num==1)
{
// TIM3->CNT=0; //¼ÆêyÆ÷Çå¿Õ,CCR1òѱ£′æÖ®Ç°μÄCNTÖ죬2»¿éÇå¿Õ
// TIM5CH1_CAPTURE_STA=0;
StandSign1m0=TIM5->CCR1+(TIM5CH1_CAPTURE_STA<<32);//»ñè¡μ±Ç°μÄ2¶»ñÖμ.
Readystate=0;
addr_data[30]=0x01; /* éÏéyÑØ1yà′£¬¼Æ3õÖμ */
}
if(StandSign1Num>=2)//·àÖ1ààËÆ0/0Ö®ààNot a Number′íÎó¼ÆËã
{
StandSign1m1=TIM5->CCR1+(TIM5CH1_CAPTURE_STA<<32);//′Ëóï¾äóDÎêìa
StandSign1m=(StandSign1m1-StandSign1m0);
addr_data2[4]=(Fpclk/StandSign1m)*((StandSign1Num-1)); /* ±ê×¼±íÆμÂê */
addr_data[26]=((u16 *)(& addr_data2[4]))[0];
addr_data[27]=((u16 *)(& addr_data2[4]))[1];
addr_data2[2]=(a/StandSign1m)*(StandSign1Num-1);//
addr_data[18]=((u16 *)(& addr_data2[2]))[0]; /* èô2»êÇ£¬±ê×¼±íÂö3åêy */
addr_data[19]=((u16 *)(& addr_data2[2]))[1];
addr_data2[1]=(StandSign1m)/Fpclk; /* ±ê×¼±íê±¼ä */
addr_data[12]=((u16 *)(& addr_data2[1]))[0];
addr_data[13]=((u16 *)(& addr_data2[1]))[1];
}
}
}[/mw_shl_code] |
|