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

Настроил таймер на  режим output compare  togle.И всё погасло  а тыкал на выход С1-112А абсолюный ноль.Что не так?

Спойлер
void timer_2_init(void)
{
	RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;
	GPIOA->CRL |= GPIO_CRL_CNF0_1;
	GPIOA->CRL &= ~GPIO_CRL_CNF0_0;
   GPIOA->CRL|=GPIO_CRL_MODE0;
   RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
	RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;

	TIM2->PSC =2-1; // ����������� �������� ��� ������ ����� 1000 ��� � �������
	TIM2->ARR = 3 - 1; //65535
	TIM2->CCR1= 2;
	TIM2->CCMR1&=~TIM_CCMR1_CC1S;
	TIM2->CCMR1|=_VAL2FLD(TIM_CCMR1_OC1M,2);
	TIM2->CCMR1&=~TIM_CCMR1_OC1PE;
	TIM2->CCER&=~TIM_CCER_CC1P;
	TIM2->CCER|=TIM_CCER_CC1E;
	TIM2->EGR |= TIM_EGR_UG;
	TIM2->DIER |=TIM_DIER_CC1IE;

	//TIM2->DIER |= TIM_DIER_UIE;
	TIM2->CR1 |= TIM_CR1_CEN;
	NVIC_EnableIRQ(TIM2_IRQn);
	//NVIC_GetPriority(TIM2_IRQn,0);
} 

 

 

Изменено пользователем haker_fox
Тему перенёс.

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


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

HAL это хорошо.Спасибо заранее.Этот режим мне нужен для генератора меандр.Но генератор не просто на одной частоте.Как сделать управлением прескаллера.В майне по умолчанию.?Если можете проконсультировать амматора.

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


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

Пока HAL не подоспел. Однократно устанавливалось смещение на базу транзистора. Регистры, биты и позиции не шифровались, прямиком из референс-мануала. Включался 4 канал таймера 4 на ноге B9 stm32f1.

/*
* P W M   T I M 4 - C H 4  (PB9,AF)
*/
void pwm_on
( int ccr )
{
        RCC_APB2ENR    |= (1<<0);                // afio clocking
        RCC_APB2ENR    |= (1<<3);                // clocking port B
        GPIOB_CRH      &= ~( 0b1111 << 4 );      // pb9 reset
        GPIOB_CRH      |= ( 0b1010 << 4 );       // pb9 af out pp 2
        RCC_APB1ENR    |= (1 << 2) ;             // TIM4 clocking
        TIM4_PSC       = 72 - 1 ;                // 1 MHz
        TIM4_ARR       = 1000 - 1 ;              // 1kHz
        TIM4_CCR4      = ccr ;                   // width = bias
        TIM4_CCMR2     |= (0b111 << 12)|(0<<15); // pwm mode 1
        TIM4_CCER      |= (1 << 12) ;            // CC4 output enable
        TIM4_CR1       |= 1 ;                    // counter enable
}

 

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

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


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

Как мне менять частоту генерации меандра?Я нашёл в своём коде пару ошибок.Из за них код не работал.Но вот решить проблему вот такого плана не смог.Нужно менять частоту поэтапно от нуля включить на частоту 800 кГц .Потом шаг 80 кГц и менять до заданного значения метод итерации.

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

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


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

Частота зависит от периодов счёта и прескалера. Коэффициенты без проблем вычисляются из значений частоты периферии (брать APB1/APB2 к которому принадлежит выбранный таймер) и требуемой частоты. В чём проблема управлять частотой генерации таймера, если выбранный вами таймер без lock режима?

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


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

В 10.02.2024 в 06:13, HardWareMan сказал:

Частота зависит от периодов счёта и прескалера. Коэффициенты без проблем вычисляются из значений частоты периферии (брать APB1/APB2 к которому принадлежит выбранный таймер) и требуемой частоты. В чём проблема управлять частотой генерации таймера, если выбранный вами таймер без lock режима?

Это я знаю. Каким образом это можно реализовать.Одной переменной не обойтись. Просто в основном цикле вычислить и подставить -не работает.Так покажите пример.

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


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

44 минуты назад, HardWareMan сказал:

Коэффициенты без проблем вычисляются

...с той проблемой, что частота и период связаны обратно-пропорциональным соотношением F = 1/T, и шаг перестройки частоты нелинеен при линейном изменении периода. При малых значениях PSC и ARR шаг перестройки частоты получается весьма значительным, а при большом значении - малым. Например, разница между 1 и 2 в делителе даст перестройку по частоте 1/1 и 1/2, а разница делителей 50000 и 50001 даст перестройку по частоте 1/50000 и 1/50001. И никакого постоянного шага в 80 кГц, как хотел бы топикстартер, не выйдет. Это ж простые арифметические истины 3-4-го класса школы. Это объяснялось уже не раз. Повторять как бы смысла нет.

\(Fupd = {Fclk \over DIV (PSC +1) (ARR + 1)}\)

где Fclk - частота тактирования МК (HCLK), DIV - коэфф.деления после шины APB, от которой таймер запитан, PSC и ARR - значения в регистрах таймера. 

Понятно в этой формуле, что если PSC и ARR малы, то изменение на 1 будет давать большой скачок изменения частоты. Да и вообще, при линейном изменении PSC и ARR частота циклов таймера будет изменяться нелинейно. Ну это же школьная, мать ее, тематика.
 

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

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


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

Я это понимаю .Но вы мне покажите пример на пальцах хотя бы объясните.Как оно будет работать в основном цикле?

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


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

Никак оно не будет работать. Сто раз уже писали - нужен DDS - возьми DDS и не сношай людям мозги.

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


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

Но вот решить проблему вот такого плана не смог.Нужно менять частоту поэтапно от нуля включить на частоту 800 кГц .Потом шаг 80 кГц и менять до заданного значения метод итерации.
Ну вот и посчитай на бумажке коэффициенты деления для 80, 160, 240..(весь ряд сам допиши, у мну устный счёт плохо) 800 кГц

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


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

В 11.02.2024 в 00:53, Obam сказал:

Но вот решить проблему вот такого плана не смог.Нужно менять частоту поэтапно от нуля включить на частоту 800 кГц .Потом шаг 80 кГц и менять до заданного значения метод итерации.
Ну вот и посчитай на бумажке коэффициенты деления для 80, 160, 240..(весь ряд сам допиши, у мну устный счёт плохо) 800 кГц

Ряд можно дописать .Программу написать .Но она не будет выполнять данную работу.А примера нет.Есть только  видео stm32 & DDS .Si5351A -DDS прямоугольных импульсов.Но нужно создавать программу под неё.Да зная структурную схему DDS можно её самому сделать на базе stm32  но не на контроллере которого хочу я применить.Покажите пример. 

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


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

30 minutes ago, dimir said:

Ряд можно дописать .Программу написать .Но она не будет выполнять данную работу.

А откуда такая уверенность, что не будет работать?

30 minutes ago, dimir said:

А примера нет. ... Покажите пример.

Учитывая, что ТС повторяет данную мантру в каждом сообщении я начинаю подозревать, что он не хочет пробовать что-то делать сам, а хочет получить готовое решение.

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


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

3 hours ago, HardWareMan said:

Учитывая, что ТС повторяет данную мантру в каждом сообщении я начинаю подозревать, что он не хочет пробовать что-то делать сам, а хочет получить готовое решение.

Так и есть. Я один и тот же вопрос от этого ivan dimir вижу на многих сайтах. У него подход к делу такой: прикинуться шлангом, выложить какой-нибудь бред, а потом ждать, пока грамотные челы ему всё разжуют и напишут. При этом он сам даже напрягаться не хочет, чтобы изучить теорию. Поэтому я удивляюсь, что многие до сих пор ведутся и тратят на него своё время.

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


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

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

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

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

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

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

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

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

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

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