STM32

STM32F407VE - 기초 3) USART

찬영_00 2024. 11. 21. 12:10
728x90

나는 USART2를 사용하겠다.

 

클럭은 이전과 같이 설정해준다.

 

먼저 폴링방식을 보겠다.

 

파라미터 설정은 다음과 같이 해준다

 

 

 

 

인터럽트를 미설정함으로써 자동으로 폴링 방식이 될것이다.

 

주의사항

이건 내가 겪었던 일이고, 하루를 날려먹은 이유다.

포스팅 전 미리 실습을 해봤을 때 자꾸 값이 보낸거랑 다르게 와서 모든 방법을 동원해 진행해보았다.

내가 놓친부분이 있는데 클럭 설정부분이다.

자세히 보자

 

저기 빨간색으로 줄쳐둔 부분이 25로 설정되어 있었다.

하지만 나는 외부크리스탈 (8MHz)를 사용중이였는데 이것이 ST-Link랑 연결되어있어 8MHz의 클럭 신호를 만들어주어야한다고 한다.

STM32의 클럭 입력으로 ST-Link의 MCO 핀에서 제공되는 8MHz 클럭을 사용하는 경우, RCC 설정에서 HSE 주파수를 8MHz로 설정해야 합니다.
ST-Link가 MCO 클럭을 제공하지 않거나 HSE 설정이 잘못된 경우, STM32는 기본적으로 HSI 클럭을 사용해 동작합니다.

따라서 저 부분을 8로 만들어주는 걸 잊지 말자. ( 클럭은 오른쪽만 설정해도 된다고 생각했다..)

 

이제 프로토콜을 이용하여 LED를 껐다 켜보자

 

먼저 내장되어있는 LED를 설정해준다.

https://stm32-base.org/boards/STM32F407VET6-STM32-F4VE-V2.0.html

 

STM32F407VET6 - STM32 F4VE V2.0

The STM32-base project is meant for students and hobbyists. The goal of the STM32-base project is to provide a simple and easy to use base project for working with STM32 microcontrollers.

stm32-base.org

참고하자

 

LED 연결 - D2, D3
통신 방식 - Polling
통신 채널 - USART2

 

 

프로토콜은 다음으로 설정했다.

stx led on/off etx
0x02 0x01 0x00 0x03

 

 LED는 총 2개 , 1과 2로 나누었고, on, off는 0과 1로 정했다.
프토토콜 밑은 예시임으로 2 1 0 3을 전송함으로 1번 LED 꺼라 라는 뜻이다.

 

코드는 다음과 같다.

  uint8_t rx_data[4];
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  if(HAL_UART_Receive(&huart2, rx_data, 4, 100) == HAL_OK){
		  if(rx_data[0] == '2' && rx_data[1] == '1' && rx_data[3] == '3'){
			  if(rx_data[2] == '1'){
				  HAL_GPIO_WritePin(GPIOA, GPIO_PA6_D2_Pin, 1);
			  }else {
				  HAL_GPIO_WritePin(GPIOA, GPIO_PA6_D2_Pin, 0);
			  }
		  }else{
			  if(rx_data[2] == '1'){
				  HAL_GPIO_WritePin(GPIOA, GPIO_PA7_D3_Pin, 1);
			  }else {
				  HAL_GPIO_WritePin(GPIOA, GPIO_PA7_D3_Pin, 0);
			  }
		  }
		  HAL_UART_Transmit(&huart2, rx_data, sizeof(rx_data), 100);
	  }

 

https://m.blog.naver.com/jocooldog/222384231482

 

[시리얼 통신] Hercules Serial Monitor 설치

* 시리얼 통신 테스트를 위해서 새로운 모니터 프로그램을 설치하기로 하였다. (Tera Term은 보고싶은 것...

blog.naver.com

 

여기를 참고하여 프로그램을 다운을 해주자

 

https://youtube.com/shorts/DAY6CJcTbXQ?feature=share

 

이렇게 험난한 Polling 방식의 USART를 해보았다.

다음은 오늘 포스팅을 기반으로 한 인터럽트를 이용하여 해보고, DMA도 알아보자

 

728x90

'STM32' 카테고리의 다른 글

STM32F407VE - 기초 5) ADC  (0) 2024.11.23
STM32F407VE - 기초 4) USART-2  (0) 2024.11.22
STM32F407VE - 기초 2) EXTI  (0) 2024.11.20
STM32F103C6T6A - 다루기  (0) 2024.11.17
STM32F407VE - 기초 1)  (2) 2024.11.16