Dec. 6th, 2017

eddy_em: (Default)
Второй вечер вожусь с эмуляцией EEPROM во флеш-памяти STM32F0. Раньше как-то не парился, и стирал страницу каждый раз, как менял настройки. Теперь решил поаккуратней сделать. Завел новую директорию Snippets в репозитории на гитхабе.
Работает очень просто: начиная с заданного адреса (я выделяю последнюю, с номером 15) выделяется одна килобайтная страница. По команде сохранения ищется первая пустая ячейка и в нее записываются данные; если все пустые ячейки кончились, страница стирается и процесс начинается с нулевого индекса. Для чтения настроек процесс проходит аналогично: ищем первую пустую запись, возвращаем индекс предыдущей; если индекс неотрицательный (-1 означает девственно чистую флеш, -2 — повреждение данных), memcpy записывает в текущий конфиг данные из флеша, если же индекс отрицательный, оставляется дефолтное значение конфига.

Потихоньку клепаю прошивку ММФП. Пока что отлаживаю на девборде китайской, как будет более-менее похоже на рабочий код, прошью чипы в платах системы управления.
eddy_em: (Default)
Пытаюсь измерять температуру чипа и уровень напряжения Vdd (по Vrefint). Фигня какая-то получается. Судя по даташиту, температуру измерять так надо:
int32_t temperature = ((int32_t) *TEMP30_CAL_ADDR - ADC_array[6]); // 16 канал АЦП
temperature *= (int32_t)(1100 - 300); // с десятыми долями
temperature = temperature / (int32_t)(*TEMP30_CAL_ADDR - *TEMP110_CAL_ADDR);
temperature += 300;

И фигвам! Показания 16 канала скачут так сильно, что вычисленная таким образом температура то 50°C показывает, то 60! При том, что сам чип едва теплый.
Аналогично с Vdd: т.к. к 17 каналу прицеплено опорное напряжение, измеряя его, можно понять значение Vref (у меня оно совпадает с Vdd):
uint32_t vdd = ((uint32_t) *VREFINT_CAL_ADDR) * (uint32_t)33;
vdd /= ADC_array[7];

Здесь тоже скачут цифры, и мне показывает то 3.3В, то вообще 3.6В…

Тут до меня дошло: МК питается от внутреннего источника преобразователя на PL2303.
Подключил к USB, чтобы питание с набортной "кренки" шло. Стабильно 3.2..3.3В. Температура тоже нормальная: 32..34°C, без таких диких бросков.
То ли питания нормального не хватало от PL2303, то ли этот ее внутренний LDO так шумит, что АЦП офигевает!

October 2025

S M T W T F S
   1234
567 89 1011
121314 15161718
19202122232425
2627 28293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 6th, 2026 03:39 pm
Powered by Dreamwidth Studios