Заголовок сообщения: Re: Stm32 с чего начать изучение...
Добавлено: Сб фев 01, 2020 23:57:16
Открыл глаза
Зарегистрирован: Ср сен 24, 2014 12:30:09 Сообщений: 65
Рейтинг сообщения:0
Ребят, подскажите - уже устал бороться с системой в одиночку. Довольно долго программировал пики и AVR на ассемблере, привык работать на регистрах без каких-либо библиотек. Сейчас пытаюсь осваивать ARM. Существует ли какая-либо литература с описанием работы с STM32 (на языке C) чисто на регистрах, без всяких там HAL и другого барахла? Желательно на русском языке. На официальную документацию от ST прошу не ссылаться, ибо уровень понятности их документации для новичков, мягко говоря, отстает в сотни раз от того же Микрочипа.
Чем вам библиотеки не понравились? SPL к примеру? Не нужно сильно вникать в особенности нового изучаемого МК. Они с открытым кодом и если что, можно смотреть как организована работа с регистрами.
Вопрос: как Вы считаете, смогу ли я вспомнить это идиотство через год, два, три? Да я спустя 1 минуту уже забыл, как пишутся эти операнды! А мало ли поменяется стандарт? Например, CMSIS и HAL сдохнут, введут что-то новое - и что, мне заново учить бред, как здесь говорилось ранее, индусов? В моем же случае я просто лезу в референс мануал и у меня сразу же в голове всплывает такой код:
Код:
RCC_APB2ENRbits.IOPAEN = 1 ; // Enable PORTA clock. GPIOA_CRHbits.CNF12 = 0b00 ; // PA12 as Push-Pull. GPIOA_CRHbits.MODE12 = 0b10 ; // Output mode, max speed 2 MHz.
И это НИКОГДА не поменяется, пока выпускают данные МК. И самое главное, здесь я контролирую каждый бит, каждый такт. А что понаписали в своей библиотеке микроэлектрониковцы - непонятно, также, как непонятно зачем в режиме выхода порта они включают подтяжку к питанию.
Я никому не навязываю свое мнение или видение, просто, мало ли, здесь еще найдутся люди, которые также устали искать информацию по крупицам среди тонн статей с использованием библиотек.
Причем даже эта "наглядность" приводит к накладным расходам, т.к приходится дважды читать и писать в один и тот же регистр... Более того, у всех остальных серий STM32 регистры портов другие и их больше, соответственно придется лезть в другой RM и писать совершенно другой код. Получается сложновато, по крайней мере для людей считающих официальную документацию не очень понятной...
Заголовок сообщения: Re: Stm32 с чего начать изучение...
Добавлено: Вс фев 02, 2020 03:46:52
Открыл глаза
Зарегистрирован: Ср сен 24, 2014 12:30:09 Сообщений: 65
Рейтинг сообщения:0
Есть правда в Ваших словах, согласен. Хотя, признаю, здесь, скорее, играет бОльшую роль желание понимать, как работает МК, чем какое-либо отвращение к библиотекам. Не хочется становиться ардуинщиком - для меня это позор .
Если вы программируете другие контроллеры, то что может быть не понятного в рефмане от производителя? В конечном счете это просто список регистров и способ их манипуляции. В целом я поддерживаю ваш подход, тоже не использую никакие библиотеки, иногда доходит до экстремизма, приходится просто по рефману дефайнить регистры по их адресам, а потом уже к ним обращаться. Немного громоздко, но зато все под контролем. Вы бы пример привели того, что вам не понятно.
_________________ При решение наиболее сложных задач, большинство, как правило, ошибается...
Lum1noFor, работать по RM это хорошо и правильно! Но делать это постоянно - пустая трата времени. А если вы ещё и одновременно с разными типами микроконтроллеров работаете? Поэтому, набираемся смелости и пишем свою библиотеку. И тогда пишем всего одно слово PinMode:: и IDE сама для того процессора с которым мы сейчас работаем предлагает выбрать нужный режим. И как заметил Reflector, это будет не только эффективней HAL/SPL, но и эффективней того как пишет среднестатистический программист на CMSIS. И не надо в голове держать какие биты в каком регистре для конкретного контроллера надо задать. Даже в пределах STM32 они могут быть как чуть-чуть разные, так и совершенно другие. Не говоря уже про других производителей.
Вот пример команды инициализации ноги порта из MikroC:
В MikroC не пишу но из кода сразу понятно что настраивается GPIOA.0 на выход с подтягивающим резистором к плюсу.
Lum1noFor писал(а):
Например, CMSIS и HAL сдохнут, введут что-то новое - и что, мне заново учить бред, как здесь говорилось ранее, индусов? В моем же случае я просто лезу в референс мануал и у меня сразу же в голове всплывает такой код:
Знаете что это специфический для MikroC код? И он не работает в других IDE.Спойлер
Кроме того, код настройки выводов через регистры у F0, F1 и др. отличается, а в случае GPIO_Set_Pin_Mode он скорее всего будет тем же.
Lum1noFor писал(а):
И это НИКОГДА не поменяется, пока выпускают данные МК.
Если перестанут поддерживать MikroC ваш код придется полностью переписать, т. к. как уже писал в MikroC нестандартная работа с регистрами. Зачем вы вообще выбрали MikroC? Есть много других IDE в том числе полностью бесплатных (в отличие от продукции микроэлектроники). Вот к примеру EmBitz http://purebasic.mybb.ru/viewtopic.php?id=575 В ней к примеру довольно легко настроить отладку в памяти или подключение к работающему МК. Как это сделать MikroC я так и не разобрался. На нашел настроек линкера и отладчика.
А если вы ещё и одновременно с разными типами микроконтроллеров работаете?
Все это ни как не мешает работать через регистры. И запоминать их не настолько сложно, а в какой-то мере даже полезно при начальном знакомстве с типом МК. Обычно программирование микроконтроллера не состоит из одной инициализации периферии, это лишь малая часть выполняемая в самом начале проекта и немного после. Основной функционал обычно содержит лишь короткие однотипные обращения к периферии. "Экономия времени" за счет незнания регистров это экономия на спичках. Знание регистров само по себе полезно, особенно на этапе освоения.
_________________ При решение наиболее сложных задач, большинство, как правило, ошибается...
Заголовок сообщения: Re: Stm32 с чего начать изучение...
Добавлено: Вс фев 02, 2020 21:48:21
Открыл глаза
Зарегистрирован: Ср сен 24, 2014 12:30:09 Сообщений: 65
Рейтинг сообщения:0
Спасибо всем за ответы! Пол порядку:
Цитата:
Знаете что это специфический для MikroC код? И он не работает в других IDE
Не совсем. Такой же формат кода в MPLAB от Микрочипа, а в нем я работал довольно много. В связи с чем и привык к такому представлению.
Цитата:
Если перестанут поддерживать MikroC ваш код придется полностью переписать
Все, что надо будет переписать - это:
Код:
RCC_APB2ENRbits.IOPAEN = 1
исправить на:
Код:
RCC->APB2EN
А если бы я использовал библиотеки, а не регистры, то пришлось бы переписывать вообще все.
Цитата:
Зачем вы вообще выбрали MikroC
Главная причина: мне нахаляву подарили на работе лицензию с токеном. Не отказываться же, так? Вторая причина: я категорически не приемлю "кастрированные" версии платных продуктов за огромные деньги, такие, как Keli. Считайте это моим заскоком. Единственная нормальная на мой взгляд среда была - Atollic, когда ее купила ST и сделал бесплатной, но ее сейчас загнули полностью. Бесплатные программы для меня сразу отпадают по причине огромнейшего геморроя с первоначальной настройкой (я пока не очень большой специалист в языках высокого уровня). Попробовал настроить Eclipse + GCC по совету знакомого - чуть мозг не вывихнул. А в МикроСи все сделано для полных нубов - никаких первоначальных настроек, никаких инклудов и подключаемых файлов - поставил галочку в менеджере библиотек и все. Позволяет полностью сконцентрироваться на программе, а не на настройке среды.
Цитата:
В ней к примеру довольно легко настроить отладку в памяти или подключение к работающему МК. Как это сделать MikroC я так и не разобрался. На нашел настроек линкера и отладчика.
Да, отладчик в микроси бесполезный. Говорят, поддерживает для отладки только JLink от Segger за космические деньги. И то не знаю как, не пробовал. Софственный отладчик простецкий до жути, не умеет симулировать тики таймеров, переходы в прерывания (только вручную по кнопке) и еще многого. Но, в отличие от MPLAB X хоть правильно считает время выполнения команд.
Цитата:
Если вы программируете другие контроллеры, то что может быть не понятного в рефмане от производителя?
Абсолютно идиотский рефман. Когда на начальном этапе обучения пытался разобраться с прерываниями, долго думал, почему ничего не работает. Оказалось потому, что эти иди... кхм... нехорошие люди из ST запихали описание и настройки NVIC в Programming manual, лишь мельком упомянув его в рефмане. Ну ПОЧЕМУ нельзя было написать 10 лишних страниц?! Дальше: описание конкретного модуля МК может быть раскидано по крупицам по нескольким разным документам в разных местах, порой даже совсем непредсказуемых. Пример - настройка часов реального времени в F103. Половина регистров настройки часов находится, в мать его, разделе управления питанием. Мне после даташитов от микрочипа хочется повеситься от такой документации. Понятное дело, что писали это все в разных отделах компании, может даже в разных странах. Но что у них выйдет ТАКОЕ... Хочу попробовать поработать с контроллерами от NXP - может, у них хоть будет получше документация.
Почему я завел эту тему? Потому что сам застрял на изучении режима PWM таймера. Уж слишком много непонятных мне настроек, подробного описания которых я найти не могу. Это, конечно, хорошо, когда все гибко настраивается, но при условии наличия нормальной документации.
Постоянно работаю с таймерами на 103ем процессоре для управления 8кВт преобразователем. Что именно не понятно? Там конечно есть скользкие моменты, что бы первый раз запустить таймер на внешний пин, нужно пройти полосу препятствий.
_________________ При решение наиболее сложных задач, большинство, как правило, ошибается...
Да, отладчик в микроси бесполезный. Говорят, поддерживает для отладки только JLink от Segger за космические деньги.
ST-Link поддерживает. http://purebasic.mybb.ru/viewtopic.php?id=564#p7232 Без аппаратного отладчика не всегда просто найти ошибку. Нарветесь на такую, долго будете искать причину. И тестируемый код удобно выполнять в ОЗУ (если в МК его достаточно для кода и данных). Каждый раз прошивать это долго и количество стираний страниц ограничено.
Lum1noFor писал(а):
Когда на начальном этапе обучения пытался разобраться с прерываниями, долго думал, почему ничего не работает.
Без отладчика сложно согласен.
Lum1noFor писал(а):
Потому что сам застрял на изучении режима PWM таймера.
Вот поэтому проще использовать библиотеки. Вот к примеру настройка PWM с использованием SPL.
Код:
#include "stm32f10x_conf.h"
extern uint32_t SystemCoreClock;
int main(void) { SystemCoreClockUpdate(); // Узнаем тактовую частоту. Результат в SystemCoreClock.
так CubeIDE тот же самый Эклипс и настроенно из коробки. А джилинк стоит копейки - покупаете свисток стлинк и перешиваете, информации в интеренете куча.
Причем даже эта "наглядность" приводит к накладным расходам, т.к приходится дважды читать и писать в один и тот же регистр... Более того, у всех остальных серий STM32 регистры портов другие и их больше, соответственно придется лезть в другой RM и писать совершенно другой код. Получается сложновато, по крайней мере для людей считающих официальную документацию не очень понятной...
Зачем убирать комментарии? И, накладные расходы меньше в случае кода с комментариями. Начинающему, код с комментариями более понятен. И, наконец, просто количество буковок, где ошибаться никак нельзя в коде с комментариями меньшее количество. Комментарий можно написать на национальном языке. Я конечно понимаю, что дело в Ваших личных привычках, но не поддерживаю такую "СТАНДАРТИЗАЦИЮ" на основе СУБЪЕКТИВНОГО восприятия реальности конкретным ИНДИВИДУУМОМ. И, наконец, в случае кода с "комментариями" следует согласиться, что и в этом случае имеет место "субъективизм", но, хотя-бы, для такого случая НИКТО не ВОПИТ о СТАНДАРТИЗАЦИИ. А вот мой личный субъективизм "Современная, якобы, стандартизация видится мне, как попытку создания некой СУБКУЛЬТУРЫ, во многом ограниченной!!! (или, если хотите, САМООГРАНИЧЕННОЙ) и, заключенной в оклад церковной иконы"
_________________ "Every profession is a conspiracy against the uninitiated" (B. Shaw) "A textbook can be defined as a book unsuitable for reading" (B. Shaw) Tautology is humor in "this" place (Vigo Carpathian)
Постоянно работаю с таймерами на 103ем процессоре для управления 8кВт преобразователем. Что именно не понятно? Там конечно есть скользкие моменты, что бы первый раз запустить таймер на внешний пин, нужно пройти полосу препятствий.
Для начала непонятно вот что:
Как я понял, при досчитывании таймером до значения регистра ARR таймер сбрасывается и генерируется событие, так? Это аналог регистра периода в PIC, правильно я понимаю?
Далее: регистр TIMx control register 1 (TIMx_CR1).
Что такое ARPE: Auto-reload preload enable 0: TIMx_ARR register is not buffered 1: TIMx_ARR register is buffered
Lum1noFor, буферизация ARR означает, что содержимое этого регистра изменится не сразу, а при следующем UEV. Это помогает избежать некоторых косяков (скажем, уменьшили значение ARR, когда текущее значение счетчика уже выше нового значения; и таймер будет досчитывать до переполнения).
Цитата:
Что такое auto-reload, preload?
ARR - auto reload register. preload - загрузить новое значение с буферизацией.
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Заголовок сообщения: Re: Stm32 с чего начать изучение...
Добавлено: Вт фев 04, 2020 00:06:36
Открыл глаза
Зарегистрирован: Ср сен 24, 2014 12:30:09 Сообщений: 65
Рейтинг сообщения:0
Eddy_Em, Вам бы книжки писать - умеете объяснить для дебилов, спасибо!
Может, кому понадобится - простейшая инициализация TIM2 на регистрах (включение прерывания на регистрах приводить не буду, ибо смысла от этого мало, а сложность приличная - использую родную функцию NVIC_IntEnable). Код на МикроСи, но в довольно понятном виде:
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения