Easyelectronics.ru

Электроника для всех
Текущее время: 19 сен 2018, 20:07

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Самописный бутлоадер для F103
СообщениеДобавлено: 10 июл 2018, 20:48 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 328
Откуда: г.Таганрог/г.Геленджик/г.Одесса
Всем привет.
Возникла потребность написать бутлоадер для F103 камня. Для начала решил понять, как оно все должно работать и организовал переход по адресам памяти между бутлоадером и основной программой и обратно (мне необходимо иметь возможность попадать туда по команде в любой момент без нажатия кнопок и прочих телодвижений). В программе бута запустил таймер, который мигает диодом и выставляет флаг опроса кнопки. По нажатию кнопки осуществляется переход в основную программу. Бутлоадер лежит вначале памяти и в Keil заданы соответствующие сдвиги и объем памяти.

Код:
void Go_To_Programm(void)
{
    uint32_t app_jump_address;
   
    typedef void(*pFunction)(void);
    pFunction Jump_To_Application;

     __disable_irq();

   __set_PRIMASK(1); //запрещаем прерывания

   SCB->VTOR = APPLICATION_ADDRESS;//переносим начало вектора прерываний по указанному адресу

   __set_PRIMASK(0);//разрешаем прерывания*/
      
    app_jump_address = *( uint32_t*) (APPLICATION_ADDRESS + 4);    //извлекаем адрес перехода из вектора Reset
    Jump_To_Application = (pFunction)app_jump_address;            //приводим его к пользовательскому типу
      __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);          //устанавливаем SP приложения                                           
    Jump_To_Application();                              //запускаем приложение   
}

void Go_To_Bootloader(void)
{
    uint32_t app_jump_address;
   
    typedef void(*pFunction)(void);//объявляем пользовательский тип
    pFunction Jump_To_Application;//и создаём переменную этого типа

     __disable_irq();//запрещаем прерывания
   
      __set_PRIMASK(1); //запрещаем прерывания

      SCB->VTOR = BOOTLOADER_ADDRESS;//переносим начало вектора прерываний по указанному адресу

      __set_PRIMASK(0);//разрешаем прерывания   
      
    app_jump_address = *(uint32_t*)(BOOTLOADER_ADDRESS + 4);    //извлекаем адрес перехода из вектора Reset
    Jump_To_Application = (pFunction)app_jump_address;            //приводим его к пользовательскому типу
      __set_MSP(*(__IO uint32_t*) BOOTLOADER_ADDRESS);          //устанавливаем SP приложения                                           
    Jump_To_Application();                              //запускаем приложение   
}


Тут обнаружилась одна особенность. Если в буте есть прерывания, то в основной программе перестает работать SysTick. Если же в буте не использовать прерывания, а сделать то же мигание на SysTick, то основная программа стартует нормально, однако при возврате в бут опять же не стартует SysTick. Очевидно, я что-то делаю неправильно и, видимо, с прерываниями. Хотелось бы услышать совет знатоков.

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 10 июл 2018, 21:52 
Заглядывает иногда

Зарегистрирован: 06 июн 2018, 22:30
Сообщения: 119
Откуда: Киев
Перед переходом, нужно бы сбрасывать все модули МК.
Процесс переключения не в прерывании случайно происходит? Нельзя переключать стеки в прерывании.

это абсолютно одинаковые функции:
__disable_irq();
__set_PRIMASK(1); //запрещаем прерывания


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 10 июл 2018, 23:19 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 4977
BARS_, было уже и неоднократно. Ищи посты alexsam..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 10:51 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 328
Откуда: г.Таганрог/г.Геленджик/г.Одесса
MasterElectric писал(а):
Процесс переключения не в прерывании случайно происходит?.

Нет, из главного цикла, прерывание лишь выставляет флаг опроса кнопки и мигает диодом.

MasterElectric писал(а):
это абсолютно одинаковые функции:

Забыл убрать просто)

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 10:52 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 328
Откуда: г.Таганрог/г.Геленджик/г.Одесса
dosikus_2 писал(а):
Ищи посты alexsam..

