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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 7013
Зарегистрирован: Сб янв 28, 2006 22:47:24

Сообщение Asmodey »

Кроме всего прочего, открытый коллектор (настоящий) в некоторых случаях позволяет оперировать с напряжениями большими чем напряжение питания самого микроконтроллера.
Астролябия-сама меряет, было бы что мерять!!!
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

[uquote="pavell",url="/forum/viewtopic.php?p=4096175#p4096175"]Откуда возьмется лог 1? Открытый коллектор может обеспечить 2 состояния - высокоимпендансное и лог 0 (открытый транзистор), так?[/uquote]А разве нет режима, когда N-канальный транзистор отключен, а работает только P-канальный?
P.S. Посмотрел даташит - да, похоже режима, о котором я рассуждал выше, действительно нету (pull-down резистор + работающий P-канальный транзистор, тогда как N-канальный всё время отключен). Но даже в этом случае его можно искусственно сделать (вместо записи в ODR нуля или едиинцы держать там всегда лог. 1, а уже лог. 0 обеспечивать резистором, переключаясь в режим входа). Но вообще да, практически необходимость в "монтажном ИЛИ" не так часто нужна, как в "монтажном И" (который используется в том же I²C.)
Последний раз редактировалось WiseLord Сб сен 25, 2021 06:16:01, всего редактировалось 2 раза.
Контактная информация:
Реклама
Мучитель микросхем
Сообщения: 446
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Откуда: 69.Ржев

Сообщение a797945 »

просто термин потерял кавычки : "открытый коллектор"
;)
Родился
Аватара пользователя
Сообщения: 3
Зарегистрирован: Чт мар 18, 2021 13:15:59

Сообщение WHISPER »

Коллеги, выручайте!!!

Ситуация такая:
Для прототипа устройства использую отладочную плату STM32VLDiscovery. И дёрнула меня нелёгкая при разводке платы задействовать пины PB3, PB4 (плату делал в спешке).
Так вот... Изначально код инициализации портов выглядел так:

RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
GPIOB->CRL &= ~GPIO_CRL_CNF3;
GPIOB->CRL |= GPIO_CRL_MODE3_0;
GPIOB->CRL &= ~GPIO_CRL_CNF4;
GPIOB->CRL |= GPIO_CRL_MODE4_0;

При отладке программы понял, что надо либо резать и переносить дорожки (ибо в таком виде не работает), либо решить проблему программным способом.
Резать плату я не стал, а вместо этого добавил следующее:

RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
и внимание!!! барабанная дробь!!! вместо AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
я добавляю AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_DISABLE;

Запустив, я убедился, что порты заработали и... (барабанная дробь)
И я прошиваю все платы этой модификацией программы... Та-да-а-а...

Через пол часа я понял, что это - ФИАСКО, Братан!!!
Я получил платы, которые не могу перепрошить, т.к. своими руками программно отключил не только JTAG-DP, но и SW-DP.

Внешнего программатора у меня нет. Внимание вопрос!!!

ЧТО ДЕЛАТЬ???
И что делать, если всё-таки найду программатор? Что куда цеплять или где про это почитать?
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

WHISPER, сам как-то такое вытворил, когда под рукой не было переходника USB-UART, попытки с 20-й получилось сделать connect under reset (тут нужно умудриться сразу после нажатия enter, когда вводишь в компе make load, отпустить зажатый reset).
Ну или через UART-бутлоадер.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 369
Зарегистрирован: Пт фев 01, 2013 21:05:30

Сообщение es131245 »

[uquote="WHISPER",url="/forum/viewtopic.php?p=4101267#p4101267"]Я получил платы, которые не могу перепрошить, т.к. своими руками программно отключил не только JTAG-DP, но и SW-DP.

ЧТО ДЕЛАТЬ???[/uquote]

Всегда можно перепрошить по UART1
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Поддержу Eddy_Em, прошить легко можно, зажав reset, запустив процесс прошивки и сразу же отпустив reset.
Контактная информация:
Родился
Аватара пользователя
Сообщения: 3
Зарегистрирован: Чт мар 18, 2021 13:15:59

Сообщение WHISPER »

Камрады, всем спасибо за оперативность!!! Всё удачно перепрошил по UART1.
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт июн 05, 2018 00:18:01

Сообщение pvit »

Может кто подскажет проверенные библиотеки для FFT на 512 точек, Q15 / Q31? Надо для M0+ (stm32g030f6).

CMSIS DSP к сожалению в память не влазит, слишком толстые таблицы создает. Опции чтобы остались только нужные таблицы, естественно, задавал. Меня бы устроило чуть медленнее, но чтобы таблиц не более 12 килобайт.
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

pvit писал(а):проверенные библиотеки для FFT на 512 точек
Что означает фраза - проверенные библиотеки?
Библиотека CMSIS DSP кроме основного расчета FFT использует расчет "оконных" функций и всяких фильтров, что бы "окно" было как можно узким, тогда эффект красивее будет.
Если начать снижать точность вычислений, к примеру 12 бит АЦП -> 8 бит АЦП, выкинуть из кода "оконные" функций и всякие фильтры, в результате точность вычислений упадет, "окно" станет широким, и придем к тому эффекту, что был на AVR контролерах.

Разве вы этого хотите?

Ну раз хотите, то берете библиотеку CMSIS DSP и начинаете все таблицы пересчитывать под 8 бит АЦП, убирать все комплексные расчеты с запятой и подгонять их под обыкновенные целочисленные расчеты, выкидывать из кода все расчеты "оконных" функций и всяких фильтров и связанные с ним таблицы, в результате у вас получится всего одна таблица, максимум 200-400 байт, и кусок кода в 2 кило.

Если уж я со своими 5 классами образования справился, то вы и подавно справитесь.

Я бы мог предоставить образец кода, который с успехом влазить в stm32f030f4p6, но, к сожалению, я аматор, любитель, не профессионал, сразу налетят профессионалы: -о лишний сдвиг, -о деление, -о код не читаемый, -о это надо было на rtos или "конечных автоматах" и т.п.
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт июн 05, 2018 00:18:01

Сообщение pvit »

Прочитайте еще раз что я написал. Там нет ни слова про снижение точности. Есть много вариантов реализации FFT и не везде такое количество и размер таблиц как в cmsis dsp. По-моему я написал достаточно внятно, что я хочу.

Не вижу смысла приплетать сюда точность и оконные функции. А так же давать советы по пересчету таблиц, когда я задал вопрос про готовые альтернативные библиотеки.

[uquote="Dimon456",url="/forum/viewtopic.php?p=4109173#p4109173"]Что означает фраза - проверенные библиотеки?[/uquote]

Battle tested. Которые использовали много людей, и вы лично можете подтвердить что все ок.
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

pvit писал(а):что все ок.
Нет, не все ок, во первых динамический диапазон сильно зарезан, был 12 бит стал 8 бит, это как сравнивать mp3 64 кбит*сек с 320 кбит*сек.
Во вторых отсутствие "оконной" функции картинку сводит на нет. Приходится резать на уровне -15 - -25дБ, хотя это можно было бы еще отображать.
pvit писал(а):Есть много вариантов реализации FFT и не везде такое количество и размер таблиц как в cmsis dsp.
Тогда в чем проблема, берете и используете.
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт июн 05, 2018 00:18:01

Сообщение pvit »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4109219#p4109219"]Тогда в чем проблема, берете и используете.[/uquote]
Хотелось бы получить ответ на мой вопрос. Кто какие библиотеки для целочисленного FFT использовал, с данными Q15 / Q31.

https://radiokot.ru/forum/viewtopic.php ... 7#p4108997 вот тут я ровно про это спросил. Ничего не изменилось. Проблем нет. Есть вопрос. И меня интересует ответ именно на него, а не на что-то еще.
Встал на лапы
Сообщения: 123
Зарегистрирован: Ср май 16, 2012 20:44:38
Откуда: Харків-Україна.

Сообщение shalfey »

[uquote="Asmodey",url="/forum/viewtopic.php?p=4076431#p4076431"]А разве Keil не за денюжку?[/uquote]
Атолик бесплатный под любой камень и под любой размер.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

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

[uquote="shalfey",url="/forum/viewtopic.php?p=4123312#p4123312"]Атолик бесплатный под любой камень и под любой размер.[/uquote]
Атолик у ST дипрекейтед с 2017 года. На основе Эклипса. Кубиде - на основе эклипса. Единственная разница - наличие у атолика кнопки чистой сборки, знакомый как-то очень искал такую кнопку в кубиде.
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Ярослав555",url="/forum/viewtopic.php?p=4123720#p4123720"]дипрекейтед[/uquote]
Деприкейтид же :)

ps. Не совсем STM32, но я тут пару дней играюсь с Raspberry Pi Pico на двухъядерном Cortex-M0+, как раз сегодня утром плагин openOCD для VisualGDB обновился, стало быстрее и даже заработал RTT, правда только с jlink. St-link в связке с openOCD почему-то пишет, что не поддерживает SWD, а jlink напрямую с двухъядерными работает только с V10, а у меня V9. Ну и поскольку я не ищу легких путей, то за пару вечеров в качестве эксперимента был написан компилятор для модулей PIO полность отрабатывающий на этапе компиляции, т.е. после выполнения следующего кода во флеше останется только 19 двухбайтовых инструкций которые и будут выведены на печать:
Спойлер

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

static constexpr char pio_i2c[] = R"(
		.program i2c
		.side_set 1 opt pindirs

		wait 1 irq 2 rel
do_nack:
	    jmp y-- entry_point
		irq wait 0 rel

do_byte:
		set x, 7
bitloop:
		out pindirs, 1         [7]
		nop             side 1 [2]
		wait 1 pin, 1          [4]
		in pins, 1             [7]
		jmp x-- bitloop side 0 [7]

		out pindirs, 1         [7]
		nop             side 1 [7]
		wait 1 pin, 1          [7]
		jmp pin do_nack side 0 [2]

entry_point:
.wrap_target
		out x, 6
		out y, 1
		jmp !x do_byte
		out null, 32
do_exec:
		out exec, 16
		jmp x-- do_exec
.wrap
)";

Pio<pio_i2c> pio;
pioCheckError<pio.errorMsg>();
pio.printInstrs();
Друг Кота
Аватара пользователя
Сообщения: 7382
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Вопрос не по stm, но очень мелкий по EFM, но скорее всего просто по ARM. Планирую сделать интепретатор команд типа двигаться прямо, направо, стоп итп. для робота. В общем, он должен вызываться каждые 2,5мс. Или чаще, но если нет флага готовности данных сразу выход. Пока собираюсь из высокоуровневого процесса, который и будет кидать в очередь команды вызывать просто в цикле эту процедуру. Но я вообще-то ленивый и возникла мысль, а не вызывать ли её по прерыванию. Причем приоритет задать самый низкий, чтобы не мешать другим прерываниям, что там уже и так толпами работают. Но если вызывать по прерыванию, неплохо бы его как-то привязать к флагу, который поднимает другое прерывание, сообщая что данные готовы. Но, это прерывание имеет довольно высокий приоритет и я не могу в нем вызывать эту процедуру - она слишком развесистая для прерывания.

Так вот вопрос, есть ли какой механизм из одного прерывания сформировать запрос другого прерывания, чтобы оно вызвалось следом?
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

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

Сообщение uldemir »

А кто это прерывание вызовет? Прерывание о готовности данных у меня вызывает DMA по окончании трансфера, затем делается небольшая обработка и выставляется флаг готовности данных. Хорошо, я туда добавлю NVIC_EnableIRQ(). А дальше?
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="uldemir",url="/forum/viewtopic.php?p=4201846#p4201846"]есть ли какой механизм из одного прерывания сформировать запрос другого прерывания, чтобы оно вызвалось следом?[/uquote]
Есть PendSV, задаешь ему самый низкий приоритет и выставляешь бит SCB_ICSR_PENDSVSET.
Ответить

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