Watch Dog STM32 перезагружает ethernet

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Watch Dog STM32 перезагружает ethernet

Сообщение VladislavS »

Я поверил в силу индусского кода. Он работает даже вопреки здравому смыслу. После такого пускай кто-нибудь только попробует назвать его калокубом :kill:

Pazitiff25, прерывания не вызывают, они сами случаются. Ну вот прямо так, нежданчиком, раз и прервалось всё и заколбасилось, и давай всё по буферам раскладывать, а ты только выгребай большой ложкой.
Реклама
Pazitiff25
Родился
Сообщения: 13
Зарегистрирован: Чт сен 27, 2018 18:14:49

Re: Watch Dog STM32 перезагружает ethernet

Сообщение Pazitiff25 »

[uquote="Мурик",url="/forum/viewtopic.php?p=3484606#p3484606"]
Pazitiff25 писал(а):хэндлер это что?
Обработчик прерывания.
Это функция которая для USART может иметь имя USART3_IRQHandler.[/uquote]
Нашел в файле stm32f7xx_it.c функцию void USART3_IRQHandler

Засунул в нее свой код вот так:

void USART3_IRQHandler(void)
{
/* USER CODE BEGIN USART3_IRQn 0 */
uint8_t X; // Описание приемника числа.
/* USER CODE END USART3_IRQn 0 */

HAL_UART_IRQHandler(&huart3);
/* USER CODE BEGIN USART3_IRQn 1 */

HAL_UART_Receive_IT(&huart3, &X, 1); // Вызов прерывания по uаrt.

TIM1->CCR1 = X; // Записываем в счетный регистр принятый по uart X.

/* USER CODE END USART3_IRQn 1 */
}

Глазам не верю, но все работает )) Правильно сделал или что-то накосячил?
Сброс WDG оставил в бесконечном цикле в файле main.c. Тоже все работает, даже если провода выдрать.
Приемник X теперь, я так понимаю, локальный и его ниоткуда не видно.

VladislavS, ну да, вот теперь прерывание нежданчиком вызывается и выгребает из X все что нужно )) Или мой самодельный X это не буфер, и у прерывания свой буфер есть?
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Watch Dog STM32 перезагружает ethernet

Сообщение dosikus »

Код: Выделить всё

HAL_UART_Receive_IT(&huart3, &X, 1); // Вызов прерывания по uаrt.	

TIM1->CCR1 = X; // Записываем в счетный регистр принятый по uart X.
В вашем случае должно быть :

Код: Выделить всё

TIM1->CCR1 =USART3->RDR;
И все, без калокубовской хрени HAL_UART_Receive_IT(&huart3, &X, 1);
Pazitiff25
Родился
Сообщения: 13
Зарегистрирован: Чт сен 27, 2018 18:14:49

Re: Watch Dog STM32 перезагружает ethernet

Сообщение Pazitiff25 »

[uquote="dosikus",url="/forum/viewtopic.php?p=3484812#p3484812"]В вашем случае должно быть :

Код: Выделить всё

TIM1->CCR1 =USART3->RDR;
И все, без калокубовской хрени HAL_UART_Receive_IT(&huart3, &X, 1);[/uquote]
Спасибо большущее, так тоже работает!

Можно еще узнать один момент? Прерывания по uart активизируются функцией __HAL_UART_ENABLE_IT(&huart3, UART_IT_RXNE);
Зачем ставят двойное подчеркивание перед функцией __
Я слышал, это отключение оптимизации. Если его убрать, кейл ругается.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Watch Dog STM32 перезагружает ethernet

Сообщение VladislavS »

[uquote="Pazitiff25",url="/forum/viewtopic.php?p=3485008#p3485008"]Зачем ставят двойное подчеркивание перед функцией __[/uquote]Подчёркивания это неотъемлемая часть имени функции. Их в имени используют в системных и библиотечных функциях чтобы нубы случайно свои функции так же не назвали.
Реклама
Ответить

Вернуться в «ARM»