Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F100 - не могу записать данные в SPI_DR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
RAmsi
SPI1 в режиме slave. Настроено прерывание по получению байта от SPI master от другого контроллера. В прерывании пытаюсь записать в SPI_DR байт из буфера (или просто число 0b00110011), который будет передаваться при следующем сеансе по инициативе masterа. Master принимает сплошные нули, а SPI1_DR в slave после SPI1->DR = 0b00110011 или SPI_I2C_SendData(...) не меняет свое значение. Как затолкнуть данные в приемный буфер SPI slave? Фантазия по поиску криворукого бага иссякла, тем более, что подобная конструкция раньше прекрасно работала. Код, настройки SPI и состояние регистров в скринах дебага.
uriy
Покажите настройки GPIO
Сергей Борщ
QUOTE (RAmsi @ Jul 28 2016, 18:58) *
Master принимает сплошные нули
С этим надо разбираться. Для начала отключите slave или его CS и замкните MOSI-MISO на мастере. После этого мастер должен принимать то, что сам же и передает. Когда это заработает - можно будет приниматься за slave.
QUOTE (RAmsi @ Jul 28 2016, 18:58) *
а SPI1_DR в slave после SPI1->DR = 0b00110011 или SPI_I2C_SendData(...) не меняет свое значение.
А вот это нормально. На самом деле там два регистра - в один данные принимаются (именно его содержимое вы видете, когда читаете DR), а из второго передаются (в него они попадают, когда вы пишете в DR). То есть независимо от того, что вы записали - читаться все равно будет последний принятый байт.
RAmsi
Цитата
Покажите настройки GPIO

GPIO в скрине. Извините, но только в таком виде. Используется SPI1 - NSS отключен, PA5 - клокер, PA6 - MISO, PA7 - MOSI
Цитата
На самом деле там два регистра - в один данные принимаются (именно его содержимое вы видете, когда читаете DR), а из второго передаются (в него они попадают, когда вы пишете в DR).

Я надеялся, что байт на отправку он в старшие 8 бит запишет rolleyes.gif rolleyes.gif Ну да ладно... не хочет на отправку байты показывать - фиг с ним.
Но я ту при инициализации SPI данные на отправку записал 0b01010101 - получилось! А в подпрограмме записывать не хочет. Данные анализатора тоже в скрине.


Еще интересней. Поставил BreakPoint чуть ниже. Он данные из подпрограммы записал. Такое ощущение, что он не успевает байт в буфер на отправку закидывать, а Master с него уже новую отправку тактирует.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.