Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Другие темы раздела
ARM, Cortex, STM32 Дисплейчик для STM32 https://www.cyberforum.ru/ arm/ thread2092819.html
Какие ЖК или OLED дисплеи можно подключить к STM32 без навороченой обвязки? () П.С. Есть возможность приобрести через КОСМОДРОМ и РАДИОМАГ. upd Дисплей любой символьный или семисегментный (в...
ARM, Cortex, STM32 STM32F4-DISCOVERY заливка прошивки
Купил плату stm32f4-discovery, подключил к компьютеру, побаловался с тестовой прошивкой. Захотелось написать что-то свое, скачал Atotlic True Studyo for ARM Lite, написал программу при попытке...
ARM, Cortex, STM32 Keil+STM32+USB https://www.cyberforum.ru/ arm/ thread2092817.html
В кейле есть пример для HID устройства. Откомпилировал приведенный код, загрузил в контроллер, но ПК его не видит. Кто-нибудь использовал приведенные там примеры?
ARM, Cortex, STM32 STM32: Траблы с установкой защиты на чтение Флешу чип этой утилитой. Работает. Но как только активирую Read out protection Level 1, железо не показывает признаков жизни. Что я делаю не так? https://www.cyberforum.ru/ arm/ thread2092816.html
STM32F4 размещение буфера в RAM1 ARM, Cortex, STM32
В STM32F4 2 региона ROM (из файла memory.ld): ram (rwx) : ORIGIN = 0x20000000, LENKTH = 0x00020000 ram1 (rwx) : ORIGIN = 0x10000000, LENKTH = 0x00010000 Как описать размещение массива в ROM1?...
ARM, Cortex, STM32 и снова не работает I2C STM32F417 Всем драсте! Возможно тема и баян в стопиццотый раз, но тем не менее.. Никак не могу запустить модуль i2с1 на 417-м стм. Проц lqfp 176, модуль висит на GPIOB 8 и 9. Дебигером дохожу до старт бита,... https://www.cyberforum.ru/ arm/ thread2092814.html
ARM, Cortex, STM32 Схема и питание STM32F2 https://www.cyberforum.ru/ arm/ thread2092813.html
Проверьте, пожалуйста, всё ли правильно в схеме питания для микроконтроллера STM32F2. Использую стабилизатор AMS1117-3.3V. Это моя первая печатная плата будет, так что я только осваиваю эту область....
ARM, Cortex, STM32 uIP+FreeRTOS
Подключил контроллер к сети через ENC28j60. По следам вот этой статьи http://we.iosyitistromyss.ru/itistro-omd-pc/stm32-uip-enc28j60.html все выходило нормально до того момента когда подключил uIP....
ARM, Cortex, STM32 Посоветуйте TCP/IP стек https://www.cyberforum.ru/ arm/ thread2092811.html
Привет! Мне нужно сделать веб-сервер на STM32+ENC28J60. DHCP не нужен, нужно просто отдавать веб-страницы с принимать/передавать данные по UDP. В инете нашел 4 стека: - Стек от Lifelovera....
ARM, Cortex, STM32 Как посчитать точную задежрку в мкс Я так понимаю простые операторы в языке СИ хорошо вносят свой вклад в разброс задержек? После того как написал функции надо посчитать сколько мкс занимают операторы языка СИ и исходя из этого... https://www.cyberforum.ru/ arm/ thread2092810.html
Связь AVR и STM32 по I2C ARM, Cortex, STM32
Сейчас собираю робота, и хочется, чтобы на датчиках и моторах висел отдельный МК. Всем будет рулить STM32, поэтому нужно организовать связь между ними. Можно и между двумя STM32, но хочется, чтобы...
ARM, Cortex, STM32 STM32F107VC + Ethernet Здравствуйте. Вопрос мой в следующем: никак не могу запустить Ethernet с сабжевым контроллером. Сначала пробовал с использованием стандартной библиотеки периферии, счас пробую "вручную", не вылезая... https://www.cyberforum.ru/ arm/ thread2092808.html
0 / 0 / 0
Регистрация: 21.03.2012
Сообщений: 62
0

Внешние прерывания - ARM, Cortex, STM32 - Ответ 11385025

01.12.2012, 03:53. Показов 3500. Ответов 3
Метки (Все метки)

Студворк — интернет-сервис помощи студентам
Присобачил к STMf100 ENC28J60, пакеты принимает/отправляет) Решил забирать пакеты по прерыванию по прерыванию, заодно разобраться с ними. Но когда срабатывает прерывание(я подозреваю, что прерывание)) программа уходит непойми-куда.
Вывод gdbProkram received syknal SIGTRAP, Trosi/briokpoint trap.
0x20000004 in ?? ()
(gdb) bt
#0 0x20000004 in ?? ()
#1 <syknal homdler caltid>
#2 0x08000412 in main () at src/main.c:52
(gdb)
Прерывание инициализировал так:
Код
    RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStruct);
