реклама на сайте
подробности

 
 
> SPI1 в STM32F429 считывает 0 в младший бит
Tarbal
сообщение Jun 16 2016, 00:06
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Если не давать сброс на периферийное устройство (slave), подключенное к SPI, то у него на выходе MISO стоит твердая единица. Однако если считывать в процессор, то вместо 0xFF читается 0xFE.

Происходит ошибочное чтение нестабильно. Иногда читается правильно. Однако если к выходу SPI CLK присоединить щуп осциллографа, то правильного чтения больше не происходит. Стабильно читается 0xFE.

Я нашел в форуме ST, что такое происходит если читать данные не дожидаясь установки RXNE в единицу. Однако в моем коде я жду установки RXNE в единицу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Jun 19 2016, 21:14
Сообщение #2


Универсальный солдатик
******

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



Ага, нашел, jumper. Он еще и точность имеет, и мощность рассеивания. biggrin.gif

Цитата(Tarbal @ Jun 19 2016, 23:58) *
Вы можете называть как вам угодно, но их принято называть резисторами.

Я буду называть перемычками, как принято.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jun 19 2016, 22:23
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(ViKo @ Jun 20 2016, 01:14) *
Ага, нашел, jumper. Он еще и точность имеет, и мощность рассеивания. biggrin.gif


Я буду называть перемычками, как принято.


sm.gif


Цитата(ViKo @ Jun 19 2016, 19:28) *
У меня есть STM32F429I-Disco. Если выложите код, похожий на нерабочий, могу посмотреть. Но с нуля писать лень. Вдруг не не заработает. rolleyes.gif


Вот такой код. Только теперь вместо нуля всегда читает единицу и только в первом интерфейсе.

CODE

HAL_StatusTypeDef SPI_WaitOnFlagTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, FlagStatus Status, uint32_t Timeout)
{
uint32_t start = jiffies;
while(__HAL_SPI_GET_FLAG(hspi, Flag) == Status){
if(jiffies - start >= Timeout){
return -HAL_TIMEOUT;
}
}
return HAL_OK;
}
#if 0
/* This funtion is used to transmit and receive data
* with SPI1
* data --> data to be transmitted
* returns received value
*/
uint8_t SPI1_send(uint8_t data){

SPI1->DR = data; // write data to be transmitted to the SPI data register
while( !(SPI1->SR & SPI_I2S_FLAG_TXE) ); // wait until transmit complete
while( !(SPI1->SR & SPI_I2S_FLAG_RXNE) ); // wait until receive complete
while( SPI1->SR & SPI_I2S_FLAG_BSY ); // wait until SPI is not busy anymore
return SPI1->DR; // return received data from SPI data register
}
#endif

int SPI_Transmit1(SPI_HandleTypeDef *hspi, uint8_t* val, uint32_t timeout)
{
FlagStatus Status;
__HAL_SPI_ENABLE(hspi);
hspi->Instance->DR = *val;
Status = SPI_WaitOnFlagTimeout(hspi, SPI_FLAG_TXE, RESET, timeout);
if(HAL_OK != Status){
return Status;
}
Status = SPI_WaitOnFlagTimeout(hspi, SPI_FLAG_RXNE, RESET, timeout);
if(HAL_OK != Status){
return Status;
}
Status = SPI_WaitOnFlagTimeout(hspi, SPI_FLAG_BSY, SET, timeout);
*val = hspi->Instance->DR;
return Status;
}

int write_spi_reg(uint8_t chip_id, uint8_t reg_addr, uint8_t val)
{
SPI_HandleTypeDef* hspi;
uint8_t buf[SPI_WRITE_LEN];
uint8_t i;
uint8_t id;
GPIO_TypeDef* port;
uint16_t pin;

HAL_StatusTypeDef ret;


if(CHIPS_AMOUNT <= chip_id){
return -WRONG_PARAMETER;
}

hspi = hspi1;
id = 0
port = GPIOA;
pin = GPIO_PIN_4;


buf[0] = WR_SPI_CMD(id);
buf[1] = reg_addr;
buf[2] = val;

for(i = 0; i < SPI_WRITE_LEN; i++){
HAL_GPIO_WritePin(port, pin, 0);
short_delay(7);
ret = SPI_Transmit1(hspi, &buf[i], SPI_TIMEOUT);
HAL_GPIO_WritePin(port, pin, 1);
short_delay(7);

if(HAL_OK != ret){
responce_handle(ret);
return -ret;
}
}
return NO_ERROR;
}

int read_spi_reg(uint8_t chip_id, uint8_t reg_addr)
{
SPI_HandleTypeDef* hspi;
uint8_t buf[2];
uint8_t id;
HAL_StatusTypeDef ret;
GPIO_TypeDef* port;
uint16_t pin;
chip_interface_t* chip_if;



if(CHIPS_AMOUNT <= chip_id){
return;
}
hspi = hspi1;
id = 0
port = GPIOA;
pin = GPIO_PIN_4;

buf[0] = RD_SPI_CMD(id);
buf[1] = reg_addr;

HAL_GPIO_WritePin(port, pin, 0);
short_delay(7);
ret = SPI_Transmit1(hspi, &buf[0], SPI_TIMEOUT);

HAL_GPIO_WritePin(port, pin, 1);
short_delay(7);

HAL_GPIO_WritePin(port, pin, 0);
short_delay(7);
ret = SPI_Transmit1(hspi, &buf[1], SPI_TIMEOUT);
HAL_GPIO_WritePin(port, pin, 1);
short_delay(7);

if(HAL_OK != ret){
responce_handle(ret);
return (uint16_t) -1;
}

HAL_GPIO_WritePin(port, pin, 0);
short_delay(7);
ret = SPI_Transmit1(hspi, &buf[0], SPI_TIMEOUT);
HAL_GPIO_WritePin(port, pin, 1);
short_delay(7);

if(HAL_OK != ret){
responce_handle(ret);
}

return (uint32_t)buf[0];
}


