реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32F1xx HAL траблы с CAN и таймаутом на отправку
MaxiGroup
сообщение May 10 2018, 09:09
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 106
Регистрация: 28-04-05
Из: Russia, Moscow
Пользователь №: 4 581



Коллеги, вопрос на засыпку: недавно взялся за освоение очередного семейства stm32... пытаюсь реализовать обмен данными по шине CAN.

Вроде бы все понятно и просто используя HAL... но вот тут я решил отсоединить провода от шины и посмотреть ту самую гарантию доставки и потестить, как заметил одну неприятную весчь.
А именно, функция отправки: HAL_CAN_Transmit(&hcan, 10);

Так вот в данном случае стоит таймаут 10 попугаев.
Идем в библиотеку HAL, и видим там реализацию таймаута на базе HAL_GetTick(void)

И вот эта самая функция выдает постоянно одно и то же значение.
Хоть и значение это всегда разное при каждом старте, но уже в цикле while где работает ожидание отправилось или нет, считывается все время одно и то же значение
В итоге имеем то что таймаут даже 1 никогда не сработает, получаем вечный loop и отправку в шину спама.

Спасает тольно установка таймаута в 0 и повторная отправка, уже в своем коде реализованная.

Вопрос, может быть какое-то прерывание нужно активировать, чтобы uwTick начал работать правильно, или это баг HAL ?

HAL_Delay() при этом в программе работает корректно...

Почитал в инете огромное кол-во подобных вопросов связанных с похожими, но все же не таким проблемами... Часть в errata, что-то обещали пофиксить в 16 году еще... но хочется верить, что в моем случае нужно где-то галочку поставить )))
Go to the top of the page
 
+Quote Post
MaxiGroup
сообщение May 10 2018, 10:48
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 106
Регистрация: 28-04-05
Из: Russia, Moscow
Пользователь №: 4 581



Дополню пост, разобрался. Просто вызываю функцию из прерывания, и все остальные прерывания ессно останавливаются ))) Сам лошара...
Go to the top of the page
 
+Quote Post
yes
сообщение May 10 2018, 12:41
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



в старших семействах (а CAN железо, по-моему, одинаковое) поменяли драйвера CAN - сделали привязку к железу/уменьшили абстракцию (то есть пользователю нужно знать, что есть два приемных фифо и 3 буфера для передачи - зато никаких таймаутов в API, безумных FSM и т.п.) - примитивно, но работает, по-моему, лучше, чем старая версия
Go to the top of the page
 
+Quote Post
MaxiGroup
сообщение May 10 2018, 13:11
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 106
Регистрация: 28-04-05
Из: Russia, Moscow
Пользователь №: 4 581



Цитата(yes @ May 10 2018, 15:41) *
в старших семействах...


это F4 и выше подразумеваете?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 03:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01901 секунд с 7
ELECTRONIX ©2004-2016