Witam
Od paru dni borykam się z pewnym problemem. Mianowicie piszę obsługę czujnika ultradźwiękowego HC-SR04 na STM32F103C8. Doskonale zdaję sobie sprawę, że nie jest to trudne zadanie, jednakże posiadam ze względów projektowych tylko jeden Timer, aby wykonać to zadanie. Plan obsługi mniej więcej wygląda tak:
- ustawiam PSC na 1uS,
- włączam TIM4 i ustawiam GPIOC->BSRR (1 << 14),
- sprawdzam, czy puls trwa 10uS,
- następnie wyłączam TIM4, GPIOC->BRR (1 << 14) i resetuje CNT,
- gdy następuje przerwanie od pinu ECHO czujnika, włączam ponownie TIM4 i czekam na następne przerwanie
- zapisuje wartość CNT i powtarzam.
Niby algorytm działania prosty. Jednakże po sprawdzeniu sygnału na analizatorze logicznym dostaję następujący przebieg czasowy:
Za bardzo nie wygląda to dobrze. I tu kieruje moje pytanie, czy takie operacje są dozwolone na Cortexach?
Konfiguracja rejestrów:
Wysłanie impulsu:
[/code]
Od paru dni borykam się z pewnym problemem. Mianowicie piszę obsługę czujnika ultradźwiękowego HC-SR04 na STM32F103C8. Doskonale zdaję sobie sprawę, że nie jest to trudne zadanie, jednakże posiadam ze względów projektowych tylko jeden Timer, aby wykonać to zadanie. Plan obsługi mniej więcej wygląda tak:
- ustawiam PSC na 1uS,
- włączam TIM4 i ustawiam GPIOC->BSRR (1 << 14),
- sprawdzam, czy puls trwa 10uS,
- następnie wyłączam TIM4, GPIOC->BRR (1 << 14) i resetuje CNT,
- gdy następuje przerwanie od pinu ECHO czujnika, włączam ponownie TIM4 i czekam na następne przerwanie
- zapisuje wartość CNT i powtarzam.
Niby algorytm działania prosty. Jednakże po sprawdzeniu sygnału na analizatorze logicznym dostaję następujący przebieg czasowy:
Za bardzo nie wygląda to dobrze. I tu kieruje moje pytanie, czy takie operacje są dozwolone na Cortexach?
Konfiguracja rejestrów:
Kod: C / C++
Wysłanie impulsu:
Kod: C / C++