STM32F103 & Arduino IDE

xsimax
Offline
Зарегистрирован: 29.07.2019

короче сделал ))

#define PWM_VALUE          20
#define TMR_T               50
void setup() {
pinMode(PA8,PWM); 
pinMode(PA9,PWM); 
//CH1: PWM mode 2, CH2: PWM mode 1, preload enabled on all channels
    TIMER1_BASE->CCR1=TMR_T - PWM_VALUE;
    TIMER1_BASE->CCR2=PWM_VALUE;
    TIMER1_BASE->ARR=TMR_T;
    TIMER1_BASE->PSC=1;
    TIMER1_BASE->CCMR1=TIMER_CCMR1_OC1M | TIMER_CCMR1_OC1PE | TIMER_CCMR1_OC2M | TIMER_CCMR1_OC2PE;
    TIMER1_BASE->CCER=TIMER_CCER_CC1E | TIMER_CCER_CC2E | TIMER_CCER_CC2P;
    TIMER1_BASE->BDTR=TIMER_BDTR_MOE;
    TIMER1_BASE->CR1=(1<<7)|(1<<5); //TIM_CR1_ARPE | TIM_CR1_CMS;
    TIMER1_BASE->CR1|=TIMER_CR1_CEN;
    TIMER1_BASE->EGR=TIMER_EGR_UG;
}
void loop() {}

теперь поробую все с энкодером.

 

ВСЕ работает всем спасибо !!! ))

Densl
Offline
Зарегистрирован: 28.11.2018

Купил готовую плату stm у WAVGAT, и вот засада, не хочет разгоняться до 128 МГц. У них походу какая-то другая схемка платы с МК.

b707
Offline
Зарегистрирован: 26.05.2017

Densl пишет:

Купил готовую плату stm у WAVGAT, и вот засада, не хочет разгоняться до 128 МГц. У них походу какая-то другая схемка платы с МК.

не схема другая, а скорее всего МК другой, не СТМ, а аналог. О появлении плат СТМ на левых МК кто-то писал тут, по-моему axill

ЗЫ нафига платы у вавгата покупать, уж СТМ-ки то и так копейки стоят.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Мда... Мыши плакали, кололись, но продолжали покупать вавгат...

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Во-во, STM тут и не пахнет.

Densl
Offline
Зарегистрирован: 28.11.2018

xDriver пишет:


Заказал у двух других продавцов с правильной маркировкой stm32 f103c8t6. И один продован все равно подделку подсунул. Так что маркировка не спасает от подделки уже.

b707
Offline
Зарегистрирован: 26.05.2017

Densl пишет:
Заказал у двух других продавцов с правильной маркировкой stm32 f103c8t6. И один продован все равно подделку подсунул. Так что маркировка не спасает от подделки уже.

если в лоте было явно указано stm32f103c8t6, а пришли другие чипы - на Али это железное основание для возврата денег.

Ссылку на лоты укажите

Densl
Offline
Зарегистрирован: 28.11.2018

107,28 руб. 10%OFF | STM32F103C8T6 ARM 32 Cortex-M3 STM32 SWD Minimum System Development Board Module Mini USB Interface For Arduino I/O 72Mhz
https://s.click.aliexpress.com/e/bpjdARXG
Чипы те же самые с виду. Как доказать что подделка ХЗ. Оригинальные в среде Ардуино разгоняются до 128МГц, а этот не хочет.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

RogerClark пишет, что cs32f103 гонится только на 80. В остальном вроде не ругают. Там же кстати можно переведённый даташит качнуть.

b707
Offline
Зарегистрирован: 26.05.2017

Densl пишет:
107,28 руб. 10%OFF | STM32F103C8T6 ARM 32 Cortex-M3 STM32 SWD Minimum System Development Board Module Mini USB Interface For Arduino I/O 72Mhz https://s.click.aliexpress.com/e/bpjdARXG Чипы те же самые с виду. Как доказать что подделка ХЗ. Оригинальные в среде Ардуино разгоняются до 128МГц, а этот не хочет.

