STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

VladislavS, за осциллом я еще на работу не сходил. Запустил PLL от HSI - работает.
Кстати, в документации пишут, что флаг PLLSRC - это напрямую от PLL. Я выставил M в 2, N в 8, убрал у систика SysTick_CTRL_CLKSOURCE_Msk. Теперь почему-то мыргает в два раза медленней, чем надо, как будто и правда на вход делителей VCO поступает не HSI16, а его половина!
Да, кстати, убрал строчку

Код: Выделить всё

FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_LATENCY_1;
и у меня отладчик и с PLL заработал. ЯХЗ, что за нафиг такой (ведь, наоборот, пишут, что без FLASH_ACR_LATENCY_1 оно не заработает)… К сожалению у меня, как я выше говорил, какого-то хрена часть регистров (в основном, относящихся к ядру ARM) отладчик "не видит" - дичь какая-то, ведь при -g3 он должен всю отладочную информацию вместе с макросами сохранять. (а, дошло: он пишет в отладку лишь те регистры/макросы, которые я в коде использую).
Сейчас буду пробовать от HSE.
Последний раз редактировалось Eddy_Em Пт янв 06, 2023 16:25:34, всего редактировалось 1 раз.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Сообщение Sergi »

Можно на vldiscovery заменить F100R на F070R и играться в свое удовольствие. На других сериях проследить разводку питания - поднять ножку,припаять конденсатор.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Все, в отладчике разобрался: там по дефолту стоит флаг ICRST, а я своим присваиванием его убивал. В общем, надо так:

Код: Выделить всё

FLASH->ACR |= FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_LATENCY_1;
(правда, ICEN уже включен по умолчанию).
Забавно, что в F0 я вообще не трогал этот регистр и все нормально работало и от HSE, и от HSI48.

От HSE оно тоже заработало, косяк был с регистром FLASH->ACR. Вот только сейчас у меня стоит N=8 и M=P=Q=R=1. Однако, мыргает в 2 раза реже, чем надо. Ковыряюсь дальше.

Добавлено after 4 minutes 44 seconds:
Что до девборд, то у китайцев продаются разные переходные "кроватки" с LQFP на DIP. Я себе купил такую на LQFP48 и сделал такую девборду (собственно, на ней баловался недавно с F103C6 и F303CB). Разводку сделал так, чтобы все нужные мне (F103, F0x2 и F303) можно было воткнуть и помучить периферию. На гитхабе у меня более-менее полный код под F0x2 (правда, CAN я туда не запихал), а под F103 стал недавно переделывать из старого и обнаружил, что у меня дома вообще ничего нет полноценно-SPI'йного, чтобы проверить SPI (разве что активировать оба - один мастер, другой слейв - соединить и пиу-пиу).
Думаю, надо на работе попросить мне такие же купить под LQFP64 и LQFP100. А то возникла вот необходимость в туевой хуче аналоговых входов + ЦАП, мелконогие здесь не годятся (да и Vref у них нет).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349265#p4349265"]Вот только сейчас у меня стоит N=8 и M=P=Q=R=1. Однако, мыргает в 2 раза реже, чем надо.[/uquote]
16 / 2 * 8 / 2 = 32
Более того тут еще и VCO 64MHz получается, а минимально должно быть 96. Хотя работать и с 64 будет.
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="ARV",url="/forum/viewtopic.php?p=4349238#p4349238"]так что щупать-то?[/uquote]Ну не знаю, вы сами спросили
порекомендуйте комплект минимальной стоимости на сегодня, чтобы пощупать за вымя не самый примитивный ARM (плата c камнем, отладчик, минимальный обвес, IDE, тулчейн)
Что уж вы там щупать собрались не знаю. Я считаю, что "пощупать ARM" это в первую очередь подобрать под себя средства разработки, а уж дрыгать ножками дело техники.

[uquote="ARV",url="/forum/viewtopic.php?p=4349238#p4349238"]Cube IDE? я как-то прикипел к Eclipse, но, судя по теме, делать там без "графических" кодогенераторов нечего...[/uquote]С таким настроем лучше и не начинайте.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Reflector, не, в документации вот, что написано:

Код: Выделить всё

