наносекунд задержка

Фил 333
Пт 12 мая 2017 г. 8:31
Привет, ребята!

Сегодня я собираюсь немного протестировать свой Maple Mini с моим осциллографом с Arduino IDE.
Если я хочу проверить скорость поста, это устройство может дать высокие и низкие уровни, как я могу это сделать?
Я знаю функцию DelayMicroseconds (), но есть ли что -то более быстрое, например, DelesNanoSeconds () или что -то подобное, что я могу использовать ?

В качестве вывода я хочу использовать PIN3 / PB0, так как он способен генерировать ШИМ и должен быть достаточно быстрым, используя что -то подобное: GPIOA_Control_low = (uint32_t *)0x40010800; //assign start address to point to

Стивестронг
Пт 12 мая 2017 г. 8:34
Вы читали эта ветка?

Фил 333
Пт 12 мая 2017 г. 11:36
Теперь у меня есть, но я не понимаю : D

Стивестронг
Пт 12 мая 2017 г. 12:02
Phil333 написал:Сегодня я собираюсь немного протестировать свой Maple Mini с моим осциллографом с Arduino IDE.
Если я хочу проверить самую быструю скорость, это устройство может дать высокие и низкие уровни, как я могу это сделать?

Racemaniac
Пт 12 мая 2017 г. 12:07
Сколько таких сигналов вам нужно? Если это всего лишь 1 или 2 контакта, настройка передачи SPI DMA будет самой быстрой :) (злоупотребляя булавкой для моси для этой цели :) ). Затем наступает манипулирование портом через регистры & Память в память DMA, как упоминалось в этом потоке :)

Фил 333
Пт 12 мая 2017 г. 12:38
Мне просто нужен один вывод, чтобы сделать некоторое измерение скорости с помощью осциллографа.

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

Насколько я понимаю, я могу использовать что -то вроде этого: GPIO_InitStruct.Pin = my_pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLDOWN; HAL_GPIO_Init(my_pin_Port, &GPIO_InitStruct);

Racemaniac
Пт 12 мая 2017 г. 12:51
Какую скорость вы надеетесь получить? Вы можете проверить этот код, он, вероятно, переключится на штифт на скорости нескольких МГц.
Вы можете вставить некоторые инструкции NOP, чтобы замедлить его:
__Nop ();

Стивестронг
Пт 12 мая 2017 г. 13:11
Не было бы проще настроить таймер для генерации сигнала?

Фил 333
Пт 12 мая 2017 г. 13:13
Я надеюсь получить возможную скорость поста, чтобы проверить, насколько быстро она может получить, и может ли осциллограф измерить ее :)

Я проверил свой код выше и получил скорость ~ 36,2 МГц.
Все более быстро?

Я прикреплю его скриншот (я знаю, что мой осциллограф переигрывает, но эй... это было всего 200 € : D )
pic_25_1.jpg
PIC_25_1.JPG (100.56 киб) просмотрено 2293 раза

Racemaniac
Пт 12 мая 2017 г. 13:29
тьфу, я надеялся, что неак. Инструкция NOP - это инструкция, которая ничего не делает и занимает ровно 1 часовой цикл :). Поиск форума немного о том, как получить работу NOP :).

Если он уже делает 36 МГц, то это довольно хорошо, длинная задержка между прыжком, который делается для петли.
быстрее, чем 36 МГц невозможно, так как ваш процессор работает на 72 МГц, и ему понадобится 1 Clockcycle, чтобы включить штифт, и один цикл, чтобы снова его выключить :).

Если вы хотите непрерывный импульс, как кто -то упомянул, попробуйте использовать таймер, чтобы переключить булавку и посмотреть, как быстро это может пойти :).

AG123
Пт 12 мая 2017 г. 14:42
Ого, не понял, что «квадратная» волна на 36 МГц выглядит как волнистый импульс на 36 МГц. APB1 работает на Max72 МГц, вы, возможно, выделили, что возможно, если только ERM не разгоняет его :ржу не могу:

Эдогальдо
Пт 12 мая 2017 г. 16:24
Я думаю, что это может ускорить все больше: void loop() { pinMode(PA0,INPUT_PULLDOWN); Serial.println("Down "+String(analogRead(PA0))); pinMode(PA0,INPUT_PULLUP); Serial.println("Up "+String(analogRead(PA0))); }

Фил 333
Пт 12 мая 2017 г. 18:04
Поскольку вы, ребята, в этом материалах, я сделал еще несколько скриншотов, сравнивая методы:
pinMode(PA0, INPUT_PULLUP); // activates the internal pull-up resistor uint8_t val = digitalRead(PA0); // will give you high, "1", true

Фил 333
Пт 12 мая 2017 г., 18:42
PS: мой arduino uno (5 В 16 МГц) может идти быстрее по сравнению с тем, какова его частота... Я получаю 16 МГц (16,5 МГц, чтобы быть правдой) импульсы...
0001.jpg
0001.JPG (115.24 киб) просмотрено 431 раза

AG123
Пт 12 мая 2017 г., 19:00
в платформах.TXT в линии компиляции G ++ и GCC вместо -OS (оптимизируйте размер) изменить его на опцию -O2 (оптимизирование больше), давайте посмотрим, где он получает :ржу не могу:

Другой способ развернуть петли E.глин. Но вы получите быстрые и медленные шипы, и если вы в сочетании с -O2 конечный результат может быть непредсказуемым, E.глин. Компилятор может «решить» сделать оба 1 сначала, а затем сделать оба 0. Конечно, вы также могли бы развернуть петлю много раз, но вы получите быстрый, быстрый, быстрый, быстрый ... медленно (в курсе)

Тогда есть проницательные уловки GCC, чтобы настроить прогноз филиала
http: // блог.человек.Org/2012/10/How-Much-D ... y-and.HTML

Конечная оптимизация, которую может сделать GCC / G ++, заключается в том, что она «решает», что все те вещи, которые вы делаете, не имеют смысла и * удаляют их
:ржу не могу:
void main() { init(); setup(); while (1) loop(); }

Пито
Пт 12 мая 2017 г. 20:04
https: // github.com/olivilik/stm32f103/w ... rial3_gpio
Олли здесь активен..