수행기록퀘스트4

퀘스트 4/7 - A7/ M4 예제 응용 데모 시현 따라해보기
2020. 5. 11 (월) 15:29 곽병* 조회 316 좋아요 0 스크랩 0 댓글 0

STM32 M4 관련 사항에 대해서 먼저 정리해 보겠습니다. 

 

1)  CUBE IDE를 설치하기 

    https://www.st.com/en/development-tools/stm32cubeide.html

  위의 링크에서 linux 버전을 다운 받아서 실행 

  저 같은 경우 Ubuntu를 사용하기 때문에 데비안 버전을 사용했습니다. 

  STM32CubeIDE-DEB 데비안리눅스 버전 다운로드

    

   압축풀기

    PC $>  unzip en.st-stm32cubeide_1.3.0_5720_20200220_1053_amd64.deb_bundle.sh.zip

    root 권한으로 실행

   PC $>   sudo ./st-stm32cubeide_1.3.0_5720_20200220_1053_amd64.deb_bundle.sh

 

2) STM32MP1 package 다운로드  

https://wiki.st.com/stm32mpu/wiki/Getting_started/STM32MP1_boards/STM32MP157C-DK2/Develop_on_Arm%C2%AE_Cortex%C2%AE-M4/Install_STM32Cube_MP1_package

    위의 링크에서 다운로드 한 후 압축 해제 

   PC $> unzip en.stm32cubemp1_v1-2-0.zip

 

3) CUBE IDE  실행 

    새로운 프로젝트 생성 

  

   

   - IC 대신 board로 선택 STM32MP157C-DK2 board 선택 

   

 

  Default 사용을 선택 

 

여기 회로도 확인 

  

 

   => 회로도에서처럼 key와 LED가 같이 연결되어 있습니다. 따라서 PA14번을 키입력으로 사용하고 PA13번을 LED 컨트롤 설정해야합니다. 

 

 

 

  PA14번핀을 exti로 사용하기 위해서  pin Reserved 에서 Cortex-M4로 선택해주셔야 합니다. 

 

 

PA14번핀을 External Interrupt 모드 중 falling으로 선택하였습니다. 

-> NVIC를 탭을 선택하여 interrupt로 선택 해주면 됩니다. 

 

코드를 generation 을 해주면 코드가 생성됩니다. 

 

아래 참고할 소스를 적어 드립니다. 

 

void EXTI14_IRQHandler(void)

{

  /* USER CODE BEGIN EXTI14_IRQn 0 */

  /* USER CODE END EXTI14_IRQn 0 */

  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14);

  /* USER CODE BEGIN EXTI14_IRQn 1 */

  /* USER CODE END EXTI14_IRQn 1 */

}

#if 0

__weak void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)

{

  /* Prevent unused argument(s) compilation warning */

  UNUSED(GPIO_Pin);

  /* NOTE: This function should not be modified, when the callback is needed,

           the HAL_GPIO_EXTI_Falling_Callback could be implemented in the user file

   */

}

#endif

void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(GPIO_Pin);

  /* NOTE: This function should not be modified, when the callback is needed,
           the HAL_GPIO_EXTI_Rising_Callback could be implemented in the user file
   */
  if(GPIO_Pin== GPIO_PIN_14){
  HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_13);
  }
}

 

3) 디버깅 환경 세팅하기 

 

가상 PC 버전의 경우 아래와 같이 디바이스를 추가해 주어야 합니다.  

STLINK -> STLINK와 USB to serial 기능이 같이 있습니다. 

STM32MP1 -> 네트워크 브리지가 연결되어 있습니다. 

 

위와 같이 두가지 디바이스를 리눅스에서 사용하게 되면, ifconfig로 USB 브리지를 통한 IP 주소를 확인해 보아야 합니다. 

 

 

 위의 그림과 같이 192.168.7.1로 되어 있다면 USB 브리지가 잘 연결된 것입니다. 

 

4) IDE 디버깅 환경세팅을 확인 

    워크스페이스안의 프로젝트 선택후 오른쪽 누루면, Debug As -> Debug configrations 

  

 

위의 그림에서 빌드가 되었다면 elf 파일을 파일 경로에 맞추어 설정 합니다. 

 

 

 Debugger 에서 방금전에 Ifconfig로 확인했던 192.168.7.1을 선택 하게 되어 정상적으로 세팅이 되고 동작을 시켜보면 

 

위의 그림처럼 초록색 상태가 되면 정상적으로 된것입니다. 

 

 

부팅에서 자동으로 실행 시키기 

 

1)  IDE로 생성된 elf 파일은 아래 경로에 있습니다. 

    STM32CubeIDE/workspace_1.3.0/GPIO_Test/CM4/Debug 

 

2)  타겟 보드에 복사하기 

   scp GPIO_Test_CM4.elf root@192.168.7.1:/lib/firmware/

 

3) vi /etc/profile.d/weston_profile.sh

 타겟보드에서 위를 실행시키고  아래 빨강 글자를 추가해주면 부팅시 자동으로 동작하게 됩니다. 

 

export XDG_RUNTIME_DIR=/run/user/$(id -u)

export QT_QPA_PLATFORM=wayland
export ELM_ENGINE=wayland_shm
export ECORE_EVAS_ENGINE=wayland_shm
export ECORE_EVAS_ENGINE=wayland_shm
export GDK_BACKEND=wayland

if [ $(id -u) -eq 0 ]; then
    mkdir --parents $XDG_RUNTIME_DIR
    chmod 0700 $XDG_RUNTIME_DIR
fi

 

echo "GPIO test for M4-firmware"

echo -n /lib/firmware/ > /sys/module/firmware_class/parameters/path
echo GPIO_Test_CM4.elf > /sys/class/remoteproc/remoteproc0/firmware
echo start > /sys/class/remoteproc/remoteproc0/state

 

 

퀘스트 제출

1) STM32CubeMX와 STM32CubeIDE를 사용하여 작성하고 빌드된 M4 프로젝트의 디렉토리 구조를 출력하여 제출.

 

 

 

2) STM32CubeIDE상에서 USER1 버튼을 누를 때 Interrupt handler 또는 HAL callback에서 브레이크 포인트를 설정하여 캐치된 상태의 화면을 캡쳐하여 제출 (code symbol 창과 stack 창은 필수로 포함되어야 함)

3)M4 펌웨어를 linux 부팅시에 로딩되도록 포함한 뒤에 부팅 로그를 캡쳐하여 제출.

 

 

 

4)DK2 target 보드를 부팅(리셋)하여 바로 USER1 버튼을 누를 때마다 LD6가 토글되는 것(M4 펌웨어가 동작하는 것)을 영상으로 캡쳐하여 제출.

 

로그인 후
참가 상태를 확인할 수 있습니다.