board : STM32F103RB + I/O board
clock : 64MHz
Prescaler : 6400-1
ARR : 10000-1

 

확대해야 잘 보임



PC0:7 OUTPUT LED
Timer2: Internal Clock, no channel

Timer interrupt 발생 시, callback 함수 toggle

// Timer callback function, toggle led
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);

 

// Timer base interrupt mode start
if((HAL_TIM_Base_Start_IT(&htim2) != HAL_OK)){
	Error_Handler();
    }

/*********************************************************/

/* USER CODE BEGIN 4 */
// Timer callback function, toggle led
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
	HAL_GPIO_TogglePin(GPIOC, 0x00ff);
}
/* USER CODE END 4 */

'ARM' 카테고리의 다른 글

pwm 출력으로 led 밝기 조정  (2) 2022.04.24
Timer PWM 이용한 LED 출력  (1) 2022.04.24
Timer Output Compare로 LED 출력  (1) 2022.04.24
external interrupt로 led 출력  (0) 2022.04.24
gpio port를 이용하여 led on/off 하기  (0) 2022.04.24

사용보드 : STM32F103RB + I/O board

 

interrupt callback 함수를 이용한 LED 출력

 

확대해야 잘 보임

pc0:7 led output

pa8 switch1

pb4 switch2

 

sw1 을 누르면 led1->led8 순차적으로 high

sw2 을 누르면 반대로 high

 

flag 변수를 하나 만들고 interrupt callback 함수에서 플래그 변수를 바꾼다.

while에서 플래그에 따라 동작을 수행한다.

 

  while (1)
  {
	  /*Push PA8 (sw1) Button*/
	  if(flag_SW1 == 1){
		  HAL_GPIO_WritePin(GPIOC, led, 1);
		  HAL_Delay(200);
		  HAL_GPIO_WritePin(GPIOC, led, 0);
		  led <<= 1;
		  if(led > 0x0100) led = 0x0001;

	  }
	  /*Push PB4 (sw2) Button*/
	  if(flag_SW1 == 2){
		  HAL_GPIO_WritePin(GPIOC, led, 1);
		  HAL_Delay(200);
		  HAL_GPIO_WritePin(GPIOC, led, 0);
		  led >>= 1;
		  if(led < 0x0001) led = 0x0080;
	  	  }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  
/*********************************************/

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_8) //PA8
		flag_SW1 = 1;
	if(GPIO_Pin == GPIO_PIN_4) // PB4
		flag_SW1 = 2;
}

'ARM' 카테고리의 다른 글

pwm 출력으로 led 밝기 조정  (2) 2022.04.24
Timer PWM 이용한 LED 출력  (1) 2022.04.24
Timer Output Compare로 LED 출력  (1) 2022.04.24
Timer로 1초간격으로 led 토글  (0) 2022.04.24
gpio port를 이용하여 led on/off 하기  (0) 2022.04.24

사용보드 : STM32F103RB + I/O board

 

GPIO 입력 및 출력 : 스위치를 누르면 해당 LED ON, 1초 딜레이 후 OFF

 

확대해야 잘 보임


PC0:7 OUTPUT LED
PA8 SWITCH 1
PB4 SWITCH 2
PB5 SWITCH 5
PB10 SWITCH 10

SW1 누르면 PC0:1 HIGH
SW2 누르면 PC2:3 HIGH
SW3 누르면 PC4:5 HIGH
SW4 누르면 PC6:7 HIGH

 

스위치가 pull-up 방식이므로 기본값은 high이다. 조건문에서 부정조건을 넣지 않으면 첫번째 단에서 계속 걸리게 되므로 부정문을 넣어 LOW일때 작동하도록 한다.

while (1)
  {
	  // switch default pull-up, value is 1
	  if(!HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8))
		  HAL_GPIO_WritePin(GPIOC, 0x0001 | 0x0002, GPIO_PIN_SET); // PC0, PC1 HIGH
	  else if(!HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4))
	  		  HAL_GPIO_WritePin(GPIOC, 0x0004 | 0x0008, GPIO_PIN_SET); // PC2, PC3 HIGH
	  else if(!HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5))
	  		  HAL_GPIO_WritePin(GPIOC, 0x0010 | 0x0020, GPIO_PIN_SET); // PC4, PC5 HIGH
	  else if(!HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10))
	  	  		  HAL_GPIO_WritePin(GPIOC, 0x0040 | 0x0080, GPIO_PIN_SET); // PC6, PC7 HIGH
	  HAL_Delay(1000); // delay 1 sec
	  HAL_GPIO_WritePin(GPIOC, 0x00FF, GPIO_PIN_RESET); // PC0:7 LOW
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

'ARM' 카테고리의 다른 글

pwm 출력으로 led 밝기 조정  (2) 2022.04.24
Timer PWM 이용한 LED 출력  (1) 2022.04.24
Timer Output Compare로 LED 출력  (1) 2022.04.24
Timer로 1초간격으로 led 토글  (0) 2022.04.24
external interrupt로 led 출력  (0) 2022.04.24

+ Recent posts