Макетная плата STM32F100C4. Программируемый генератор меандра.

Почти  на всех радиолюбительских форумах я часто встречаю яростные холивары AVR vs ARM (Cortex).  Народ упорно, до пены у рта и взаимных оскорблений, отстаивает свои позиции, почти ни чем не аргументируя их. ИМХО основная проблема перехода (или правильнее сказать «параллельного освоения») новой архитектуры лежит В УСТОЯВШИХСЯ ЛИЧНОСТНЫХ ПРИВЫЧКАХ, полученных в результате освоения своих первых контроллеров. Поясню, что я имею в виду.
1.  Эмбеддеры ранее юзавшие AVR/PIC/C51  и др. привыкли к своим определённым конструкциям в языке, к удобным для себя битовым операциям с регистрами и к давно освоенной IDE.  А для работы с ARM-ами производители предоставили кучу библиотек (довольно путанных и непонятных) , где те же битовые операции заменены на операции с элементами структур, которые, в свою очередь, на АВР-ках не так уж часто используются (может только у меня?). Кроме того, чем разбираться в over 9000  битовых масок, ИМХО проще посмотреть в описание регистров в RM и сделать привычные (1<< скока нада) 🙂 Хотя… фиг его знает — наверное это дело всё тех же шаблонов в головах.
2. Иная структура технической документации, включающая не только DS, но и RM, и UM, причём один на всю серию. Я, признаюсь честно, некоторое время тупил — какие же конкретно таймеры имеются в STM32F100C4. Вычислил по описаниям ног 🙂
3. Непривычный перенос проектов с компа на комп, по причине, того, что пути к компиляторам, подключаемым библиотекам и файлам разные.
Слова выше — это вступление в …. , а может в новое семейство )))
……………………………………………………………………………………………………………
Cortex-M3 контроллер STM32F100C4 по праву считается очень удачным выбором. Далеко не каждый контроллер с таким функционалом может похвастаться ценой в 1 $. Я, наконец-то, добрался и до него, соорудив очередной микроконтроллерный модуль для своего конструктора. Вернее сказать, я в этот раз зашарился, и нашел уже готовый рисунок макетки здесь. Большое спасибо автору за его работу.  Получилось в целом неплохо. Вот так:

STM32F100C4Теперь немного отмазок… На форумах проскакивают высказывания типа «… нафига делать самому макетку для STM и пр. , если есть готовые Дискавери за 5 копеек и др. …». Отвечаю: да Дискавери у меня имеется, и не только она — просто хочется самому «прощупать» все нюансы схемотехники, подключения питания, цепей сброса, тактирования и другого. Опять же опыт для ЛУТ с шагом 0,5/0,5… Да и интересно же! Одно дело наблюдать работу фабричной платы, а другое — собственноручно сделанной! STM32_topSTM32_bottomЛУТ рулит однозначно 🙂 Для проверки сабжа был написан код-бегемод. Нет, не угадали, не «Hello, world!», хотя периодическая последовательность прямоугольных импульсов выглядит настоящим «приветом» для тру-эмбеддеров от нового камня.  Т.к. основные интерфейсы, модули ввода/вывода освоены на AVR, то я воспользуюсь своими предыдущими наработками и «переведу» исходники для «прочтения» их STM-кой ))) Заодно покажу, как я постарался сохранить стиль написания программы а-ля AVR (ну ето не самоцель, ви же понимаете!).
Ставим задачу:
— сделать на STM32F100C4 генератор меандра с фиксированными частотами;
— меандр формировать не абы как, а таймером в режиме OUTPUT COMPARE;
— частоту устанавливать с помощью матричной клавиатуры 3х4, при этом клавишу «*» использовать как «ВВОД», а клавишу «#» — как «ОТМЕНА»;
— для отображения набора частоты и индикации режимов работы использовать LCD HD44780 2 строки по 24 символа без подсветки в режиме 4 бита без проверки бита занятости (ну не выведена у меня линия RW на этом модуле LCD !).
Для удобства работы с макеткой вот распиновка штырей:
STM32_PinsВ процессе реализации этой задачи мы освоим для STM32F100C4:
— инициализацию контроллера (файл стартап и пару строчек руками);
— работу с портами в режимах цифровых ввода и вывода (обслуживание клавиатуры и индикатора), альтернативных функций (TIMx OUTPUT COMPARE MODE);
— работу с таймером (непосредственно формирование меандра);
— ремап ног конроллера;
вылов багов в коде, чесание затылка и пляски с бубном.
Мало??? Ну, для начала вполне себе хватит, коллеги!
Быстренько колхозим макет 🙂
STM32F100C4_maketКстати, столкнулся с проблемой отладки в симуляторе — описываемый камень не поддерживается ваще никак ( error 65) отладчиком Кейла в релизе 4.23 — это у меня на нетбуке. В релизе   4.60 — на стационарном ПК, программа просто «шагает», но опять же в регистрах нет информации. И только при работе через J-Link (SWD) отладка идёт вроде бы как положено. Мне интересно необходимо было посмотреть, ОТКУДА стартует программа и ЧТО она делает до main, а то я было начал колхозить инициализацию ручками, по русскоязычному некорректно переведенному пособию с оЧепятками и недоЧепятками, гуляющему в сети.
Проект реализовывать рекомендую следующим образом:
1. Сначала просто подключите микроконтроллерный модуль к программатору/отладчику который у Вас имеется. Добейтесь чёткой компиляции проекта с миганием светодиода, прошивки его в чип и старта выполнения этого самого мигания после прошивки. Убедитесь в том, что прошивка изменяется (ну, допустим, изменяйте частоту мигания, чтобы визуально убедится в вышеуказанном).
2. Уберите в сторону светодиод и правильно подключите к Вашему макету ЖКИ. Измените исходник на вывод каких-нибудь символов или строк. Откомпилируйте и залейте в камень. Изменяя адреса вывода и непосредственно выводимые символы убедитесь, что программа чётко изменятся в зависимости от правки исходника.
3. После этого правильно подключите клавиатуру. В исходнике забейте вывод символов по нажатию на указанный адрес. Проследите за правильностью вывода символов нажимаемых кнопок.
4. Уже после всего этого подключите  наконец-то работу таймера, и осциллографом (если он у Вас имеется) наблюдайте «привет» от контроллера в виде радостного помахивания его лапкой.
TIM2_9MHzTIM2_2_25MHz

 

 

 

 

