STM32F746G-DISCO 개발환경 구축

메인 개발도구는 윈도우, 맥, 리눅스 등을 지원하고 있지만, TouchGFX 관련한 툴은 아직까진 윈도우만 지원합니다. 그래서 어쩔수 없이 윈도우에서 개발을 진행해야 할 듯 합니다. (윈도우 싫어요~~)

ST에선 자사의 다양한 MCU 및 보드들의 개발을 위해 통합 개발 도구를 지원하고 있습니다. (꾸준히 업데이트 되고 있는 듯 합니다.) https://www.st.com/en/development-tools/stm32cubeide.html 에 가보시면 받으실 수 있고, 메일을 통한 인증을 하셔야 합니다. 다운로드한 en.st-stm32cubeide_1.3.0_5720_20200220_1053_x86_64.exe.zip 파일을 압축을 해제하고 설치를 진행합니다.

특별한 설정없이 다음, 다음 진행하면서 설치하면 끝납니다.

바탕화면의 아이콘이나 시작메뉴에서 설치한 프로그램을 실행하면 처음엔 프로젝트들이 위치할 곳을 선택하도록 나오는데, 적절한 곳을 입력해주시고요,

시작화면이 짜잔 나타납니다. 이클립스를 기반으로 만들어진 툴인듯한데… 불편하네요..ㅎㅎ

어쨌든 툴의 자동 업데이트도 지원해주고 있습니다.

프로젝트를 하나 만들어보겠습니다.

상단의 메뉴에서 File > New > STM32 Project를 누르시거나 시작화면에서 Start new STM32 Project를 누르셔서 프로젝트를 만들어봅니다.

그러면 요렇게 창이 하나 뜹니다. 저는 STM32F746G-DISCO 보드를 사용할 예정이므로, 상단의 탭에서 Board Selector를 선택하고 STM32F746G-DISCO 보드를 찾아 클릭하고 다음으로 진행.

프로젝트의 이름을 입력하고, 개발언어는 C++로 선택합니다. 이렇게 만들어진 프로젝트는 처음 실행시 설정하였던 workspace 디렉토리 아래에 추가됩니다.

모든 주변기기들의 설정을 기본모드로 할것인지를 물어보는데, 당연히 Yes.

현재 개발툴 (이클립스)의 뷰를 STM32CubeMx 모드로 보여줄건지를 물어봅니다. 요것도 당연히 Yes.

이것저것 준비를 하면서 프로젝트 생성 중.

이렇게 짠 하고 나타납니다. 개발자들은 이렇게 기본 밥상이 차려진 상태에서 필요한 부분만 추가하여 빌드하고 이를 보드에 다운로드해서 사용하면 됩니다. (음.. 일단은 좀 많이 편해진듯…)

보드가 동작되는지 확인용으로… LED를 한번 깜빡여줘보겠습니다…

기본적으론 FREERTOS가 돌아가고 있는 상태이므로 LED 깜빡이용 Task를 하나 생성해줍니다.

프로젝트 파일을 선택하고, Middleware > FREERTOS를 선택합니다. 그런 다음 Task and Queues를 선택하면, 현재는 하나의 Task만 생성되어 실행되고 있습니다. Add 버튼을 누르고, 다음과 같이 입력한 후, 메뉴 > Project > Generate Code (Alt+K)를 실행합니다.

프로젝트의 main.c 파일을 가보면,

StartTaskBlinky 함수가 만들어져 있는데, 이곳에 위와 같이 코드를 입력해줍니다.

  /* USER CODE BEGIN StartTaskBlinky */
  GPIO_InitTypeDef gpioInitStructure;
  gpioInitStructure.Pin = GPIO_PIN_1;
  gpioInitStructure.Mode = GPIO_MODE_OUTPUT_PP;
  gpioInitStructure.Pull = GPIO_PULLUP;
  gpioInitStructure.Speed = GPIO_SPEED_HIGH;
  HAL_GPIO_Init(GPIOI, &gpioInitStructure);

  /* Infinite loop */
  for(;;)
  {
    osDelay(200);
    HAL_GPIO_TogglePin(GPIOI, GPIO_PIN_1);
  }
  /* USER CODE END StartTaskBlinky */

대략, 200ms 마다 GPIOI의 1번 핀을 토글 시켜주라는 건데, 현재 보드에는 그 핀에 LED가 연결되어 있습니다.

이제 프로젝트를 빌드하고… Run > Run를 클릭하면 자동으로 보드에 빌드된 펌웨어를 다운으로 하고 보드를 리셋해줍니다. 보드가 리셋되고, FREERTOS가 가동되는데 살짝의 시간이 지나고나면, 보드 뒷면의 LED가 깜빡임을 볼 수 있습니다.

