Отговори на тема  [ 42 мнения ]  Отиди на страница 1, 2, 3  Следваща
MCO на STM32 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение 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) {
}


_________________
'просто' е технически синоним на 'красиво'


Нед Ное 03, 2024 5:40 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: MCO на STM32
CUBE -> Visual setting .... export to MAKEFILE ... view code

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

_________________
main[-1u]={1};


Нед Ное 03, 2024 6:26 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение Re: MCO на STM32
от сорса:
Код:
const uint8_t  AHBPrescTable[16] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U, 6U, 7U, 8U, 9U};

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


Нед Ное 03, 2024 9:12 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: MCO на STM32
тва Куба го генерира :)
неква "мързелива" таблица

_________________
main[-1u]={1};


Нед Ное 03, 2024 10:28 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Съб Апр 01, 2023 9:59 am
Мнения: 303
Мнение 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\шина и каква му е честотата по подразбиране. Броячите/часовници/таймери или както е прието да се наричат си имат собствени честоти и делители, които не зависят от тези на шината.


Нед Ное 03, 2024 11:22 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: MCO на STM32
https://github.com/Wiz-IO/wizio-stm/blo ... 4xx.c#L312

_________________
main[-1u]={1};


Пон Ное 04, 2024 1:45 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 9:39 pm
Мнения: 2277
Мнение Re: MCO на STM32
Н'бабане Гт'муан'га написа:
...процесора на 66 и да изкарам 33 клок на RB6...

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

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!


Пон Ное 04, 2024 11:59 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение Re: MCO на STM32
GPIO_MODER_MODE6_1 това като какво е дефинирано ? По моите спомени трябва да =0.


Пон Ное 04, 2024 3:59 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение Re: MCO на STM32
syscop написа:
Н'бабане Гт'муан'га написа:
...процесора на 66 и да изкарам 33 клок на RB6...

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


Да.

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


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

_________________
'просто' е технически синоним на 'красиво'


Пон Ное 04, 2024 4:21 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 9:39 pm
Мнения: 2277
Мнение Re: MCO на STM32
Заложи на това от картинката :) /* DS11453 Rev 3 */


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

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!
Пон Ное 04, 2024 4:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: MCO на STM32
питай гуууу :)
нящо такова трябва да представлява в зависимост от серията
https://stackoverflow.com/questions/461 ... figuration

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

_________________
main[-1u]={1};


Пон Ное 04, 2024 4:51 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение Re: MCO на STM32
syscop написа:
Заложи на това от картинката :) /* DS11453 Rev 3 */


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

_________________
'просто' е технически синоним на 'красиво'


Пон Ное 04, 2024 5:13 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение Re: MCO на STM32
Направи го с А8 и вместо GPIO_MODER_MODE6_1 сложи 0.


Пон Ное 04, 2024 5:38 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Съб Апр 01, 2023 9:59 am
Мнения: 303
Мнение 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); 
    }
}


Пон Ное 04, 2024 6:05 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 9:39 pm
Мнения: 2277
Мнение Re: MCO на STM32
Ето ти проект за CubeMX. Генерирай си кода и виж какво ще стане. Махни .txt накрая, че на форума не му хареса разширението. Сигурно ще стане и за STM32CubeIDE.


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

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!
Пон Ное 04, 2024 6:18 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 42 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни