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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Сообщение Andrew Martin »

Отсутствие аппаратного отладчика заставляет тщательно и вдумчиво читать RMы и PMы, а не страдать ерундой вроде SPL и потом висеть на детских ошибках.

А на fault handlers сразу вешать включалки каких-нибудь индикаторов. Обратился по неправильному адресу - светодиод включился.
Через уарт тоже можно выбрасывать какие-то данные для отладки.

STM32 в отношении прошивки/отладки ушел гораздо дальше "народных" ПИКов и АВРов. Хорошая штука, к ним бы ещё симулятор...
Реклама
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Andrew Martin писал(а):Отсутствие аппаратного отладчика заставляет тщательно и вдумчиво читать RMы и PMы,
Самостоятельной ценностью это не является. В 99% случаях достаточно умения быстро найти необходимую информацию. Вред от отсутствия отладчика при разработке не может быть легко скомпенсирован зубрежкой манулов, т.к. значительная часть ошибок проистекает от невнимательности при написании кода.
STM32 в отношении прошивки/отладки ушел гораздо дальше "народных" ПИКов и АВРов. Хорошая штука, к ним бы ещё симулятор...
В протеусе появились модели АРМов, правда пока филипсовских. Cortex-M0 точно и вроде бы Cortex-M3 (пишу по памяти).
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

Тормоза и глючность небось между собой соревнуются?
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Сообщение Andrew Martin »

a5021 писал(а): В протеусе появились модели АРМов, правда пока филипсовских. Cortex-M0 точно и вроде бы Cortex-M3 (пишу по памяти).
Только М3. Толку от этого мало - ядро можно симулировать и в кейле, главная загвоздка - это периферия. А STM и разработчики протеуса видать не шибко сотрудничают.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Не, сейчас специально полез посмотреть, есть там М0. Некий ряд LPC111x. M3 побогаче, т.к. кроме филипсов еще стеларисы и атмелы. Хоть я в этой братии не особо шарю, но в симуляции примера по стеларису он ногами шевелит, графики рисует.

Изображение

То, что нет стм-ов -- пичалька.
Вложения
stellaris.jpg
(135.91 КБ) 2063 скачивания
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Сообщение Andrew Martin »

STM делает всякие кубы вместо действительно полезных вещей.

Какой версии у вас протеус?
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

СТМ Кубом наркоманит новичков. И в этом СТМ знает своё дело. Это агрессивная политика завоевания рынка. Что толку от стеларисов, атмелов и филипков если их нет в местном ларе. А СТМ есть в ассортименте и по приемлемой цене. И что толку от них в протезе если у СТМ есть Куб которым можно что-то натыкать и получить какой-то результат. Всё это неспроста.
Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Добрый день, подскажите как правильно отправлять и считывать данные по SPI. Так как выводом CS управляю программно и флаг проверки занятости проверять при каждой посылке не желательно, делаю так

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

SPI_WRITE_DATA(uint8_t data)
{
    CS_LOW
    while(!(SPI2->SR & SPI_SR_TXE));
    SPI->DR = data;
    while(!(SPI2->SR & SPI_SR_RXE));
    data = SPI->DR;
    CS_HIGH
}

Код работает, интересует его правильность.
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

Если код рабочий то вопрос правильности не должен возникать. С точки правильности по передача-приём можно считать правильным в некоторых случаях. С точки правильности по только передаче он не оптимален. Но работает. Значит с натяжкой тоже можно считать правильным. С точки зрения по оптимальности там всё неправильно начиная с дёргания CS.
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Andrew Martin писал(а):STM делает всякие кубы вместо действительно полезных вещей.
Куб тоже может быть полезен. Ноги распределить, тактирование поразглядывать.
Какой версии у вас протеус?
8.3 SP 2
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

Можно глупый вопрос?
обработчик прерывания CAN:
Спойлер

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

void USB_LP_CAN1_RX0_IRQHandler(void)
{
  CanRxMsg RxMessage;
  CAN_Receive(CAN1,CAN_FIFO0, &RxMessage);
  CAN_ID=RxMessage.StdId;
  CAN_DATA0=RxMessage.Data[0];
  CAN_DATA1=RxMessage.Data[1];
  CAN_DATA2=RxMessage.Data[2];
  CAN_DATA3=RxMessage.Data[3];
  CAN_DATA4=RxMessage.Data[4];
  CAN_DATA5=RxMessage.Data[5];
  CAN_DATA6=RxMessage.Data[6];
  CAN_DATA7=RxMessage.Data[7];
  CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0);
}
можно ли забирать только несколько байт, а не все 8?
И еще, пока с фильтрами не разбирался, хотел в прерывании фильтровать ID из 30 нужны только 3 ID и в каждом от 1 до 3 байт.
А то все пока в главном цикле крутятся(по другому пока не умею).
Сам только c AVR слез, а тут пока конструкторы собираю из примеров (хотя бы работает :solder: ), потихоньку въезжая в тему.
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Чт ноя 12, 2015 08:13:38

Сообщение Skitalec777 »

О сколько нам открытий чудных...
В процессе изучения ARM открываются все новые и новые факты, которые вынуждают постоянно корректировать свои планы. Например, оказалось, что имеется такая штука, как модуль операций с плавающей запятой, или FPU, который впервые появляется у Cortex-M4.

Скажите, пожалуйста, т.е. если я подключу датчик температуры к STM32F103, то смогу получать данные в виде, например, 36 С, а в виде 36,6 С не смогу? Или я что-то неправильно понял?

Заранее спасибо за ответ!
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

Надо отличать софтварное выполнение математических операций и хардварное. На всех линейках и даже на F4 (на F3 тоже есть) математика будет крутиться софтварно. На младших линейках чуть медленнее на старших быстрее из-за разницы команд ядра. На F4 (F3) есть ещё возможность включить и FPU. Это типа математического сопроцессора где некоторые математические операции будут выполняться хардварно на уровне ядра.
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Чт ноя 12, 2015 08:13:38

Сообщение Skitalec777 »

scorpi_0n писал(а):Надо отличать софтварное выполнение математических операций и хардварное. На всех линейках и даже на F4 (на F3 тоже есть) математика будет крутиться софтварно. На младших линейках чуть медленнее на старших быстрее из-за разницы команд ядра. На F4 (F3) есть ещё возможность включить и FPU. Это типа математического сопроцессора где некоторые математические операции будут выполняться хардварно на уровне ядра.
Другими словами, у STM32F103 с десятыми долями все нормально? Просто немного медленнее?
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

Я бы сказал по другому. Не медленнее. Просто у МК с FPU математика с большим количеством вычислений будет быстрее. FPU для этого и затевалось когда вычислений уж слишком много и надо считать быстрее.
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Чт ноя 12, 2015 08:13:38

Сообщение Skitalec777 »

scorpi_0n писал(а):Я бы сказал по другому. Не медленнее. Просто у МК с FPU математика с большим количеством вычислений будет быстрее. FPU для этого и затевалось когда вычислений уж слишком много и надо считать быстрее.
Теперь понял. Большое Вам спасибо за терпение и хорошее объяснение!
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

Разобрался с CAN фильтром(скажем быдлокоду НЕТ!), делюсь рабочим примером, т.к. на просторах, как оказалось - это является большым секретом.
пропускает только 4 ID: 0x54A, 0x54B, 0x625, 0x23D
Спойлер

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

  CAN_FilterInitStructure.CAN_FilterNumber=1;
  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
  CAN_FilterInitStructure.CAN_FilterIdHigh=0x54B<<5;
  CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x54B<<5;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
  CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);
  CAN_FilterInit(&CAN_FilterInitStructure);
	///////////////////////////
	CAN_FilterInitStructure.CAN_FilterNumber=2;
  CAN_FilterInitStructure.CAN_FilterIdHigh=0x54A<<5;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x54A<<5;
  CAN_FilterInit(&CAN_FilterInitStructure);
	//////////////////////////
	CAN_FilterInitStructure.CAN_FilterNumber=3;
  CAN_FilterInitStructure.CAN_FilterIdHigh=0x625<<5;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x625<<5;
  CAN_FilterInit(&CAN_FilterInitStructure);
	//////////////////////////
	CAN_FilterInitStructure.CAN_FilterNumber=4;
  CAN_FilterInitStructure.CAN_FilterIdHigh=0x23D<<5;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x23D<<5;
  CAN_FilterInit(&CAN_FilterInitStructure);
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Сообщение Alexey_N »

Разбираюсь тут с arm thumb инструкциями, не могу понять, есть ли инструкции, которыми можно оптимально организовать сравнение двух массивов байт, подобно, например rep scasb в x86, кроме как cmp?
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Сообщение Andrew Martin »

Alexey_N писал(а):Разбираюсь тут с arm thumb инструкциями, не могу понять, есть ли инструкции, которыми можно оптимально организовать сравнение двух массивов байт, подобно, например rep scasb в x86, кроме как cmp?
В V7-M вроде нет.
Вообще есть документы для каждой линейки, наподобие PM0056.
Тут хотя бы в V6-M автоинкремент/автодекремент нормально запилили, а то ldm/stm только с 32-битными работает.
Прорезались зубы
Аватара пользователя
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

Сообщение slavokhire5 »

привет котам:)
у кого есть опыт перевода платы с stm32f051 на stm32f091, какие следует ждать подводные камни, кроме некоторой повыводной несовместимости?
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Ответить

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