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

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

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4345460#p4345460"]у F302, как ни странно, функционал пожирней.[/uquote]
Ничего странного, F303 жирнее. У F302 даже CCM нет, т.е. там RAM, таймеров, ADC, ОУ, компараторов, каналов DAC, короче всего меньше. Но возможно по факту это все один чип...
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4345471#p4345471"]Заменить стартап, линкерскрипт и заголовочный файл контроллера. Проверить систему тактирования. Если после этого пересоберётся, то скорее всего и заработает.[/uquote]
Линкерскрипт там один и тот же будет, т.к. объем флеш/ОЗУ одинаковый, а вот по периферии - да, действительно, надо таки заменить заголовочник и стартап, тогда будет понятно, не используется ли в коде под F303 то, чего нет в F302.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4345483#p4345483"]Линкерскрипт там один и тот же будет,[/uquote]А как же CCM?
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

VladislavS, упс... Да, хоть я ее и не использую, поломается…
Надо таки сделать универсальный скрипт без этой фигни. Все равно пользы ей — 0! И я ею вряд ли когда-либо буду пользоваться. Нафиг-нафиг.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4345580#p4345580"]Все равно пользы ей — 0![/uquote]
У F3 ART акселератора нет, там из CCM код существенно быстрее выполняется, особенно в разгоне.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

О, теперь под G070 наткнулся на то, что у меня не получается PLL настроить. Вроде, все делаю правильно: хочу системную частоту 144МГц, PLLP=72МГц, PLLQ=PLLR=48МГц, AHB=APB=72МГц. Соответственно, пишу:

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

#define PLLN    18
#define PLLM    1
#define PLLP    2
#define PLLQ    3
#define PLLR    3

#define WAITWHILE(x)  do{StartUpCounter = 0; while((x) && (++StartUpCounter < 0xffffff)){nop();}}while(0)
TRUE_INLINE void StartHSE(){
    uint32_t StartUpCounter;
    RCC->CR &= ~RCC_CR_PLLON; // disable PLL
    WAITWHILE(RCC->CR & RCC_CR_PLLRDY); // wait while PLL on
    RCC->CR |= RCC_CR_HSEON;
    WAITWHILE(!(RCC->CR & RCC_CR_HSERDY)); // wait while HSE isn't on
    RCC->PLLCFGR = ((PLLR-1)<<29) | ((PLLQ-1)<<25) | ((PLLP-1)<<17) | (PLLN<<8) | ((PLLM-1)<<4) | RCC_PLLCFGR_PLLSRC_HSE;
    RCC->CR |= RCC_CR_PLLON;
    RCC->CFGR = RCC_CFGR_HPRE_3 | RCC_CFGR_SW_1; // set sysclk switch to pll, set AHB prescaler to 2
}
Однако, МК "уходит в себя" и даже перепрошить не получается (но получается с резета стереть флеш; жаль, что в G0 по умолчанию нога BOOT0 не задействована).
Вроде бы, все делаю по мануалу, а вот - фигвам!

Добавлено after 30 minutes 10 seconds:
Сел вручную в дебаггере (по умолчанию оставил HSI) поочередно все это вводить. Дохнет на строчке

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

RCC->CFGR = RCC_CFGR_HPRE_3 | RCC_CFGR_SW_1
То бишь, таки что-то я в делителях неправильно сделал. Хотя, вроде бы все как надо.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4348838#p4348838"]

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

RCC->PLLCFGR = ((PLLR-1)<<29) | ((PLLQ-1)<<25) | ((PLLP-1)<<17) | (PLLN<<8) | ((PLLM-1)<<4) | RCC_PLLCFGR_PLLSRC_HSE;
[/uquote]
А где PLLREN?
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4348838#p4348838"]О, теперь под G070 ... хочу системную частоту 144МГц[/uquote]А что так скромно? Может сразу 450-500?
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="Reflector",url="/forum/viewtopic.php?p=4348858#p4348858"]А где PLLREN?[/uquote]
Ух, блин, нагородили они! Я думал, это - флаг на VCO...
Мигает, но слишком быстро. И openocd не может приконнектиться (явно, что-то таки не так). Я уже и VOS в первую зону установил, в итоге вот, что вышло:

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

