初级会员

- 积分
- 80
- 金钱
- 80
- 注册时间
- 2019-5-7
- 在线时间
- 32 小时
|
1金钱
我用的是论坛提供的modbus协议源码,其中有个关于定时器的问题void Timer7_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE); //TIM7ê±Öóê1Äü
//TIM73õê¼»ˉéèÖÃ
TIM_TimeBaseStructure.TIM_Period = RS485_Frame_Distance*10; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷ÖüÆúμÄÖμ
TIM_TimeBaseStructure.TIM_Prescaler =7199; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ éèÖüÆêyÆμÂêÎa10kHz
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIMÏòéϼÆêyÄ£ê½
TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ
}
u16 RS485_Frame_Distance=4;//数据帧最小间隔(ms)超过此时间认为是下一帧
void TIM7_IRQHandler(void)
{
if(TIM_GetITStatus(TIM7,TIM_IT_Update)!=RESET)
{
TIM_ClearITPendingBit(TIM7,TIM_IT_Update);//Çå3yÖD¶Ï±êÖ¾
TIM_Cmd(TIM7,DISABLE);//í£Ö1¶¨ê±Æ÷
RS485_TX_EN=1;//í£Ö1½óêÕ£¬ÇD»»Îa·¢Ëí×′ì¬
RS485_RxFlag=1;//ÖÃλ֡½áêø±ê¼Ç
}
}
程序中介绍说tim7用来判断接收空闲时间 当空闲时间大于指定时间认为一帧结束,我想知道它是怎么判断的从什么时候开始计时什么时候结束,另外
TIM_TimeBaseStructure.TIM_Period = RS485_Frame_Distance*10;这段语句中自动重装值不是等于 40了吗,那这时间很小啊 是等于40*(72m/7200)吗
|
|