В начало | Зарегистрироваться | Заказать наши киты почтой
 
 
 
 

Программирование микроконтроллера GigaDevice GD32F303CCT6 на Си. Часть 2

📆27.02.2025   ✒️AYAN   🔎171   💬0  
Программирование микроконтроллера GigaDevice GD32F303CCT6 на Си. Часть 2

Тема этой части статьи — система тактирования МК GD32F303CCT6.
Блок управления тактированием GD32F303CCT6 поддерживает:
• внутренний RC-генератор 8 MГц (IRC8M),
• внутренний RC-генератор 48 MГц (IRC48M),
• высокоскоростной кварцевый осциллятор (HXTAL),
• низкоскоростной внутренний RC-генератор 40 кГц (IRC40K),
• низкоскоростной кварцевый генератор (LXTAL),
• ФАПЧ (PLL).


Рисунок 1. Система тактирования GD32F303CCT6


Тактирование большей части периферии и ядра осуществляется от IRC8M (дефолтный), HXTAL или PLL. Максимальная частота системного тактирования (CK_SYS) может достигать 120 МГц.
Настройка CK_SYS осуществляется через регистры CTL и CFG0 блока RCU (подробнее смотрите “Reset and clock unit (RCU)”, User Manual).


Рисунок 2. Регистры настройки частоты тактирования GD32F303CCT6


Следует иметь в виду, что дефолтное значение регистра CTL - 0x0000xx83 (0bxxxxxxxx10000011), т.е. установлены биты 0, 1 и 7, а значение битов 8-15 – неопределённо.

Для выбора IRC8M в качестве источника системного тактирования необходимо:
• Сбросить биты SCS регистра CFG0,
• Установить биты IRC8MADJ4 и IRC8MEN регистра CTL и дождаться установки флага стабилизации IRC8MSTB.

Bare metal
/* select IRC8M as CK_SYS source */
RCU->CFG0 = 0;
while(RCU->CFG0);
/* enable oscillator */ 
RCU->CTL = RCU_CTL_IRC8MADJ_4 | RCU_CTL_IRC8MEN;
while(!(RCU->CTL & RCU_CTL_IRC8MSTB)); 


Driver
/* select IRC8M as CK_SYS source */
rcu_system_clock_source_config(RCU_CKSYSSRC_IRC8M);
/* enable oscillator */
rcu_osci_on(RCU_IRC8M);
rcu_osci_stab_wait(RCU_IRC8M);


Для выбора HXTAL в качестве источника системного тактирования необходимо:
• Установить бит SCS0 регистра CFG0,
• Установить бит HXTALEN регистра CTL и дождаться установки флага стабилизации HXTALSTB,
• Сбросить установленный по умолчанию бит IRC8MEN регистра CTL.

Bare metal
/* select HXTAL as CK_SYS source */
RCU->CFG0 = RCU_CFG0_SCS_0;
/* enable oscillator */
RCU->CTL |= RCU_CTL_HXTALEN;
while(!(RCU->CTL & RCU_CTL_HXTALSTB));   
/* disable IRC8MEN */
RCU->CTL &= ~RCU_CTL_IRC8MEN;


Driver
/* select HXTAL as CK_SYS source */
rcu_system_clock_source_config(RCU_CKSYSSRC_HXTAL);
/* enable oscillator */
rcu_osci_on(RCU_HXTAL);
rcu_osci_stab_wait(RCU_HXTAL);


Для выбора PLL от IRC8M/2 в качестве источника системного тактирования необходимо:
• Установить бит SCS1 регистра CFG0,
• Записать требуемое значение в биты PLLMF регистра CFG0 (например, 0b1000 для умножения на 10),
• Установить бит IRC8MEN регистра CTL и дождаться установки флага стабилизации IRC8MSTB,
• Установить бит PLLEN регистра CTL и дождаться установки флага стабилизации PLLSTB.

Bare metal
/* select PLL as CK_SYS source */
RCU->CFG0 = RCU_CFG0_SCS_1;
/* multiply by 10 */
RCU->CFG0 |= RCU_CFG0_PLLMF_3;
/* enable oscillator */ 
RCU->CTL = RCU_CTL_IRC8MEN;
while(!(RCU->CTL & RCU_CTL_IRC8MSTB)); 
/* enable PLL */
RCU->CTL |= RCU_CTL_PLLEN;
while(!(RCU->CTL & RCU_CTL_PLLSTB));


Driver
/* select PLL as CK_SYS source */
rcu_system_clock_source_config(RCU_CKSYSSRC_PLL);
/* select IRC8M/2 as oscillator */
/* multiply by 10 */  
rcu_pll_config(RCU_PLLSRC_IRC8M_DIV2, RCU_PLL_MUL10);
/* enable oscillator */
rcu_osci_on(RCU_PLL_CK);
rcu_osci_stab_wait(RCU_PLL_CK);


Для выбора PLL от HXTAL в качестве источника системного тактирования необходимо:
• Установить бит SCS1 регистра CFG0,
• Установить бит PLLSEL регистра CFG0,
• Записать требуемое значение в биты PLLMF регистра CFG0 (например, 0b1000 для умножения на 10),
• Установить бит HXTALEN регистра CTL и дождаться установки флага стабилизации HXTALSTB,
• Сбросить установленный по умолчанию бит IRC8MEN регистра CTL.
• Установить бит PLLEN регистра CTL и дождаться установки флага стабилизации PLLSTB.

Bare metal
/* select PLL as CK_SYS source */
RCU->CFG0 = RCU_CFG0_SCS_1;
/* select HXTAL as oscillator */
RCU->CFG0 |= RCU_CFG0_PLLSEL;
/* multiply by 10 */
RCU->CFG0 |= RCU_CFG0_PLLMF_3;  
/* enable oscillator */
RCU->CTL = RCU_CTL_HXTALEN;
while(!(RCU->CTL & RCU_CTL_HXTALSTB));
/* disable IRC8MEN */
RCU->CTL &= ~RCU_CTL_IRC8MEN;
/* enable PLL */
RCU->CTL |= RCU_CTL_PLLEN;
while(!(RCU->CTL & RCU_CTL_PLLSTB));


Driver
/* select PLL as CK_SYS source */
rcu_system_clock_source_config(RCU_CKSYSSRC_PLL);
/* select HXTAL as oscillator */
/* multiply by 10 */    
rcu_pll_config(RCU_PLLPRESRC_HXTAL, RCU_PLL_MUL10);
/* enable oscillator */
rcu_osci_on(RCU_PLL_CK);
rcu_osci_stab_wait(RCU_PLL_CK);


Файлы

🎁code.zip  382.32 Kb ⇣ 8

Продолжение следует!

Камрад, рассмотри датагорские рекомендации

🌼 Полезные и проверенные железяки, можно брать

Опробовано в лаборатории редакции или читателями.




 

Читательское голосование

Нравится

Статью одобрили 3 читателя.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.
 

Поделись с друзьями!

 

 

Связанные материалы

 

Схема на Датагоре. Новая статья Ассемблер для микроконтроллера с нуля. Часть 4. Система адресации памяти, назначение выводов, тактирование и прерывания МК... Привет датагорцам! Сегодня мы остановимся на следующих вопросах касательно рассматриваемых нами...
Схема на Датагоре. Новая статья Ассемблер для микроконтроллера с нуля. Часть 5. Периферия МК.... Сегодня мы рассмотрим работу следующих модулей периферии: • порта ввода-вывода, • таймера •...
Схема на Датагоре. Новая статья Программирование микроконтроллера GigaDevice GD32F303CCT6 на Си. Часть 1... Всем доброго дня! Перед вами — руководство по программированию в GCC микроконтроллера GD32F303CCT6...
Схема на Датагоре. Новая статья Рулим китайским FM-радиомодулем на TEA5767. Датагорская библиотека на C... Приобрел я на пробу радио-модуль на базе микросхемы TEA5767 . Модуль представляет собой...
Схема на Датагоре. Новая статья Программирование микроконтроллеров на языке C. Часть 4... Доброго дня всем жителям и гостям Датагор.ру! Сегодня мы средствами С реализуем проект из моей...
Схема на Датагоре. Новая статья Ассемблер для микроконтроллера с нуля. Часть 6. Протоколы обмена данными I2C и SPI... В проекте из предыдущей части нашей ассемблерной эпопеи мы подключали к микроконтроллеру светодиод...
Схема на Датагоре. Новая статья Ассемблер для микроконтроллера с нуля. Часть 1. Начало пути... Приветствую всех сограждан и читателей журнала Датагор! Пользуясь кучей времени, предоставленной...
Схема на Датагоре. Новая статья Ассемблер для микроконтроллера с нуля. Часть 2. Шаблонные файлы и инструкции МК... В предыдущей части статьи мы провели подготовительную работу и вкратце разобрали принципы работы...
Схема на Датагоре. Новая статья Ассемблер для микроконтроллера с нуля. Часть 7. Компиляция, отладка, загрузка... Привет датагорцам и гостям нашего кибер-города! В предыдущих частях материала по Ассемблеру...
Схема на Датагоре. Новая статья Программирование микроконтроллеров на языке C. Часть 2... Добрый день, уважаемые камрады-датагорцы! Сегодня, рассмотрев некоторые общие моменты, мы займёмся...
Схема на Датагоре. Новая статья Аудио ЦАП DAC. Поделки начинающего цапостроителя. Часть 8. Обзор цифровых ресиверов DIR9001, WM8805, AK4113, PCM2707 (Обновлено)... Чем больше времени тратишь на разработку, тем меньше на сборку и отладку. Жизненное наблюдение. На...
Схема на Датагоре. Новая статья Программирование микроконтроллеров в AtmelStudio 6. Часть 2. Одна программа на разных языках.... Для радиолюбителей, которые до определенного времени не использовали микроконтроллеры в своих...
 

Комментарии, вопросы, ответы, дополнения, отзывы

 

Добавить комментарий, вопрос, отзыв 💬

Камрады, будьте дружелюбны, соблюдайте правила!

  • Смайлы и люди
    Животные и природа
    Еда и напитки
    Активность
    Путешествия и места
    Предметы
    Символы
    Флаги
 
 
В начало | Зарегистрироваться | Заказать наши киты почтой