ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
STM32 новичку в ARM что к чему
плюсую за ассемблер, использую fasmarm + akelpad + stlink utility 
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
- Реклама
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Выиграть секунды на загрузке среды, чтобы потерять часы, дни и месяцы на разработке.
Они просто ничего не разрабатывали еще, так балуются. 
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
О! А я думал, я один тут такой! Только я не готов ставить минималистский комплект из асма с линкером и программатора - я разбаловался на АВР Студии и пр. IDE с визуальными отладчиками, чтобы можно было покомандно пройти подозрительный участок, поразглядывать, что там в регистрах и т.п. Все-таки времена EDK, MACRO-11 и пультовой микро-ODT Электроники-60 и ДВК уже прошли.Мяукните! писал(а):Знакомая проблема... Лично я её решил ещё в детстве, однозначно совершив переход на ассемблер. С тех пор, никаких проблем с размерами и скоростью.
Вот и выбираю, что бы поставить. ГНУсь не хочу, у нее асм всегда различает большие и маленькие буквы. Приличный же асм должен это делать только по специальной просьбе, а если не просят, считать большие и маленькие буквы одним и тем же. ИАР я пробовал на MSP430, там, кстати и обломился с ГНУсью - у техасских инструментов их Код Композер Студия - ГНУсное творение на Эклипсе, я, как только узнал, что SetP1 и setp1 - разные метки и этому гнусному асму никак не скажешь, что это одно и то же, взбесился, снес эту студию к чертям и поставил ИАР, асму которого можно приказать не различать большие и маленькие буквы.
На STM32 - да, ни разу. Все мои разработки остались далеко в прошлом, вместе с ДВК, Э-60 и прочими Системами 360/370. А сейчас - так, кое-что по мелочи на АВР, а теперь решил попробовать STM32.Oxford писал(а):Они просто ничего не разрабатывали еще, так балуются.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
У KEIL можно выбирать компилятор, встроенный или GCC.
Оптимизация и перформанс просто адовый. То что вам позволял GCC и закрывал глаза на быдлокод, с KEIL не прокатит.
Оптимизация и перформанс просто адовый. То что вам позволял GCC и закрывал глаза на быдлокод, с KEIL не прокатит.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Реклама
- Сообщения: 139
- Зарегистрирован: Чт фев 11, 2016 18:35:37
Слушайте, не знаю, как там у вас в Черной ганде - может там все друг другу трижды в день брудершафт наливают, но я с вами брудершафта не пил.afz писал(а):АВР Студию ты тоже берешь самую свежую?
Ну, в моей шутке доля шутки вполне обычная, так что пугаться её не следовало. Что до авр-студии, то ни первую, ни последнюю не пользую. Наяриваю помаленьку. Самый последний бывает нужен тогда, когда появляются новые линейки, не поддерживаемые непоследней версией. Просто так все время следить за тем, чтобы версия была самая распоследняя, разумеется, не стремлюсь.afz писал(а):Я же серьезно спрашиваю.
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
Задача у меня сейчас примитивная, но надо много ножек. Первично я заложился на f103vet6 (можно было бы и f103v8t6, но проект разовый, жить будет на готовой китайской демоплате, а она (демоплата) на V8t6 оказалась сильно дороже демоплаты на VET6. Более того, хватило бы и АВР-ки, в районе 8-й Меги, если бы среди них были 100- или 144-ногие).
Только вот возможны варианты. Если я решусь подключить еще одну подзадачу, то не исключено, что мне и сотни ног не хватит. Пока присматриваюсь к вот такой плате на ZET6. Так вот, я ведь не ошибаюсь? Несмотря на заявленные прошивку и отладку через "взрослые" JLINK и ULINK2, никто не препятствует пользовать ST-link V2, да? Более того, если внимательно покопаться в контактах, то там можно будет найти SWDIO, SWDCLK и связываться с этой платой через SWD. Или нет?
Только вот возможны варианты. Если я решусь подключить еще одну подзадачу, то не исключено, что мне и сотни ног не хватит. Пока присматриваюсь к вот такой плате на ZET6. Так вот, я ведь не ошибаюсь? Несмотря на заявленные прошивку и отладку через "взрослые" JLINK и ULINK2, никто не препятствует пользовать ST-link V2, да? Более того, если внимательно покопаться в контактах, то там можно будет найти SWDIO, SWDCLK и связываться с этой платой через SWD. Или нет?
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Можно через SWD, можно и через полный JTAG. ST-Link умеет оба, на плате тоже похоже на JTAG разъём справа.
- Сообщения: 87
- Зарегистрирован: Вс ноя 15, 2015 05:54:13
Какую максимальную частоту можно подать на источник внешнего тактирования (clock source) таймера (stm32f4) ?
В даташите указаны максимальные частоты для таймера. Не более чем он сам может работать.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 87
- Зарегистрирован: Вс ноя 15, 2015 05:54:13
Я нашел другие данные в даташите. А что будит если подать больше частоту чем указано?
- Вложения
-
- таймер.png
- (157.01 КБ) 414 скачиваний
- Сообщения: 87
- Зарегистрирован: Вс ноя 15, 2015 05:54:13
Настроил ацп на передачу преобразования через dma с помощью cuba(приложил скрины). в mian прописал
Но ацп делает только одно преобразования заносит его в массив в все потом молчит. Больше не чего не оцифровывает. Хотя бит CONT стоит в единице. Что не так?
Код: Выделить всё
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, в нем глубина вложенности вызовов функций просто бездонная. Там наверное половина ресурсов МК уходит на прыганье в функции и передергивание стека 
Иван Сусанин - первый полупроводник 
- Сообщения: 791
- Зарегистрирован: Вт июн 17, 2014 00:34:26
Вот тут можно посмотреть, как настроить АЦП и DMA
https://hubstub.ru/programming/66-stm32-acp.html
https://hubstub.ru/programming/79-stm32 ... u-dma.html
https://hubstub.ru/programming/66-stm32-acp.html
https://hubstub.ru/programming/79-stm32 ... u-dma.html
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
То, что ацп настраивается в несколько строчек, все, кто этим хоть когда-нибудь занимался, знают. Но автор спрашивал про кубу, где настройка чего угодно, процесс в высшей степени не очевидный, на грани софизма с элементами мистики. В последний раз, когда я пробовал кубу для stm32f030f4p6, одна только инициализация периферии, а там и было только три устройства, без каких либо прикладных алгоритмов, заняла 14 килобайт флеша из 16. Посмотрев на такое дело я понял, что это только для сильных духом людей и продолжил писать по старинке, где то же самое, плюс довольно пространный прикладной алгоритм, заняли шесть килобайт всего.
2 Andrew Martin
Ваши функции для работы с числами с плавающей запятой очень помогли, благодарю! Обнаружил в них две неточности в работе и исправил их:
1) в функции fpadd при сложении двух одинаковых чисел получался неправильный результат. Проблема была в этом участке (порядок увеличивался, а мантисса оставалась прежней):
добавил после bcc:
2) функция fpcomps давала не верный результат при сравнении двух отрицательных чисел. Добавил проверку на это и смену местами самих чисел перед проверкой:
было:
стало:
Ваши функции для работы с числами с плавающей запятой очень помогли, благодарю! Обнаружил в них две неточности в работе и исправил их:
1) в функции fpadd при сложении двух одинаковых чисел получался неправильный результат. Проблема была в этом участке (порядок увеличивался, а мантисса оставалась прежней):
Код: Выделить всё
lsls r1,r0,8 ;check for carry (bit 25)
bcc .fpa_nocarry
adds r2,1 ;EXP=EXP+1
.fpa_nocarry:
Код: Выделить всё
lsls r1,r0,8 ;check for carry (bit 25)
bcc .fpa_nocarry
lsrs r0, 1
adds r2,1 ;EXP=EXP+1
.fpa_nocarry:
было:
Код: Выделить всё
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% (подкл. ОС).
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
- Сообщения: 606
- Зарегистрирован: Вт июн 25, 2013 18:45:07
Вполне может быть.
Сложение и сравнение я не использовал в проектах.
Спасибо за отчет. Как только появится время - сделаю багфикс у себя.
Неплохо обкатаны процедуры перевода форматов и умножения.
Неоптимально организована процедура извлечения квадратного корня в реализации с плавающей точкой, хорошо бы изменить алгоритм, используя тот же алгоритм, что и в целочисленной процедуре.
Ну и конечно же нет проверок на всякие NaNы и прочую лабудень, но мы же с вами хорошо видим, что скармливать процедурам, поэтому проблем быть не должно.
Сложение и сравнение я не использовал в проектах.
Спасибо за отчет. Как только появится время - сделаю багфикс у себя.
Неплохо обкатаны процедуры перевода форматов и умножения.
Неоптимально организована процедура извлечения квадратного корня в реализации с плавающей точкой, хорошо бы изменить алгоритм, используя тот же алгоритм, что и в целочисленной процедуре.
Ну и конечно же нет проверок на всякие NaNы и прочую лабудень, но мы же с вами хорошо видим, что скармливать процедурам, поэтому проблем быть не должно.
Не вижу и не понимаю в чем ошибка. Кристалл stm32f051:
Если этот IF включить, то программа почему-то туда не заходит. типа бит RTC->ISR ALRAWF уже стоит в "1". Но писать в регистр ALRMAR не даёт.
Если убираю этот IF и принудительно снимаю ALRAE, то всё работает.
Код: Выделить всё
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 и принудительно снимаю ALRAE, то всё работает.
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
а зачем этот 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) */


