Прерывания в HAL Core для STM32F1 Сломанный или Daft Progrommer??

Mailhouse
Вторник 01 ноября 2016 г. 12:42
Правление IS ucleo STM32F103RB, Arduino.CC IDE 1.6.12

Каждый раз, когда я пытаюсь установить IRQ, доска сбой. Прокомментируйте задание IRQ, и оно работает как чемпион, хотя и без прерываний. Любая помощь ценится.

Если nvic_enableirq после TIM_CR1_CEN, то он висит на задании NVIC. Как показано ниже, он висит на TIM_CR1_CEN.

Что я не получаю?
void setup() { // put your setup code here, to run once: //Initialize serial and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. } Serial.println("Setting up TIM2"); RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; TIM2->SR = 0; // Clear status register flags TIM2->PSC = 2000; // Set prescaler TIM2->ARR = 36000; // set auto-reload register TIM2->DIER = TIM_DIER_UIE; // update interrupt Serial.println("Enabling TIM2 IRQ"); NVIC_SetPriority(TIM2_IRQn, 0); //NVIC_EnableIRQ(TIM2_IRQn); Serial.println("Enabling TIM2"); TIM2->CR1 |= TIM_CR1_CEN; // set control register 1 enable flag Serial.println(TIM2->SR, BIN); Serial.println("TIM2 setup complete"); Serial.println(TIM2->SR, BIN); pinMode(13, OUTPUT); } void loop() { // put your main code here, to run repeatedly: //Serial.println(TIM2->CNT); if (TIM2->CNT == 35000) digitalWrite(13, HIGH); if (TIM2->CNT == 36000) digitalWrite(13, LOW); } void TM2_IRQHandler(void) { if(TIM2->SR & TIM_SR_UIF) // if UIF flag is set { TIM2->SR &= ~TIM_SR_UIF; // clear UIF flag Serial.println("TM3 Interrupt"); } }

Rogerclark
Вторник 01 ноября 2016 г. 2:13
Какое ядро ​​вы используете, то в учетной записи STM32Duino GitHub ?

Mailhouse
Вторник 01 ноября 2016 г. 2:22 утра
Да GitHub One STM32F1 и STM32L4. Должен ли я использовать что -то другое?

Rogerclark
Вторник 01 ноября 2016 г., 2:43
Это новое официальное ядро ​​STM, которое было разработано STM для использования с доской Nucleo.

У нас также есть старое репо / ядро, основанное на оригинальном коде Lifmaple Libmaple.

Это также поддерживает бит Nucleo F103RB, а не L476 Nucleo и т. Д

https: // github.com/rogerclarkmelbourne/arduino_stm32

Но репо на основе Libmaple не использует HAL, это внедрение в чистую комнату Leaflabs из -за ограничений лицензий, когда они написали в 2012 году


В любом случае, если в официальном ядре STM есть ошибка, вам действительно нужно войти в нее в качестве ошибки в GitHub или, возможно, отправить в одну из ветров на этом форуме, посвященном этому ядро.

Это лучшая ветка, чтобы опубликовать

ViewTopic.PHP?F = 48&t = 1413&начало = 50

Потому что его контролируют Wi6labs, которые фактически написали код для STM

Rogerclark
Вторник 01 ноября 2016 г., 2:44
На самом деле, если у вас нет учетной записи GitHub, я войду в систему для вас и ссылаюсь на этот поток

Mailhouse
Вторник 01 ноября 2016 г. 13:54
Прежде чем я пойду сообщать об ошибках, может ли кто -нибудь еще повторить поведение?

Rogerclark
Вторник 01 ноября 2016 г., 19:39
Возможно ли это ошибка в вашем коде?

Скомпилируется ли тот же код и запускается в другой среде, чем Arduino Core и Arduino IDE?

Mailhouse
Вторник 01 ноября 2016 г., 23:17
это вполне возможно. Я очень новичок в STM32 и новичок в 32 -битном MCU в целом. Вот почему я сначала спрашиваю здесь.

Rogerclark
Вторник 01 ноября 2016 г., 11:38
Mailhouse написал:это вполне возможно. Я очень новичок в STM32 и новичок в 32 -битном MCU в целом. Вот почему я сначала спрашиваю здесь.

Даниэфф
Ср. 02 ноября 2016 г., 6:03
Есть прерывание таймера в таймер.в, например:
void blink(timer_id_e timer, uint32_t counter) { digitalWrite(13, !digitalRead(PB1)); } void setup() { pinMode(13, OUTPUT); TimerPulseInit(TIM2_E, 36000, 1000, blink); }

Mailhouse
Сб 12 ноября 2016 г. 2:24
Даниэфф написал:Есть прерывание таймера в таймер.в, например:
void blink(timer_id_e timer, uint32_t counter) { digitalWrite(13, !digitalRead(PB1)); } void setup() { pinMode(13, OUTPUT); TimerPulseInit(TIM2_E, 36000, 1000, blink); }

STM32L476RG