Easyelectronics.ru

Электроника для всех
Текущее время: 18 май 2022, 09:11

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: stm8s105 счетчик внешних импульсов
СообщениеДобавлено: 20 май 2011, 12:12 
Только пришел

Зарегистрирован: 03 дек 2010, 14:55
Сообщения: 18
Откуда: StRussa
Здравствуйте!
Пытаюсь настроить таймер Tim1 на счет внешних импульсов по входу ETR.
По RM0016 конфигурирую таймер
Код:
    TIM1_ETR_ETF=0;
    TIM1_ETR_ETPS=1;
    TIM1_ETR_ETP=0;
    TIM1_ETR_ECE=1;
    TIM1_IER = MASK_TIM1_IER_UIE;
    TIM1_CR1_CEN=1;


подаю сигнал на ногу PB3, но значение счетчика не изменяется...
Подскажите, как правильно настроить этот таймер на внешний сигнал?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm8s105 счетчик внешних импульсов
СообщениеДобавлено: 20 май 2011, 13:17 
Старожил
Аватара пользователя

Зарегистрирован: 05 сен 2010, 07:23
Сообщения: 575
Откуда: Томск
мало, опишите подробнее как вход сконфигурировали, или весь код приведите...
а на чем пишите? странные какие-то конструкции?
"TIM1_ETR_ETPS=1;" вместо "TIM1->ETR &= ~TIM1_ETR_ETPS; TIM1->ETR |= 1 << 4"

_________________
ZiBlog.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm8s105 счетчик внешних импульсов
СообщениеДобавлено: 20 май 2011, 13:48 
Только пришел

Зарегистрирован: 03 дек 2010, 14:55
Сообщения: 18
Откуда: StRussa
собственно вот весь код
пишу в IAR

Код:
#include "iostm8s105c6.h"
#include "intrinsics.h" // Здесь описана функция __enable_interrupt ().

#define SetLED0 asm("bset 0x500F,#0")
#define ResLED0 asm("bres 0x500F,#0")
#define InvLED0 asm("bcpl 0x500F,#0")

int main( void )
{
    //Инициализируем CLK
    CLK_ECKR_bit.HSEEN=1;   // Разрешаем работу генератора с внешним кварцем (HSEEN)
    CLK_SWCR_bit.SWEN=1;    // Разрешаем переключение генераторов;
    CLK_SWR=0xB4;           // Выбираем clock от кварцевого генератора (HSE)
    CLK_CKDIVR=0;           // Делители частоты внутреннего и внешнего генератора на 1 - частота ядра максимальная
   
    while(CLK_CMSR!=0xB4);  // Ждем стабилизации частоты
   
    CLK_CSSR_bit.CSSEN=1;   // Разрешаем автопереключение источника Clock при неисправности генератора
   
     //Инициализируем GPIO. На Discovery светодиод подключен на PD0, активный уровень - 0
    PD_DDR_bit.DDR0=1;     // PD0 - на вывод.
    PD_CR1_bit.C10=0;      // PD0 - открытый сток.
    PD_CR2_bit.C20=0;      // PD0 - ограничение скорости отключено.
   
    TIM1_ETR_ETF=0;
    TIM1_ETR_ETPS=1;
    TIM1_ETR_ETP=0;
    TIM1_ETR_ECE=1;
   
    TIM1_IER = MASK_TIM1_IER_UIE;
    TIM1_CR1_CEN=1;
   
   
    // Разрешить выводы TX, RX.   
   UART2_CR2 |= (MASK_UART2_CR2_REN)|(MASK_UART2_CR2_TEN);
      UART2_CR3_STOP=0;
      UART2_CR1 |= (MASK_UART2_CR1_PCEN)|(MASK_UART2_CR1_PS);
   UART2_CR1_M =0;
   UART2_CR1_PS =0;
    UART2_BRR2 = 0x1B;
   UART2_BRR1 = 0xA0;
   
   UART2_CR2_RIEN=1; // Разрешить прерывание по RXE.
   //UART2_CR2_TIEN=1;  // Разрешить прерывание по TXE. Начало передачи.
   __enable_interrupt(); //Разрешаем прерывания
   
   
    while(1)
    {
    }   
}

