Усовершенствованное программирование для STM32Duino - Прямая периферийная Acess

Касемод
Вт 23 июня 2015 г., 21:04
Всем привет,

Я усовершенствованный пользователь Arduino, и для большинства функций я пишу свой собственный код, непосредственно восхищая периферийные регистры, например, для настройки таймеров для конкретного приложения.

STM32 - это здорово, но я понятия не имею, как выполнять такие задачи. Есть ли примеры кода? Скажи, например, я хочу создать задержку в 1 секунду, используя один из таймеров, откуда мне начать?

С уважением

Мадиас
Вт 23 июня 2015 г., 21:22
Некоторые действительно хорошие ресурсы на оригинальном веб -сайте Maple:
http: // static.Leaflabs.com/pub/lefflabs ... индекс.HTML

РЕДАКТИРОВАТЬ: И этот: http: // static.Leaflabs.com/pub/lefflabs ... /API.HTML

victor_pv
Пт 26 июня 2015 г., 18:20
Касмод написал:Всем привет,

Я усовершенствованный пользователь Arduino, и для большинства функций я пишу свой собственный код, непосредственно восхищая периферийные регистры, например, для настройки таймеров для конкретного приложения.

STM32 - это здорово, но я понятия не имею, как выполнять такие задачи. Есть ли примеры кода? Скажи, например, я хочу создать задержку в 1 секунду, используя один из таймеров, откуда мне начать?

С уважением

Rogerclark
Солнце 28 июня 2015 1:22 утра
Касмод написал:Всем привет,

STM32 - это здорово, но я понятия не имею, как выполнять такие задачи. Есть ли примеры кода? Скажи, например, я хочу создать задержку в 1 секунду, используя один из таймеров, откуда мне начать?

С уважением

Mrburnette
Солнце 28 июня 2015 2:29 утра
Из-за 32-битной архитектуры и недорогих, несколько университетов предлагают курсы в STM32, что в наши дни означает большую коллекцию в бесплатной онлайн-документации:
https: // www.Google.com/#Q = University+STM32

Луча

Касемод
Sun 28 июня 2015 г., 22:43
victor_pv написал: Вы должны начать с загрузки и чтения таблицы данных STM32F103, которые дадут вам все подробности о том, как работают периферийные устройства, и покажет все регистры со всеми функциями.
Большинство адресов и битов реестра определены в Libmaple, но нет функций для выполнения всего, что могут сделать периферийные устройства.
я.эн. Для таймеров есть функции, которые используют их для ШИМ, и в качестве простых счетчиков с прерывами, но у таймеров есть несколько режимов ввода, для которых нет функции в Libmaple.

Mrburnette
Солнце 28 июня 2015 11:25
Касмод написал:<...>
Есть ли какой -нибудь пример для того, чтобы сделать что -то просто? Я уверен, что мог бы пойти оттуда (в настоящее время я понятия не имею, как назвать прерывание на STM32).

Спасибо.

Rogerclark
Пн 29 июня 2015 г. 12:40
Обратите внимание на примеры, с которыми Ray связал.

Они похожи на использование стандартной периферийной либерации, которая, к сожалению, не может быть использована в проектах с открытым исходным кодом из -за ограничительной лицензии, навязанная STM на нем.

Можно использовать новый SPL на основе HAL, так как у него другая лицензия. Но код немного отличается.

Но текущее ядро ​​не использует HAL, так как оно было выпущено далеко после того, как ядро ​​уже было написано, и потребуется полная переписать, чтобы использовать HAL.
@sheepdoll написал новое ядро, которое использует HAL, но его чисто экспериментально сейчас.



Я не уверен, что он действительно отвечает на вопрос OPS, так как он не показывает, как напрямую контролировать регистры процессора для таймеров.

ИМХО, вы действительно не хотите начинать с таймеров в качестве введения в программирование аппаратного обеспечения STM32, прерывания представляют собой отдельную подсистему, как задокументировано в разделе NVIC руководства, и и довольно сложная сама по себе. Таймеры - это легкий бит. эн.глин. Настройка разделителей, счетчиков и т. Д

Рик Кимбалл
Пн 29 июня 2015 г., 2:16
Rogerclark написал:Они похожи на использование стандартной периферийной либерации, которая, к сожалению, не может быть использована в проектах с открытым исходным кодом из -за ограничительной лицензии, навязанная STM на нем.

Рик Кимбалл
Пн 29 июня 2015 г. 2:20 утра
Если вы хотите использовать что -то бесплатное и совершенно не обременено, вы можете проверить, что есть Google:

https: // chromium.Googlesource.com/Chrom ... Чип/STM32

