Как я могу узнать, как мигать светодиодом (например, в STM32) с помощью чистого кода?

По сути, я пытаюсь помигать светодиодом на STM32F103C8T6. Помимо светодиода на печатной плате имеется этикетка с надписью «PC13». Я немного поискал и понял, что это, вероятно, означает, что светодиод находится на 13-м контакте порта C, поэтому все, что мне нужно сделать, это установить его на высокий или низкий уровень, но как?

Я попробовал поискать в Google и нашел этот пример . Однако автор не дает достаточных объяснений, поэтому я не уверен в цели записи магических чисел в магические адреса (я думаю, это регистры с отображением в памяти?). В примере было потрачено некоторое время на настройку периферийных часов, но мы не делаем этого при использовании платформы Arduino, так зачем мне настраивать другие часы, когда цель так же проста, как управление булавкой? Что еще более важно, он не говорит мне, как самому определить шаги: как я могу узнать, что необходимо настроить часы? Компания ST предоставила подробные документы, включая Руководство по программированию и Справочное руководство, я не могу эффективно ориентироваться в этих руководствах на тысячу страниц. Раздел 9 Ввод-вывод общего назначения и альтернативных функций (GPIO и AFIO) выглядит уместным, но я просто не могу в нем разобраться.

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


person nalzok    schedule 08.02.2020    source источник
comment
вы смотрите на схемы и видите, как подключен светодиод, один конец привязан к высокому или один конец к низкому. Если привязан к высокому уровню, вам нужно заземлить конец gpio, если низкий, вам нужно подключить конец gpio к высокому уровню, чтобы включить его. или вы проводите эксперимент.   -  person old_timer    schedule 09.02.2020
comment
документация ST описывает, как работает каждый из регистров, документирует адреса, документирует, что вам необходимо включить часы для используемых периферийных устройств. 99% «голого железа» — чтение, 1% — написание кода, большую часть которого составляют эксперименты.   -  person old_timer    schedule 09.02.2020
comment
теперь да, чтобы быть справедливым, синие таблетки были клонированы, и кто знает, какая схема реальна, если таковая имеется. поэтому для этой конкретной платы вам нужно провести эксперименты.   -  person old_timer    schedule 09.02.2020
comment
как вы заливаете прошивку во флеш? и/или запущенные программы? если вы используете openocd, то вы можете использовать mdw и mww из сеанса telnet в openocd, чтобы читать и записывать эти регистры в документации и выяснять, как заставить это работать, прежде чем заставлять это делать программу. если вы используете загрузчик uart, просто напишите программы, подобные приведенной ниже. Если вы используете что-то еще, например загрузчик на основе USB, не запускайте программу в дублирующем ответе как есть, узнайте, где находится правильный адрес и как работает точка входа, и измените скрипт компоновщика и загрузчик, чтобы они соответствовали.   -  person old_timer    schedule 09.02.2020
comment
@old_timer А, спасибо за ответ! Я использую ST-link с OpenOCD, и mdw/mww определенно были бы полезны. Я собираюсь прочитать другой вопрос, но, во-первых, где я должен найти эти заголовочные файлы? ОП просто представил их в ссылках pastebin, не сказав, откуда он их взял.   -  person nalzok    schedule 09.02.2020
comment
@old_timer ... и не могли бы вы указать мне несколько соответствующих разделов в документе? На самом деле, я не думаю, что в разделе GPIO упоминается часть часов (или, может быть, я неправильно понял). Проблема в том, что я не могу сказать, какие части мне нужно прочитать подробно, чтобы мигать светодиодом, и невозможно прочитать их все.   -  person nalzok    schedule 09.02.2020
comment
просто посмотрите на пример в другом вопросе. регистры rcc в главе rcc охватывают часы, и есть несколько разрешений часов. ищите iopc в справочном руководстве, в некоторых документах вы можете просто искать gpioc, в других нет. работать в обратном направлении от адресов в примере. Первые несколько фишек, которые вы выучите, вам, возможно, придется прочитать 1000 страниц. требуется практика, чтобы изучить различные стили руководств и избежать необходимости читать все это целиком, в то же время вы попадаете в ловушки, которые вы не читали, пропуская и сталкиваясь с этим.   -  person old_timer    schedule 09.02.2020
comment
это все часть этой игры, если вы хотите играть в нее, большинство людей используют песочницы (библиотеки от поставщика или среды, подобные arduino), поэтому им не нужно с этим сталкиваться. Если вы хотите просто создать хобби-проект, например, какого-нибудь робота или что-то в этом роде, используйте библиотеки. если хобби-проект — чтение руководств и выяснение того, как все работает, и нет желания делать робота или что-то полезное. затем нужно копаться в этих документах и ​​проводить бесчисленные одноразовые эксперименты, пытаясь понять, о чем они говорят.   -  person old_timer    schedule 09.02.2020
comment
вполне возможно прочитать весь этот документ, если/по мере того, как вы работаете с каждым периферийным устройством, изучая, как они работают. для светодиода на выводе gpio, архитектура шины памяти главы 3 для получения адресов, часы и сброс главы 8, глава 9 gpio. плюс информация из справочного руководства по архитектуре armv7-m в отношении векторной таблицы и того, как она работает, затем документация gnu gcc и binutils или справочные страницы, чтобы узнать, как использовать эти инструменты для создания рабочего двоичного образа. затем любой инструмент, который вы используете для загрузки флэш-памяти   -  person old_timer    schedule 09.02.2020
comment
прежде чем задавать подобный вопрос, поищите на этом сайте. STM32F103C8T6 произвел несколько совпадений и пример мигания светодиода, который должен быть легко обратным к документам, экономя время, но все еще требуя необходимой работы для понимания.   -  person old_timer    schedule 09.02.2020
comment
@old_timer Хорошо, думаю, мне нужно кое-что почитать! Кроме того, я только что еще немного погуглил, и оказалось, что заголовочный файл stm32f10x.h, использованный в другом вопросе, похоже, взят из библиотеки с именем «xdk-asf». Я имею в виду, что если файл библиотеки включен, то мы не занимаемся программированием на «голом железе». Должен ли этот вопрос по-прежнему считаться дубликатом?   -  person nalzok    schedule 09.02.2020
comment
см. мой ответ, а не вопрос, содержит полное мигание светодиода на примере синей таблетки. baremetal в этом контексте означает отсутствие операционной системы, поэтому библиотеки и тому подобное по-прежнему находятся внутри baremetal. не обязательно прилагательное, которое определяет с библиотеками поставщиков или чужими библиотеками или без них или создание собственных библиотек для реального, полноразмерного проекта, разве вы не сделали бы библиотеки для себя? и заголовочные файлы?   -  person old_timer    schedule 09.02.2020
comment
@old_timer Да, это имеет смысл. Еще один вопрос: есть ли какие-то предварительные условия, которые мне нужно изучить, прежде чем погрузиться в документы? Я имею опыт работы с программным обеспечением и не очень хорошо разбираюсь в аппаратных концепциях.   -  person nalzok    schedule 09.02.2020
comment
просто делайте это шаг за шагом, вы, безусловно, сможете понять разницу между вводом и выводом. и иметь приблизительное представление о том, что означает включение часов. вам нужен двухтактный для gpio, а не открытый сток. таймеры, которые вы можете немного понять, и т. д.   -  person old_timer    schedule 09.02.2020