Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

Перезагрузка UART_RX на HAL

Непрочитано 11.05.2022, 13:43  
sanstan
Прописка
 
Регистрация: 06.03.2007
Сообщений: 144
Сказал спасибо: 22
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
sanstan на пути к лучшему
По умолчанию Перезагрузка UART_RX на HAL

Добрый день.
Виснет прием данных через какое то время. Как перезагрузить?

Код:
	if(fPCReload==1){
		fPCReload=0;
//1 вариант
		HAL_UART_Abort_IT(&huart1);   //не работает
//2 вариант
		//HAL_NVIC_DisableIRQ(UART7_IRQn);  // не понятно название прерывания для UART1
		//HAL_NVIC_EnableIRQ(UART7_IRQn);
//3 вариант
		/*__disable_irq();
		huart1-›RxState= HAL_UART_STATE_READY; // тут ошибку пишет

		__enable_irq();*/
//запустить прерывание по-новой
		HAL_UART_Receive_IT(&huart1, RX_data10, 8); //
	}
Реклама:
sanstan вне форума  
Непрочитано 11.05.2022, 16:37  
sanstan
Прописка
 
Регистрация: 06.03.2007
Сообщений: 144
Сказал спасибо: 22
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
sanstan на пути к лучшему
По умолчанию Re: Перезагрузка UART_RX на HAL

Нашел номер ошибки: error = 8
Код:
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart){
    if(huart == &huart1){
       uint32_t error = HAL_UART_GetError(&huart1);
   }
}
Как сбросить эту ошибку?
sanstan вне форума  
Непрочитано 11.05.2022, 17:03  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,134
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Перезагрузка UART_RX на HAL

что значит виснет? как вообще уарт может зависнуть???
может виснуть чтото уже на более высоком уровне и это уже у тебя а не у уарта.

напиши все на уровне почти ассемблера и все те будет.

небось буфер какойто програмный цикличный не очищаешь вовремя вот и виснет программа. или тупо данные новые не пишутся или не считываются. но это все программное.
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 11.05.2022, 17:06  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,134
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Перезагрузка UART_RX на HAL

прием уарта состоит из 2 строк в прерывании и работы с 2-3 регистрами(и то не всегда). там виснуть нечему на низком уровне кода)))

ну в дма посложнее - там как раз важны размеры программных буферов.

завязывайте вы с этим калом вобщем
индусы вас с ума сведут
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 11.05.2022, 17:44  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Перезагрузка UART_RX на HAL

А разобраться с причиной зависания? Обработать ошибку кадра, ошибку переполнения приемника из-за несвоевременного чтения регистра приема, ошибку повышенного шума приема.
Ошибки в приеме сбрасываются чтением регистра SR и последующим чтением регистра приема DR.

Сообщение от sanstan Посмотреть сообщение
(UART7_IRQn); // не понятно название прерывания для UART1
Ну так там 7, а там 1. Цифры визуально хоть и похожие, но, блин, разные как... Для UART1 принято написание как USART1, двухрежимный синхронный/асинхронный. А седьмой уарт - только асинхронный, потому и UART7. Хотя, эти мудохоания с запретом прерываний - это совсем из другой оперы. Как в анекдоте: "Ты че по полу ползаешь? --- Да я вон там в корридоре ключи потерял. --- Так там и ищи! --- А тут светлее..."
Иногда мануалы то хоть иногда полезно читать.

Сообщение от sanstan Посмотреть сообщение
номер ошибки: error = 8
Мануал прочитать? Даже на этот $#%чий HAL - и то есть мануал. На тыщщи две страниц.
Перейдите по функции обработки ошибки, посмотрите в её недрах, чему соотвествует цифра 8. Там будут текстовые определения:
UART Error Definition
HAL_UART_ERROR_NONE No error
HAL_UART_ERROR_PE Parity error
HAL_UART_ERROR_NE Noise error
HAL_UART_ERROR_FE frame error
HAL_UART_ERROR_ORE Overrun error
HAL_UART_ERROR_DMA DMA transfer error
__________________
Убейте шизофреника Вовку Стогова!

Последний раз редактировалось NewWriter; 11.05.2022 в 18:05.
NewWriter вне форума  
Непрочитано 11.05.2022, 18:00  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,134
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Перезагрузка UART_RX на HAL

жертва егэ цифры путает.... понятно.........
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 11.05.2022, 18:48  
sanstan
Прописка
 
Регистрация: 06.03.2007
Сообщений: 144
Сказал спасибо: 22
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
sanstan на пути к лучшему
По умолчанию Re: Перезагрузка UART_RX на HAL

Спасибо всем.
нашел такие костыли, вроде заработало:

Код:
	uint8_t UART_ERR=0;
	if(HAL_UART_Receive_IT(&huart1,RX_data10,8) == HAL_BUSY)// Открываем последовательный порт 1 для приема прерывания
	{
		UART_ERR = 1;
	}
	if(UART_ERR==8){
		UART_ERR = 0;
				//printf("\r\nUart2 is BUSY!--------------------›\r\n");
		while(HAL_UART_Receive_IT(&huart1,RX_data10,8) == HAL_BUSY);// Открываем последовательный порт 1 для приема прерывания
	}
error:8 - ошибка переполнения.
sanstan вне форума  
Непрочитано 11.05.2022, 18:55  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Перезагрузка UART_RX на HAL

Ошибка переполнения? Невовремя читаете данные с регистра приема. Скорость приема высокая, а вовремя не обрабатывается прерывание по приему. Надо перераспределить приоритеты прерываний. У остальных прерываний понизить приоритет через NVIC_SetPriority(). (чем больше число, тем ниже приоритет. числа от 0 до 15). А у этого уарта оставить высокий приоритет (0)
__________________
Убейте шизофреника Вовку Стогова!
NewWriter вне форума  
Непрочитано 11.05.2022, 19:33  
eddy
Почётный гражданин KAZUS.RUN
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Перезагрузка UART_RX на HAL

Если выкинуть кал, то получится компактный понятный код.
А еще советую на передачу использовать DMA. Если МК умеет прерывание по заданному символу, а максимальная длина сообщения фиксирована, можно и на прием DMA запилить!

И да, блокирующий прием по UART — это уж вообще ни в какие ворота не лезет! Получается, пока пользователь будет обед готовить и кота чесать, МК будет ожидать приема, вообще ничего не делая (кроме, разве что, какой-нибудь мелочи, которую через DMA с прерываниями выполняет).
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума  
Непрочитано 11.05.2022, 21:09  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Перезагрузка UART_RX на HAL

Там приём по прерыванию, не блокирующий. По прерыванию нормально работает, особенно при большой разнице между скоростью уарта и скоростью МК.
__________________
Убейте шизофреника Вовку Стогова!
NewWriter вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание вручную проекта с HAL но без STM32CubeMX ? Donker ARM 10 27.03.2025 09:49
[Решено] STM32F407VET HAL CAN не работает worldmasters ARM 22 03.02.2022 11:06
Не работает функция HAL выключение пина. JonRembo ARM 7 08.09.2017 14:51
stm32 HAL UART - не могу понять Ioann_II ARM 57 18.11.2016 16:10
Прием знаковых данных по I2C HAL STM32 dimdidim ARM 9 25.07.2016 22:35


Часовой пояс GMT +4, время: 15:46.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.