Перейти к содержанию
    

Внешнее прерывание на ноге STM32

Внешнее прерывание заведено на ногу SWDIO, поэтому отладчик не получается использовать

контроллер stm32l432, 13 нога на PORTA


 

	#define 	RFM69_ISR_PIN_Pin 					GPIO_PIN_13
	#define 	RFM69_ISR_PIN_GPIO_Port 			GPIOA
	#define 	RFM69_ISR_PIN_EXTI_IRQn 			EXTI15_10_IRQn
	#define 	RFM69_ISR_PIN_EXTI_IRQHandler	 	EXTI15_10_IRQHandler


void beacon_task_isr_init(void)
{
    GPIO_InitTypeDef gpio = {
        0
    };

      __HAL_RCC_GPIOA_CLK_ENABLE();

    /*  Это для "средней" и совсем новой платы */
    gpio.Pin = RFM69_ISR_PIN_Pin;
    gpio.Mode = GPIO_MODE_IT_RISING;
    gpio.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(RFM69_ISR_PIN_GPIO_Port, &gpio);

    HAL_NVIC_SetPriority(RFM69_ISR_PIN_EXTI_IRQn, 5, 1);
    HAL_NVIC_EnableIRQ(RFM69_ISR_PIN_EXTI_IRQn);

 

В прерываниии поставил печать, но ничего, ...пытаюсь просто подавать проводком 3.3 вольта на эту ногу

и никакой реации.

Кто делал внешнее прерывание на служебные ноги, может там еще надо какие то телодвижения в коде сделать?

 

Что то очень давно помню что как то нужно JTAG ремапить, НО КАК это сделать с этим процом я не знаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 minutes ago, inventor said:

Что то очень давно помню что как то нужно JTAG ремапить, НО КАК это сделать с этим процом я не знаю.

__HAL_AFIO_REMAP_SWJ_DISABLE();

пробовал делать? Но отладку ты тут же потряешь, да и проц будет шиться только под ресетом, коего на китайских программаторах обычно нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

44 минуты назад, inventor сказал:

В прерываниии поставил печать

Стесняюсь спросить: каким образом? Уж не вызовом ли блокирующей функции?  :biggrin:

44 минуты назад, inventor сказал:

Что то очень давно помню что как то нужно JTAG ремапить, НО КАК это сделать с этим процом я не знаю.

И мануал конечно же об этом молчит. печалька....  :cray2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насколько я понимаю, что по умолчанию PA13 AF0 это дебаг. В лоб ремапа как на 103 на этих процах кажется нет. Так что попробуйте установить какую-нибудь неиспользуемую альтернативную функцию, например 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, mikl74 said:

Так что попробуйте установить какую-нибудь неиспользуемую альтернативную функцию, например 2

Зачем, он же не выбирает альтернативную функцию, а использует ножку как GPIO input mode. В этом режиме все альтернативы отключаются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

функции __HAL_AFIO_REMAP_SWJ_DISABLE() для L432 нет, сделал по примитивному

просто кинул проводок на другую ногу и там сделал внешнее IRQ

настраивал этот порт SWDIO  на выход - меандр дает, а вот прерывания по входу никак не получаются.

1 hour ago, jcxz said:

Стесняюсь спросить: каким образом? Уж не вызовом ли блокирующей функции?  :biggrin:

И мануал конечно же об этом молчит. печалька....  :cray2:

просто вывод в uart порт

а есть разница если это просто на этапе отладки или какой нить

неизвестный мне программистский талмуд это запрещает делать?

в мануале и errate не нашел ничего

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

28 minutes ago, inventor said:

настраивал этот порт SWDIO  на выход - меандр дает, а вот прерывания по входу никак не получаются.

Вот, попробовал на STM32H743.

Работает.

Spoiler

 


void EXTI15_10_IRQHandler(void)
{
	// PA13 interrupt
	if( (EXTI_D1->PR1 & EXTI_PR1_PR13) == (EXTI_D1->IMR1 & EXTI_IMR1_IM13) )
	{
		EXTI_D1->PR1 = EXTI_PR1_PR13; // clear pending interrupt

		if(GPIOA->IDR & GPIO_IDR_ID13)
		{
			dbg_pin_set(1);
		}else{
			dbg_pin_reset(1);
		}
	}
}

void PA13_EXTI_init(void)
{
	// Init PA13 pin as input
	RCC->AHB4ENR |= RCC_AHB4ENR_GPIOAEN;

	GPIOA->MODER   &= ~(GPIO_MODER_MODE13); 		// set to input mode
	GPIOA->PUPDR   &= ~(GPIO_PUPDR_PUPD13); 		// reset to No pull-up, pull-down
	GPIOA->PUPDR   |=  (GPIO_PUPDR_PUPD13_0); 		// set to pull-up enable
	//--------------------
	// PA13 - external interrupt

	RCC->APB4ENR |= RCC_APB4ENR_SYSCFGEN;

	 // PA4 interrupt select
	uint32_t syscfg_val;
	syscfg_val = SYSCFG->EXTICR[3];
	syscfg_val &= ~(15UL << 4); // reset
	syscfg_val |=  (0UL << 4);  // set new value
	SYSCFG->EXTICR[3] = syscfg_val;

	EXTI->RTSR1 |=  EXTI_RTSR1_TR13;    // rising edge enable
	EXTI->FTSR1 |=  EXTI_RTSR1_TR13;    // falling edge enable
	EXTI_D1->EMR1 |= EXTI_IMR1_IM13; //
	EXTI_D1->IMR1 |= EXTI_IMR1_IM13; // pin interrupt enable
	EXTI_D1->PR1 = EXTI_PR1_PR13; // clear pending request

	NVIC_ClearPendingIRQ(EXTI15_10_IRQn);
	NVIC_SetPriority(EXTI15_10_IRQn, 1);
	NVIC_EnableIRQ(EXTI15_10_IRQn);
}

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Советую выкинуть hal, да почитать документацию!

Вот, скачал свежийRM0394, на странице 1556 есть табличка - какие пины заняты при разной степени отключения JTAG/SWD. Оттуда же ссылочка на п. 8.3.2. Переходим, читаем. Подробней - в даташите.

Ну и да, если у вас вызывается в прерывании блокирующая запись в UART — это, мягко говоря, нехорошо.

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

STM32H743. Это другой процессор. на 103 у меня тоже работает

а на L432 не хочет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, inventor said:

STM32H743. Это другой процессор. на 103 у меня тоже работает

а на L432 не хочет

Просто у меня L432 вообще нет.

Поэтому пробовал на чем было. 

Периферия у них у всех сильно похожая, местами даже одинаковая.

Скорее всего у вас где-то какая-то ошибочка закралась.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно попробовать софтово возбудить exti-прерывание (EXTI_SWIER1), чтобы исключить вопросы к обработчику.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...