一、使用cubeMX软件对程序需要使用的端口和资源进行初始化。
为了保持程序的简洁性,这里仅使用一个串口和一路通用定时器。
(1)引脚的初始化
注:在引脚配置这里,是没有编码器模式的,不知道为什么。高级寄存器是由combined channels选项的。
这里先暂时选择为Input Capture direct mode,后面在针对具体的代码进行修改即可。
(2)时钟的配置
(3)串口资源的配置
(4)定时器的配置
(5)中断的配置
这里不适用串口来接收数据,所以串口的中断也不用打开。这里需要打开定时器的中断,在定时器发生上下计数溢出时,需要对进行记录,保证记录的准确性。
(6)最后生成的定时器初始化代码如下:
static void MX_TIM3_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig;
TIM_MasterConfigTypeDef sMasterConfig;
TIM_IC_InitTypeDef sConfigIC;
htim3.Instance = TIM3;
htim3.Init.Prescaler = 0;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 65535;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
if (HAL_TIM_IC_Init(&htim3) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPres