Например TDA7294

Форум РадиоКот • Просмотр темы - stm32g431 UART на прерываниях, отказ SysTick_Handler
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн дек 15, 2025 05:57:35

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 23 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: stm32g431 UART на прерываниях, отказ SysTick_Handler
СообщениеДобавлено: Вт окт 28, 2025 22:43:30 
Родился

Зарегистрирован: Ср авг 13, 2025 11:45:44
Сообщений: 17
Рейтинг сообщения: 0
Код:
        USART1->DR = *tx_buffer++;
        if (--tx_size == 0) {
            USART1->CR1 &= ~USART1_TXEIE;           // Disable TXE interrupt
            USART1->CR1 |= USART1_TCIE;             // Enable TC interrupt
        }
Код кривой.


неоч понятно, чем кривой код?
Не то что бы я большой спец по сям, но конкретно с этими ++ и -- уже вроде б разобрался... Оно эквивалентно:
Код:
        USART1->DR = *tx_buffer;
        tx_buffer++;
        tx_size--;
        if (tx_size == 0) {
            USART1->CR1 &= ~USART1_TXEIE;           // Disable TXE interrupt
            USART1->CR1 |= USART1_TCIE;             // Enable TC interrupt
        }


Вообще, конечн, я оч не приветствую совмещение ++/-- с другими операндами. Именно из-за этой путаницы, когда сначала выполняется действие ++/--, а потом возвращается результат, а когда наоборот - возвращается результат, предшествующий этим операндам. Оно конечно там условно логично, но читаемость кода сильно лагает. Экономия строки тут на пользу не идёт.

Тут настройка прерываний выполняется после передачи крайнего байта. И типа есть вероятность ну успеть отключить прерывание до его следующего срабатывания. Но полагаю, что это возможно только на очень низких частотах проца и на высоких частотах UART, что кажется редкодостижимо. Но в таком виде имхо несколько привычнее читается, чем конструкции с проверкой предпоследнего байта.

Добавлено after 1 minute 10 seconds:
Не крайнего, а последнего! Не нужно людей в заблуждение вводить!

я авиатор, я так вижу


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32g431 UART на прерываниях, отказ SysTick_Handler
СообщениеДобавлено: Вт окт 28, 2025 23:31:20 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 18
Зарегистрирован: Пн сен 15, 2025 08:43:23
Сообщений: 273
Рейтинг сообщения: 0
Cliff, русский язык по назначению использовать нужно, а не выдумывать идиотизмы!
"Крайний" - это первый или последний. Поэтому для конкретики и нужно говорить либо "первый", либо "последний".

Говорить "крайний" вместо "последний" - очень тревожный звоночек. Говори правильно!!!

_________________
Windows must die! And the users of this crap should either become smarter or become janitors.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32g431 UART на прерываниях, отказ SysTick_Handler
СообщениеДобавлено: Ср окт 29, 2025 00:38:36 
Друг Кота
Аватар пользователя

Карма: 59
Рейтинг сообщений: 1575
Зарегистрирован: Вт окт 22, 2013 04:37:23
Сообщений: 3421
Откуда: Казань
Рейтинг сообщения: 0
И скорее всего - код вообще зациклится в бесконечной передаче

Тем не менее, код нормально работает. Было бы странным, если бы в официальный SDK вкладывали неработающие примеры.

Cliff писал(а):
Тут настройка прерываний выполняется после передачи крайнего байта. И типа есть вероятность ну успеть отключить прерывание до его следующего срабатывания

Не после крайнего, а после предпоследнего. И новое прерывание USART не сможет сработать пока не закончена обработка текущего.

Cliff писал(а):
Просто, применение TC тут вырезано, только факт его срабатывания остаётся

А вот тут Вы правы, после запрета TCIE там взводится флаг - я эту строку вырезал для упрощения восприятия кода.

Спасибо всем за высказывания мнений - что я хотел прояснить, я прояснил.

_________________
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезисты Ordyl Alpha 350 и AM 140.
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльная маска XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 23 ]    , 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y