STM32F103C8 перенос таблицы прерываний

Кто любит RISC в жизни, заходим, не стесняемся.
settz0r
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Вт окт 23, 2018 09:10:53

Re: STM32F103C8 перенос таблицы прерываний

Сообщение settz0r »

[uquote="Мурик",url="/forum/viewtopic.php?p=3494345#p3494345"]Что находится в STM32F103C8 по адресу 0x3FF0?
Флеш начинается с 0x08000000.[/uquote]
на 0х08000000 вообще ничего нет.
Alex-Elektron
Встал на лапы
Сообщения: 113
Зарегистрирован: Сб янв 11, 2014 21:25:55

Re: STM32F103C8 перенос таблицы прерываний

Сообщение Alex-Elektron »

Тогда привет тебе от бутлоадера)

Добавлено after 2 minutes 21 second:
Заливай бутлоадер, и снова делай дамп тогда
settz0r
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Вт окт 23, 2018 09:10:53

Re: STM32F103C8 перенос таблицы прерываний

Сообщение settz0r »

[uquote="Alex-Elektron",url="/forum/viewtopic.php?p=3494368#p3494368"]Тогда привет тебе от бутлоадера)

Добавлено after 2 minutes 21 second:
Заливай бутлоадер, и снова делай дамп тогда[/uquote]
я протупил, в программаторе просто не пишется 0х800, но подразумевается.
Пишется с 0х8004000, все ок
Приложу хекс файл еще http://rgho.st/8NNVJfX5K
Alex-Elektron
Встал на лапы
Сообщения: 113
Зарегистрирован: Сб янв 11, 2014 21:25:55

Re: STM32F103C8 перенос таблицы прерываний

Сообщение Alex-Elektron »

Написал два скетча, пробуй.

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. Проверил у себя в железе.
settz0r
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Вт окт 23, 2018 09:10:53

Re: STM32F103C8 перенос таблицы прерываний

Сообщение settz0r »

[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]
Вообщем то работает, только сообщение о том что мы в главной программе не вылетает.
Alex-Elektron
Встал на лапы
Сообщения: 113
Зарегистрирован: Сб янв 11, 2014 21:25:55

Re: STM32F103C8 перенос таблицы прерываний

Сообщение Alex-Elektron »

А что из этого тогда работает?

Добавлено after 2 minutes 3 seconds:
Хочу видеть полный дамп двух последних залитых прошивок с адреса 0x8000000 и схему подключения boot0, boot1.
settz0r
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Вт окт 23, 2018 09:10:53

Re: STM32F103C8 перенос таблицы прерываний

Сообщение settz0r »

[uquote="Alex-Elektron",url="/forum/viewtopic.php?p=3494846#p3494846"]А что из этого тогда работает?[/uquote]
1,2 и 5 пункты. При замыкании PB9 выдает на экран сообщение которые вы написали.
Alex-Elektron
Встал на лапы
Сообщения: 113
Зарегистрирован: Сб янв 11, 2014 21:25:55

Re: STM32F103C8 перенос таблицы прерываний

Сообщение Alex-Elektron »

Используется плата - самопал или вот это? Но сперва хочу полный дамп, ибо вчера всё проверил - рабочие прошивки.
Изображение
settz0r
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Вт окт 23, 2018 09:10:53

Re: STM32F103C8 перенос таблицы прерываний

Сообщение settz0r »

http://rgho.st/7rXr4J8XT вот такая плата, МК stm32f103c8, то же самое что вы прислали
Alex-Elektron
Встал на лапы
Сообщения: 113
Зарегистрирован: Сб янв 11, 2014 21:25:55

Re: STM32F103C8 перенос таблицы прерываний

Сообщение Alex-Elektron »

Можно в моём проекте поменять ещё девайс на stm32f103c8, у меня под cb скомпилен, но это скорее всего не поможет, у них отличия, насколько помню, только в объёме флэша. Надо дампы сравнивать.
settz0r
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Вт окт 23, 2018 09:10:53

Re: STM32F103C8 перенос таблицы прерываний

Сообщение settz0r »

