Прошивка STM32F105RBT6 не стартует без отладчика.
Прошивка STM32F105RBT6 не стартует без отладчика.
Прошивка STM32F105RBT6 не стартует без отладчика.
Заливаю прошивку через Keil 5.26 - если через Strl+F5 (старт отладки)
то всё работает, но самостоятельно после ресета не стартует, заливка
через ST-LINK Utility - заливается но не стартует!
Проект: https://yadi.sk/d/WBUiXEM3IqI6Ww
(Никакого отношения к заливке в RAM из другой темы, этот проект не имеет)
Заливаю прошивку через Keil 5.26 - если через Strl+F5 (старт отладки)
то всё работает, но самостоятельно после ресета не стартует, заливка
через ST-LINK Utility - заливается но не стартует!
Проект: https://yadi.sk/d/WBUiXEM3IqI6Ww
(Никакого отношения к заливке в RAM из другой темы, этот проект не имеет)
- Реклама
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
Бууууты?????!!!!!!
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
На земле сидят, как положено.
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
DENIS451 писал(а):Проект
Код: Выделить всё
void _delay_us(uint16_t us)
{
//////////////////////////////////////////////////////////////////////////////////////////////
uint32_t period = 0;
if (0x00 == us) return;
period = ((F_CPU/5733333)*us)-6; //подобранные коэфициенты в ѕротеусе дл¤ STM32F103C6 72м√ц ¤дро, 50м√ц порт
for (unsigned int q = 0; q <= period; q++){}
//////////////////////////////////////////////////////////////////////////////////////////////
}Вот первых частота может быть изменена во время работы программы и нужно использовать SystemCoreClock перед этим вызвать SystemCoreClockUpdate();.
Во вторых, такая задержка будет неточной. В STM32F105 есть DWT.
Код: Выделить всё
extern uint32_t SystemCoreClock;
static uint32_t Delay_us, Delay_ms;
void DWT_Init(void)
{
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
Delay_ms = SystemCoreClock / 1000; // Число тактов ядра за миллисекунду.
Delay_us = SystemCoreClock / 1000000; // Число тактов ядра за микросекунду.
}
void DWT_Delay_sec(uint32_t sec) // В секундах.
{
uint32_t Count = DWT->CYCCNT;
sec *= SystemCoreClock;
while((DWT->CYCCNT - Count) < sec);
}
void DWT_Delay_ms(uint32_t ms) // В миллисекундах
{
uint32_t Count = DWT->CYCCNT;
ms *= Delay_ms;
while((DWT->CYCCNT - Count) < ms);
}
void DWT_Delay_us(uint32_t us) // В микросекундах.
{
uint32_t Count = DWT->CYCCNT;
us *= Delay_us;
while((DWT->CYCCNT - Count) < us);
}Зачем дублировать настройку прерываний? Типа что-то да сработает?Код: Выделить всё
TIM_Cmd(TIM2, ENABLE); NVIC_EnableIRQ(TIM2_IRQn); /* NVIC Configuration */ /* Enable the TIM2_IRQn Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
Код: Выделить всё
void bibip (uint32_t time_ms, uint32_t freq_hz) //пишание пьезодинамиком на PA1 (врем¤ в милисекундах, частота а √ерцах) { ////////////////////////////////////////////////////////////// uint32_t cycles = 0; uint32_t period = 0; period = F_CPU / (12 * freq_hz); //12- подобранный коэфициент в ѕротеусе дл¤ STM32F103C6 72м√ц ¤дро, 50м√ц порт cycles = (5960 * time_ms)/period; //5960 - подобранный коэфициент в ѕротеусе дл¤ дл¤ STM32F103C6 72м√ц ¤дро, 50м√ц порт for (uint32_t i =0; i <= cycles; i++) { GPIO_SetBits(GPIOC, GPIO_Pin_13); //высокий уровень for (uint32_t q = 0; q <= period; q++){asm("nop");} GPIO_ResetBits(GPIOC, GPIO_Pin_13); //низкий уровень for (uint32_t q = 0; q <= period; q++){asm("nop");} } /////////////////////////////////////////////////////////////// }
Теперь о том где виснет. Может повиснуть например здесь.
Код: Выделить всё
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {} /* Ждем пока PLL будет готов */
RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK); /* Переключаем системное тактирование на PLL */
while (RCC_GetSYSCLKSource() != 0x08) {} /* Ждем пока переключитьс¤ */
}
else /* Проблемы с HSE. Тут можно написать свой код, если надо что-то делать когда микроконтроллер не смог перейти на работу с внешним кварцом */
{
while (1) {} /* Пока тут заглушка - вечный цикл*/
}
Последний раз редактировалось Мурик Пн дек 17, 2018 21:04:47, всего редактировалось 2 раза.
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
Обнаружил кое что не понятное - компилирую компиляторм V6.10.1 оптимизация "O0" проблема есть,
выбираю оптимизацию Oz image size проблема исчезает!
Также проблема исчезает если выбрать компилятор V5 (но мне надо обязательно V6).
Я думаю что такое поведение не может быть из-за того что линии BOOT0 / BOOT1 притягиваются к земле или +3,3v через резисторы 100ком?
Добавлено after 3 minutes 54 seconds:
Где виснет уже даже скрин сделал:
https://electronix.ru/forum/index.php?a ... &id=150072
Все уверены на BOOT0 / BOOT1
выбираю оптимизацию Oz image size проблема исчезает!
Также проблема исчезает если выбрать компилятор V5 (но мне надо обязательно V6).
Я думаю что такое поведение не может быть из-за того что линии BOOT0 / BOOT1 притягиваются к земле или +3,3v через резисторы 100ком?
Добавлено after 3 minutes 54 seconds:
Где виснет уже даже скрин сделал:
https://electronix.ru/forum/index.php?a ... &id=150072
Все уверены на BOOT0 / BOOT1
- Реклама
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
Это мало, нужно не меньше 100 ГОм.DENIS451 писал(а):Я думаю что такое поведение не может быть из-за того что линии BOOT0 / BOOT1 притягиваются к земле или +3,3v через резисторы 100ком?
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
Убирание кода clock_ini() на проблему не влияет, зато частота ядра падает до 24мГц.
Добавлено after 7 minutes 45 seconds:
Резисторы скопировал со схемы "голубой таблетки" на STM32F103C8C6 там 100к!
А какие вы резисторы ставите на BOOT0 / BOOT1 ?
На BOOT1 надо хотя бы 165ом повесить, его можно не чайно на выход включить, что б ток не превысил 20ма.
Добавлено after 1 hour 4 minutes:
Кстати, у официального производителя чипа есть отладочная плата на STM32F107 и там эти самые резисторы по 10к
https://www.st.com/content/ccc/resource ... 212441.pdf
(см. 34 страницу)
Добавлено after 7 minutes 45 seconds:
Резисторы скопировал со схемы "голубой таблетки" на STM32F103C8C6 там 100к!
А какие вы резисторы ставите на BOOT0 / BOOT1 ?
На BOOT1 надо хотя бы 165ом повесить, его можно не чайно на выход включить, что б ток не превысил 20ма.
Добавлено after 1 hour 4 minutes:
Кстати, у официального производителя чипа есть отладочная плата на STM32F107 и там эти самые резисторы по 10к
https://www.st.com/content/ccc/resource ... 212441.pdf
(см. 34 страницу)
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
[uquote="Мурик",url="/forum/viewtopic.php?p=3528972#p3528972"]Изучение AVR пошло во вред, а не на пользу.
[/uquote]
а то типа в AVR нету аппаратного ШИМ-а) это скорее "изучение" такое вот было
а то типа в AVR нету аппаратного ШИМ-а) это скорее "изучение" такое вот было
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
Соединение BOOT0 с землёй даже вообще без резистора проблему не решает.
Я думаю, писатели библиотек проверяют свой код не во всех возможных настройках разных версий компиляторов,
а только на тех что по умолчанию ( "Oz image size" - это по умолчанию), и возможно только на компиляторе v5, отсюда такие чудеса!
Я думаю, писатели библиотек проверяют свой код не во всех возможных настройках разных версий компиляторов,
а только на тех что по умолчанию ( "Oz image size" - это по умолчанию), и возможно только на компиляторе v5, отсюда такие чудеса!
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
Как удобно, виноваты все - и писатели библиотек, и компиляторы, но только не ты.
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
DENIS451, как же ты тогда в RAM попадаешь? Смотри где натыкал, а лучше проект с нуля создать.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
Я бы на map взглянул, интересно как у него мёртвый цикл в начале RAM оказался.
Кто-то конкретно "лохматит бабушку". По адресу 0x20000000 лежит глобальная переменная volatile uint8_t n_led = 1;. Нет там никакого кода.
DENIS451, объясни нам, какого лешего ты повторно RCC конфигуришь? У тебя в SystemInit() все частоты уже установились как надо.
Кто-то конкретно "лохматит бабушку". По адресу 0x20000000 лежит глобальная переменная volatile uint8_t n_led = 1;. Нет там никакого кода.
Спойлер
Код: Выделить всё
Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08000a38, Size: 0x00000670, Max: 0x00010000, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x20000000 0x08000a38 0x00000001 Data RW 17 .data.n_led main.o
0x20000001 0x08000a39 0x00000007 PAD
0x20000008 - 0x00000060 Zero RW 663 .bss c_w.l(libspace.o)
0x20000068 - 0x00000004 Zero RW 16 .bss.GPIO_InitStructure main.o
0x2000006c - 0x00000004 Zero RW 18 .bss.stethik_kn main.o
0x20000070 - 0x00000200 Zero RW 469 HEAP startup_stm32f10x_cl.o
0x20000270 - 0x00000400 Zero RW 468 STACK startup_stm32f10x_cl.o
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
VladislavS , вот именно . А попадает в RAM. Или с бутами накосячил или отладка в RAM.
Гы , и все таки с бутами наверняка, было бы что с отладкой в RAM то был бы код а не данные..
Гы , и все таки с бутами наверняка, было бы что с отладкой в RAM то был бы код а не данные..
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
У меня всегда недоумение вызывала возможность BOOTx выставить старт из RAM. Вот откуда там код может взяться при включении?
[uquote="dosikus",url="/forum/viewtopic.php?p=3529177#p3529177"]Гы , и все таки с бутами наверняка, было бы что с отладкой в RAM то был бы код а не данные..[/uquote]Так у него там как раз таки код. Это не могут быть огрызки FlashLoader? Ну потому что в прошивке у него такого не может быть.
[uquote="dosikus",url="/forum/viewtopic.php?p=3529177#p3529177"]Гы , и все таки с бутами наверняка, было бы что с отладкой в RAM то был бы код а не данные..[/uquote]Так у него там как раз таки код. Это не могут быть огрызки FlashLoader? Ну потому что в прошивке у него такого не может быть.
Спойлер

Re: Прошивка STM32F105RBT6 не стартует без отладчика.
Выкинул из проекта всё лишнее, вот что осталось:
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
//*******************************************************************************
GPIO_InitTypeDef GPIO_InitStructure; //структурная переменная
//*******************************************************************************
int main(void)
{
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
volatile int i;
//******************************************************************************************************************************
{ //настройка портов
//--------------------------------------------------------------------------------------------------------------------------
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //включаем тактирование
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_5; //светодиоды D1, D2, D3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //обычный выход
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//--------------------------------------------------------------------------------------------------------------------------
}
while (1)
{
//---------------------------------------------------------------------------------
GPIO_SetBits(GPIOB, GPIO_Pin_0); //высокий уровень
for(i=0;i<0x5AE8BA;i++); //delay
GPIO_ResetBits(GPIOB, GPIO_Pin_0); //низкий уровень
GPIO_SetBits(GPIOB, GPIO_Pin_1);
for(i=0;i<0x5AE8BA;i++); //delay
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
GPIO_SetBits(GPIOB, GPIO_Pin_5);
for(i=0;i<0x5AE8BA;i++); //delay
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
//---------------------------------------------------------------------------------
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
(зажигаем три светодиода по кругу на 2 сек.)
проект целиком: https://yadi.sk/d/nN9qjF5aeXpbpg
проблема осталась - включение уровня оптимизации "O0" (фактически отключенная оптимизация) вместо "Oz image size" (которая по умолчанию)
в компиляторе v6 делает невозможной запуск прошивки из флэша кроме как из под отладчика.
Спойлер
//*******************************************************************************#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
//*******************************************************************************
GPIO_InitTypeDef GPIO_InitStructure; //структурная переменная
//*******************************************************************************
int main(void)
{
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
volatile int i;
//******************************************************************************************************************************
{ //настройка портов
//--------------------------------------------------------------------------------------------------------------------------
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //включаем тактирование
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_5; //светодиоды D1, D2, D3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //обычный выход
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//--------------------------------------------------------------------------------------------------------------------------
}
while (1)
{
//---------------------------------------------------------------------------------
GPIO_SetBits(GPIOB, GPIO_Pin_0); //высокий уровень
for(i=0;i<0x5AE8BA;i++); //delay
GPIO_ResetBits(GPIOB, GPIO_Pin_0); //низкий уровень
GPIO_SetBits(GPIOB, GPIO_Pin_1);
for(i=0;i<0x5AE8BA;i++); //delay
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
GPIO_SetBits(GPIOB, GPIO_Pin_5);
for(i=0;i<0x5AE8BA;i++); //delay
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
//---------------------------------------------------------------------------------
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
проект целиком: https://yadi.sk/d/nN9qjF5aeXpbpg
проблема осталась - включение уровня оптимизации "O0" (фактически отключенная оптимизация) вместо "Oz image size" (которая по умолчанию)
в компиляторе v6 делает невозможной запуск прошивки из флэша кроме как из под отладчика.
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
DENIS451, галку RESET and RUN снова забыл поставить...
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
Это где такие галки?
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
Как где, все там же...
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
Проверил, установка этой галки на проблему не влияет.
При создании нового проекта с нуля, её там и нет, включая проекты для STM32F103C6 и STM32F103C8.
При создании нового проекта с нуля, её там и нет, включая проекты для STM32F103C6 и STM32F103C8.
Re: Прошивка STM32F105RBT6 не стартует без отладчика.
DENIS451, и что-что ее там с нуля нет, без нее прошивка не будет стартовать . И нужно будет ручками ресет давить.


