То будет не критично, вообще еще дурной вопрос.
Нужно будет ловить импульс ответа, и измерить его длину, тут особых проблем не обнаружил, но реализация несколько смущает.
Настройка порта на внешнее прерывание, тут настроил на передний фронт, но в самом прерывании после получения переднего фронта перенастраиваю на задний фронт. Сперва делал чтобы прерывание было от обоих фронтов сразу, но зайдя в прерывание тогда не получалось понять какой именно фронт его вызвал, почему-то чтение пина всегда возвращало 0. Сам импульс около 10 mS. Поэтому решил делать с переключением в прерывании.
Код
/*Configure GPIO pin : PE2 */
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI2_IRQn);
Код
void EXTI2_IRQHandler(void)
{
if ((EXTI->RTSR >> 2) & 1)
{
...........
EXTI->RTSR = 0; //Otkl rising
EXTI->FTSR = 0x4; //Vkl Filling
}
else
{
...........
EXTI->RTSR = 4; //Vkl rising
EXTI->FTSR = 0; //Otkl Filling
}
EXTI->PR |=0x04;
}