Ок, поищу. Спасибо)

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 12:43 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2676
Надо не забыть отключить вообще все, сбросить всё периферию, очистить pending биты NVIC и сбросить Systick. Если используете FreeRTOS то не забыть переключить указатель на стек с psp на msp.
Прыжок с бута в приложение:
Код:
   typedef  void (*pFunction)(void);
   pFunction   Jump_To_Application;
   uint32_t   JumpAddress;

   __disable_irq();      //запрещаем прерывания

   //отключаем все прерывания в NVIC
    NVIC->ICER[0] = 0xFFFFFFFF;
    NVIC->ICER[1] = 0xFFFFFFFF;
    NVIC->ICER[2] = 0xFFFFFFFF;

   //очищаем все pending bit
   NVIC->ICPR[0] = 0xFFFFFFFF;
   NVIC->ICPR[1] = 0xFFFFFFFF;
   NVIC->ICPR[2] = 0xFFFFFFFF;

   //Peripheral reset enable (не трогаем reserved bits)
   RCC->APB1RSTR = 0x3E7EC83F;
   RCC->APB2RSTR = 0x00005E7D;
   //Peripheral  reset disable
   RCC->APB1RSTR = 0;
   RCC->APB2RSTR = 0;
   //Peripheral  disable clock
   RCC->APB1ENR = 0;
   RCC->APB2ENR = 0;

   //вырубаем Systick
   SysTick->CTRL = 0;
   SysTick->VAL = 0;

   RCC_DeInit();

   JumpAddress = *(uint32_t*)(MAIN_APP_ADDR + 4);
   Jump_To_Application = (pFunction) JumpAddress;


   NVIC_SetVectorTable( MAIN_APP_ADDR, 0 );      //перекидываем вектора

   __set_CONTROL(0);
   __set_MSP(*(vu32*) MAIN_APP_ADDR);
   Jump_To_Application();


Основное приложение:
Код:
void main(void)
{
   NVIC_SetVectorTable( MAIN_APP_ADDR, 0 );      //перекидываем вектора
   __enable_irq();      //разрешаем прерывания, т.к. в bootloader-е мы их запретили

   while(1)
   {
      asm("nop");
   }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 13:28 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1723
Откуда: Харьков
Мой бут для 103: https://github.com/saewave/RemoteSwitch ... Src/main.c
Умеет:
проверить наличие новой прошивки во флеше по заданному адресу
проверить ее на CRC32, сама чексумма должна лежать по заданному адресу
перепрошить ее вместо основной прошивки
проверить добротность прошивки на новом месте
прыгнуть в новую прошивку
весело мигать светодиодом
уместится в 1020 байт (что займет одну страницу)
с достоинством умереть если что-то пошло не так :)

В основной программе нужно сдвинуть вектор прерываний:
Код:
#define SAE_START_MEMORY_ADDRESS 0x08000400         //start of programm address
....
#if MOVE_VECTOR_TABLE==1
    SCB->VTOR = SAE_START_MEMORY_ADDRESS;   //Move vector to new address
    __enable_irq();                         //Enable IRQ
#endif


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 13:28 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1723
Откуда: Харьков
Если прыгать обратно в бут - то нужно сдвинуть вектор прерываний обратно как был после резета и как написал выше Hold - отключить вообще все прерывания и делательно всю конфигурацию
А лучше всего тотальный сброс через резет


Последний раз редактировалось alexsam 11 июл 2018, 13:32, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 13:30 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 564
Откуда: Германия
Я делал по другому - для вызова бутлоадера приложение пишет в backup-регистр определенное значение и ресетит систему.
Бутлоадер при старте сначала проверяет backup-регистр и или прыгает на приложение, или начинает свою инициализацию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 15:58 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 июл 2010, 09:54
Сообщения: 176
Откуда: Чебоксары
dev писал(а):
Я делал по другому - для вызова бутлоадера приложение пишет в backup-регистр определенное значение и ресетит систему.
Бутлоадер при старте сначала проверяет backup-регистр и или прыгает на приложение, или начинает свою инициализацию.

Аналогично, пишу определенное значение в виртуальный регистр в RAM и проверяю при старте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 16:47 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 328
Откуда: г.Таганрог/г.Геленджик/г.Одесса
Форумчане, как обычно, радуют быстрыми ответами, за что вам огромное спасибо) Все завелось. Прыгает и туда и обратно. Сброс периферии решил проблему. Плюс в начале каждой программы дописал:
Код:
   __set_PRIMASK(1); //запрещаем прерывания

   SCB->VTOR = ADDRESS;//переносим начало вектора прерываний по указанному адресу

   __set_PRIMASK(0);//разрешаем прерывания*/


Сейчас переходы выглядят так:

Код:
void Go_To_Bootloader(void)
{
    uint32_t app_jump_address;
   
    typedef void(*pFunction)(void);//объявляем пользовательский тип
    pFunction Jump_To_Application;//и создаём переменную этого типа

   __disable_irq();      //запрещаем прерывания

   //отключаем все прерывания в NVIC
   NVIC->ICER[0] = 0xFFFFFFFF;
   NVIC->ICER[1] = 0xFFFFFFFF;
   NVIC->ICER[2] = 0xFFFFFFFF;

   //очищаем все pending bit
   NVIC->ICPR[0] = 0xFFFFFFFF;
   NVIC->ICPR[1] = 0xFFFFFFFF;
   NVIC->ICPR[2] = 0xFFFFFFFF;

   //Peripheral reset enable (не трогаем reserved bits)
   RCC->APB1RSTR = 0x3E7EC83F;
   RCC->APB2RSTR = 0x00005E7D;
   //Peripheral  reset disable
   RCC->APB1RSTR = 0;
   RCC->APB2RSTR = 0;
   //Peripheral  disable clock
   RCC->APB1ENR = 0;
   RCC->APB2ENR = 0;

   //вырубаем Systick
   SysTick->CTRL = 0;
   SysTick->VAL = 0;
   
    app_jump_address = *(uint32_t*)(BOOTLOADER_ADDRESS + 4);    //извлекаем адрес перехода из вектора Reset
    Jump_To_Application = (pFunction)app_jump_address;            //приводим его к пользовательскому типу
      
    __set_MSP(*(__IO uint32_t*) BOOTLOADER_ADDRESS);          //устанавливаем SP приложения                                           
    Jump_To_Application();                              //запускаем приложение   
}

void Go_To_User_App(void)
{
   uint32_t app_jump_address;
   
   typedef void(*pFunction)(void);//объявляем пользовательский тип
   pFunction Jump_To_Application;//и создаём переменную этого типа
   
    __disable_irq();      //запрещаем прерывания

  //отключаем все прерывания в NVIC
   NVIC->ICER[0] = 0xFFFFFFFF;
   NVIC->ICER[1] = 0xFFFFFFFF;
   NVIC->ICER[2] = 0xFFFFFFFF;

   //очищаем все pending bit
   NVIC->ICPR[0] = 0xFFFFFFFF;
   NVIC->ICPR[1] = 0xFFFFFFFF;
   NVIC->ICPR[2] = 0xFFFFFFFF;

   //Peripheral reset enable (не трогаем reserved bits)
   RCC->APB1RSTR = 0x3E7EC83F;
   RCC->APB2RSTR = 0x00005E7D;
   //Peripheral  reset disable
   RCC->APB1RSTR = 0;
   RCC->APB2RSTR = 0;
   //Peripheral  disable clock
   RCC->APB1ENR = 0;
   RCC->APB2ENR = 0;

   //вырубаем Systick
   SysTick->CTRL = 0;
   SysTick->VAL = 0;
         
   app_jump_address = *( uint32_t*) (APPLICATION_ADDRESS + 4);    //извлекаем адрес перехода из вектора Reset
   Jump_To_Application = (pFunction)app_jump_address;            //приводим его к пользовательскому типу

   __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);          //устанавливаем SP приложения                                           
   Jump_To_Application();                              //запускаем приложение   
}


Осталось сделать прием прошивки по UART и раскидывание прошивки по памяти. Еще такой вопрос, вы ПО для отправки HEX на МК сами пишите или есть что-то готовое. Так-то написать прошивальшик буквально час времени, но может нет смысла изобретать велосипед.

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 16:53 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1457
Можно и самому, но таких загрузчиков на github - как у собаки блох.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 17:00 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 328
Откуда: г.Таганрог/г.Геленджик/г.Одесса
Exeland писал(а):
Аналогично, пишу определенное значение в виртуальный регистр в RAM и проверяю при старте.

Мне необходимо чтобы в бутлоадер можно было попасть без перезапуска МК. Грубо говоря - это будет "черный ящик"
в котором будет стоять n-е количество плат с F103, соединенных по RS с основной платой, которая будет общаться с внешним миром по RS485. Соответственно вывести разъем программирования для каждой платы не получится, разбирать блок тоже не вариант. В идеале подключаемся по ЛАН, запускаем прошивальщик и поочередно рассылаем прошивку во все платы. Т.е. надо иметь возможность прошить любую плату не трогая соседние и не передергивая питание.

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 17:00 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 328
Откуда: г.Таганрог/г.Геленджик/г.Одесса
x893 писал(а):
загрузчиков на github - как у собаки блох.

Понял, буду искать)

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 22:16 
Заглядывает иногда

Зарегистрирован: 02 май 2017, 18:54
Сообщения: 91
http://www.avislab.com/blog/stm32-bootloader_ru/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 22:55 
Старожил

Зарегистрирован: 02 ноя 2015, 19:21
Сообщения: 428
Откуда: Санкт-Петербург
BARS_ писал(а):
Еще такой вопрос, вы ПО для отправки HEX на МК сами пишите или есть что-то готовое. Так-то написать прошивальшик буквально час времени, но может нет смысла изобретать велосипед.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 23:12 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1457
Но сначала получить лицензию на цифры, символы и буквы английского алфавита.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 11 июл 2018, 23:36 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 4977
leocat3 писал(а):
http://www.avislab.com/blog/stm32-bootloader_ru/

