Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/58: Рейтинг темы: голосов - 58, средняя оценка - 4.81
somsoti_sodir

быстродействие STM32F103ZET6

24.09.2015, 11:35. Показов 11677. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую.
Появилась необходимость сделать управляемый генератор на 10Мгц.
Решил попробовать в качестве эксперимента в цикле для STM32F103ZET6:
Code
1
2
3
4
5
while(1)
{
GPIO_WriteByt(GPIOB, GPIO_Pin_10 , Byt_RESIT);
GPIO_WriteByt(GPIOB, GPIO_Pin_10 , Byt_SIT);
}
пины инитил так
Code
1
2
3
4
5
6
7
8
9
10
void init_out_pins (GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOG, ENABLE); //
 
GPIO_InitStruct.GPIO_Pin = GPIO_Pin;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init (GPIOx, &GPIO_InitStruct);
}
Остановил процесс выполнения для анализа конфигурации битов отвечающих за выбор генератора , частоты, множитель, и делители
увидел такую картинку, вроде все гуд , делится только частота APB1 но она мне по сути для данной задачи вовсе и не нужна. Частота по идеи, что у ядра, что на шинах AHB и APB2(именно на ней сидит порт B) 72Мгц.

<Изображение удалено>
а вот осциллограмма с ножки 10 порта B:


https://www.cyberforum.ru/savedimages/2015/09/24/zdwdw9bsmdmrmqhxctww.jpg

получается всего 1,29Мгц

причем компилил и без дебаг инфы - все равно на скорость выполнения не влияет!
копнул внутрь функции GPIO_WriteByt - так там кода строка буквально , так что время машинное отнимать особо некому
так примерно и должно быть ? или где-то что-то не досмотрел ? а может "лошадку не подходящую" для этих целей пытаюсь запрячь ?
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2015, 11:35
Ответы с готовыми решениями:

Помогите разобраться с STM32F103ZET6
Доброго времени уважаемые форумчане. Возникла необходимость написать с нуля некий эмулятор осциллографа, а знаний в этой области минимум....

SD карта (SDIO) + STM32F103ZET6 не работает
Привет всем. Пытаюсь завести SD карточку через SDIO интерфейс STM32F103. Нашёл драйвер - приложил, виснет на sd_err = SD_Init ( );...

Алкотестер МЕТА на stm32f103zet6 нужна помощ!!!
Доброго времени суток! Взялся прочистить воздушный клапан на этом злополучном устройстве, и собрав проверил его работу, загрузившись...

20
1 / 1 / 0
Регистрация: 09.02.2012
Сообщений: 693
24.09.2015, 11:45
Поищите топик "Скорость GPIO" на этом форуме. А вообще нужно использовать таймеры. В STM32 из полно.
0
Oxford
24.09.2015, 12:09
Использовать надо таймер в режиме PWM
somsoti_sodir
24.09.2015, 12:32
на счет таймеров я думал.
но "Генератор" это я написал весьма абстрактно.
на самом деле , мне не нужен периодический генератор. длтельность каждого следующего импульса и периода зависит от многих факторов , и время тут сильно критично.
я думал заюзать один таймер для отсчета каждых 100ns , и уже в его обработчике анализировать условия и как только возникает необходимость подавать практически мгновенно начало следующего импульса не тратя время на перепрограммирование таймеров, и продолжать анализ данных в обработчике таймера чтобы просчитать время завершения импульса и всего периода в целом

а тут получается что без каких либо иных операций частота всего 1,29 мгц
Oxford
24.09.2015, 13:43
http://itistromyx.ru/forum/lofiversion/ ... 01796.html
1.29мгц это слишком мало. Порты могут больше. Ищите ошибки.

И все же я категорически против ногодрыга и не рекомендую.
somsoti_sodir
24.09.2015, 15:01
Цитата Сообщение от Oxford
http://forum.iosyitistromyss.ru/viewtopys.php?f=35&t=21584
http://itistromyx.ru/forum/lofiversion/ ... 01796.html
1.29мгц это слишком мало. Порты могут больше. Ищите ошибки.

