Спойлер
Код: Выделить всё
#define PIN_TRIG (1 << 8)
#define PIN_ECHO (1 << 10)
void delay_us(const uint16_t us)
{
uint32_t i = us * 28;
while (i-- > 0) {
__asm("nop");
}
}
int main() {
float distance;
uint16_t counter;
//TRIG - PA8
//Echo - PA10
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
GPIOA->MODER |= GPIO_MODER_MODER8_0 | GPIO_MODER_MODER10_1;
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR8_0 | GPIO_OSPEEDER_OSPEEDR10_0;
GPIOA->PUPDR |= GPIO_PUPDR_PUPDR8;
//GPIOA->PUPDR
//Led
RCC->AHBENR |= RCC_AHBENR_GPIOEEN;
GPIOE->MODER |= GPIO_MODER_MODER13_0 | GPIO_MODER_MODER14_0 | GPIO_MODER_MODER9_0; //out
while(1) {
counter = 0;
GPIOA->ODR |= PIN_TRIG;
delay_us(10);
GPIOA->ODR &= ~PIN_TRIG;
while((GPIOA->IDR & PIN_ECHO) == 0);
while((GPIOA->IDR & PIN_ECHO) == 1) {
GPIOE->ODR |= 1 << 13;
counter++;
}
GPIOE->ODR &= ~(1 << 13);
}
}

