Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

MCO на STM32
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=19305
Страница 1 от 3

Автор:  Н'бабане Гт'муан'га [ Нед Ное 03, 2024 5:40 pm ]
Заглавие:  MCO на STM32

Някой може ли да ми помогне с идея?
Занимавам се с един STM32L431RC6. Противно животно като всички ST-та (мое лично мнение; не ангажирам никой по тоя въпрос!!). Иска страшно много учене, което не мога да му дам.

Имам кварц 12MHz за клок и се опитвам да подкарам процесора на 66 и да изкарам 33 клок на RB6. Нищо не излиза. Иначе с клатене на ръка в цикъл няма проблем. Дори не знам дали всъщност работи на 66 сега...
Средата е ардуино.
Ето кода (махнал съм всичко друго за пробата):

Код:

void Xclock(bool en) {
    if (en) {
        // Enable the GPIOB clock
        RCC->AHB2ENR |= RCC_AHB2ENR_GPIOBEN;

        // Set PB6 to Alternate Function mode for MCO output
        GPIOB->MODER &= ~GPIO_MODER_MODE6;       // Clear mode bits for PB6
        GPIOB->MODER |= GPIO_MODER_MODE6_1;      // Set PB6 to Alternate Function mode

        // Ensure the MCO alternate function is selected (AF0)
        GPIOB->AFR[0] &= ~GPIO_AFRL_AFSEL6;      // Clear AF bits for PB6, AF0 is required for MCO

        // Clear any previous MCO configuration
        RCC->CFGR &= ~(RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE);

        // Set MCO source to SYSCLK and configure the prescaler to divide by 2
        RCC->CFGR |= (0b11 << RCC_CFGR_MCOSEL_Pos);  // MCO source = SYSCLK (0b11 for SYSCLK)
        RCC->CFGR |= RCC_CFGR_MCOPRE_DIV2;           // Set MCO prescaler to 2 (66 MHz / 2 = 33 MHz)
    } else {
        // Disable the MCO output by setting PB6 to its default input mode
        GPIOB->MODER &= ~GPIO_MODER_MODE6;       // Set PB6 to input mode
    }
}


void configureSystemClock(void) {
    // Enable HSE (High-Speed External) clock
    RCC->CR |= RCC_CR_HSEON;
    while (!(RCC->CR & RCC_CR_HSERDY));  // Wait until HSE is ready

    // Configure PLL to multiply 12 MHz HSE to 66 MHz
    RCC->PLLCFGR = RCC_PLLCFGR_PLLSRC_HSE   // Select HSE as PLL source
                 | (1 << RCC_PLLCFGR_PLLM_Pos)   // PLLM = 1
                 | (22 << RCC_PLLCFGR_PLLN_Pos)  // PLLN = 22 (12 MHz * 22 = 264 MHz VCO)
                 | (4 << RCC_PLLCFGR_PLLR_Pos);  // PLLR = 4 (264 MHz / 4 = 66 MHz)

    // Enable the PLL
    RCC->CR |= RCC_CR_PLLON;
    while (!(RCC->CR & RCC_CR_PLLRDY));  // Wait until PLL is ready

    // Select PLL as the system clock source
    RCC->CFGR |= RCC_CFGR_SW_PLL;
    while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL); // Wait until PLL is the system clock
}


void setup(void) {
    configureSystemClock();
    Xclock(true);
}


void loop(void) {
}


Автор:  TheWizard [ Нед Ное 03, 2024 6:26 pm ]
Заглавие:  Re: MCO на STM32

CUBE -> Visual setting .... export to MAKEFILE ... view code

след генерацията, ключа за барака е някъде тук
https://github.com/Wiz-IO/wizio-stm/tre ... 31RBT6/stm

Автор:  ДедоБоре [ Нед Ное 03, 2024 9:12 pm ]
Заглавие:  Re: MCO на STM32

от сорса:
Код:
const uint8_t  AHBPrescTable[16] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U, 6U, 7U, 8U, 9U};

това как трябва да се разбира на съвременен език?

Автор:  TheWizard [ Нед Ное 03, 2024 10:28 pm ]
Заглавие:  Re: MCO на STM32

тва Куба го генерира :)
неква "мързелива" таблица

Автор:  VPavlov [ Нед Ное 03, 2024 11:22 pm ]
Заглавие:  Re: MCO на STM32

ДедоБоре написа:
от сорса:
Код:
const uint8_t  AHBPrescTable[16] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U, 6U, 7U, 8U, 9U};

това как трябва да се разбира на съвременен език?


Масив с елементи от без знакови числа с обхват до 255. Съдейки по името това са възможни делители за AHB bus или шина, вероятно се взимат от този масив за да се вмъкнат в prescaler регистъра. За тази шина са свързани някои от периферните модули, ако мога така да се изразя. В документацията на ползвания контролер има едно BlockDiagram, най-вероятно в datasheet, където може да се види до какво води този bus\шина и каква му е честотата по подразбиране. Броячите/часовници/таймери или както е прието да се наричат си имат собствени честоти и делители, които не зависят от тези на шината.

Автор:  TheWizard [ Пон Ное 04, 2024 1:45 am ]
Заглавие:  Re: MCO на STM32

https://github.com/Wiz-IO/wizio-stm/blo ... 4xx.c#L312

Автор:  syscop [ Пон Ное 04, 2024 11:59 am ]
Заглавие:  Re: MCO на STM32

Н'бабане Гт'муан'га написа:
...процесора на 66 и да изкарам 33 клок на RB6...

На "български" - искаш да изведеш clock-а на MCO изхода?

Автор:  bateAz [ Пон Ное 04, 2024 3:59 pm ]
Заглавие:  Re: MCO на STM32

GPIO_MODER_MODE6_1 това като какво е дефинирано ? По моите спомени трябва да =0.

Автор:  Н'бабане Гт'муан'га [ Пон Ное 04, 2024 4:21 pm ]
Заглавие:  Re: MCO на STM32

syscop написа:
Н'бабане Гт'муан'га написа:
...процесора на 66 и да изкарам 33 клок на RB6...

На "български" - искаш да изведеш clock-а на MCO изхода?


Да.

bateAz написа:
GPIO_MODER_MODE6_1 това като какво е дефинирано ? По моите спомени трябва да =0.


Че аз откъде да знам?? :D Тоя код ми го написа чата. Аз си знам пиковете, за другите неща или гледам да не ги ползвам, или ако няма накъде търся помощ...

Автор:  syscop [ Пон Ное 04, 2024 4:34 pm ]
Заглавие:  Re: MCO на STM32

Заложи на това от картинката :) /* DS11453 Rev 3 */

Прикачени файлове:
pin_mco.png
pin_mco.png [ 18.49 KiB | Прегледано 2760 пъти ]

Автор:  TheWizard [ Пон Ное 04, 2024 4:51 pm ]
Заглавие:  Re: MCO на STM32

питай гуууу :)
нящо такова трябва да представлява в зависимост от серията
https://stackoverflow.com/questions/461 ... figuration

нямам КУБ, не мога да видя, не ми се чете PDF....

Автор:  Н'бабане Гт'муан'га [ Пон Ное 04, 2024 5:13 pm ]
Заглавие:  Re: MCO на STM32

syscop написа:
Заложи на това от картинката :) /* DS11453 Rev 3 */


Снощи пробвах и с A8 понеже и аз го видях това в даташита.
Същия резултат

Автор:  bateAz [ Пон Ное 04, 2024 5:38 pm ]
Заглавие:  Re: MCO на STM32

Направи го с А8 и вместо GPIO_MODER_MODE6_1 сложи 0.

Автор:  VPavlov [ Пон Ное 04, 2024 6:05 pm ]
Заглавие:  Re: MCO на STM32

Да се изкажа и аз, барабар Петко с мъжете :)

За да тръгне PA8 трябва и то да е настрои на алтернативна функция тип AF0, не знам дали си го направил за това пробвах да ти го настроя върху конструкцията на бота. Нямам точния хардуер да тествам:

Код:
void Xclock(bool en) {
    if (en) {
        // Enable the GPIOA clock
        RCC->AHB2ENR |= (1U<<0);

        // Set PA8 to Alternate Function mode for MCO output
        GPIOA->MODER |= (1U<<17);       
        GPIOA->MODER &= ~(1U<<16);   

        // Ensure the MCO alternate function is selected (AF0)
        GPIOA->AFR[1] &= ~(1U<<0);     
        GPIOA->AFR[1] &= ~(1U<<1);     
        GPIOA->AFR[1] &= ~(1U<<2);     
        GPIOA->AFR[1] &= ~(1U<<3);     

        // Clear any previous MCO configuration
        RCC->CFGR &= ~(RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE);

        // Set MCO source to SYSCLK and configure the prescaler to divide by 2
        RCC->CFGR |= (0b11 << RCC_CFGR_MCOSEL_Pos);  // MCO source = SYSCLK (0b11 for SYSCLK)
        RCC->CFGR |= RCC_CFGR_MCOPRE_DIV2;           // Set MCO prescaler to 2 (66 MHz / 2 = 33 MHz)
    } else {
        // Disable the MCO output by setting PA8 to its default input mode       
        GPIOA->MODER &= ~ (1U<<17);       
        GPIOA->MODER &= ~(1U<<16); 
    }
}

Автор:  syscop [ Пон Ное 04, 2024 6:18 pm ]
Заглавие:  Re: MCO на STM32

Ето ти проект за CubeMX. Генерирай си кода и виж какво ще стане. Махни .txt накрая, че на форума не му хареса разширението. Сигурно ще стане и за STM32CubeIDE.

Прикачени файлове:
srtm32l431.ioc.txt [4.8 KiB]
108 пъти

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/