ваша ссылка открывает первую страницу Али, а не лот.

Не понял, что значит "чипы те же самые с виду"? Что, все-таки, на них написано - stm32 или cs32?

Или претензия только в том, что они "не разгоняются"? - так это даже производитель не гарантирует. иначе продавал бы их как 128МГц :)))

Densl
Offline
Зарегистрирован: 28.11.2018

107,28 руб. 10%OFF | STM32F103C8T6 ARM 32 Cortex-M3 STM32 SWD Minimum System Development Board Module Mini USB Interface For Arduino I/O 72Mhz
https://s.click.aliexpress.com/e/b1rnfiFs
Все буквы и цифры как на оригинале написано сверху тем же шрифтом. Есть с чем сравнить дома.

b707
Offline
Зарегистрирован: 26.05.2017

Densl пишет:
Все буквы и цифры как на оригинале написано сверху тем же шрифтом. Есть с чем сравнить дома.

Ну тогда шансов на спор нет.

да и вообще, на мой взгляд, то что он не гонится - не доказательство подделки.

 

 

PS - лот по ссылке все равно не открывается. Вы, наверно, ссылку лота из своей "Корзины" даете, а надо на сам лот. Хотя это уже не важно...

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

b707, у него в названии  ссылки правильный адрес, а в содержание самой ссылки мусор. Этот глюк часто бывает, когда пытаешься вставить готовую ссылку.  To: Densl надежнее  будет написать слово ссылка, выделить его мышкой, и в меню редактирования нажать кнопку "вставить ссылку"

b707
Offline
Зарегистрирован: 26.05.2017

dimax пишет:

b707, у него в названии  ссылки правильный адрес, а в содержание самой ссылки мусор.

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

Добавка - а вот открывается и правда какая-то фигня. Скопировал ссылку из конфы как текст, перенес в адрессную строку - открылся лот. Чудеса...

Чем-то напоминает тот глюк, когда в википедии на любой запрос с сайта открывались разные обидные статьи :)

Densl
Offline
Зарегистрирован: 28.11.2018

Кто использовал в Ардуино с адоном Роджера Кларка все 3 UART? Как стабильность? У меня похоже то тайминги сбиваются и из-за этого не прошивается, приходиться перезапускать IDE, то не все UART работают. Несколько раз думал что сжёг порт, все выпаивал, проверял отдельно и опять впаивал. У меня Arduino 1.8.5.

pixel28
Offline
Зарегистрирован: 23.11.2015

Всем привет. Изучаю STM32 с Arduino. Непонятно как работать с портами побитово. 

К примеру вместо digitalWrite в ардуине пишем что-то типа: PORTB = B00010000 или PORTB != 1 << 5.

Пробовал на STM32 сделать разными способами, писал  и GPIOB и PB и PORTB - никак не получается. Надо знать к чему присваивать, пытался найти в библиотеках - ничего не понял)

b707
Offline
Зарегистрирован: 26.05.2017

Densl пишет:
Кто использовал в Ардуино с адоном Роджера Кларка все 3 UART? Как стабильность? .

все три разом - не пользовал, а два в одном проекте запросто, никаких проблем

Densl
Offline
Зарегистрирован: 28.11.2018

b707 пишет:

Densl пишет:
Кто использовал в Ардуино с адоном Роджера Кларка все 3 UART? Как стабильность? .

все три разом - не пользовал, а два в одном проекте запросто, никаких проблем


А какая версия arduino IDE, где работает? У меня на разных программах, с разными платами bluepill все одно и тоже.

b707
Offline
Зарегистрирован: 26.05.2017

Densl пишет:
А какая версия arduino IDE, где работает?.

1.6.12

1.8.3

nik182
Offline
Зарегистрирован: 04.05.2015

pixel28 пишет:

Всем привет. Изучаю STM32 с Arduino. Непонятно как работать с портами побитово. 

К примеру вместо digitalWrite в ардуине пишем что-то типа: PORTB = B00010000 или PORTB != 1 << 5.

Пробовал на STM32 сделать разными способами, писал  и GPIOB и PB и PORTB - никак не получается. Надо знать к чему присваивать, пытался найти в библиотеках - ничего не понял)

GPIOB->ODR |= (1<<12);

GPIOB->ODR &= ~(1<<12);

dosikus
Offline
Зарегистрирован: 11.03.2017

Неа ....

#define  LED_OFF   GPIOB->BSRR = GPIO_BSRR_BR12 
 #define LED_ON    GPIOB->BSRR = GPIO_BSRR_BS12  
 
 
LED_ON;
Delay_ms(100);
LED_OFF;
Delay_ms(100);

 

nik182
Offline
Зарегистрирован: 04.05.2015

Почему неа? ... или! 

И к тому же можно ещё так. 

#define  LED_OFF   GPIOB->BRR = GPIO_BRR_BR12 
#define LED_ON    GPIOB->BSRR = GPIO_BSRR_BS12  
 
Ну и прокрутить весь регистр
  GPIOB->BSRR = GPIO_BSRR_BS0;
  for (int ii=0U;ii++;ii<15U)
  {
     delay(1000);
     GPIOB->BRR = 1U << ii;
     GPIOB->BSRR = 1U << (ii+1);
  };
     delay(1000);
  GPIOB->BRR = GPIO_BRR_BR15;

 

 

dosikus
Offline
Зарегистрирован: 11.03.2017

Потому что не или.
Запись в ODR не атомарная, учиматчасть...

nik182
Offline
Зарегистрирован: 04.05.2015

Как давно запись в ODR стала не атомарной? Цепочка прочитать регистр в переменную ‐ изменить переменную - записать обратно по определению не атомарна. А просто запись в регистр абсолютно эквивалентны. Если не считать, что когда пишешь в ODR то пишешь все разряды и нули и единицы, а когда в BSRR устанавливаются в единицы только те разряды где единицы. А вот установка нулей уже прикольнее. В нули устанавливаются те разряды , где единицы пишутся в BRR. Всё это к 103. В f4xx всё немного по-другому. 

dosikus
Offline
Зарегистрирован: 11.03.2017

Все настолько плохо?

Тогда учимся читать, и если оригинал для вас недоступен - можно и напальцах...

https://catethysis.ru/stm32-gpio/

http://easyelectronics.ru/arm-uchebnyj-kurs-porty-gpio.html

nik182
Offline
Зарегистрирован: 04.05.2015

Вот именно плохо. Где написано что ODR=GPIO_ODR_ODR_12;  не атомарная операция? Я ж написал - GPIOB->ODR |= GPIO_ODR_ODR_12;  неатомарная. У этих двух строк огромная разница. Первая за один такт устанавливает двенадцатый бит, остальные обнуляет. Вторая за 3 такта, между которыми может возникнуть прерывание, устанавливает двенадцатый бит, остальные сохраняет. Если я точно знаю какие биты должны быть в выходном регистре мне не обязательно его нужно читать, что бы модифицировать один бит. Почитайте мануал и осознайте, что BRR и BSRR называются регистрами data bitwise handling -  побитовая обработка данных. Целый регистр ODR пишется так же атомарно. Но целый. Не отдельные биты.

dosikus
Offline
Зарегистрирован: 11.03.2017

Не надо ловить меня на фу фу и выкручиввться как глист и переобуваться в воздухе.
Писано для записи/сброса бита в ODR , что в посту 421 , и что никогда не было атомарной и есть RMW.
Если не осознаем разницу- марш учитьматчасть.

nik182
Offline
Зарегистрирован: 04.05.2015

