![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
adnega
Свой-
Постов
3 594 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Весь контент adnega
-
Смущает (т.к. G070): вроде, страница 2 кБ и писать нужно по 8 байт Я так понял, что там ECC, поэтому дозаписывать в пределах 8 байт уже не получится. Ну и про 8, 16 бит явно написано, что будет ошибка. И отсутствие выравнивания на границу двойного слова (8 байт) - тоже ошибка.
-
Да, т.к. указатель на DWORD, то скакать будет по 8 байт. Я сравниваю записанные данные с источником. Если записалось не то, что записывали, то выход с ошибкой. У вас RCC_AHBENR_FLASH в RCC->AHBENR установлен?
-
У меня на этом камне такой код работает (правда, у меня в библиотеке номер бита, а не маска). //----------------------------------------------------------------------------- // int flash_write(const void *dst, const void *src, const DWORD size) //----------------------------------------------------------------------------- int flash_write(const void *dst, const void *src, const DWORD size) { DWORD *w_dst = (DWORD *)dst; DWORD *w_src = (DWORD *)src; if(FLASH->CR & (1 << FLASH_CR_LOCK)) { FLASH->KEYR = KEY1; FLASH->KEYR = KEY2; } while(FLASH->SR & (1 << FLASH_SR_BSY1)); FLASH->SR = 0 | (1 << FLASH_SR_OPERR) | (1 << FLASH_SR_PROGERR) | (1 << FLASH_SR_WRPERR) | (1 << FLASH_SR_PGAERR) | (1 << FLASH_SR_SIZERR) | (1 << FLASH_SR_PGSERR) | (1 << FLASH_SR_MISSERR) | (1 << FLASH_SR_FASTERR) | (1 << FLASH_SR_OPTVERR); for(int i = 0; i < size / sizeof(DWORD) / 2; i++) { FLASH->CR = (1 << FLASH_CR_PG); w_dst[0] = w_src[0]; w_dst[1] = w_src[1]; while((FLASH->SR) & (1 << FLASH_SR_BSY1)); if((w_dst[0] != w_src[0]) || (w_dst[1] != w_src[1])) return FLASH_RESULT_ERROR; w_dst += 2; w_src += 2; } return FLASH_RESULT_OK; } //----------------------------------------------------------------------------- // void flash_erase(const DWORD start, const DWORD size) //----------------------------------------------------------------------------- void flash_erase(const DWORD start, const DWORD size) { if(FLASH->CR & (1 << FLASH_CR_LOCK)) { FLASH->KEYR = KEY1; FLASH->KEYR = KEY2; } while(FLASH->SR & (1 << FLASH_SR_BSY1)); FLASH->SR = 0 | (1 << FLASH_SR_OPERR) | (1 << FLASH_SR_PROGERR) | (1 << FLASH_SR_WRPERR) | (1 << FLASH_SR_PGAERR) | (1 << FLASH_SR_SIZERR) | (1 << FLASH_SR_PGSERR) | (1 << FLASH_SR_MISSERR) | (1 << FLASH_SR_FASTERR) | (1 << FLASH_SR_OPTVERR); for(int i = (start / FLASH_PAGE_SIZE); i < ((start + size) / FLASH_PAGE_SIZE); i++) { FLASH->CR = (1 << FLASH_CR_PER) + (i << FLASH_CR_PNB); FLASH->CR = (1 << FLASH_CR_PER) + (i << FLASH_CR_PNB) + (1 << FLASH_CR_STRT); while(FLASH->SR & (1 << FLASH_SR_BSY1)); } } У вас тут FLASH->CR |= (62<<FLASH_CR_PNB_Pos); // Задаем её адрес точно нули в регистре, чтобы без очистки биты только устанавливать?
-
SIM800 GET AT+HTTPREAD
adnega ответил MiklPolikov тема в Сотовая связь и ее приложения
В документации пример передачи параметров на сервер через POST. -
Требуется внимательность в квадрате, ибо таблица не полная, а поэтому не Y = X2, а Y = X2 * ~X3
-
Y1 = (~X1 * X2 * ~X3) + (X1 * X2 * ~X3) - т.е. элемент ИЛИ у вас должен быть двухвходовый, а не трехвходовый. и можно упростить до Y1 = X2 * ~X3.
-
У AND3(inst1) первый вход pin1, а второй ~pin1. Это всегда 0 - поэтому не имеет смысла, и значит у вас где-то ошибка.
-
c чего начать?
adnega ответил тема в В помощь начинающему
Я вас уже третий раз прошу ответить по теме: что именно заказали? -
c чего начать?
adnega ответил тема в В помощь начинающему
Дык, это замечательно! Может, ваш выбор кому-то поможет, например, мне. -
c чего начать?
adnega ответил тема в В помощь начинающему
А что именно, если не секрет? -
c чего начать?
adnega ответил тема в В помощь начинающему
Сам столкнулся с похожей проблемой: хочу показать программирование МК ребенку, у меня железок разных много, а так, чтобы как в детстве - пережигать галетником РЕ3 - ничего толком и нет. Самое близкое к тому, что бы я хотел - делает Ben Eater - советую посмотреть, если с английским нет проблем. Кста, озвучьте максимальный бюджет, чтоб примерно понимать, что советовать. -
У меня есть партия плат от Резонита, где маска имеет размер такой же как и заливка медью. Косяк мой, но Резонит изготовил явный брак не связавшись с разработчиком. Прекрасно понимаю ваши чувства, но это жизнь. JLCPCB с вами очень вежливы, я после разговора с начальником отдела качества Резонита еще неделю ходил обтекал. С тех пор всегда изучаю гербера перед отправкой кому-либо, и считаю это нормой.
-
Наконец-то появилось описание Two wire Automotive Interface (TWAI) в документации версии 4.4
-
МК для изучения выбран не очень популярный. По STM32 информации много, например, "Мартин М. Инсайдерское руководство по STM32". Из Cortex-M-книг я бы рекомендовал "Джозеф Ю. Ядро Cortex-M3 компании ARM. Полное руководство". ТС, опишите что именно вы изучаете и зачем? Почему asm, а не Си? Почему именно K1986BE92QI? Какой у вас вообще уровень в программировании?
-
Так можно передать значения для 32-битного регистра непосредственно в команде. Видимо, опечатка. Или это порт E, или младшие 16 бит должны быть нулевые. ASM принципиально нужен? На Си все гораздо проще.
-
Определение 1/6 числа
adnega ответил Valek87 тема в Языки проектирования на ПЛИС (FPGA)
Неделю назад делал эмулятор советских УМС на тини10 по этому алгоритму. Не думаю, что для FPGA вычитание числа будет существенной растратой ресурсов, только если там не тысячи подобных каналов и/или не огромные частоты работы. -
Определение 1/6 числа
adnega ответил Valek87 тема в Языки проектирования на ПЛИС (FPGA)
Может, вместо count2 <= 0; правильнее count2 <= count2 - count1; ? -
Подскажите логическую микросхему
adnega ответил MiklPolikov тема в В помощь начинающему
У большинства управление активным нулем. Для формирования фронта, возможно, потребуется дополнительная обвязка. У большинства управление активным нулем. Для формирования фронта, возможно, потребуется дополнительная обвязка. 74LVC1G74DP,125, Одиночный D-триггер [TSSOP-8] [SOT-505] NL17SZ74USG, Один D-триггер с установкой и сбросом, [US-8] -
Подскажите логическую микросхему
adnega ответил MiklPolikov тема в В помощь начинающему
Вроде, это обычный RS-триггер. Насколько маленьким должно быть решение? SO-14 пойдет? -
AVR STudio
adnega ответил Ilya_2006 тема в MCS51, AVR, PIC, STM8, 8bit
Попробуйте Ctrl+L (вырезать строку), Ctrv+V (вставить) -
Я на вход АЦП для сигналов с большим выходным сопротивлением ставлю керамику 100нФ на землю.
-
Китайский Sim800L
adnega ответил bingo тема в Сотовая связь и ее приложения
-
Китайский Sim800L
adnega ответил bingo тема в Сотовая связь и ее приложения
UDP передается поверх IP, а ICMP это даже не IP. ICMP это очень богатая сущность, а не только ping. -
Китайский Sim800L
adnega ответил bingo тема в Сотовая связь и ее приложения
Это не принудительная блокировка, а свойство ограниченности диапазона IP-адресов. Когда модуль соединяется с сервером по TCP ему выдают не IP-адрес, а пару IP-ПОРТ (сокет). Оператор маршрутизирует пакеты, приходящие на этот сокет (IP-ПОРТ) до вашего модуля. На соседнем порту этого же IP-адреса может быть совершенно другое соединение для совершенно случайного клиента. Возможно, раньше выдавали временный IP-адрес вместо пары IP-ПОРТ - поэтому могло и работать. Если AT+CIFSR выдает IP, который отличается от того, с которого вам прилетает соединение на сервер (и скорее всего, он будет какой-нить 10.х.х.х), то с большой долей вероятности (скорее, 100%) соединения у вас будут через NAT.