даRusikOk писал(а):тактирование от внутреннего источника?
в реальном железе дебаг - все работает:
г-код на всякий
Спойлер
Код: Выделить всё
#include "stm8s.h"
#define LED_GPIO_ODR GPIOA->ODR
#define LED ((uint8_t)(1<<3))
__IO uint16_t ms = 0;
INTERRUPT_HANDLER(TIM2_UPD_OVF_IRQHandler, 13) // Прерывание таймера
{
TIM2->SR1 &= ~TIM2_SR1_UIF; // Очистка флага прерывания по обновлению
if(ms != 0) ms--;
}
void delay_ms(uint16_t ms16_t) // Задержка мс
{
ms = ms16_t;
while(ms);
}
void main( void )
{
CLK->CKDIVR = 0; //Делитель частоты = 1
GPIOA->DDR |= (uint8_t) (1<<3); // Ножка конфигурируется на вывод
GPIOA->CR1 |= (uint8_t) (1<<3); //Выход типа Push-pull
//GPIOA->CR2 |= (uint8_t) (1<<3); // Скорость переключения - до 10 МГц.
TIM2->SR1 &= ~TIM2_SR1_UIF; // Очистка флага прерывания по обновлению
TIM2->PSCR = 0x06; // //Предделитель на 2^6=64 16000000/64 = 250000 Hz
TIM2->ARRH = 0; ///Значение перезагрузки 250000/250 = 1000 Гц
TIM2->ARRL = 250;
TIM2->IER |= TIM2_IER_UIE; // Прерывание по обновлению счетного регистра азрешено
TIM2->CR1 |= TIM2_CR1_URS | TIM2_CR1_CEN ; // Прерывание по переполнению разрешено и таймер запущен
asm("rim");
while(1)
{
LED_GPIO_ODR |= LED;
delay_ms(500);
LED_GPIO_ODR &= ~LED;
delay_ms(500);
}
}
проверил на живом светодиоде - блинкает



