TOG 0 11 августа, 2022 Опубликовано 11 августа, 2022 · Жалоба Друзья, есть инфракрасный приемопередатчик и я отключаю прием на время пока идет передача. Отключаю глобальное прерывание USART1: HAL_NVIC_DisableIRQ(USART1_IRQn) // Вижу, что бит Enable сбросился Передаю данные по USART1 (без использования прерываний). У меня почему-то выставляется бит Pending в USART1 global interrupt Пытаюсь сбросить бит Pending (HAL_NVIC_ClearPending(USART1_IRQn). Не выходит. Бит не сбрасывается. Потом включаю глобальное прерывание USART1: HAL_NVIC_EnableIRQ(USART1_IRQn) // Вижу, что бит enable установился. И срабатывает прерывание которое обрабатывает мусор. Как мне напрочь отключить прерывание, чтобы бит Pending не выставлялся ? Или как сбросить бит Pending ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 11 августа, 2022 Опубликовано 11 августа, 2022 (изменено) · Жалоба Во-первЫх, кто подопытный? Во-вторых, прерываниями управлять лучше в USARTе - запрет от приёма и от переполнения приёмного регистра, но вычитывать приёмный регистр и сбрасывать флаг переполнения перед возвращением в приём всё равно придётся. По вашей ситуации: проверяйте какие прерывния разрешены в USARTe. Изменено 11 августа, 2022 пользователем Obam Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 12 августа, 2022 Опубликовано 12 августа, 2022 · Жалоба 22 часа назад, TOG сказал: и я отключаю прием на время пока идет передача. Отключаю глобальное прерывание USART1 Хм. А почему бы для отключения приема не сбрасывать бит RE включения приема в самом УСАПП (USART)? Или "это - для слабых!"? 22 часа назад, TOG сказал: Пытаюсь сбросить бит Pending (HAL_NVIC_ClearPending(USART1_IRQn). Не выходит. Бит не сбрасывается. Потому что вы не сбросили бит RXNE или как он там называется в вашем УСАПП. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться