Ничего странного, F303 жирнее. У F302 даже CCM нет, т.е. там RAM, таймеров, ADC, ОУ, компараторов, каналов DAC, короче всего меньше. Но возможно по факту это все один чип...
STM32 новичку в ARM что к чему
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4345460#p4345460"]у F302, как ни странно, функционал пожирней.[/uquote]
Ничего странного, F303 жирнее. У F302 даже CCM нет, т.е. там RAM, таймеров, ADC, ОУ, компараторов, каналов DAC, короче всего меньше. Но возможно по факту это все один чип...
Ничего странного, F303 жирнее. У F302 даже CCM нет, т.е. там RAM, таймеров, ADC, ОУ, компараторов, каналов DAC, короче всего меньше. Но возможно по факту это все один чип...
- Реклама
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
[uquote="VladislavS",url="/forum/viewtopic.php?p=4345471#p4345471"]Заменить стартап, линкерскрипт и заголовочный файл контроллера. Проверить систему тактирования. Если после этого пересоберётся, то скорее всего и заработает.[/uquote]
Линкерскрипт там один и тот же будет, т.к. объем флеш/ОЗУ одинаковый, а вот по периферии - да, действительно, надо таки заменить заголовочник и стартап, тогда будет понятно, не используется ли в коде под F303 то, чего нет в F302.
Линкерскрипт там один и тот же будет, т.к. объем флеш/ОЗУ одинаковый, а вот по периферии - да, действительно, надо таки заменить заголовочник и стартап, тогда будет понятно, не используется ли в коде под F303 то, чего нет в F302.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4345483#p4345483"]Линкерскрипт там один и тот же будет,[/uquote]А как же CCM?
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
VladislavS, упс... Да, хоть я ее и не использую, поломается…
Надо таки сделать универсальный скрипт без этой фигни. Все равно пользы ей — 0! И я ею вряд ли когда-либо буду пользоваться. Нафиг-нафиг.
Надо таки сделать универсальный скрипт без этой фигни. Все равно пользы ей — 0! И я ею вряд ли когда-либо буду пользоваться. Нафиг-нафиг.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4345580#p4345580"]Все равно пользы ей — 0![/uquote]
У F3 ART акселератора нет, там из CCM код существенно быстрее выполняется, особенно в разгоне.
У F3 ART акселератора нет, там из CCM код существенно быстрее выполняется, особенно в разгоне.
- Реклама
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
О, теперь под G070 наткнулся на то, что у меня не получается PLL настроить. Вроде, все делаю правильно: хочу системную частоту 144МГц, PLLP=72МГц, PLLQ=PLLR=48МГц, AHB=APB=72МГц. Соответственно, пишу:
Однако, МК "уходит в себя" и даже перепрошить не получается (но получается с резета стереть флеш; жаль, что в G0 по умолчанию нога BOOT0 не задействована).
Вроде бы, все делаю по мануалу, а вот - фигвам!
Добавлено after 30 minutes 10 seconds:
Сел вручную в дебаггере (по умолчанию оставил HSI) поочередно все это вводить. Дохнет на строчке
То бишь, таки что-то я в делителях неправильно сделал. Хотя, вроде бы все как надо.
Код: Выделить всё
#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
}Вроде бы, все делаю по мануалу, а вот - фигвам!
Добавлено after 30 minutes 10 seconds:
Сел вручную в дебаггере (по умолчанию оставил HSI) поочередно все это вводить. Дохнет на строчке
Код: Выделить всё
RCC->CFGR = RCC_CFGR_HPRE_3 | RCC_CFGR_SW_1Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4348838#p4348838"][/uquote]
А где PLLREN?
Код: Выделить всё
RCC->PLLCFGR = ((PLLR-1)<<29) | ((PLLQ-1)<<25) | ((PLLP-1)<<17) | (PLLN<<8) | ((PLLM-1)<<4) | RCC_PLLCFGR_PLLSRC_HSE;А где PLLREN?
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4348838#p4348838"]О, теперь под G070 ... хочу системную частоту 144МГц[/uquote]А что так скромно? Может сразу 450-500?
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
[uquote="Reflector",url="/forum/viewtopic.php?p=4348858#p4348858"]А где PLLREN?[/uquote]
Ух, блин, нагородили они! Я думал, это - флаг на VCO...
Мигает, но слишком быстро. И openocd не может приконнектиться (явно, что-то таки не так). Я уже и VOS в первую зону установил, в итоге вот, что вышло:
Добавлено 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МГц сделать, если в мануале пишут, что можно?
Ух, блин, нагородили они! Я думал, это - флаг на 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
}[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
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4348863#p4348863"]Но таки почему я не могу системную шину в 144МГц сделать, если в мануале пишут, что можно?[/uquote]
Покажи где такое написано? PLLR максимум 64MHz, а 344MHz - это VCO. По факту оно конечно гонится очень хорошо, на 140MHz я тестил функцию деления около часа...
Покажи где такое написано? PLLR максимум 64MHz, а 344MHz - это VCO. По факту оно конечно гонится очень хорошо, на 140MHz я тестил функцию деления около часа...
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
Так я вообще поначалу PLLR делал 48МГц! Дичь какая-то. Ну и говнище же ST выпустили! Как же хороши были STM32F0, и каким говном стало G0!
Покуда сконфигурируешь, охренеешь сто раз!
Покуда сконфигурируешь, охренеешь сто раз!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[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
Да уж, я уже вообще ничего не понимаю: вроде, все частоты должны быть 64МГц (осцилл на работе, так что через VCO проверить не могу), но почему-то светодиод мыргает намного быстрей 1 раза в секунду! Хотя Sysclk должен тактироваться 8МГц.
А отладка так и не заработала, и прошивать постоянно приходится с нажатым reset.
Кстати, по дефолту (если не включать PLL, а оставить тактирование системных шин от HSI16) тоже слишком быстро мигает. Я настраиваю на 500мс, т.е. одно мигание в секунду, а получаю ровно в 2 раза быстрей! Но ведь в этом случае тактироваться SysTick должен от 2МГц!!! А коль от 2МГц, то и период должен быть 4 секунды…
P.S. Кстати, почему-то в отладке у меня gdb символы из RCC и т.п. регистров показывает, а вот на PWR и FLASH ругается (мол, нет определения FLASH_TypeDef в текущем контексте), хоть я собираю с -g3.
А отладка так и не заработала, и прошивать постоянно приходится с нажатым 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
Eddy_Em, запускаешь куб, идёшь на вкладку тактирования, задаёшь нужную частоту, переносишь полученные делители в прошивку. Не благодари.
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
VladislavS, так себе совет. У меня документация есть - зачем мне калокуб?
Вот я по умолчанию запустил клоки (т.е. все тактируется от HSI16, и содержимое регистров - тому подтверждение). В SysTick->LOAD у меня 3999999, т.е. прерывание будет каждые 2с. Однако, судя по мырганию светодиода, оно происходит каждые 250мс! В 8 раз быстрей! Но в документации явно нарисовано "/8" между HCLK и систиком.
Ну как так-то?
Надо завтра притащить осциллограф с работы и на MCO посмотреть - откуда эта фантастика получается вообще… Ну и непонятно, какого черта у меня от HSE не работает отладка. Возможно, и правда надо убрать это:
Вот я по умолчанию запустил клоки (т.е. все тактируется от 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
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4348917#p4348917"]Вот я по умолчанию запустил клоки (т.е. все тактируется от HSI16, и содержимое регистров - тому подтверждение). В SysTick->LOAD у меня 3999999, т.е. прерывание будет каждые 0.5с. Однако, судя по мырганию светодиода, оно в 2 раза чаще происходит![/uquote]
Все правильно, 4М/16М = 0.25
Все правильно, 4М/16М = 0.25
Это вроде ошибка, никакого деления там нет. В смысле по умолчанию нет.Eddy_Em писал(а):Но в документации явно нарисовано "/8" между HCLK и систиком.
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
[uquote="Reflector",url="/forum/viewtopic.php?p=4348920#p4348920"]Это вроде ошибка, никакого деления там нет. В смысле по умолчанию нет.[/uquote]
А даташит я недавно скачал. Вот же засранцы! Могли бы и исправить ошибку.
А даташит я недавно скачал. Вот же засранцы! Могли бы и исправить ошибку.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
Деление частоты на 8 - это фича самого SysTick и поскольку его все равно приходится настраивать, то обычно без разницы что там выставлено по умолчанию.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[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]А чего не читаешь?
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4348917#p4348917"]У меня документация есть - зачем мне калокуб?[/uquote]А чего не читаешь?
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
Читаю, но там же хрен без поллитры разберёшься!
Вот, нарисовано, что систик делит частоту на 8. А фактически - не делит!
И да, 144 - это у меня VCO была, все остальное - в пределах дозволенного. Но не работает от PLL. А когда заработало от PLL с HSI, отвалилась возможность подключения стлинком.
Вот, нарисовано, что систик делит частоту на 8. А фактически - не делит!
И да, 144 - это у меня VCO была, все остальное - в пределах дозволенного. Но не работает от PLL. А когда заработало от PLL с HSI, отвалилась возможность подключения стлинком.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ


