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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Сообщение Alexey_N »

плюсую за ассемблер, использую fasmarm + akelpad + stlink utility :beer:
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Реклама
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

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

Сообщение Oxford »

Они просто ничего не разрабатывали еще, так балуются. :))
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

Мяукните! писал(а):Знакомая проблема... Лично я её решил ещё в детстве, однозначно совершив переход на ассемблер. С тех пор, никаких проблем с размерами и скоростью.
О! А я думал, я один тут такой! Только я не готов ставить минималистский комплект из асма с линкером и программатора - я разбаловался на АВР Студии и пр. IDE с визуальными отладчиками, чтобы можно было покомандно пройти подозрительный участок, поразглядывать, что там в регистрах и т.п. Все-таки времена EDK, MACRO-11 и пультовой микро-ODT Электроники-60 и ДВК уже прошли. :)

Вот и выбираю, что бы поставить. ГНУсь не хочу, у нее асм всегда различает большие и маленькие буквы. Приличный же асм должен это делать только по специальной просьбе, а если не просят, считать большие и маленькие буквы одним и тем же. ИАР я пробовал на MSP430, там, кстати и обломился с ГНУсью - у техасских инструментов их Код Композер Студия - ГНУсное творение на Эклипсе, я, как только узнал, что SetP1 и setp1 - разные метки и этому гнусному асму никак не скажешь, что это одно и то же, взбесился, снес эту студию к чертям и поставил ИАР, асму которого можно приказать не различать большие и маленькие буквы.
Oxford писал(а):Они просто ничего не разрабатывали еще, так балуются. :))
На STM32 - да, ни разу. Все мои разработки остались далеко в прошлом, вместе с ДВК, Э-60 и прочими Системами 360/370. А сейчас - так, кое-что по мелочи на АВР, а теперь решил попробовать STM32.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

У KEIL можно выбирать компилятор, встроенный или GCC.
Оптимизация и перформанс просто адовый. То что вам позволял GCC и закрывал глаза на быдлокод, с KEIL не прокатит.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Реклама
Встал на лапы
Сообщения: 139
Зарегистрирован: Чт фев 11, 2016 18:35:37

Сообщение L.O.D »

afz писал(а):АВР Студию ты тоже берешь самую свежую?
Слушайте, не знаю, как там у вас в Черной ганде - может там все друг другу трижды в день брудершафт наливают, но я с вами брудершафта не пил.
afz писал(а):Я же серьезно спрашиваю.
Ну, в моей шутке доля шутки вполне обычная, так что пугаться её не следовало. Что до авр-студии, то ни первую, ни последнюю не пользую. Наяриваю помаленьку. Самый последний бывает нужен тогда, когда появляются новые линейки, не поддерживаемые непоследней версией. Просто так все время следить за тем, чтобы версия была самая распоследняя, разумеется, не стремлюсь.
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
Реклама
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

Задача у меня сейчас примитивная, но надо много ножек. Первично я заложился на f103vet6 (можно было бы и f103v8t6, но проект разовый, жить будет на готовой китайской демоплате, а она (демоплата) на V8t6 оказалась сильно дороже демоплаты на VET6. Более того, хватило бы и АВР-ки, в районе 8-й Меги, если бы среди них были 100- или 144-ногие).

Только вот возможны варианты. Если я решусь подключить еще одну подзадачу, то не исключено, что мне и сотни ног не хватит. Пока присматриваюсь к вот такой плате на ZET6. Так вот, я ведь не ошибаюсь? Несмотря на заявленные прошивку и отладку через "взрослые" JLINK и ULINK2, никто не препятствует пользовать ST-link V2, да? Более того, если внимательно покопаться в контактах, то там можно будет найти SWDIO, SWDCLK и связываться с этой платой через SWD. Или нет?
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Можно через SWD, можно и через полный JTAG. ST-Link умеет оба, на плате тоже похоже на JTAG разъём справа.
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

Сообщение Alex_Golubev »

Какую максимальную частоту можно подать на источник внешнего тактирования (clock source) таймера (stm32f4) ?
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

В даташите указаны максимальные частоты для таймера. Не более чем он сам может работать.
Screenshot_8.png.jpg
(111.64 КБ) 483 скачивания
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

Сообщение Alex_Golubev »

Я нашел другие данные в даташите. А что будит если подать больше частоту чем указано?
Вложения
таймер.png
(157.01 КБ) 414 скачиваний
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

Сообщение Alex_Golubev »

Настроил ацп на передачу преобразования через dma с помощью cuba(приложил скрины). в mian прописал

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

HAL_ADC_Start(&hadc1); 
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC1ConvertedValues, 10);

Но ацп делает только одно преобразования заносит его в массив в все потом молчит. Больше не чего не оцифровывает. Хотя бит CONT стоит в единице. Что не так?
Вложения
adc_cube_4.png
(183.8 КБ) 416 скачиваний
adc_cube_3.png
(80.64 КБ) 375 скачиваний
adc_cube_2.png
(65.47 КБ) 245 скачиваний
adc_cube_1.png
(73.01 КБ) 232 скачивания
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

А ну ее в баню, эту кубу. Раз в несколько месяцев скачиваю свежую версию, кропаю с ее помощью чего нибудь, убеждаюсь, что ничего не работает, продолжаю писать через регистры. Видно не дорос я еще до кубы. :)
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

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

Сообщение baghear »

Вот тут можно посмотреть, как настроить АЦП и DMA
https://hubstub.ru/programming/66-stm32-acp.html
https://hubstub.ru/programming/79-stm32 ... u-dma.html
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

