EugeNNe 0 1 июля, 2022 Опубликовано 1 июля, 2022 · Жалоба Работал с SPI на F10x серии и F303 - никаких вопросов не возникало. С F030 затык вышел: Почитал шит, инициализировал SPI: режим 8-им битной передачи. Смотрю осцилоскопом - при передаче 1 байта генерится 16 тактовых импульсов, как будто передаю 2. В чём засада? С приёмом вроде понятно- бит SPI_CR2_FRXTH устанавливаю ( приём при 1/4 FIFO ). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 18 1 июля, 2022 Опубликовано 1 июля, 2022 · Жалоба Тоже натыкался. Попробуйте отправлять так: *(__IO uint8_t *) (&SPIx->DR) = Data; https://balmerdx.livejournal.com/124604.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 1 июля, 2022 Опубликовано 1 июля, 2022 · Жалоба Невнимательно читали документацию - обращаетесь к регистру данных как к 16-битному, а надо как к 8-битному. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EugeNNe 0 1 июля, 2022 Опубликовано 1 июля, 2022 · Жалоба Всё верно, упустил вышеобозначенный момент. Заработало. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EugeNNe 0 27 июля, 2022 Опубликовано 27 июля, 2022 · Жалоба Опять бяда с этим SPI. Данные передаются, но не читаются. Осцилографом с декодировкой SPI вижу что данные передаются, Slave выдаёт в ответ то что положено, но из DR читается всегда 0. Формат передачи данных 8-ми битный, FRXTH = 1. Вижу что после передачи RXEN = 1, FRLVL = 01, т.е. в буфер что то прилетело в итоге Процедура обмена совмещает приём и передачу: if ( SPI1->SR & SPI_SR_TXE ) { *(__IO uint8_t *)(&SPI1->DR) = SendData; } while( !( SPI1->SR & SPI_SR_RXNE) ) { } ReceiveData = *(__IO uint8_t *)(&SPI1->DR); Чего опять не хватает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 27 июля, 2022 Опубликовано 27 июля, 2022 · Жалоба Ну а то, что RXNE не был установлен до транзакции - уверены? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EugeNNe 0 27 июля, 2022 Опубликовано 27 июля, 2022 · Жалоба В 27.07.2022 в 15:29, Arlleex сказал: Ну а то, что RXNE не был установлен до транзакции - уверены? Да. В отладчике вижу как RXNE устанавливается при отправке байта, но при этом DR=0, при чтении DR видно как сбрасывается RXNE и FRLVL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 27 июля, 2022 Опубликовано 27 июля, 2022 · Жалоба Отладчиком нельзя смотреть регистры периферии. Нога MISO правильно настроена? Альтернативная, на нужном пине, все дела. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 2 27 июля, 2022 Опубликовано 27 июля, 2022 · Жалоба У ST же есть отличные сниппеты для STM32F0! Советую попробовать. Вот, сам оттуда брал и малость под себя изменял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 28 июля, 2022 Опубликовано 28 июля, 2022 · Жалоба On 7/27/2022 at 5:15 PM, EugeNNe said: Опять бяда с этим SPI. Данные передаются, но не читаются Смотрю, что у F0 SPI похож на тот, что у F7, только без FIFO. Spoiler //////////////////////////////////////////////////////////////////////////////// // Цикл обмена по SPI inline uint8 spi_exchange( uint8 _aByte ) { uint8 tmp8; while( wiz_spi -> SR & SPI_SR_RXNE ) { tmp8 = wiz_spi -> DR; // TODO: добавить защиту от зависания. }; *( volatile uint8 *)&( wiz_spi -> DR) = _aByte; while( !( wiz_spi -> SR & SPI_SR_RXNE ) ) { // TODO: добавить защиту от зависания. } tmp8 = *( volatile uint8*)&( wiz_spi -> DR ); return( tmp8 ); } //////////////////////////////////////////////////////////////////////////////// // принять байт через SPI uint8 spi_rb( void ) { return( spi_exchange( 0 ) ); } //////////////////////////////////////////////////////////////////////////////// // передать байт через SPI void spi_wb( uint8_t _aByte ) { spi_exchange( _aByte ); } //////////////////////////////////////////////////////////////////////////////// Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EugeNNe 0 28 июля, 2022 Опубликовано 28 июля, 2022 (изменено) · Жалоба В 27.07.2022 в 15:46, Arlleex сказал: Нога MISO правильно настроена? Альтернативная, Настройку пина MISO в первую очередь проверил. В 27.07.2022 в 17:34, Eddy_Em сказал: У ST же есть отличные сниппеты для STM32F0! Советую попробовать. Вот, сам оттуда брал и малость под себя изменял. Спасибо, посмотрю. Заработало. Всё же дело было в конфигурации MISO Изменено 28 июля, 2022 пользователем EugeNNe Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться