Дак как все же работать с stm32 через ардуино чтоб настроить таймеры ???
когда начал осваивать арм забросил ардуино иде. думаю так же как и в других средах, регистры то одни и те же. даташит, референс мануал, руководство программиста, на хал посмотрите может он вам понравиться.
Конечный вариант вариант от моего существенно отличался. Даже в плане логики работы таймеров. Так что да, начальный импульс был, а дальше уже сам автор смог всё освоить. Именно с нуля.
Уточни что значит инвертированный? Сдвиг по фазе на 180 градусов? Вообще слабо мануал почитать? Станица 380 : OCx polarity is software programmable using the CCxP bit in the TIMx_CCER register. It can be programmed as active high or active low. OCx output is enabled by the CCxE bit in the TIMx_CCER register. Refer to the TIMx_CCERx register description for more details.
Вот добрый ты! Я уже начал писать долгий глум на тему "какой STM?" и "какой таймер?". Не везет мне сегодня поглумиццо!
======================
Если речь идет о SMT32f10х "малоногом", то там есть Т1 - он специально имет сразу два комплиментарных выхода на каждый канал, меж ними даже дедтайм можно сделать аппаратно. Это для мостового управления чем-нить.
На остальных таймерах можно установить полярность каждого канала, как и написал коллега ник182.
Прощу прощения, тема как бы STM32f103 поэтому я и не стал уточнять.
Я же говорю я искал, гуглил, но много инфы ссылается на HAL и другие среды разработки. Доков для новичков раз-два и обчелся, а всякие OCx, CCxP, TIMx_CCER, это хорошо нно не понятно как применить. Думал кто что-то подскажет, а тут сразу накинулись. Никого не хотел обидеть.
Думал кто что-то подскажет, а тут сразу накинулись.
Дак ты и слушай тех кто подскажет, а кому хочется просто так поглумиться, дак их можно и проигнорить, это стиль общения такой, придется привыкать )) Освайвайся и осваивай.
3dmax,поздно удалять сообщение... Уже спалил свой левый аккаунт xsimax. Пиши уже с основного ;-)
та просто на на домашнем компе был старый аккаунт со старой почтой,которой не пользуюсь давно и пароль забыл. Вот поэтому на работе и создал новый. Пришел домой и .. забыл выйти))
Прощу прощения, тема как бы STM32f103 поэтому я и не стал уточнять.
Я же говорю я искал, гуглил, но много инфы ссылается на HAL и другие среды разработки. Доков для новичков раз-два и обчелся, а всякие OCx, CCxP, TIMx_CCER, это хорошо нно не понятно как применить. Думал кто что-то подскажет, а тут сразу накинулись. Никого не хотел обидеть.
Подсказываю: STM32-ардуино сделано на основе CMSIS, наследуя именно этот синтаксис. Все обращения к регистрам делаются через интерфейсы CMSIS.
xsimax, это можно сделать на одном таймере с тремя выходами (TIM1) и без прерываний. Но вообще пробуйте, нужно до всего самостоятельно дойти :)
я догадываюсь что можно, но увы моих знаний мало, а то то что есть в инете либо под другие IDE либо какие то дебри без примеров и нормальных объяснений.
От ИДЕ работа с таймером и другой периферией МК ни как не зависит. Если представляешь себе как работает таймер, какие биты в регистрах таймера нужно установить, то в любой ИДЕ найдёшь команды сделать инициализацию и управление. Есть книги и статьи на русском с описаниями, есть мануал на английском в котором расписаны все возможности и даже описаны процедуры в какой последовательности проводить инициализацию регистров. Надо просто прочитать один раз. Спрашивать на форуме нужно после прочтения, если остались вопросы. Иначе просто не понять, что отвечают. Получается что говорим мы на разных языках, если даже термины для Вас темный лес.
Мда, что-то получилось не очень, при смене честоты с фазами происходит что попало. ладно.
Нашел пример dimax-a пытаюсь разобраться. почти все понятно кроме 2-х вещей.
void setup() {
pinMode(PA8,PWM);
pinMode(PA9,PWM);
TIMER1_BASE->CCER=(1<<4)|(1<<0);// вот тут не понятно
TIMER1_BASE->CCMR1=(1<<13)|(1<<12)|(1<<5)|(1<<4);// и тут не понятно
TIMER1_BASE->PSC=0;
TIMER1_BASE->ARR=2879;
TIMER1_BASE->CCR1=0 ;
TIMER1_BASE->CCR2=1439 ;
TIMER1_BASE->CR1=1;}
void loop() {}
как работают эти битовые сдвиги, не понимаю(точнее что такое битовый сдвиг понимаю но как он взаимодействует с регистром не понятно). и еще вот нашел то что искал в самом первом вопросе но не знаю как это записать? "Можно задать полярность сигнала, для этого предусмотрен разряд CCxP регистра TIMx_CCER." По идее достаточно 2-х каналов одного таймера просто 2-й инвертировать и изменить его длительность --CCR.
xsimax, Поиском пользоваться умеете, это отлично :) Осталось изучить битовые операции и затем с помощью даташита разобраться, какой бит в регистрах CCER и CCMRx за что отвечает. Про фазу и частоту -таймер не знает что это такое. Поэтому нужно его программировать на то, что он умеет. А он умеет считать такты от ноля и до значения, указанного в регистре автоперезагрузки. Потом сброс , и снова считает с ноля. А при совпадении в значением указанным в регистре сравнения умеет дёргать своей аппаратной ногой. Этого достаточно что-бы аппаратно сделать хоть 4 фазы сигнала одинаковой частоты.
dimax. спасибо за советы. про регистр автоперезагрузки ARR я уже знаю, и про регистр сравнения ССR. И я даже нашел CCER и CCMRx. Я не понимаю эти записи (1<<4)|(1<<0) и (1<<13)|(1<<12)|(1<<5)|(1<<4); это вроеде как регистровый сдвиг или регистр сдвига, я запутался. (((
Там ещё не все комбинации прописаны. Вот к примеру мне нужно в OC1M записать 4 и 5 биты, а дефайн только один на 4,5,6 биты вместе. #define TIMER_CCMR1_OC1M (0x7 << 4) . В общем легче писать цифрами, чем гадать не выйдет ли косяка.
Там ещё не все комбинации прописаны. Вот к примеру мне нужно в OC1M записать 4 и 5 биты, а дефайн только один на 4,5,6 биты вместе. #define TIMER_CCMR1_OC1M (0x7 << 4) . В общем легче писать цифрами, чем гадать не выйдет ли косяка.
Ок.
когда начал осваивать арм забросил ардуино иде. думаю так же как и в других средах, регистры то одни и те же. даташит, референс мануал, руководство программиста, на хал посмотрите может он вам понравиться.
Вы знаете только что видос про HAL смотрел как по мне самое подходящее.
Почитайте тему отсюда http://arduino.ru/forum/programmirovanie/sinkhronizatsiya-vyvoda-i-obrabotki#comment-409345
и дальше. Как и что делать расписано подробно. Человек с нуля смог сделать что хотел.
nik182, с нуля? Да вы ему 90% программы написали :)
Конечный вариант вариант от моего существенно отличался. Даже в плане логики работы таймеров. Так что да, начальный импульс был, а дальше уже сам автор смог всё освоить. Именно с нуля.
Здвиг получается на delay?
Всем привет, А есть ли возможность инвертировать один канал таймера в STM?
чтобы один канаг таймера был в обычном режиме а 2-й инвертированный?
Уточни что значит инвертированный? Сдвиг по фазе на 180 градусов? Вообще слабо мануал почитать? Станица 380 : OCx polarity is software programmable using the CCxP bit in the TIMx_CCER register. It can be programmed as active high or active low. OCx output is enabled by the CCxE bit in the TIMx_CCER register. Refer to the TIMx_CCERx register description for more details.
воуу воу, зачем сразу мануалами кидаться, я не спец,
решил сделать пуш-пул покопал немного инфы, например вот эту статью https://istarik.ru/blog/arduino/105.html
понял что инфы тут мало и то что я хочу сделать не получится, копал в инете, ничего под ArduinoIDE для STM не нашел, думал может кто подскажет.
Вот добрый ты! Я уже начал писать долгий глум на тему "какой STM?" и "какой таймер?". Не везет мне сегодня поглумиццо!
======================
Если речь идет о SMT32f10х "малоногом", то там есть Т1 - он специально имет сразу два комплиментарных выхода на каждый канал, меж ними даже дедтайм можно сделать аппаратно. Это для мостового управления чем-нить.
На остальных таймерах можно установить полярность каждого канала, как и написал коллега ник182.
воуу воу, зачем сразу мануалами кидаться, я не спец,
Если ты не спец, то что тебе тут надо?
Если ты собираешься что-то разрабатывать, то мануалы читают ПЕРЕД обращением к живым людям, даже на форуме. Странно, да?
Прощу прощения, тема как бы STM32f103 поэтому я и не стал уточнять.
Я же говорю я искал, гуглил, но много инфы ссылается на HAL и другие среды разработки. Доков для новичков раз-два и обчелся, а всякие OCx, CCxP, TIMx_CCER, это хорошо нно не понятно как применить. Думал кто что-то подскажет, а тут сразу накинулись. Никого не хотел обидеть.
Дак ты и слушай тех кто подскажет, а кому хочется просто так поглумиться, дак их можно и проигнорить, это стиль общения такой, придется привыкать )) Освайвайся и осваивай.
3dmax, поздно удалять сообщение... Уже спалил свой левый аккаунт xsimax. Пиши уже с основного ;-)
3dmax, поздно удалять сообщение... Уже спалил свой левый аккаунт xsimax. Пиши уже с основного ;-)
та просто на на домашнем компе был старый аккаунт со старой почтой,которой не пользуюсь давно и пароль забыл. Вот поэтому на работе и создал новый. Пришел домой и .. забыл выйти))
Прощу прощения, тема как бы STM32f103 поэтому я и не стал уточнять.
Я же говорю я искал, гуглил, но много инфы ссылается на HAL и другие среды разработки. Доков для новичков раз-два и обчелся, а всякие OCx, CCxP, TIMx_CCER, это хорошо нно не понятно как применить. Думал кто что-то подскажет, а тут сразу накинулись. Никого не хотел обидеть.
Подсказываю: STM32-ардуино сделано на основе CMSIS, наследуя именно этот синтаксис. Все обращения к регистрам делаются через интерфейсы CMSIS.
Вот нашел какой то макрос CLEAR_BIT(REG, BIT) для операции (REG) &= ~(BIT)
может ли он инвертировать значение бита канала таймера? или это волобще не то ?
это не о том :))
А кто где по чем недавно покупал платы на STM32F103CB ?
А кто где по чем недавно покупал платы на STM32F103CB ?
Короче возникла идея. 1-й генератор будет задавть фазу для двух других через setCompare.
и те запускаться через прерывание. Надо будет вечером проверить..
xsimax, это можно сделать на одном таймере с тремя выходами (TIM1) и без прерываний. Но вообще пробуйте, нужно до всего самостоятельно дойти :)
xsimax, это можно сделать на одном таймере с тремя выходами (TIM1) и без прерываний. Но вообще пробуйте, нужно до всего самостоятельно дойти :)
я догадываюсь что можно, но увы моих знаний мало, а то то что есть в инете либо под другие IDE либо какие то дебри без примеров и нормальных объяснений.
От ИДЕ работа с таймером и другой периферией МК ни как не зависит. Если представляешь себе как работает таймер, какие биты в регистрах таймера нужно установить, то в любой ИДЕ найдёшь команды сделать инициализацию и управление. Есть книги и статьи на русском с описаниями, есть мануал на английском в котором расписаны все возможности и даже описаны процедуры в какой последовательности проводить инициализацию регистров. Надо просто прочитать один раз. Спрашивать на форуме нужно после прочтения, если остались вопросы. Иначе просто не понять, что отвечают. Получается что говорим мы на разных языках, если даже термины для Вас темный лес.
Мда, что-то получилось не очень, при смене честоты с фазами происходит что попало. ладно.
Нашел пример dimax-a пытаюсь разобраться. почти все понятно кроме 2-х вещей.
как работают эти битовые сдвиги, не понимаю(точнее что такое битовый сдвиг понимаю но как он взаимодействует с регистром не понятно). и еще вот нашел то что искал в самом первом вопросе но не знаю как это записать? "Можно задать полярность сигнала, для этого предусмотрен разряд CCxP регистра TIMx_CCER." По идее достаточно 2-х каналов одного таймера просто 2-й инвертировать и изменить его длительность --CCR.
xsimax, Поиском пользоваться умеете, это отлично :) Осталось изучить битовые операции и затем с помощью даташита разобраться, какой бит в регистрах CCER и CCMRx за что отвечает. Про фазу и частоту -таймер не знает что это такое. Поэтому нужно его программировать на то, что он умеет. А он умеет считать такты от ноля и до значения, указанного в регистре автоперезагрузки. Потом сброс , и снова считает с ноля. А при совпадении в значением указанным в регистре сравнения умеет дёргать своей аппаратной ногой. Этого достаточно что-бы аппаратно сделать хоть 4 фазы сигнала одинаковой частоты.
dimax. спасибо за советы. про регистр автоперезагрузки ARR я уже знаю, и про регистр сравнения ССR. И я даже нашел CCER и CCMRx. Я не понимаю эти записи (1<<4)|(1<<0) и (1<<13)|(1<<12)|(1<<5)|(1<<4); это вроеде как регистровый сдвиг или регистр сдвига, я запутался. (((
xsimax, ну я же и пишу вам, что нужно изучить битовые операции. Обучающих материалов в сети полным полно. ВОт например
(1<<4) это читаемая запись для 0b00010000, если байт, если число 16 разрядов, то еще 8 нолей спереди.
Читается как "1" на месте номер 4. Нужно помнитьт, что самое правое место - имеет номер 0.
----------------
проверка: что такое (1<< 12)? - Единица на месте №12, то еасть 1 и 12 нолей: 0b0001000000000000.
===========================================
Для того, чтобы понимать, что обозначают те или иные биты исползуется симолическое обозначение:
например:
Тогда сразу видно, что в регистре устанавливаются биты разрешения первого и второго каналов.
Инструкция по всему этому называется RM0008 вот так прямо и ищется в сети. Это референс мануал по програмированию STM32. Там примерно 1000 страниц.
===============================
Вообще вынужден напомнить, что форум - не учебное заведение. Понять, что такое сдвиги можно просто спросив у гугла.
Мда, что-то получилось не очень, при смене честоты с фазами происходит что попало. ладно.
Сделать сдвиг фаз у каналов таймера не получится.
Инверсный выход делается выключением комплементарного выхода
Для включения комплементарного выхода TIMxCHxN нужно сконфигурировать выход и включить его в
TIMxCCER . См биты ССxNE .
Комплементарные выходы в 103ьих у TIM1 и TIM8 ...
(
например:
По стандарту :
dosikus, это дефайны от CMSIS? У нас её аналог - LibMaple. Хотя в нём тоже расписаны дефайны со сдвигом, но ленюсь их выписывать.
dosikus, это дефайны от CMSIS?
Да, ибо CMSIS это в первую очередь стандарт , стандарт описания и работы с периферией, а не что там некоторые себе воображают.
И не так уж и страшно если знаешь как формируются имена бит .
DOMEN_REGISTR_BIT - TIM_CCER_CС3NE
>>У нас её аналог - LibMaple.
А что мешает писать сразу нормально? Потом легче переход будет...
Тем более что в LibMaple сие присутствует изначально.
См. https://github.com/leaflabs/libmaple/blob/master/libmaple/include/libmaple/timer.h
Комплементарные выходы в 103ьих у TIM1 и TIM8 ...
Тут речь про 103х8 и 103хВ, в них 7 таймеров.
Arduino addon для STM32 основан, но не равен CMSIS.
Макросы типа TIM1 отсутствуют. Есть так, как написал Димах. Макросы для бит на позициях есть.
пример: (кусочек из ~/Arduino/hardware/Arduino_STM32/STM32F1/system/libmaple/include/libmaple/timer.h)
=================
сорри, ты уж и сам справился найти! малацца!
Там ещё не все комбинации прописаны. Вот к примеру мне нужно в OC1M записать 4 и 5 биты, а дефайн только один на 4,5,6 биты вместе. #define TIMER_CCMR1_OC1M (0x7 << 4) . В общем легче писать цифрами, чем гадать не выйдет ли косяка.
[
Тут речь про 103х8 и 103хВ, в них 7 таймеров.
Ключевое слово - комплементарные выходы. А они в 103ьих только у TIM1 и TIM8 .
Там ещё не все комбинации прописаны. Вот к примеру мне нужно в OC1M записать 4 и 5 биты, а дефайн только один на 4,5,6 биты вместе. #define TIMER_CCMR1_OC1M (0x7 << 4) . В общем легче писать цифрами, чем гадать не выйдет ли косяка.
Магические числа есть зло .
Проще дефайны перетащить в свой хэдер.
Только как пример. Bluepill.
PWM с выхлопом на комплементарные выводы .
TIM1 PA7 PA8
Последний скрин с PWM с включенным DTG( Dead Time Generator)
Инструкция по всему этому называется RM0008 вот так прямо и ищется в сети. Это референс мануал по програмированию STM32. Там примерно 1000 страниц.
Можно ускорить обучение выкачав сей документ https://www.st.com/content/ccc/resource/technical/document/application_note/group0/91/01/84/3f/7c/67/41/3f/DM00236305/files/DM00236305.pdf/jcr:content/translations/en.DM00236305.pdf
Это именно по таймерам.
А если учесть также что таймеры у всех линеек одинаковы то отличным подспорьем к обучению будут сниппетсы на F0 https://www.st.com/en/embedded-software/stm32snippetsf0.html
Сниппетсы это минимальные необходимые примеры работы с периферией.
А также в референсе мануале на F0 и L0 есть аппендикс с примерами кода...
Только как пример. Bluepill.
PWM с выхлопом на комплементарные выводы .
TIM1 PA7 PA8
Последний скрин с PWM с включенным DTG( Dead Time Generator)
а можете показать весь скетч ? (желательно с дедтаймом:) )
Могу выложить проект в Keil или SES .
Настройки DTG определяют биты 7-0 регистра BDTR .
та не, я под ардуиноИДЕ.
Могу расписать что делает каждая строка.
Сделать сдвиг фаз у каналов таймера не получится.
Немного поправлю.
Есть один вариант с меандром , реализуется на Toggle mode.
Могу расписать что делает каждая строка.
Могу расписать что делает каждая строка.
??????
Могу расписать что делает каждая строка.
??????
xsimax, если начать просто-напросто думать то ни чего сложного и нет.
Открываем хэдеры на LibMaple и заменяем.
К примеру
или