То, что ацп настраивается в несколько строчек, все, кто этим хоть когда-нибудь занимался, знают. Но автор спрашивал про кубу, где настройка чего угодно, процесс в высшей степени не очевидный, на грани софизма с элементами мистики. В последний раз, когда я пробовал кубу для stm32f030f4p6, одна только инициализация периферии, а там и было только три устройства, без каких либо прикладных алгоритмов, заняла 14 килобайт флеша из 16. Посмотрев на такое дело я понял, что это только для сильных духом людей и продолжил писать по старинке, где то же самое, плюс довольно пространный прикладной алгоритм, заняли шесть килобайт всего.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Сообщение Alexey_N »

2 Andrew Martin
Ваши функции для работы с числами с плавающей запятой очень помогли, благодарю! Обнаружил в них две неточности в работе и исправил их:
1) в функции fpadd при сложении двух одинаковых чисел получался неправильный результат. Проблема была в этом участке (порядок увеличивался, а мантисса оставалась прежней):

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

	lsls	r1,r0,8		;check for carry (bit 25)
	bcc	.fpa_nocarry
	adds	r2,1		;EXP=EXP+1
	
.fpa_nocarry:
добавил после bcc:

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

	lsls	r1,r0,8		;check for carry (bit 25)
	bcc	.fpa_nocarry
	lsrs    r0, 1
	adds	r2,1		;EXP=EXP+1

.fpa_nocarry:
2) функция fpcomps давала не верный результат при сравнении двух отрицательных чисел. Добавил проверку на это и смену местами самих чисел перед проверкой:
было:

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

	ands	r2,r3
	bne	.pos_neg
	;Compare exponents
	lsls	r2,r0,1
стало:

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

	ands	r2,r3
	bne	.pos_neg
	tst     r0, r3
	beq     .continue
	mov     r2, r1
	mov     r1, r0
	mov     r0, r2
	;Compare exponents
	.continue:
	lsls	r2,r0,1
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

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

Вполне может быть. :dont_know:
Сложение и сравнение я не использовал в проектах.
Спасибо за отчет. Как только появится время - сделаю багфикс у себя.
Неплохо обкатаны процедуры перевода форматов и умножения.
Неоптимально организована процедура извлечения квадратного корня в реализации с плавающей точкой, хорошо бы изменить алгоритм, используя тот же алгоритм, что и в целочисленной процедуре.
Ну и конечно же нет проверок на всякие NaNы и прочую лабудень, но мы же с вами хорошо видим, что скармливать процедурам, поэтому проблем быть не должно.
Друг Кота
Аватара пользователя
Сообщения: 7360
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Не вижу и не понимаю в чем ошибка. Кристалл stm32f051:

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

                    case KEY_UP:
                        RTC->WPR = 0xCA; /* (1) */
                        RTC->WPR = 0x53; /* (1) */
//                        if ((RTC->ISR & RTC_ISR_ALRAWF) != RTC_ISR_ALRAWF) {
                            RTC->CR &=~ RTC_CR_ALRAE; /* (2) */
                            while ((RTC->ISR & RTC_ISR_ALRAWF) != RTC_ISR_ALRAWF); /* (3) */
//                        }
Если этот IF включить, то программа почему-то туда не заходит. типа бит RTC->ISR ALRAWF уже стоит в "1". Но писать в регистр ALRMAR не даёт.

Если убираю этот IF и принудительно снимаю ALRAE, то всё работает.
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

а зачем этот if и проверять бит RTC_ISR_ALRAWF до сброса бита RTC_CR_ALRAE:
ALRAWF: Alarm A write flag
This bit is set by hardware when Alarm A values can be changed, after the ALRAE bit has
been set to 0 in RTC_CR.
It is cleared by hardware in initialization mode.
0: Alarm A update not allowed
1: Alarm A update allowed
в сниппетсах так сделано:

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

  /* Configure RTC */
  /* (7) Write access for RTC regsiters */
  /* (8) Disable alarm A to modify it */
  /* (9) Wait until it is allow to modify alarm A value */
  /* (10) Modify alarm A mask to have an interrupt each 1Hz */
  /* (11) Enable alarm A and alarm A interrupt */
  /* (12) Disable write access */
  /* (13) Tamper configuration:
          - Disable precharge (PU)
          - RTCCLK/256 tamper sampling frequency
          - Activate time stamp on tamper detection
          - input rising edge trigger detection on RTC_TAMP2 (PA0)
          - Tamper interrupt enable */
  RTC->WPR = 0xCA; /* (7) */
  RTC->WPR = 0x53; /* (7) */
  RTC->CR &=~ RTC_CR_ALRAE; /* (8) */
  while((RTC->ISR & RTC_ISR_ALRAWF) != RTC_ISR_ALRAWF) /* (9) */
  { 
    /* add time out here for a robust application */
  }
  RTC->ALRMAR = RTC_ALRMAR_MSK4 | RTC_ALRMAR_MSK3 | RTC_ALRMAR_MSK2 | RTC_ALRMAR_MSK1; /* (10) */
  RTC->CR = RTC_CR_ALRAIE | RTC_CR_ALRAE; /* (11) */ 
  RTC->WPR = 0xFE; /* (12) */
  RTC->WPR = 0x64; /* (12) */
  RTC->TAFCR = RTC_TAFCR_TAMPPUDIS | RTC_TAFCR_TAMPFREQ | RTC_TAFCR_TAMPTS | RTC_TAFCR_TAMP2E | RTC_TAFCR_TAMPIE; /* (13) */
Ответить

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