вопрос как её вообще использовать)))
Блюпилы с 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р тут есть БТ и Вайфай. К чипу есть несколько СДК разной степени кривости, в том числе и для ардуино.
Конкурент 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 это можно сделать?
Прошивка у линка должна быть сом портом. И если есть ст-линк то можно им писать и читать память.

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

у меня ST-Link v2 китайский и как через него serial monitor запустить я не сообразил
в инете есть статьи - припаять провод с рабочего МК на вход SWIM чипа ST-Link, тогда будет доступен вывод в порт debug stm32. (сам не пробовал, лень, проще или USB настроить или любой другой UART).
Keil запускается на китайцах ? Если да, то через отладчик Keil можно заглянуть в любую область адресного пространства !