中级会员
 
- 积分
- 259
- 金钱
- 259
- 注册时间
- 2016-9-29
- 在线时间
- 68 小时
|
50金钱
TIM_ClockConfigTypeDef sClockSourceConfig; // 定时器时钟
TIM_OC_InitTypeDef sConfigOC; // 定时器通道比较输出
STEPMOTOR_TIM_RCC_CLK_ENABLE();
/* STEPMOTOR相关GPIO初始化配置 */
STEPMOTOR_GPIO_Init();
/* 定时器基本环境配置 */
htimx_STEPMOTOR.Instance = STEPMOTOR_TIMx; // 定时器编号
htimx_STEPMOTOR.Init.Prescaler = STEPMOTOR_TIM_PRESCALER; // 定时器预分频器
htimx_STEPMOTOR.Init.CounterMode = TIM_COUNTERMODE_UP; // 计数方向:向上计数
htimx_STEPMOTOR.Init.Period = STEPMOTOR_TIM_PERIOD; // 定时器周期
htimx_STEPMOTOR.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1; // 时钟分频
HAL_TIM_Base_Init(&htimx_STEPMOTOR);
/* 定时器时钟源配置 */
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; // 使用内部时钟源
HAL_TIM_ConfigClockSource(&htimx_STEPMOTOR, &sClockSourceConfig);
/* 定时器比较输出配置 */
sConfigOC.OCMode = TIM_OCMODE_TOGGLE; // 比较输出模式:反转输出
sConfigOC.Pulse = 0xFFFF; // 脉冲数
sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW; // 输出极性
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW; // 互补通道输出极性
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; // 快速模式
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; // 空闲电平
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; // 互补通道空闲电平
HAL_TIM_OC_ConfigChannel(&htimx_STEPMOTOR, &sConfigOC, STEPMOTOR_TIM_CHANNEL_x);
/* 使能比较输出通道 */
TIM_CCxChannelCmd(STEPMOTOR_TIMx, STEPMOTOR_TIM_CHANNEL_x, TIM_CCx_DISABLE);
/* 配置定时器中断优先级并使能 */
HAL_NVIC_SetPriority(STEPMOTOR_TIMx_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(STEPMOTOR_TIMx_IRQn);
__HAL_TIM_CLEAR_FLAG(&htimx_STEPMOTOR, STEPMOTOR_TIM_FLAG_CCx);
/* 使能定时器比较输出 */
__HAL_TIM_ENABLE_IT(&htimx_STEPMOTOR, STEPMOTOR_TIM_IT_CCx);
/* Enable the main output */
__HAL_TIM_MOE_ENABLE(&htimx_STEPMOTOR);
HAL_TIM_Base_Start(&htimx_STEPMOTOR);// 使能定时器
void STEPMOTOR_TIMx_IRQHandler(void)//定时器中断处理
{
// 设置比较值
Tim_Count=__HAL_TIM_GET_COUNTER(&htimx_STEPMOTOR);
tmp = STEPMOTOR_TIM_PERIOD & (Tim_Count + Toggle_Pulse);
__HAL_TIM_SET_COMPARE(&htimx_STEPMOTOR,STEPMOTOR_TIM_CHANNEL_x,tmp);
}
|
|