И что? Что может такого архиважного наляпать сей "гений"? Подобные ресурсы надо блочить ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 12 июл 2018, 09:57 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 ноя 2010, 20:11
Сообщения: 61
Откуда: Омск
Тоже писал самопальный загрузчик для F103. Выделил ему 16kiB сегмент в самом начале памяти, остальное отвёл под основную прошивку. Устройство специфичное, но из интерфейсов доступен только USART, потому пришлось при старте загрузчика дополнительно переводить всю переферию в безопасное состояние (для сети устройств).
Загрузчику пришлось научиться работать с протоколом X-MODEM для загрузки прошивки. Естественно, работать с консолью, уметь диагностировать наличие прошивки и ругаться об ошибках в консоль. Ругаться светодиодами на внешних сдвиговых регистрах.
Фактически, загрузчик уместился в ~5kiB. Самое тяжёлое - консоль и модем.
Переход в загрузчик - по сбросу, переход в прошивку - аналогично варианту выше - деинициализация использованой переферии (кроме той, что должна быть в "безопасном" состоянии для сети, сброс модулей, DMA, прерываний, и переход на адрес прошивки.

Затем уже основная часть перемещает адрес таблицы прерываний и настраивает переферию под себя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 12 июл 2018, 12:22 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2676
Там в общем-то ничего сложного в перезаписи нет, на 103 только нет побайтной записи флеша, минимум по 2 байта, из-за этого приходится либо всегда посылать четное кол-во байт, либо обрабатывать это нечетное кол-во. Когда писал самописный бут под USB-HID, втискивался в 64 байта пакет: [REPORT_ID][ID_BLOCK_HIGH][ID_BLOCK_LOW][BLOCK_DATA(59 byte)][CRC16_HIGH][CRC16_LOW], в итоге пакет данных вышел 59 байт. Слегка геморно было. Сейчас бы переписал всё по другому - CRC прошивки считал бы на ходу, и включил бы crc в тело прошивки, и проверил бы только в конце.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 12 июл 2018, 13:09 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 328
Откуда: г.Таганрог/г.Геленджик/г.Одесса
Вчера немного поигрался с прогой для ПК. В принципе парсить hex файл проще простого. Вот только теперь думаю, как лучше слать это дело в МК. Пока придумалось слать по одной записи и в конец каждого пакета добавлять CRC. Если проверка CRC сошлась, МК отсылает в ответ "ВСЕ ОК", если нет - просит отправить пакет повторно. Если же ПО верхнего уровня не получает ответ в течении n-го времени, то автоматом шлет пакет повторно. По идее надежность так получается довольно высокой, но надо ли оно вообще, ведь так увеличится время прошивки? Или можно слать всю прошивку, а CRC проверять в конце? Пока путь прошивки получается такой:
ПК->TCP to SPI (W5500)->ведущий МК->RS485->Прошиваемый МК. RS протянут в пределах одного блока, т.е. чисто теоретически ошибок быть не должно, а на TCP есть своя проверка CRC. Ведущий МК один, прошиваемых n-е количество, у каждого свой адрес.

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 12 июл 2018, 14:11 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1723
Откуда: Харьков
Вот мой апдейтер на NodeJS https://github.com/saewave/RemoteSwitch ... /FWUpdater
Там же рядом есть файлик чтоб проверить его работу.
В целом записываю всю прошивку, потом проверяю CRC. Использую часто и много. Ни разу не было чтоб CRC не сошлась.
В любом случае в каждой строке есть чексумма ее нужно проверять в прошивке


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 12 июл 2018, 18:41 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 1930
Не заморачивайтесь с hex, пишите бинарик.
Там с этим hex-ом столько граблей вылезет, запаритесь бутлоадер корректировать!
При очередной сборке в какой-нибудь строке может запросто измениться количество передаваемых байт.
Я это прошел, поверьте!
Бинарик - просто пишите его по нужному адресу и никакого парсинга!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 14 июл 2018, 17:24 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 ноя 2010, 20:11
Сообщения: 61
Откуда: Омск
Парсить .hex - тоже несложно.
Был у меня подобный проект, который читал .hex файл с внешней флешки и шил его в соседний AVR контроллер. С отладкой того самого сдвига хорошо намучался. В итоге удалось научить прошивку корректно обрабатывать такие приколы и адреса переходов (когда нужно писать выше 64k).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самописный бутлоадер для F103
СообщениеДобавлено: 14 июл 2018, 20:04 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1457
Там парится не надо, всё описано в спецификации от intel.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: hd44780, vasiliuz


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB