Спойлер
// ----------------------------------------------------------------------------// Учебный проект по STM8
// Урок-1.1 "Hello, world? No! Hello LED!!!"
// Мигание светодиодом с использованием программной задержки
// Автор: Eugeny Monastyrev
// Плата: STM8 Discovery, CLK=16MHz
//
// main.c подходит для любого компилятора IAR, Cosmic, Raisonance
// с использованием определений из библиотеки STMicroelectronics
// для компиляции требуются файлы stm8s.h и stm8s_type.h из библиотеки.
// В файле stm8s.h найдите и закомментируйте #define USE_STDPERIPH_DRIVER
// ----------------------------------------------------------------------------
#include "stm8s.h"
#define LED_BIT 0 //на Discovery светодиод подключен на PD0, активный уровень - 0
void main( void )
{
long i;
//Инициализируем CLK
CLK->ECKR|=CLK_ECKR_HSEEN; //Разрешаем работу генератора с внешним кварцем (HSEEN)
CLK->SWCR|=CLK_SWCR_SWEN; //Разрешаем автопереключение источника Clock при неисправности генератора
CLK->SWR=0xB4; //Включаем clock от кварцевого генератора (HSE)
CLK->CKDIVR=0; //Делители частоты внутреннего и внешнего генератора на 1 - частота ядра максимальная
while(CLK->CMSR!=0xB4); //Ждем стабилизации частоты
CLK->CSSR|=CLK_CSSR_CSSEN; //Разрешаем автопереключение источника Clock на внутренний при неисправности генератора
//Инициализируем GPIO
GPIOD->DDR|=1<<LED_BIT; //PD0 - на вывод
GPIOD->CR1&=~(1<<LED_BIT); //PD0 - открытый сток
GPIOD->CR2&=~(1<<LED_BIT); //PD0 - ограничение скорости отключено
//Собственно мигание
while(1)
{
GPIOD->ODR^=(1<<LED_BIT); //Переключим светодиод
for(i=0;i<200000;i++) //Подождем...
{
asm("nop"); //для исключения влияния оптимизации
}
}
}