Device name : STM32F74x/STM32F75x
Flash size  : 1 MBytes
Device type : MCU
Device CPU  : Cortex-M7



Memory Programming ...
Opening and parsing file: ST-LINK_GDB_server_a10660.srec
  File          : ST-LINK_GDB_server_a10660.srec
  Size          : 76388 Bytes
  Address       : 0x08000000 


Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 2]
Download in Progress:


File download complete
Time elapsed during download operation: 00:00:01.944



Verifying ...




Download verified successfully 


Debugger connection lost.
Shutting down...

끝! 잘되네요..^^

STM32F746G-DISCO 평가보드

이미지출처: https://www.st.com/en/evaluation-tools/32f746gdiscovery.html

로봇용 간단한 UI 모듈을 개발하는데 괜찮을듯 하여 주문한 제품, 깊고 복잡하게 들어가긴 좀 귀찮아 가장 예제가 많은 보드를 골라서 주문하였습니다. (후딱 개발하고 끝내기) 가격은 대략 8~9만원 정도이고, 흔하게 구할 수 있습니다. 거의 대부분 기능을 테스트 할 수 있도록 주변 소자들도 많이 들어있고, 전면부에는 큼지막한 5인치 터치 LCD가 붙어 있는데, 해상도가 480×272라서 약간 아쉬운 면은 있습니다. 뭐.. 필요하면 교체해서 써도 될듯 하고요…

가장 사용해보고 싶은 부분은 TouchGFX라는 녀석인데, ST에서 얼마전(아니면 한참전?)에 인수하여, 현재는 개발툴을 통합하는 과정에 있는듯 합니다. (검색해보니 버그도 많긴 합니다만.. 뭐 그런거야 개발자에겐 흔한….)

Dell XPS 15 7590 (2020) Ubuntu 스크린 밝기 조정 에러 수정

업뎃: 아래와 같이 수정을 해도 제대로 로딩되지 않은 상황 발생. 문제는 이게 OLED다 보니 기존 스크린 밝기를 조정했던 백라이트 조정과는 차이가 있음. (OLED는 백라이트가 없고, 각각의 소자들의 값을 조정하여 밝기를 조정함.)

수동으론 조정 가능

$ xrandr --output eDP-1-1 --brightness .5

지난 포스팅에서 델의 XPS 15 7590 (2020)에 Ubuntu를 설치하는 방법을 설명하였는데, 설치 완료 후 스크린 밝기가 조정이 안되는 문제가 있었습니다.

인터넷엔 능력자들이 많기에 검색을 해보니, 역시나 문제에 대한 분석 및 해결 방법이 있었습니다. 신형 노트북 모니터 특히 OLED를 사용한 모니터와 기존 스크린 밝기를 조정하는 부분이 뭔가 호환이 안되는듯 합니다.

몇가지 귀찮은 작업을 해주면 사용 가능한데, 먼저 내 노트북의 디스플레이 이름을 확인합니다

$ xrandr --listmonitors
Monitors: 1
 0: +*eDP-1-1 3840/344x2160/194+0+0  eDP-1-1

eDP-1-1” 이 모니터 이름입니다. 터미널에서 명령을 입력하여 밝기가 조정이 되는지 확인해봅니다.

$ xrandr --output eDP-1-1 --brightness 0.5

정상적으로 밝기가 반정도 어두워지는 것을 확인할 수 있습니다. 0으로 하면 완전 검은색으로 변하니 주의하시고요. 이제 이것을 스크린 밝기를 조정하는 키와 맵핑을 해줘야 합니다.

두 개의 파일을 만들어줍니다.

$ sudo vi /etc/acpi/events/dell-brightness-up
event=video/brightnessup BRTUP 00000086 00000000
action=/etc/acpi/dell-brightness.sh up

$ sudo vi /etc/acpi/events/dell-brightness-down
event=video/brightnessdown BRTDN 00000087 00000000
action=/etc/acpi/dell-brightness.sh down

그런 다음 dell-brightness.sh 를 위 경로에 만들어줍니다.

$ sudo vi /etc/acpi/dell-brightness.sh
#!/bin/bash
DISPLAYNAME=$(xrandr --listmonitors | awk '$1 == "0:" {print $4}')

OLED_BR=`xrandr --verbose | grep -i brightness -m 1 | cut -f2 -d ' '`
CURR=`LC_ALL=C /usr/bin/printf "%.*f" 1 $OLED_BR`

MIN=0
MAX=1.0

