이 포스트는 STM32 칩을 쓰시는 분들 중 IAR을 사용하시는 분들에게 해당되는 내용이다.
위와 같은 오류를 한번쯤 경험했을 것이다.
일반적으로는 ST-LINK와 MCU간의 핀 맵핑이 잘못되어있거나,
MCU가 불량이거나, 전원이 제대로 들어가지 않거나 하는 등의 내용이 원인이다.
하지만 나의 경우는 더 난감한 경우를 경험하였다.
잘못된 코드를 다운로드하여 ST-LINK와 MCU와 연결을 할 수 없는 상태가 발생할 수 있는데
바로 이 상황을 겪었다.
문제의 코드는 바로 위의 '_HAL_AFIO_REMAP_SWJ_NOJTAG();'이다.
이것은 해당 ST-LINK가 다운로드 전용으로 사용하는 핀을 리맵핑하여
GPIO 등 다른 목적으로 쓰게 만들어준다.
하지만, 문제는 이렇게 하는 즉시 그 이후로는 다운로드 핀으로는 사용할 수 없게 되어버린다.
그 이후로는 맨 위의 디바이스를 찾을 수 없다는 메세지만 뜨게 된다.
해당 다운로드 핀을 반드시 써야하는게 아니라면 위의 코드는 쓰지 않는 것을 추천한다.
나는 보통 초기 MCU PIN 세팅 및 기본적인 세팅은 STM32CubeMX을 통해 코드화한다.
(STM32 칩을 쓰는 개발자라면 대부분이 이용할 것이다.)
나는 STM32CubeMX에서 각 기능을 세팅할 때 SYS의 Debug에 대해 관심을 갖지 않았었다.
하지만 저 부분을 Default인 'No Debug'로 두면 JTAG 혹은 ST-LINK와 같은 디버깅 툴을 사용하지
않는 것으로 간주하고, _HAL_AFIO_REMAP_SWJ_NOJTAG(); 코드를 생성해버린다.
위와 같이 ST-LINK를 사용한다면 Serial Wire, 그 외의 툴을 사용한다면 그에 맞게 지정하면 된다.
그리하면 위와 같은 코드가 생기지 않으며, 디버깅 툴을 문제없이 사용할 수 있게 된다.
이제 이미 잘못된 코드를 실수로 다운로드하여 더 이상 디버깅이 되지 않는 경우를
복구하는 방법을 설명할 것이다.
데이타시트를 보면 위와 같은 내용이 있다.
일반적으로 BOOT0을 GND에 붙여 사용하는데, BOOT0을 강제로 HIGH를 주고 전원을 넣을 경우
MCU는 메인 프로그램을 실행하지 않는다. 이 때는 디버깅 툴의 사용이 가능해지기 때문에,
해당 코드를 수정한 상태로 다운로드하고 원상복귀 시켜주면 해결이 된다.
이 외에도 Flash Loader를 이용해서 펌웨어를 다시 심는 방법도 있는데,
위 방법이 가장 간단한 것 같다.
'프로그래밍 > 임베디드' 카테고리의 다른 글
[STM32F] STM32CubeMX를 이용하여 PWM 구현하기 (0) | 2021.11.02 |
---|---|
TW2836을 GPIO I2C로 통신하기 (4) | 2015.04.25 |