Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 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
Адрес: мурмурляндия
Сообщений: 10,416
Сказал спасибо: 176
Сказали Спасибо 3,128 раз(а) в 2,017 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Перезагрузка UART_RX на HAL

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

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

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

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

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

завязывайте вы с этим калом вобщем
индусы вас с ума сведут
__________________
кагмаподэ магмаподэ
индюк на форуме  
Непрочитано 11.05.2022, 17:44  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,509
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
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
Адрес: мурмурляндия
Сообщений: 10,416
Сказал спасибо: 176
Сказали Спасибо 3,128 раз(а) в 2,017 сообщении(ях)
индюк на пути к лучшему
По умолчанию 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.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,509
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Перезагрузка UART_RX на HAL

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

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

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

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

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Решено] STM32F407VET HAL CAN не работает worldmasters ARM 22 03.02.2022 11:06
Создание вручную проекта с HAL но без STM32CubeMX ? Donker ARM 7 15.12.2018 03:20
Не работает функция 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, время: 22:27.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot