Касемод
Вт 23 июня 2015 г., 21:04
Всем привет,
Я усовершенствованный пользователь Arduino, и для большинства функций я пишу свой собственный код, непосредственно восхищая периферийные регистры, например, для настройки таймеров для конкретного приложения.
STM32 - это здорово, но я понятия не имею, как выполнять такие задачи. Есть ли примеры кода? Скажи, например, я хочу создать задержку в 1 секунду, используя один из таймеров, откуда мне начать?
С уважением
Я усовершенствованный пользователь Arduino, и для большинства функций я пишу свой собственный код, непосредственно восхищая периферийные регистры, например, для настройки таймеров для конкретного приложения.
STM32 - это здорово, но я понятия не имею, как выполнять такие задачи. Есть ли примеры кода? Скажи, например, я хочу создать задержку в 1 секунду, используя один из таймеров, откуда мне начать?
С уважением
Мадиас
Вт 23 июня 2015 г., 21:22
Некоторые действительно хорошие ресурсы на оригинальном веб -сайте Maple:
http: // static.Leaflabs.com/pub/lefflabs ... индекс.HTML
РЕДАКТИРОВАТЬ: И этот: http: // static.Leaflabs.com/pub/lefflabs ... /API.HTML
http: // static.Leaflabs.com/pub/lefflabs ... индекс.HTML
РЕДАКТИРОВАТЬ: И этот: http: // static.Leaflabs.com/pub/lefflabs ... /API.HTML
victor_pv
Пт 26 июня 2015 г., 18:20
Касмод написал:Всем привет,
Я усовершенствованный пользователь Arduino, и для большинства функций я пишу свой собственный код, непосредственно восхищая периферийные регистры, например, для настройки таймеров для конкретного приложения.
STM32 - это здорово, но я понятия не имею, как выполнять такие задачи. Есть ли примеры кода? Скажи, например, я хочу создать задержку в 1 секунду, используя один из таймеров, откуда мне начать?
С уважением
Я усовершенствованный пользователь Arduino, и для большинства функций я пишу свой собственный код, непосредственно восхищая периферийные регистры, например, для настройки таймеров для конкретного приложения.
STM32 - это здорово, но я понятия не имею, как выполнять такие задачи. Есть ли примеры кода? Скажи, например, я хочу создать задержку в 1 секунду, используя один из таймеров, откуда мне начать?
С уважением
Rogerclark
Солнце 28 июня 2015 1:22 утра
Касмод написал:Всем привет,
STM32 - это здорово, но я понятия не имею, как выполнять такие задачи. Есть ли примеры кода? Скажи, например, я хочу создать задержку в 1 секунду, используя один из таймеров, откуда мне начать?
С уважением
STM32 - это здорово, но я понятия не имею, как выполнять такие задачи. Есть ли примеры кода? Скажи, например, я хочу создать задержку в 1 секунду, используя один из таймеров, откуда мне начать?
С уважением
Mrburnette
Солнце 28 июня 2015 2:29 утра
Из-за 32-битной архитектуры и недорогих, несколько университетов предлагают курсы в STM32, что в наши дни означает большую коллекцию в бесплатной онлайн-документации:
https: // www.Google.com/#Q = University+STM32
Луча
https: // www.Google.com/#Q = University+STM32
Луча
Касемод
Sun 28 июня 2015 г., 22:43
victor_pv написал:
Вы должны начать с загрузки и чтения таблицы данных STM32F103, которые дадут вам все подробности о том, как работают периферийные устройства, и покажет все регистры со всеми функциями.
Большинство адресов и битов реестра определены в Libmaple, но нет функций для выполнения всего, что могут сделать периферийные устройства.
я.эн. Для таймеров есть функции, которые используют их для ШИМ, и в качестве простых счетчиков с прерывами, но у таймеров есть несколько режимов ввода, для которых нет функции в Libmaple.
Большинство адресов и битов реестра определены в Libmaple, но нет функций для выполнения всего, что могут сделать периферийные устройства.
я.эн. Для таймеров есть функции, которые используют их для ШИМ, и в качестве простых счетчиков с прерывами, но у таймеров есть несколько режимов ввода, для которых нет функции в Libmaple.
Mrburnette
Солнце 28 июня 2015 11:25
Касмод написал:<...>
Есть ли какой -нибудь пример для того, чтобы сделать что -то просто? Я уверен, что мог бы пойти оттуда (в настоящее время я понятия не имею, как назвать прерывание на STM32).
Спасибо.
Есть ли какой -нибудь пример для того, чтобы сделать что -то просто? Я уверен, что мог бы пойти оттуда (в настоящее время я понятия не имею, как назвать прерывание на STM32).
Спасибо.
Rogerclark
Пн 29 июня 2015 г. 12:40
Обратите внимание на примеры, с которыми Ray связал.
Они похожи на использование стандартной периферийной либерации, которая, к сожалению, не может быть использована в проектах с открытым исходным кодом из -за ограничительной лицензии, навязанная STM на нем.
Можно использовать новый SPL на основе HAL, так как у него другая лицензия. Но код немного отличается.
Но текущее ядро не использует HAL, так как оно было выпущено далеко после того, как ядро уже было написано, и потребуется полная переписать, чтобы использовать HAL.
@sheepdoll написал новое ядро, которое использует HAL, но его чисто экспериментально сейчас.
Я не уверен, что он действительно отвечает на вопрос OPS, так как он не показывает, как напрямую контролировать регистры процессора для таймеров.
ИМХО, вы действительно не хотите начинать с таймеров в качестве введения в программирование аппаратного обеспечения STM32, прерывания представляют собой отдельную подсистему, как задокументировано в разделе NVIC руководства, и и довольно сложная сама по себе. Таймеры - это легкий бит. эн.глин. Настройка разделителей, счетчиков и т. Д
Они похожи на использование стандартной периферийной либерации, которая, к сожалению, не может быть использована в проектах с открытым исходным кодом из -за ограничительной лицензии, навязанная 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/Лицензия
-рик
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 и т. Д.)
Лицензия, по -видимому, запрещает распределение источника SPL, поэтому, если ядро не было перекомпилированным бинарным, я не уверен, как его можно распространить.
Я подозреваю, что, вероятно, не было намерением STM предотвратить использование с открытым исходным кодом, но просто очень трудно иметь что -то, что требует от вас загрузки ключевого элемента из коммерческой организации, которая может в любое время решать, чтобы больше не сделать эту загрузку возможной
Мы предполагаем, что Leaflabs решили не использовать SPL, так как я думаю, что он был доступен еще в 2012 году, когда они разрабатывали Libmaple - я полагаю, что это был слишком большой риск для них, чтобы использовать его.
HAL, с другой стороны, не имеет этого ограничения - однако @sheepdoll обнаружил, что файлы линкера, произведенные Cubemx, имеют проблемную лицензию. Опять я сомневаюсь, что это нарочно, я думаю, что STM не понимает, что у них все еще есть некоторые файлы с этим.
Но с точки зрения использования HAL, все в порядке, так как я нашел замену для сценария линкера F103, который вообще не имеет лицензии, (но мне все еще нужно найти один для F4 и т. Д.)
Касемод
Пн 29 июня 2015 г., 6:55
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. Я не совсем добрался туда, поэтому я смотрю на какой -то проработанный пример?
Возвращаясь к примеру 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); Чтобы включить таймер компилятор не распознает эксплуатации. Итак, у меня есть идея, что есть файл включения, который я должен добавить, но понятия не имею, какой он это... Любой совет?
В шагах это будет выглядеть как настройка предварительного выбора, выбора часов, режимов мастера/подчинения для таймера, выходов для переключения, включения таймера и т. Д...
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.глин. Чтобы управлять таймерами аппаратного обеспечения, а затем основывать код на этом коде
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, чтобы увидеть, есть ли у меня идея, но любые отзывы будут приветствовать
Скажите, например, при программировании Atmel я ссылаюсь на TCNTX для регистра таймера. В некоторой степени компилятор связывает это с местоположением памяти, поэтому я не думаю, что было бы слишком сложно создать определенный файл со всеми переменными для ATM32F103. Как только он сделан для одного таймера, остальное довольно просто и откроет несколько дополнительных возможностей
Я постараюсь взглянуть на файлы Atmel, чтобы увидеть, есть ли у меня идея, но любые отзывы будут приветствовать
Mrburnette
Вт 30 июня 2015 12:21
Касмод написал:Можете ли вы привести пример того, как я мог бы определить свои собственные значения для вещей, которые отсутствуют?
...
...
victor_pv
Вт 30 июня 2015 г. 13:03
Касмод написал:
Интересно, как команда Maple разработала, например, функции PWM, так как я не нахожу исходных файлов для установки регистров?
Интересно, как команда Maple разработала, например, функции PWM, так как я не нахожу исходных файлов для установки регистров?
Касемод
Вт 30 июня 2015 г., 22:03
Луча,
Как я еще раз упоминаю, что я не слишком обеспокоен тем, что я с прямыми манипуляциями с портом для ввода/вывода. Я обеспокоен тем, что функции таймера не покрыты на клене Leaf Lafbs, такие как вставка Dead Time для полугодных мостов и других пользовательских конфигураций таймеров, учитывая, что я не могу просто использовать тот же код, что и ST, поэтому я пытаюсь поднять голову о том, как это можно было записано для клена.
С уважением я не нашел особого актуальности в приведенных примерах, как вы упомянули, их можно легко найти в Google и не решаю мою проблему. Для меня это так же просто, как переход обратно в открытие, если это не может быть сделано, безусловно, я намерен запустить людей...
Как я еще раз упоминаю, что я не слишком обеспокоен тем, что я с прямыми манипуляциями с портом для ввода/вывода. Я обеспокоен тем, что функции таймера не покрыты на клене Leaf Lafbs, такие как вставка Dead Time для полугодных мостов и других пользовательских конфигураций таймеров, учитывая, что я не могу просто использовать тот же код, что и ST, поэтому я пытаюсь поднять голову о том, как это можно было записано для клена.
С уважением я не нашел особого актуальности в приведенных примерах, как вы упомянули, их можно легко найти в Google и не решаю мою проблему. Для меня это так же просто, как переход обратно в открытие, если это не может быть сделано, безусловно, я намерен запустить людей...
Mrburnette
Вт 30 июня 2015 г., 22:54
Касмод написал:Луча,
Как я еще раз упоминаю, что я не слишком обеспокоен тем, что я с прямыми манипуляциями с портом для ввода/вывода. Я обеспокоен тем, что функции таймера не покрыты на клене Leaf Lafbs, такие как вставка Dead Time для полугодных мостов и других пользовательских конфигураций таймеров, учитывая, что я не могу просто использовать тот же код, что и ST, поэтому я пытаюсь поднять голову о том, как это можно было записано для клена.
Как я еще раз упоминаю, что я не слишком обеспокоен тем, что я с прямыми манипуляциями с портом для ввода/вывода. Я обеспокоен тем, что функции таймера не покрыты на клене Leaf Lafbs, такие как вставка Dead Time для полугодных мостов и других пользовательских конфигураций таймеров, учитывая, что я не могу просто использовать тот же код, что и ST, поэтому я пытаюсь поднять голову о том, как это можно было записано для клена.
Rogerclark
Вт 30 июня 2015 г., 23:07
@casemod
Возможно, стоит зарегистрироваться на собственных форумах сообщества STM, так как они могут помочь вам с этими низкими вопросами STM32 (однако они могут сказать, что вы должны использовать HAL или SPL)
https: // my.ул.com/public/ste2ecommuniti ... Предметы.aspx
Еще одно место, в которое вы могли бы попробовать опубликовать, это старые форумы Leaflabs . http: // форумы.Leaflabs.ком/
Он частично активен, и модератор довольно хорошо осведомлен и может направить вас к некоторым старым примерам, как получить доступ к оборудованию
Возможно, стоит зарегистрироваться на собственных форумах сообщества 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
Я здесь снова, чтобы ответить на мой вопрос
После одного дня, потраченного на поиск, чтение и тестирование
Я обнаружил, что регистры оборудования уже определены,
Я обнаружил, что они объявлены внутри некоторых рассеянных файлов.
Надеясь быть полезным для кого -то другого в будущем,
Это то, как я доступ к регистрам таймеров:
После одного дня, потраченного на поиск, чтение и тестирование
Я обнаружил, что регистры оборудования уже определены,
Я обнаружил, что они объявлены внутри некоторых рассеянных файлов.
Надеясь быть полезным для кого -то другого в будущем,
Это то, как я доступ к регистрам таймеров:
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;
}