StanislavLakhtin / clion_freertos_stm32f103_template

CLion 2019.3 stm32f103c8t6 stm32f1 cortex-m3 DS18B20 Onewire BME280 USB FreeRTOS
1 stars 1 forks source link

freeRTOS stm32 18b20 #1

Open ConorMcGregor87 opened 1 year ago

ConorMcGregor87 commented 1 year ago

Здравствуйте! Не очень понял, что вы используете для работы с датчиком из какой либо задачи. Вы используете таймер из HAL или как производите прерывания на шине? Не могу победить у себя на f103 данную задачу именно с использованием freertos. если обрабатывать прерывания в ОС, то как минимум 40 микросекунд используется, чтобы уйти в прерывание и в итоге весь обмен валится.

StanislavLakhtin commented 1 year ago

Я использую генерацию протокола с использованием UART. Это гарантирует атомарность операций и корректную обработку протокола с большим количеством устройств на ней (определяемым в основном только ёмкостными показателями самой шины) даже в исключительно высокой нагрузке на RTOS.

Мне больше 50 датчиков собрать не удалось в одном месте. 50 штук на шине работает корректно.

StanislavLakhtin commented 1 year ago

Реализация разделена на два слоя. Отдельно реализован протокол 1wire и отдельно для него драйвер для stm32. Самый сложный метод, понятно, — сканирование шины. С ним пришлось больше всего повозиться.

StanislavLakhtin commented 1 year ago

обратите внимание на методы в инициализации в 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));
}