Заливка прошивки в ОЗУ STM32 для отладки

Кто любит RISC в жизни, заходим, не стесняемся.
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение arkhnchul »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3518894#p3518894"]Это доказывает, что всегда найдётся индивидум, который будет доказывать что они разные, даже если отличие в один бит.[/uquote]тем не менее, они разные, без всяких "ноги у них растут из одного места". SEGGER просто не стали оригинальничать и выбрали уже давно существующий вменяемый (без всяческих конструкций птичьего языка типа (*(. __>. ) синтаксис правил скриптов линкера.
[uquote="VladislavS",url="/forum/viewtopic.php?p=3518894#p3518894"]Или что в нём можно CLANG по сравнению с GCC пощупать[/uquote]дык для этого IDE не нужна) накорябал простенький мейкфайл и вперед.
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение a5021 »

С последним у меня случился прикол: сдуру свой АРМ-овский проект я скомпилировал CLANG-ом для x86, будучи уверенным, что CLANG у меня установлен для армов.
Реклама
DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение DENIS451 »

Наконец-то собрал макетку с STM32F105RBT6, создал новый проект, скопировал код от STM32F103C6T6 и всё работает
почему то в 3 раза медленнее (таймера, задержки) как будто генератор запустился на 24мГц вместо 72мГц!

Z_h_e написал инструкцию её забраковали, так как правильно настраивать заливку прошивки в ОЗУ STM32F105RBT6 в
Keil 5.26 через китайский ST-link v2 (включая перенос прерываний, например таймеров)?

Проект (бегущий огонь из трёх светодиодов по таймеру, отслеживание кнопки S2, пищание пищалкой):
https://yadi.sk/d/n3R1R647kBhlew
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение VladislavS »

[uquote="DENIS451",url="/forum/viewtopic.php?p=3525523#p3525523"]Наконец-то собрал макетку с STM32F105RBT6, создал новый проект, скопировал код от STM32F103C6T6[/uquote]Это достаточно сильно отличающиеся чипы. RCC у них точно разные.
Реклама
Эиком - электронные компоненты и радиодетали
DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение DENIS451 »

Я никаких настроек частоты не делал, только задал частоту кварца 8мГц в проекте, 103 чипы запускались на максимум с настройками по умолчанию.
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение dosikus »

DENIS451, не пора ли начать читать? Хотя бы, ради приличия заглянуть в RM?

STM32F105RBT6 - Connectivity line
STM32F103C6T6 -Low-density performance line

И как VladislavS и сказал - отличия в RCC существенные...
Реклама
DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение DENIS451 »

По поводу частоты - давайте отложим на потом (если сам не разберусь, создам отдельную тему, а то оффтопик получается), лучше помогите разобраться с заливкой прошивки в ОЗУ.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение VladislavS »

И чем же тебе помочь? Можем посочувствовать разве что. Что из этого не понятно?
DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение DENIS451 »

Многое непонятно, например для начала:
1. Target - выделить под флеш ОЗУ, например первую пловину и само собой тогда откусить размер RAM
Зачем нужно столько полей (ROM1, ROM2... и пр.)?
Допустим я хочу выделить под флэш в памяти первые 32кб из 64кб RAM, мне надо вместо 0x20000 прописать 0x8000 в том же поле
а стартовый адрес 0x8000000 заменить на 0x20000000, потом сместить начало и размер стека, вместо 0x20000000 написать
0x20008000, а в место 0x10000 написать 0x8000, правильно?

Изображение
Вложения
Target.png
(21.12 КБ) 3001 скачивание
DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение DENIS451 »

Тут дело сдвинулось с мёртвой точки: http://kazus.ru/forums/showthread.php?p ... ost1233203
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение VladislavS »

Тебе бы понять как это всё работает, а не тупо как обезьянка галочки натыкать.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение dosikus »

DENIS451 , на казусе теперь сплошные аурдуинщики благодаря админу, увы и ах. Деградация полная...
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение VladislavS »

Вот объясните мне, глупому.