Если Вы всё сделали правильно, то устройство будет работать следующим образом. После включения на экране будет следующее:
9MHz_STOPт.е. по умолчанию установлена частота 9 МГц, генератор не работает. Нажатие на кнопку «*» запустит генератор. Экран отобразит:
9MHz_DONEНажатие на «#» остановит генератор не меняя настройки частоты. Нажатия на кнопки «0» -…- «9» остановит генерацию на выбранной ранее частоте и установить другую (фото ниже — результат нажатия кнопки «5»).
1_5MHz_STOPГенерацию на новой выбранной частоте запустит  кнопка «*».

Все файлы проекта я выкладываю в архиве. Комментарии пояснят новичкам ЧТО мы конкретно делаем в этот момент с контроллером. Кому будет интересно поменяйте настройку для ноги PA15 (выход меандра) в плане максимальной рабочей частоты (MODE15 в GPIOx_CRH ). Можно воочию убедиться в изменении фронтов/спадов.

Выводы, которые я сделал:
— если человек освоил нормально освоил ЛЮБОЕ семейство микроконтроллеров,  знает, что такое порты и таймеры, а также прерывания и пр., реализовывал интерфейсы и подключал внешние устройства ввода/вывода, и, кроме того, имеет желание и прямые руки — то переход на ЛЮБОЕ другое семейство не составит титанического труда !!!
— все споры о лучшести/полезности ЛЮБОГО семейства/архитектуры на другим — пустые разговоры ни о чём;
— с KEIL-а надо спрыгивать, скорее всего на CooCox (что я, в общем-то уже и делаю).
Ремарка к крайнему выводу:
Хотел совершенно искренне купить полную версию KEIL-а!!! Готов был отслюнявить честно заработанные 200-300 Евро (я так полагал), но когда узнал цену (!) , то пожелал остаться халявщиком партнёром.
P.S. Заранее отвечаю на вопрос: СХЕМА НАРИСОВАНА В ДЕФАЙНАХ!!!

Запись опубликована в рубрике ARM, Микроконтроллерный конструктор с метками , . Добавьте в закладки постоянную ссылку.

10 комментариев: Макетная плата STM32F100C4. Программируемый генератор меандра.

  1. Игорь говорит:

    А какой преобразователь питания (5В — 3.3В) используется?

  2. s_black говорит:

    LM1117 800mA Low-Dropout Linear Regulator

  3. Игорь говорит:

    Часовой кварц — обычный, скорее всего 12.5 pF и без дополнительных конденсаторов. Он работает? ST про него прямо говорят — не использовать такой. Что показывает ваш опыт? Нормально запускается? Действительно не нужны конденсаторы?

  4. s_black говорит:

    Обычный часовой кварц. Без конденсаторов. Запускается стабильно. А где СТ говорят?

  5. Игорь говорит:

    AN2586 http://www.st.com/web/en/resource/technical/document/application_note/CD00164185.pdf
    страница 13, note 1 к рисунку 9 : «. Never use a resonator with a load capacitance of 12.5 pF»

  6. st говорит:

    Ребят, помогите, может у кого есть идеи.. Воюю уже с 4м кристаллом, не видно по SWD хоть убей.. Плата простейшая, ничего лишнего…только 3 блокировочных кондера и 1к с BOOT0 на землю. Хоть с кварцем, хоть без. Питание от discovery. Что характерно, STLINK говорит на попытку соединения internal comand error, а не No tatget connected, как в случае отсутствия платы. Не пойму где может быть косяк..
    http://imageshack.us/a/img62/7489/2xje.jpg

  7. s_black говорит:

    А в чём пытаешься подключится? В Кейле или Кокосе?
    Попробуй переустановить IDE, если «железную» часть хорошо проверил.

  8. st говорит:

    Так набортный кристалл же видит нормально..и Кокос, и STlink утиля. Думал может на дискавери что-то отгорело, подкинул пины на джампера, которые переключают плата\swd — тот же эффект..Хоть бубен покупай и свечки в церковь ставь. Плату перед пайкой прозвонил, после пайки прозвонил. Понятно, что чудес не бывает, но не первый кристалл, значит что-то упускаю не первый раз

  9. st говорит:

    Вечер добрый. Может кому пригодится..ларчик открывался совсем иначе. Обновил прошивку модуля ST-Link на discovery с 1.10 до 1.12 — заработало

  10. s_black говорит:

    Конечно пригодится ! Спасибо за совет, коллега !

Добавить комментарий

Ваш e-mail не будет опубликован.