Скажите, где в #421 сказано что это действие атомарное? Может быть в #417 был вопрос про атомарную работу? Был вопрос как с портом работать побитово так же как в AVR. Мой ответ точно написал как работать через выходной регистр порта, точно также как и в AVR. Работа с портом в AVR не атомарна. Атомарная работа это плюшка STM, которая аналогов у наны уны не имеет. 

dosikus пишет:
Потому что не или. Запись в ODR не атомарная, учи матчасть...

Запись в ODR атомарна. Это написано во всех мануалах. Это Ваша ошибка и выкручиваться надо Вам. Вас ни кто за язык не тянул говорить:" Запись в ODR не атомарная...".

dosikus
Offline
Зарегистрирован: 11.03.2017

А теперь посмотри в ответ на что сие было писано.
Можно перефразировать для таких умников - твоя запись в ODR.

Про атомарность ты узнал только что, так что крутись не крутись , а врешь именно ты.

И еще, твоя писанина есть фуфло , пиздеж и выкручивания глиста, ибо прямая запись в ODR и BSRR не эквивалентные вещи и приводить их в сравнении может только д.

nik182
Offline
Зарегистрирован: 04.05.2015

Обидно однако. У меня шести фазный регулятор, про который я уже писал на форуме, шестью тиристорами дергает через BSRR BRR.  Сделан он был три года назад. Так что как минимум три года я знаю об этой возможности.  

dosikus
Offline
Зарегистрирован: 11.03.2017

Ну померяемся, у меня анологичное делает дма через бурст , что более эффективно чем твое софтовое ногодрочерство и вот здесь именно атомарно.

dosikus
Offline
Зарегистрирован: 11.03.2017

И вообще ты советуешь нубу манипуляцию битами в ODR, и это когда давным -давно всем известно что это абсолютно не оптимально(насрать на авр ,здесь стм), и вот это ставит твой уровень абсолютно ниже плинтуса

nik182
Offline
Зарегистрирован: 04.05.2015

Давай ты сначала посмотришь сколько раз и как я помог народу на форуме с stmками, а потом будешь оценивать мой уровень?

dosikus
Offline
Зарегистрирован: 11.03.2017

Помог, молодец.
Повышай свой уровень, ибо здесь у тебя пробелы.
Можешь не благодарить, ибо все у тебя впереди касательно стм...

Densl
Offline
Зарегистрирован: 28.11.2018

Вы такие умные помощники тут собрались. Мне нужна помощь. Я на stm32 обмен налаживаю по рс 485 и нифига не работает. Моя тема тут на форуме только появилась.

dosikus
Offline
Зарегистрирован: 11.03.2017

А в чем проблемы? Пишем -что за камень, какой драйвер rs485, по какому протоколу работаем?

ssss
Offline
Зарегистрирован: 01.07.2016

nik182 пишет:

Запись в ODR атомарна. Это написано во всех мануалах.

Ссылку, пожалуйста... )))))))))))))

А ваще... включи мозги и подумай... почему СТМ ввёл допрегистры для управления портом...вот им нехрен было делать...

nik182
Offline
Зарегистрирован: 04.05.2015

Я уже всё расписал #425 и #427 зачем допрегистры - что бы за одну команду записи можно было манипулировать отдельными битами, не затрагивая другие. Особенно если в порт пишут несколько параллельных процессов. Я наступал на эти грабли, когда на одном порту висел дисплей 1602 и управление тиристорами. Библиотека 1602 писала в ODR и срывала импульсы управления. Пришлось на BSRR переписывать. А ссылки - RM0008 мануал на 103. Fig 15. BSRR и ODR пишутся одной и той же командой. Из мануала  ARM Assembly Language это str или ldr, что конкретно можно посмотреть в листинге.       

dosikus
Offline
Зарегистрирован: 11.03.2017

Ну и где эта тема то?

ssss
Offline
Зарегистрирован: 01.07.2016

nik182 пишет:

Я уже всё расписал

Слов много... и все о своём и ни о чём...

Ссылка где... на атомарность ODR... ась ??? )))))))

nik182 пишет:

Пришлось на BSRR переписывать.  

Правильно... потому что нет у ODR никакой атомарности... отродясь... запомни это хорошо...

========

А... и да...

nik182 пишет:

Особенно если в порт пишут несколько параллельных процессов. Я наступал на эти грабли, когда на одном порту висел дисплей 1602 и управление тиристорами. Библиотека 1602 писала в ODR и срывала импульсы управления.       

Просто либа гавно... или не вникал в суть...

Если к ODR обращаться как к байту... то вторая половина порта не затрагивается... т.е. атомарность половины порта присутсвует...

Хотя... групповыми операциями с битами можно рулить и через BSRR... как не странно... Это к твоему...

Цитата:

что бы за одну команду записи можно было манипулировать отдельными битами, не затрагивая другие.

dosikus
Offline
Зарегистрирован: 11.03.2017

Разве только аппаратно, с DMA...

nik182
Offline
Зарегистрирован: 04.05.2015

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

Для подтверждения этого утверждения кусок листинга записи 8 16 и 32 разрядных данных в порты BSRR  и ODR. Как говорится найдите разницу между атомарным BSRR и не атомарным  ODR:

    252            d8=1;
   \   0000001E   0x....             LDR.N    R4,??DataTable139
   \   00000020   0x2001             MOVS     R0,#+1
   \   00000022   0x7120             STRB     R0,[R4, #+4]
    253            d16=1;
   \   00000024   0x8120             STRH     R0,[R4, #+8]
    254            d32=1;
   \   00000026   0x60E0             STR      R0,[R4, #+12]
    255            GPIOB->BSRR = d8;
   \   00000028   0x....             LDR.N    R0,??DataTable139_1  ;; 0x40010c0c
   \   0000002A   0x2101             MOVS     R1,#+1
   \   0000002C   0x6041             STR      R1,[R0, #+4]
    256            GPIOB->ODR = d8;
   \   0000002E   0x7921             LDRB     R1,[R4, #+4]
   \   00000030   0x6001             STR      R1,[R0, #+0]
    257            GPIOB->BSRR = d16;
   \   00000032   0x8921             LDRH     R1,[R4, #+8]
   \   00000034   0x6041             STR      R1,[R0, #+4]
    258            GPIOB->ODR = d16;
   \   00000036   0x8921             LDRH     R1,[R4, #+8]
   \   00000038   0x6001             STR      R1,[R0, #+0]
    259            GPIOB->BSRR = d32;
   \   0000003A   0x68E1             LDR      R1,[R4, #+12]
   \   0000003C   0x6041             STR      R1,[R0, #+4]
    260            GPIOB->ODR = d32;
   \   0000003E   0x68E1             LDR      R1,[R4, #+12]
   \   00000040   0x6001             STR      R1,[R0, #+0]
dosikus
Offline
Зарегистрирован: 11.03.2017

nik182,  ничего что разговор был о манипуляции отдельными битами?????

 

nik182
Offline
Зарегистрирован: 04.05.2015

И что? Используя ODR нельзя манипулировать отдельными битами? А как же ардуина? Там манипулируют. Перечитайте #417. Ещё раз спрошу. Где в #417 требование атомарности? Это ты потребовал и утверждал 

dosikus пишет:
А теперь посмотри в ответ на что сие было писано. Можно перефразировать для таких умников - твоя запись в ODR. Про атомарность ты узнал только что, так что крутись не крутись , а врешь именно ты. И еще, твоя писанина есть фуфло , пиздеж и выкручивания глиста, ибо прямая запись в ODR и BSRR не эквивалентные вещи и приводить их в сравнении может только д.

и

dosikus пишет:
И вообще ты советуешь нубу манипуляцию битами в ODR, и это когда давным -давно всем известно что это абсолютно не оптимально(насрать на авр ,здесь стм), и вот это ставит твой уровень абсолютно ниже плинтуса

Т.е. Манипулировать битами можно, но это неоптимально?

К тому же, если через BSRR нужно установить несколько разрядов то нужно провести кучу операций. Для единиц просто записать единицы в нижние 16 бит, а для нулей нужно инвертировать 0->1 и сдвинуть полученное в верхние 16 бит 32 разрядного регистра BRSS. Потом атомарно можно всё это записать через BSRR на выходные ноги процессора. Не проще  на время  GPIOB->ODR |= (1<<12); запретить прерывания? Что будет быстрее? В каждом случае можно выбрать оптимальный вариант.

dosikus
Offline
Зарегистрирован: 11.03.2017

Проще не городить чушь а признать тебе свои ошибки...

ssss
Offline
Зарегистрирован: 01.07.2016

nik182 пишет:

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

Твоё понимание (или непонимание) атомарности никого не интересует... есть стандартные определения на этот счёт...

А половиной порта я тебя явно удивил... Бывает !!! )))))))))

Цитата:

В этом смысле запись данных в порт ODR не отличается от записи ODR.

Это ваще перл... заслуживающий особого внимания... )))))))))))))))))))

