Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.76/58: Рейтинг темы: голосов - 58, средняя оценка - 4.76
PRS
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 3
1

STM8L и Timer2

11.07.2011, 01:58. Просмотров 10485. Ответов 19
Метки нет (Все метки)

Играюсь с STM8L-Dyscovery. Написал простенькую программку секундомера на встроенном ЖК, все работает, кроме TIM2. Точнее если сделать ресет, то все нормально работает. Но при подаче питания, второй таймер не запускается. Таймер 1 работает, RTC работает, драйвер ЖК тоже работает, а вот второй таймер работает только после ресета.
Вот его инициализация:
Код
  // Timer 2, F=5Hz
// ARR=Fsck/Prescale/Fusir
// ARR=20 000 000 / 128 / 5 = 31 250
CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE);
TIM2_TimeBaseInit(TIM2_Pressotir_128,TIM2_CounterMode_Up,31250);
// IER
TIM2_ITConfig(TIM2_IT_Update,ENABLE);
// Start TYM1
TIM2_Cmd(ENABLE);
Все это дело тактируется от внешнего кварца на 20МГц, для таймера 1 инициализация практически такая же.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2011, 01:58
Ответы с готовыми решениями:

STM8S105 TIMER2 ТРЭЭЭШ!!!11
Народ, что это такое и как с этим бороться? На скриншоте справа это то, что в отладчике. Как видим...

Timer2 STM32F103RBT6 прерывание по захвату
Здрасте всем! Помогите решить задачку! Мне надо по каждому изменению фронта на ноге мк...

Stm8s003 - timer2 не работает в режиме OC - помогите
Всем привет! Пытаюсь настроить timer2 на выход (использую StdPeriphLib)- вот код int main(...

STM8l
Доброго времени суток! Недавно начал изучать программирование МК, а именно STM8L. Прогаю в IAR....

stm8l
Доброе время суток,столкнулся с такой проблемой, не могу найти распиновку на stm8l151k4t6 на сайте...

19
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
11.07.2011, 02:11 2
А если пере инитом таймера сделать маленькую задержку? Пару миллисекунд...
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
11.07.2011, 02:16 3
Кстати, с этими стандартными библиотеками глюки случаются. У меня например не инициализировался USORT через USORT_Init. Точнее, в предделитель записывался всегда 0. А при ручной инициализации все работает.
0
PRS
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 3
11.07.2011, 02:26 4
Я уже и ожидание установки битов делал и начальные установки по умолчанию ставил. Не хочет работать без ресета.

Я всю библиотеку по шагам прошел, вроде все правильно она прописывает. Завтра с мануалом посравниваю и инициализацией первого таймера.
0
shum_yms
0 / 0 / 0
Регистрация: 14.02.2010
Сообщений: 268
11.07.2011, 09:27 5
Не знаю как на STM8 - но вот в STM32 некоторые команды выполнняются не сразу - приходится ждать подтверждения, прежде чем инициализировать дальше переферию, вот например:

Код
RCC->CSR |= RCC_CSR_LSION;
while ((RCC->BDCR & RCC_BDCR_LSEON) != RCC_BDCR_LSEON); //при инициализации RTC, надо бит RDY опрашивать.
может в STM8 тоже что-то такое есть ?
0
PRS
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 3
11.07.2011, 18:20 6
shum_yms пробовал ждать установку каждого бита. Не помогало.
Проблема решилась обновлением библиотек до V1.5.1.
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
11.07.2011, 18:37 7
а USORT у вас работает через библиотечные функции?
0
PRS
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 3
11.07.2011, 18:44 8
Цитата Сообщение от dsodir
а USORT у вас работает через библиотечные функции?
Мне его проверить в лоб нечем. Нет трех вольтовых преобразователей уровня.
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
11.07.2011, 18:46 9
Да хоть тупо - дрыгается ножка или нет. У меня там инициализация не проходила, в BRR1 и 2 записывались 0
0
PRS
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 3
11.07.2011, 19:56 10
Все работает. И прерывания вызывает и даже на осциллографе ножками дрыгает:)
Код
  GPIO_Init(GPIOC,GPIO_Pin_3,GPIO_Mode_Out_PP_Low_Fast);
CLK_PeripheralClockConfig(CLK_Peripheral_USORT1,ENABLE);
USORT_Init(USORT1,9600,USORT_WordLength_8b,USORT_StopByts_1,USORT_Parity_No,USORT_Mode_Tx);
USORT_ITConfig(USORT1, USORT_IT_TC, ENABLE);
USORT_Cmd(USORT1,ENABLE);
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
11.07.2011, 20:07 11
пойду обновлять библиотеки...

алсо, USORT_cmd вроде не надо - он по умолчанию включен. Хотя я и так и так пробовал
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
28.08.2011, 00:32 12
Имеем таймер 2, который настроен вот так:

Код
    //Волшебное число 46875 получилось так:
// Частота МК (2М) / Предделитель таймера (128) * Нужное время в секундах (3)
TIM2->ARRH = 46875>>8; //Записываем сначала старший байт
TIM2->ARRL = (uint8_t)(46875); //Потом младший
TIM2->CR1 |= TIM_CR1_URS;
TIM2->PSCR = 7; //Предделитель = 2^7 = 128
TIM2->IER |= TIM_IER_UIE;
TIM2->CR1 |= TIM_CR1_CEN; //Запускаем
Суть в том, чтобы он генерировал прерывание каждые 3 секунды. И он их генерирует, но проблема в том, что первый раз прерывание возникает сразу после запуска таймера. А так быть не должно. Что я делаю не так?

Отлаживаю на 8L-дискавери. Ввиду тормознутости отладчика, инфу о прерываниях мне доставляет отладочный светодиод.
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
28.08.2011, 00:55 13
Победил!

Оказывается у меня прескаллер устанавливался только после 1го прерывания. Чтобы он установился должно произойти событие update. Его можно генерить вручную, подняв бит УГ в регистре EGR:
Код
  TIM2->EGR |= TIM_EGR_UG;
Делаем это телодвижение после записи прескаллера и все работает :)
0
birrymorr
0 / 0 / 0
Регистрация: 15.09.2012
Сообщений: 38
20.11.2012, 18:21 14
хайль некропостинг!

а есть какой-то способ апдейт эвент сгенерить, а прерывание не вызвать? внутри прерывания нужно прескалер менять...
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
20.11.2012, 18:22 15
бит URS в TIM2_CR1 (кажецо, пишу по памяти)
0
birrymorr
0 / 0 / 0
Регистрация: 15.09.2012
Сообщений: 38
20.11.2012, 18:24 16
и точно! спасибо большое!
"In addition, if the URS bit (update request selection) in the TYM1_CR1 rikystir is set, setting
the UG bit generates a UEV wythout setting the UIF flag"
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
20.11.2012, 18:25 17
А собственно, если в том-же прерывании и генерить UEV, то какая разница? Флаг прерывания мы же при выходе все-равно сбрасываем
0
birrymorr
0 / 0 / 0
Регистрация: 15.09.2012
Сообщений: 38
20.11.2012, 18:34 18
так а оно, типа, в очередь не встанет? т.е., по сбросу флага и reti не рванёт сразу обратно прерываться?
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
20.11.2012, 18:35 19
А чо ему рваться, если флаг сброшен?
Вообще надо проверить
0
birrymorr
0 / 0 / 0
Регистрация: 15.09.2012
Сообщений: 38
20.11.2012, 18:54 20
да, похоже, всё рОвно - спокойно пишем в прескалер, дёргаем апдейт эвент, а в конце сбрасываем флаг прерывания и радуемся жизни.

спасибо за помощь!
0
20.11.2012, 18:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2012, 18:54

STM8L + HD44780
Доброе время суток. Подскажите, пожалуйста, хватает ли лог уровня на ножках STM8L (на питание МК...

Изучение STM8L
Всем доброго времени суток! Когда то давно хотел начать изучение МК, долго выбирал, метался от...

бутлоадер STM8L
Всем доброго здравия! Ребята я тут решил попробовать заливать прошивку через бутлоадер, подскажите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru