cancel
Showing results for 
Search instead for 
Did you mean: 

STM32L072CZ EXTI PB14 RISING FALLING ok. How do I activate PB13 and PB15

SPero.1
Associate II

I would like to activate the RISING FALLING function also on PIn 13 and 15 but I can't do it.

I'm probably not able to edit several files that I list

6 REPLIES 6
SPero.1
Associate II

main.c add exti15

int exti_flag=0;
int exti15_flag=0;
void send_exti(void);
void send_exti15(void);
	
switch_status=HAL_GPIO_ReadPin(GPIO_EXTI_PORT,GPIO_EXTI_PIN);
		
	if(exti_flag==1)
	{
		AppData.Buff[i++]=(switch_status<<7)|(sensor_data.in1<<1)|0x01;
		exti_flag=0;
	}
	else
	{
		AppData.Buff[i++]=(switch_status<<7)|(sensor_data.in1<<1);
	}
	
	switch_status15=HAL_GPIO_ReadPin(GPIO_EXTI15_PORT,GPIO_EXTI15_PIN);
		
	if(exti15_flag==1)
	{
		AppData.Buff[i++]=(switch_status15<<7)|(sensor_data.in15<<1)|0x01;
		exti15_flag=0;
	}
	else
	{
		AppData.Buff[i++]=(switch_status15<<7)|(sensor_data.in15<<1);
	}
	--------------------
void send_exti(void)
{
	if(exti_flag==1)
	{
	 Send( );
	}
}
void send_exti15(void)
{
	if(exti15_flag==1)
	{
	 Send( );
	}
}

SPero.1
Associate II

gpio_exti.c add EXTI15

void  GPIO_EXTI_RISING_FALLINGInit( void  )
{
	GPIO_InitTypeDef GPIO_InitStruct={0};
	GPIO_EXTI_CLK_ENABLE();
  	
	GPIO_InitStruct.Mode =GPIO_MODE_IT_RISING_FALLING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
	GPIO_InitStruct.Pin = GPIO_EXTI_PIN;
 
  HW_GPIO_Init(GPIO_EXTI_PORT, GPIO_EXTI_PIN, &GPIO_InitStruct );
	
	/* Enable and set EXTI lines 4 to 15 Interrupt to the lowest priority */
  HAL_NVIC_SetPriority(EXTI4_15_IRQn, 2, 0);
  HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);
}
 
void  GPIO_EXTI15_RISING_FALLINGInit( void  )
{
	GPIO_InitTypeDef GPIO_InitStruct={0};
	GPIO_EXTI15_CLK_ENABLE();
  	
	GPIO_InitStruct.Mode =GPIO_MODE_IT_RISING_FALLING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
	GPIO_InitStruct.Pin = GPIO_EXTI15_PIN;
 
  HW_GPIO_Init(GPIO_EXTI15_PORT, GPIO_EXTI15_PIN, &GPIO_InitStruct );
	
	/* Enable and set EXTI lines 4 to 15 Interrupt to the lowest priority */
  HAL_NVIC_SetPriority(EXTI4_15_IRQn, 2, 0);
  HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);
}

SPero.1
Associate II

gpio_exti.h add EXTI15

void  GPIO_EXTI_RISING_FALLINGInit( void  );
void  GPIO_EXTI15_RISING_FALLINGInit( void  );

SPero.1
Associate II

stm32l0xx_it.c add GPIO_PIN_15

void EXTI4_15_IRQHandler( void )
{
  HAL_GPIO_EXTI_IRQHandler( GPIO_PIN_4 );
  
  HAL_GPIO_EXTI_IRQHandler( GPIO_PIN_5 );
 
  HAL_GPIO_EXTI_IRQHandler( GPIO_PIN_6 );
  
  HAL_GPIO_EXTI_IRQHandler( GPIO_PIN_7 );
 
  HAL_GPIO_EXTI_IRQHandler( GPIO_PIN_8 );
 
  HAL_GPIO_EXTI_IRQHandler( GPIO_PIN_9 );
  
  HAL_GPIO_EXTI_IRQHandler( GPIO_PIN_10 );
  
  HAL_GPIO_EXTI_IRQHandler( GPIO_PIN_11 );
 
  HAL_GPIO_EXTI_IRQHandler( GPIO_PIN_12 );
 
  HAL_GPIO_EXTI_IRQHandler( GPIO_PIN_13 );
 
//  HAL_GPIO_EXTI_IRQHandler( GPIO_PIN_14 );
 if(__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_14) != RESET) 
  { 
	 __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_14);
		HAL_NVIC_DisableIRQ(EXTI4_15_IRQn);		
	 if(inmode!=0)
	 {
	 exti_flag=1;
	 }
	 __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_14);
   HAL_GPIO_EXTI_Callback(GPIO_PIN_14);		
	 HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);
  }
 
