Jump to content

    
Sign in to follow this  
sidy

STM32F103 проблемы с контролем четности USART

Recommended Posts

Добрый день.

 

Потребовалось использовать контроль четности в USART (STM32f103) и возникла проблема. При отсутствии контроля четности прием идет правильно. Например посылка:

01 04 00 41 00 01 224 02

принимается должным образом.

При включении контроля четности, например odd принимаю ту же самую посылка следующим образом:

01 04 256 41 256 01 224 02

Т.е. вместо 0 принимается 256

 

Вот код инициализации USART:

RCC->APB2ENR|=RCC_APB2ENR_USART1EN;

USART1->CR1=USART1->CR2=USART1->CR3=0;

USART1->BRR=CPU_CLOCK/BAUD_RATE;

USART1->CR1|=USART_CR1_M;

USART1->CR1|=USART_CR1_PCE;

USART1->CR1|=USART_CR1_PS;

USART1->CR1|=USART_CR1_TE;

USART1->CR1|=USART_CR1_RE;

USART1->CR1|=USART_CR1_TCIE;

USART1->CR1|=USART_CR1_RXNEIE;

 

Подскажите в чем может быть дело.

Edited by sidy

Share this post


Link to post
Share on other sites

 

Еще забыл добавить при контроле четности Even, посылка будет выглядеть так:

257 260 00 297 257 480 258

т.е. как-будто к каждому числу прибавили 256

 

256 не влазит в 8-битовый байт. :rolleyes: Дело в интерпретации числа 0x100.

 

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

Edited by sidy

Share this post


Link to post
Share on other sites
т.е. нужно дополнительно преобразовывать значения в зависимости от того какой контроль четности используется?

Так сразу интерпретируйте как 8-битов.

Share this post


Link to post
Share on other sites
Вы имеет ввиду бит USART_CR1_M?

Ага, наверное, его. У меня передаются и принимаются 8-битовые байты. Четность не использую, два стопа делал. Никаких масок.

Share this post


Link to post
Share on other sites

код из прерывания UART'а:

 

    uint32_t status = uart_hw->SR;

    // receiver not empty
    if (USART_SR_RXNE & status)
    {
        uint16_t data = uart_hw->DR;
        if (parity_en)        // "срезать" бит чётности
            data &= 0xFF;

 

parity_en - флажок из настроек драйвера (он многофункциональный).

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