Easyelectronics.ru

Электроника для всех
Текущее время: 16 фев 2019, 16:36

Часовой пояс: UTC + 5 часов




Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 03 дек 2015, 16:19 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 июн 2013, 22:55
Сообщения: 53
Здравствуйте,
что-то никак не получается у меня с первого раза завести интерфейсы арма.
На этот раз взялся за spi.
Плата stm32 Nucleo-l053R8

В данной статье описывается
один из простейших способов передачи, когда в один и тот же модуль
spi сначала передается байт данных, а потом принимается данный байт.

Для этого нужно кинуть перемычку между MISO и MOSI в SPI1 (в моей плате соединяются PA6, PA7).

Перемычку кинул, инициализацию провел в Cube.
Передаю и принимаю байт с помощью:
Код:
  HAL_SPI_Transmit(&hspi1, transmitBuffer, 1, 20);
  HAL_SPI_Receive_IT(&hspi1, receiveBuffer, 1);


соответственно.

Однако когда программа доходит до while(1)
в переменной receiveBuffer - пусто, А должен быть символ "v".

Флаг передачи из буфера TX в сдвиговый регистр поднимается, TXE = 1, передача происходит корректно.
А вот флаг передачи данных из сдвигового регистра в буфер RX не хочет подниматься, RXNE = 0;
Прерывание включается корректно, бит RXNIE = 1.

После команды HAL_SPI_Transmit(&hspi1, transmitBuffer, 1, 20); в DR присваивается значение
символа "v". На всякий случай решил удостовериться есть ли связь между ножками
РА6 и РА7. Попробовал убрать перемычку и снова прогнать программу.

В этом случае в регистр DR (после команды HAL_SPI_Transmit(&hspi1, transmitBuffer, 1, 20);) ничего не присваивается
он всегда равен нулю. Т.е. реакция на отсутствие перемычки между РА6, РА7 есть,
значит можно считать, что и контакт между ними тоже имеется (электрическая связь в смысле).

Обработчик прерывания при приеме вызывается, корректно.

Ума не приложу что еще не хватает, для передачи по spi ?
Подскажите пожалуйста, в чем может быть загвоздка.

Код программы:

Show


Файл обработки прерывания:

Show


Функция HAL_SPI_IRQHandler:

Show


Функция HAL_SPI_Transmit:

Show


Функция HAL_SPI_Receive_IT:

Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 03 дек 2015, 21:57 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1855
Откуда: Харьков
Ох уж эти забавы с самим собой ))

Ногу NSS как настроили? Если софтварно, то нужно ей дрыгать перед и после отправки данных (смотрите диаграмму по передачи данных по SPI).

А вообще лучше купите какую-нибудь дешевенькую платку с STM вторым. Будет легче. А еще лучше по мелочам шилдов каких-то. Для SPI можно экранчик за 5 баксов прикупить со слотом под SD карточку. Для I2C термометр какой. Или вывод на семисегментник или еще чего мелкого. Для 1-Ware тоже термометр. Для ШИМ можно серву. Для UART esp8266. Для АЦП dht22 и будет вам много счастья. Заодно и освоите сразу кучу всего интересно на начальном этапе. Смысл чтоб камень сам себя дергал?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 03 дек 2015, 22:40 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1855
Откуда: Харьков
А, ну и еще - где у вас колбэк по получению данных HAL_SPI_RxCpltCallback ? Вы должны проверять уже в нем свой буфер на наличие данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 07 дек 2015, 18:40 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 июн 2013, 22:55
Сообщения: 53
alexsam,

NSS настраивал софтварно, бит SSM=1 в регистре SPI1_CR1.
В строке HAL_SPI_Transmit(&hspi1, transmitBuffer, 1, 20); срабатывает бит SSI=1 в регистре SPI1_CR1.

Ни совсем понял, чем нужно дрыгать ? :) В референсе
написано, что при софтварном выборе слэйва NSS не нужна и на эту ножку можно повесить другую функцию.
Т.о. NSS нигде не используется, ни очень понятно чем в таком случае дрыгать.

В статье написано, что забава с самим собой самый легкий способ освоения SPI, поэтому взялся за него. :)
А так, у меня есть вторая платка stm8l.

Насчет, конкретных устройств, собирался в перспективе на них перейти. Просто хотелось сначала азы понять,
все таки когда программируешь более серьезные вещи, типа экрана по spi, могут еще быть проблемы с неправильным подключением и т.п.
Т.е. круг возможных проблем может быть куда шире, отлаживание требует больше времени. Когда запускаешь что-то в первый раз
тяжело понять проблема программная или в схеме.


