Open ConorMcGregor87 opened 1 year ago
Я использую генерацию протокола с использованием UART. Это гарантирует атомарность операций и корректную обработку протокола с большим количеством устройств на ней (определяемым в основном только ёмкостными показателями самой шины) даже в исключительно высокой нагрузке на RTOS.
Мне больше 50 датчиков собрать не удалось в одном месте. 50 штук на шине работает корректно.
Реализация разделена на два слоя. Отдельно реализован протокол 1wire и отдельно для него драйвер для stm32. Самый сложный метод, понятно, — сканирование шины. С ним пришлось больше всего повозиться.
обратите внимание на методы в инициализации в https://github.com/StanislavLakhtin/clion_freertos_stm32f103_template/blob/master/src/tools.c
Конкретно, отсылка осуществляется здесь:
void onewire_send( uint16_t data ) {
usart_send_blocking(USART3, data );
while ( !usart_get_flag(USART3, USART_SR_TC));
}
Здравствуйте! Не очень понял, что вы используете для работы с датчиком из какой либо задачи. Вы используете таймер из HAL или как производите прерывания на шине? Не могу победить у себя на f103 данную задачу именно с использованием freertos. если обрабатывать прерывания в ОС, то как минимум 40 микросекунд используется, чтобы уйти в прерывание и в итоге весь обмен валится.