sergeyklenov 0 10 мая, 2018 Опубликовано 10 мая, 2018 · Жалоба Коллеги, вопрос на засыпку: недавно взялся за освоение очередного семейства stm32... пытаюсь реализовать обмен данными по шине CAN. Вроде бы все понятно и просто используя HAL... но вот тут я решил отсоединить провода от шины и посмотреть ту самую гарантию доставки и потестить, как заметил одну неприятную весчь. А именно, функция отправки: HAL_CAN_Transmit(&hcan, 10); Так вот в данном случае стоит таймаут 10 попугаев. Идем в библиотеку HAL, и видим там реализацию таймаута на базе HAL_GetTick(void) И вот эта самая функция выдает постоянно одно и то же значение. Хоть и значение это всегда разное при каждом старте, но уже в цикле while где работает ожидание отправилось или нет, считывается все время одно и то же значение В итоге имеем то что таймаут даже 1 никогда не сработает, получаем вечный loop и отправку в шину спама. Спасает тольно установка таймаута в 0 и повторная отправка, уже в своем коде реализованная. Вопрос, может быть какое-то прерывание нужно активировать, чтобы uwTick начал работать правильно, или это баг HAL ? HAL_Delay() при этом в программе работает корректно... Почитал в инете огромное кол-во подобных вопросов связанных с похожими, но все же не таким проблемами... Часть в errata, что-то обещали пофиксить в 16 году еще... но хочется верить, что в моем случае нужно где-то галочку поставить ))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeyklenov 0 10 мая, 2018 Опубликовано 10 мая, 2018 · Жалоба Дополню пост, разобрался. Просто вызываю функцию из прерывания, и все остальные прерывания ессно останавливаются ))) Сам лошара... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 10 мая, 2018 Опубликовано 10 мая, 2018 · Жалоба в старших семействах (а CAN железо, по-моему, одинаковое) поменяли драйвера CAN - сделали привязку к железу/уменьшили абстракцию (то есть пользователю нужно знать, что есть два приемных фифо и 3 буфера для передачи - зато никаких таймаутов в API, безумных FSM и т.п.) - примитивно, но работает, по-моему, лучше, чем старая версия Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeyklenov 0 10 мая, 2018 Опубликовано 10 мая, 2018 · Жалоба в старших семействах... это F4 и выше подразумеваете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться