Pull to refresh

Comments 18

А до написания программ, автор не пробовал посмотреть например на файл startup_stm32f103xb.s,
поставляемый произодителем (ST Electronics) и являющийся как раз файлом правильной
инициализациеи контроллера на ассемблере?
Не пробовал. Обязательно его посмотрю, спасибо.
Как выяснилось это было зря, прежде всего потому, что таймеры слишком быстрые для такого рода задач.

Не стоит вводить людей в заблуждение, с таймерами у STM всё отлично, надо внимательно читать даташит. Есть счетчик таймера, есть предделитель. Достичь секунд задержки — запросто.
Возможно я что-то настроил не правильно. Как будет время посмотрю еще раз.
ещё там есть RTC, то есть таймер часов реального времени
Как раз про них я и подумал, что следовало бы настроить прерывания по RTC. Я настроил по TIM2. Возможно что-то настроил не правильно, но добиться задержки в секунду по нему у меня не получилось.
RTC тактируется от отдельного тактового источника — внутреннего или внешнего по (умолчанию от внутреннего), этот источник тактирования включается независимо от основного.
Если цель — обучение, лучше попробовать все варианты, узнать фишки таймеров и т.д.
Как уже выше сказали, сделать можно на любом таймере, вот в этом и надо разобраться.
спасибо большое за очень хорошую статью!
вот бы мне когда нибудь так кодить на асме!

а не пробовали замахнуться и сделать реальный проект на асме?
например что нибудь полезное и реально нужно всем
что то что может во всю показать силу и практичность использования асма?

например сделать самый шустрый и компактный загрузчик
это очень полезная тема каждому второму микроконтроллерщику.

например вот тут (ссылка) есть интересный проект загрузчика
загрузчик простой, только позволяет обновить прошивку и не более,
делов там такому мастеру как Вы явно на пару дней.

и ещё в нём много минусов которые прямо рождены чтоб показать всю мощь асма:
— он написан на C99 и далеко не самым крутым кодером, да что уж говорить, он там даже switch-case не использовал и не изпользует вызов фукций по номеру из таблицы!!! хотя есть немало команд внутри, и их обработку так и проситься свести если не в таблицу, то в switch-case, одни сплошные ифы, брррр!
— он использует SPL — либу для работы с переферей от производителя, она монстроидальная и слишком абсрагирована
— так же он использует вызовы библиотек языка, тоже ещё тот монстр

тем не менее есть и плюсы:
— этот загрузчик работает в 10 раз быстрее чем штатный для стм32Ф4 а он прошивается реально очень долго.
— сделана неплохая программа для ПК с детализацией всех логов и ответную часть для пк писать не надо
— загрузчик использует механизм гарантированной доставки взятый из TCP с «окнами» инфой о позиции, ретрансмисиями в случае сбоев и способен работать даже если уарт изредка глючит — всегда доведёт дело до конца.
— есть немало людей которые его используют и он очень востребован
— автор с радостью отвечает на вопросы и сделал полный гайд на хабре, включая детальное описание протокола на русском.
— есть исходный опорный алгоритм на я бы сказал очень примитивном си

Я уверен такой мастер как Вы запросто уменьшит размер этого загрузчика в десятки раз! — Что очень актуально особенно например для младшей серии STM32F100 например. АСМ сила!
Спасибо за лестный отзыв :) Но я боюсь Вы переоценивайте мои способности. Я с ассемблером познакомился только пол года назад и сейчас крайне сомневаюсь что моих знаний хватит чтобы потянуть чего-то серьезное. Пока хочу сосредоточится на обучении. Когда-нибудь я планирую разобраться с загрузчиками, но пока я к этому не готов.
То, что работает в 10 раз быстрее, обычно умеет в 10 раз меньше.
Если есть люди, которым он очень востребован — в чем дело найти спеца на фрилансе, заплатить за пару вечеров и получить изделие?
Процесс обучения пойдет быстрее, если в том же KEIL, в режиме отладки, смотреть, что же он там генерит на макро.
По мне, так это хороший пример того, как НЕ надо писать на ASM для STM32 и прочих микроконтреллеров. Вопрос к автору, что будет, с мейном, если я дефайны не установлю для включения отдельных «модулей»?
Полностью согласен с тем, что то что сейчас получается не является хорошим примером кода на ассемблере. Эта тема для меня абсолютно не знакомая и сейчас я пытаюсь понять как это работает. Естественно на людей которые знакомы с темой эти попытки производят ужасающее впечатление :) Но информации по данной теме не так много по-этому я решил написать о том что получилось. По поводу дефайнов, если их не устанавливать в мейне, то все будет работать. Но если модули включить в других модулях и в мейне, то компилятор попытается сгенерировать один и тот же код дважды и вылетит с ошибкой.
Как по мне, для того, чтобы проникнуться тем, как работает процессор, лучше попрограммировать на ассемблере AVR или MSP430 — их ассемблер очень приятен, логичен и прост. Ассемблер ARM по человекочитаемости так себе; лучше предоставить его генерацию компилятору. Тем более, что писать на нем критичные по времени участки кода (например, драйвер 1-Wire) все равно нет смысла, потому что хитрый конвейер ARM все испортит. Я даже не уверен, что здесь поможет использование инструкций data memory barrier после каждой команды…

Если есть желание отринуть Ардуино и погрузиться в настоящую разработку, достаточно просто отказаться от использования библиотек для гуманитариев и попробовать писать с настройкой периферии через регистры. Так получается, во-первых, эффективнее, а, во-вторых, дидактический эффект присутствует во всей красе — вы будете достаточно детально знать, как и что работает внутри контроллера. Но готовьтесь всерьез изучать Reference Manual на используемый чип.

В качестве среды разработки под STM32 могу порекомендовать EmBitz (сборка Code::Blocks + ARM-GCC). Очень удобная штука, при этом с умеренными системными требованиями.
На счет MSP430 не знаю, по поводу AVR ассемблера согласен, он значительно проще чем ARM. На C сейчас программировать не хочу, ассемблер на мой взгляд более наглядно демонстрирует устройство микроконтроллера. Сейчас я хочу именно понять как работает различное железо. Хотя если вдруг возникнет идея сделать конкретный проект то я предпочту С. Глобальный план сейчас посмотреть в общих чертах как работает Cortex-M и перейти к Cortex-A. На Cortex-A хочу остановиться более подробно.
Sign up to leave a comment.

Articles