我配置的tim1,编码器模式,使用引脚pe9,pe11。pe10作为编码器z线信号。当不接pe10脚,编码器度数正常。当z线接入pe10时(pe10设置为外部中断,触发时,编码器数值清零),就回一直进入中断状态,不管z线有没有触发(用示波器量,z线输出正常)。 回调函数: void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { int16_t tmp; if(GPIO_Pin == GPIO_PIN_10) { __HAL_TIM_SET_COUNTER(&htim1, 0);//编码器清零 } } 中断: void EXTI15_10_IRQHandler(void) { /* USER CODE BEGIN EXTI15_10_IRQn 0 */ /* USER CODE END EXTI15_10_IRQn 0 */ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10); /* USER CODE BEGIN EXTI15_10_IRQn 1 */ /* USER CODE END EXTI15_10_IRQn 1 */ } 望各位朋友指教 |
不是库里直接清除中断么
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
/* EXTI line interrupt detected */
if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)
{
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
HAL_GPIO_EXTI_Callback(GPIO_Pin);
}
}
这个就是清中断的吧
我debug跟踪了,进了这函数。
这个是清中断。
你的中断是电平模式还是沿模式,请用沿模式,不要用电平中断。
评分
查看全部评分
元老,指导下,怎么用沿模式。是在不懂啊
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin : PE10 */
GPIO_InitStruct.Pin = GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
}
您说的是这里么。我一直用的沿触发啊
评分
查看全部评分