Так держать !!!

Цитата:

 Как говорится найдите разницу между атомарным BSRR и не атомарным  ODR

В этом то и разница... что ты эту разницу не видишь... или не понимаешь...

Операции с BSRR и битбэндинг - атомарны... с ODR - нет... Фенит а ля комедия !!!

ssss
Offline
Зарегистрирован: 01.07.2016

nik182 пишет:

К тому же, если через BSRR нужно установить несколько разрядов то нужно провести кучу операций. Для единиц просто записать единицы в нижние 16 бит, а для нулей нужно инвертировать 0->1 и сдвинуть полученное в верхние 16 бит 32 разрядного регистра BRSS. Потом атомарно можно всё это записать через BSRR на выходные ноги процессора. Не проще  на время  GPIOB->ODR |= (1<<12); запретить прерывания? Что будет быстрее? В каждом случае можно выбрать оптимальный вариант.

Ты это серьёзно ??? Или пытаешься на костылях прыгать в высоту ??? )))))))))

nik182
Offline
Зарегистрирован: 04.05.2015

ssss пишет:

Ты это серьёзно ??? Или пытаешься на костылях прыгать в высоту ??? )))))))))

Давай ты приведёшь пример как установить В1010 через переменную, а не константу в 4,5,6,7 разряды порта В с помощью BSRR? И тогда будем посмотреть кто на костылях, а кто нет. А то желающих трындеть много, а привести конкретный пример, опровергающий собеседника, знаний не хватает.  

ssss
Offline
Зарегистрирован: 01.07.2016

nik182 пишет:

И тогда будем посмотреть кто на костылях, а кто нет.

Ну... пока это ты... не только на костылях... а даже лежачий... которого успешно и с удовольствием пинают... кому не лень... )))))))))

Где признание твоей неправоты ??? Где собственноручное художественное посыпание твоей головы пеплом??? Ась??? )))))))))))))

Цитата:

А то желающих трындеть много, а привести конкретный пример, опровергающий собеседника, знаний не хватает.  

Да... ты уже привел пример... как делать не надо... и даже сам сказал... что пришлось переделывать... Что тебе ещё надо??? )))))))))))))

Либа под 1602 виновата??? Не смеши!!! На СТМ32 1602 легко вешается аппаратно!!! И забывается весь это кошмар и ужас с ногодрыгом, атомарностью, делаями, ОДР и прочими шнягами... )))))))))))))))))

Прерывания запрещать??? Да вы батенька в своём уме ли??? Что же это... в 1602 требует такой афигенной срочности??? )))))))))))

Там и так всё делаями усеяно... )))))))))))

Представил твой код... где каждый ногодрыг либы под 1602 обрамлён запретом-разрешением прерывания... Самому не смешно???

======

Перестань спорить... Учи матчасть!!!