Тема посвящена микроконтроллерам с архитектурой ARM Cortex-M.
Они стали "убийцами" 8-разрядных микроконтроллеров, так как они 32-разрядные, дешёвые, производительные, нафаршированы мощной периферией, например, 16 разрядными таймерами(есть модели с 32-разрядными таймерами), 12-разрядными АЦП (как правило), 12-разрядными ЦАП (как правило), различными приёмо-передатчиками.
Их изготавливают многие производители. Выпускаются множество недорогих ознакомительных плат со встроенными отладчиками и программаторами.
Есть свободные среды разработки, что тоже важно.
Микроконтроллеры AVR всё ещё популярны, но они 8-разрядные. При той же самой цене можно найти гораздо более навороченные и нафаршированные более крутой периферией (как правило, содержат 12-разрядные АЦП, некоторые модели имеют даже 16-разрядные сигма-дельта АЦП на борту) 32-разрядные микроконтроллеры с архитектурой ARM Cortex M, например STM32 фирмы ST Microelectronics или SAM3 фирмы Atmel или LPC1XXX фирмы NXP. Найболее ходовые сечас STM32. Понятное дело, что конкурировать с 32-разрядными недорогими микроконтроллерами 8-разрядным микроконтроллерам AVR с каждым годом всё сложнее.
Для микроконтроллеров с архитектурой ARM Cortex M есть множество сред разработки, в том числе свободные:
- для микроконтроллеров от разных производителей есть свободная среда разработки CooCox [ссылка]
- для микроконтроллеров STM32 есть свободная среда разработки System Workbench for STM32 [ссылка]
- есть также несвободная среда разработки IAR
Для начинающих фирма ST Microelectronics предлагает различные недорогие ознакомительные платы, например STM32F4DISCOVERY, которые содержат на борту отладчики ST-LINK, что очень удобно.
В микроконтроллерах с архитектурой ARM Cortex-M4, например STM32F3 и STM32F4 имеют на борту МАТЕМАТИЧЕСКИЙ СОПРОЦЕССОР и с их помощью можно осуществлять цифровую обработку сигналов. Но время не стоит на месте, сейчас самыми новыми считаются микроконтроллеры с архитектурой ARM Cortex-M7, например STM32F7, которые тоже относительно недорогие, но ещё более производительные, чем их предшественники.
Микроконтроллеры ARM Cortex-M потребляют немного и, в то же время, имеют высокую производительность.
Но имейте также в виду, что микроконтроллеры ARM Cortex-M сложнее, чем те же микроконтроллеры AVR или PIC. Их на порядок сложнее программировать, чем микроконтроллеры AVR или PIC, но они стоят того, чтобы их применяли в новых проектах, так как в большинстве случаев их применение более выгодно, чем применение 8-разрядных микроконтроллеров.
Есть задачи, где определяющим является не числодробилка, а время реакции на прерывание- тут у АРМов пока плохо. Реакция на прерывание занмкает от 13 до 26 тактов и никто заранее не знает сколько точно будет. Все зависит от момента прерывания случайно.
С большинством восьмиразрядников все четко -2 такта строго.
dedivan Пост: 507566 От 10.Sep.2016 (16:07)
Есть задачи, где определяющим является не числодробилка, а время реакции на прерывание- тут у АРМов пока плохо. Реакция на прерывание занмкает от 13 до 26 тактов и никто заранее не знает сколько точно будет. Все зависит от момента прерывания случайно.
С большинством восьмиразрядников все четко -2 такта строго.
Да, я тоже столкнулся с этой проблемой. Тем более, у тех же AVR обработчик прерывания пишется гораздо проще, чем для STM32. В программах для STM32 приходится вручную сбрасывать флаги, а в AVR это делается автоматически. В итоге обработчик прерывания у AVR короче по числу команд. Но STM32 отыгрываются более высокой тактовой частотой и 32-разрядной архитектурой, что даёт возможность уменьшить количество команд при выполнении математических и логических операций. А в 8-разрядных ЭВМ приходится делать многоходовые операции, перебрасывать данные из регистра в регистр, делать лишние операции с флагами. Преймущество 32-разрядных микроконтроллеров налицо.
sw1972 Пост: 507569 От 10.Sep.2016 (16:15)
Но STM32 отыгрываются более высокой тактовой частотой
Для того чтобы сравняться тут с атмелами , армы долны иметь частоту выше 600 мгц. Есть такие. но это уже другие требования к монтажу, печатке, это уже не домашние технологии- только готовые заводские модули брать. Благо они уже тоже не такие дорогие бывают.
Старые сотики типа мотороллы можно на это использовать.
А если юэсби не нужен, то и сименсы старенькие пойдут.
Тут уже другой плюс армов вылазит- одинаковая архитектура.
Эти платы имеют совсем другое назначение, они по-сути являются полноценными персональными ЭВМ с цифровыми выходами, которыми пользователь может произвольно управлять, кроме того, на них установлены МИКРОПРОЦЕССОРЫ ARM Cortex-A, а это несколько другая архитектура. В ветке речь идёт о МИКРОКОНТРОЛЛЕРАХ с архитектурой ARM Cortex-M.
Можно предложить несколько плат.
STM32VLDISCOVERY, на которой установлен микроконтроллер STM32F100RBT6, ядро ARM Cortex-M3.
STM32F4DISCOVERY, на которой установлен микроконтроллер STM32F407VGT6, ядро ARM Cortex-M4.
Ключевые особенности(на английском):
STM32F407VGT6 microcontroller featuring 32-bit ARM Cortex® -M4 with FPU core, 1-Mbyte Flash memory, 192-Kbyte RAM in an LQFP100 package
On-board ST-LINK/V2 on STM32F4DISCOVERY or ST-LINK/V2-A on STM32F407G-DISC1
ARM® mbed™ -enabled (http://mbed.org) with ST-LINK/V2-A only
USB ST-LINK with re-enumeration capability and three different interfaces:
Virtual com port (with ST-LINK/V2-A only)
Mass storage (with ST-LINK/V2-A only)
Debug port
Board power supply: through USB bus or from an external 5 V supply voltage
External application power supply: 3 V and 5 V
LIS302DL or LIS3DSH ST MEMS 3-axis accelerometer
MP45DT02 ST MEMS audio sensor omni-directional digital microphone
CS43L22 audio DAC with integrated class D speaker driver
Eight LEDs:
LD1 (red/green) for USB communication
LD2 (red) for 3.3 V power on
Four user LEDs, LD3 (orange), LD4 (green), LD5 (red) and LD6 (blue)
2 USB OTG LEDs LD7 (green) VBUS and LD8 (red) over-current
Two push buttons (user and reset)
USB OTG FS with micro-AB connector
Extension header for all LQFP100 I/Os for quick connection to prototyping board and easy probing
Comprehensive free software including a variety of examples, part of STM32CubeF4 package or STSW-STM32068 for legacy standard libraries usage
Фирма STMicroelectronics предлагает множество ознакомительных плат с различными микроконтроллерами, разной комплектацией, разнообразным набором периферии и, соответственно, различные по стоимости. Их можно купить на радиорынках и в интернет-магазинах, их легко найти.
Для любителей Ардуины выпускаются платы STM32 Nucleo.
sw1972 Пост: 507569 От 10.Sep.2016 (16:15)
Но STM32 отыгрываются более высокой тактовой частотой
Для того чтобы сравняться тут с атмелами , армы долны иметь частоту выше 600 мгц. Есть такие. но это уже другие требования к монтажу, печатке, это уже не домашние технологии- только готовые заводские модули брать. Благо они уже тоже не такие дорогие бывают.
Старые сотики типа мотороллы можно на это использовать.
А если юэсби не нужен, то и сименсы старенькие пойдут.
Тут уже другой плюс армов вылазит- одинаковая архитектура.
Не спорю, проблемы с прерываниями есть. Компиляторы генерируют очень длинный машинный код в обработчиках прерываний, не знаю почему, сам с этим столкнулся. Но не стоит забывать, что Кортексы отыгрывают в другом: в разрядности кода, более высокими тактовыми частотами, навороченной периферией. В большинстве случаев это перевешивает недостаток обработчиков прерываний.
sw1972 Пост: 507623 От 11.Sep.2016 (05:34)
Компиляторы генерируют очень длинный машинный код в обработчиках прерываний, не знаю почему,
Не- это не компилятор виноват.
Это особенности железа- хитрый контроллер прерываний с приоритетами
и конвейерная архитектура с длинным конвейером- пока он сбросится, новым загрузится....это все время, это еще все не считая пересылок-сохранения рабочих регистров. В общем долго он все это делает.
Бывают задачки где этого времени нет- там атмелы ставят дополнительно к армам.
Посмотри -есть спутниковые рессиверы, смартфоны какие то- там так сделано.
sw1972 Пост: 507622 От 11.Sep.2016 (05:25)
Эти платы имеют совсем другое назначение,...
Жалко что разговор о АРМах задержался и я поспешил
самостоятельно ...
Рекомендуемые платы не видел , а на глаза попала
вот такая . Еще взял к ней в придачу программатор
ST-LINK V2 .
Генератор понадобился с длительностью импульса
пока 100 нан , а там может и короче маленько.
Пока выкрутился обычным , а воспаленная фантазия
требует двустволку . Да еще и старт второго - от
синхронно , до с задержкой до 200 нан.
Пока тема не открывалась я был спокоен , а сейчас
заволновася ...
Вопрос : реально ли на этой плате (там Cortex M3
STM32F103C8T6 ) сделать такой генератор с несколькими
каналами да с независимой регулировкой параметров
импульса и скважности . Не упрусь ли в прерывания ?
Или еще во что ни будь . 😎
sw1972 Пост: 507622 От 11.Sep.2016 (05:25)
Эти платы имеют совсем другое назначение,...
Жалко что разговор о АРМах задержался и я поспешил
самостоятельно ...
Рекомендуемые платы не видел , а на глаза попала
вот такая . Еще взял к ней в придачу программатор
ST-LINK V2 .
Генератор понадобился с длительностью импульса
пока 100 нан , а там может и короче маленько.
Пока выкрутился обычным , а воспаленная фантазия
требует двустволку . Да еще и старт второго - от
синхронно , до с задержкой до 200 нан.
Пока тема не открывалась я был спокоен , а сейчас
заволновася ...
Вопрос : реально ли на этой плате (там Cortex M3
STM32F103C8T6 ) сделать такой генератор с несколькими
каналами да с независимой регулировкой параметров
импульса и скважности . Не упрусь ли в прерывания ?
Или еще во что ни будь . 😎
Без паники!
Я Вас утешу. Похоже, плата подойдёт для ваших задач.
Вы в прерывание не упрётесь. В таймерах есть функции ШИМ. Таймеры в этих контроллерах могут друг другом управлять согласно записям в управляющие регистры таймеров, не надо даже подпаивать внешние проводники.
Советую почитать даташит CD00161566.pdf и очень большое руководство пользователя на серию микроконтроллеров CD00171190.pdf (RM0008 Reference manual) размер которого 9536281 байт. Причём во втором документе раскрыты все подробности работы как с ядром МК, так и с периферией. Эти документы есть на сайте STMicroelectronics.
sw1972 Пост: 507691 От 11.Sep.2016 (14:41)
Я Вас утешу.
Большое спасибо !
Рекомендованные документы будут очень кстати !
Ядро микроконтроллера STM32F103C может работать на частоте до 72 МГц, которая формируется путём умножения частоты кварцевого генератора от 4 до 16 МГц или внутреннего RC-генератора 8 МГц с помощью системы ФАПЧ. Коэфициенты умножения задаются при старте программы.
Для длительностей импульсов 100 нс частоты до 72МГц будет маловато, так как точно задать 100 нс не получится. Но для тренировки и отработки программы плата подойдёт.
Потом можно будет перейти на микроконтроллеры STM32 с более продвинутыми ядрами, например STM32F4 или STM32F7.
sw1972 Пост: 507623 От 11.Sep.2016 (05:34)
Компиляторы генерируют очень длинный машинный код в обработчиках прерываний, не знаю почему,
Не- это не компилятор виноват.
Это особенности железа- хитрый контроллер прерываний с приоритетами
и конвейерная архитектура с длинным конвейером- пока он сбросится, новым загрузится....это все время, это еще все не считая пересылок-сохранения рабочих регистров. В общем долго он все это делает.
Бывают задачки где этого времени нет- там атмелы ставят дополнительно к армам.
Посмотри -есть спутниковые рессиверы, смартфоны какие то- там так сделано.
В книге Мартин М. Инсайдерское руководство по STM32 на странице 27 сказано, что с момента возникновения прерывания до выполнения первой инструкции его обработки проходит ВСЕГО ЛИШЬ 12 циклов. По времени достаточно много.
И ещё 12 циклов потребуется для возобновления выполнения фоновой программы. По-сути 12+12=24 цикла впустую.
Если хочешь использовать тараканов для измерений, то лучше использовать MSP430 это такие интересные 16 разрядные камушки, с архитектурой и системой команд аналогичной DEC -овским машинам известным у нас как Электроника-60.
Если кто с ними работал- то вообще все просто. Вот и наши производители электросчетчиков пошли проторенным путем.
Все они в военке раньше работали с Э-60, а с приходом перестройки пришлось осваивать мирную продукцию.
Тут им и пригодились старые навыки. Почти все отечественные электросчетчики сделаны на MSP430. Они очень удачно подходят для таких целей. И они шустрые по сравнению с АРМ.
А для самодельщиков так вообще готовая халява. У электронных счетчиков срок службы небольшой, их принудительно меняют через несколько лет согласно паспорта. А там ничего не ломается окромя литиевой батарейки, зато все остальное - готовый прибор.
Там и транс питания от сети и токовый транс и дисплей и последовательный канал для программирования да еще и опторазвязкой.
Короче шикарный набор хоть для изучения, хоть для самоделок. И все это добро за пару бутылок пива у местных энергетиков добывается.
Вопрос : реально ли на этой плате (там Cortex M3
STM32F103C8T6 ) сделать такой генератор с несколькими
каналами да с независимой регулировкой параметров
импульса и скважности . Не упрусь ли в прерывания ?
Или еще во что ни будь . 😎
Реально, если это будут отдельные DDS типа AD9851 ... а с STM ими управлять. Кстати подобный генератор... притом на большее число каналов синхронизированных, у меня есть реализованный на ПЛИС
Вопрос : реально ли на этой плате (там Cortex M3
STM32F103C8T6 ) сделать такой генератор с несколькими
каналами да с независимой регулировкой параметров
импульса и скважности . Не упрусь ли в прерывания ?
Или еще во что ни будь . 😎
Реально, если это будут отдельные DDS типа AD9851 ... а с STM ими управлять. Кстати подобный генератор... притом на большее число каналов синхронизированных, у меня есть реализованный на ПЛИС
Если надо менять частоту произвольно, с точностью до долей герца , тогда действительно придётся делать DDS.
Я тоже делал DDS на STM32F100 и на STM32F407 (исполдьзовал платы STM32VLDISCOVERY и STM32F4DISCOVERY соответственно) с частотой квантования 64 килогерца при частоте ядра 8 МГц, не смог прыгнуть выше. Более-менее пристойная синусоида получалась на низких частотах. Всё упёрлось в медленную отработку прерывания по таймеру 6. К сожалению, использовать ПДП здесь не выйдет, иначе картина была бы намного лучше.
sw1972
Я тоже делал DDS на STM32F100 и на STM32F407 (исполдьзовал платы STM32VLDISCOVERY и STM32F4DISCOVERY соответственно) с частотой квантования 64 килогерца при частоте ядра 8 МГц, не смог прыгнуть выше. Более-менее пристойная синусоида получалась на низких частотах. Всё упёрлось в медленную отработку прерывания по таймеру 6. К сожалению, использовать ПДП здесь не выйдет, иначе картина была бы намного лучше.
Я тоже пытался делать синусоиду (вернее две) на дисковери, через DAC интегрированный в плату на аудио частоте... но запарился с алгоритмом и решил использовать внешний ДДС, но так и не понял, почему нельзя использовать ПДП, я именно его и собирался использовать. Т.е. формировать в буфер и отправлять на дак через ПДП по SPI
dedivan Пост: 508218 От 14.Sep.2016 (13:37)
Если хочешь использовать тараканов для измерений, то лучше использовать MSP430 это такие интересные 16 разрядные камушки, с архитектурой и системой команд аналогичной DEC -овским машинам известным у нас как Электроника-60.
Если кто с ними работал- то вообще все просто. Вот и наши производители электросчетчиков пошли проторенным путем.
Все они в военке раньше работали с Э-60, а с приходом перестройки пришлось осваивать мирную продукцию.
Тут им и пригодились старые навыки. Почти все отечественные электросчетчики сделаны на MSP430. Они очень удачно подходят для таких целей. И они шустрые по сравнению с АРМ.
А для самодельщиков так вообще готовая халява. У электронных счетчиков срок службы небольшой, их принудительно меняют через несколько лет согласно паспорта. А там ничего не ломается окромя литиевой батарейки, зато все остальное - готовый прибор.
Там и транс питания от сети и токовый транс и дисплей и последовательный канал для программирования да еще и опторазвязкой.
Короче шикарный набор хоть для изучения, хоть для самоделок. И все это добро за пару бутылок пива у местных энергетиков добывается.
В счётчиках MSP430 применяют не только потому, что система команд близка к PDP-11, но и потому, что они очень мало потребляют энергии. Микроконтроллеры хорошие, вот только программаторы для них нужны фирменные. Не так как в случае AVR, для которых было придумано множество простых программаторов, которые легко изготавливались в домашних условиях.
Тем не менее многие микроконтроллеры из серии MSP430 можно программировать через загрузчик (Bootstrap Loader, или сокращённо BSL), который намертво зашит на кристалле. Загрузка производится через имитирующий RS-232 протокол.
dedivan Пост: 508218 От 14.Sep.2016 (13:37)
Если хочешь использовать тараканов для измерений, то лучше использовать MSP430 это такие интересные 16 разрядные камушки, с архитектурой и системой команд аналогичной DEC -овским машинам известным у нас как Электроника-60.
Я в середине 80-х познакомился с Э-60. А позже у нас выпускали комплект БИС под эту архитектуру - 588 серия. Довелось делать на них измериловку. И в программировании поупражнялся.😊
sw1972
Я тоже делал DDS на STM32F100 и на STM32F407 (исполдьзовал платы STM32VLDISCOVERY и STM32F4DISCOVERY соответственно) с частотой квантования 64 килогерца при частоте ядра 8 МГц, не смог прыгнуть выше. Более-менее пристойная синусоида получалась на низких частотах. Всё упёрлось в медленную отработку прерывания по таймеру 6. К сожалению, использовать ПДП здесь не выйдет, иначе картина была бы намного лучше.
Я тоже пытался делать синусоиду (вернее две) на дисковери, через DAC интегрированный в плату на аудио частоте... но запарился с алгоритмом и решил использовать внешний ДДС, но так и не понял, почему нельзя использовать ПДП, я именно его и собирался использовать. Т.е. формировать в буфер и отправлять на дак через ПДП по SPI
Нельзя использовать ПДП потому, что мы заранее не знаем, сколько отсчётов надо записать в память и можно ли будет сшить правильно кривую, чтобы не было скачков и частота входного сигнала была бы правильная. Очень жаль. Приходится в этом случае работать через прерывания, чтобы определять новый отсчёт.
Нельзя использовать ПДП потому, что мы заранее не знаем, сколько отсчётов надо записать в память и можно ли будет сшить правильно кривую, чтобы не было скачков и частота входного сигнала была бы правильная. Очень жаль. Приходится в этом случае работать через прерывания, чтобы определять новый отсчёт.
Как это не знаем? ДАК сразу настраивается на определенный битрэйт и на циклический буфер. Зная битрэйт, мы можем все расчитать и сформировать данные заранее. В качестве входных данных получается битрэйт и размер буфера. Из этого вычисляется все остальное. Получаем прерывание по достижению середины буфера ПДП. На нем переписываем начало и конца буфера - переписываем конец.
Я думаю, что все получилось бы, если бы во время отладки, при которой глюки лезли, я не обратил внимание на платки небольшие с DDS-ами на борту и мне это показалось и проще и функциональнее...
sw1972 Пост: 508231 От 14.Sep.2016 (16:08)
Микроконтроллеры хорошие, вот только программаторы для них нужны фирменные. Не так как в случае AVR, для которых было придумано множество простых программаторов, которые легко изготавливались в домашних условиях.
Это ты со зла. 😬
Как раз у 430х самая простая система доступа к внутренностям - на шинах адреса и данных стоят регистры-защелки, через них можно считать или записать любой байт в любой момент. Это и программатор и отладка два в одном. И работает стандартно через те же 5 проводков от лпт порта. У Атмелов эта система устроена сложнее- через специальные регистры, которые они до конца не описывают.
Там хитрости заложены для защиты кода. У 430х все прямо и просто, а защиту кода они делают через прежигание фуза.
Да, 430е самые малопотребляющие. И система команд у них проще даже чем у пиков- всего 27 команд.
Но обрати внимание, что они оптимизированы именно для измерений.
8 разрядные хороши для управления, а для измерения 8 разрядов мало, обычно 10-12-16 разрядов нужно.
И вот тут 430 одной левой делают все 8 разрядники. Только вспомни сколько движений надо сделать на 8 разрядных,
чтобы перемножить или поделить два отсчета с АЦП - все отдельно по байтам, целая программа. А в 16 разрядном - одна команда.