Перейти к содержанию
    

STM32F407 зависание UART4 периферийного модуля

On 5/14/2019 at 2:02 PM, Neo_Matrix said:

DMA не использую, так как скорость 9600, максимальная посылка байтов 100 от силы, в основном по 5-10 байт, периодичность посылок 100мс а то и более. Как видите в ДМА нет резона.

Вот обработчик прерывания, правда не последней версии. Но глючит в любом из них.(Немного отредактировал пост)


if((read_bit(cr1_reg, LL_USART_CR1_TCIE) != (CLEAR)) && \
   (read_bit(sr_reg, LL_USART_SR_TC) != (CLEAR))) { 
       clear_bit_reg(uart_data->uart_typedef, SR, USART_SR_TC); 
       clear_bit_reg(uart_data->uart_typedef, CR1, USART_CR1_TCIE); 
       drv_tx_from_is = r(uart_data->driver_data); //return; 
}
 

Вот тут достаточно распространённая ошибка - так как регистр SR содержит биты типа "w0", его категорически запрещено менять простыми операторами типа &= , надо гарантировать, что в те биты "w0", которые менять не планируется, будет записываться единица, иначе можно непреднамеренно сбросить любой бит, если он будет аппаратно установлен между чтением и записью регистра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...