Caution: The software must set these bits so that the VCO output frequency is between 64 and 344 MHz.
Так что, VCO в 64МГц можно.
Кварц у меня 8МГц, поэтому от HSE я только N ставлю в 8. А вот при работе от HSI16, еще и M=2. Правда, сейчас оно у меня и от HSE, и от HSI моргает в 2 раза реже, чем надо. Подозреваю, что таки без осцилла здесь не обойтись.
Я считаю, что "пощупать ARM" это в первую очередь подобрать под себя средства разработки
Я поначалу вообще в geany код писал - и ничего. Потом вот к qt-creator привык. А gdb вообще попробовал лишь с месяц назад (а до этого лет 8 разрабатывал под STM32 безо всяких отладчиков - и как-то ж оно работало ☺).
В принципе, я оценил возможности отладки: как раз, когда знакомишься с новым МК, есть возможность проверить, что там в реальности в регистрах и что ты сам накосячил. Ну и, конечно, в реальном времени поиграться со значениями всяких флагов (как я сейчас с FLASH->ACR). Больше ни на что отладчик не годится. Тот же USB при помощи gdb отладить невозможно: ведь придется тормозить выполнение прошивки. Разве что надобавлять watch'ей и смотреть, что в процессе меняется... А то и как у убогого сеггера - сделать аналог его "отладочного принта", меняя содержимое некоего буфера в памяти и поставив в gdb watch на этот буфер.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18797
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

VladislavS писал(а):Я считаю, что "пощупать ARM" это в первую очередь подобрать под себя средства разработки
так я о том и спрашиваю. есть ли что-то такое, что скачал, установил и можно сразу щупать те платы, что у меня есть? чтобы не надо было колдовать с подключением дебаггера, как в Eclipse, чтобы тулчейн уже был сразу интегрирован, а не отдельно скачивался, и т.д.

поскольку я даже доуровня начинающего в этой теме не дошел, потому не имею понятия, что проще и удобнее всего. и ваш скепсис
VladislavS писал(а):С таким настроем лучше и не начинайте
не понимаю.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349286#p4349286"]Так что, VCO в 64МГц можно.[/uquote]
Это опять косяки документации, в таблице "PLL characteristics" из DS прописано именно 96MHz минимум. Попробовал в кубе, там на 64 не ругается, у меня в коде тоже проверка на 64, значит видимо 64 минимум и есть.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Eddy_Em, а где ты делить R=1 нашёл? Я же чуть выше давал картинку с правильными делителями.

Добавлено after 3 minutes:
[uquote="ARV",url="/forum/viewtopic.php?p=4349289#p4349289"]так я о том и спрашиваю. есть ли что-то такое, что скачал, установил и можно сразу щупать те платы, что у меня есть? чтобы не надо было колдовать с подключением дебаггера, как в Eclipse, чтобы тулчейн уже был сразу интегрирован, а не отдельно скачивался, и т.д.[/uquote]CubeIDE бесплатно, IAR и Keil трофейно - всё это "из коробки" сразу работает с STM32.
Друг Кота
Аватара пользователя
Сообщения: 26008
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ARV",url="/forum/viewtopic.php?p=4349289#p4349289"]я даже до уровня начинающего в этой теме не дошел[/uquote]
Не, так дела не делаются. Если вы никогда не работали со средой, то по любому какое то время на привыкание потребуется. Тоже касается и самой железной платформы (ARM).
Нужно создать пустой проект. А потом все будет гораздо проще.
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

VladislavS, ну, понятно, что я единицы вычитаю, вот:

Код: Выделить всё

        RCC->PLLCFGR = ((PLLR-1)<<29) | ((PLLQ-1)<<25) | ((PLLP-1)<<17) | (PLLN<<8) | ((PLLM-1)<<4)
                | RCC_PLLCFGR_PLLREN | RCC_PLLCFGR_PLLPEN /* | RCC_PLLCFGR_PLLQEN */
                | RCC_PLLCFGR_PLLSRC_HSE;
Сейчас при работе от HSE в этом регистре 0x10010803 - как и должно быть. В RCC->CFGR - 0x12, как и должно быть. В регистре RCC->CR - 0x3030500, как и должно быть (т.е. и HSEON/HSERDY, и PLLON/PLLRDY). А частота таки 32МГц получается.. Странно.

Добавлено after 1 minute 50 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=4349301#p4349301"]по любому какое то время на привыкание потребуется[/uquote]
У меня в среднем на освоение нового семейства STM32 уходит месяц. А чтобы туда еще понаписать весь нужный набор сниппетов - не меньше года (чаще - два-три года; вот, F303 - исключение, т.к. очень похож на F103).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Родился
Аватара пользователя
Сообщения: 6
Зарегистрирован: Сб дек 03, 2016 17:04:32

Сообщение Aleksk »

[uquote="ARV",url="/forum/viewtopic.php?p=4349289#p4349289"]
VladislavS писал(а):Я считаю, что "пощупать ARM" это в первую очередь подобрать под себя средства разработки
так я о том и спрашиваю. есть ли что-то такое, что скачал, установил и можно сразу щупать те платы, что у меня есть? .[/uquote]

