보드에 내장된 USB포트를 이용한 시리얼 통신 예제
USB-Serial 변환기 없이 보드와 컴퓨터를 연결하여 값을 주고받을수 있습니다.
<CUBEMX>


RCC-HSE, LSE- Crystal
SYS-Serial wire
USB-DEVICE
USB_DEVICE-COMMUNICATION DEVICE CLASS(VIRTUAL PORT)
GPIO-PC13
<True studio>
1. usbd_cdc_if.c 파일
>문자 데이터의 끝을 알리는 null 코드의 역할을 수행
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
/* USER CODE BEGIN 6 */
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
Buf[*Len] = 0;//추가되는 코드
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
return (USBD_OK);
/* USER CODE END 6 */
}
2)main.c 파일
/* USER CODE BEGIN Includes */
#include "usbd_cdc_if.h" // <=============== 추가
/
* USER CODE END Includes */
=========================
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
#define APP_RX_DATA_SIZE 64
#define APP_TX_DATA_SIZE 64
extern uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];
extern uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];
/* USER CODE END PV */
==========================
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
/*
uint16_t len = strlen((const char*)UserRxBufferFS);//받은 문자열의 길이를 반환
if(len > 0)//받은 문자열이 있으면
{
strncpy((char *)UserTxBufferFS, (const char*)UserRxBufferFS, len);//받은것의 복사본 생성
CDC_Transmit_FS((uint8_t*)UserTxBufferFS, strlen((const char*)UserTxBufferFS));//송신함
memset(UserRxBufferFS, 0, sizeof(UserRxBufferFS));//rx와 tx버퍼를 0으로 초기화
memset(UserTxBufferFS, 0, sizeof(UserTxBufferFS));
}
*/
CDC_Transmit_FS((uint8_t*)"hello\r\n", strlen((const char*)"hello\r\n"));//송신함
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_12); // BlackPill LED 깜박임 입니다.
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // BluePill LED 깜박임 입니다.
HAL_Delay(10); // 0.5초 간격으로 깜박입니다.
}
수신받은 데이터를 그대로 전송하는 echo동작을 수행합니다.
디버깅을 마친 후 코드를 보드에 올린다음 pc와 연결된 usb를 뽑았다가 다시 끼워야 제대로 작동합니다.
<동작모습>
시리얼통신 프로그램을 통해 확인해보았습니다.


'Programming > Embedded' 카테고리의 다른 글
[STM32F103C8] Basic PWM (0) | 2022.02.19 |
---|---|
[STM32F103C8] Timer /Counter Interrupter (0) | 2022.02.19 |
[STM32F103C8] Basic GPIO(led blinking) (0) | 2022.02.19 |
[stm32f103c8] 학습 (0) | 2022.02.19 |
USART 통신 문자열 전송 (0) | 2022.02.19 |