Кто любит RISC в жизни, заходим, не стесняемся.
Вт дек 11, 2018 18:04:35
Это доказывает, что всегда найдётся индивидум, который будет доказывать что они разные, даже если отличие в один бит.
тем не менее, они разные, без всяких "ноги у них растут из одного места". SEGGER просто не стали оригинальничать и выбрали уже давно существующий вменяемый (без всяческих конструкций птичьего языка типа
(*(. __>. ) синтаксис правил скриптов линкера.
Или что в нём можно CLANG по сравнению с GCC пощупать
дык для этого IDE не нужна) накорябал простенький мейкфайл и вперед.
Вт дек 11, 2018 20:21:01
С последним у меня случился прикол: сдуру свой АРМ-овский проект я скомпилировал CLANG-ом для x86, будучи уверенным, что CLANG у меня установлен для армов.
Ср дек 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
Чт дек 13, 2018 07:02:48
Наконец-то собрал макетку с STM32F105RBT6, создал новый проект, скопировал код от STM32F103C6T6
Это достаточно сильно отличающиеся чипы. RCC у них точно разные.
Чт дек 13, 2018 08:00:16
Я никаких настроек частоты не делал, только задал частоту кварца 8мГц в проекте, 103 чипы запускались на максимум с настройками по умолчанию.
Чт дек 13, 2018 08:50:49
DENIS451, не пора ли начать читать? Хотя бы, ради приличия заглянуть в RM?
STM32F105RBT6 - Connectivity line
STM32F103C6T6 -Low-density performance line
И как VladislavS и сказал - отличия в RCC существенные...
Чт дек 13, 2018 10:41:20
По поводу частоты - давайте отложим на потом (если сам не разберусь, создам отдельную тему, а то оффтопик получается), лучше помогите разобраться с заливкой прошивки в ОЗУ.
Чт дек 13, 2018 17:25:48
И чем же тебе помочь? Можем посочувствовать разве что. Что из
этого не понятно?
Чт дек 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) Скачиваний: 2418
Сб дек 15, 2018 17:16:34
Тебе бы понять как это всё работает, а не тупо как обезьянка галочки натыкать.
Сб дек 15, 2018 19:16:32
DENIS451 , на казусе теперь сплошные аурдуинщики благодаря админу, увы и ах. Деградация полная...
Сб дек 15, 2018 19:40:27
Вот объясните мне, глупому.
Чтобы отлаживаться во FLASH надо: скомпилировать программу, загрузить в RAM загрузчик, прошить с его помощью FLASH, установить PC на начало программы, установить SP на стек и запустить программу. Ни у кого этот процесс не вызывает проблем. Ну почти ни у кого.
Чтобы отлаживаться в RAM надо: скомпилировать программу, загрузить приложение в RAM, установить PC на начало программы, установить SP на стек и запустить программу. На два действия меньше, а вызывает проблемы у неокрепших умов. Вот как так?
Сб дек 15, 2018 19:59:56
Весьма похоже что он новичок во всем.
Мы же с тобой привыкли максимально разобираться самим. Нынче это не круто , им надо все и сразу.
Нет духа авантюризма , жажды приключений, для них чтение документации и самостоятельное копание -пустой звук...
Я вспоминаю время когда интернет был большой редкостью и чипы (51е) и литература на них доставались с большим трудом...
Сб дек 15, 2018 21:26:47
VladislavS писал(а):Чтобы отлаживаться во FLASH надо: скомпилировать программу, загрузить в RAM загрузчик, прошить с его помощью FLASH
Отладчик не прошивает сразу во флеш?
Сб дек 15, 2018 21:34:37
везде по дефолту туда и прошивает, безо всяких загрузчиков.
Сб дек 15, 2018 22:04:18
Ну как дети, блин. Лень к компу идти, чтобы название файла с загрузчиком написать. Если до завтра потерпите, то могу даже исходники выложить.
Сб дек 15, 2018 22:09:50
Я осваиваю микроконтроллеры где то по часику в день, в свободное от работы время, stm32 начал изучать только 2 месяца назад, программирование контроллеров вообще начал изучать только 5 месяцев назад, я больше по паянию, чем по программированию.
Я не могу сразу прочитать RM на 1132 страницы, осознать его целиком, и начать разрабатывать под STM32F105, мне надо
закреплять изученный кусок работой с железом, а что б всё это было побыстрей и не запороть флэш, нужна отладка в RAM.
Наверно ничего писать уже не надо, если только получится добавить или найти ошибку в том что написал
nml тут:
http://kazus.ru/forums/showthread.php?p ... ost1233096Вроде пока всё заработало.
Вс дек 16, 2018 00:53:36
везде по дефолту туда и прошивает, безо всяких загрузчиков.
Давай покажу на примере IDE, которая поддерживает, пожалуй, наибольшее количество разных чипов. У неё открытый интерфейс для написания загрузчиков flash. Вот пара страничек из документа, описывающего механизм прошивки flash отладчиком. Интерфейс полностью открытый, а иначе как обеспечить поддержку такого зоопарка.
А вот обещанные исходники загрузчика для 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.
Вс дек 16, 2018 01:24:42
VladislavS писал(а):А вот обещанные исходники загрузчика для STM32F0XX
Исходник похоже что не весь. Непонятно как этот код сможет получить прошивку по SWD.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.