Timmy 1 19 июня, 2019 Опубликовано 19 июня, 2019 · Жалоба 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", которые менять не планируется, будет записываться единица, иначе можно непреднамеренно сбросить любой бит, если он будет аппаратно установлен между чтением и записью регистра. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться