Перейти к содержанию
    

Без прерываний, STM32f105

Привет всем) Такой вопрос. Возможно ли БЕЗ прерываний сделать следующее:

 

у меня есть пин, на котором периодически проходят импульсы,

По подъему нужно, чтобы включался таймер.

 

Но прерывания нельзя использовать. Читала про синхронизацию таймеров и источник их тактирования.

Но не могу вдуплить, как именно не счетчик дергать у таймера по импульсам канала, а включить его просто.

 

Может, кто посоветует, куда копать хотя бы.

 

МК - STM32f105

Изменено пользователем haker_fox
Уточнил название темы, добавил теги, переместил в нужный раздел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А по-яснее? Включить или запустить?

 

 

запустить с обновленным счетчиком

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Глава 16.3.11 (стр.442 из CD00171190.pdf) не подходит?

 

 

спасибо))) как раз документацию искала)) сейчас засяду

Изменено пользователем Ekka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Читала про синхронизацию таймеров и источник их тактирования." - а это тогда откуда?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Читала про синхронизацию таймеров и источник их тактирования." - а это тогда откуда?

 

Просто из статей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Слыхал что на заводах из-за разделения труда встречаются такие проблемы.

Разработчик схемы ничего не знает о микроконтроллере, кроме того что у него есть GPIO и пины питания.

В итоге разработчиками ПО под контроллер приходится делать ШИМ на GPIO, перекидывать аналоговые сигналы на входы АЦП и прочая несуразица.

Похоже тут как раз такой случай.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Слыхал что на заводах из-за разделения труда встречаются такие проблемы.

Разработчик схемы ничего не знает о микроконтроллере, кроме того что у него есть GPIO и пины питания.

В итоге разработчиками ПО под контроллер приходится делать ШИМ на GPIO, перекидывать аналоговые сигналы на входы АЦП и прочая несуразица.

Похоже тут как раз такой случай.

 

Хм... у меня просто есть симисторный регулятор.

У него есть пин управления и пин - детектора фазы.

Организовать регулирование мощности с прерываниями и проч. - было уже сделано,

работало прекрасно. Но есть новая задача.

Сделать то же, но без прерываний. Вот и думаю.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ребята, не могу таймер 2 канал 2 настроить на шим... у него вообще есть такая возможность? может он суперособенный?

так настаиваю ШИМ

 

void TIM2_Cfg()
{
    TIM_TimeBaseInitTypeDef tim_struct;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    tim_struct.TIM_Period = POWER;
    tim_struct.TIM_Prescaler = 100;
    tim_struct.TIM_ClockDivision = 0;
    tim_struct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM2, &tim_struct);
    TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
}


void TIM2_CH2_PWM_Cfg()
{
    TIM_ARRPreloadConfig(TIM2,ENABLE);
    TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
    TIM_OCInitTypeDef pwm;
    TIM_OCStructInit(&pwm);
    pwm.TIM_Pulse =500;
    pwm.TIM_OCMode = TIM_OCMode_PWM1;
    pwm.TIM_OutputState = TIM_OutputState_Enable;
    pwm.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC2Init(TIM2, &pwm);
    TIM2->CCR2=TIM2->ARR/2;
}

//сама нога PB3
void GPIO_Cfg()
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //откл JTDI

    GPIO_InitTypeDef c;
    c.GPIO_Mode = GPIO_Mode_AF_PP;
    c.GPIO_Pin = CONTROL_Pin;
    c.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(PORT_CONTROL_Pin, &c);
}

Изменено пользователем Ekka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простой совет:

Забудьте про всякие HAL, Cube, CMSIS и тому подобное. Зачем Вам разбираться с багами индусов?

Если Вы пишите код для какой то периферии, то нужно знать, как эта периферия работает.

И перед написанием кода нужно по крайней мере один раз прочитать раздел раздел 15 "General-purpose timers (TIM2 to TIM5)" из документа "RM0008".

Там ответы на все Ваши вопросы. Кроме Вас в Вашем коде ошибки вряд ли кто найдёт. Навскидку варианты:

Где то в другом месте программы повторно инициализируются используемые ноги процессора.

Вы просто забыли в программе осуществить вызов представленных функций для настройки таймера.

Что-то забыли в настройке, но здесь пусть смотрят знатоки по применению этих библиотек.

Там меньше десятка регистров, в которые при настройке нужно записать нужные значения.

Разберитесь один раз и у Вас будет собственный код настройки таймеров, в котором Вам будет всё понятно и который можно будет портировать под разные проекты. Под STM вообще без проблем.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...