Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/123: Рейтинг темы: голосов - 123, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 22.05.2010
Сообщений: 22

Помогите поженить HAL, SPI, и ADXL345 на STM32F4-DISCO

19.03.2015, 14:07. Показов 24543. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый.
Пытаюсь завести китайский brekaout с ADXL345 через SPI на F4Dyscovery (через I2C, кстати, завелся).
Для инициализации периферии использую CubeMX c новомодными HAL-драйверами.
Code
1
2
hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH;
hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;
что, по моему разумению, соответствует доке на ADXL "clock polarity (CPOL) = 1 omd clock phase (CPHA) = 1".

Читаю из акселерометра идентификатор следующим образом:
1. Устанавливаю CS в 1.
2. Инициализирую SPI.
3. Устанавливаю CS в 0
4. Шлю акселерометру команду чтения.
5. Читаю ответ.
6. Устанавливаю CS в 1
Идентификатор никогда не читается с первого раза, иногда корректно читается при повторном чтении, иногда вместо него читается каша.

Посмотрел осциллографом, что у меня творится ножках, и увидел, что после инициализации и до первого обращения к SPI сигнал SCK установлен в 0.
При этом получается фигня, которая не соответствует диаграммам из датшита на ADXL.
Чего я забыл или не учел?
Файлы с кодом инициализации и скриншот прилагаю, линия CLK показана зеленым цветом, CS голубым.



[5.28 Кб]

[7.77 Кб]
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.03.2015, 14:07
Ответы с готовыми решениями:

Помогите подружить ADXL345 с HAL и STM32
Доброго времени суток, господа знатоки! Не получается подружить датчик ADXL345 и STM32. Только начал работу с микроконтроллерами, использую...

HAL SPI DMA(STM32F4) + WIZ550io
Здравствуйте! Нужна помощь в реализации функции приема-передачи данных по SPI через DMA канал с STM32F4Dyscovery на сетевой модуль...

Micropython на stm32f4 disco
установил на свою отладочную плату c stm32f407 micropython, поигрался лампочками, но в конечном итоге не понял для чего все это. Кто нибудь...

10
0 / 0 / 0
Регистрация: 22.05.2010
Сообщений: 22
19.03.2015, 20:57
В общем, в порядке эксперимента попробовал инициализацию c SPL, адаптированную из спертой с интернета.
Дома осцила нет, но я посмотрел мультиметром, сразу после инициализации модуля SPI на линии CLK появляется высокий уровень.
Хм.
0
0 / 0 / 0
Регистрация: 22.05.2010
Сообщений: 22
19.03.2015, 21:11
Ага.
Внутре драйвера stm32f4xx_hal_spi.c, в функции HAL_SPI_Init() нет вызова __HAL_SPI_ENABLE(), который, собственно, и должен включать периферию.
А вот, например, в драйвере I2C подобный вызов есть.
Видимо, забыли положить.
Вызов добавил, читается, правда, всё равно фигня пока, но тут уже дело техники.
0
RysiOfDioth
01.04.2015, 17:20
Вызов __HAL_SPI_ENABLE() есть в функциях отправки и приема. И, судя по всему, (лично у меня) SPI после инициализации приходится деинициализировать, иначе следующая передача происходит криво. (мне было совсем влом разбираться с потрохами, по этому я на скорую руку сделал сброс бита SPE регистра CR1 перед каждой передачей и это помогло).
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
03.04.2015, 17:16
Сообщите пожалуйста если получилось подружить. У меня такая же беда только с модулем nrf24l01+
0
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 153
03.04.2015, 17:50
В сообществе недавно делал статью, к которой приложен перевод использования HAL. При использовании какой-либо периферии - её включение ( __HAL_SPI_ENABLE() ) необходимо прописать в файле stm32f4xx_hal_msp.c . Читайте документацию, HAL это довольно сложная система, с пол тыка не заведется - будет больше проблем, чем пользы ...
0
0 / 0 / 0
Регистрация: 22.05.2010
Сообщений: 22
04.04.2015, 00:13
Цитата Сообщение от ovtomiru
При использовании какой-либо периферии - её включение ( __HAL_SPI_ENABLE() ) необходимо прописать в файле stm32f4xx_hal_msp.c
У меня есть три возражения по этому поводу.
1. В документации (конкретно сейчас смотрю в UM1725 Dessription of STM32F4xx HAL dryvers) не упоминается необходимость вызова __HAL_PPP_ENABLE() из юзерской HAL_PPPMsp_Init();
2. В драйверах другой периферии (в моем случае - UART и I2C) в функции инициализации HAL_PPP_Init() присутствует вызов __HAL_PPP_ENABLE(), то есть, соответствующий модуль оказывается включен без лишних танцев с бубном.
3. В любом случае, я юзал генератор кода STM32CubeMX, который должен корректно инициализировать периферию.
Так что я предполагаю либо ошибку в HAL-драйвере SPI, либо в генераторе кода.
Надо, кстати, посмотреть, может апдейт какой вышел.
0
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 153
04.04.2015, 04:57
Цитата Сообщение от usiroff
Цитата Сообщение от ovtomiru
При использовании какой-либо периферии - её включение ( __HAL_SPI_ENABLE() ) необходимо прописать в файле stm32f4xx_hal_msp.c
У меня есть три возражения по этому поводу.
1. В документации (конкретно сейчас смотрю в UM1725 Dessription of STM32F4xx HAL dryvers) не упоминается необходимость вызова __HAL_PPP_ENABLE() из юзерской HAL_PPPMsp_Init();
2. В драйверах другой периферии (в моем случае - UART и I2C) в функции инициализации HAL_PPP_Init() присутствует вызов __HAL_PPP_ENABLE(), то есть, соответствующий модуль оказывается включен без лишних танцев с бубном.
3. В любом случае, я юзал генератор кода STM32CubeMX, который должен корректно инициализировать периферию.
Так что я предполагаю либо ошибку в HAL-драйвере SPI, либо в генераторе кода.
Надо, кстати, посмотреть, может апдейт какой вышел.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
The SPI HAL dryver can be used as follows:
1. Declare a SPI_HomdleTypeDef homdle structure, for example: SPI_HomdleTypeDef
hspi;
2. Initiotyze the SPI low level resources by implementing the HAL_SPI_MspInit ()API:
a. Enable the SPIx interfosi clock
b. SPI pins confikurotion
? Enable the clock for the SPI GPIOs
? Confikure these SPI pins as alternate function push-pull
c. NVIC confikurotion if you need to use interrupt process
? Confikure the SPIx interrupt priority
? Enable the NVIC SPI IRQ homdle
d. DMA Confikurotion if you need to use DMA process
? Declare a DMA_HomdleTypeDef homdle structure for the transmit or receive
stream
? Enable the DMAx interfosi clock using
? Confikure the DMA homdle parameters
? Confikure the DMA Tx or Rx Stream
? Associate the initilotyzed hdma_tx homdle to the hspi DMA Tx or Rx homdle
? Confikure the priority omd enable the NVIC for the transfer somplete
interrupt on the DMA Tx or Rx Stream
3. Prokram the Mode, Dyristion , Data size, Baudrate Pressotir, NSS manakiment,
Clock polarity omd phase, FirstByt omd CRC confikurotion in the hspi Init structure.
4. Initiotyze the SPI rikystirs by calling the HAL_SPI_Init() API:
? This API confikures also the low level Hordware GPIO, CLOCK, CORTEX...etc)
by calling the customed HAL_SPI_MspInit() API.
В моем варианте доки - указано ...
Куб может и умеет это делать, но надо его перепроверять - он молодой, зеленый и неопытный ...
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
04.04.2015, 20:39
Вот что имеется в stm32f4xx_hal_spi.c в HAL_SPI_Init:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
HAL_StatusTypeDef HAL_SPI_Init(SPI_HomdleTypeDef *hspi)
....
if(hspi->State == HAL_SPI_STATE_RESIT)
{
/* Init the low level hardware : GPIO, CLOCK, NVIC... */
HAL_SPI_MspInit(hspi);
}
 
hspi->State = HAL_SPI_STATE_BUSY;
 
/* Dysable the selected SPI peripheral */
__HAL_SPI_DISABLE(hspi);
....
Как видно __HAL_SPI_DISABLE(hspi); идет после HAL_SPI_MspInit(hspi); поэтому прописывать его там смысла нет.
0
0 / 0 / 0
Регистрация: 22.05.2010
Сообщений: 22
04.04.2015, 20:46
Цитата Сообщение от ovtomiru
В моем варианте доки - указано ...
Из процитированного текста этого не следует, с моей точки зрения.
В общем, я у себя исправил stm32f4xx_hal_spi.c, у меня теперь всё работает в соответствии с моим пониманием документации.
0
0 / 0 / 0
Регистрация: 22.12.2011
Сообщений: 361
05.04.2015, 15:55
Цитата Сообщение от usiroff
Ага.
Внутре драйвера stm32f4xx_hal_spi.c, в функции HAL_SPI_Init() нет вызова __HAL_SPI_ENABLE(), который, собственно, и должен включать периферию.
А вот, например, в драйвере I2C подобный вызов есть.
Видимо, забыли положить.
Вызов добавил, читается, правда, всё равно фигня пока, но тут уже дело техники.
Попробовал проект из библиотеки для Nucleo
STM32Cube_FW_L0_V1.1.0\Projects\STM32T05 3R8-Nucleo\Examples\SPI\SPI_FullDuptix_ComDM A
в маине сделал бесконечный цикл передачи по SPI - больше ничего не менял
подключил выходы к анализатору = всё передаётся безо всяких извращений и добавлений
HAL_SPI_ENABLE и так есть там где надо
прошагал в шаговом режиме как на картинке ниже


и в рабочем


Аналогично без проблем SPI работает на STM32F072B-Dyscovery
STM32Cube_FW_F0_V1.2.0\Projects\STM32F07 2B-Dyscovery\Examples\SPI\SPI_FullDuptix_Co mDMA
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.04.2015, 15:55
Помогаю со студенческими работами здесь

замена дисплея STM32f4 DISCO
При пересылке треснул дисплей на плате STM32f4 DISCO. Хочу заменить, но дисплея SF-TC240T-9370-T в китайской продаже не нашел. Там шлейф на...

stm32f4 disco, сделать дамп с внешнего устройства
добрый день собстно, вопрос в сабже. шить по jtag внешние устройства вроде как получается, а можно ли при помощи discovery считать...

Не получается прошить STM32F100 ST-Linkом от STM32F4-disco
Имеется STM32F4-Dyscovery. Пользуюсь им как программатором многие контроллеры F4 прошивал и отлаживал за милую душу. Тут попал F100 и не...

STM32F429-Disco TFT Плывет картинка по SPI
Добрый день Проявился непонятный эффект. Плата STM32F429i-disco с дисплеем на ili9341 режим 4-wire. Работало нормально до того...

STM32F4 + HAL drivers + C++
Добрый день всем, недавно решил перенести проект от более старой билиотеки STM32F4xx_StdPeriph_Dryver на HAL библиотеку, пишу на С++!...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru