|
STM32L151 USART в режиме SPI, LSB и MSB |
|
|
|
May 28 2014, 20:53
|

Гуру
     
Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702

|
Пытаюсь использовать USART в синхронном режиме, т.е. сделать из него SPI . Но вот беда : бит 0 передаётся первым, а мне нужно в противоположном порядке. Я правильно понимаю, что этой настройки в USART нету ? Заранее спасибо за ответ ! Отвечу сам на свой вопрос :Действительно, настройки нет. Вот тут http://forum.micromouseonline.com/index.php?topic=460.0 приведён ответ из службы поддержки STM. Но есть быстрый способ перекодировать MSB в LSB uint32_t __RBIT(uint32_t value) { __ASM("rbit r0, r0"); __ASM("bx lr"); }
--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
|
|
|
|
|
Aug 1 2014, 11:42
|

Гуру
     
Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702

|
Кто-нибудь может подсказать, почему программа изредка повисает при передаче байта по USART в режиме spi ? Точно такое же зависание я когда-то наблюдал и в асинхронном режиме. В обеих случаях режим MASTER Уже мозг сломал Код while(!(USART2->SR & USART_SR_TXE)) { } USART2->SR &=~ USART_SR_RXNE; USART2->DR=data; while(!(USART2->SR & USART_SR_RXNE)) { //тут висит }
--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
|
|
|
|
|
Aug 1 2014, 15:46
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Потому что USART в синхронном режиме , как SPI. Передача байта происходит одновременно с приёмом. ну то есть у вас все хорошо работает  ? if RXNE=0, then it means that the last valid data has already been read and thus there is nothing to be read in the RDR. This case can occur when the last valid data is read in the RDR at the same time as the new (and lost) data is received. It may also occur when the new data is received during the reading sequence (between the USART_SR register read access and the USART_DR read access). вижу много причин пропадания этого флага... кстати если у вас в отладке где то просматривается RDR, то это тоже наверняка может сбросить флаг.... Почему не использовать идеологически более правильный флаг TC - Transmission complete?
|
|
|
|
|
Aug 2 2014, 14:23
|

Гуру
     
Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702

|
Цитата(Genadi Zawidowski @ Aug 2 2014, 15:03)  А кто-нибудь может объяснить, зачем флаг USART_SR_RXNE сбрасывают вручную, хотя он сбрасывается при чтении регистра данных? The RXNE flag can also be cleared by writing a zero to it. This clearing sequence is recommended only for multibuffer communication. Как я понимаю, рекомендуется. Очищать. Но не понимаю, что значит "multibuffer"
--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
|
|
|
|
|
Aug 2 2014, 17:37
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Почему при работе USART+DMA иногда не происходит прерывание конца передачи DMA TC ( Transmission complete) ? ну блин, а я то откуда знаю  это к стешникам. ДМА надо читать, механизм сложный, много сложностей бывает. Цитата А кто-нибудь может объяснить, зачем флаг USART_SR_RXNE сбрасывают вручную, хотя он сбрасывается при чтении регистра данных Я так понимаю это как дополнительная опция для более простого для понимания кода. К примеру если у вас несколько обменов с 1 2 3 устройством, по прерыванию или полингом у вас идет чтения, в котором проверяется адрес ответа. И вы отключаете обработку 2 устройства, чтобы это место в коде было более читабельно, делаете вместо чтения при адресе равном 2, просто сброс. Операция равносильна, но идеологически более верная. вторая вещь которая приходит в голову, это для процов с FIFO на входе, в LPC1768 к примеру это востребовано. У него очередь по 16(8) байт на входе, можно либо сделать 16(8) чтений чтобы очередь была гарантированна пуста, либо 1 раз сбросить через спец регистр. Думаю что механизм от подобного блока тянется
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|