Пока ожидается плата с 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++;
}
}
Добрый день, не помню детально по 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();
}
}
Спасибо за отклик, не прокатило. Может, что-то надо настроить в среде, хотя регистры прописываются while (1) крутится.
Вот интересно. Какое бы значение перезапуска в вашем варианте не поставил бы, значение CNTR после пуска всегда 0. Но, если за Вашим кодом ставлю строку TIM1_SetCounter(10);, то после запуска значение CNTR адекватное, но как и первом случае не меняется.