Лицензия:
// Авторские права (C) 2010 Авторы Chromium OS. Все права защищены.
//
// перераспределение и использование в исходных и бинарных формах, с или без
// модификация разрешена при условии, что следующие условия
// встретили:
//
// * Перераспределение исходного кода должно сохранить вышеуказанное авторское право
// Обратите внимание, этот список условий и следующее отказ от ответственности.
// * перераспределение в двоичной форме должно воспроизводить выше
// Уведомление об авторском праве, этот список условий и следующее отказ от ответственности
// в документации и/или других материалах, предоставленных с
// распределение.
// * ни имя Google Inc. ни имена его
// авторы могут использоваться для поддержки или продвижения продуктов, полученных из
// это программное обеспечение без конкретного предварительного письменного разрешения.
//
// это программное обеспечение предоставляется владельцами авторских прав и участников
// "как есть" и любые явные или подразумеваемые гарантии, включая, но не
// ограничен, подразумеваемые гарантии товарной пригодности и пригодности для
// конкретная цель отказывается. Ни в каком случае авторское право не должно
// Владелец или участники несут ответственность за любые прямые, косвенные, случайные,
// Специальные, образцовые или косвенные убытки (включая, но не
// ограничен, закупок заместительных товаров или услуг; Потеря использования,
// данные или прибыль; Или прерывание бизнеса), однако, вызвано и на любом
// Теория ответственности, будь то в контракте, строгой ответственности или деликт
// (включая халатность или иное), возникающее в любом выходе из использования
// об этом программном обеспечении, даже если он рекомендуется о возможности такого повреждения.
https: // chromium.Googlesource.com/Chrom ... ER/Лицензия

-рик

Rogerclark
Пн 29 июня 2015 г., 3:44
Рик,

Лицензия, по -видимому, запрещает распределение источника SPL, поэтому, если ядро ​​не было перекомпилированным бинарным, я не уверен, как его можно распространить.

Я подозреваю, что, вероятно, не было намерением STM предотвратить использование с открытым исходным кодом, но просто очень трудно иметь что -то, что требует от вас загрузки ключевого элемента из коммерческой организации, которая может в любое время решать, чтобы больше не сделать эту загрузку возможной

Мы предполагаем, что Leaflabs решили не использовать SPL, так как я думаю, что он был доступен еще в 2012 году, когда они разрабатывали Libmaple - я полагаю, что это был слишком большой риск для них, чтобы использовать его.

HAL, с другой стороны, не имеет этого ограничения - однако @sheepdoll обнаружил, что файлы линкера, произведенные Cubemx, имеют проблемную лицензию. Опять я сомневаюсь, что это нарочно, я думаю, что STM не понимает, что у них все еще есть некоторые файлы с этим.

Но с точки зрения использования HAL, все в порядке, так как я нашел замену для сценария линкера F103, который вообще не имеет лицензии, (но мне все еще нужно найти один для F4 и т. Д.)

Касемод
Пн 29 июня 2015 г., 6:55
Mrburnette написал:

Для F4:
http: // visualgdb.com/turniors/arm/stm32/timers/

Mrburnette
Пн 29 июня 2015 г. 12:20 вечера
Касмод написал: Это работает нормально, если я должен был использовать инструменты для обнаружения, как объясняет веб -сайт. К сожалению, файлы включения не присутствуют с помощью порта STM32Duino/Maple. Как упоминал Роджер, возможно, есть некоторые юридические вопросы.

Касемод
Пн 29 июня 2015 г., 13:25
У меня еще не было много времени, чтобы посмотреть на GPIO, так как моя главная забота сейчас - таймеры.

Возвращаясь к примеру F4, опубликованному здесь http: // visualgdb.com/turniors/arm/stm32/timers/, Ранее я использовал аналогичные инструменты для платы Discovery с STM32, и Surelly может найти еще много, используя Google. Здесь нет проблем. Проблема заключается в том, чтобы достичь того же, используя Arduino IDE. Я не совсем добрался туда, поэтому я смотрю на какой -то проработанный пример?

Касемод
Пн 29 июня 2015 г., 22:41
Пытался установить это написание непосредственно в регистры в соответствии с справочным руководством.

В шагах это будет выглядеть как настройка предварительного выбора, выбора часов, режимов мастера/подчинения для таймера, выходов для переключения, включения таймера и т. Д...

Prescaller расположен в реестре TIMXPSC (div/1...65536), Timer inable - это бит 0 of timx_cr1 resgister и т. Д. И т. Д...

При попытке установить, например, TIM1_CNT = 65535 для Prescaller или TIM1_CR1 | = (1<<Cen); Чтобы включить таймер компилятор не распознает эксплуатации. Итак, у меня есть идея, что есть файл включения, который я должен добавить, но понятия не имею, какой он это... Любой совет?

Rogerclark
Пн 29 июня 2015 г., 11:00 вечера
Если вы имеете в виду, есть ли определения для

Tim1_cnt

В заголовках, а затем ответ - нет.

Имена регистров в руководстве - это просто внутренние имена в руководстве.

Большинство общих примеров используют Spl E.g как опубликовано здесь
http: // электроника.Stackexchange.com/Qu ... -для TIMER

Но SPL использует полные разные определения.

Но вы не можете использовать примеры кода SPL, потому что Libmaple не написан для SPL (из -за лицензии на старом SPL).

Таким образом, вам нужно будет определить свои собственные значения для вещей, которые отсутствуют, или вам нужно будет посмотреть в ядре Libmaple, чтобы посмотреть, какие имена Leaflabs дали эти вещи.

