Jump to content

    
Sign in to follow this  
Neo_Matrix

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

Recommended Posts

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", которые менять не планируется, будет записываться единица, иначе можно непреднамеренно сбросить любой бит, если он будет аппаратно установлен между чтением и записью регистра.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this