STM32F103C8 перенос таблицы прерываний
Re: STM32F103C8 перенос таблицы прерываний
[uquote="Мурик",url="/forum/viewtopic.php?p=3494345#p3494345"]Что находится в STM32F103C8 по адресу 0x3FF0?
Флеш начинается с 0x08000000.[/uquote]
на 0х08000000 вообще ничего нет.
Флеш начинается с 0x08000000.[/uquote]
на 0х08000000 вообще ничего нет.
-
Alex-Elektron
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Сб янв 11, 2014 21:25:55
Re: STM32F103C8 перенос таблицы прерываний
Тогда привет тебе от бутлоадера)
Добавлено after 2 minutes 21 second:
Заливай бутлоадер, и снова делай дамп тогда
Добавлено after 2 minutes 21 second:
Заливай бутлоадер, и снова делай дамп тогда
Re: STM32F103C8 перенос таблицы прерываний
[uquote="Alex-Elektron",url="/forum/viewtopic.php?p=3494368#p3494368"]Тогда привет тебе от бутлоадера)
Добавлено after 2 minutes 21 second:
Заливай бутлоадер, и снова делай дамп тогда[/uquote]
я протупил, в программаторе просто не пишется 0х800, но подразумевается.
Пишется с 0х8004000, все ок
Приложу хекс файл еще http://rgho.st/8NNVJfX5K
Добавлено after 2 minutes 21 second:
Заливай бутлоадер, и снова делай дамп тогда[/uquote]
я протупил, в программаторе просто не пишется 0х800, но подразумевается.
Пишется с 0х8004000, все ок
Приложу хекс файл еще http://rgho.st/8NNVJfX5K
-
Alex-Elektron
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Сб янв 11, 2014 21:25:55
Re: STM32F103C8 перенос таблицы прерываний
Написал два скетча, пробуй.
https://yadi.sk/d/R_o1KuuOAoNSaQ
https://yadi.sk/d/fHssRYf43igznw
1. Грузи сперва бутлоадер с вытиранием всего флэша
2. Грузи основную прогу с вытиранием только секторов загрузки (по картинке 5)
3. Подключай к USART-USB PA2 - TX (параметры связи 115к, 8 , 1, нет)
4. При включении МК вылетит сообщение "Hello, this is main programm!" - это значит, что МК прыгнул в основную прогу
5. Замкни PB9 на GND, держи замкнутым и тыцни на ресет, должно вылететь "Programming mode. Erease firmware? Y/N"
Ждём результатов.
P.S. Проверил у себя в железе.
https://yadi.sk/d/R_o1KuuOAoNSaQ
https://yadi.sk/d/fHssRYf43igznw
1. Грузи сперва бутлоадер с вытиранием всего флэша
2. Грузи основную прогу с вытиранием только секторов загрузки (по картинке 5)
3. Подключай к USART-USB PA2 - TX (параметры связи 115к, 8 , 1, нет)
4. При включении МК вылетит сообщение "Hello, this is main programm!" - это значит, что МК прыгнул в основную прогу
5. Замкни PB9 на GND, держи замкнутым и тыцни на ресет, должно вылететь "Programming mode. Erease firmware? Y/N"
Ждём результатов.
P.S. Проверил у себя в железе.
Re: STM32F103C8 перенос таблицы прерываний
[uquote="Alex-Elektron",url="/forum/viewtopic.php?p=3494404#p3494404"]Написал два скетча, пробуй.
https://yadi.sk/d/R_o1KuuOAoNSaQ
https://yadi.sk/d/fHssRYf43igznw
1. Грузи сперва бутлоадер с вытиранием всего флэша
2. Грузи основную прогу с вытиранием только секторов загрузки (по картинке 5)
3. Подключай к USART-USB PA2 - TX (параметры связи 115к, 8 , 1, нет)
4. При включении МК вылетит сообщение "Hello, this is main programm!" - это значит, что МК прыгнул в основную прогу
5. Замкни PB9 на GND, держи замкнутым и тыцни на ресет, должно вылететь "Programming mode. Erease firmware? Y/N"
Ждём результатов.
P.S. Проверил у себя в железе.[/uquote]
Вообщем то работает, только сообщение о том что мы в главной программе не вылетает.
https://yadi.sk/d/R_o1KuuOAoNSaQ
https://yadi.sk/d/fHssRYf43igznw
1. Грузи сперва бутлоадер с вытиранием всего флэша
2. Грузи основную прогу с вытиранием только секторов загрузки (по картинке 5)
3. Подключай к USART-USB PA2 - TX (параметры связи 115к, 8 , 1, нет)
4. При включении МК вылетит сообщение "Hello, this is main programm!" - это значит, что МК прыгнул в основную прогу
5. Замкни PB9 на GND, держи замкнутым и тыцни на ресет, должно вылететь "Programming mode. Erease firmware? Y/N"
Ждём результатов.
P.S. Проверил у себя в железе.[/uquote]
Вообщем то работает, только сообщение о том что мы в главной программе не вылетает.
-
Alex-Elektron
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Сб янв 11, 2014 21:25:55
Re: STM32F103C8 перенос таблицы прерываний
А что из этого тогда работает?
Добавлено after 2 minutes 3 seconds:
Хочу видеть полный дамп двух последних залитых прошивок с адреса 0x8000000 и схему подключения boot0, boot1.
Добавлено after 2 minutes 3 seconds:
Хочу видеть полный дамп двух последних залитых прошивок с адреса 0x8000000 и схему подключения boot0, boot1.
Re: STM32F103C8 перенос таблицы прерываний
[uquote="Alex-Elektron",url="/forum/viewtopic.php?p=3494846#p3494846"]А что из этого тогда работает?[/uquote]
1,2 и 5 пункты. При замыкании PB9 выдает на экран сообщение которые вы написали.
1,2 и 5 пункты. При замыкании PB9 выдает на экран сообщение которые вы написали.
-
Alex-Elektron
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Сб янв 11, 2014 21:25:55
Re: STM32F103C8 перенос таблицы прерываний
Используется плата - самопал или вот это? Но сперва хочу полный дамп, ибо вчера всё проверил - рабочие прошивки.


Re: STM32F103C8 перенос таблицы прерываний
http://rgho.st/7rXr4J8XT вот такая плата, МК stm32f103c8, то же самое что вы прислали
-
Alex-Elektron
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Сб янв 11, 2014 21:25:55
Re: STM32F103C8 перенос таблицы прерываний
Можно в моём проекте поменять ещё девайс на stm32f103c8, у меня под cb скомпилен, но это скорее всего не поможет, у них отличия, насколько помню, только в объёме флэша. Надо дампы сравнивать.
Re: STM32F103C8 перенос таблицы прерываний
[uquote="Alex-Elektron",url="/forum/viewtopic.php?p=3494855#p3494855"]Можно в моём проекте поменять ещё девайс на stm32f103c8, у меня под cb скомпилен, но это скорее всего не поможет, у них отличия, насколько помню, только в объёме флэша. Надо дампы сравнивать.[/uquote]
Проект который вы скинули работает, проблема была с ST-Link, но понимаете я делал подобный проект сам и переносил его на другой адрес, он работал, но когда я добавлял прерывание, оно не срабатывало при переносе, главная проблема в этом. Вы мне прислали проект, где нет прерывания.
Проект который вы скинули работает, проблема была с ST-Link, но понимаете я делал подобный проект сам и переносил его на другой адрес, он работал, но когда я добавлял прерывание, оно не срабатывало при переносе, главная проблема в этом. Вы мне прислали проект, где нет прерывания.
-
Alex-Elektron
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Сб янв 11, 2014 21:25:55
Re: STM32F103C8 перенос таблицы прерываний
Вечером скину с прерыванием, не перенёс этот проект вчера на ЯД.
Добавлено after 1 minute 13 seconds:
А вообще, попробуй добавить прерывание прямо в мой проект)
Например, по тому же приёму байта в прерывании от ЮСАРТ отсылай его назад
Добавлено after 4 hours 47 minutes 5 seconds:
Обновил файлы основной программы по ссылке на Я.Диске, добавил прерывание от ЮСАРТА2 на приём, данные возвращаются корректно => таблица прерываний на месте. Всё работает. Проверяй у себя, потом дальше будем разбираться.
Добавлено after 1 minute 13 seconds:
А вообще, попробуй добавить прерывание прямо в мой проект)
Например, по тому же приёму байта в прерывании от ЮСАРТ отсылай его назад
Добавлено after 4 hours 47 minutes 5 seconds:
Обновил файлы основной программы по ссылке на Я.Диске, добавил прерывание от ЮСАРТА2 на приём, данные возвращаются корректно => таблица прерываний на месте. Всё работает. Проверяй у себя, потом дальше будем разбираться.
Re: STM32F103C8 перенос таблицы прерываний
[uquote="Alex-Elektron",url="/forum/viewtopic.php?p=3494894#p3494894"]Вечером скину с прерыванием, не перенёс этот проект вчера на ЯД.
Добавлено after 1 minute 13 seconds:
А вообще, попробуй добавить прерывание прямо в мой проект)
Например, по тому же приёму байта в прерывании от ЮСАРТ отсылай его назад
Добавлено after 4 hours 47 minutes 5 seconds:
Обновил файлы основной программы по ссылке на Я.Диске, добавил прерывание от ЮСАРТА2 на приём, данные возвращаются корректно => таблица прерываний на месте. Всё работает. Проверяй у себя, потом дальше будем разбираться.[/uquote]
Да все работает.
Добавлено after 1 minute 13 seconds:
А вообще, попробуй добавить прерывание прямо в мой проект)
Например, по тому же приёму байта в прерывании от ЮСАРТ отсылай его назад
Добавлено after 4 hours 47 minutes 5 seconds:
Обновил файлы основной программы по ссылке на Я.Диске, добавил прерывание от ЮСАРТА2 на приём, данные возвращаются корректно => таблица прерываний на месте. Всё работает. Проверяй у себя, потом дальше будем разбираться.[/uquote]
Да все работает.
-
Alex-Elektron
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Сб янв 11, 2014 21:25:55
Re: STM32F103C8 перенос таблицы прерываний
С EXTI разберёшься или нужна помощь?
Re: STM32F103C8 перенос таблицы прерываний
[uquote="Alex-Elektron",url="/forum/viewtopic.php?p=3495595#p3495595"]С EXTI разберёшься или нужна помощь?[/uquote]
Пока сам попробую, если что то не получиться, обращусь к вам, спасибо за помощь)
Пока сам попробую, если что то не получиться, обращусь к вам, спасибо за помощь)
Re: STM32F103C8 перенос таблицы прерываний
[uquote="settz0r",url="/forum/viewtopic.php?p=3495591#p3495591"]Да все работает.[/uquote] Так в чем же была ошибка, вы поняли в чем разница между тем что вы делали изначально и рабочим вариантом? Просто у меня похожая ситуация, вроде перемусолено все сто раз, все сделал как "те парни из интернета", но прыгнуть из одного проекта в другой не могу....
Два пустых проекта уже создал один светодиодом дрыгает, второй просто вызывает первый, все настроил а вызова нет, прыжок в никуда... Собственно вот оба проекта: https://yadi.sk/d/yNoaSm-SbkeSAA они под Atollic TrueSTUDIO. Шью каждый отдельно они каждый занимает по сектору.
В проекте который должен вызвать другой проект все настройки умолчальные, в майне код: У второго настройки изменены, в system_stm32f4xx.c:
#define VECT_TAB_OFFSET 0x4000 /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
stm32_flash.ld:
/* Specify the memory areas */
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192K
CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K
FLASH (rx) : ORIGIN = 0x8004000, LENGTH = 2032K
}
Вроде все указал ничего не забыл, а нет, не работает...
Два пустых проекта уже создал один светодиодом дрыгает, второй просто вызывает первый, все настроил а вызова нет, прыжок в никуда... Собственно вот оба проекта: https://yadi.sk/d/yNoaSm-SbkeSAA они под Atollic TrueSTUDIO. Шью каждый отдельно они каждый занимает по сектору.
В проекте который должен вызвать другой проект все настройки умолчальные, в майне код:
Код: Выделить всё
#define APPLICATION_ADDRESS 0x08004000
uint32_t app_jump_address;
typedef void(*pFunction)(void);
pFunction Jump_To_Application;
__disable_irq();
app_jump_address = *( uint32_t*) (APPLICATION_ADDRESS + 4);
Jump_To_Application = (pFunction)app_jump_address;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
Jump_To_Application();#define VECT_TAB_OFFSET 0x4000 /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
stm32_flash.ld:
/* Specify the memory areas */
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192K
CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K
FLASH (rx) : ORIGIN = 0x8004000, LENGTH = 2032K
}
Вроде все указал ничего не забыл, а нет, не работает...
Re: STM32F103C8 перенос таблицы прерываний
Решение нашел. Проблема была в том что перед прыжком на новый код прерывания я запрещал, а после не разрешал, ну вот не думал я что код который фактически с нуля инициализирует все переменные и периферию требует этого... Ошибся..
Просто в начале майна добавил разрешение:
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
__enable_irq();
/* USER CODE END 1 */
Спойлер
Код: Выделить всё
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
* <h2><center>© Copyright (c) 2019 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
__enable_irq();
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(50);
HAL_GPIO_TogglePin(LD4_GPIO_Port, LD4_Pin);
//HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
}
/* USER CODE END 3 */
}
/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Configure the main internal regulator output voltage
*/
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 50;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
RCC_OscInitStruct.PLL.PLLQ = 7;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV8;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV4;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
/**
* @brief GPIO Initialization Function
* @param None
* @retval None
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOG_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOG, LD3_Pin|LD4_Pin, GPIO_PIN_RESET);
/*Configure GPIO pins : LD3_Pin LD4_Pin */
GPIO_InitStruct.Pin = LD3_Pin|LD4_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
}
/* USER CODE BEGIN 4 */
/* USER CODE END 4 */
/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
/* USER CODE END Error_Handler_Debug */
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
__enable_irq();
/* USER CODE END 1 */
- Солнцеворот
- Встал на лапы
- Сообщения: 141
- Зарегистрирован: Вт июн 03, 2008 01:39:47
Re: STM32F103C8 перенос таблицы прерываний
[uquote="zwitch",url="/forum/viewtopic.php?p=3726930#p3726930"]Решение нашел[/uquote]
Спасибо! Допустил ту же ошибку. Даже не подумал бы на глобальный запрет прерываний.
Особенно вводит в ступор то, что действие ассемблерной вставки __enable_irq(); и __disable_irq(); никак не видно из отладчика.
Спасибо! Допустил ту же ошибку. Даже не подумал бы на глобальный запрет прерываний.
Особенно вводит в ступор то, что действие ассемблерной вставки __enable_irq(); и __disable_irq(); никак не видно из отладчика.
Re: STM32F103C8 перенос таблицы прерываний
[uquote="Солнцеворот",url="/forum/viewtopic.php?p=4147895#p4147895"]Особенно вводит в ступор то, что действие ассемблерной вставки __enable_irq(); и __disable_irq(); никак не видно из отладчика.[/uquote]Не знаю про какой отладчик речь, но в IAR-овском прекрасно видно.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32F103C8 перенос таблицы прерываний
Особенно если знать где смотреть 