TRUE_INLINE void StartHSE(){
    uint32_t StartUpCounter;
    RCC->CR &= ~RCC_CR_PLLON; // disable PLL
    WAITWHILE(RCC->CR & RCC_CR_PLLRDY); // wait while PLL on
    RCC->CR |= RCC_CR_HSEON;
    WAITWHILE(!(RCC->CR & RCC_CR_HSERDY)); // wait while HSE isn't on
    RCC->APBENR1 |= RCC_APBENR1_PWREN;
    // Enable high performance mode 
    PWR->CR1 = PWR_CR1_VOS_0;
    WAITWHILE(PWR->SR2 & PWR_SR2_VOSF);
    //RCC->PLLCFGR = (2<<29) | (2<<25) | (1<<17) | (18<<8) | RCC_PLLCFGR_PLLSRC_HSE
    RCC->PLLCFGR = ((PLLR-1)<<29) | ((PLLQ-1)<<25) | ((PLLP-1)<<17) | (PLLN<<8) | ((PLLM-1)<<4) |
            RCC_PLLCFGR_PLLREN | RCC_PLLCFGR_PLLPEN | (1<<24) | RCC_PLLCFGR_PLLSRC_HSE;
    RCC->CR |= RCC_CR_PLLON;
    WAITWHILE(!(RCC->CR & RCC_CR_PLLRDY));
    FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_LATENCY_0;
    RCC->CFGR = RCC_CFGR_HPRE_3 | RCC_CFGR_SW_1; // set sysclk switch to pll, set AHB prescaler to 2
}
Добавлено after 1 minute 19 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=4348860#p4348860"]Может сразу 450-500?[/uquote]
В мануале же сказано, что 344МГц максимальная частота.

Добавлено after 5 minutes 6 seconds:
Сделал все частоты равными 64МГц, т.е. N=8, M=P=Q=R=1. Замигало уже похоже на правду, но вот openocd таки не коннектится и флеш не перезаписывается… Возможно, с FLASH->ACR где-то фигню спорол.
Но таки почему я не могу системную шину в 144МГц сделать, если в мануале пишут, что можно?
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4348863#p4348863"]Но таки почему я не могу системную шину в 144МГц сделать, если в мануале пишут, что можно?[/uquote]
Покажи где такое написано? PLLR максимум 64MHz, а 344MHz - это VCO. По факту оно конечно гонится очень хорошо, на 140MHz я тестил функцию деления около часа...
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Так я вообще поначалу PLLR делал 48МГц! Дичь какая-то. Ну и говнище же ST выпустили! Как же хороши были STM32F0, и каким говном стало G0!
Покуда сконфигурируешь, охренеешь сто раз!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4348871#p4348871"]Покуда сконфигурируешь, охренеешь сто раз![/uquote]
Зато потом можно какие угодно частоты наклацать:

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

using pll = Pll<PllSrc::Hsi, 256, 4, 2, 0>;     // R:64, Q:128, P:0
//using pll = Pll<PllSrc::Hsi, 65*4, 4, 0, 0>;  // R:65
//using pll = Pll<PllSrc::Hsi, 280, 2, 0, 0>;   // R:140
Rcc::switchToPll<pll, AhbPresc::_1, ...>;
Спойлер

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

template<PllSrc pllSrc, uint32_t Vco, uint32_t R = 0, uint32_t Q = 0, uint32_t P = 0>
class Pll
{
    static_assert(Vco >= 64 && Vco <= 127 * 4, "Vco Range is not Valid!");
    static_assert(!(Vco % 4), "Vco is not Valid!");
    static_assert((R >= 2 && R <= 8) || !R, "R is not Valid!");
    static_assert((Q >= 2 && Q <= 8) || !Q, "Q is not Valid!");
    static_assert((P >= 2 && P <= 32) || !P, "P is not Valid!");
..........


static constexpr uint32_t M = (pllSrc == PllSrc::Hse) ? 2 : 4;
static constexpr uint32_t r = R ? (R - 1) << RCC_PLLCFGR_PLLR_Pos | RCC_PLLCFGR_PLLREN : 7 << RCC_PLLCFGR_PLLR_Pos;
static constexpr uint32_t q = Q ? (Q - 1) << RCC_PLLCFGR_PLLQ_Pos | RCC_PLLCFGR_PLLQEN : 7 << RCC_PLLCFGR_PLLQ_Pos;     
static constexpr uint32_t p = P ? (P - 1) << RCC_PLLCFGR_PLLP_Pos | RCC_PLLCFGR_PLLPEN : 31 << RCC_PLLCFGR_PLLP_Pos;    
RCC->PLLCFGR = uint32_t(pllSrc) | ((M - 1) << RCC_PLLCFGR_PLLM_Pos) | ((Vco / 4) << RCC_PLLCFGR_PLLN_Pos) | r | q | p;  
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Да уж, я уже вообще ничего не понимаю: вроде, все частоты должны быть 64МГц (осцилл на работе, так что через VCO проверить не могу), но почему-то светодиод мыргает намного быстрей 1 раза в секунду! Хотя Sysclk должен тактироваться 8МГц.
А отладка так и не заработала, и прошивать постоянно приходится с нажатым reset.
Кстати, по дефолту (если не включать PLL, а оставить тактирование системных шин от HSI16) тоже слишком быстро мигает. Я настраиваю на 500мс, т.е. одно мигание в секунду, а получаю ровно в 2 раза быстрей! Но ведь в этом случае тактироваться SysTick должен от 2МГц!!! А коль от 2МГц, то и период должен быть 4 секунды…

P.S. Кстати, почему-то в отладке у меня gdb символы из RCC и т.п. регистров показывает, а вот на PWR и FLASH ругается (мол, нет определения FLASH_TypeDef в текущем контексте), хоть я собираю с -g3.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

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

Сообщение Eddy_Em »

VladislavS, так себе совет. У меня документация есть - зачем мне калокуб?
Вот я по умолчанию запустил клоки (т.е. все тактируется от HSI16, и содержимое регистров - тому подтверждение). В SysTick->LOAD у меня 3999999, т.е. прерывание будет каждые 2с. Однако, судя по мырганию светодиода, оно происходит каждые 250мс! В 8 раз быстрей! Но в документации явно нарисовано "/8" между HCLK и систиком.
Ну как так-то?
Надо завтра притащить осциллограф с работы и на MCO посмотреть - откуда эта фантастика получается вообще… Ну и непонятно, какого черта у меня от HSE не работает отладка. Возможно, и правда надо убрать это:

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

FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_LATENCY_1;
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4348917#p4348917"]Вот я по умолчанию запустил клоки (т.е. все тактируется от HSI16, и содержимое регистров - тому подтверждение). В SysTick->LOAD у меня 3999999, т.е. прерывание будет каждые 0.5с. Однако, судя по мырганию светодиода, оно в 2 раза чаще происходит![/uquote]
Все правильно, 4М/16М = 0.25
Eddy_Em писал(а):Но в документации явно нарисовано "/8" между HCLK и систиком.
Это вроде ошибка, никакого деления там нет. В смысле по умолчанию нет.
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="Reflector",url="/forum/viewtopic.php?p=4348920#p4348920"]Это вроде ошибка, никакого деления там нет. В смысле по умолчанию нет.[/uquote]
А даташит я недавно скачал. Вот же засранцы! Могли бы и исправить ошибку.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

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

Сообщение VladislavS »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4348917#p4348917"]VladislavS, так себе совет.[/uquote]Нормальный совет. Сам пользуюсь и не считаю это чем-то зазорным. Удобный интерактивный калькулятор, который не позволит поставить 144 там где максимум 64.
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4348917#p4348917"]У меня документация есть - зачем мне калокуб?[/uquote]А чего не читаешь? :)
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Читаю, но там же хрен без поллитры разберёшься!
Вот, нарисовано, что систик делит частоту на 8. А фактически - не делит!
И да, 144 - это у меня VCO была, все остальное - в пределах дозволенного. Но не работает от PLL. А когда заработало от PLL с HSI, отвалилась возможность подключения стлинком.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Ответить

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