Конфигурация:
Registers
SPI_CR1 = 0x0000015F
SPI_CR2 = 0x00000004
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Tarbal   SPI1 в STM32F429 считывает 0 в младший бит   Jun 16 2016, 00:06
- - RadiatoR   Попробуйте прочитать по флагу BSY. Вообще есть ли ...   Jun 16 2016, 05:11
|- - scifi   Цитата(RadiatoR @ Jun 16 2016, 08:11) По...   Jun 16 2016, 07:13
|- - Tarbal   Цитата(RadiatoR @ Jun 16 2016, 09:11) По...   Jun 16 2016, 12:37
|- - RadiatoR   Цитата(Tarbal @ Jun 16 2016, 15:37) Оба к...   Jun 16 2016, 18:56
|- - adnega   Цитата(Tarbal @ Jun 16 2016, 15:37) Но у ...   Jun 16 2016, 19:38
||- - Tarbal   Цитата(adnega @ Jun 16 2016, 23:38) Видел...   Jun 17 2016, 11:59
||- - adnega   Цитата(Tarbal @ Jun 17 2016, 14:59) На фо...   Jun 17 2016, 12:15
|- - ViKo   Цитата(Tarbal @ Jun 16 2016, 15:37) у мен...   Jun 17 2016, 18:52
|- - adnega   Цитата(ViKo @ Jun 17 2016, 21:52) Повесьт...   Jun 17 2016, 18:56
|- - ViKo   Цитата(adnega @ Jun 17 2016, 21:56) Дык, ...   Jun 17 2016, 20:12
|- - adnega   Цитата(ViKo @ Jun 17 2016, 23:12) И де вы...   Jun 17 2016, 22:46
|- - ViKo   Цитата(adnega @ Jun 18 2016, 01:46) На вы...   Jun 18 2016, 06:32
|- - adnega   Цитата(ViKo @ Jun 18 2016, 09:32) "П...   Jun 18 2016, 08:40
|- - ViKo   Цитата(adnega @ Jun 18 2016, 11:40) На пи...   Jun 18 2016, 10:45
|- - adnega   Цитата(ViKo @ Jun 18 2016, 13:45) С желез...   Jun 18 2016, 11:24
|- - ViKo   Цитата(adnega @ Jun 18 2016, 14:24) С чег...   Jun 18 2016, 13:01
|- - adnega   Цитата(ViKo @ Jun 18 2016, 16:01) С перво...   Jun 18 2016, 13:24
- - SasaVitebsk   А какая настройка?   Jun 16 2016, 05:45
- - ViKo   Смотря, каким фронтом записываете и читаете. Надо ...   Jun 16 2016, 06:06
- - RadiatoR   Вообще сам флаг BSY для приема использовать не пра...   Jun 16 2016, 07:34
- - ViKo   Что-то мне подсказывает, что если прочитать руково...   Jun 17 2016, 13:16
|- - Tarbal   Цитата(ViKo @ Jun 17 2016, 17:16) Не дума...   Jun 17 2016, 14:47
- - Alex11   А у Вас что, на клоке вход и нет ни сигнала ни под...   Jun 17 2016, 16:02
|- - Tarbal   Цитата(Alex11 @ Jun 17 2016, 20:02) А у В...   Jun 17 2016, 18:23
- - ViKo   То, что читалось 0xFE, связано с работой не по ман...   Jun 18 2016, 14:07
|- - adnega   Цитата(ViKo @ Jun 18 2016, 17:07) Вы прос...   Jun 18 2016, 19:25
|- - ViKo   Цитата(adnega @ Jun 18 2016, 22:25) Посмо...   Jun 19 2016, 15:28
|- - adnega   Цитата(ViKo @ Jun 19 2016, 18:28) У меня ...   Jun 19 2016, 18:21
|- - adnega   Цитата(adnega @ Jun 19 2016, 21:21) ошибк...   Jun 19 2016, 19:16
|- - ViKo   Цитата(adnega @ Jun 19 2016, 22:16) Вопро...   Jun 19 2016, 19:59
- - Genadi Zawidowski   Код отсылки/приёма байта по SPI в студию...   Jun 18 2016, 20:04
|- - adnega   Цитата(Genadi Zawidowski @ Jun 18 2016, 23...   Jun 19 2016, 08:38
- - Tarbal   Вроде нашел в чем дело. Я поначалу не знал, что ха...   Jun 19 2016, 16:42
|- - ViKo   Цитата(Tarbal @ Jun 19 2016, 19:42) Бываю...   Jun 19 2016, 18:13
|- - Tarbal   Цитата(ViKo @ Jun 19 2016, 22:13) Пе-ре-м...   Jun 19 2016, 18:57
|- - Tarbal   Цитата(ViKo @ Jun 19 2016, 22:13) Пе-ре-м...   Jun 19 2016, 20:58
- - Alex11   http://www.yageo.com/NewPortal/_en/search/search-1...   Jun 19 2016, 20:53
- - Tarbal   А замена на такую функцию (без аппаратной поддержк...   Jun 20 2016, 00:02
- - ViKo   С HAL мучайтесь сами, мне это не интересно. У меня...   Jun 20 2016, 04:52
|- - Tarbal   Цитата(ViKo @ Jun 20 2016, 08:52) С HAL м...   Jun 20 2016, 12:20
|- - ViKo   Цитата(Tarbal @ Jun 20 2016, 15:20) Я уже...   Jun 20 2016, 12:52
|- - Tarbal   Цитата(ViKo @ Jun 20 2016, 16:52) И какие...   Jun 21 2016, 13:47
- - ViKo   Еще бы и программный ногодрыг не работал... Четы...   Jun 21 2016, 14:28
|- - adnega   Цитата(ViKo @ Jun 21 2016, 17:28) Заметьт...   Jun 21 2016, 17:24
|- - Tarbal   Цитата(ViKo @ Jun 21 2016, 18:28) Еще бы ...   Jun 21 2016, 23:31
|- - ViKo   Цитата(Tarbal @ Jun 22 2016, 02:31) Не бу...   Jun 22 2016, 05:04
|- - Tarbal   Цитата(ViKo @ Jun 22 2016, 09:04) И что с...   Jun 22 2016, 21:43
- - ViKo   Ссылку на тему на ST выдайте, please! "чт...   Jun 23 2016, 04:39
|- - Tarbal   Цитата(ViKo @ Jun 23 2016, 08:39) Ссылку ...   Jun 23 2016, 10:32
||- - ViKo   Цитата(Tarbal @ Jun 23 2016, 13:32) Вы ка...   Jun 23 2016, 20:24
|- - Tarbal   Цитата(ViKo @ Jun 23 2016, 07:39) Ссылку ...   Dec 16 2016, 02:42
- - RadiatoR   Извиняюсь, что немного не в тему, но ситуация тоже...   Jun 23 2016, 17:45
|- - Obam   Цитата(RadiatoR @ Jun 23 2016, 21:45) Из...   Jun 24 2016, 06:55
|- - RadiatoR   Цитата(RadiatoR @ Jun 23 2016, 20:45) Ил...   Jun 24 2016, 07:40
|- - Obam   Цитата(RadiatoR @ Jun 24 2016, 11:40) 48...   Jun 24 2016, 07:57
- - RadiatoR   наврал. 24/93   Jun 24 2016, 09:20
|- - Obam   Цитата(RadiatoR @ Jun 24 2016, 13:20) на...   Jun 24 2016, 09:50
- - Tarbal   Я бы провел серию тестов. Вот такую функцию (сами ...   Jun 24 2016, 10:13
- - RadiatoR   Не требуется, я уже все сделал. В системе тока 1 п...   Jun 24 2016, 12:24


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01478 секунд с 7
ELECTRONIX ©2004-2016