Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Сб дек 01, 2018 18:26:40

Уважаемые "коты". Начал изучать 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);
}
}

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

Сб дек 01, 2018 18:48:18

F/2 в режиме шима должно быть, но для начала хотя бы скорость портов нужно настроить.

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

Сб дек 01, 2018 19:25:21

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

Добавлено after 28 minutes 24 seconds:
Поставил частоту gpio.GPIO_Speed = GPIO_Speed_50MHz; Всё равно на выходе 3 MHz

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

Сб дек 01, 2018 19:40:47

Поставил частоту gpio.GPIO_Speed = GPIO_Speed_50MHz; Всё равно 3 MHz

Естественно, для 3MHz ничего и не должно поменяться, а для 84MHz разница в форме сигнала может быть ощутимая.
Код:
base_timer.TIM_Prescaler = 1; //
base_timer.TIM_Period = 2; //

Тут нужно единички отнимать, т.е. написано Prescaler = 1, а на самом деле это означает деление на 2. И период 3, итого 6 тактов на период, плюс нужно два раза сгенерить toggle, получится F/12 при условии, что делитель APB2 равен 1.

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

Сб дек 01, 2018 21:59:14

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

Добавлено after 29 minutes 58 seconds:
При установке 1-1и в делителе и в периоде выдал 20 MHz. До F/2 никак не доходит ,ну да ладно. Теперь её(частоту) надо плавно изменять. Завтра буду думать над кодом. :roll:

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

Вс дек 02, 2018 10:39:40

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

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

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

Вс дек 02, 2018 10:49:48

f/2 работает только на MCO выходах.

F/2 работает на любом таймере в режиме шима, ARR и CCR должны быть равны 1. И измеряет частоту, кстати, тоже до F/2.

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

Вс дек 02, 2018 12:06:09

На F4 возможно наверное и DDS сделать до 10МГц. Если в основном цикле крутиться, а настройку вынести в прерывания. Надо посчитать.

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

Вс дек 02, 2018 19:45:39

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

Добавлено after 22 minutes 43 seconds:
Ещё вопрос. Какая по умолчанию частота тактирования TM1 у STM32F407?

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

Вт дек 04, 2018 18:15:08

Точность кварца обычно указана фирмой производителем. Те самые, например, 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МГц.

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

Вт дек 25, 2018 08:34:21

Кварц проверить, в принципе, элементарно. Запрограммируйте на МК часы и посмотрите, как они убегут или отстанут за сутки.

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

Вт дек 25, 2018 09:03:28

посмотрите, как они убегут или отстанут за сутки.

Ага... при этом при разной температуре они могут убегать и отставать по разному...

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

Ср дек 26, 2018 02:52:53

Ага... при этом при разной температуре они могут убегать и отставать по разному...


Корректируйте по GPS, будет точность хоть 0.001 ppm

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

Ср дек 26, 2018 03:20:43

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

К тому же в жилых помещениях температура, обычно, сильно не меняется...

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

Ср дек 26, 2018 10:58:58

К тому же в жилых помещениях температура, обычно, сильно не меняется...


Зимой очень сильно меняется, может с 18 до 26 прыгать не предсказуемо, то сквозняк дунул, то тепло от батареи отопления пошло. Градиент между полом и потолком очень большой.

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

Ср дек 26, 2018 14:50:01

Так, по-любому, это не -40/+40. Ну, и, опять же, можно оценить: устроит такая точность частотомера, или надо применять специальные меры?

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

Ср янв 02, 2019 15:14:53

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

Добавлено after 31 minute 19 seconds:
Вопрос: при Debug в СооСox-e ресурс флеш расходуется или нет?

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

Ср янв 02, 2019 15:21:08

Если отладка во флеше - расходуется, а если в ОЗУ - нет. Об отладке в ОЗУ. http://purebasic.mybb.ru/viewtopic.php?id=564#p7664

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

Ср янв 02, 2019 16:20:48

Запутался. Где в Кокосе выставить частоту кварца 8 мГц для дискавери, чтобы от внешнего тактировалось(в каком файле)? Выставляю все делители по Кубу. Не сходится частота. Мне надо 264 герца на выходе при 8 мгц кварце. Частотомера жаль нет.
Мяу ,мяу. Кто поможет?В выходной хочется "покодить", завтра на работу однако.

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

Ср янв 02, 2019 17:11:45

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 KiB) Скачиваний: 270
Ответить