[uquote="Alex-Elektron",url="/forum/viewtopic.php?p=3494855#p3494855"]Можно в моём проекте поменять ещё девайс на stm32f103c8, у меня под cb скомпилен, но это скорее всего не поможет, у них отличия, насколько помню, только в объёме флэша. Надо дампы сравнивать.[/uquote]
Проект который вы скинули работает, проблема была с ST-Link, но понимаете я делал подобный проект сам и переносил его на другой адрес, он работал, но когда я добавлял прерывание, оно не срабатывало при переносе, главная проблема в этом. Вы мне прислали проект, где нет прерывания.
Alex-Elektron
Встал на лапы
Сообщения: 113
Зарегистрирован: Сб янв 11, 2014 21:25:55

Re: STM32F103C8 перенос таблицы прерываний

Сообщение Alex-Elektron »

Вечером скину с прерыванием, не перенёс этот проект вчера на ЯД.

Добавлено after 1 minute 13 seconds:
А вообще, попробуй добавить прерывание прямо в мой проект)

Например, по тому же приёму байта в прерывании от ЮСАРТ отсылай его назад

Добавлено after 4 hours 47 minutes 5 seconds:
Обновил файлы основной программы по ссылке на Я.Диске, добавил прерывание от ЮСАРТА2 на приём, данные возвращаются корректно => таблица прерываний на месте. Всё работает. Проверяй у себя, потом дальше будем разбираться.
settz0r
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Вт окт 23, 2018 09:10:53

Re: STM32F103C8 перенос таблицы прерываний

Сообщение settz0r »

[uquote="Alex-Elektron",url="/forum/viewtopic.php?p=3494894#p3494894"]Вечером скину с прерыванием, не перенёс этот проект вчера на ЯД.

Добавлено after 1 minute 13 seconds:
А вообще, попробуй добавить прерывание прямо в мой проект)

Например, по тому же приёму байта в прерывании от ЮСАРТ отсылай его назад

Добавлено after 4 hours 47 minutes 5 seconds:
Обновил файлы основной программы по ссылке на Я.Диске, добавил прерывание от ЮСАРТА2 на приём, данные возвращаются корректно => таблица прерываний на месте. Всё работает. Проверяй у себя, потом дальше будем разбираться.[/uquote]
Да все работает.
Alex-Elektron
Встал на лапы
Сообщения: 113
Зарегистрирован: Сб янв 11, 2014 21:25:55

Re: STM32F103C8 перенос таблицы прерываний

Сообщение Alex-Elektron »

С EXTI разберёшься или нужна помощь?
settz0r
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Вт окт 23, 2018 09:10:53

Re: STM32F103C8 перенос таблицы прерываний

Сообщение settz0r »

[uquote="Alex-Elektron",url="/forum/viewtopic.php?p=3495595#p3495595"]С EXTI разберёшься или нужна помощь?[/uquote]
Пока сам попробую, если что то не получиться, обращусь к вам, спасибо за помощь)
zwitch
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пт июл 24, 2015 11:04:20

Re: STM32F103C8 перенос таблицы прерываний

Сообщение zwitch »

[uquote="settz0r",url="/forum/viewtopic.php?p=3495591#p3495591"]Да все работает.[/uquote] Так в чем же была ошибка, вы поняли в чем разница между тем что вы делали изначально и рабочим вариантом? Просто у меня похожая ситуация, вроде перемусолено все сто раз, все сделал как "те парни из интернета", но прыгнуть из одного проекта в другой не могу....

Два пустых проекта уже создал один светодиодом дрыгает, второй просто вызывает первый, все настроил а вызова нет, прыжок в никуда... Собственно вот оба проекта: 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();
У второго настройки изменены, в 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
}


Вроде все указал ничего не забыл, а нет, не работает...
zwitch
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пт июл 24, 2015 11:04:20

Re: STM32F103C8 перенос таблицы прерываний

Сообщение zwitch »

Решение нашел. Проблема была в том что перед прыжком на новый код прерывания я запрещал, а после не разрешал, ну вот не думал я что код который фактически с нуля инициализирует все переменные и периферию требует этого... Ошибся..
Спойлер

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

/* 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(); никак не видно из отладчика.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32F103C8 перенос таблицы прерываний

Сообщение jcxz »

[uquote="Солнцеворот",url="/forum/viewtopic.php?p=4147895#p4147895"]Особенно вводит в ступор то, что действие ассемблерной вставки __enable_irq(); и __disable_irq(); никак не видно из отладчика.[/uquote]Не знаю про какой отладчик речь, но в IAR-овском прекрасно видно.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32F103C8 перенос таблицы прерываний

Сообщение VladislavS »

Особенно если знать где смотреть :)
Ответить

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