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

 
 
> 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
Ответов
Pasa
сообщение Jul 29 2016, 09:04
Сообщение #2


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

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



На сегодняшний момент вызывает вопрос код в HAL_SPI_Init()

Код
  if(hspi->Init.DataSize > SPI_DATASIZE_8BIT)
  {
    frxth = SPI_RXFIFO_THRESHOLD_HF;
  }
  else
  {
    frxth = SPI_RXFIFO_THRESHOLD_QF;
    //frxth = SPI_RXFIFO_THRESHOLD_HF;   //  может надо здесь так?
  }


При установке 8-битного режима при инициализации SPI всегда делается frxth = SPI_RXFIFO_THRESHOLD_QF;
Хотя ручное прописывание frxth = SPI_RXFIFO_THRESHOLD_HF; не помогло...



Функция HAL_SPI_Receive() собственно сводится к вызову HAL_SPI_TransmitReceive().

В ней тоже вызывает вопрос вот это:

Код
  if((hspi->Init.DataSize > SPI_DATASIZE_8BIT) || (hspi->RxXferCount > 1))
  {
    /* set fiforxthreshold according the reception data length: 16bit */
    CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD);
  }
  else
  {
    /* set fiforxthreshold according the reception data length: 8bit */
    SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD);
    //CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD);   // может надо так?
  }


Хотя в stm32f0xx_hal_spi.h прописано вот это:

Код
/** @defgroup SPI_FIFO_reception_threshold SPI FIFO Reception Threshold
  * @{
  * This parameter can be one of the following values:
  *     SPI_RXFIFO_THRESHOLD or SPI_RXFIFO_THRESHOLD_QF :
  *          RXNE event is generated if the FIFO
  *          level is greater or equal to 1/2(16-bits).
  *     SPI_RXFIFO_THRESHOLD_HF: RXNE event is generated if the FIFO
  *          level is greater or equal to 1/4(8 bits). */
#define SPI_RXFIFO_THRESHOLD            SPI_CR2_FRXTH
#define SPI_RXFIFO_THRESHOLD_QF         SPI_CR2_FRXTH
#define SPI_RXFIFO_THRESHOLD_HF         ((uint32_t)0x00000000)



В результате на сегодняшнее утро предварительно помогла перед вызовом HAL_SPI_Receive() пачковая вычитка DR регистра:
Код
   dataX1=(uint16_t)hspi1.Instance->DR;
   dataX1=(uint16_t)hspi1.Instance->DR;
   dataX1=(uint16_t)hspi1.Instance->DR;
   dataX1=(uint16_t)hspi1.Instance->DR;
   HAL_SPI_Receive(&hspi1, (uint8_t*)&localRxBuf1[0], 1, 10000);


Но надо все проверить .... думаю к вечеру это дело прояснится


Цитата(k155la3 @ Jul 29 2016, 10:17) *
0. Как выделена память под буфер и данные - проверьте "время жизни". Ведь при передаче в ф-ю вы используете адрес,
а оптимизатору-компилятору это ПОФИГ sm.gif
1. Ваш код работает в составе проекта или "отсажен" в минимальный вид для отладки.
(в смысле нет ли "сторонних" факторов влияния)
2. Я бы разобрался почему портится приемный буфер.
Заполните буфер паттерном.
Поставть на отладчике breakpoint типа "изменение памяти". Или вообще пошагово оттрасируйте состояние этй области.
Этот путь вылавливания демона проще всего - ведь есть "устойчивый сбой", и это хорошо sm.gif
Проверьте, ведь возможно работу ф-ии SPI сбивает вообще что-то другое, к ней не относящиеся.
3. Ну и классика - размеры стека итп.

ps к п.0:
Чтоб компилятор не своевольничал, я нужные переменные итд
объявляю в глоб. области, в виде
Код
__root char flag_Alarm;
#pragma required=flag_Alarm

(IAR)


0. Буфер объявлен как глобальные переменные. Оптимизация компилера полностью отключена.
1. Собственно это начальный проект, но весь код отрублен и из main() вызывается единственный этот тестовый процесс чтения по SPI. Ничего лишнего нет. Все прерывания запрещены, кроме системного тика для HAL_Delay();
2. Собственно портится не сам буфер, а портится регистр DR.....ну и соответственно портится буфер
3. Стек не смотрел....но вроде ничего не делается для переполнения.

__root char flag_Alarm - эта штука для меня новинка, так как STM32 занимаюсь только около месяца....почитаю, разберусь и попробую применить...


Цитата(serglg @ Jul 29 2016, 12:06) *
Чувствую, что в HAL-драйверах какая-то засада при работе с 8-битным приемом.

У меня вот тоже ОЧЕНЬ-ОЧЕНЬ похожие чувства.....сильно похоже на засаду....еще в коде полностью не разобрался, но есть большое желание это все прошерстить
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) STM32F0...   Jul 28 2016, 06:09
|- - Pasa   Обмен идет с CC2500 Цитата(k155la3 @ Jul 28 ...   Jul 28 2016, 19:48
- - 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
- - 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 Текстовая версия Сейчас: 23rd August 2025 - 08:46
Рейтинг@Mail.ru


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