Перейти к содержанию
    

LIN шина, библиотека HAL

Здравствуйте, Уважаемые коллеги.

Возникла надобность в данной шине. В мануале HAL на STM32F1 нашёл упоминание про режим LIN UARTа. Может быть у кого-нибудь есть примеры использования. Интересуют режимы Master и Slave. В разделе примеров в репозитории Куба ничего не нашёл.

Буду благодарен за помощь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Бит LINEN в регистре CR2 изменяет длину отправляемого передатчиком сигнала BREAK и изменяет обнаружение того-же сигнала приемником. В остальном уарт остается всё тем же уартом и работа с ним точно такая же, за исключением реакции на обнаружение Break приемником слейва.

В кубе можно задать для уарта Mode: LIN

Есть функции HAL_LIN_Init() и HAL_LIN_SendBreak(), а вот  обработки Break на приеме раньше (пару лет тому назад) не было, как сейчас - не смотрел. Впрочем, данные пакета он и так примет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е., сначала нужно вызвать HAL_UART_Init(), а затем HAL_LIN_Init()? 

Или только HAL_LIN_Init()?

И как с синхронизацией по байту 0x55, когда синхронизация от HSI? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

53 минуты назад, Ioann_II сказал:

Т.е., сначала нужно вызвать HAL_UART_Init(), а затем HAL_LIN_Init()? 

Или только HAL_LIN_Init()?

И как с синхронизацией по байту 0x55, когда синхронизация от HSI? 

Только.

В stm32f1xx_hal_uart.c написано как, выбравший HAL обрекает себя на ежедневное чтение его кода :)

 

Я предпочитаю сразу реф. мануал читать.

Про синхронизацию по байту 0x55 там ни слова не сказано, вероятно нет. Тогда, как для обычного UART-а, работоспособен при разнице скоростей до примерно 4% ... 4.5%.

Судя по даташиту, точности HSI хватает (на пределе) для работы двух подобных устройств друг с другом в диапазоне температур -10 .. +85,

а при -40 .. +105 сможет работать только если с другой стороны скорость установлена точно (= есть кварц).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 hours ago, Ioann_II said:

И всё-таки:

 Как уже было сказано, только HAL_LIN_Init()

Quote

LinLIN Initialization: HAL_LIN_Init()
LIN De-Initialization: HAL_UART_DeInit()
LIN Data processing: same UART API used for Data transfers (HAL_UART_Transmit(),HAL_UART_Receive(),…)
LIN control:  HAL_LIN_SendBreak()

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу прощения, недосмотрел предыдущий пост.

Доделаю макет и стану пробовать.

Спасибо за подсказки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Через некоторое время Вы обнаружите что все три функции приема хотят знать длину принимаемого сообщения:


HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
 

А откуда мы знаем что нам на вход придет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, с этим тут проблема - видать во время разработки не продумали, что чаще всего через UART идёт обмен сообщениями, где есть символы начала сообщения и символы конца (как правило, 0d, 0a).

Просто не получается сразу так "въехать" - года 2 не занимался с STM-кой, позабыл, а тут снова понадобилось. В данном приложении можно сделать фиксированную длину сообщений и воспользоваться HAL-ом. Но когда-то переделывал библиотеку HAL для STM32F1, чтобы call-back вызывался, когда принят символ конца строки.

Спасибо за подсказки, буду пробовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...