Согласен, но только со стабильностью. С остальным - нет.
Аргументы - а зачем нам высокая стабильность? Часы делать на этом генераторе мы не будем, синтезом четких времянок типа видеосигнала - тоже заниматься не будем (пока). Поэтому смысла во внешнем кварце пока не вижу... А качество таймингов HSI вполне применимы для 99% применений. Это мое мнение
Виктор, еще раз посмотри визуальный построитель в Экселе.
Я использую HSI, 16Мгц, далее сигнал идет на PLL, где он умножается на 3 (получаем те же 48Мгц) и делим на 2, получаем 24Мгц. Эта частота уже расходится по АНВ (ядро, порты) и по АРВ1-2 (таймеры, RS-232, IIC...), а также через делитель на 8 создается клок 24000000/8=3000 кГц для системного таймера systick, который не периферийный таймер, а просто "тикалка", типа МультиМедиаТаймера для Винды, он удобен своей простотой для отсчета времянок внутри программы, например, для функции задержки выполнения программы. Я вкратце упоминал уже про него. Но пока не заморачивайся на нем.
---------- Post added at 22:03 ---------- Previous post was at 22:01 ----------
А я сейчас прицепляю индикатор WH1602 к демоплате.
Накопал библиотеку для работы с этим дисплейчиком, слегка перелопатил код для нашего примения и нашего чипа, сижу, паяю проводки
---------- Post added at 22:26 ---------- Previous post was at 22:03 ----------
Сейчас попробую это развернуто объяснить. Сначала это вызывает ступор, но потом привыкаешь и щелкаешь как двоичную арифметику. Пишу...
---------- Post added at 22:43 ---------- Previous post was at 22:26 ----------
Напишу на примере привычного байтового 8-битного представления. Просто для лёгкости и ради привычности.
Придумаем свою команду, похожую по синтаксису на СТМ32-овскую.
GPIOB->PORT |= PIN_6 | PIN_7;
Похоже?
Разбираем.
Порт В имеет свой адрес, число. Его "функция" PORT - это содержимое этого порта.
После включения питания на чип он как правило имеет во всех разрядах нули.
Т.е., GPIOB->PORT равно 0х00000000.
Заранее описанные мнемоники PIN_6 и PIN_7 - это просто числа... Можно посмотреть их значение в файлах типа stm32lxx.h.
Но у нас своя, выдуманная мнемоника.
Будет логичным присвоить значения 0х01000000 для PIN_6 и 0х10000000 для PIN_7.
Для восьмибитного порта это единички в соответствующих разрядах.
Дальше пошла обычная двоичная арифметика.
Что произойдет после выполнения описанной выше команды?
К содержимому порта (0х00000000) будет арифметическое ИЛИ двух чисел:
0х00000000
0х10000000
0х01000000
-----------
0х11000000 - результат. Т.е., на пинах 6 и 7 порта появятся единички.
Теперь, нам нужно "погасить" единичку в разряде 7, к примеру.
Как нам это сделать, не затронув прочие биты порта?
В языке С принято делать так - берем значение всего порта, и логическим И сбрасываем нужный битик.
Выглядит это так:
GPIOB->PORT &= ~PIN_7;
Т.е., мы берем ту же мнемонику PIN_7, инвертируем ее (значок ~), и делаем побитовое И с содержимым порта.
По шагам:
0х10000000
инвертируем командой ~
0х01111111
и делаем И с содержимым порта:
0х11000000 - порт
0х01111111 - инвертированное PIN_7
-----------
0х01000000 - результат. Бит 7 погашен, бит 6 остался, что нам и требовалось.






ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Ответить с цитированием