Top.Mail.Ru
Уведомления
Очистить все

STM8S103F3 не запустить таймер в отладчике ST Visual Develop

(@yuriy)
Level 3

Пока ожидается плата с STM8S103F3 пробую освоить, используя эмулятор ST Visual Develop. Подключаю TIM1, в эмуляторе вижу, что необходимые значения предделителя, порога перезапуска, разрешение на работу прописываются, но движения самого таймера нет (Counter не меняется), хотя значение Count_Otl меняется, что говорит о работающем генераторе. Испробовал кучу вариантов и по своему разумению и из инета, но результат пока никакой - чего-то не учитываю - чего? Один из вариантов программы такой:

#include "stm8s.h"
#include "math.h"
#include "stm8s_clk.h"
#include "stm8s_tim1.h"
uint16_t Counter = 0;
uint16_t Count_Otl = 0;
 
main()
{ 
CLK_DeInit();  
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1 | CLK_PRESCALER_CPUDIV1);  // 16 мГц
  //TIM1_InternalClockConfig();
  //TIM1_TimeBaseInit(25 - 1, TIM1_COUNTERMODE_UP, 8 - 1, 0);
  TIM1_TimeBaseInit(25 - 1, TIM1_COUNTERMODE_UP, 65536 - 1, 0);
  //TIM1_SetCounter(0);
  CLK->SWCR = CLK_SWCR_SWEN;    // Включаем тактирование
  TIM1_Cmd(ENABLE);
 
while (1)
  {
    Counter = TIM1_GetCounter();
    Count_Otl++;   
  }
}

Цитата
Создатель темы Размещено : 15.01.2026 17:10
Aveal
(@aveal)
Top level Admin

Добрый день, не помню детально по STM8, такой вариант набросал, будет собираться и работать?

#include "stm8s.h"
#include "stm8s_clk.h"
#include "stm8s_tim1.h"

uint16_t Counter = 0;

main()
{ 
    CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
    CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1, ENABLE);
        
    TIM1_DeInit();
    TIM1_TimeBaseInit(24,
                      TIM1_COUNTERMODE_UP, 
                      65535,
                      0);
                      
    TIM1_GenerateEvent(TIM1_EVENTSOURCE_UPDATE);
    TIM1_ClearFlag(TIM1_FLAG_UPDATE);
    TIM1_Cmd(ENABLE);
    
    while (1)
    {
        Counter = TIM1_GetCounter();
    }
}

 


ОтветитьЦитата
Размещено : 15.01.2026 18:08
(@yuriy)
Level 3

Спасибо за отклик, не прокатило. Может, что-то надо настроить в среде, хотя регистры прописываются while (1) крутится.


ОтветитьЦитата
Создатель темы Размещено : 15.01.2026 18:25
Aveal
(@aveal)
Top level Admin

@yuriy А регистр CNT сам эмулятор тоже нулевым отображает?


ОтветитьЦитата
Размещено : 15.01.2026 18:36
(@yuriy)
Level 3

Вот интересно. Какое бы значение перезапуска в вашем варианте не поставил бы, значение  CNTR после пуска всегда 0. Но, если за  Вашим кодом ставлю строку TIM1_SetCounter(10);, то после запуска значение CNTR адекватное, но как и первом случае не меняется.


ОтветитьЦитата
Создатель темы Размещено : 15.01.2026 19:00
Поделиться:
Обзор конфиденциальности

На этом сайте используются файлы cookie, что позволяет нам обеспечить наилучшее качество обслуживания пользователей. Информация о файлах cookie хранится в вашем браузере и выполняет такие функции, как распознавание вас при возвращении на наш сайт и помощь нашей команде в понимании того, какие разделы сайта вы считаете наиболее интересными и полезными.