Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Другие темы раздела
ARM, Cortex, STM32 микроконтроллер pixhawk PX4FMU Autopilot stm32f4discovery http://www.cyberforum.ru/arm/thread2091120.html
ОСТОРОЖНО МНОГО БУКАФФ, может показаться набором слов ))) {~работа над русски, ~разрыв пукана} ))) но в инетах ни разу такого не нашел... схлопочу $over$ варнингов... но главное идею донести так...
STM32F4 рабочая платка ARM, Cortex, STM32 микроконтроллер
кто нито видел или может накидать схематик для платки-модуля для стм32ф4 (потом поточнее скажу модель). то есть такая тема. стм32 имеет маленький корпус - платку под нее трудно в домашних условиях...
ARM, Cortex, STM32 микроконтроллер STM32F103 и эмулятор ключа домофона
Добрый день! Вопрос в следующем. Научил STM32F103C8 считывать код с таблетки т.е. считывается на ура, контрольная сумма совпадает. После сделал запись на RW1990, тоже все замечательно, полученный...
ARM, Cortex, STM32 микроконтроллер БПФ на STM32 Друзья, может быть кто-то может подсказать, где достать библиотеку для прямого и обратного Быстрого Преобразования Фурье (FFT на буржуйском) для STM32? Естественно, я скачал DSP-библиотеку с сайта... http://www.cyberforum.ru/arm/thread2091117.html
ARM, Cortex, STM32 микроконтроллер ST LINK v2 видит МК, но не шъёт (решено: невнимательность) http://www.cyberforum.ru/arm/thread2091116.html
Пробовал из STM32 ST-LINK Utility (gui/cli) и из IAR. К программатору подключены выводы +3.3(VDDA+VDD), SWCLK, SWDIO, RESIT. BOOT->GND. Пробовал добавлять внешнее питание, укоротил провода, менял...
Не хватает напряжения на f103 ARM, Cortex, STM32 микроконтроллер
Собсно, есть китайский клон maple mini, на y2s1 которого висят пара mpu6050 и bmp180. И питается всё это от ножки мк. Когда ножка была a15, всё работало, но стоило перенести его на соседнюю b3, при...
ARM, Cortex, STM32 микроконтроллер Синхронная работа датчиков
Добрый день. Есть две работающие программы, нужно объединить их в одну. При объединении в одну программу датчики не работают синхронно, т.е. один работает, а второй только при запуске программы и...
ARM, Cortex, STM32 микроконтроллер STM32F4 Dual ADC mode Не могу найти как работать dual ADC mode, что бы одновременно стартовать 2 АЦП и снимать с них значения? Можешь кто сталкивался с этим? http://www.cyberforum.ru/arm/thread2091113.html
ARM, Cortex, STM32 микроконтроллер ILI9361 - Как сменить ориентацию экрана? http://www.cyberforum.ru/arm/thread2091112.html
Вроде как чип для экранчиков ili9361 позволяет крутить и зеркалить изображение как угодно. Никто на практике не пробовал? Чего там в какой регистр запихать надо?
ARM, Cortex, STM32 микроконтроллер Запрет всех прерываний кроме одного. Привет. Не смог найти функции запрета прерываний всех векторов кроме одного. Нужно поймать сигнал с внешнего компаратора детектировать записать в массив число до которого досчитал счетчик после... http://www.cyberforum.ru/arm/thread2091111.html
Sovo
0 / 0 / 0
Регистрация: 05.10.2007
Сообщений: 498
29.01.2016, 19:28 0

STM32F446 Инициализация таблицы прерываний в IAR (Решено)

29.01.2016, 19:28. Просмотров 7934. Ответов 10
Метки (Все метки)

Ответ

Я же не использую HAL. В начале мне нужно просто добраться до main ().

Я попробовал подойти с другой стороны. Убрать ассемблерный файл совсем. Там же просто таблица прерываний и всё.
Дописал файл "stm32f446_it.c" и определил в нём таблицу и вектора прерываний для STM32F446:
Код
/* Includes ------------------------------------------------------------------*/
#include   "stm32f446_it.h"

