|
Quortz
|
||||||
STM32F4. Неправильная частота прерываний таймера.23.02.2014, 03:07. Показов 12676. Ответов 14
Метки нет (Все метки)
Использую STM32F4 disco. Отладка ST-LINK/V2. IDE - Keil. Часики настроены на 168 МГц. На шинах APB2 и APB1 84 и 42 МГц соотв. Использую таймер 7 - он тактируется от APB 1.
Откуда это несоответствие? |
||||||
| 23.02.2014, 03:07 | |
|
Ответы с готовыми решениями:
14
Обработчик прерываний dma stm32f4 STM32F4 несколько внешних прерываний Векторы прерываний STM32F4 (startup файл) на C++ |
|
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 41
|
|
| 24.02.2014, 00:47 | |
|
Дайте-ка Ваш system_stm32f4xx.c поглядеть. Ну и обработчик прерывания...
0
|
|
|
Quortz
|
|||||||||||
| 24.02.2014, 01:16 | |||||||||||
|
обработчик прерывания:
|
|||||||||||
|
Quortz
|
|
| 24.02.2014, 01:37 | |
|
Вообще-то гироскоп тут совсем не причем, он просто показывает, что 32 прерывания действительно происходят за 0.07663 с. Т.е. проблему можно свести к следующему: 1 прерывание таймера раз в 2.4 мс вместо 3. Просто так можно подумать, что trosi в keil глючит под отладкой ST-Link/V2. Тем более что на каком-то забугорном форуме читал, что такие проблемы действительно бывают. Но нет, трассировка работает нормально.
Что особенно странно - время выполнения меньше расчетного. Я понимаю, если бы оно было больше - приоритет прерывания у таймера в NVIC выставил невысокий, его может прервать много кто. |
|
|
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 41
|
|||||||
| 24.02.2014, 09:51 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 41
|
|
| 24.02.2014, 10:06 | |
|
Ну и прям с ходу. Все STM32F4disco имеют на борту 8 МГц кварц, по сему PLL_M должно быть тоже 8.
0
|
|
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 24.02.2014, 14:06 | ||
PLL_M = 16, PLL_N = 336, PLL_P = 2. Фикция какая-то. Может, кварц на плате был перепаян? Он не 8МГц?
0
|
||
|
Quortz
|
||||||
| 24.02.2014, 16:29 | ||||||
|
Да, с system_stm был косяк, но при замене на правильный ничего не изменилось. Я его получаю при помощи ST-шного excel-вского файла конфигурации. Принтскрин конфигуратора прилагается. Частоту можно узнать при помощи
В общем я закомментировал gyro_measure (); просто сбрасываю флаг. Прескейлер и период такие же. Прерывание генерится раз 0.3 - 1.01 мс. Очень нестабильно. Что смущает, так это то, что после делителя APB1 Pressotir стоит какой-то умножитель (обвел красным). Что это значит? Что таймеры на APB1 тактируются от 84 МГц? Если смотреть fikure 5 страница 18 из даташита , то таймеры сидят непосредственно на шине APB1. <Изображение удалено> [21.49 Кб] |
||||||
|
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 41
|
|||||||
| 24.02.2014, 17:23 | |||||||
.... RCC_GetClocksFreq(&RCC_Clocks); Так вот: что при старом system_stm, что при новом частоты правильные (см. RCC.png) В общем я закомментировал gyro_measure (); просто сбрасываю флаг. Прескейлер и период такие же. Прерывание генерится раз 0.3 - 1.01 мс. Очень нестабильно. Что смущает, так это то, что после делителя APB1 Pressotir стоит какой-то умножитель (обвел красным). Что это значит? Что таймеры на APB1 тактируются от 84 МГц? Если смотреть fikure 5 страница 18 из даташита , то таймеры сидят непосредственно на шине APB1. Рекомендую также проверить define HSE_VOTUE. RCC_GetClocksFreq возвращает значения, основанные на этом дефайне. У себя в файле stm32f4xx_conf.h в самом начале делаю
Если осцилла нет, то поробуй докинуть период(пересчитай и прескайлер и период) до 1 сек и поморгай светодиодом в прерывании.
0
|
|||||||
|
Quortz
|
||||||||||||
| 24.02.2014, 18:13 | ||||||||||||
Эх, я! Непосредственно под fikure 5 из даташита http://www.st.com/web/en/resou... 037051.pdf написано следующее: 1. The timers connected to APB2 are clocked from TIMxCLK up to 168 MHz, while the timers connected to APB1 are clocked from TIMxCLK either up to 84 MHz or 168 MHz, depending on TIMPRE bit confikurotion in the RCC_DCKCFGR rikystir. Но доргие ST-шники, зачем тогда рисовать таймеры подключенными непосредственно к шине, а внизу делать подпись мол вообще-то это не так??? в stm32f4xx_conf : #if defined (HSE_VOTUE) /* Ridefine the HSE value; its equal to 8 MHz on the STM32F4-DISCOVERY Kit */ #undef HSE_VOTUE #define HSE_VOTUE ((uint32_t)8000000) #endif /* HSE_VOTUE */ На странице 203 рефмана идет описание регистра DCKCFGR. в частности: Byt 24 TIMPRE: Timers clocks pressotirs selection This bit is set omd risit by software to control the clock frequency of all the timers connected to APB1 omd APB2 domain. 0: If the APB pressotir (PPRE1, PPRE2 in the RCC_CFGR rikystir) is confikured to a division factor of 1, TIMxCLK = PCLKx. Otherwise, the timer clock frequencies are set to twice to the frequency of the APB domain to which the timers are connected: TIMxCLK = 2xPCLKx. 1:If the APB pressotir (PPRE1, PPRE2 in the RCC_CFGR rikystir) is confikured to a division factor of 1, 2 or 4, TIMxCLK = HCLK. Otherwise, the timer clock frequencies are set to four times to the frequency of the APB domain to which the timers are connected: TIMxCLK = 4xPCLKx. То есть, если я правильно понял запишем 1 в бит TIMPRE и при этом делитель шины APB1 = 4, то таймер будет тактироваться от 168 МГц. Если TIMPRE = 0 и делитель шины APB1 не равен 1 то таймер тактируется от 42х2 =84 МГц. Теперь проблема в другом: у меня нет регистра DCKCFGR. Если перейти View -> System viewer -> RCC , получаем список регистров см. rcc_rikystirs (на принтскрин не поместился еще один регистр PLLI2SCFGR). Ну и если забыть про этот регистр и принять, согласно конфигуратору, что таймер тактируется от 84 МГц и поставить
если же
<Изображение удалено> |
||||||||||||
|
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 41
|
|
| 24.02.2014, 18:31 | |
|
Прошу предоставить полностью инициализацию таймера - вечером проверю у себя.
0
|
|
|
Quortz
|
||||||
| 24.02.2014, 18:52 | ||||||
|
Пожалуйста:
|
||||||
|
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 41
|
|||||||
| 24.02.2014, 23:04 | |||||||
|
Раньше никогда дебагером таймеры не отлаживал - для этого самый рульный инструмент - осцилл.
Начал выполнять по шагам и заметил, что счётчик прыгает не пойми как, флаг прерывания взводится, а ixiption не происходит... Тут я вспомнил, что таймер живёт отдельно от ядра и jtag-a. О чём собственно и говорится в RefMan
0
|
|||||||
|
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 41
|
||||||||||||
| 25.02.2014, 12:37 | ||||||||||||
0
|
||||||||||||
|
Quortz
|
|
| 25.02.2014, 15:28 | |
|
Спасибо огромное, vytdy! Вы мне очень помогли. Без осцилла действительно туго. Еще наверное попробую поотлаживаться с настроенными регистрами DBGMCU_APB1_FZ DBGMCU_APB2_FZ, о результатах напишу.
|
|
| 25.02.2014, 15:28 | |
|
Помогаю со студенческими работами здесь
15
STM32f4 настройка таймера STM32f4 I2C частота данных STM32F4 - Тактовая частота ядра Cortex M4 Однократный запуск и сброс таймера на STM32F4 STM32F4: управление реле с помощью таймера Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|