나는 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 |