|
STM32F407 Проблемы с SPI, Не отсылается байт сразу после проверки бита ТХЕ в регистре SR |
|
|
|
Apr 21 2013, 05:50
|

Знающий
   
Группа: Свой
Сообщений: 618
Регистрация: 7-06-08
Из: USSR
Пользователь №: 38 121

|
Вот код: Код while ( ( (SPI2 -> SR) & 0x2 ) == RESET) { //wait until TXE bit is 1 } SPI2 -> DR = d0; когда этот код исполняется на чипе, или в дебаггере без брейкпоинтов то на осциллографе я только вижу SCK поднятый а MOSI на нуле. Но когда я исполняю этот код по очереди линию за линией в дебаггере, или же ставлю брейк поинт в дебаггере между циклом while и строчкой с записью в DR, а затем достигнув брейкпоинта опятй продолжаю исполнять код, то на осциллографе вижу переключение SCK и отсылку битов d0. в чем может быть проблема? Мне например кажется что SPI2 -> DR = d0; который сразу следует после цикла не дает возможности SPI контроллеру быстро среагировать и послать бит, а исполняя код строка за строкой все работает. но ведь с другой стороны, я же циклом проверяю бит ТХЕ!? и если я вышел с цикла то буфер свободен и должен бит нормально отослатся? (я пробовал тоже самое циклом проверять и бит BSY, тоже самое) есть идеи?
--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
|
|
|
|
|
 |
Ответов
|
Apr 22 2013, 12:28
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Я свои SPI в STM32F207 инициализировал так. Тактирование, естественно, задавал раньше, вместе с остальными устройствами. И больше не трогал. CODE /* SPI1 -- связь с SFM M25PE40 8-bit, MSB first, SPEn, Fpclk2 / 4 (15 MHz), Master, CPOL=0, CPHA=0 */ SPI1->CR1 = SPI_CR1_CPHA * 0 | // Clock Phase SPI_CR1_CPOL * 0 | // Clock Polarity SPI_CR1_MSTR * 1 | // Master Selection SPI_CR1_BR_0 * 1 | // Baud Rate Control - fpclk2 / 4 = 15 MHz SPI_CR1_BR_1 * 0 | // SPI_CR1_BR_2 * 0 | // SPI_CR1_SPE * 1 | // SPI Enable SPI_CR1_LSBFIRST * 0 | // Frame Format SPI_CR1_SSI * 1 | // Internal slave select SPI_CR1_SSM * 1 | // Software slave management SPI_CR1_RXONLY * 0 | // Receive only SPI_CR1_DFF * 0 | // Data Frame Format SPI_CR1_CRCNEXT * 0 | // Transmit CRC next SPI_CR1_CRCEN * 0 | // Hardware CRC calculation enable SPI_CR1_BIDIOE * 0 | // Output enable in bidirectional mode SPI_CR1_BIDIMODE * 0; // Bidirectional data mode enable SPI1->CR2 = SPI_CR2_RXDMAEN * 0 | // Rx Buffer DMA Enable SPI_CR2_TXDMAEN * 0 | // Tx Buffer DMA Enable SPI_CR2_SSOE * 0 | // SS Output Enable SPI_CR2_FRF * 0 | // Protocol format - 0: SPI Motorola mode, 1: SPI TI mode SPI_CR2_ERRIE * 0 | // Error Interrupt Enable SPI_CR2_RXNEIE * 0 | // RX buffer Not Empty Interrupt Enable SPI_CR2_TXEIE * 0; // Tx buffer Empty Interrupt Enable // SPI1->CR1 |= SPI_CR1_MSTR | SPI_CR1_SPE; // Разрешить, Мастер /* SPI2 -- конфигурирование EP3C5 CONF_N (NSS) переключается программно */ SPI2->CR1 = SPI_CR1_CPHA * 0 | // Clock Phase SPI_CR1_CPOL * 0 | // Clock Polarity SPI_CR1_MSTR * 1 | // Master Selection SPI_CR1_BR_0 * 0 | // Baud Rate Control - fpclk1 / 2 = 15 MHz SPI_CR1_BR_1 * 0 | // SPI_CR1_BR_2 * 0 | // SPI_CR1_SPE * 1 | // SPI Enable (раньше включалось позже!) SPI_CR1_LSBFIRST * 1 | // Frame Format SPI_CR1_SSI * 1 | // Internal slave select (раньше задавалось!) SPI_CR1_SSM * 1 | // Software slave management SPI_CR1_RXONLY * 0 | // Receive only SPI_CR1_DFF * 0 | // Data Frame Format - 8 bit SPI_CR1_CRCNEXT * 0 | // Transmit CRC next SPI_CR1_CRCEN * 0 | // Hardware CRC calculation enable SPI_CR1_BIDIOE * 0 | // Output enable in bidirectional mode SPI_CR1_BIDIMODE * 0; // Bidirectional data mode enable SPI2->CR2 = SPI_CR2_RXDMAEN * 0 | // Rx Buffer DMA Enable SPI_CR2_TXDMAEN * 0 | // Tx Buffer DMA Enable SPI_CR2_SSOE * 0 | // SS Output Enable (все равно используется GPIO?) SPI_CR2_FRF * 0 | // Protocol format - 0: SPI Motorola mode, 1: SPI TI mode SPI_CR2_ERRIE * 0 | // Error Interrupt Enable SPI_CR2_RXNEIE * 0 | // RX buffer Not Empty Interrupt Enable SPI_CR2_TXEIE * 0; // Tx buffer Empty Interrupt Enable // SPI2->CR1 |= SPI_CR1_SPE;
/* SPI3 -- регистр управления аналоговыми узлами 8-bit, MSB first, SPEn, Fpclk1 / 2 (15MHz), Master, CPOL=0, CPHA=0 74HC595 SCK - Pos, AD5314 SCK - Neg (изменить CPOL) */ SPI3->CR1 = SPI_CR1_CPHA * 0 | // Clock Phase SPI_CR1_CPOL * 0 | // Clock Polarity HC595 SPI_CR1_MSTR * 1 | // Master Selection SPI_CR1_BR_0 * 0 | // Baud Rate Control - fpclk1 / 2 = 15 MHz SPI_CR1_BR_1 * 0 | // SPI_CR1_BR_2 * 0 | // SPI_CR1_SPE * 1 | // SPI Enable SPI_CR1_LSBFIRST * 0 | // Frame Format SPI_CR1_SSI * 1 | // Internal slave select SPI_CR1_SSM * 1 | // Software slave management SPI_CR1_RXONLY * 0 | // Receive only SPI_CR1_DFF * 0 | // Data Frame Format (8 bit) SPI_CR1_CRCNEXT * 0 | // Transmit CRC next SPI_CR1_CRCEN * 0 | // Hardware CRC calculation enable SPI_CR1_BIDIOE * 0 | // Output enable in bidirectional mode SPI_CR1_BIDIMODE * 0; // Bidirectional data mode enable SPI3->CR2 = SPI_CR2_RXDMAEN * 0 | // Rx Buffer DMA Enable SPI_CR2_TXDMAEN * 0 | // Tx Buffer DMA Enable SPI_CR2_SSOE * 0 | // SS Output Enable SPI_CR2_FRF * 0 | // Protocol format - 0: SPI Motorola mode, 1: SPI TI mode SPI_CR2_ERRIE * 0 | // Error Interrupt Enable SPI_CR2_RXNEIE * 0 | // RX buffer Not Empty Interrupt Enable SPI_CR2_TXEIE * 0; // Tx buffer Empty Interrupt Enable
|
|
|
|
Сообщений в этой теме
BlackOps STM32F407 Проблемы с SPI Apr 21 2013, 05:50 ViKo Вы только посылаете, ничего не читаете?
Покажите, ... Apr 21 2013, 06:30 BlackOps после - бесконечный цикл.
до - ничего касательно э... Apr 21 2013, 06:46 ViKo На тактовые частоты посмотрите, все ли такие, как ... Apr 21 2013, 08:02 BlackOps вот настройка SPI
Код//===========================... Apr 21 2013, 08:30 adnega Цитата(BlackOps @ Apr 21 2013, 12:30) в ч... Apr 21 2013, 08:39 Golikov A. идея такая
данные в регистр
включили передатчик (д... Apr 21 2013, 08:41 BlackOps Цитата(Golikov A. @ Apr 21 2013, 13:41) и... Apr 21 2013, 08:43 Golikov A. ну у меня нет даташита на все стм я не могу провер... Apr 21 2013, 12:54 BlackOps Да нет же!
Все правильно сдесь!
while ( (... Apr 21 2013, 17:20 Genadi Zawidowski А что за константа RESET?
Вот мой вариант (медлен... Apr 21 2013, 17:37 BlackOps вот моя константа как объявлена: typedef enum {RE... Apr 21 2013, 17:45 Genadi Zawidowski Цитатаа зачем делать вот это: SPI1->DR & SP... Apr 21 2013, 17:59 BlackOps да нет не заработало, попробовал также один байт и... Apr 21 2013, 18:04 Golikov A. ну остается только последнее SPI2 или SPI1
точно ч... Apr 21 2013, 18:11 BlackOps Да, как яуже говорил, если например ставлю брейк м... Apr 21 2013, 18:21 Genadi Zawidowski Покажите код, который получился после того, как Вы... Apr 21 2013, 18:31 BlackOps вот по вашему образцу код мой:
Код(void) ... Apr 21 2013, 18:41 Golikov A. у меня глупый вопрос, а скорости SPI хватает? вы ч... Apr 21 2013, 18:50 BlackOps Цитата(Golikov A. @ Apr 21 2013, 22:50) в... Apr 21 2013, 19:14 Genadi Zawidowski Подсократили, однако...
Функцию выдачи байта на SP... Apr 21 2013, 18:58 BlackOps естесственно хватает, вот что вижу на осциллографе... Apr 21 2013, 19:05 Genadi Zawidowski Так... 1) А что с выходом чипселекта? Сказать что ... Apr 21 2013, 19:12 Genadi Zawidowski Раз с глухим while не работает, точно с аппаратным... Apr 21 2013, 19:15 Golikov A. Не ну тоды магия.
А во придумал!!! А... Apr 21 2013, 19:20 BlackOps попробовал добавление SPI_CR1_DFF, тоже самое, не ... Apr 21 2013, 19:31 Genadi Zawidowski DFF вообще не нужно (этио 16 бит слова).
Вам надо ... Apr 21 2013, 19:41 BlackOps Ну а что там разбиратся?
у меня и SSM=1 и SSI = 1
... Apr 21 2013, 19:53 Golikov A. а проц то вообще запускается? без дебагера? Может ... Apr 21 2013, 19:59 BlackOps проц нормально запускается и работает без дебаггер... Apr 21 2013, 20:41 Golikov A. ну тогда только что есть какое то прерывание, кот... Apr 21 2013, 21:04 BlackOps ладно, мне кажется я частичто решил проблему.
Се... Apr 21 2013, 21:10 Golikov A. думаю стоит ли у вас микросхема рессета проца?
а ... Apr 21 2013, 21:15 BlackOps да было иначе периферия не работала бы вообще.
Во... Apr 21 2013, 21:37 HHIMERA Цитата(BlackOps @ Apr 22 2013, 00:37) Инт... Apr 22 2013, 03:48 Golikov A. а как SPI должен отличить есть что-то на входе или... Apr 22 2013, 03:29 BlackOps Цитата(Golikov A. @ Apr 22 2013, 08:29) К... Apr 22 2013, 04:26  adnega Цитата(BlackOps @ Apr 22 2013, 08:26) Его... Apr 22 2013, 10:39 Golikov A. я вот поглядел даташит(как и реф мануал) и не увид... Apr 22 2013, 04:05 HHIMERA Цитата(Golikov A. @ Apr 22 2013, 07:05) т... Apr 22 2013, 07:07  Golikov A. Цитата(HHIMERA @ Apr 22 2013, 11:07) Как ... Apr 22 2013, 08:05   HHIMERA [DELETED] Apr 22 2013, 09:49    Golikov A. [DELETED]
Цитата(Genadi Zawidowski @ Apr 22 2... Apr 22 2013, 11:01 ViKo HHIMERA выразился не точно. TXE выставляется сразу... Apr 22 2013, 04:39 Genadi Zawidowski Наконец-то увидел инициализацию.
Зачем SSI и SSM о... Apr 22 2013, 10:48 Golikov A. Цитата(Genadi Zawidowski @ Apr 22 2013, 14... Apr 22 2013, 15:56  BlackOps Цитата(Golikov A. @ Apr 22 2013, 19:56) в... Apr 22 2013, 21:04 adnega У меня хорошо работает такая инициализация:
CODEvo... Apr 22 2013, 11:06 Genadi Zawidowski Цитатав нем утверждается что если поставить SSM, ч... Apr 22 2013, 16:18 Golikov A. не понятно почему пауза перед записью в регистр по... Apr 22 2013, 16:28 ViKo Я так и не увидел ответа, что SPI не работал из-за... Apr 23 2013, 04:11 Golikov A. Цитата(ViKo @ Apr 23 2013, 08:11) Я так и... Apr 23 2013, 04:26 Genadi Zawidowski Если вход NSS перед началом передачи где-то около ... Apr 23 2013, 06:16 BlackOps Цитата(Golikov A. @ Apr 23 2013, 08:26) н... Apr 23 2013, 07:41 Genadi Zawidowski Нет желания подтянуть к "1" вывод NSS? И... Apr 23 2013, 08:49 HHIMERA Детский сад... гадание пальцем на манной каше... ... Apr 23 2013, 09:37  ViKo Цитата(HHIMERA @ Apr 23 2013, 12:37) Выкл... Apr 23 2013, 09:41   Tolyaha Цитата(ViKo @ Apr 23 2013, 12:41) Имею Ди... Apr 23 2013, 10:11    HHIMERA Цитата(Tolyaha @ Apr 23 2013, 13:11) Не в... Apr 23 2013, 11:01 Genadi Zawidowski ЦитатаДетский сад... гадание пальцем на манной каш... Apr 23 2013, 11:14 Golikov A. написать что типа в мануале все верно, а все дурак... Apr 23 2013, 16:21 BlackOps Короче,чтобы начать плностью с нуля, пошел взял но... Apr 23 2013, 19:46 Golikov A. а где варианта
SSM =1, SSI = 0?
вроде как инструк... Apr 24 2013, 03:41 BlackOps Цитата(Golikov A. @ Apr 24 2013, 08:41) К... Apr 24 2013, 04:13  adnega Цитата(BlackOps @ Apr 24 2013, 08:13) Про... Apr 24 2013, 04:37 BlackOps затем что с ним не работает как надо!
SSM = 0... Apr 24 2013, 04:51 adnega Цитата(BlackOps @ Apr 24 2013, 08:51) зат... Apr 24 2013, 04:54 BlackOps Я не пойму немного, разве целью установки SSOE=1 н... Apr 24 2013, 05:05 adnega Цитата(BlackOps @ Apr 24 2013, 09:05) И е... Apr 24 2013, 06:22  BlackOps Цитата(adnega @ Apr 24 2013, 11:22) Никто... Apr 24 2013, 07:45 Golikov A. SSM=1, SSI = 0 - тут пин NSS в 1 вроде должен быть... Apr 24 2013, 05:51 ViKo http://electronix.ru/forum/index.php?showt...t... Apr 24 2013, 07:51 HHIMERA Всё это, конечно... очень интересно...
"А ... Apr 24 2013, 11:44 Golikov A. Цитата(HHIMERA @ Apr 24 2013, 15:44) Всё ... Apr 24 2013, 13:52 Genadi Zawidowski Цитатапоетому поставил небольшой цикл for, чтобы о... Apr 24 2013, 12:00 BlackOps Пишу с опозданием надобыло кое какие проекты сдава... May 2 2013, 03:51
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|