Конечно есть. PlatformIO как плагин для VSCode.
Сам всё необходимое подтянет с Github по мере создания проекта.
Как установить есть много инфы в сети.
Друг Кота
Аватара пользователя
Сообщения: 26008
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349302#p4349302"]А частота таки 32МГц получается.. Странно.[/uquote]
А слабо дать полную раскладку по домену осциллятора ИЗ ОТЛАДЧИКА. Там не так много регистров.
ЗЫ. У ARV нет никакого бэкграунда с ARM. Поэтому он лишен твоих многочисленных "чемоданов".

Добавлено after 1 minute 26 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349302#p4349302"]У меня в среднем на освоение нового семейства STM32 уходит месяц.[/uquote]
Меня с такими темпами уволят нахер... :)))
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349302#p4349302"]Сейчас при работе от HSE в этом регистре 0x10010803 - как и должно быть.[/uquote]Ну раз так и должно быть, то ты и получаешь свои 32 МГц.Изображение
изображение_2023-01-06_172525611.png
(29.83 КБ) 344 скачивания
Добавлено after 2 minutes 8 seconds:
[uquote="Aleksk",url="/forum/viewtopic.php?p=4349307#p4349307"]Конечно есть. PlatformIO как плагин для VSCode.[/uquote]Это самое ужасное, что можно посоветовать. VSCode чемпион по интуитивно непонятным настройкам. Что работает сразу из коробки я выше написал.
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

КРАМ, так я выше именно из gdb данные и привел после старта.
Вот, повторю:

Код: Выделить всё

(gdb) p /x *RCC
$21 = {CR = 0x3030500, ICSCR = 0x408c, CFGR = 0x12, PLLCFGR = 0x10010803, RESERVED0 = 0x0, RESERVED1 = 0x0, CIER = 0x0, CIFR = 0x0, CICR = 0x0, IOPRSTR = 0x0, AHBRSTR = 0x0, APBRSTR1 = 0x0, APBRSTR2 = 0x0, IOPENR = 0x4, 
  AHBENR = 0x100, APBENR1 = 0x10000000, APBENR2 = 0x0, IOPSMENR = 0x2f, AHBSMENR = 0x51301, APBSMENR1 = 0xff7e4c33, APBSMENR2 = 0x17d801, CCIPR = 0x0, RESERVED2 = 0x0, BDCR = 0x0, CSR = 0x1c000000}
Меня с такими темпами уволят нахер... :)))
Можно подумать, реальный человек сможет это осилить быстрей (особенно когда еще 100500 других дел есть: ведь помимо МК у меня еще телескопы с их системами управления, обработкой данных, долбаными вебмордами и прочей)!

Добавлено after 1 minute 16 seconds:
VladislavS, вот, блин! Я сам в свой код не смотрю. Написал же в комментах: "R=2..8, Q=2..8, P=2..32; N=8..86, M=1..8". Блин, вот же ST нарукожопили, так нарукожопили!!! Спасибо, проверяю.
Ага, заработало, как надо! Но вот сделать минимальное значение этих P/R/Q двойкой мог только наглый засранец ☺
Там еще и вот такой косяк: "after /M fvco should be 2.66..16", т.е. для кварца 8МГц M может быть только 1..3. Получается, что для G0 с USB придется частоты AHB и APB выставлять в 36МГц.

Добавлено after 8 minutes 19 seconds:
В общем, вот такой код инициализации тактирования получается:

Код: Выделить всё

#define WAITWHILE(x)  do{StartUpCounter = 0; while((x) && (++StartUpCounter < 0xffffff)){nop();}}while(0)
TRUE_INLINE void StartHSEHSI(int isHSE){
    uint32_t StartUpCounter;
    RCC->CR &= ~RCC_CR_PLLON; // disable PLL
    WAITWHILE(RCC->CR & RCC_CR_PLLRDY); // wait while PLL on
    if(isHSE){
        RCC->CR |= RCC_CR_HSEON;
        WAITWHILE(!(RCC->CR & RCC_CR_HSERDY)); // wait while HSE isn't on
    }else RCC->CR |= RCC_CR_HSION;
    RCC->APBENR1 |= RCC_APBENR1_PWREN;
    // Enable high performance mode
    PWR->CR1 = PWR_CR1_VOS_0;
    WAITWHILE(PWR->SR2 & PWR_SR2_VOSF);
    if(isHSE){
        RCC->PLLCFGR = ((PLLR-1)<<29) | ((PLLQ-1)<<25) | ((PLLP-1)<<17) | (PLLN<<8) | ((PLLM-1)<<4)
                | RCC_PLLCFGR_PLLREN | RCC_PLLCFGR_PLLPEN /* | RCC_PLLCFGR_PLLQEN */
                | RCC_PLLCFGR_PLLSRC_HSE;
    }else{ // 64MHz from HSI16
        RCC->PLLCFGR = (8<<8) | (1<<4)
                | RCC_PLLCFGR_PLLREN | RCC_PLLCFGR_PLLPEN /* | RCC_PLLCFGR_PLLQEN */
                | RCC_PLLCFGR_PLLSRC_HSI;
    }
    RCC->CR |= RCC_CR_PLLON;
    WAITWHILE(!(RCC->CR & RCC_CR_PLLRDY));
    FLASH->ACR |= FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_LATENCY_1;
    RCC->CFGR = RCC_CFGR_SW_1; // set sysclk switch to pll
}

#define StartHSE()  do{StartHSEHSI(1);}while(0)
#define StartHSI()  do{StartHSEHSI(0);}while(0)
Выложил весь код на гитхаб. Теперь можно побаловаться с UART. Надеюсь, с этим делом проще будет.
Последний раз редактировалось Eddy_Em Пт янв 06, 2023 17:46:17, всего редактировалось 1 раз.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18797
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

VladislavS писал(а):CubeIDE бесплатно
а оно имеет понятие о моей плате, или придется разыскивать документацию на неё? ну, для первого проекта, где там какие пины...
КРАМ писал(а):Если вы никогда не работали со средой, то по любому какое то время на привыкание потребуется.
привыкать - это нормально. бороться не хочу. в частности, о PlatformIO, которую мне тут порекомендовали, у меня сложилось впечатление наиотвратительнейшее, хотя сначала показалось, что просто и легко, пока рекомендованные демо-проекты собирал. но стоило сделать шаг в строну от рекомендаций - всё, тупик, догадаться, где что настраивается оказалось непосильным.
вот этого не хочу...

в те времена, когда я эти платы заполучил, была Atolliс True Studio - IDE на базе Eclipse, что было для меня одним из критериев выбора, но оказалось, студия эта не бесплатная... и я потратил кучу времени, чтобы выдрать из нее плагин для отладчика, и потом этот плагин в обычный Eclipse внедрить... сил потратил столько, что пользоваться результатами уже не стал - устал и надоело.

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

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="ARV",url="/forum/viewtopic.php?p=4349331#p4349331"]
VladislavS писал(а):CubeIDE бесплатно
а оно имеет понятие о моей плате, или придется разыскивать документацию на неё? ну, для первого проекта, где там какие пины...[/uquote]Я сам им не пользуюсь, но вроде там должен быть конфигуратор как в CubeMX, который эту плату знает. В любом случае, попробовать делов то на 10 минут.

[uquote="ARV",url="/forum/viewtopic.php?p=4349331#p4349331"]о PlatformIO, которую мне тут порекомендовали, у меня сложилось впечатление наиотвратительнейшее[/uquote]Плюсую.
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349321#p4349321"]Там еще и вот такой косяк: "after /M fvco should be 2.66..16", т.е. для кварца 8МГц M может быть только 1..3. Получается, что для G0 с USB придется частоты AHB и APB выставлять в 36МГц.[/uquote]
У меня на входе VCO всегда 4MHz, дальше если сильно хочется затактировать USB от PLLQ, хотя можно и от HSI48, то частота VCO должна нацело делиться на 48. Например, VCO может быть 48*4 = 192, PPLQ = 192 / 4 = 48MHz, а PLLR = 192 / 3 = 64MHz.

ps. В С же вроде static_assert завезли уже, почему никто не пользуется, можно все коэффициенты проверить на стадии компиляции...
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

ARV писал(а):а оно имеет понятие о моей плате, или придется разыскивать документацию на неё? ну, для первого проекта, где там какие пины...
Я бы то же хотел кнопочку ..., но у вы. Документацию придется искать и где какие пины то же.
Обычно выбираешь целевой МК, а не плату.

Из коробки, как выяснилось, работает только IAR.

А из самого простого CoIDE (танцы с отладчиком, но это просто, просто файлики редактируешь),
а CubeIDE не поддерживает плату stm32vldiscovery на stm32f100rb, а именно его отладчик ST-Link V1, его прошивать надо в V2, а там чего-то менять надо, резать, паять, не вдавался в подробности.

Я же эту тему перетряс, все IDE перебрал, именно сравнение с работой отладчика V1 и V2, поищите поиском.
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="ARV",url="/forum/viewtopic.php?p=4349331#p4349331"]а оно имеет понятие о моей плате, или придется разыскивать документацию на неё? ну, для первого проекта, где там какие пины...[/uquote]
На discovery же пины подписаны, не?
Ответить

Вернуться в «ARM»