реклама на сайте
подробности

 
 
> Странное поведение STM32F745
Денис555
сообщение Jan 14 2016, 16:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 29-09-06
Из: Самара
Пользователь №: 20 827



Доброго времени суток!
Столкнулся с проблемой при использовании STM32F745.
Элементарная программа:
В main в бесконечном цикле происходит постоянный вызов процедуры, в которой следующее:
1. выставили лог. 1 на GPIO
2. пустой цикл задержки
3. сбросили пин GPIO (лог. 0)
4. пустой цикл задержки
...
и далее повторение пунктов 1-4 4 раза.
Все пустые циклы сделал ассемблерными вставками (чтобы наверняка, компилятор проглатывает как есть).
На осциллографе 3 первых получившихся импульса и пауз между ними одинаковые, а четвертый импульс растянут раз в 5 больше. Эффект независим от длительности импульсов.
При добавлении кол-ва импульсов этот эффект может проявиться где угодно в разных импульсах и паузах 1 и более раз.
Тактирование PLL - 200 МГц от внешнего генератора 25 МГц. Пробовал и c HAL-ом и без него. Кроме GPIO и RCC (тактирование) ничего не включено. Все прерывания отключены. Питание норм.
Что это может быть? Уже всю голову сломал и уже не я один.
Приветствуются любые предложения.
Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alx125
сообщение Jan 15 2016, 02:54
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 18-05-09
Из: Novosibirsk
Пользователь №: 49 204



Рискну предположить, что Вы ранее имели дело с микроконтроллерами без конвеера и кэш.
Там функцию точной задержки можно было написать простым циклом.
В ахитектуре ARM используется конвеер и значит многие вещи стали не детерминированными по времени!
Если Вам нужно точную задержку в ARM - необходимо использовать таймер+прерывание
Go to the top of the page
 
+Quote Post
arhiv6
сообщение Jan 15 2016, 03:57
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Цитата(alx125 @ Jan 15 2016, 08:54) *
Если Вам нужно точную задержку в ARM - необходимо использовать таймер+прерывание

Даже если все перифирийные таймеры заняты, в самом ARM ядре есть системный таймер который для этого можно использовать. Вот пример.

Сообщение отредактировал arhiv6 - Jan 15 2016, 03:58


--------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Денис555   Странное поведение STM32F745   Jan 14 2016, 16:17
- - ViKo   Если в Кейле, то можно в отладчике пройтись по асс...   Jan 14 2016, 16:43
- - Денис555   Пишу в Keil-е. В ассемблерном листинге все ровно к...   Jan 14 2016, 16:55
- - AlexandrY   Цитата(Денис555 @ Jan 14 2016, 18:17) При...   Jan 14 2016, 17:05
- - Денис555   CODE/* Includes ----------------------------------...   Jan 14 2016, 17:28
- - ViKo   Думаю, надо присмотреться к кэшу. Шина Flash у STM...   Jan 14 2016, 18:37
- - Денис555   Про SysTick и про DWT - это все понятно, можно, но...   Jan 15 2016, 07:07
- - ViKo   У вас конвейер 7-ступенчатый! Задумайтесь. Е...   Jan 15 2016, 07:47
|- - mantech   Цитата(ViKo @ Jan 15 2016, 10:47) У вас к...   Jan 15 2016, 08:32
|- - Денис555   Цитата(ViKo @ Jan 15 2016, 11:47) У вас к...   Jan 15 2016, 08:57
|- - ViKo   Цитата(Денис555 @ Jan 15 2016, 11:57) Да ...   Jan 15 2016, 09:17
|- - Денис555   Цитата(ViKo @ Jan 15 2016, 13:17) Доступ ...   Jan 15 2016, 10:15
- - ViKo   Сама латентность не уменьшится с понижением тактов...   Jan 15 2016, 10:18
- - scifi   Не проще ли запустить этот код из ITCM RAM? Оно та...   Jan 15 2016, 10:24
- - Денис555   Это хорошая идея. Спасибо! Буду рыть информаци...   Jan 15 2016, 11:18
- - Денис555   Всем спасибо! Проблема решилась. Все импульсы ...   Jan 16 2016, 16:51


Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 00:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01401 секунд с 7
ELECTRONIX ©2004-2016