基于STM32构建EtherCAT主站(SOEM方案)4

这里讲一下soem的时间
1.选用Tim2作为系统时钟,主频为108M。TIM2_Init(1000000-1,108-1);即每1us计数一次,当计数1000000us(1s)时触发一次中断。每中断一次秒+1,TIM2->CNT的值即为微秒。因为soem采用的计时方式就是秒+微秒,因此达到要求。
2.也可以采用王惠娇同志的硕士论文《基于嵌入式平台的EtherCAT主站实现研究》中提到的主从定时器的方案。
3.也可以选用stm32的SysTick定时器作为时钟源,因为SysTick定时器是cortex-M处理器都拥有的定时器,freertos等嵌入式实时操作系统都是用SysTick定时器作为系统时钟的。

我给的源码是采用了主从定时器的方案。
在这里插入图片描述

void MX_TIM2_Init(void)
{
  TIM_ClockConfigTypeDef sClockSourceConfig;
  TIM_MasterConfigTypeDef sMasterConfig;

  htim2.Instance = TIM2;																				//通用定时器2
  htim2.Init.Prescaler = 108-1;																		//分频
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;									//向上计数器
  htim2.Init.Period = 1000000-1;																//自动装载值
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;						//时钟分频因子
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
	HAL_TIM_Base_Init(&htim2);

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
	HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig);

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
	HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);

  HAL_TIM_Base_Start(&htim2);
}
/* TIM3 init function */
void MX_TIM3_Init(void)
{
  TIM_SlaveConfigTypeDef sSlaveConfig;

  htim3.Instance = TIM3;																				 //通用定时器3
  htim3.Init.Prescaler = 0;                                      //分频
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;                   //向上计数器
  htim3.Init.Period = 1000000;                                     //自动装载值
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;             //时钟分频因子
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
	HAL_TIM_Base_Init(&htim3);

  sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;
  sSlaveConfig.InputTrigger = TIM_TS_ITR1;
	HAL_TIM_SlaveConfigSynchronization(&htim3, &sSlaveConfig);

  HAL_TIM_Base_Start(&htim3);
}

uint32_t GetSec(void)
{
    return TIM3->CNT;
}

uint32_t GetUSec(void)
{
    return TIM2->CNT;
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>