sidy 1 31 августа, 2018 Опубликовано 31 августа, 2018 (изменено) · Жалоба Добрый день. Потребовалось использовать контроль четности в 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; Подскажите в чем может быть дело. Изменено 31 августа, 2018 пользователем sidy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 31 августа, 2018 Опубликовано 31 августа, 2018 · Жалоба 256 не влазит в 8-битовый байт. :rolleyes: Дело в интерпретации числа 0x100. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sidy 1 31 августа, 2018 Опубликовано 31 августа, 2018 (изменено) · Жалоба Еще забыл добавить при контроле четности Even, посылка будет выглядеть так: 257 260 00 297 257 480 258 т.е. как-будто к каждому числу прибавили 256 256 не влазит в 8-битовый байт. :rolleyes: Дело в интерпретации числа 0x100. т.е. нужно дополнительно преобразовывать значения в зависимости от того какой контроль четности используется? Изменено 31 августа, 2018 пользователем sidy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 32 31 августа, 2018 Опубликовано 31 августа, 2018 · Жалоба Четность + данные = 9 бит Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 31 августа, 2018 Опубликовано 31 августа, 2018 · Жалоба т.е. нужно дополнительно преобразовывать значения в зависимости от того какой контроль четности используется? Так сразу интерпретируйте как 8-битов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sidy 1 31 августа, 2018 Опубликовано 31 августа, 2018 · Жалоба Так сразу интерпретируйте как 8-битов. Маску наложить? Думаю пройдет такой вариант. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 31 августа, 2018 Опубликовано 31 августа, 2018 · Жалоба Маску наложить? Думаю пройдет такой вариант. Настройки изучите в Referense Manual. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sidy 1 3 сентября, 2018 Опубликовано 3 сентября, 2018 · Жалоба Настройки изучите в Referense Manual. Вы имеет ввиду бит USART_CR1_M? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 3 сентября, 2018 Опубликовано 3 сентября, 2018 · Жалоба Вы имеет ввиду бит USART_CR1_M? Ага, наверное, его. У меня передаются и принимаются 8-битовые байты. Четность не использую, два стопа делал. Никаких масок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 17 сентября, 2018 Опубликовано 17 сентября, 2018 · Жалоба код из прерывания 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 - флажок из настроек драйвера (он многофункциональный). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться