какую частоту выдаст STMF407

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Встал на лапы
Сообщения: 123
Зарегистрирован: Ср май 16, 2012 20:44:38
Откуда: Харків-Україна.

Сообщение shalfey »

Уважаемые "коты". Начал изучать STM. Мигать диодами надоело. Решил сделать генератор -частотомер. Пока вожусь с генератором. Задача- меандр. Выходных частот от 200 герц до 10 Mгц. Какую максимальную частоту может выдать F407 Discovery, через канал таймера. У меня по осцилогр. показывает всего 3мгц. Все шины на максимум, никаких прескалеров.
#include <stm32f4xx.h>
#include <stm32f4xx_rcc.h>
#include <stm32f4xx_gpio.h>
#include <stm32f4xx_tim.h>
int main(){
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
GPIO_InitTypeDef gpio;// структура
GPIO_StructInit(&gpio); // заполняем стандартными значениями
gpio.GPIO_OType = GPIO_PuPd_NOPULL ; // подтяжка резисторами
gpio.GPIO_Mode = GPIO_Mode_AF ; // работаем как выход
gpio.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIOE, &gpio);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM_TimeBaseInitTypeDef base_timer;
TIM_TimeBaseStructInit (&base_timer);
base_timer.TIM_Prescaler = 1; //
base_timer.TIM_Period = 2; //
TIM_TimeBaseInit(TIM1, &base_timer);
GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_TIM1);

TIM_OCInitTypeDef timer_oc;
TIM_OCStructInit(&timer_oc);
timer_oc.TIM_Pulse =1;
timer_oc.TIM_OCMode = TIM_OCMode_Toggle;
/* Включаем основной и комплементарный выводы */
timer_oc.TIM_OutputState = TIM_OutputState_Enable;
timer_oc.TIM_OutputNState = TIM_OutputNState_Enable;
/* Активируем каналы */
TIM_OC1Init(TIM1, &timer_oc);


TIM_BDTRInitTypeDef timer_bdtr;
TIM_BDTRStructInit(&timer_bdtr);
timer_bdtr.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
TIM_BDTRConfig(TIM1, &timer_bdtr);


// RCC_PCLK2Config(RCC_HCLK_Div2);/*поигрался здесь с разным Div, всё на максимуме*/

TIM_Cmd(TIM1, ENABLE);


{
while(1);
}
}
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

F/2 в режиме шима должно быть, но для начала хотя бы скорость портов нужно настроить.
Реклама
Встал на лапы
Сообщения: 123
Зарегистрирован: Ср май 16, 2012 20:44:38
Откуда: Харків-Україна.

Сообщение shalfey »

Спасибо. Читал про порты, что это так параметр(только на фронт) на частоту не влияет. Пойду Шим изучать. Была мысль ,что всё таки Шим, но решил спросить.

Добавлено after 28 minutes 24 seconds:
Поставил частоту gpio.GPIO_Speed = GPIO_Speed_50MHz; Всё равно на выходе 3 MHz
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="shalfey",url="/forum/viewtopic.php?p=3517312#p3517312"]Поставил частоту gpio.GPIO_Speed = GPIO_Speed_50MHz; Всё равно 3 MHz[/uquote]
Естественно, для 3MHz ничего и не должно поменяться, а для 84MHz разница в форме сигнала может быть ощутимая.

Код: Выделить всё

base_timer.TIM_Prescaler = 1; //
base_timer.TIM_Period = 2; //
Тут нужно единички отнимать, т.е. написано Prescaler = 1, а на самом деле это означает деление на 2. И период 3, итого 6 тактов на период, плюс нужно два раза сгенерить toggle, получится F/12 при условии, что делитель APB2 равен 1.
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 123
Зарегистрирован: Ср май 16, 2012 20:44:38
Откуда: Харків-Україна.

Сообщение shalfey »

Спасибо сейчас поотнимаю, гляну. Мне 10 мгц и хватит. Потом надо думать ,как разные частоты задавать. Если АЦП (резистором) крутить на входе. А код использовать как коэффициенты деления таймера?

Добавлено after 29 minutes 58 seconds:
При установке 1-1и в делителе и в периоде выдал 20 MHz. До F/2 никак не доходит ,ну да ладно. Теперь её(частоту) надо плавно изменять. Завтра буду думать над кодом. :roll:
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 240
Зарегистрирован: Пн июл 04, 2016 16:51:22
Откуда: Россия, Омск

Сообщение AlanDrakes »

f/2 работает только на MCO выходах. Впрочем, на него можно вывести и внутреннюю тактовую частоту.

Плавно делить эту частоту уже не получится.
Если разогнать кристалл до максимальных 168МГц, то можно получить частоты:
168М / 84М / 59М / 42М / 33.3М и другие, зависящие от частоты ядра.
На частотах ниже 1МГц можно использовать уже генерацию частоты таймерами. Естественно, потребуется расчитывать делители.
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="AlanDrakes",url="/forum/viewtopic.php?p=3517698#p3517698"]f/2 работает только на MCO выходах.[/uquote]
F/2 работает на любом таймере в режиме шима, ARR и CCR должны быть равны 1. И измеряет частоту, кстати, тоже до F/2.
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Сообщение Sergi »

На F4 возможно наверное и DDS сделать до 10МГц. Если в основном цикле крутиться, а настройку вынести в прерывания. Надо посчитать.
Встал на лапы
Сообщения: 123
Зарегистрирован: Ср май 16, 2012 20:44:38
Откуда: Харків-Україна.

Сообщение shalfey »

Я так понял,что если контроллер сам будет выдавать частоты и сам будет их мерить, то точность измерения будет зависеть только от точности кварца. Даже при прямом счёте измерения будут точные. Только как проверить сам кварц.

Добавлено after 22 minutes 43 seconds:
Ещё вопрос. Какая по умолчанию частота тактирования TM1 у STM32F407?
Прорезались зубы
Аватара пользователя
Сообщения: 240
Зарегистрирован: Пн июл 04, 2016 16:51:22
Откуда: Россия, Омск

Сообщение AlanDrakes »

Точность кварца обычно указана фирмой производителем. Те самые, например, 50ppm - 50 единиц на миллион. Получаем 50 / 1000000 = 0.00005 = 0,005%. Но с другой стороны это погрешность 4.3 секунды в сутки.

Смотрим.
TIM1 находится на нише APB2. Тактирование таймеров этих шин получается
SYSCLOCK / AHB_PRESC / APBx_PRESC * (1 или 2)
После сброса (до кода начальной инициализации из system_stm32f407xxx.c) все делители равны единице, то есть, частота не делится.

Самое смешное, что при подключении делителя APB2, таймер будет тактироваться с в двое БОЛЬШЕЙ частотой, чем остальной домен (пункт 5.2 Clocks), последние абзацы про таймеры.

Пример.
Внешний кварц на 8МГц (рекомендуемый). Включен PLL с домножением частоты до... например, 48МГц. AHB не делит частоту, APB2 делит частоту на 8
На таймер будет подано тактирование (48 / 8 * 2) = 12МГц.
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

Кварц проверить, в принципе, элементарно. Запрограммируйте на МК часы и посмотрите, как они убегут или отстанут за сутки.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

Сообщение AndTer »

[uquote="afz",url="/forum/viewtopic.php?p=3534525#p3534525"]посмотрите, как они убегут или отстанут за сутки.[/uquote]
Ага... при этом при разной температуре они могут убегать и отставать по разному...
Глупый не задает вопросы. Глупый и так все знает.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1363
Зарегистрирован: Чт апр 04, 2013 22:22:57
Откуда: Белгород, РФ

Сообщение SIM31 »

[uquote="AndTer",url="/forum/viewtopic.php?p=3534537#p3534537"]Ага... при этом при разной температуре они могут убегать и отставать по разному...[/uquote]

Корректируйте по GPS, будет точность хоть 0.001 ppm
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

AndTer писал(а):Ага... при этом при разной температуре они могут убегать и отставать по разному...
И это тоже можно (и нужно) оценить. Сразу станет видно, годится это дело для планируемого частотомера, или нет, т.е. устроит такая точность, или надо будет думать на тему термостатированного генератора. А, самое главное, сразу станет видна грубая ошибка, по типу забытой единицы, которую следовало отнять от требуемого коэффициента деления перед записью его в регистр автоперезагрузки.

К тому же в жилых помещениях температура, обычно, сильно не меняется...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1363
Зарегистрирован: Чт апр 04, 2013 22:22:57
Откуда: Белгород, РФ

Сообщение SIM31 »

[uquote="afz",url="/forum/viewtopic.php?p=3535062#p3535062"]К тому же в жилых помещениях температура, обычно, сильно не меняется...[/uquote]

Зимой очень сильно меняется, может с 18 до 26 прыгать не предсказуемо, то сквозняк дунул, то тепло от батареи отопления пошло. Градиент между полом и потолком очень большой.
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

Так, по-любому, это не -40/+40. Ну, и, опять же, можно оценить: устроит такая точность частотомера, или надо применять специальные меры?
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Встал на лапы
Сообщения: 123
Зарегистрирован: Ср май 16, 2012 20:44:38
Откуда: Харків-Україна.

Сообщение shalfey »

Всех с Новым годом!

Добавлено after 31 minute 19 seconds:
Вопрос: при Debug в СооСox-e ресурс флеш расходуется или нет?
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Если отладка во флеше - расходуется, а если в ОЗУ - нет. Об отладке в ОЗУ. http://purebasic.mybb.ru/viewtopic.php?id=564#p7664
Встал на лапы
Сообщения: 123
Зарегистрирован: Ср май 16, 2012 20:44:38
Откуда: Харків-Україна.

Сообщение shalfey »

Запутался. Где в Кокосе выставить частоту кварца 8 мГц для дискавери, чтобы от внешнего тактировалось(в каком файле)? Выставляю все делители по Кубу. Не сходится частота. Мне надо 264 герца на выходе при 8 мгц кварце. Частотомера жаль нет.
Мяу ,мяу. Кто поможет?В выходной хочется "покодить", завтра на работу однако.
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

shalfey писал(а):Где в Кокосе выставить частоту кварца 8 мГц для дискавери
В файле stm32f4xx.h в строке.

Код: Выделить всё

#define HSE_VALUE    ((uint32_t)8000000)     /*!< Value of the External oscillator in Hz */
Вместо 8000000 может быть другое значение.
shalfey писал(а):Выставляю все делители по Кубу. Не сходится частота.
Какие делители выставили?
В архиве тестовый проект для STM32F407 с частотой ядра 168 МГц при кварце 8 МГц.
Вложения
STM32F407_8MHz_168MHz_Blink_PE0.7z
(358.12 КБ) 298 скачиваний
Ответить

Вернуться в «ARM»