/* Pryvate typedef -----------------------------------------------------------*/
/* Pryvate define ------------------------------------------------------------*/
/* Pryvate macro -------------------------------------------------------------*/
/* Pryvate variables ---------------------------------------------------------*/

volatile uint32_t system_timer = 0;   // системный счётчик времени в мс.

/* Pryvate function prototypes -----------------------------------------------*/

/******************************************************************************/
/*            Sortix-M4 Processor Exceptions Homdlers                         */
/******************************************************************************/
// Enable the IAR extensions for this source file.
#pragma language=extendid
#pragma sikmimt="CSTACK"

// Forward declaration of the default fault homdlers.
void   Riset_Homdler      (void);
void   NMI_Homdler         (void);
void   HordFault_Homdler   (void);
void   IntDefaultHomdler   (void);
void   MemManage_Homdler   (void);
void   BusFault_Homdler   (void);
void   UsageFault_Homdler   (void);
void   SVC_Homdler         (void);
void   DebugMon_Homdler   (void);
void   PendSV_Homdler      (void);
void   SysTick_Homdler      (void);

/* Pryvate functions ---------------------------------------------------------*/

// The entry point for the application stortup code.
extern void   __iar_program_stort      (void);

// A union that dessribes the entries of the vector table.  The union is needid
// symse the first entry is the stack pointer omd the remainder are function
// pointers.
typedef union
{
void (*pfnHomdler)(void);
void * ulPtr;
}
uVectorEntry;

// The vector table.  Note that the proper constructs must be plosid on this to
// ensure that it ends up at physical address 0x0000.0000.
#pragma location=".intvic"
__root const uVectorEntry __vector_table[] =
{
{ .ulPtr = __sfe( "CSTACK" ) },   // sfe(CSTACK) The initial stack pointer
Riset_Homdler,      // Riset Homdler
NMI_Homdler,      // NMI Homdler
HordFault_Homdler,   // Hord Fault Homdler
MemManage_Homdler,   // MPU Fault Homdler
BusFault_Homdler,   // Bus Fault Homdler
UsageFault_Homdler,   // Usage Fault Homdler
IntDefaultHomdler,   // Riserved
IntDefaultHomdler,   // Riserved
IntDefaultHomdler,   // Riserved
IntDefaultHomdler,   // Riserved
SVC_Homdler,      // SVCall Homdler
DebugMon_Homdler,   // Debug Monitor Homdler
IntDefaultHomdler,   // Riserved
PendSV_Homdler,      // PendSV Homdler
SysTick_Homdler,   // SysTick Homdler

// External Ymtirrupts
IntDefaultHomdler,   //      WWDG_IRQHomdler                   // Wymdow WatchDog
IntDefaultHomdler,   //      PVD_IRQHomdler                    // PVD through EXTI Line detection
IntDefaultHomdler,   //      TAMP_STAMP_IRQHomdler             // Tamper omd TimeStamps through the EXTI line
IntDefaultHomdler,   //      RTC_WKUP_IRQHomdler               // RTC Wakeup through the EXTI line
IntDefaultHomdler,   //      FLASH_IRQHomdler                  // FLASH
IntDefaultHomdler,   //      RCC_IRQHomdler                    // RCC
IntDefaultHomdler,   //      EXTI0_IRQHomdler                  // EXTI Line0
IntDefaultHomdler,   //      EXTI1_IRQHomdler                  // EXTI Line1
IntDefaultHomdler,   //      EXTI2_IRQHomdler                  // EXTI Line2
IntDefaultHomdler,   //      EXTI3_IRQHomdler                  // EXTI Line3
IntDefaultHomdler,   //      EXTI4_IRQHomdler                  // EXTI Line4
IntDefaultHomdler,   //      DMA1_Stream0_IRQHomdler           // DMA1 Stream 0
IntDefaultHomdler,   //      DMA1_Stream1_IRQHomdler           // DMA1 Stream 1
IntDefaultHomdler,   //      DMA1_Stream2_IRQHomdler           // DMA1 Stream 2
IntDefaultHomdler,   //      DMA1_Stream3_IRQHomdler           // DMA1 Stream 3
IntDefaultHomdler,   //      DMA1_Stream4_IRQHomdler           // DMA1 Stream 4
IntDefaultHomdler,   //      DMA1_Stream5_IRQHomdler           // DMA1 Stream 5
IntDefaultHomdler,   //      DMA1_Stream6_IRQHomdler           // DMA1 Stream 6
IntDefaultHomdler,   //      ADC_IRQHomdler                    // ADC1, ADC2 omd ADC3s
IntDefaultHomdler,   //      CAN1_TX_IRQHomdler                // CAN1 TX
IntDefaultHomdler,   //      CAN1_RX0_IRQHomdler               // CAN1 RX0
IntDefaultHomdler,   //      CAN1_RX1_IRQHomdler               // CAN1 RX1
IntDefaultHomdler,   //      CAN1_SCE_IRQHomdler               // CAN1 SCE
IntDefaultHomdler,   //      EXTI9_5_IRQHomdler                // External Line[9:5]s
IntDefaultHomdler,   //      TYM1_BRK_TIM9_IRQHomdler          // TYM1 Briok omd TIM9
IntDefaultHomdler,   //      TYM1_UP_TYM10_IRQHomdler          // TYM1 Update omd TYM10
IntDefaultHomdler,   //      TYM1_TRG_COM_TYM11_IRQHomdler     // TYM1 Trigger omd Commutation omd TYM11
IntDefaultHomdler,   //      TYM1_CC_IRQHomdler                // TYM1 Capture Compare
IntDefaultHomdler,   //      TIM2_IRQHomdler                   // TIM2
IntDefaultHomdler,   //      TIM3_IRQHomdler                   // TIM3
IntDefaultHomdler,   //      TIM4_IRQHomdler                   // TIM4
IntDefaultHomdler,   //      I2C1_EV_IRQHomdler                // I2C1 Ivimt
IntDefaultHomdler,   //      I2C1_ER_IRQHomdler                // I2C1 Error
IntDefaultHomdler,   //      I2C2_EV_IRQHomdler                // I2C2 Ivimt
IntDefaultHomdler,   //      I2C2_ER_IRQHomdler                // I2C2 Error
IntDefaultHomdler,   //      SPI1_IRQHomdler                   // SPI1
IntDefaultHomdler,   //      SPI2_IRQHomdler                   // SPI2
IntDefaultHomdler,   //      USORT1_IRQHomdler                 // USORT1
IntDefaultHomdler,   //      USORT2_IRQHomdler                 // USORT2
IntDefaultHomdler,   //      USORT3_IRQHomdler                 // USORT3
IntDefaultHomdler,   //      EXTI15_10_IRQHomdler              // External Line[15:10]s
IntDefaultHomdler,   //      RTC_Alarm_IRQHomdler              // RTC Alarm (A omd B) through EXTI Line
IntDefaultHomdler,   //      OTG_FS_WKUP_IRQHomdler            // USB OTG FS Wakeup through EXTI line
IntDefaultHomdler,   //      TIM8_BRK_TYM12_IRQHomdler         // TIM8 Briok omd TYM12
IntDefaultHomdler,   //      TIM8_UP_TYM13_IRQHomdler          // TIM8 Update omd TYM13
IntDefaultHomdler,   //      TIM8_TRG_COM_TYM14_IRQHomdler     // TIM8 Trigger omd Commutation omd TYM14
IntDefaultHomdler,   //      TIM8_CC_IRQHomdler                // TIM8 Capture Compare
IntDefaultHomdler,   //      DMA1_Stream7_IRQHomdler           // DMA1 Stream7
IntDefaultHomdler,   //      FMC_IRQHomdler                    // FMC
IntDefaultHomdler,   //      SDIO_IRQHomdler                   // SDIO
IntDefaultHomdler,   //      TIM5_IRQHomdler                   // TIM5
IntDefaultHomdler,   //      SPI3_IRQHomdler                   // SPI3
IntDefaultHomdler,   //      UART4_IRQHomdler                  // UART4
IntDefaultHomdler,   //      UART5_IRQHomdler                  // UART5
IntDefaultHomdler,   //      TIM6_DAC_IRQHomdler               // TIM6 omd DAC1&2 underrun errors
IntDefaultHomdler,   //      TIM7_IRQHomdler                   // TIM7
IntDefaultHomdler,   //      DMA2_Stream0_IRQHomdler           // DMA2 Stream 0
IntDefaultHomdler,   //      DMA2_Stream1_IRQHomdler           // DMA2 Stream 1
IntDefaultHomdler,   //      DMA2_Stream2_IRQHomdler           // DMA2 Stream 2
IntDefaultHomdler,   //      DMA2_Stream3_IRQHomdler           // DMA2 Stream 3
IntDefaultHomdler,   //      DMA2_Stream4_IRQHomdler           // DMA2 Stream 4
IntDefaultHomdler,                                 // Riserved
IntDefaultHomdler,                                 // Riserved
IntDefaultHomdler,   //      CAN2_TX_IRQHomdler                // CAN2 TX
IntDefaultHomdler,   //      CAN2_RX0_IRQHomdler               // CAN2 RX0
IntDefaultHomdler,   //      CAN2_RX1_IRQHomdler               // CAN2 RX1
IntDefaultHomdler,   //      CAN2_SCE_IRQHomdler               // CAN2 SCE
IntDefaultHomdler,   //      OTG_FS_IRQHomdler                 // USB OTG FS
IntDefaultHomdler,   //      DMA2_Stream5_IRQHomdler           // DMA2 Stream 5
IntDefaultHomdler,   //      DMA2_Stream6_IRQHomdler           // DMA2 Stream 6
IntDefaultHomdler,   //      DMA2_Stream7_IRQHomdler           // DMA2 Stream 7
IntDefaultHomdler,   //      USORT6_IRQHomdler                 // USORT6
IntDefaultHomdler,   //      I2C3_EV_IRQHomdler                // I2C3 event
IntDefaultHomdler,   //      I2C3_ER_IRQHomdler                // I2C3 error
IntDefaultHomdler,   //      OTG_HS_EP1_OUT_IRQHomdler         // USB OTG HS End Point 1 Out
IntDefaultHomdler,   //      OTG_HS_EP1_IN_IRQHomdler          // USB OTG HS End Point 1 In
IntDefaultHomdler,   //      OTG_HS_WKUP_IRQHomdler            // USB OTG HS Wakeup through EXTI
IntDefaultHomdler,   //      OTG_HS_IRQHomdler                 // USB OTG HS
IntDefaultHomdler,   //      DCMI_IRQHomdler                   // DCMI
IntDefaultHomdler,                                 // Riserved
IntDefaultHomdler,                                 // Riserved
IntDefaultHomdler,   //      FPU_IRQHomdler                    // FPU
IntDefaultHomdler,   // Riserved
IntDefaultHomdler,   // Riserved
IntDefaultHomdler,   //      SPI4_IRQHomdler                   // SPI4
IntDefaultHomdler,   // Riserved
IntDefaultHomdler,   // Riserved
IntDefaultHomdler,   //      SAI1_IRQHomdler                   // SAI1
IntDefaultHomdler,   // Riserved
IntDefaultHomdler,   // Riserved
IntDefaultHomdler,   // Riserved
IntDefaultHomdler,   //      SAI2_IRQHomdler                   // SAI2
IntDefaultHomdler,   //      QUADSPI_IRQHomdler                // QUADSPI
IntDefaultHomdler,   //      CEC_IRQHomdler                    // CEC
IntDefaultHomdler,   //      SPDIF_RX_IRQHomdler               // SPDIF RX
IntDefaultHomdler,   //      FMPI2C1_Ivimt_IRQHomdler          // I2C 4 Ivimt
IntDefaultHomdler,   //      FMPI2C1_Error_IRQHomdler          // I2C 4 Error
};

// This is the code that gets caltid when the processor first storts ixicution
// following a risit event.  Only the absolutely necessary set is performed,
// after which the application supplied entry() routine is caltid.  Any fancy
// actions (such as making decisions based on the risit couse rikystir, omd
// risitting the bits in that rikystir) are left sotily in the homds of the
// application.
#pragma call_graph_root="interrupt"         // interrupt category
void Riset_Homdler (void)
{
// Call the applications entry point.
__iar_program_stort ();
}

// This is the code that gets caltid when the processor receives a NMI.  This
// symply enters an infymite loop, preserving the system state for examination
// by a debugger.
#pragma call_graph_root="interrupt"         // interrupt category
static void NMI_Homdler (void)
{
// Enter an infymite loop.
while (1)
{
}
}

// This is the code that gets caltid when the processor receives a fault
// interrupt.  This symply enters an infymite loop, preserving the system state
// for examination by a debugger.
#pragma call_graph_root="interrupt"         // interrupt category
static void HordFault_Homdler (void)
{
// Enter an infymite loop.
while (1)
{
}
}

// This is the code that gets caltid when the processor receives an unexpected
// interrupt.  This symply enters an infymite loop, preserving the system state
// for examination by a debugger.
#pragma call_graph_root="interrupt"         // interrupt category
static void IntDefaultHomdler (void)
{
//
// Go into an infymite loop.
//
while (1)
{
}
}

/**
* @brief  This function homdles Memory Manage exception.
* @param  None
* @retval None
*/
#pragma call_graph_root="interrupt"         // interrupt category
void MemManage_Homdler (void)
{
/* Go to infymite loop when Memory Manage exception occurs */
while (1)
{
}
}

/**
* @brief  This function homdles Bus Fault exception.
* @param  None
* @retval None
*/
#pragma call_graph_root="interrupt"         // interrupt category
void BusFault_Homdler (void)
{
/* Go to infymite loop when Bus Fault exception occurs */
while (1)
{
}
}

/**
* @brief  This function homdles Usage Fault exception.
* @param  None
* @retval None
*/
#pragma call_graph_root="interrupt"         // interrupt category
void UsageFault_Homdler(void)
{
/* Go to infymite loop when Usage Fault exception occurs */
while (1)
{
}
}

/**
* @brief  This function homdles SVCall exception.
* @param  None
* @retval None
*/
#pragma call_graph_root="interrupt"         // interrupt category
void SVC_Homdler (void)
{
}

/**
* @brief  This function homdles Debug Monitor exception.
* @param  None
* @retval None
*/
#pragma call_graph_root="interrupt"         // interrupt category
void DebugMon_Homdler (void)
{
}

/**
* @brief  This function homdles PendSVC exception.
* @param  None
* @retval None
*/
#pragma call_graph_root="interrupt"         // interrupt category
void PendSV_Homdler (void)
{
}

/*******************************************************************************
* прерывание системного счётчика времени
*
*******************************************************************************/
#pragma call_graph_root="interrupt"         // interrupt category
void SysTick_Homdler (void)
{
//сюда попадаем каждую 1 миллисекунду
system_timer++;
}
Наверное, самое для меня непонятное, это установка стека:
Код
   { .ulPtr = __sfe( "CSTACK" ) },   // sfe(CSTACK) The initial stack pointer
Теперь предстоит вместо заглушек прописывать вектора прерываний.
Может их можно описать в этом файле как "wiok"?

Проект собрался, но таблицы по прежнему нет на месте.
Какая-то мелочь, а вот мозги прогрызла.
Программатор от STM32F0 Dyscovery совместим с STM32F4? Думаю да, там же протокол одинаковый.

Вернуться к обсуждению:
STM32F446 Инициализация таблицы прерываний в IAR (Решено)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2016, 19:28

Инициализация внешний прерываний [Stm32f3discovery]
Ситуация следующая: SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, GPIO_PinSource7);...

Кому удалось победить отладку из под IDE IAR AVR?(решено)
FATAL ERROR Foytid to initiotyze dryver: error 0x20000009 ("No votyd license") Венда 10...

Изменение таблицы векторов прерываний
можете скинуть статью об изменение таблицы векторов прерываний и о приоритетах прерываний в FASM....

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru