STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3536647#p3536647"]Код в хрустальном шаре?[/uquote]

Код: Выделить всё

uint8_t ADE7758_t::txRxStart(void){
  if(HAL_SPI_GetState(spi_) != HAL_SPI_STATE_READY)
    return 1;
  if((spi_->Init.CLKPhase != SPI_PHASE_2EDGE)
  || (spi_->Init.CLKPolarity != SPI_POLARITY_LOW)){
    spi_->Init.CLKPolarity = SPI_POLARITY_LOW;
    spi_->Init.CLKPhase = SPI_PHASE_2EDGE;
    if (HAL_SPI_Init(spi_) != HAL_OK){
      Error_Handler();
    }
  }
  ssEnable();
  uint8_t byteLength = ((registers_[regIndex_].bitLength_ - 1) / 8) + 2;
  HAL_SPI_TransmitReceive_IT(spi_, out_.data, in_.data, byteLength);
  return 0;
}
когда в if не заходит (прежде никто другой не менял настройки), то все ок. А если пришлось переконфигурировать то на первом байте наблюдаю передергивания как на картинке.
Последний раз редактировалось Ярослав555 Пт дек 28, 2018 08:43:59, всего редактировалось 3 раза.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Ты внутрь HAL_SPI_Init() то заглядывал ???
Спойлервеликая отечественная война..
партизан выбежал на ж.д. устанавливает взрывчатку под рельсы.начинает чиркать спички о коробок, чтобы поджечь шнур . и тут немецкий патруль. поймал его.спрашивает:
-ты че тут делаешь
-да вот,сами видете,пытаюсь ж.д. взорвать...
-а спички у тя производства чьего?
-HAL... (в оригинале Балабаново)
немцы уходя:
-ну давай,давай...
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3536661#p3536661"]Ты внутрь HAL_SPI_Init() то заглядывал ???[/uquote]
ок, я в ините вижу __HAL_SPI_DISABLE(hspi);
а в старте __HAL_SPI_ENABLE(hspi);
это происходит при включении периферии? мне нужно сделать __HAL_SPI_ENABLE(hspi); перед активацией CS?

Добавлено after 1 minute 4 seconds:
только на работу пришел, жду синхронизации файлов, а то попробовал бы уже.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Ты под спойлер то заглядывал? В SPI для конфигурации полтора регистра !!!
spi_regs.png
(69.2 КБ) 501 скачивание
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

Кхм, ну вообще-то вся остальная конфигурация в мейн-файле кубом сделана, я наивно полагал что господа догадаются. Вот изначальный конфиг:
Спойлер

Код: Выделить всё

static void MX_SPI1_Init(void)
{

  /* USER CODE BEGIN SPI1_Init 0 */

  /* USER CODE END SPI1_Init 0 */

  /* USER CODE BEGIN SPI1_Init 1 */

  /* USER CODE END SPI1_Init 1 */
  /* SPI1 parameter configuration*/
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 7;
  hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI1_Init 2 */

  /* USER CODE END SPI1_Init 2 */

}
Разница в работе с двумя типами слейвов только в двух параметрах, которые я чекаю и если не совпадает - переинициализация.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

За пределами активного CS всё делай.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

так и делаю - реинит, активация CS и потом старт передачи. И в начале первого байта имею хрень. На скрине и в коде ведь все видно - в коде кс включается после инита, а на скрине мусор после опускания кс.
Друг Кота
Аватара пользователя
Сообщения: 7383
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Вычитал, что есть такая штука у кортексов как bit-banding. А вот вопрос у stm32f0/1 оно есть? И как его можно в коде нормально написать? не писать же #define xxx (*((volatile uint8_t *)(0x420034673640))).
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

uldemir, не трать время. Для доступа к ногам пользуйся регистрами BSRR и BRR.
Друг Кота
Аватара пользователя
Сообщения: 7383
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Ну а всё же? Собственно, этот вопрос не совсем по теме stm. С этим bit-band -ом столкнулся в MSP432... Есть какие общие принципы как именованно обратиться к этим регистрам? В лекции только и написано, что адрес сдвинуть на 5 бит, разряд на 1 (или 2?) и прибавить 0x42000000. Но адреса в голове как-то не держатся.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Ты программу в голове что-ли выполняешь? Написал один раз макрос и пользуйся. Компилятор всё сам посчитает.
Друг Кота
Аватара пользователя
Сообщения: 7383
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Ай, ладно, не трудитесь... сам разберусь.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

У F0 его отродясь небыло ...
А VladislavS прав...
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Он наверно про технику доступа к отдельным битам в памяти. Регионы.

В F1 есть BitBanding
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7383
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Нет, меня интересовало как написать это обращение без магических цифр. Оказалось, что есть макрос. Только у каждого производителя он называется по-своему. У TI (собственно, я сейчас развлекаюсь с MSP432P401R и у него нет BSRR) BITBAND_PERI и BITBAND_SRAM. У ST - BIT_BAND_PER и BIT_BAND_SRAM.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Вычитал, что есть такая штука у кортексов как bit-banding.
Есть.
А вот вопрос у stm32f0/1 оно есть?
У F0 нету, у F1 есть.
И как его можно в коде нормально написать? не писать же #define xxx (*((volatile uint8_t *)(0x420034673640))).
Здесь вопрос не понятен. Что вы хотите запрограммировать.
ST - BIT_BAND_PER и BIT_BAND_SRAM.
Это вы где вычитали?
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7383
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Это допрос? в гугле нашел ссылку на какую-то статью про bit-band на stm32. Вкладку уже закрыл, потому не скажу точно где. Сам не проверял, но по образцу поискал в хидерах на msp432. Собственно, я для себя уже нашел и понял как красиво можно это описать.

Открыл кейл с проектом на stm32f103 - не нашел такой макрос. Только один #define PERIPH_BB_BASE ((uint32_t)0x42000000). Странно. Ну ничего, понадобится - нарисую.

сорри, ютубу не воспринимаю.
Последний раз редактировалось uldemir Вс дек 30, 2018 13:57:11, всего редактировалось 2 раза.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Прошу прощения... Только начал изучать.

1. Скажите, правильно ли я понимаю, что SPL - стандартная библиотека для периферии, и написана она с ошибками рукожопыми индусами? Используется для упрощенного конфигурирования и написания программ для микроконтроллеров, однако, тем же самым сама усложняет все, т.к. в ней самой надо еще умудриться разобраться? Тем более, он еще и размеры кода жутко увеличивает , и лучше бы ее вообще не использовать никогда.

2. что HAL по сути тоже самое?

3. Что КубМХ это просто удобная программка, которая делает тоже самое, на основе верхних библиотек, просто наглядно, но еще более рукожопо? Зато действительно наглядно. Потом создает код, который можно воткнуть уже в любую IDE. Он еще и из инета качает...

И если исключить все, что выше, то можно и руками все написать, однако все адреса, прерывания и тому подобное будет такой геморр написать, а еще и выкопать их в мануали почти в 1000 страниц... , что с АРМ ядром лучше вообще не связываться? :shock:

4. Существует несколько ИДЭ под разные платформы, здесь на вкус и цвет товарищей нет. И вопрос холиварный.

5. Существует также Кортекс-М0, М3, М4, две из которых последние есть у меня в наличии. одну я знаю куда хочу прикрутить, и побаловаться с нею, если у меня хватит силы воли изучить, а вот вторую даже представить не могу. Тем более это уже другой М, а значит изучать надо по новой все?

З.Ы. И если всем этим не пользоваться, то еще и никто больше не поймет твою писанину, т.к. ты отошел от стандартов. А раз так, то все эти названия типа ХАЛ_ПОРТ_ПИН13_ВКЛЮЧИТЬвПУШПУЛ в другой интрепретации никто больше в мире не поймет, т.к. все привыкли к тем, что даны по умолчанию? Просто интересно. ))))
Станислав
Друг Кота
Аватара пользователя
Сообщения: 3386
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

СКАЗОЧНИК писал(а):SPL - стандартная библиотека для периферии, и написана она с ошибками рукожопыми индусами?
SPL это периферийная библиотека и написана она нормально, особенно если сравнивать с HAL.
СКАЗОЧНИК писал(а):однако, тем же самым сама усложняет все
Это не так. Вообще где вы такое услышали или прочитали? В сети много чего пишут и вы всему верите?
СКАЗОЧНИК писал(а):Тем более, он еще и размеры кода жутко увеличивает
Размер кода увеличивает, но не на много. Конфигурация периферии обычно занимает небольшую часть программы.
СКАЗОЧНИК писал(а):а вот вторую даже представить не могу. Тем более это уже другой М, а значит изучать надо по новой все?
Все не так сложно. Один из примеров. Изначально создавал проект для M3, потом понадобилось упростить и перенес на M0, а потом в другом проекте для M4 использовал много кода из первоначального проекта и перенесенного на M0. Не скажу что было сложно переносить. Потребовалась небольшая корректировка кода конфигурации GPIO и DMA а все остальное без изменений насколько помню. Использовал SPL.
Ответить

Вернуться в «ARM»