if [ "$1" = "up" ];
    then
        VAL=`echo "scale=1; $CURR+0.1" | bc`
    else
        VAL=`echo "scale=1; $CURR-0.1" | bc`
fi

if [ `echo "$VAL < $MIN" | bc -l` = "1" ];
    then
        VAL=$MIN
elif [ `echo "$VAL > $MAX" | bc -l` = "1" ];
    then
        VAL=$MAX
else
    `xrandr --output $DISPLAYNAME --brightness $VAL` 2>&1 >/dev/null | logger -t oled-brightness
fi



# Set Intel backlight to fake value
# to sync OSD brightness indicator to actual brightness
INTEL_PANEL="/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/"
if [ -d "$INTEL_PANEL" ]; then
    PERCENT=`echo "scale=4; $VAL/$MAX" | bc -l`
    INTEL_MAX=$(cat "$INTEL_PANEL/max_brightness")
    INTEL_BRIGHTNESS=`echo "scale=4; $PERCENT*$INTEL_MAX" | bc -l`
    INTEL_BRIGHTNESS=`LC_ALL=C /usr/bin/printf "%.*f" 0 $INTEL_BRIGHTNESS`
    echo $INTEL_BRIGHTNESS > "$INTEL_PANEL/brightness"
fi

저장하고, 이 스크립트 파일을 실행 가능하도록 수정

$ sudo chmod u+x /etc/acpi/dell-brightness.sh

그런 다음 재부팅하면 수정 완료.

참고링크: https://github.com/TillmannBerg/Ubuntu-Dell-XPS-15-2019

Dell XPS 15 7590 (2020) Ubuntu 설치 관련

최근 Dell XPS 15 7590을 업무용으로 사용하게 되었는데, 기존 외장 USB 드라이브에 Ubuntu를 설치하고 사용하는데 약간의 차이가 생겨, 이에 대한 기록 차원에서 정리.

가장 큰 차이는 더이상 델의 최신 버전 노트북에선 Legacy External Boot가 지원되지 않는다고 합니다. 대략 찾아보니 보안 관련, 32bit에 대한 지원 종료 (64bit만 사용) 등의 이유로 그렇게 된 듯 합니다. 따라서 BIOS 화면에서도 이에 관한 옵션이 사라져 있습니다. 델 상담원이랑 채팅을 통해 상담했는데 그렇다고 하네요.

이에 따라 Grub를 이용해서 부팅하던 USB 설치 스틱도 써먹을 수가 없었는데, 이는 Ubuntu에 내장된 Startup Disk Creator 어플리케이션을 사용하여 쉽게 새로운 설치 스틱을 만들수 있습니다.

이와 같은 상황으로 기존 BIOS에서 Secure Boot 옵션을 껐던 적이 있었는데, 이젠 그것은 그냥 켜두시면 됩니다. (보안에 좋답니다. ㅎㅎㅎ)

NVIDIA 드라이버를 정상적으로 사용하시려면 여전히 Secure Boot 옵션은 꺼둬야 합니다. 살짝 해맸네요..

Ubuntu 설치디스크로 부팅하시고 설치는 그냥 진행 하시되, 파티션 설정 부분에서 기존 /boot로 설정했던 파티션을 EFI 파티션으로 변경해야 합니다. 부트로더 설치할 디스크는 여전히 사용할 외장 USB 드라이브를 선택하시면 되고요. 그렇게 되면 파티션 설정은

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1  *        65535   3932099   3866565   1.9G ef EFI (FAT-12/16/32)
/dev/sda2         3932100 456385739 452453640 215.8G 83 Linux
/dev/sda3       456385740 488366819  31981080  15.3G 82 Linux swap / Solaris

와 같이 될겁니다.

이후 설치가 완료되고, 재부팅을 한 다음 로고가 나올때 F12키를 연타해보면, UEFI 리스트에 외장 USB 드라이브의 이름이 나오고, 이를 선택하면 잠시 검은색 화면이 나오고 재부팅되는데….

다시 F12키로 부팅리스트를 보면 ubuntu라는 UEFI가 추가로 생성됨을 볼수 있습니다. 이제 이것을 선택하면 정상적으로 부팅됩니다.

이제 사용하면 끝.!

덧:

  • 화면 밝기가 조정이 안됩니다. 하지만 이는 버그인듯하여 쉽게 수정이 될듯 합니다.
  • 기존 말썽을 부리던 Killer WiFi 카드의 드라이버가 그냥 잡힙니다. 하지만 성능은 여전히 구립니다.
  • 이전에 사용하던 Dell XPS 15 9570에서 고질적으로 발생하던 스크린 Flickering 현상은 새로운 모델에선 나타나지 않습니다.