#pragma vector=UART2_R_OR_vector
     __interrupt void UART2_RXE(void)
     {
       unsigned char t;
       
       t=UART2_DR;
       while (!(UART2_SR_TXE)) {} // Ожидать освобождения буфера TDR.
       UART2_DR=TIM1_CNTRH ;
       while (!(UART2_SR_TXE)) {} // Ожидать освобождения буфера TDR.
       UART2_DR=TIM1_CNTRL;
           
     }

// Вектор прерывания по обновлению или переполнению Таймера1
#pragma vector = TIM1_OVR_UIF_vector
__interrupt void TIM1_OVR_UIF_handler(void)
{
  // Проверка, что же вызвало прерывание
  if (TIM1_SR1_UIF==1)
  {
    TIM1_SR1_UIF = 0;             // Очистка флага прерывания по обновлению
    InvLED0;

  } 
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm8s105 счетчик внешних импульсов
СообщениеДобавлено: 20 май 2011, 14:00 
Старожил
Аватара пользователя

Зарегистрирован: 05 сен 2010, 07:23
Сообщения: 575
Откуда: Томск
не вижу где настраиваете линию для ETR?
тактирование самого таймера не разрешено? или я не просмотрел
ETR наверное ремапить ещё нужно.

_________________
ZiBlog.RU


Последний раз редактировалось Zheleznjakov 20 май 2011, 14:03, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm8s105 счетчик внешних импульсов
СообщениеДобавлено: 20 май 2011, 14:02 
Только пришел

Зарегистрирован: 03 дек 2010, 14:55
Сообщения: 18
Откуда: StRussa
Вот с этим моментом как раз не совсем разобрался...
Необходимо PB3 настроить на вход?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm8s105 счетчик внешних импульсов
СообщениеДобавлено: 20 май 2011, 14:04 
Старожил
Аватара пользователя

Зарегистрирован: 05 сен 2010, 07:23
Сообщения: 575
Откуда: Томск
его нужно ремапить
не совсем то , только для понятия принципа
http://ziblog.ru/2011/01/28/stm8l-tsifr ... interface/
хотя я с S-кой почти не работал

_________________
ZiBlog.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm8s105 счетчик внешних импульсов
СообщениеДобавлено: 20 май 2011, 16:35 
Только пришел

Зарегистрирован: 03 дек 2010, 14:55
Сообщения: 18
Откуда: StRussa
думаю что в L что в S принцип один...
нашел, чтобы переназначить порт на ETR необходимо выставить 5-ый бит в регистре OPT2 и сбросить его же в регистре NOPT2.
Но перед этим надо еще установить бит OPT в регистре FLASH_CR2 и сбросить NOPT в FLASH_NCR2.
Правильно я понимаю? или необходимы еще какие-то действия по записи бит опций?
добавил в программу следующий код, но биты в регистрах OPT2 и NOPT2 не изменяются
Код:
    FLASH_CR2_OPT=1;
    FLASH_NCR2_NOPT=0;
    OPT2_5=0x20;
    NOPT2_5=0xDF;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm8s105 счетчик внешних импульсов
СообщениеДобавлено: 20 май 2011, 17:55 
Старожил
Аватара пользователя

Зарегистрирован: 05 сен 2010, 07:23
Сообщения: 575
Откуда: Томск
как я понял вам нужен порт PB3, а для его выбора нужно установить бит AFR5 (OPT2), и переключить линию ввода вывода на вход.

_________________
ZiBlog.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm8s105 счетчик внешних импульсов
СообщениеДобавлено: 21 май 2011, 00:08 
Только пришел

Зарегистрирован: 03 дек 2010, 14:55
Сообщения: 18
Откуда: StRussa
Zheleznjakov писал(а):
как я понял вам нужен порт PB3, а для его выбора нужно установить бит AFR5 (OPT2), и переключить линию ввода вывода на вход.

то что нужно установит AFR5 я разобрался, но не совсем разобрался порядок его установки, после приведенного мной кода(на один пост выше), бит в регистре не изменяется (смотрю отладчиком ИАРа)...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB