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

 
 
> STM32 HAL SPI ошибка или глюки IAR,, ошибка чтения SPI с помощью HAL от CubeMX
Pasa
сообщение Jul 27 2016, 10:20
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



STM32F051, IAR, CubeMX

Читаю в пакетном режиме два регистра - ответ правильный. Добавляю чтение 3-его регистра - в приемном буфере ерунда.
На осцилографе картинка нормальная - все диаграмы и ответы красивые и правильные...

В парметрах функции пробовал и 3 сразу читать и в цикле по одному байту - не получается....

И вот так уже попробовал:
Код
uint8_t localRxBuf[4];
uint8_t data1,data2,data3;

HAL_SPI_Receive(&hspi1, (uint8_t*)&localRxBuf[0], 1, 10000);
data1 = localRxBuf[0];
HAL_SPI_Receive(&hspi1, (uint8_t*)&localRxBuf[0], 1, 10000);
data2 = localRxBuf[0];
//HAL_SPI_Receive(&hspi1, (uint8_t*)&localRxBuf[0], 1, 10000);
//data3 = localRxBuf[0];
придобавлении третьего чтения портятся data1,data2,data3......мистика какая-то. Повторюсь - на осцилографе все красиво и правильно

Такое ощущение, что HAL-библиотека глючит...
внутрь HAL что-ли полезть

Сообщение отредактировал IgorKossak - Jul 27 2016, 14:30
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
k155la3
сообщение Jul 28 2016, 06:09
Сообщение #2


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

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Pasa @ Jul 27 2016, 13:20) *
STM32F051, IAR, CubeMX

Читаю в пакетном режиме два регистра - ответ правильный. Добавляю чтение 3-его регистра - в приемном буфере ерунда.
На осцилографе картинка нормальная - все диаграмы и ответы красивые и правильные...

. . . .

Такое ощущение, что HAL-библиотека глючит...
внутрь HAL что-ли полезть


Про осцилограф.
Проверьте соответствие настроек полярности-фазы SPI и их соответствие девайсу с которым работаете.
(извиняюсь, конечно, IMHO)

Полезть внутрь HAL. Тоже вариант. Выкопать исполнимый код будет сложновато.
Можно посмотреть что там творится на уровне ASM-листинга или дизассемблера в отладчике.
Go to the top of the page
 
+Quote Post
Pasa
сообщение Jul 28 2016, 19:48
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



Обмен идет с CC2500

Цитата(k155la3 @ Jul 28 2016, 09:39) *
Про осцилограф.
Проверьте соответствие настроек полярности-фазы SPI и их соответствие девайсу с которым работаете.


Проверял в самом начале проекта. Осцллограммы идеальные - и STM32 и СС2500 выдают правильные картинки.

Цитата(k155la3 @ Jul 28 2016, 16:15) *
"при добавлении третьего чтения портятся data1,data2,data3"

uint8_t localRxBuf[4];
uint8_t data1,data2,data3;

Исходя из объявления, эта память находится в одном сегменте, одного типа (uint8_t) , и вполне вероятно "слитно".
Похоже что ф-ия HAL пишет в массив данные, которые не того типа, или не того кол-ва, или и то и другое.
Запись начиная с localRxBuf[0] зашкаливает за localRxBuf[3] и возможно, затирает data123


Расположил вот так:

Код
uint8_t localRxBuf1[16];
uint8_t localRxBuf2[16];
uint8_t localRxBuf3[16];
uint8_t localRxBuf4[16];
uint8_t data1,data2,data3;
uint16_t dataX1,dataX2,dataX3;
.......
   HAL_SPI_Receive(&hspi1, (uint8_t*)&localRxBuf1[0], 1, 10000);
   data1=localRxBuf1[0];
   HAL_SPI_Receive(&hspi1, (uint8_t*)&localRxBuf2[0], 1, 10000);
   data2=localRxBuf2[0];
   HAL_SPI_Receive(&hspi1, (uint8_t*)&localRxBuf3[0], 1, 10000);
   data3=localRxBuf3[0];


все равно прием неправильный...


Цитата(x893 @ Jul 28 2016, 19:44) *
Ничего хитрого
The RXNE flag is set depending on the FRXTH bit value in the SPIx_CR2 register: If FRXTH is set, RXNE goes high and stays high until the RXFIFO level is greater or equal to 1/4 (8-bit). If FRXTH is cleared (default), RXNE goes high and stays high until the RXFIFO level is greater than or equal to 1/2 (16-bit).
и сначала ставим CR2 а потом CR1

SPI1->CR2 = 0; // 16 bit
SPI1->CR1 = SPI_CR1_MSTR | SPI_CR1_SSI | SPI_CR1_SSM | SPI_CR1_SPE; // или как надо

В RM есть.

В HAL SPI_Init() есть код

/* Align by default the rs fifo threshold on the data size */
if(hspi->Init.DataSize > SPI_DATASIZE_8BIT)
{
frxth = SPI_RXFIFO_THRESHOLD_HF;
}
else
{
frxth = SPI_RXFIFO_THRESHOLD_QF;
}


Я об этом как раз и упоминал.
В HAL_SPI_Init() ниже в CR2 ставится/снимается бит FRXTH.
hspi->Instance->CR2 = (((hspi->Init.NSS >> 16) & SPI_CR2_SSOE) | hspi->Init.TIMode | hspi->Init.NSSPMode | hspi->Init.DataSize ) | frxth;

