какую частоту выдаст STMF407
-
shalfey
- Встал на лапы
- Сообщения: 123
- Зарегистрирован: Ср май 16, 2012 20:44:38
- Откуда: Харків-Україна.
какую частоту выдаст STMF407
Уважаемые "коты". Начал изучать 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);
}
}
#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);
}
}
- Реклама
Re: какую частоту выдаст STMF407
F/2 в режиме шима должно быть, но для начала хотя бы скорость портов нужно настроить.
-
shalfey
- Встал на лапы
- Сообщения: 123
- Зарегистрирован: Ср май 16, 2012 20:44:38
- Откуда: Харків-Україна.
Re: какую частоту выдаст STMF407
Спасибо. Читал про порты, что это так параметр(только на фронт) на частоту не влияет. Пойду Шим изучать. Была мысль ,что всё таки Шим, но решил спросить.
Добавлено after 28 minutes 24 seconds:
Поставил частоту gpio.GPIO_Speed = GPIO_Speed_50MHz; Всё равно на выходе 3 MHz
Добавлено after 28 minutes 24 seconds:
Поставил частоту gpio.GPIO_Speed = GPIO_Speed_50MHz; Всё равно на выходе 3 MHz
Re: какую частоту выдаст STMF407
[uquote="shalfey",url="/forum/viewtopic.php?p=3517312#p3517312"]Поставил частоту gpio.GPIO_Speed = GPIO_Speed_50MHz; Всё равно 3 MHz[/uquote]
Естественно, для 3MHz ничего и не должно поменяться, а для 84MHz разница в форме сигнала может быть ощутимая.
Тут нужно единички отнимать, т.е. написано Prescaler = 1, а на самом деле это означает деление на 2. И период 3, итого 6 тактов на период, плюс нужно два раза сгенерить toggle, получится F/12 при условии, что делитель APB2 равен 1.
Естественно, для 3MHz ничего и не должно поменяться, а для 84MHz разница в форме сигнала может быть ощутимая.
Код: Выделить всё
base_timer.TIM_Prescaler = 1; //
base_timer.TIM_Period = 2; //-
shalfey
- Встал на лапы
- Сообщения: 123
- Зарегистрирован: Ср май 16, 2012 20:44:38
- Откуда: Харків-Україна.
Re: какую частоту выдаст STMF407
Спасибо сейчас поотнимаю, гляну. Мне 10 мгц и хватит. Потом надо думать ,как разные частоты задавать. Если АЦП (резистором) крутить на входе. А код использовать как коэффициенты деления таймера?
Добавлено after 29 minutes 58 seconds:
При установке 1-1и в делителе и в периоде выдал 20 MHz. До F/2 никак не доходит ,ну да ладно. Теперь её(частоту) надо плавно изменять. Завтра буду думать над кодом.
Добавлено after 29 minutes 58 seconds:
При установке 1-1и в делителе и в периоде выдал 20 MHz. До F/2 никак не доходит ,ну да ладно. Теперь её(частоту) надо плавно изменять. Завтра буду думать над кодом.
- Реклама
- AlanDrakes
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Пн июл 04, 2016 16:51:22
- Откуда: Россия, Омск
Re: какую частоту выдаст STMF407
f/2 работает только на MCO выходах. Впрочем, на него можно вывести и внутреннюю тактовую частоту.
Плавно делить эту частоту уже не получится.
Если разогнать кристалл до максимальных 168МГц, то можно получить частоты:
168М / 84М / 59М / 42М / 33.3М и другие, зависящие от частоты ядра.
На частотах ниже 1МГц можно использовать уже генерацию частоты таймерами. Естественно, потребуется расчитывать делители.
Плавно делить эту частоту уже не получится.
Если разогнать кристалл до максимальных 168МГц, то можно получить частоты:
168М / 84М / 59М / 42М / 33.3М и другие, зависящие от частоты ядра.
На частотах ниже 1МГц можно использовать уже генерацию частоты таймерами. Естественно, потребуется расчитывать делители.
Re: какую частоту выдаст STMF407
[uquote="AlanDrakes",url="/forum/viewtopic.php?p=3517698#p3517698"]f/2 работает только на MCO выходах.[/uquote]
F/2 работает на любом таймере в режиме шима, ARR и CCR должны быть равны 1. И измеряет частоту, кстати, тоже до F/2.
F/2 работает на любом таймере в режиме шима, ARR и CCR должны быть равны 1. И измеряет частоту, кстати, тоже до F/2.
Re: какую частоту выдаст STMF407
На F4 возможно наверное и DDS сделать до 10МГц. Если в основном цикле крутиться, а настройку вынести в прерывания. Надо посчитать.
-
shalfey
- Встал на лапы
- Сообщения: 123
- Зарегистрирован: Ср май 16, 2012 20:44:38
- Откуда: Харків-Україна.
Re: какую частоту выдаст STMF407
Я так понял,что если контроллер сам будет выдавать частоты и сам будет их мерить, то точность измерения будет зависеть только от точности кварца. Даже при прямом счёте измерения будут точные. Только как проверить сам кварц.
Добавлено after 22 minutes 43 seconds:
Ещё вопрос. Какая по умолчанию частота тактирования TM1 у STM32F407?
Добавлено after 22 minutes 43 seconds:
Ещё вопрос. Какая по умолчанию частота тактирования TM1 у STM32F407?
- AlanDrakes
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Пн июл 04, 2016 16:51:22
- Откуда: Россия, Омск
Re: какую частоту выдаст STMF407
Точность кварца обычно указана фирмой производителем. Те самые, например, 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МГц.
Смотрим.
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
- Откуда: Караганда, Казахстан
Re: какую частоту выдаст STMF407
Кварц проверить, в принципе, элементарно. Запрограммируйте на МК часы и посмотрите, как они убегут или отстанут за сутки.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: какую частоту выдаст STMF407
[uquote="afz",url="/forum/viewtopic.php?p=3534525#p3534525"]посмотрите, как они убегут или отстанут за сутки.[/uquote]
Ага... при этом при разной температуре они могут убегать и отставать по разному...
Ага... при этом при разной температуре они могут убегать и отставать по разному...
Глупый не задает вопросы. Глупый и так все знает.
- SIM31
- Это не хвост, это антенна
- Сообщения: 1363
- Зарегистрирован: Чт апр 04, 2013 22:22:57
- Откуда: Белгород, РФ
Re: какую частоту выдаст STMF407
[uquote="AndTer",url="/forum/viewtopic.php?p=3534537#p3534537"]Ага... при этом при разной температуре они могут убегать и отставать по разному...[/uquote]
Корректируйте по GPS, будет точность хоть 0.001 ppm
Корректируйте по GPS, будет точность хоть 0.001 ppm
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: какую частоту выдаст STMF407
И это тоже можно (и нужно) оценить. Сразу станет видно, годится это дело для планируемого частотомера, или нет, т.е. устроит такая точность, или надо будет думать на тему термостатированного генератора. А, самое главное, сразу станет видна грубая ошибка, по типу забытой единицы, которую следовало отнять от требуемого коэффициента деления перед записью его в регистр автоперезагрузки.AndTer писал(а):Ага... при этом при разной температуре они могут убегать и отставать по разному...
К тому же в жилых помещениях температура, обычно, сильно не меняется...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
- SIM31
- Это не хвост, это антенна
- Сообщения: 1363
- Зарегистрирован: Чт апр 04, 2013 22:22:57
- Откуда: Белгород, РФ
Re: какую частоту выдаст STMF407
[uquote="afz",url="/forum/viewtopic.php?p=3535062#p3535062"]К тому же в жилых помещениях температура, обычно, сильно не меняется...[/uquote]
Зимой очень сильно меняется, может с 18 до 26 прыгать не предсказуемо, то сквозняк дунул, то тепло от батареи отопления пошло. Градиент между полом и потолком очень большой.
Зимой очень сильно меняется, может с 18 до 26 прыгать не предсказуемо, то сквозняк дунул, то тепло от батареи отопления пошло. Градиент между полом и потолком очень большой.
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: какую частоту выдаст STMF407
Так, по-любому, это не -40/+40. Ну, и, опять же, можно оценить: устроит такая точность частотомера, или надо применять специальные меры?
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
-
shalfey
- Встал на лапы
- Сообщения: 123
- Зарегистрирован: Ср май 16, 2012 20:44:38
- Откуда: Харків-Україна.
Re: какую частоту выдаст STMF407
Всех с Новым годом!
Добавлено after 31 minute 19 seconds:
Вопрос: при Debug в СооСox-e ресурс флеш расходуется или нет?
Добавлено after 31 minute 19 seconds:
Вопрос: при Debug в СооСox-e ресурс флеш расходуется или нет?
Re: какую частоту выдаст STMF407
Если отладка во флеше - расходуется, а если в ОЗУ - нет. Об отладке в ОЗУ. http://purebasic.mybb.ru/viewtopic.php?id=564#p7664
-
shalfey
- Встал на лапы
- Сообщения: 123
- Зарегистрирован: Ср май 16, 2012 20:44:38
- Откуда: Харків-Україна.
Re: какую частоту выдаст STMF407
Запутался. Где в Кокосе выставить частоту кварца 8 мГц для дискавери, чтобы от внешнего тактировалось(в каком файле)? Выставляю все делители по Кубу. Не сходится частота. Мне надо 264 герца на выходе при 8 мгц кварце. Частотомера жаль нет.
Мяу ,мяу. Кто поможет?В выходной хочется "покодить", завтра на работу однако.
Мяу ,мяу. Кто поможет?В выходной хочется "покодить", завтра на работу однако.
Re: какую частоту выдаст STMF407
В файле stm32f4xx.h в строке.shalfey писал(а):Где в Кокосе выставить частоту кварца 8 мГц для дискавери
Код: Выделить всё
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */Какие делители выставили?shalfey писал(а):Выставляю все делители по Кубу. Не сходится частота.
В архиве тестовый проект для STM32F407 с частотой ядра 168 МГц при кварце 8 МГц.
- Вложения
-
- STM32F407_8MHz_168MHz_Blink_PE0.7z
- (358.12 КБ) 297 скачиваний