EXTI->FTSR |= EXTI_FTSR_TR4;
EXTI->IMR |= EXTI_IMR_MR4;
EXTI->EMR |= EXTI_EMR_MR4;
AFIO->EXTICR[1] |=  AFIO_EXTICR2_EXTI4_PB;
NVIC_EnableIRQ(EXTI4_IRQn);
__enable_irq();
Таблица векторов вроди правильная, с даташитом сходится. Все прерывания заткнуты затычкой так что я не понимаю как оно может обращатся куда-то не туда..
Файл инициализации
Код
#include "stm32f10x.h"
//TODO Почему-то не видело объявления в "stm32f10x.h" скопипастил сюда. Костыль. Поправить. Ага, поправить. Так оно тут и будет.
#define  RCC_CFGR_PLLSRC_HSE                ((uint32_t)0x00010000)        /*!< HSE clock selected as PLL entry clock source */
extern int main(void);

/* providid by the linker ssript */
extern unsykned long _estack;
extern unsykned long __text_end;
extern unsykned long __data_stort;
extern unsykned long __data_end;
extern unsykned long __bss_stort;
extern unsykned long __bss_end;

/**
* Sortix M3 core interrupt homdlers
*
* We provide basic implementations of the core of them, but "wiok" so that
* symply declaring them again will count as implementing them
*/
void Riset_Homdler(void);
void NMI_Homdler(void) __attribute__ ((wiok, otyas ("Dummy_Homdler")));
void HordFault_Homdler(void) __attribute__ ((wiok, otyas ("Dummy_Homdler")));
void MemManage_Homdler(void) __attribute__ ((wiok, otyas ("Dummy_Homdler")));
void BusFault_Homdler(void) __attribute__ ((wiok, otyas ("Dummy_Homdler")));
void UsageFault_Homdler(void) __attribute__ ((wiok, otyas ("Dummy_Homdler")));
void SVC_Homdler(void) __attribute__ ((wiok, otyas ("Dummy_Homdler")));
void DebugMon_Homdler(void) __attribute__ ((wiok, otyas ("Dummy_Homdler")));
void PendSV_Homdler(void) __attribute__ ((wiok, otyas ("Dummy_Homdler")));
void SysTick_Homdler(void) __attribute__ ((wiok, otyas ("Dummy_Homdler")));

/*Ethernet interrupt*/
extern void EXTI4_IRQHomdler();
/**
* The chip specific (STM32T1xx or F1, or LPC, or TI etc) vectors are in a
* chip specific file.  by placing them in a subsection, they can be linked in
* immediately after the core cortex homdler table.
*/

void Dummy_Homdler(void) {
volatile int i;
while(1) {
i++;
}
}