Для 8-битного режима FRXTH должен быть сброшен, собственно переменная принимает значение0: frxth = SPI_RXFIFO_THRESHOLD_HF;
Но непонятно условие для этого: if(hspi->Init.DataSize > SPI_DATASIZE_8BIT) ????
Не получается ли, что это никогда не выполняется и всегда ставится режим SPI_RXFIFO_THRESHOLD_QF(16 бит)?


Сообщение отредактировал Pasa - Jul 28 2016, 23:45
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Pasa   STM32 HAL SPI ошибка или глюки IAR,   Jul 27 2016, 10:20
- - serglg   хочу заметить, что с HAL_SPI_Receive и у меня како...   Jul 27 2016, 15:57
|- - Pasa   Цитата(serglg @ Jul 27 2016, 19:27) Пока ...   Jul 27 2016, 17:27
|- - serglg   Цитата(Pasa @ Jul 27 2016, 23:27) ...... ...   Jul 28 2016, 04:14
- - Pasa   В инициализации SPI в HAL: Код if(hspi-...   Jul 27 2016, 20:17
- - tehn1k   Как Вы выбираете чтение того или иного регистра, е...   Jul 28 2016, 05:41
|- - serglg   Цитата(tehn1k @ Jul 28 2016, 11:41) Как В...   Jul 28 2016, 06:09
|- - tehn1k   Цитата(serglg @ Jul 28 2016, 10:09) Мне н...   Jul 28 2016, 06:55
|- - Lagman   Цитата(serglg @ Jul 28 2016, 09:09) Мне н...   Jul 28 2016, 09:35
|- - k155la3   Цитата(Lagman @ Jul 28 2016, 12:35) А зач...   Jul 28 2016, 10:18
- - k155la3   Цитата(Pasa @ Jul 27 2016, 13:20) И вот т...   Jul 28 2016, 12:45
- - rudy_b   Что-то я не понял, у вас SPI в режиме slave или m...   Jul 28 2016, 13:57
|- - alag57   В CR2 есть такой хитрый битик - FRXTH, так вот у м...   Jul 28 2016, 14:41
- - x893   Функция SPI Receive в HAL занимает строк 20 из них...   Jul 28 2016, 14:17
|- - Pasa   Цитата(x893 @ Jul 28 2016, 17:47) Функция...   Jul 28 2016, 20:08
|- - k155la3   Цитата(Pasa @ Jul 28 2016, 23:08) Никаког...   Jul 29 2016, 06:47
- - x893   Ничего хитрого The RXNE flag is set depending on t...   Jul 28 2016, 16:14
|- - alag57   Цитата(x893 @ Jul 28 2016, 21:14) Ничего ...   Jul 29 2016, 03:11
- - x893   Проверил с stm32f030 и CC2500 - всё работает как ч...   Jul 28 2016, 19:49
- - serglg   Ну вот и моя хитрость. Чтение делаю 3 (три) раза п...   Jul 29 2016, 06:12
|- - alag57   Цитата(serglg @ Jul 29 2016, 11:12) Ну во...   Jul 29 2016, 07:30
||- - serglg   Цитата(alag57 @ Jul 29 2016, 13:30) Это н...   Jul 29 2016, 08:36
||- - alag57   Цитата(serglg @ Jul 29 2016, 13:36) Вы на...   Jul 29 2016, 13:33
|- - esaulenka   Цитата(serglg @ Jul 29 2016, 09:12) Ну во...   Jul 29 2016, 13:42
- - Pasa   На сегодняшний момент вызывает вопрос код в HAL_SP...   Jul 29 2016, 09:04
- - k155la3   Цитата(Pasa @ Jul 27 2016, 13:20) (1) HAL...   Jul 29 2016, 10:03
|- - Pasa   Цитата(k155la3 @ Jul 29 2016, 13:33) Позв...   Jul 29 2016, 10:55
||- - k155la3   Цитата(Pasa @ Jul 29 2016, 13:55) вы счит...   Jul 29 2016, 12:12
|- - esaulenka   Цитата(k155la3 @ Jul 29 2016, 13:03) Позв...   Jul 29 2016, 13:22
- - Pasa   может здесь и говорится о нашей проблемке ..... ...   Jul 29 2016, 15:04
- - serglg   Открываются глаза. Народ говорит, что вся разница ...   Jul 30 2016, 05:43
- - Pasa   На сегодняшний момент моя примочка по предваритель...   Aug 1 2016, 07:57
|- - serglg   Цитата(Pasa @ Aug 1 2016, 13:57) На сегод...   Aug 1 2016, 12:14
|- - Pasa   Цитата(serglg @ Aug 1 2016, 15:44) Фактич...   Aug 1 2016, 19:24
|- - serglg   Цитата(Pasa @ Aug 2 2016, 01:24) Собствен...   Aug 2 2016, 13:17
- - ave!   Прочитал всю ветку, пробовал все варианты под CooC...   May 9 2017, 18:34
- - serglg   Цитата(ave! @ May 10 2017, 00:34) Про...   May 10 2017, 05:04


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

 


RSS Текстовая версия Сейчас: 26th August 2025 - 09:28
Рейтинг@Mail.ru


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