Интересное на AliExpress и других маркетплейсах

вопрос как её вообще использовать)))

Блюпилы с 256к я не видел. Но с 128к вместо 64 - обычное дело. На них реально доступно более чем 64к.
Например известный генератор Димакса имеет размер кода, рассчитанный именно на такие “увеличенные” блюпилы, в 64к он не помещается.

Если Вас не сильно затруднит и программа действительно небольшая по объему, можете написать такую программу? Сам я не умею пока…
Я проверил бы - полезно для многих.

Самая простейшая программа - это чтение. Для чтения flash никакие особенные приемы не требуются.
Но предварительно можно что-то туда записать. Вот на скорую руку:

Спойлер
// попытка чтения flash выше 0x8002000+0x1e000=0x8020000 приводит к зависанию, до этого читается "255"
//#include "arr44k.c"
#include "arr100k.c"

byte aRAM[8] = {0,1,2,3,4,5,6,7};
const byte aFLASH[8] = {8,9,10,11,12,13,14,15};

int ledState = LOW;             // ledState used to set the LED
unsigned long previousMillis = 0;        // will store last time LED was updated
const long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(115200);
  while(!Serial);
  Serial.print("Setup:  ");
  Serial.print((uint32_t)setup, HEX);
  Serial.print(", ");
  Serial.println((uint32_t)setup - 0x8002000);
  Serial.print("aRAM:   ");
  Serial.print((uint32_t)aRAM, HEX);
  Serial.print(", ");
  Serial.println((uint32_t)aRAM - 0x20000000);
  Serial.print("aFLASH: ");
  Serial.print((uint32_t)aFLASH, HEX);
  Serial.print(", ");
  Serial.println((uint32_t)aFLASH - 0x8002000);
  int n_succ = 0, n_fail = 0;
  uint32_t t0 = millis();
//  for(int i = 0; i < size_arr44k; i++) {
//    if(arr44k[i] == i)
  for(int i = 0; i < size_arr100k; i++) {
    if(arr100k[i] == i)
      n_succ++;
    else
      n_fail++;
  }
  uint32_t t1 = millis();
  Serial.print("Test results: success: ");
  Serial.print(n_succ);
  Serial.print(", fail: ");
  Serial.print(n_fail);
  Serial.print(", elapsed time: ");
  Serial.println(t1-t0);
}

void loop() {
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
//    ledState = !ledState;
    digitalWrite(LED_BUILTIN, ledState = !ledState);
  }
  if(Serial.available()) {
    char ch = Serial.read();
    if(ch == 'd') {
      int n = Serial.parseInt();
      Serial.println(n, HEX);
      for(int i = 0; i < 16; i++) {
        byte* b = (byte*)(n + i + 0x8002000);
        Serial.print(*b);
        Serial.print(' ');
      }
      Serial.println();
    }
  }
}

Так всё уже написано. И даже с примерами. Arduino_Core_STM32/libraries/EEPROM at main · stm32duino/Arduino_Core_STM32 · GitHub

Тут вот мне реклама свалилась:

На склад поступили 32-разрядные микроконтроллеры CH32 на основе ARM Cortex-M3 и RISC-V, являющиеся аналогами и альтернативой семейству STM32.

Микроконтроллеры CH32 китайского производителя Nanjing Qinheng Microelectronics (WCH) являются микроконтроллерами общего назначения, предназначенными для промышленного применения.

Это что-то типа STM-совместимого вавгада будет?

на http://forum.easyelectronics.ru/
были статьи/примеры, в массе своей практически полные аналоги stm32, по наименованиям регистров полное совпадение. Но как всегда есть нюансы, например работа с flash. Для обычных, не высоконагруженных, применений разницы нет.

похоже все как обычно

Уж если разбираться с китайскими МК, то не с подделкой под СТМ, а с чем-то новым, например:


https://aliexpress.ru/item/1005003642384575.html

При цене 160-200р тут есть БТ и Вайфай. К чипу есть несколько СДК разной степени кривости, в том числе и для ардуино.

1 лайк

Конкурент ESP32?

До этого очень далеко.
У 801-ого есть старший брат (старший по времени появления, не по возможностям), - W806 , такая же плата но без БТ и вайфая. К нему есть некая зачаточная поддержка для ардуино… Мы тут с одним мужиком из инета попытались туда кое-что дописать… но не очень пока выходит.

Для меня не так интересн сам контроллер, как процесс его изучения
Вообще темка занятная, если есть интерес, можно отдельную ветку открыть.

есть сложности, в частности работа с USB.
кстати вот они в формате синих таблеток, занятно, два тайп си))
https://aliexpress.ru/item/1005003649793380.html

ко мне эти едут
https://aliexpress.ru/item/1005005008156898.html
в заголовке написано оригинал, в описании CH, посмотрим/потестим.

не СН, а CS, это разные производители.
мля, наплодили китайцы конечно всякого говна немеряно.

Вот что у меня с этим получилось:
С генерировал arr100k.c файл. Из Ардуино ИДЕ с выставленным контроллером на 128кб все 119200 байт залетели “без шуму и пыли”. При загрузке обратил внимание, что Ардуино ИДЕ контроллер тоже определила с 256кб flash-памяти.

Попытка превысить 128кб rom привела к ошибке на этапе компиляции (видать в настройках где-то указано, что максимум 128кб и точка).

Вот только прочесть не получилось - у меня ST-Link v2 китайский и как через него serial monitor запустить я не сообразил. Пробовал через утилиту ST-Link - тоже тишина (там указывается частота тактирования контроллера, указал 72000000).
Когда за комментировал while(!Serial); диод на PC13 начал моргать нормально (в коде я подправил и указал, что диод на PC13).

Тогда чтобы точно убедиться - нужно прочитать память. А для этого нужно как-то serial monitor “запустить”. Как-то с ST-Link это можно сделать?

Прошивка у линка должна быть сом портом. И если есть ст-линк то можно им писать и читать память.

А как это сделать?

В поле адрес пишешь где проверить и сколько. После таргет–коннект или прочитает или даст ошибку. Также при записи можно указать адрес начала записи.

1 лайк

в инете есть статьи - припаять провод с рабочего МК на вход SWIM чипа ST-Link, тогда будет доступен вывод в порт debug stm32. (сам не пробовал, лень, проще или USB настроить или любой другой UART).

Доработка китайского ST-Link v2: добавляем интерфейс вывода отладочной информации SWO и ногу Reset / Хабр (habr.com)

Keil запускается на китайцах ? Если да, то через отладчик Keil можно заглянуть в любую область адресного пространства !