STM32

STM32F407VE - 기초 3) USART

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

나는 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도 알아보자

 

'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)  (1) 2024.11.16