Как правило, лучше всего взглянуть на существующий код, который был написан My Leaflabs E.глин. Чтобы управлять таймерами аппаратного обеспечения, а затем основывать код на этом коде

Касемод
Вт 30 июня 2015 г., 6:06
Можете ли вы привести пример того, как я мог бы определить свои собственные значения для вещей, которые отсутствуют?

Скажите, например, при программировании Atmel я ссылаюсь на TCNTX для регистра таймера. В некоторой степени компилятор связывает это с местоположением памяти, поэтому я не думаю, что было бы слишком сложно создать определенный файл со всеми переменными для ATM32F103. Как только он сделан для одного таймера, остальное довольно просто и откроет несколько дополнительных возможностей

Я постараюсь взглянуть на файлы Atmel, чтобы увидеть, есть ли у меня идея, но любые отзывы будут приветствовать

Mrburnette
Вт 30 июня 2015 12:21
Касмод написал:Можете ли вы привести пример того, как я мог бы определить свои собственные значения для вещей, которые отсутствуют?
...

victor_pv
Вт 30 июня 2015 г. 13:03
Касмод написал:
Интересно, как команда Maple разработала, например, функции PWM, так как я не нахожу исходных файлов для установки регистров?

Касемод
Вт 30 июня 2015 г., 22:03
Луча,

Как я еще раз упоминаю, что я не слишком обеспокоен тем, что я с прямыми манипуляциями с портом для ввода/вывода. Я обеспокоен тем, что функции таймера не покрыты на клене Leaf Lafbs, такие как вставка Dead Time для полугодных мостов и других пользовательских конфигураций таймеров, учитывая, что я не могу просто использовать тот же код, что и ST, поэтому я пытаюсь поднять голову о том, как это можно было записано для клена.

С уважением я не нашел особого актуальности в приведенных примерах, как вы упомянули, их можно легко найти в Google и не решаю мою проблему. Для меня это так же просто, как переход обратно в открытие, если это не может быть сделано, безусловно, я намерен запустить людей...

Mrburnette
Вт 30 июня 2015 г., 22:54
Касмод написал:Луча,

Как я еще раз упоминаю, что я не слишком обеспокоен тем, что я с прямыми манипуляциями с портом для ввода/вывода. Я обеспокоен тем, что функции таймера не покрыты на клене Leaf Lafbs, такие как вставка Dead Time для полугодных мостов и других пользовательских конфигураций таймеров, учитывая, что я не могу просто использовать тот же код, что и ST, поэтому я пытаюсь поднять голову о том, как это можно было записано для клена.

Rogerclark
Вт 30 июня 2015 г., 23:07
@casemod

Возможно, стоит зарегистрироваться на собственных форумах сообщества STM, так как они могут помочь вам с этими низкими вопросами STM32 (однако они могут сказать, что вы должны использовать HAL или SPL)

https: // my.ул.com/public/ste2ecommuniti ... Предметы.aspx

Еще одно место, в которое вы могли бы попробовать опубликовать, это старые форумы Leaflabs . http: // форумы.Leaflabs.ком/

Он частично активен, и модератор довольно хорошо осведомлен и может направить вас к некоторым старым примерам, как получить доступ к оборудованию

123Francoz
Ср 10 февраля 2016 г. 14:11
Привет @casemod, вы могли бы написать в регистрах в конце?
Я хочу сделать то же самое, но я не знаю, как заставить его работать.
Предполагая, что все регистры не объявлены (это правильно?) я должен сделать так: ###################### Generic STM32F103C ######################################## genericSTM32F103C.name=Generic STM32F103C series [...] genericSTM32F103C.build.hs_flag=-DUSART_RX_BUF_SIZE=100 -DUSART_TX_BUF_SIZE=100 [...]

123Francoz
Чт 11 февраля 2016 г. 18:28
Я здесь снова, чтобы ответить на мой вопрос 8-)
После одного дня, потраченного на поиск, чтение и тестирование
Я обнаружил, что регистры оборудования уже определены,
Я обнаружил, что они объявлены внутри некоторых рассеянных файлов.

Надеясь быть полезным для кого -то другого в будущем,
Это то, как я доступ к регистрам таймеров: volatile uint16 i = 0; volatile boolean zero_cross = 0; uint16 dimming = 128; void zero_cross_detect() { zero_cross = true; i = 0; gpio_write_bit(GPIOA, 1, 0);// turn off TRIAC (and AC) } void handler_AC() { if (zero_cross == true) { if (i >= dimming) { gpio_write_bit(GPIOA, 1, 1); i = 0; zero_cross = false; } else { i++; } } void setup() { //afio_cfg_debug_ports(AFIO_DEBUG_SW_ONLY); pinMode(PA1, OUTPUT);// Set AC Load pin as output attachInterrupt(PB0, zero_cross_detect, CHANGE); Timer2.pause(); Timer2.setChannel1Mode(TIMER_OUTPUTCOMPARE); Timer2.setPeriod(75); Timer2.setCompare1(1); Timer2.attachCompare1Interrupt(handler_AC); Timer2.refresh(); Timer2.resume(); } void loop() { dimming = 95; }

Функция Shiftout