본문으로 바로가기

STM32 Semihosting(STM32F429I Discovery)

category MCU/STM32F429 2020. 5. 10. 03:16
반응형

오늘 포스팅할 내용은 세미호스팅(Semihosting)에 대한 내용입니다. 세미호스팅은 ARM 타겟 보드에서 실행되는 코드가 디버거를 통해서 호스트 컴퓨터에 Input / output 기능을 통신하고 사용할 수 있도록 해주는 기능입니다. 즉, 시리얼을 안 뚫은 상태에서 디버거만을 이용해 C 라이브러리인 scanf와 printf를 사용할 수 있습니다.



개발 보드의 시리얼을 뚫기 전에 printf를 사용할 수 있는 것은 큰 장점인듯합니다. 그럼 설정 방법에 대해서 알아보도록 하겠습니다.





 Semihosting 설정



ST Link가 설정이 되어있어야 합니다.




프로젝트의 Option 메뉴를 클릭합니다.




General Options에서 Library Configuration 탭에서 Semihosted와 Via semihosting을 체크해 줍니다.

이제 모든 설정은 끝이 났습니다.



 테스트


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
int main(void)
{
  /* USER CODE BEGIN 1 */
  char ch;
 
  /* USER CODE END 1 */
 
  /* MCU Configuration----------------------------------------------------------*/
 
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
 
  /* USER CODE BEGIN Init */
 
  /* USER CODE END Init */
 
  /* Configure the system clock */
  SystemClock_Config();
 
  /* USER CODE BEGIN SysInit */
 
  /* USER CODE END SysInit */
 
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_CRC_Init();
  MX_DMA2D_Init();
  MX_FMC_Init();
  MX_I2C3_Init();
  MX_LTDC_Init();
  MX_SPI5_Init();
  MX_TIM1_Init();
  MX_USART1_UART_Init();
  MX_USB_HOST_Init();
  MX_UART5_Init();
  /* USER CODE BEGIN 2 */
   
  /* USER CODE END 2 */
 
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
 
  /* USER CODE END WHILE */
    MX_USB_HOST_Process();
 
  /* USER CODE BEGIN 3 */
    ch = getchar();
    
    if(ch == '1')
      printf("Hellow\r\n");
  }
  /* USER CODE END 3 */
 
}


테스트를 하기 위해 위에 와 같이 표시한 부분의 코드를 추가했습니다. scanf로 테스트를 하려고 했으나 이상하게 코드 사이즈 초과 에러가 발생하여 getchar를 썼습니다.




빌드 후에 디버그를 클릭 후 View 탭에서 Terminal I/O를 클릭해 줍니다.

디버그 상태가 아니면 View 탭에 Terminal I/O가 활성화되지 않습니다.




터미널 Output에 정상적으로 출력이 되는 것을 확인할 수 있습니다. Input이 필요한 경우 상단에 Input needed!라는 문구가 생깁니다.

Input은 하단에 있습니다.


Keil Semihosting

Keil에서도 이와 동일한 기능을 제공합니다. 아래 URL은 Keil Semihosting 설정 방법입니다.

http://www.keil.com/support/man/docs/uv4/uv4_db_dbg_printf_viewer.htm




2020/04/30 - [MCU/STM32F429] - STM32 타이머 제어하기(STM32F429I Discovery)

2020/04/05 - [MCU/STM32F429] - GPIO 입출력 제어하기(STM32F429I Discovery)

2020/03/28 - [MCU/STM32F429] - CubeMX Setting 하기

2020/02/26 - [프로그래밍/C++] - 프로그래머스 - 완주하지 못한 선수, sort algorithm 정리

2020/01/20 - [프로그래밍] - tortoise svn lock 해제 update 매크로

2020/01/11 - [프로그래밍] - 비트맵의 구조, 24비트 비트맵의 구조는 어떻게 될까?

2020/01/05 - [프로그래밍/C] - 이중 연결 리스트(Double linked list), 이중 원형 연결 리스트 예제

반응형

'MCU > STM32F429' 카테고리의 다른 글

적외선 수신기 기능 구현  (1) 2020.12.03
STM32 타이머 제어하기(STM32F429I Discovery)  (2) 2020.04.30
GPIO 입출력 제어하기(STM32F429I Discovery)  (2) 2020.04.05
CubeMX Setting 하기  (1) 2020.03.28