//  HAL_GPIO_EXTI_IRQHandler( GPIO_PIN_15 );
 if(__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_15) != RESET) 
  { 
	 __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_15);
		HAL_NVIC_DisableIRQ(EXTI4_15_IRQn);		
	 if(inmode!=0)
	 {
	 exti15_flag=1;
	 }
	 __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_15);
   HAL_GPIO_EXTI_Callback(GPIO_PIN_15);		
	 HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);
  }
}

SPero.1
Associate II

stm32l0xx_hw_conf.h add EXTI15

#define GPIO_EXTI_CLK_ENABLE()   __HAL_RCC_GPIOB_CLK_ENABLE()
#define GPIO_EXTI_PORT          GPIOB	 
#define GPIO_EXTI_PIN           GPIO_PIN_14
 
#define GPIO_EXTI15_CLK_ENABLE()   __HAL_RCC_GPIOB_CLK_ENABLE()
#define GPIO_EXTI15_PORT          GPIOB	 
#define GPIO_EXTI15_PIN         GPIO_PIN_15

SPero.1
Associate II

Hello to all

I managed to run 5 EXTI but I always have a problem on the sent values ​​instead of getting the byte 00 I get random strange values, I also added a resistance of 4k on all EXTI the values ​​seem stable but they are not 00

PA1 = 0e

PA4 = 28

PB13 = 07

PB14 = 00

PB15 = 80

how do i get 00 and 01?

My code is this

switch_status1=HAL_GPIO_ReadPin(GPIO_EXTI1_PORT,GPIO_EXTI1_PIN); //PA1
		
	if(exti1_flag==1)
	{
		AppData.Buff[i++]=(switch_status1<<7)|(sensor_data.in11<<1)|0x01;
		exti1_flag=0;
	}
	else
	{
		AppData.Buff[i++]=(switch_status1<<7)|(sensor_data.in11<<1);
	}
	
	switch_status4=HAL_GPIO_ReadPin(GPIO_EXTI4_PORT,GPIO_EXTI4_PIN); //PA4
		
	if(exti4_flag==1)
	{
		AppData.Buff[i++]=(switch_status4<<7)|(sensor_data.in14<<1)|0x01;
		exti4_flag=0;
	}
	else
	{
		AppData.Buff[i++]=(switch_status4<<7)|(sensor_data.in14<<1);
	}
	
	switch_status13=HAL_GPIO_ReadPin(GPIO_EXTI13_PORT,GPIO_EXTI13_PIN); //PB13
		
	if(exti13_flag==1)
	{
		AppData.Buff[i++]=(switch_status13<<7)|(sensor_data.in13<<1)|0x01;
		exti13_flag=0;
	}
	else
	{
		AppData.Buff[i++]=(switch_status13<<7)|(sensor_data.in13<<1);
	}
			
	switch_status=HAL_GPIO_ReadPin(GPIO_EXTI_PORT,GPIO_EXTI_PIN); //PB14
		
	if(exti_flag==1)
	{
		AppData.Buff[i++]=(switch_status<<7)|(sensor_data.in1<<1)|0x01;
		exti_flag=0;
	}
	else
	{
		AppData.Buff[i++]=(switch_status<<7)|(sensor_data.in1<<1);
	}
	
	switch_status15=HAL_GPIO_ReadPin(GPIO_EXTI15_PORT,GPIO_EXTI15_PIN); //PB15
		
	if(exti15_flag==1)
	{
		AppData.Buff[i++]=(switch_status15<<7)|(sensor_data.in15<<1)|0x01;
		exti15_flag=0;
	}
	else
	{
		AppData.Buff[i++]=(switch_status15<<7)|(sensor_data.in15<<1);
	}
		

I'm not a programmer I'm learning by copying part of code, I'm definitely writing random things

If you can help me, you will be grateful