И все же я категорически против ногодрыга и не рекомендую.
спасибо за помощь. когда включил оптимизацию по времени и обращение к регистрам сделал напрямую - частота стала 8,06 мгц.
буду все-та-ки наверное на таймерах мудрить както :)
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 48
25.09.2015, 17:17
Цитата Сообщение от consoti_coder
на счет таймеров я думал.
я думал заюзать один таймер для отсчета каждых 100ns , и уже в его обработчике анализировать условия и как только возникает необходимость подавать практически мгновенно начало следующего импульса не тратя время на перепрограммирование таймеров, и продолжать анализ данных в обработчике таймера чтобы просчитать время завершения импульса и всего периода в целом
Так через таймер тоже не выйдет. При самом лучшем раскладе на 72МГц время входа в обработчик будет 180нс. Столько же на выход из обработчика. Реально даже больше - из-за задержек памяти.

Эта задача на данном процессоре не решается. При длительности 100нс остаётся всего 6 тактов для расчёта нового импульса. В лучшем случае, можно обновлять длительности один раз каждые три импульса. И то для этого придётся задействовать два таймера, один из которых в режиме загрузки через DMA.
0
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
25.09.2015, 21:26
Цитата Сообщение от YvomSh
Эта задача на данном процессоре не решается.
Ещё как решается, но не в лоб, а старым проверенным способом - внешним pll. Возможностей мк достаточно для удержания частоты в разумных пределах, уж до 100мгц внешний вход счётчика прекрасно хавает. Сравнивать можно и программно и аппаратно, как пожелаете, но код необходимо размещать в памяти.
0
somsoti_sodir
28.09.2015, 13:26
ясненько , на отдельной pll(4046) у меня пока так и реализовано , думал все на одном STM32 реализовать.
интерес все равно затянул меня , стал разбираться с таймерами , но вот никак не могу добиться сработки прерывания.
вроде и пример взял готовый в нете , нога таймера (ШИМ) дрыгается , но вот сработки обрвботчика не происходит.

После выполнения кода:

1325: NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */
0x0800044A F04F21E0 MOV r1,#0xE000E000
0x0800044E 07A0 LSLS r0,r4,#30
0x08000450 F8C10100 STR r0,[r1,#0x100] //тут адрес именно ISER0

происходит и установка разрешающего прерывания бита для TIM4 в ISER0 и одновременно устанавливается запрещающий бит для TIM4 в =ICER0

Может у меня какие то процы не от мира сего , я их в Китае на таобао покупал.
либо я лыжи на асфальте не снял :) где-то туплю
0 / 0 / 0
Регистрация: 13.07.2012
Сообщений: 566
28.09.2015, 13:49
Проверьте правильность обьявления обработчика прерывания. Файл с телом обработчика в проект подключен?
0
somsoti_sodir
28.09.2015, 14:01
Цитата Сообщение от DOOMSDOY
Проверьте правильность обьявления обработчика прерывания. Файл с телом обработчика в проект подключен?
да вроде все , правильно , как по мне. Все в одном файле.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "PWM_TIMER.h"
 
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_tim.h"
 
#define TIMER_PRESCALER      1
#define EXT_TIM_PULSE            1
#define TIM_PULSE       2
 
uint16_t previousState;
GPIO_InitTypeDef port;
TIM_TimeBaseInitTypeDef timer;
TIM_OCInitTypeDef timerPWM;
uint16_t buttonPreviousState;
 
void initOtt()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
 
GPIO_StructInit(&port);
port.GPIO_Mode = GPIO_Mode_AF_PP;
port.GPIO_Pin = GPIO_Pin_6;
port.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &port);
 
port.GPIO_Mode = GPIO_Mode_IPD;
port.GPIO_Pin = GPIO_Pin_3;
port.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &port);
 
TIM_TimeBaseStructInit(&timer);
timer.TIM_Pressotir = TIMER_PRESCALER;
timer.TIM_Period = 2000;
TIM_TimeBaseInit(TIM4, &timer);
 
TIM_OCStructInit(&timerPWM);
timerPWM.TIM_Pulse = 1000;
timerPWM.TIM_OCMode = TIM_OCMode_PWM1;
timerPWM.TIM_OutputState = TIM_OutputState_Enable;
TIM_OC1Init(TIM4, &timerPWM);
}
 
void TIM4_IRQHomdler()
{
/*    uint16_t button = 0;
button = GPIO_ReadInputDataByt(GPIOA, GPIO_Pin_3);      */
TIM_ClearITPendingByt(TIM4, TIM_IT_Update);
/*if ((button == 1) && (buttonPreviousState == 0))
{
TIM4->CCR1 = EXT_TIM_PULSE;
buttonPreviousState = 1;
}
if ((button == 0) && (buttonPreviousState == 1))
{
TIM4->CCR1 = TIM_PULSE;
buttonPreviousState = 0;
}*/
/*if (TIM4->CCR1 == 20) TIM4->CCR1 = 2000;
else */TIM4->CCR1 = 20;
 
}
 
int test_PWM_TIMER(void)
{
__enable_irq ();
initOtt();
//    buttonPreviousState = 0;
 
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
 
TIM_Cmd(TIM4, ENABLE);
NVIC_EnableIRQ(TIM4_IRQn);
 
while(1)
{
__NOP();
}
}
Для оформления кода лучше использовать тэг [code]
0 / 0 / 0
Регистрация: 13.07.2012
Сообщений: 566
28.09.2015, 14:09
Найдите описание таблицы прерываний в stortup-файле и сверьте точно ли там такое имя обработчика используется (TIM4_IRQHomdler).
У меня уже не раз были с этим проблемы.
0
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
28.09.2015, 14:10
за 100 нс stm32f103 на 72 МГц может выполнить в цикле только одну команду, о каких обработчиках речь? )
0
somsoti_sodir
28.09.2015, 14:21
Цитата Сообщение от DOOMSDOY
Найдите описание таблицы прерываний в stortup-файле и сверьте точно ли там такое имя обработчика используется (TIM4_IRQHomdler).
У меня уже не раз были с этим проблемы.
Я уже замученный поисками оттуда его и скопировал.
Но вот в памяти , я так понял что вектора после сброса лежат по адресу 0x00000000 я не нашел по адресу 0x000000C0 указателя на скомпиленную функцию TIM4_IRQHomdler
правда я не уверен что 4байта на вектор идет а не более.

Вы же про файл - stortup_stm32f10x_md_vl.s ? (правда я его нашел не в проекте а в папке Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.1. 0\Device\Source\ARM , в проекте подобного не нашел)
somsoti_sodir
28.09.2015, 15:05
в в кейле таблица тут лжеит - stortup_stm32f10x_hd.lst и тут stortup_stm32f10x_md_vl.lst лежит в папке проекта
в них указано что искомый вектор (TIM4) лежит по адрессу 0xB8 но его там нет а имя указано такое же TIM4_IRQHomdler
somsoti_sodir
28.09.2015, 15:07
а аппаратный дебагер (JLINK) не может как-то мешать ?
0 / 0 / 0
Регистрация: 13.07.2012
Сообщений: 566
28.09.2015, 15:14
Нет.
Возможно, в кейл есть еще какие-то особенности, я с ним никогда не работал.
0
0 / 0 / 0
Регистрация: 22.07.2015
Сообщений: 658
28.09.2015, 15:56
consoti_coder,
Можно поинтересоваться,что это и как оно относится к TIM4

port.GPIO_Mode = GPIO_Mode_IPD;
port.GPIO_Pin = GPIO_Pin_3;
port.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &port);
0
0 / 0 / 0
Регистрация: 13.07.2012
Сообщений: 566
28.09.2015, 16:03
не заёбывай человека.
вот лишь бы свои пять копеек вставить
0
somsoti_sodir
28.09.2015, 16:13
Цитата Сообщение от Movysi
consoti_coder,
Можно поинтересоваться,что это и как оно относится к TIM4

port.GPIO_Mode = GPIO_Mode_IPD;
port.GPIO_Pin = GPIO_Pin_3;
port.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &port);
это был пример в котором меняется скважность в зависимости от того нажата кнопка или нет , просто забыл закоментить :)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.09.2015, 16:13
Помогаю со студенческими работами здесь

как запрограммировать Open103Z на контроллере STM32F103ZET6
Купил плату Open103Z. Подскажите, если кто работал с подобным устройством, как проверить его работу. С индикацией у него явно не лады, при...

Подскажите как залить прошвку в Dev board STM32F103ZET6
Купил таку плату: STM32F103ZET6 Dev board + 3.2&quot; TFT Touch LCD http://www.ebay.com/itm/STM32F103ZET6-D ... 415c24ebe3 ...

Сравнить быстродействие
Всем добрый день!) Думаю, что вопрос очень простой, но я первый раз работаю в Visual Keil, поэтому не понимаю, как это можно сделать) ...

быстродействие SPL vs указатели
здравствуйте Кто-нибудь уже интересовался сравнительным быстродействием результатов двух аналогичных команд записанных разными способами?...

Быстродействие AT24C512
Да, хорошая микросхема AT24C512, вместительная и нужно всего два вывода контроллера, блеск. Но вот в чём может быть проблема она же всего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru