컴퓨터 나 다른 장치에 데이터를 보내는 두 가지 일반적인 방법이 있습니다 : 하나, 우리는 내장 된 HAL 라이브러리를 사용하여 Keil에서 사용할 수있는 “printf”기능을 활용할 수 있습니다. cubeMX와 HAL 라이브러리를 사용하기 전에 개인적으로 첫 번째 선택을 선호했습니다. 이제 두 번째 메서드를 사용하여 HAL 라이브러리와 “sprintf”함수를 결합하기 위해 변경합니다. cplusplus.com 두 함수를 모두 확인하여 어떤 매개 변수가 어떤 변수 형식을 전송하는지 알아야 합니다. 예를 들어 “%i”는 정수용입니다. “%.2f”는 소수점 이후 2자리숫자의 부동 숫자입니다. 문자열에 대한 “%s”; “r”은 acsii 13과 동일합니다. “n”acsii 10과 동일 … C 언어로 된 표준 라이브러리의 표준 출력 함수의 경우 기본 출력 장치는 표시자입니다. 직렬 출력 또는 LCD 출력을 구현하려면 표준 라이브러리의 출력 기능을 재정의해야 합니다. 예를 들어 함수 printf를 직렬 포트로 출력하려면 함수 fputc의 출력을 직렬 포트(리디렉션)로 보내야 합니다. 그렇게 하는 것은 쉽습니다.

함수 int fputc(int ch, FILE *f)를 추가하고 직렬 포트가 문자를 출력할 수 있는지 확인합니다. 그런 다음 주 루프에서 컴퓨터로 데이터를 전송하려는 경우 다음 명령을 예로 들 수 있습니다. ch는 문자를 저장하기 위한 주소이며 0xFFFF는 시간 시간 지정 기간입니다. 파일 stm32f7xx_hal_uart.c에서 HAL_UART_Transmit 함수를 찾을 수 있습니다. 이제 단일 응용 프로그램에서 DMA 및 USART의 모든 기능을 사용할 차례입니다. 응용 프로그램에 의해 20바이트를 수신할 것으로 예상되는 이전 예제로 이동하면 이제 이 예제가 cplusplus.com `printf` 및 `sprintf` 헤더 를 열어 헤더 stm32f7xx_hal_uart.h를 사용하는 방법에 대한 참조를 위해 추출되었습니다. 파일의 끝에서, 당신은 IO 작업과 직렬 함수를 찾을 수 있습니다 아래 표시된. 이 예는 Keil 평가 보드 MCBSTM32로 테스트됩니다. STM32 시리즈의 대부분은 IDLE 라인 감지기능이 있는 U(S)ART를 가지고 있습니다. IDLE 회선 감지를 사용할 수 없는 경우 일부 수신자 시간 지정 기능이 프로그래밍 가능한 지연이 있습니다. 이 경우에도 사용할 수 없는 경우 응용 프로그램은 아래에 제공된 예제와 함께 DMA가 있는 폴링 모드만 사용할 수 있습니다. 유휴 회선 감지(또는 수신기 시간 시간)는 수신 회선이 수신을 위해 1자 이상에 대한 통신 없이 안정될 때 USART 인터럽트를 트리거할 수 있습니다.

연습 예: 115200bauds에서 10바이트를 받았다고 가정해 보겠습니다. 115200 bauds의 각 바이트는 UART 라인에서 약 10us, 총 100us가 소요됩니다. IDLE 라인 인터럽트는 RX 라인에서 1자 비활성을 감지할 때 응용 프로그램에 통보하며, 이는 마지막 문자 후 10us 이후를 의미합니다. 응용 프로그램은 이 이벤트에 반응하고 그에 따라 데이터를 처리할 수 있습니다. 폴링 모드: CPU는 IO 장치를 지속적으로 쿼리하고 장치에서 요구 사항을 처리합니다. 예를 들어 CPU는 데이터 전송이 완료되었는지 여부를 직렬 포트를 쿼리합니다. 전송 시간이 지남에 따라 시간 초과 오류가 반환됩니다. 폴링은 CPU 시간을 차지할 수 있기 때문에 비효율적인 방법입니다. 여기서는 마이크로의 UART를 통해 한 가지 더 예제를 살펴보겠습니다.