Нужно как-то переписать ее чтобы можно было переключаться между 3 i2c.
Как обрабатывать прерывания дальномера VL53L0X?
Первая проблема что нужно при скорости 9600 бит/c передача одного бита должна происходить прмерно 1/9600 = 104 микорсекунды. HAL_Delay поддерживает минимальный период 1 милисекунда.
какой надо выставлять уровень напряжения на пине в простое
uint8_t led_state = 0x03; Данной командой мы завели переменную, которая равна 3
что под этим подразумевается?
HAL_GPIO_WritePin(GPIOE, led_state << 8, GPIO_PIN_SET); Это я так понимаю мы сначала устанавливаем самый первый светодиод, т.е. 8, но на практике ни так.
led_state = led_state >> 1 | led_state << 7;Эту строку совсем не понимаю.
P.S. выделение памяти в прерываниях зло и т.д. ага.
Так вот, что бы не проставлять кучу __disable_irq(); __enable_irq();
#define SERVO_180 8200 #define SERVO_0 1800 void set_pos(uint8_t pos) { uint32_t tmp = (SERVO_180 - SERVO_0) / 180; TIM2->CCR2 = SERVO_0 + tmp * pos; }
uint32_t tmp = ((SERVO_180 - SERVO_0) * pos) / 180 + SERVO_0;
TIM2->CCR2 = tmp;
сервопривод начинает сходить с ума