Чтобы отлаживаться во FLASH надо: скомпилировать программу, загрузить в RAM загрузчик, прошить с его помощью FLASH, установить PC на начало программы, установить SP на стек и запустить программу. Ни у кого этот процесс не вызывает проблем. Ну почти ни у кого.

Чтобы отлаживаться в RAM надо: скомпилировать программу, загрузить приложение в RAM, установить PC на начало программы, установить SP на стек и запустить программу. На два действия меньше, а вызывает проблемы у неокрепших умов. Вот как так?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение dosikus »

Весьма похоже что он новичок во всем.
Мы же с тобой привыкли максимально разобираться самим. Нынче это не круто , им надо все и сразу.
Нет духа авантюризма , жажды приключений, для них чтение документации и самостоятельное копание -пустой звук...
Я вспоминаю время когда интернет был большой редкостью и чипы (51е) и литература на них доставались с большим трудом...
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение Мурик »

VladislavS писал(а):Чтобы отлаживаться во FLASH надо: скомпилировать программу, загрузить в RAM загрузчик, прошить с его помощью FLASH
Отладчик не прошивает сразу во флеш?
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение arkhnchul »

везде по дефолту туда и прошивает, безо всяких загрузчиков.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение VladislavS »

Ну как дети, блин. Лень к компу идти, чтобы название файла с загрузчиком написать. Если до завтра потерпите, то могу даже исходники выложить.
DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение DENIS451 »

Я осваиваю микроконтроллеры где то по часику в день, в свободное от работы время, stm32 начал изучать только 2 месяца назад, программирование контроллеров вообще начал изучать только 5 месяцев назад, я больше по паянию, чем по программированию.

Я не могу сразу прочитать RM на 1132 страницы, осознать его целиком, и начать разрабатывать под STM32F105, мне надо
закреплять изученный кусок работой с железом, а что б всё это было побыстрей и не запороть флэш, нужна отладка в RAM.

Наверно ничего писать уже не надо, если только получится добавить или найти ошибку в том что написал nml тут: http://kazus.ru/forums/showthread.php?p ... ost1233096

Вроде пока всё заработало.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение VladislavS »

[uquote="arkhnchul",url="/forum/viewtopic.php?p=3527609#p3527609"]везде по дефолту туда и прошивает, безо всяких загрузчиков.[/uquote]
Давай покажу на примере IDE, которая поддерживает, пожалуй, наибольшее количество разных чипов. У неё открытый интерфейс для написания загрузчиков flash. Вот пара страничек из документа, описывающего механизм прошивки flash отладчиком. Интерфейс полностью открытый, а иначе как обеспечить поддержку такого зоопарка.
FlashLoaderGuide.ENU.pdf
(62.57 КБ) 344 скачивания
А вот обещанные исходники загрузчика для STM32F0XX
Спойлер

Код: Выделить всё

/**************************************************
 * Copyright 2004-2012 IAR Systems. All rights reserved.
 *
 * $Revision: 6236 $
 **************************************************/
#include "flash_loader.h"
#include <intrinsics.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stm32f0xx.h"

static __no_init uint32_t ACR_RESTORE;
static __no_init uint32_t CR_RESTORE;
static __no_init uint32_t AR_RESTORE;

#ifdef DEBUG_MESS
int putchar(int c)
{
  USART1->TDR = c;
  while(0 == (USART1->ISR & (1UL << 7)));

  return(c);
}
#endif // DEBUG_MESS

#if USE_ARGC_ARGV
uint32_t FlashInit(void *base_of_flash, uint32_t image_size,
                   uint32_t link_address, uint32_t flags,
                   int argc, char const *argv[])
#else
uint32_t FlashInit(void *base_of_flash, uint32_t image_size,
                   uint32_t link_address, uint32_t flags)