Вот я все никак не могу понять зачем нужна эта функция HAL_SPI_RxCpltCallback на стадии обучения ?
Почему нельзя transmit и recieve писать непосредственно в майне ? Это правило хорошего тона или
тут есть какое-то функциональное назначение ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 08 дек 2015, 13:54 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1855
Откуда: Харьков
Я при использовании HAL не смог добиться корректной работы ноги NSS в софтварном режиме. Как мне кажется, она остается болтаться в неопределенном состоянии поэтому ставлю её подтяжку к питанию и перед отправкой данных придавливаю её к земле, затем, после окончания отправки отпускаю. Но я никогда не экспериментировал сам с собой.
На счет
Цитата:
Вот я все никак не могу понять зачем нужна эта функция HAL_SPI_RxCpltCallback на стадии обучения ?

Вы же вызываете HAL_SPI_Receive_IT(&hspi1, receiveBuffer, 1);
Суффикс IT - здесь означает что после вызова данные могут и не быть еще получены. Поэтому корректно проверять в колбэке.
Если хотите получение данных с блокировкой - то вызывайте HAL_SPI_Receive. Но это моветон.

И не бойтесь использовать внешние устройства. Я первый экранчик SPI прикрутил за один вечер с практически нулевыми знаниями в области МК.
Единственное, вам 146% понадобится логический анализатор. Так что советую его прикупить в ближайшее время.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 08 дек 2015, 18:31 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 июн 2013, 22:55
Сообщения: 53
alexsam писал(а):
Я при использовании HAL не смог добиться корректной работы ноги NSS в софтварном режиме. Как мне кажется, она остается болтаться в неопределенном состоянии поэтому ставлю её подтяжку к питанию и перед отправкой данных придавливаю её к земле, затем, после окончания отправки отпускаю.

т.е. у вас не получилось в софтварном режиме настроить SPI или же он у вас настраивался, но только при подтяжке ?

Пробовал как вы подтягивать ножку при передаче на землю, при приеме на питание.
Пока, к сожалению, не помогло.


Код программы:
Show


Наверное придется оставить идею передачи по SPI самому себе и
попробовать передать с SPI1 на SPI2.


alexsam писал(а):
Суффикс IT - здесь означает что после вызова данные могут и не быть еще получены. Поэтому корректно проверять в колбэке.
Если хотите получение данных с блокировкой - то вызывайте HAL_SPI_Receive. Но это моветон.

Получается, что мы просто переносим функции HAL_SPI_Transmit и HAL_SPI_Receive_IT
внутрь другой функции HAL_SPI_RxCpltCallback ? Или там нужно еще что-то добавить ?


alexsam писал(а):
И не бойтесь использовать внешние устройства. Я первый экранчик SPI прикрутил за один вечер с практически нулевыми знаниями в области МК.
Единственное, вам 146% понадобится логический анализатор. Так что советую его прикупить в ближайшее время.

Вот как получу хоть какой-нибудь результат с spi сразу же перейду на экран. И буду уже с ним возиться. :)
Про логический анализатор первый раз от вас узнаю об этом устройстве. Спасибо.
Вы не можете написать какую-нибудь приемлемую (в плане стоимости) модель написать
для обучения (можно просто ссылку). Я потому что вообще в них не разбираюсь.
Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 08 дек 2015, 19:30 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 596
Откуда: Киев
Да Saleae проще пареной репы:
http://arduino-ua.com/prod651-Logichesk ... _8_kanalov
http://ru.aliexpress.com/premium/saleae ... 9-062-3723
http://voron.ua/catalog/016924


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 09 дек 2015, 01:48 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1855
Откуда: Харьков
Зведите 2 SPI соедините их проводами.
Для одного (который у вас будет slave) запустите HAL_SPI_Receive_IT но обязательно определите колбэк.
Затем для второго, который мастер вызовите передачу: HAL_SPI_Transmit
И тут должен сработать колбэк на получение. В этом колбеке просто проверьте свой массив, что пришло.
Если будет завтра время - сделаю и скину вам исходник примера.

Что касается анализатора, у меня такой: http://easyelectronics.ru/logicheskij-a ... -plus.html
Но это нашей харьковской разработки. А вообще как писали выше на али их полно, только нужно быть внимательным - софт к ним нужно ставить определенной версии иначе некоторый софт может перепрошить анализатор и вы получите кирпич.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 09 дек 2015, 11:54 
Заглядывает иногда

