Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Вт дек 11, 2018 18:04:35

Это доказывает, что всегда найдётся индивидум, который будет доказывать что они разные, даже если отличие в один бит.
тем не менее, они разные, без всяких "ноги у них растут из одного места". SEGGER просто не стали оригинальничать и выбрали уже давно существующий вменяемый (без всяческих конструкций птичьего языка типа (*(. __>. ) синтаксис правил скриптов линкера.
Или что в нём можно CLANG по сравнению с GCC пощупать
дык для этого IDE не нужна) накорябал простенький мейкфайл и вперед.

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

Вт дек 11, 2018 20:21:01

С последним у меня случился прикол: сдуру свой АРМ-овский проект я скомпилировал CLANG-ом для x86, будучи уверенным, что CLANG у меня установлен для армов.

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

Ср дек 12, 2018 23:19:32

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

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

Проект (бегущий огонь из трёх светодиодов по таймеру, отслеживание кнопки S2, пищание пищалкой):
https://yadi.sk/d/n3R1R647kBhlew

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

Чт дек 13, 2018 07:02:48

Наконец-то собрал макетку с STM32F105RBT6, создал новый проект, скопировал код от STM32F103C6T6
Это достаточно сильно отличающиеся чипы. RCC у них точно разные.

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

Чт дек 13, 2018 08:00:16

Я никаких настроек частоты не делал, только задал частоту кварца 8мГц в проекте, 103 чипы запускались на максимум с настройками по умолчанию.

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

Чт дек 13, 2018 08:50:49

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

STM32F105RBT6 - Connectivity line
STM32F103C6T6 -Low-density performance line

И как VladislavS и сказал - отличия в RCC существенные...

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

Чт дек 13, 2018 10:41:20

По поводу частоты - давайте отложим на потом (если сам не разберусь, создам отдельную тему, а то оффтопик получается), лучше помогите разобраться с заливкой прошивки в ОЗУ.

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

Чт дек 13, 2018 17:25:48

И чем же тебе помочь? Можем посочувствовать разве что. Что из этого не понятно?

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

Чт дек 13, 2018 22:28:26

Многое непонятно, например для начала:
1. Target - выделить под флеш ОЗУ, например первую пловину и само собой тогда откусить размер RAM


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

Изображение
Вложения
Target.png
(21.12 KiB) Скачиваний: 2420

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

Сб дек 15, 2018 16:50:06

Тут дело сдвинулось с мёртвой точки: http://kazus.ru/forums/showthread.php?p ... ost1233203

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

Сб дек 15, 2018 17:16:34

Тебе бы понять как это всё работает, а не тупо как обезьянка галочки натыкать.

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

Сб дек 15, 2018 19:16:32

DENIS451 , на казусе теперь сплошные аурдуинщики благодаря админу, увы и ах. Деградация полная...

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

Сб дек 15, 2018 19:40:27

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

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

Чтобы отлаживаться в RAM надо: скомпилировать программу, загрузить приложение в RAM, установить PC на начало программы, установить SP на стек и запустить программу. На два действия меньше, а вызывает проблемы у неокрепших умов. Вот как так?

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

Сб дек 15, 2018 19:59:56

Весьма похоже что он новичок во всем.
Мы же с тобой привыкли максимально разобираться самим. Нынче это не круто , им надо все и сразу.
Нет духа авантюризма , жажды приключений, для них чтение документации и самостоятельное копание -пустой звук...
Я вспоминаю время когда интернет был большой редкостью и чипы (51е) и литература на них доставались с большим трудом...

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

Сб дек 15, 2018 21:26:47

VladislavS писал(а):Чтобы отлаживаться во FLASH надо: скомпилировать программу, загрузить в RAM загрузчик, прошить с его помощью FLASH
Отладчик не прошивает сразу во флеш?

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

Сб дек 15, 2018 21:34:37

везде по дефолту туда и прошивает, безо всяких загрузчиков.

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

Сб дек 15, 2018 22:04:18

Ну как дети, блин. Лень к компу идти, чтобы название файла с загрузчиком написать. Если до завтра потерпите, то могу даже исходники выложить.

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

Сб дек 15, 2018 22:09:50

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

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

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

Вроде пока всё заработало.

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

Вс дек 16, 2018 00:53:36

везде по дефолту туда и прошивает, безо всяких загрузчиков.

Давай покажу на примере IDE, которая поддерживает, пожалуй, наибольшее количество разных чипов. У неё открытый интерфейс для написания загрузчиков flash. Вот пара страничек из документа, описывающего механизм прошивки flash отладчиком. Интерфейс полностью открытый, а иначе как обеспечить поддержку такого зоопарка.
FlashLoaderGuide.ENU.pdf
(62.57 KiB) Скачиваний: 259

А вот обещанные исходники загрузчика для 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.

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

Вс дек 16, 2018 01:24:42

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