STM32 Blue pill RTC

А твой прибор моет показать 2 микроампера ???

1 лайк

Я заказал у другого. Жду.

ко мне вопрос? сомневаюсь уже что прибор чует такие токи.

Update: Да, мне нужен более чувствительный приборчик.

The RTC is designed to minimize the power consumption: the Real-Time Clock functionality only adds typically 300nA to the current consumption.
The RTC keeps working in reset mode and its registers are only reset by a VBAT power-on, if it has previously been powered off. As the RTC register values are not lost after a system reset, the calendar keeps the correct time and date until VDD and VBAT power down.

А зачем тебе время, если нет питания? Или ты на пассивных ЖК отображаешь - без подсветки?

Я собираюсь отображать на панели P10, которая весит на улице, и включать ее будут, в рабочие часы. Ночью работать не будет.

А что за часы? Мой проект часов на СТМ и Р10 видели?

Я ваш проект не видел, но библиотеку вашу использую. Подскажите, а в ней есть возможность выравнивания по правому краю ?

В одно действие не помню такого, но в два точно можно.
Вы можете вычислить длину Вашего текста для текущего фонта в пикселях методом:

stringBounds()

и подобрать такое стартовое Х, чтобы конец строки был на выбранной координате

Вот так сделал.
byte positio = (DISPLAYS_ACROSS*32)- dmd.stringWidth(message.c_str(), message.length())

Пришли мне 2 Blue pill
Одна на STM32F103T6
Вторая CH32F103T6
С потреблением у них все в порядке, тестором не смог замерить, т.е. меньше 1 ма
Теперь разница между чипами.
STM32 прошивается мгновенно CH32 тупит очень сильно.
Для примера bootloder (generic_boot20_pc13.bin)
STM - 2 сек, CH - 33сек


Залил скейтч dmd_monochrome в CH работает, но с тормозами , аж глаза болеть начинают от моргания.
Возник вопрос, это только у меня такое CH или у всех так работает. ???

Надо знатоков STM32 подождать, но если бы подобное было на AVR - я бы сказал, что тактовая низкая у CH.

Я не заметил разницы в работе между CH STM32, да, CH прошивается сильно медленнее.

CH мне не попадалось, не пробовал.
GD32 работает с dmd так же, как STM

Если рассуждать абстрактно, то на самом деле именно так и проявляется разница между оригиналом и клоном… или между хорошим и плохим клоном.
Типа все совместимо, но иногда работает не так.

Как запросить тактовую частоту ?

в чипе? думаю никак, баловаться настройками тактовых генераторов и зажеч светодиодик в зависимости от выставленной частоты.
Или таймер какой нибудь вывести делителем наружу частоту и смотреть осцилографом.
При старте встроенный генератор запускается на 8 МГц насколько я помню, а если на 72 МГц не удается запуститься, то так на пониженной и дальше работает.

я так запускаю (не Arduino IDE)

Спойлер
/*http://dimoon.ru/obuchalka/stm32f1/uroki-stm32f103-chast-4-nastroyka-rcc.html?ysclid=leflwcqmz5475683246*/
//Настраиваем тактирование системы от внешнего кварца
//через PLL на саксимально возможных частотах.
//Внешний кварц должен быть на 8МГц
//Возвращает:
//  0 - завершено успешно
//  1 - не запустился кварцевый генератор
//  2 - не запустился PLL
int ClockInit(void) {
  __IO int StartUpCounter;
  ////////////////////////////////////////////////////////////
  //Запускаем кварцевый генератор
  ////////////////////////////////////////////////////////////
  RCC->CR |= RCC_CR_HSEON; //Запускаем генератор HSE
  //Ждем успешного запуска или окончания тайм-аута
  for(StartUpCounter=0; ; StartUpCounter++) {
    //Если успешно запустилось, то
    //выходим из цикла
    if (RCC->CR & RCC_CR_HSERDY) break;
    //Если не запустилось, то
    //отключаем все, что включили
    //и возвращаем ошибку
    if (StartUpCounter > 0x1000) {
      RCC->CR &= ~RCC_CR_HSEON; //Останавливаем HSE
      return 1;
    }
  }
  ////////////////////////////////////////////////////////////
  //Настраиваем и запускаем PLL
  ////////////////////////////////////////////////////////////
  //Настраиваем PLL
  RCC->CFGR |= RCC_CFGR_PLLMULL_0 | RCC_CFGR_PLLMULL_1 | RCC_CFGR_PLLMULL_2;  //PLL множитель равен 9 // 0111: PLL input clock x 9
  RCC->CFGR |= RCC_CFGR_PLLSRC_HSE; //Тактирование PLL от HSE
  RCC->CR |= RCC_CR_PLLON; //Запускаем PLL
  //Ждем успешного запуска или окончания тайм-аута
  for(StartUpCounter=0; ; StartUpCounter++) {
    //Если успешно запустилось, то
    //выходим из цикла
    if (RCC->CR & RCC_CR_PLLRDY) break;
    //Если по каким-то причинам не запустился PLL, то
    //отключаем все, что включили
    //и возвращаем ошибку
    if (StartUpCounter > 0x1000) {
      RCC->CR &= ~RCC_CR_HSEON; //Останавливаем HSE
      RCC->CR &= ~RCC_CR_PLLON; //Останавливаем PLL
      return 2;
    }
  }
  ////////////////////////////////////////////////////////////
  //Настраиваем FLASH и делители
  ////////////////////////////////////////////////////////////
  //Устанавливаем 2 цикла ожидания для Flash
  //так как частота ядра у нас будет 48 MHz < SYSCLK <= 72 MHz
  FLASH->ACR |= FLASH_ACR_LATENCY_1; // 010 Two wait states, if 48 MHz < SYSCLK ≤ 72 MHz
  //Делители
  RCC->CFGR &= ~RCC_CFGR_PPRE2; //Делитель шины APB2 отключен // 0xx: HCLK not divided
  RCC->CFGR |= RCC_CFGR_PPRE1_DIV2; //Делитель нишы APB1 равен 2 // 100: HCLK divided by 2
  RCC->CFGR &= ~RCC_CFGR_HPRE; //Делитель AHB отключен // 0xxx: SYSCLK not divided
  RCC->CFGR &= ~RCC_CFGR_SW; //Переключаемся на работу от PLL // 10: PLL selected as system clock
  RCC->CFGR |= RCC_CFGR_SW_1; //Переключаемся на работу от PLL // 10: PLL selected as system clock
  //Ждем, пока переключимся
  while(!(RCC->CFGR & RCC_CFGR_SWS_1));
  //После того, как переключились на
  //внешний источник такирования
  //отключаем внутренний RC-генератор
  //для экономии энергии
  //RCC->CR &= ~RCC_CR_HSION; // При отключенном HSI Или его частоте выше 24 МГц не работает запись/стирание FLASH пользовательской памяти!!!
  //Настройка и переклбючение сисемы
  //на внешний кварцевый генератор
  //и PLL запершилось успехом.
  //Выходим
  return 0;
}
1 лайк

не, там должна быть HAL-функция для запроса частоты… но вот какой? В СТМ32 этих частот много

Проще всего либо вывести выход таймера на пин, как уже сказали, либо задать интервал побольше, несколько секунд или минут - и засечь по секундомеру, сколько там будет на самом деле.

При всем уважении, верить кал функциям так себе…
Включение / работоспособность функциональных блоков МК можно только по состояния регистров определить.

Можно подумать, что HAL берет информацию из астрала… из тех же регистров и берет.

Вопрос в качестве, одно дело “на коленке” с помощью hal проверить работоспособность периферии и совсем другое писать на нашем в продакшн и проверять реальное состояние чипа. Впрочем дело вкуса.

На Ch32 отказался работать датчик температуры DS18B20.
Выяснил что не правильно работает функция
delayMicroseconds(500);


Видно что в 2 раза меньше. Поэтому и P10 притормаживает.
Может при компиляции не верна настраивается частота для CH32 ?
А вот delay(500) отрабатывает четко.