#endif
{

#ifdef DEBUG_MESS
  RCC->APB2RSTR &= ~(1UL<<14);
  RCC->APB2ENR  |=  (1UL<<14);

  GPIOA->MODER   |=   (0x2UL << (9*2))    | (0x2UL << (10*2));
  GPIOA->OTYPER  &= ~((0x1UL <<  9   )    | (0x1UL <<  10   ));
  GPIOA->OSPEEDR |=   (0x3UL << (9*2))    | (0x2UL << (10*2));
  GPIOA->AFR[1]  |=   (0x3UL <<((9-8)*4)) | (0x2UL << ((10-8)*4));

  USART1->CR1 = 0;
  USART1->BRR = (53UL-1)<<4;  // UART1, 9600, no parity, 1 stop
  USART1->CR2 = 0;
  USART1->CR3 = 0;
  USART1->CR1 = 0x200C;
  printf("FlashInit .. done\n\r");
#endif // DEBUG_MESS

  ACR_RESTORE  = FLASH->ACR;
  CR_RESTORE   = FLASH->CR;
  AR_RESTORE   = FLASH->AR;

  FLASH->KEYR = FLASH_FKEY1;
  FLASH->KEYR = FLASH_FKEY2;
  FLASH->ACR = 0;
  FLASH->CR = 0;
  FLASH->SR  = FLASH_SR_EOP | FLASH_SR_PGERR | FLASH_SR_WRPERR;

  return RESULT_OK;
}

uint32_t FlashWrite(void *block_start,
                    uint32_t offset_into_block,
                    uint32_t count,
                    char const *buffer)
{
unsigned short * dst = (unsigned short *)((unsigned char *)block_start + offset_into_block);
unsigned short * src = (unsigned short *)buffer;


#ifdef DEBUG_MESS
  printf("FlashWrite block_start %8X, offset_into_block %8X, count %8X, buffer %8X\n\r",
         (uint32_t)block_start,offset_into_block,count,(uint32_t)buffer);
#endif // DEBUG_MESS

  while (FLASH->SR & FLASH_SR_BSY);
  FLASH->CR = FLASH_CR_PG;

  for ( ; count; count -= 2)
  {
    *dst++ = *src++;
    while (FLASH->SR & FLASH_SR_BSY);
  }

  FLASH->CR &= ~FLASH_CR_PG;

  if(FLASH->SR & (FLASH_SR_PGERR | FLASH_SR_WRPERR))
  {
    return RESULT_ERROR;
  }

#ifdef DEBUG_MESS
  printf("FlashWrite .. done\n\r");
#endif // DEBUG_MESS

  return RESULT_OK;
}

uint32_t FlashErase(void *block_start,
                    uint32_t block_size)
{
#ifdef DEBUG_MESS
  printf("FlashErase block_start %8X, block_size %8X\n\r",(uint32_t)block_start,block_size);
  if(FLASH->CR & (1<<7))
  {
    printf("\nFlash is locked!!!!!\n");
  }
#endif // DEBUG_MESS

  FLASH->CR |= FLASH_CR_PER;
  FLASH->AR  = (uint32_t )block_start;  // AR couldn't be written if PAGERASE bit not set
  FLASH->CR |= FLASH_CR_STRT;

  while (FLASH->SR & FLASH_SR_BSY);

  FLASH->CR &= ~FLASH_CR_PER;

  if(FLASH->SR & (FLASH_SR_PGERR | FLASH_SR_WRPERR))
  {
    return RESULT_ERROR;
  }

#ifdef DEBUG_MESS
  printf("FlashErase .. done\n\r");
#endif // DEBUG_MESS

  return RESULT_OK;
}

OPTIONAL_SIGNOFF

uint32_t FlashSignoff(void)
{
  //Restore modified registers
  FLASH->SR  = FLASH_SR_EOP | FLASH_SR_PGERR | FLASH_SR_WRPERR;
  FLASH->ACR = ACR_RESTORE;
  FLASH->CR  = CR_RESTORE;
  FLASH->AR  = AR_RESTORE;

  return RESULT_OK;
}
Как сейчас помню, в 2005-м году писал для RM9200 сначала прошивку через отладчик в IDE, а потом через Ethernet.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение Мурик »

VladislavS писал(а):А вот обещанные исходники загрузчика для STM32F0XX
Исходник похоже что не весь. Непонятно как этот код сможет получить прошивку по SWD.
Ответить

Вернуться в «ARM»