Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Ср окт 17, 2018 23:20:51

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

Pazitiff25, прерывания не вызывают, они сами случаются. Ну вот прямо так, нежданчиком, раз и прервалось всё и заколбасилось, и давай всё по буферам раскладывать, а ты только выгребай большой ложкой.

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

Ср окт 17, 2018 23:23:22

Pazitiff25 писал(а):хэндлер это что?
Обработчик прерывания.
Это функция которая для USART может иметь имя USART3_IRQHandler.

Нашел в файле 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 это не буфер, и у прерывания свой буфер есть?

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

Чт окт 18, 2018 07:32:07

Код:
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);

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

Чт окт 18, 2018 14:04:02

В вашем случае должно быть :
Код:
TIM1->CCR1 =USART3->RDR;

И все, без калокубовской хрени HAL_UART_Receive_IT(&huart3, &X, 1);

Спасибо большущее, так тоже работает!

Можно еще узнать один момент? Прерывания по uart активизируются функцией __HAL_UART_ENABLE_IT(&huart3, UART_IT_RXNE);
Зачем ставят двойное подчеркивание перед функцией __
Я слышал, это отключение оптимизации. Если его убрать, кейл ругается.

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

Чт окт 18, 2018 17:12:50

Зачем ставят двойное подчеркивание перед функцией __
Подчёркивания это неотъемлемая часть имени функции. Их в имени используют в системных и библиотечных функциях чтобы нубы случайно свои функции так же не назвали.
Ответить