Зарегистрирован: 14 сен 2015, 08:50
Сообщения: 197
Откуда: Россия, Ростов-на-Дону
Просматриваю с телефона, поэтому мог что-то не досмотреть. Но вроде у Вас сначало происходит отправка одного байта, затем после отправки Вы пытаетесь получить байт, но он же уже отправлен и его естественно больше нет. Если хотите получить просто перемычкой, то делайте отправку/получение тдновременно. Ну и, как уже писали, при обработке не забывайте, что на отправку и получение нкжно время. Если используете IT или DMA, то либо проверяете окончание через колбек, либо читаете флаг состояния SPI.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 09 дек 2015, 13:25 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 июн 2013, 22:55
Сообщения: 53
SOVA писал(а):

SOVA, спасибо за ссылки, посмотрю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 09 дек 2015, 13:50 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 июн 2013, 22:55
Сообщения: 53
alexsam писал(а):
Зведите 2 SPI соедините их проводами.
Для одного (который у вас будет slave) запустите HAL_SPI_Receive_IT но обязательно определите колбэк.
Затем для второго, который мастер вызовите передачу: HAL_SPI_Transmit
И тут должен сработать колбэк на получение. В этом колбеке просто проверьте свой массив, что пришло.
Если будет завтра время - сделаю и скину вам исходник примера.

Что касается анализатора, у меня такой: http://easyelectronics.ru/logicheskij-a ... -plus.html
Но это нашей харьковской разработки. А вообще как писали выше на али их полно, только нужно быть внимательным - софт к ним нужно ставить определенной версии иначе некоторый софт может перепрошить анализатор и вы получите кирпич.


alexsam,

Соединил между собой SPI1-SPI2
SPI1 SPI2
PA6 MISO ------ MISO PB14
PA7 MOSI ------ MOSI PB15
PA5 SCK ----- SCK PB13
PA4 NSS _____ NSS PB12

NSS для spi1,2 ни стал соединять.

Пробовал запускать, результат пока такой же на receiveBuffer - ничего нет.
NSS SPI1 пробовал подтягивать к питанию (программно), а NSS SPI2 к земле.
Наоборот тоже пробовал. Пробовал вообще ничего не делать с ногами NSS.
Пока безрезультатно.
NSS для spi1,2 настроил программный.

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

Код программы:
Show



Насчет анализатора: спасибо, alexsam, посмотрю как с этим spi разберусь. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 09 дек 2015, 13:55 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 июн 2013, 22:55
Сообщения: 53
vbogom писал(а):
Просматриваю с телефона, поэтому мог что-то не досмотреть. Но вроде у Вас сначало происходит отправка одного байта, затем после отправки Вы пытаетесь получить байт, но он же уже отправлен и его естественно больше нет. Если хотите получить просто перемычкой, то делайте отправку/получение тдновременно. Ну и, как уже писали, при обработке не забывайте, что на отправку и получение нкжно время. Если используете IT или DMA, то либо проверяете окончание через колбек, либо читаете флаг состояния SPI.


vbogom, что вы имеет ввиду под одновременным выполнением, все команды, вроде как, выполняются последовательно.
Или вы имеете ввиду, что сначала нужно выполнить HAL_SPI_Receive_IT, а потом HAL_SPI_Transmit, то я такое пробовал,
правда сейчас я уже работаю spi1-spi2 на одной плате. И это не помогло.

В случае когда spi1 является приемником и передатчиком, надо будет попробовать.
Сейчас пока у меня все перепаяно под передачу от spi1 к spi2.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 09 дек 2015, 20:17 
Заглядывает иногда

Зарегистрирован: 14 сен 2015, 08:50
Сообщения: 197
Откуда: Россия, Ростов-на-Дону
foxis писал(а):
что вы имеет ввиду под одновременным выполнением, все команды

Например использовать
Код:
HAL_SPI_TransmitReceive_IT

Сейчас проверил все работает...
На самом деле при Transmit происходит и получение тоже, но это может только в текущих версиях HAL, поэтому лучше использовать именно TransmitReceive. Кроме того в Вашем случае если использовать только Transmit, то будет не понятно произошло получение или просто смотришь свои же данные.
А вообще Вам нужен логический анализатор. Серьезный проект без него будет сделать сложно. Когда я писал модуль для работы с памятью AT25160, получилось следующее. Проверил модуль на F411 и F103, а потом решил его запустить на F030 - не работает (инициализировал через куб), очень удивился, код, то не менялся. Посмотрел анализатором, а там вместо восьми бит идет только четыре... Проверил оказалось (может и сам накосячил), что поставил Data Size 4 бита. Изменил на 8 - все заработало. А если бы не анализатор, то долго бы лазил искал бы у себя ошибка там, где ее и не было...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 09 дек 2015, 20:25 
Заглядывает иногда

