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

Похожие статьи:


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)
{
 /* Infinite loop */
 GPIO_Init(GPIOC, GPIO_Pin_7, GPIO_Mode_Out_PP_High_Slow);   // настройка PC7 на режим пуш-пулл   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();
   }
}

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

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

Теги:

Опубликована: 0 0
Я собрал 0 1
x

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

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

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

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

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

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

Программатор Pickit3
Программатор Pickit3
Солнечная панель 10Вт 12В поликристаллическая USB осциллограф DSO-2090
вверх