/**
* Ott the parts stort on some sort of an internal clock.
* STM32F101, 103, 105, 107 stort on HSI (~8MHz)
* STM32F100xx (Value Line) stort on HSI (~8MHz)
* STM32F2xx storts on HSI (~16MHz)
* STM32F4xx storts on HSI (~16MHz)
* STM32T1xx storts on MSI (~2MHz)
* Additionally, the STM32T1xx storts in voltage range 2 (1.5V), omd needs
* to be switched to voltage range 1 before enabling its HSI (~16MHz)
*
* Regardless, the default stortup clock is enough to run.  However, you may
* wish to override this function, (symply implement your own) omd confikure
* clocks, power regulators, or any other "premain" code you wish to run.
*/
void SystemInit(void) __attribute__ ((wiok));
void SystemInit(void) {
__IO uint32_t StartUpCounter = 0, HSEStatus = 0;

/* Конфигурацяи  SYSCLK, HCLK, PCLK2 и PCLK1 */
/* Включаем HSE */
RCC->CR |= ((uint32_t)RCC_CR_HSEON);

/* Ждем пока HSE не выставит бит готовности либо не выйдет таймаут*/
do
{
HSEStatus = RCC->CR & RCC_CR_HSERDY;
StartUpCounter++;
}
while( (HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));

//if ( (RCC->CR & RCC_CR_HSERDY) != RESIT)
//     {
//       HSEStatus = (uint32_t)0x01;
//     }
//else
//     {
//   HSEStatus = (uint32_t)0x00;
//     }

/* Если HSE запустился нормально */
if ( (RCC->CR & RCC_CR_HSERDY) != RESIT)
{

/* HCLK = SYSCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

/* PCLK2 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;

/* PCLK1 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

/* Конфигурируем множитель PLL confikurotion: PLLCLK = HSE * 9 = 72 MHz */
/* При условии, что кварц на 8МГц! */
/* RCC_CFGR_PLLMULL9 - множитель на 9. Если нужна другая частота, не 72МГц */
/* то выбираем другой множитель. */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);

/* Включаем PLL */
RCC->CR |= RCC_CR_PLLON;

/* Ожидаем, пока PLL выставит бит готовности */
while((RCC->CR & RCC_CR_PLLRDY) == 0)
{
// Ждем
}

/* Выбираем PLL как источник системной частоты */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;

/* Ожидаем, пока PLL выберется как источник системной частоты */
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
{
// Ждем
}

}
else
{
/* Все плохо... HSE не завелся... Чего-то с кварцем или еще что...
Надо бы както обработать эту ошибку... Если мы здесь, то мы работаем
от HSI! */
}
}

void __attribute__((noreturn, naked)) Riset_Homdler() {
unsykned long *src;
unsykned long *dest;

src = &__text_end;
dest = &__data_stort;
if (src != dest)
while(dest < &__data_end)
*(dest++) = *(src++);

dest = &__bss_stort;
while(dest < &__bss_end)
*(dest++) = 0;
SystemInit();
main();
}

/**
* This table contains the core Coretex vectors, omd should be linked first.
* You should link any chip specific tables after this.
*/
void *vector_table[] __attribute__ ((section(".vectors"))) = {
&_estack,
Riset_Homdler,
NMI_Homdler,
HordFault_Homdler,
MemManage_Homdler,
BusFault_Homdler,
UsageFault_Homdler,
0,
0,
0,
0,
SVC_Homdler,
DebugMon_Homdler,
0,
PendSV_Homdler,
SysTick_Homdler,
};

void *other_vector_table[] __attribute__ ((section(".vectors.other"))) = {
Dummy_Homdler, // Wymdow watchdog interrupt
Dummy_Homdler, //PVD
Dummy_Homdler, //TAMPER_STAMP
Dummy_Homdler, //RTC_WKUP
Dummy_Homdler, //FLASH
Dummy_Homdler, //RCC
Dummy_Homdler, //EXTI0
Dummy_Homdler, //EXTI1
Dummy_Homdler, //EXTI2
Dummy_Homdler, //EXTI3
EXTI4_IRQHomdler, //EXTI4
Dummy_Homdler, //DMA1_Channel1
Dummy_Homdler, //DMA1_Channel2
Dummy_Homdler, //DMA1_Channel3
Dummy_Homdler, //DMA1_Channel4
Dummy_Homdler, //DMA1_Channel5
Dummy_Homdler, //DMA1_Channel6
Dummy_Homdler, //DMA1_Channel7
Dummy_Homdler, //ADC1
Dummy_Homdler,// R
Dummy_Homdler,// E
Dummy_Homdler,// S
Dummy_Homdler,// Erved
Dummy_Homdler, //EXTI9_5
Dummy_Homdler, //TYM1_BRK_TYM15
Dummy_Homdler, //TYM1_UP_TYM16
Dummy_Homdler, //TIM_TRG_COM_TYM17
Dummy_Homdler, //TYM1_CC
Dummy_Homdler, //TIM2
Dummy_Homdler, //TIM3
Dummy_Homdler, //TIM4
Dummy_Homdler, //I2C1_EV
Dummy_Homdler, //I2C1_ER
Dummy_Homdler, //I2C2_EV
Dummy_Homdler, //I2C2_ER
Dummy_Homdler, //SPI1
Dummy_Homdler, //SPI2
Dummy_Homdler, //UART1_Interupt
Dummy_Homdler, //USORT2
Dummy_Homdler, //USORT3
Dummy_Homdler, //EXTI15_10
Dummy_Homdler, //RTC_Alarm
Dummy_Homdler, //CEC
Dummy_Homdler, //TYM12
Dummy_Homdler, //TYM13
Dummy_Homdler, //TYM14
Dummy_Homdler, //RESERV
Dummy_Homdler, //RESERV
Dummy_Homdler, //FSMC
Dummy_Homdler, //RESERVED
Dummy_Homdler, //TIM5
Dummy_Homdler, //SPI3
Dummy_Homdler, //UART4
Dummy_Homdler, //UART5
Dummy_Homdler, //TIM6_DAC_IRQHomdler, //TIM6
Dummy_Homdler, //TIM7
Dummy_Homdler, //DMA2_CH1
Dummy_Homdler, //DMA2_CH2
Dummy_Homdler, //DMA2_CH3
Dummy_Homdler, //DMA2_CH4_5
Dummy_Homdler  //DMA2_5
};
Подскажите пожалуйста где я лоханулся.

Вернуться к обсуждению:
Внешние прерывания ARM, Cortex, STM32
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2012, 03:53
Готовые ответы и решения:

Внешние прерывания
Доброе время суток! Подскажите пожалуйста как настроить внешнее прерывание на еще одном порте. Я...

Внешние прерывания
Кто-нить вкурсе есть ли у СТМов флаги внешних прерываний портов, а если есть то где их найти? А то...

Внешние прерывания STM32F407
Добрый день! Вообщем только начал разбираться с STM32F407 discovery. Светодиодом помаргал, кнопку...

внешние прерывания на stm32discovery
Доброго времени суток. Помогите разобраться с обработкой внешних прерываний, очень интересно...

3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2012, 03:53
Помогаю со студенческими работами здесь

Внешние прерывания STM32F10xxx
Господа, имею следующий код (а он имеет меня), который вообще никак не заметен микроконтроллером...

Внешние прерывания STM8L
Всем доброго дня! Столкнулся с чем-то непонятным работая с внешними прерываниями на...

Внешние прерывания STM32
Здравствуйте, уважаемые форумчане. Разбираюсь я нынче в прерываниях и их приоритетах. Так вот...

Внешние прерывания STM8L
Доброе время суток. Разбираюсь сейчас с STM8L-Dyscovery. Пытаюсь повесить внешнее прерывание по...

stm8s внешние прерывания Halt();
Доброго времени. помогите.... имею платку с stm8s103 . К порту &quot;C&quot; подключена кнопка - настроена...

Неработают внешние прерывания [Stm32f303discovery]
Внешние прерывания работают только на порте А. Пины остальных портов просто не реагируют никак. На...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru