STM32 новичку в ARM что к чему
- Сообщения: 7013
- Зарегистрирован: Сб янв 28, 2006 22:47:24
Кроме всего прочего, открытый коллектор (настоящий) в некоторых случаях позволяет оперировать с напряжениями большими чем напряжение питания самого микроконтроллера.
Астролябия-сама меряет, было бы что мерять!!!
- Реклама
[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.)
P.S. Посмотрел даташит - да, похоже режима, о котором я рассуждал выше, действительно нету (pull-down резистор + работающий P-канальный транзистор, тогда как N-канальный всё время отключен). Но даже в этом случае его можно искусственно сделать (вместо записи в ODR нуля или едиинцы держать там всегда лог. 1, а уже лог. 0 обеспечивать резистором, переключаясь в режим входа). Но вообще да, практически необходимость в "монтажном ИЛИ" не так часто нужна, как в "монтажном И" (который используется в том же I²C.)
Последний раз редактировалось WiseLord Сб сен 25, 2021 06:16:01, всего редактировалось 2 раза.
- Сообщения: 3
- Зарегистрирован: Чт мар 18, 2021 13:15:59
Коллеги, выручайте!!!
Ситуация такая:
Для прототипа устройства использую отладочную плату 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.
Внешнего программатора у меня нет. Внимание вопрос!!!
ЧТО ДЕЛАТЬ???
И что делать, если всё-таки найду программатор? Что куда цеплять или где про это почитать?
Ситуация такая:
Для прототипа устройства использую отладочную плату 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
WHISPER, сам как-то такое вытворил, когда под рукой не было переходника USB-UART, попытки с 20-й получилось сделать connect under reset (тут нужно умудриться сразу после нажатия enter, когда вводишь в компе make load, отпустить зажатый reset).
Ну или через UART-бутлоадер.
Ну или через UART-бутлоадер.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Реклама
- Сообщения: 369
- Зарегистрирован: Пт фев 01, 2013 21:05:30
[uquote="WHISPER",url="/forum/viewtopic.php?p=4101267#p4101267"]Я получил платы, которые не могу перепрошить, т.к. своими руками программно отключил не только JTAG-DP, но и SW-DP.
ЧТО ДЕЛАТЬ???[/uquote]
Всегда можно перепрошить по UART1
ЧТО ДЕЛАТЬ???[/uquote]
Всегда можно перепрошить по UART1
Поддержу Eddy_Em, прошить легко можно, зажав reset, запустив процесс прошивки и сразу же отпустив reset.
- Сообщения: 3
- Зарегистрирован: Чт мар 18, 2021 13:15:59
Камрады, всем спасибо за оперативность!!! Всё удачно перепрошил по UART1.
- Сообщения: 191
- Зарегистрирован: Вт июн 05, 2018 00:18:01
Может кто подскажет проверенные библиотеки для FFT на 512 точек, Q15 / Q31? Надо для M0+ (stm32g030f6).
CMSIS DSP к сожалению в память не влазит, слишком толстые таблицы создает. Опции чтобы остались только нужные таблицы, естественно, задавал. Меня бы устроило чуть медленнее, но чтобы таблиц не более 12 килобайт.
CMSIS DSP к сожалению в память не влазит, слишком толстые таблицы создает. Опции чтобы остались только нужные таблицы, естественно, задавал. Меня бы устроило чуть медленнее, но чтобы таблиц не более 12 килобайт.
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Что означает фраза - проверенные библиотеки?pvit писал(а):проверенные библиотеки для FFT на 512 точек
Библиотека CMSIS DSP кроме основного расчета FFT использует расчет "оконных" функций и всяких фильтров, что бы "окно" было как можно узким, тогда эффект красивее будет.
Если начать снижать точность вычислений, к примеру 12 бит АЦП -> 8 бит АЦП, выкинуть из кода "оконные" функций и всякие фильтры, в результате точность вычислений упадет, "окно" станет широким, и придем к тому эффекту, что был на AVR контролерах.
Разве вы этого хотите?
Ну раз хотите, то берете библиотеку CMSIS DSP и начинаете все таблицы пересчитывать под 8 бит АЦП, убирать все комплексные расчеты с запятой и подгонять их под обыкновенные целочисленные расчеты, выкидывать из кода все расчеты "оконных" функций и всяких фильтров и связанные с ним таблицы, в результате у вас получится всего одна таблица, максимум 200-400 байт, и кусок кода в 2 кило.
Если уж я со своими 5 классами образования справился, то вы и подавно справитесь.
Я бы мог предоставить образец кода, который с успехом влазить в stm32f030f4p6, но, к сожалению, я аматор, любитель, не профессионал, сразу налетят профессионалы: -о лишний сдвиг, -о деление, -о код не читаемый, -о это надо было на rtos или "конечных автоматах" и т.п.
- Сообщения: 191
- Зарегистрирован: Вт июн 05, 2018 00:18:01
Прочитайте еще раз что я написал. Там нет ни слова про снижение точности. Есть много вариантов реализации FFT и не везде такое количество и размер таблиц как в cmsis dsp. По-моему я написал достаточно внятно, что я хочу.
Не вижу смысла приплетать сюда точность и оконные функции. А так же давать советы по пересчету таблиц, когда я задал вопрос про готовые альтернативные библиотеки.
[uquote="Dimon456",url="/forum/viewtopic.php?p=4109173#p4109173"]Что означает фраза - проверенные библиотеки?[/uquote]
Battle tested. Которые использовали много людей, и вы лично можете подтвердить что все ок.
Не вижу смысла приплетать сюда точность и оконные функции. А так же давать советы по пересчету таблиц, когда я задал вопрос про готовые альтернативные библиотеки.
[uquote="Dimon456",url="/forum/viewtopic.php?p=4109173#p4109173"]Что означает фраза - проверенные библиотеки?[/uquote]
Battle tested. Которые использовали много людей, и вы лично можете подтвердить что все ок.
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Нет, не все ок, во первых динамический диапазон сильно зарезан, был 12 бит стал 8 бит, это как сравнивать mp3 64 кбит*сек с 320 кбит*сек.pvit писал(а):что все ок.
Во вторых отсутствие "оконной" функции картинку сводит на нет. Приходится резать на уровне -15 - -25дБ, хотя это можно было бы еще отображать.
Тогда в чем проблема, берете и используете.pvit писал(а):Есть много вариантов реализации FFT и не везде такое количество и размер таблиц как в cmsis dsp.
- Сообщения: 191
- Зарегистрирован: Вт июн 05, 2018 00:18:01
[uquote="Dimon456",url="/forum/viewtopic.php?p=4109219#p4109219"]Тогда в чем проблема, берете и используете.[/uquote]
Хотелось бы получить ответ на мой вопрос. Кто какие библиотеки для целочисленного FFT использовал, с данными Q15 / Q31.
https://radiokot.ru/forum/viewtopic.php ... 7#p4108997 вот тут я ровно про это спросил. Ничего не изменилось. Проблем нет. Есть вопрос. И меня интересует ответ именно на него, а не на что-то еще.
Хотелось бы получить ответ на мой вопрос. Кто какие библиотеки для целочисленного FFT использовал, с данными Q15 / Q31.
https://radiokot.ru/forum/viewtopic.php ... 7#p4108997 вот тут я ровно про это спросил. Ничего не изменилось. Проблем нет. Есть вопрос. И меня интересует ответ именно на него, а не на что-то еще.
[uquote="Asmodey",url="/forum/viewtopic.php?p=4076431#p4076431"]А разве Keil не за денюжку?[/uquote]
Атолик бесплатный под любой камень и под любой размер.
Атолик бесплатный под любой камень и под любой размер.
[uquote="shalfey",url="/forum/viewtopic.php?p=4123312#p4123312"]Атолик бесплатный под любой камень и под любой размер.[/uquote]
Атолик у ST дипрекейтед с 2017 года. На основе Эклипса. Кубиде - на основе эклипса. Единственная разница - наличие у атолика кнопки чистой сборки, знакомый как-то очень искал такую кнопку в кубиде.
Атолик у ST дипрекейтед с 2017 года. На основе Эклипса. Кубиде - на основе эклипса. Единственная разница - наличие у атолика кнопки чистой сборки, знакомый как-то очень искал такую кнопку в кубиде.
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[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 двухбайтовых инструкций которые и будут выведены на печать:
Деприкейтид же
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();
Вопрос не по stm, но очень мелкий по EFM, но скорее всего просто по ARM. Планирую сделать интепретатор команд типа двигаться прямо, направо, стоп итп. для робота. В общем, он должен вызываться каждые 2,5мс. Или чаще, но если нет флага готовности данных сразу выход. Пока собираюсь из высокоуровневого процесса, который и будет кидать в очередь команды вызывать просто в цикле эту процедуру. Но я вообще-то ленивый и возникла мысль, а не вызывать ли её по прерыванию. Причем приоритет задать самый низкий, чтобы не мешать другим прерываниям, что там уже и так толпами работают. Но если вызывать по прерыванию, неплохо бы его как-то привязать к флагу, который поднимает другое прерывание, сообщая что данные готовы. Но, это прерывание имеет довольно высокий приоритет и я не могу в нем вызывать эту процедуру - она слишком развесистая для прерывания.
Так вот вопрос, есть ли какой механизм из одного прерывания сформировать запрос другого прерывания, чтобы оно вызвалось следом?
Так вот вопрос, есть ли какой механизм из одного прерывания сформировать запрос другого прерывания, чтобы оно вызвалось следом?
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
То есть если данные не готовы, прерывание не вызывать? Ну так запретите его, а в другом прерывании разрешите.
А кто это прерывание вызовет? Прерывание о готовности данных у меня вызывает DMA по окончании трансфера, затем делается небольшая обработка и выставляется флаг готовности данных. Хорошо, я туда добавлю NVIC_EnableIRQ(). А дальше?
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="uldemir",url="/forum/viewtopic.php?p=4201846#p4201846"]есть ли какой механизм из одного прерывания сформировать запрос другого прерывания, чтобы оно вызвалось следом?[/uquote]
Есть PendSV, задаешь ему самый низкий приоритет и выставляешь бит SCB_ICSR_PENDSVSET.
Есть PendSV, задаешь ему самый низкий приоритет и выставляешь бит SCB_ICSR_PENDSVSET.


