Главная » Микроконтроллеры
Призовой фонд
на август 2019 г.
1. 1000 руб
Паяльник
2. Тестер компонентов MG328
Паяльник
3. 200 руб.
От пользователей

STM8. Урок 2. Тактирование контроллера

Введение

Контроллеры STM8 имеют собственную систему тактирования периферии. Это сделано с целью повышения энергосбережения. Я считаю, главным отличием от STM32 является отсутствие в контроллере STM8 PPL (ФАПЧ), в контроллере присутствует только делитель тактового сигнала. Это позволяет программно понижать тактовую частоту работы ядра и периферии ниже частоты внутреннего или внешнего кварца, тем самым уменьшая энергопотребление. А когда необходимо что-то быстро рассчитать, можно снова поднять частоту ядра.

Хочу еще раз подчеркнуть ядро и настройки в регистрах специально проектировались под язык программирования СИ. Язык Си был в начале спроектирован для CISC архитектуры процессора и организации памяти фон Неймана. В Справочном пособии (RM031) на первых страницах описывается именно такая организация процессора и памяти. Использование SPL библиотеки я считаю обязательным при программировании STM8. Настройка отдельных битов, регистров является приведет к многочисленным ошибкам. Кроме того, SPL библиотека позволяет организовать слой абстракции для быстрой и правильной настройки периферии.

Настройка контроллера должна начинаться с тактирования. С частотой тактирования связанна практически вся периферия, за исключением может быть только SPI интерфейса, DMA, ADC. Забыл сказать, чтобы включить любую периферию на нее надо в начале подать тактирование, иначе работать не будет. 

1. Схема тактирования

Я не буду приводить схему тактирования приведенную в RM031, я приведу свою интерпритационную схему тактирования для упрощения понимания настройки.В ней я не буду рассматривать тактирование некоторых дополнительных блоков ЖК-экран, часов реального времени, бипера, сторожевого таймера. На мой взгляд этого только запутает читателя. Если понять принцип, это в этих нюансах можно будет разобраться самостоятельно. Если будет нужно, может быть и сам потом напишу статью про них.

И так начнем. Существуют 4 источника тактового сигнала для тактирования ядра и периферии (почти всей).

  • Внутренний высокочастотный источник RC, 16 МГц
  • Внешний высокочастотный источник
  • Внутренний низкочастотный источник 38кГц
  • Внешний низкочастотный источник (обычно 32768 Гц)

Внешние источники могут иметь следующие настройки:

  • отключены 
  • работают от кварцевого резонатора
  • работают от внешнего сигнала

Внутренние источники могут быть только включены или отключены. По-умолчанию Внутренние источники включены. 

При загрузке МК тактирование ядра осуществляется от Внутреннего выскочастотного генератора, через предделитель на 8, таким образом ядро работает на 2МГц.

Для смены источника тактирования необходимо:

  • включить Необходимый режим работы внешнего источника (для внутреннего источника не требуется)
  • разрешить Смену источника тактирования
  • выбрать настроенный источник тактирования
  • запретить Смену источника тактирования (для безопасности)

Все. 3 функции, 4 вызова и все настроено. Для безопасности можно включить Модуль слежения за внешним тактовым сигналом. При пропадании внешнего сигнала с HSE МК автоматически переключиться на Внутренний HSI.

Выбор предделителя системного сигнала можно осуществлять в любое время.

Тактовый сигнал от любого генератора можно подавать на ножку CCO (PC4). При этом частоту можно делить, т.о. функция имеет два параметра: источник сигнала и делитель.

Любую периферию необходимо затактировать. Для этого функции необходимо  два параметра: название периферии и состояние тактирования (вкл/откл).

В библиотеке SPL еще много функций. Я считаю, для ознакомления и пониманию работы этого достаточно.

Практическая часть

Задача. Настроить мигание светодиода от Внутреннего низкочастотного источника (LSI) с предделителем равным 1 (Sys=38kHz), и Внутреннего высокочастотного источника с предделителем равным 128 (125kHz). Через 10 миганий светодиода PC7 производить смену источника тактирования.

Создадим и настроим проект согласно уроку 1. Название проекта sysclk.

Подключим исходники файлов для управления тактированием и настройкой частоты:  

  • stm8l15x_clk.c
  • stm8l15x_gpio.c

Функции и структуру GPIO рассмотрим в следующем уроке.

/* Includes ------------------------------------------------------------------*/
#include "stm8l15x.h"

/** @addtogroup STM8L15x_StdPeriph_Template
 * @{
*/

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/

void delay_prog(void)
{
uint16_t i2;
for(i2=0; i2<0xFFF; i2++);
}
void toggle_led(void)
{
uint8_t i;
for(i=0; i<10; i++)
   {
   GPIO_ToggleBits(GPIOC, GPIO_Pin_7);
   delay_prog();
   }
}
/* Private functions ---------------------------------------------------------*/

/**
 * @brief  Main program.
 * @param  None
 * @retval None
 */
   void main(void)
{
  GPIO_Init(GPIOC, GPIO_Pin_7, GPIO_Mode_Out_PP_High_Slow);   // настройка PC7 на режим пуш-пулл  //--------------------
/* Infinite loop */
while (1)
 {
   // Переключаем тактовый генератор на высокоскоростной источник
  CLK_SYSCLKSourceSwitchCmd(ENABLE); // разрешаем изменение тактирования
   CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI); //Выбор источн. тактирования
   CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_128); // Предделитель
   CLK_SYSCLKSourceSwitchCmd(DISABLE); // Запрет изменения ист. тактиров   //-----------------------------------------------------------
   toggle_led(); // переключаем светодиод 10 раз
   //------------------------------------------------------------
   // Переключаем тактовый генератор на низкоскоростной источник
   CLK_SYSCLKSourceSwitchCmd(ENABLE);
   CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSI);
   CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
   CLK_SYSCLKSourceSwitchCmd(DISABLE);
   //-----------------------------------------------------------
   toggle_led();
   }
}

Откомпилированный проект прикрепляю к уроку.

Прикрепленные файлы:

Теги:

Опубликована: Изменена: 20.10.2018 0 0
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 4.9 Проголосовало: 1 чел.

Комментарии (3) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
smack #
Наверно подразумевалось RM0031?
Ответить
0

[Автор]
Aleksey1408 #
Да, все верно. Если будут пожелания или что-то не ясно пишите.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Мультиметр Mastech MS8268 Тестер ESR, полупроводников, резисторов, индуктивностей
вверх