[STM32] UART로 PWM조정

Vandeven·2024년 3월 25일
0

STM32

목록 보기
1/5

요구사항

UART로 PWM 입력값을 받아 PWM 펄스폭 값을 변경하고, 변경한 펄스폭값을 다시 UART로 출력하게끔 만들어 보았다.
(단PWM펄스폭은 500~1000Khz 사이)

변수 및 데이터 구조체 정의

htim3: 타이머 3 관련 핸들러 변수.
huart2: UART 2 관련 핸들러 변수.
uartQueue: UART 수신 데이터를 처리하기 위한 FreeRTOS 큐.
rxData: UART 수신 데이터를 저장하는 버퍼.
value: PWM 값.
defaultTaskHandle: FreeRTOS의 디폴트 태스크 핸들러.
defaultTask_attributes: 디폴트 태스크의 속성 정의.

함수 프로토 타입 선언

SystemClock_Config(): 시스템 클럭을 구성하는 함수.
MX_GPIO_Init(), MX_USART2_UART_Init(), MX_TIM3_Init(): 각각 GPIO, UART, 타이머 초기화 함수.
StartDefaultTask(void *argument): FreeRTOS의 디폴트 태스크 시작 함수.

Callback 함수 및 UART_Task 함수 구현

HAL_UART_RxCpltCallback(): UART 수신 완료 콜백 함수. 수신된 데이터를 큐에 보내는 역할 수행
UART_Task(void *pvParameters): UART 수신 큐를 모니터링하고, 수신된 데이터를 분석하여 PWM 값으로 처리
PWM 값이 유효하면 해당 값으로 PWM을 설정하고, UART를 통해 현재 PWM 값을 전송한다.

메인 함수(main)

main(): 프로그램 진입점. HAL 라이브러리 초기화, 시스템 클럭 설정, 주요 하드웨어 초기화, FreeRTOS 태스크 생성 등의 작업을 수행한다.

FreeRTOS 설정

FreeRTOS 관련 설정을 위한 코드들이 포함.
스케줄러 초기화(osKernelInitialize()), 태스크/스레드 생성(osThreadNew()) 등이 있다.

CODE

https://github.com/vandevenn/STM32/tree/main/UART_PWM

예상 동작

프로그램은 UART를 통해 PWM 값을 입력 받고, 유효한 값인 경우 타이머를 사용하여 PWM을 설정하고, 현재 PWM 값을 다시 UART로 전송한다.

동작

깃허브 참고.. velog에 동영상이 안올라가는걸 이제 알았다.
다른걸로 바꿀까 심히 고민되는데...


PWM입력이 나오면 값을 입력해주고 부저를 통해서 변경되는 것을 확인했다.
500~1000범위가 아닌 값을 입력 시 에러 메세지를 띄웠다.

profile
신입 하드웨어 개발자 입니다.

0개의 댓글

관련 채용 정보