반응형

https://youtube.com/live/ghofKLsPOV8

[STM32#01] STM32F103RB NUCLEO보드와 STM32CubeIDE를 이용해서 시작해보기!(녹칸다 내맘대로 STM32/튜토리얼)

심심한녹칸다의 내맘대로 STM32시리즈이다!

STM32시리즈의 모든 자료는 구글 슬라이드에 작성하고 모두에게 공유되어있음!
https://docs.google.com/presentation/d/1myA5iYbjuKsLWLqtRLKAiRfwUwvqB1d1RGjiMIIgp3I/edit?slide=id.p#slide=id.p

STM32시리즈에서 사용하는 보조도구는 아래 녹칸다의 블로그에 거버파일과 BOM이 있음!
https://bota.tistory.com/2442

이번편은 녹칸다의 내맘대로 STM32시리즈의 시작하기 편으로 어떻게 시리즈를 이끌어 나갈지를 알아보도록 한다!
그리고 기본적으로 필요한 준비물과 기능들을 알아보고 처음부터 차근차근 녹칸다와 함께 STM32를 해보도록 한다!

 

 


1.STM32의 작동이 되는지 테스트 하기 위해서 LED를 1개 1초 간격으로 ON/OFF하는 예제를 구현하시오!

while (1)
 {
	  //PB3 ON
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_SET); //ON
	  //1000ms delay
	  HAL_Delay(1000);
	  //PB3 OFF
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_RESET);  //OFF
	  //1000ms delay
	  HAL_Delay(1000);
	 
   /* USER CODE END WHILE */
   /* USER CODE BEGIN 3 */
 }

ex1.zip
0.00MB

 

2.IOC에서 PB3핀을 LED1이라는 별명을 붙혀서 예제 1과 동일하게 제어해보시오!

while (1)
 {
	  //PB3 ON
	  HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET); //ON
	  //1000ms delay
	  HAL_Delay(1000);
	  //PB3 OFF
	  HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);  //OFF
	  //1000ms delay
	  HAL_Delay(1000);
   /* USER CODE END WHILE */
   /* USER CODE BEGIN 3 */
 }

ex2.zip
0.00MB

 

3.녹칸다가 달아놓은 8개의 LED를 1초 간격으로 모두 ON/OFF하시오!

while (1)
 {
	  //ALL ON
	  HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET); //ON
	  HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET); //ON
	  HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_SET); //ON
	  HAL_GPIO_WritePin(LED4_GPIO_Port,LED4_Pin,GPIO_PIN_SET); //ON
	  HAL_GPIO_WritePin(LED5_GPIO_Port,LED5_Pin,GPIO_PIN_SET); //ON
	  HAL_GPIO_WritePin(LED6_GPIO_Port,LED6_Pin,GPIO_PIN_SET); //ON
	  HAL_GPIO_WritePin(LED7_GPIO_Port,LED7_Pin,GPIO_PIN_SET); //ON
	  HAL_GPIO_WritePin(LED8_GPIO_Port,LED8_Pin,GPIO_PIN_SET); //ON
	  //1000ms delay
	  HAL_Delay(1000);
	  //ALL OFF
	  HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET); //ON
	  HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET); //ON
	  HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_RESET); //ON
	  HAL_GPIO_WritePin(LED4_GPIO_Port,LED4_Pin,GPIO_PIN_RESET); //ON
	  HAL_GPIO_WritePin(LED5_GPIO_Port,LED5_Pin,GPIO_PIN_RESET); //ON
	  HAL_GPIO_WritePin(LED6_GPIO_Port,LED6_Pin,GPIO_PIN_RESET); //ON
	  HAL_GPIO_WritePin(LED7_GPIO_Port,LED7_Pin,GPIO_PIN_RESET); //ON
	  HAL_GPIO_WritePin(LED8_GPIO_Port,LED8_Pin,GPIO_PIN_RESET); //ON
	  //1000ms delay
	  HAL_Delay(1000);
   /* USER CODE END WHILE */
   /* USER CODE BEGIN 3 */
 }

ex3.zip
0.00MB

 

4.LED가 8개 있는데, 극단적으로 1000개쯤 된다고 하면 관리하기가 상당히 어렵겠지? 그러면 일괄적으로 동시에 ON/OFF하려면 어떻게 하면 좋을까?(반복문)

/* USER CODE BEGIN 2 */
 GPIO_TypeDef *Nockanda_port[] = {LED1_GPIO_Port,LED2_GPIO_Port,LED3_GPIO_Port,LED4_GPIO_Port,LED5_GPIO_Port,LED6_GPIO_Port,LED7_GPIO_Port,LED8_GPIO_Port};
 uint16_t Nockanda_pin[] = {LED1_Pin,LED2_Pin,LED3_Pin,LED4_Pin,LED5_Pin,LED6_Pin,LED7_Pin,LED8_Pin};
 /* USER CODE END 2 */
 /* Infinite loop */
 /* USER CODE BEGIN WHILE */
 while (1)
 {
	  //ALL ON
	  for(int i = 0;i<8;i++){
		  HAL_GPIO_WritePin(Nockanda_port[i],Nockanda_pin[i],GPIO_PIN_SET); //ON
	  }
	  //1000ms delay
	  HAL_Delay(1000);
	  //ALL OFF
	  for(int i = 0;i<8;i++){
		  HAL_GPIO_WritePin(Nockanda_port[i],Nockanda_pin[i],GPIO_PIN_RESET); //OFF
	  }
	  //1000ms delay
	  HAL_Delay(1000);
   /* USER CODE END WHILE */
   /* USER CODE BEGIN 3 */
 }

ex4.zip
0.00MB

반응형
Posted by 덕력킹
,