Зарегистрирован: 14 сен 2015, 08:50
Сообщения: 197
Откуда: Россия, Ростов-на-Дону
P.S. Раз Вы используете HAL, то для экспериментов можете использовать не SPI, а UART, его легче "смотреть" с компа. А в HAL между ними, с точки зрения "программы" никакой разницы (отличия только в названиях функций). Можете поиграться как с Transmit/Receive, так и с IT или DMA.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 09 дек 2015, 20:58 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1855
Откуда: Харьков
foxis писал(а):
Пробовал запускать, результат пока такой же на receiveBuffer - ничего нет.
NSS SPI1 пробовал подтягивать к питанию (программно), а NSS SPI2 к земле.
Наоборот тоже пробовал. Пробовал вообще ничего не делать с ногами NSS.
Пока безрезультатно.
NSS для spi1,2 настроил программный.

NSS, он же CS - Chip select служит для того, чтоб выбирать какому устройству мастер отправляет данные.
Попробуйте сделать решение влоб:
Будем считать что spi1 у вас мастер а 2 слейв
Настройте NSS: SPI_NSS_SOFT для spi1 и hard для spi2.
При такой настройке нога NSS для spi1 вообще не инициализируется и нужно настроить её на Output с подтяжкой к питанию, ногу NSS для spi2 подтягивать не нужно.
Настройка ноги как SOFT означает что ногой рулить должен сам разработчик.
Вызываем HAL_SPI_Receive_IT для spi2, не забываем определить колбэк!
Прижимаем ногу NSS для spi1 к земле не подтяжкой а обычной сменой состояния HAL_GPIO_WritePin(GPIO*, GPIO_PIN_RESET);
Затем шлем данные:
HAL_SPI_Transmit через spi1
Поднимаем ногу NSS через HAL_GPIO_WritePin(GPIO*, GPIO_PIN_SET);

Это алгоритм отправки данных при конфиге SPI_NSS_SOFT.
При этом диаграмма сигналов на проводках должна быть такой:
Изображение
CS = NSS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 09 дек 2015, 21:34 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1855
Откуда: Харьков
В приложении рабочий пример, прогнал его на плате Nucleo 401
SPI2 - master
SPI3 - slave

Соединены проводками все выводы, NSS не соединен, т.е. все как у вас.

P.s. Обновил файл архива из-за того, что прошлый раз залил не те файлы.


Вложения:
SPI_Master_Slave.zip [6.34 Кб]
Скачиваний: 292


Последний раз редактировалось alexsam 10 дек 2015, 04:42, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 09 дек 2015, 21:41 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1855
Откуда: Харьков
Должен сказать, что линия достаточно чувствительна к помехам извне и поэтому данные иногда приходят битые. Вместо 0xFF иногда может прийти какая-то хрень. Это лечится подтяжкой внешними резисторами к питанию или к земле (в зависимости от настроек) всех линий.

В аттаче скрин вывода


Вложения:
2015-12-10_0142.png
2015-12-10_0142.png [ 28.81 Кб | Просмотров: 16545 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 11 дек 2015, 11:07 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 июн 2013, 22:55
Сообщения: 53
Спасибо большое, alexsam, за подробный ответ.

Попробовал переделать проект по образу и подобию вашего, но spi так и не
захотел работать.

Код программы:
Show


От себя добавил вызов функции HAL_SPI_RxCpltCallback, она у вас в майне отсутствовала.
Также добавил прижим к земле сменой состояния HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);.
Правда это никак не изменило результата, spi2 также не хочет принимать байт.

Возможно я что-то упустил, при переделке программы. Электрические связи я прозванивал, они должны быть в норме.

Кстати, теперь стало понятно зачем нужна была функция HAL_SPI_RxCpltCallback, это что-то типа
консоли, когда программируешь на языках высокого уровня (например, java или с++).


Вложения:
Termite.png
Termite.png [ 9.92 Кб | Просмотров: 16479 ]
Foxis_SPI_Master_Slave.zip [6.37 Кб]
Скачиваний: 131


Последний раз редактировалось foxis 11 дек 2015, 14:22, всего редактировалось 7 раз(а).
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 11 дек 2015, 11:22 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 июн 2013, 22:55
Сообщения: 53
vbogom писал(а):
foxis писал(а):
что вы имеет ввиду под одновременным выполнением, все команды

Например использовать
Код:
HAL_SPI_TransmitReceive_IT

Сейчас проверил все работает...
На самом деле при Transmit происходит и получение тоже, но это может только в текущих версиях HAL, поэтому лучше использовать именно TransmitReceive. Кроме того в Вашем случае если использовать только Transmit, то будет не понятно произошло получение или просто смотришь свои же данные.
А вообще Вам нужен логический анализатор. Серьезный проект без него будет сделать сложно. Когда я писал модуль для работы с памятью AT25160, получилось следующее. Проверил модуль на F411 и F103, а потом решил его запустить на F030 - не работает (инициализировал через куб), очень удивился, код, то не менялся. Посмотрел анализатором, а там вместо восьми бит идет только четыре... Проверил оказалось (может и сам накосячил), что поставил Data Size 4 бита. Изменил на 8 - все заработало. А если бы не анализатор, то долго бы лазил искал бы у себя ошибка там, где ее и не было...

vbogom, спасибо большое, я попробую, но чуть позже.
У меня сейчас соединение spi1-spi2, перепаивать обратно (на РА6-РА7) пока не хочется.
У меня к сожалению перемычек для ардуино нет для быстрого соединения пинов, поэтому пользуюсь
пайкой.

Насчет логического анализатора согласен с вами, надо потихоньку, как возможность будет, приобрести его.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 11 дек 2015, 14:31 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1855
Откуда: Харьков
Цитата:
От себя добавил вызов функции HAL_SPI_RxCpltCallback, она у вас в майне отсутствовала.

Её там и не должно быть! Она вызывается из обработчика прерывания когда пришли данные!
У вас похоже не включены глобальные прерывания по SPI.


Вложения:
2015-12-11_1130.png
2015-12-11_1130.png [ 49.43 Кб | Просмотров: 16475 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 11 дек 2015, 16:27 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 июн 2013, 22:55
Сообщения: 53
alexsam писал(а):
Цитата:
От себя добавил вызов функции HAL_SPI_RxCpltCallback, она у вас в майне отсутствовала.

Её там и не должно быть! Она вызывается из обработчика прерывания когда пришли данные!
У вас похоже не включены глобальные прерывания по SPI.

alexsam,

Глобальные прерывания я, как помню, включал.

На всякий случай, создал проект заново и загрузил фото, по настройке прерываний в проекте.
Прерывания глобальные для spi1, spi2 включил.

Запускать пробовал, также HAL_SPI_RxCpltCallback не вызывается.

Также вложи результаты в Termite.
Код программы:
Show


Код файла stm32l0xx_it.c:
Show


Вложения:
7.png
7.png [ 9.11 Кб | Просмотров: 16468 ]
2.png
2.png [ 19.28 Кб | Просмотров: 16468 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 11 дек 2015, 17:33 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1855
Откуда: Харьков
Выложите так же stm32f1xx_hal_msp.c


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 11 дек 2015, 17:40 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 июн 2013, 22:55
Сообщения: 53
alexsam,


Код файла stm32l0xx_hal_msp.c,

Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 11 дек 2015, 19:16 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1855
Откуда: Харьков
У вас правильно спаяно:
PA6 -> PC2
PA7 -> PC3
PB3 -> PB10
?
А вообще у вас же нуклео, что вы там спаиваете? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с передачей по spi stm32 Nucleo-L053R8
СообщениеДобавлено: 14 дек 2015, 14:31 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 июн 2013, 22:55
Сообщения: 53
alexsam,
1) Ура ! :):):) Наконец-то все заработало !!! :)
Я тут здорово тупанул, оказывается на разных ножках может быть
одна и та же альтернативная функция, например для
spi2 MISO может быть и PB14 и PC2 (вложил рисунок). А какой именно ноге Cube подцепил
данную функцию можно было уже узнать в файле stm32l0xx_hal_msp.c.

2) В общем все заработало, как вы и говорили помехи достаточно сильно влияют на результат.
Но в целом передается нормально (т.е. 50/50 есть случаи когда информация искажается,
есть случаи при которых нормально все передается), правда почему-то HAL_SPI_RxCpltCallback вызывается
2 раза, это видимо тоже связано с помехами, как ложное срабатывание обработчика прерываний (вложил рисунок).

3) Огромное вам спасибо, alexsam, за помощь, без вас
я бы тут еще долго ковырялся с этим spi. :):)

4)
alexsam писал(а):
А вообще у вас же нуклео, что вы там спаиваете? :)

Насчет спаивания нуклео :).
У меня просто пока нет таких перемычек для соединения штыркев (которые расположены по бокам платы), вот и приходиться сидеть паять. Но я эти перемычки заказал, так что скоро процесс соединения ног контроллера пойдет быстрее, я надеюсь. :)


Вложения:
2.png
2.png [ 10.51 Кб | Просмотров: 16340 ]
1.png
1.png [ 52.59 Кб | Просмотров: 16340 ]
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB