STM32 & ST-LINK-성공적인 프로그래밍 후 MCU에 연결할 수 없습니다


13

STM32F7-45VGT6으로 자체 보드를 만들었습니다. ST-LINK v2 (원래는 아니지만)로 성공적으로 프로그래밍했으며 이제 MCU와 연결할 수도 없습니다.

ST 및 SWD 인터페이스의 ST-Link Utility를 사용합니다. SWD 핀을 출력으로 사용하고 코드에서 GPIO 출력으로 설정하는 경우가 있습니다. 그럴 수 있습니까?

그럼에도 불구하고 재설정 핀을 GND에 연결하고 ST-Link Utility에서 "재설정시 연결"옵션을 설정했지만 작동하지 않습니다 ... 어떻게해야합니까?

인터넷에서 BOOT0 Pin 사용에 관한 것을 발견했지만 정확히 알지 못합니다 ...


"SWD 핀을 출력으로 사용하는 경우도 가능합니다."가능하지만 의도하지 않은 펌웨어의 손상된로드가 아니라면 실제로 발생하는 오류. 일반적으로 이는 하드웨어 재설정을 통해 수동 또는 자동으로 초기 SWD 연결을 수행하여 복구 할 수 있습니다. SWD 핀을 I / O 지연으로 사용하여 해당 설정을 만들기 전에 몇 초가 지연되면 개발이 쉬워 질 수 있지만 여전히 디버거를 사용할 수 없음을 의미합니다.
Chris Stratton

답변:


21

나는 그 문제를 해결했다. 비슷한 문제가 발생하면 여기에 내가 한 일이 있습니다.

ST-Link v2와 ST-Link Utility를 사용했습니다. 설정에서 "재설정 상태로 연결"과 SWD 인터페이스를 설정했습니다 (주파수에 대해 잘 모르겠습니다).
그런 다음 보드의 리셋 버튼을 누르고 "Target"-> "Erase chip"을 클릭하고 클릭 직후 버튼을 놓았습니다. 칩이 지워 지므로 이제 MCU를 다시 프로그래밍 할 수 있습니다.


어쨌든, SWD 핀을 출력으로 사용해야하는 경우 프로그램 시작시 약간의 지연을 추가하거나 점퍼를 사용하여 이러한 핀을 출력으로 설정 / 해제하십시오.


그렇습니다. SWD 핀을 다른 용도로 사용하면 거의 기대할 수 있습니다. 경험에 따르면 의도적으로 그렇게하지 않은 STM32 설계조차도 SWD 핀이 응답하지 않는 (손상된 프로그램입니까?) 모드에서 "고정"될 수 있으며 복구를 위해 이러한 처리가 필요합니다.
Chris Stratton

1
리눅스에서는 칩을 지우기 위해이 bash 명령을 사용했습니다 : st-flash erase
nathan

Erase 칩이 작동하지 않았습니다. 대상-> 섹터 지우기-> 모두 선택-> 적용으로 이동했습니다. 그 후 나는 내 보드에 다시 접근 할 수 있었다. 나는 왜 칩 소거가 말을하지 않았는지 잘 모르겠다
앤드류

6

재설정시 연결이 작동하려면 ST-Link가 재설정 핀을 제어해야합니다. 접지 핀을 접지에 연결하면 ST-Link가 대상을 실행하여 액세스 할 기회가 없습니다.


전원을 켤 때 BOOT0 핀을 높게 당기면 MCU가 내부 부트 로더에서 시작하여 여러 직렬 프로토콜을 사용하여 액세스 할 수 있습니다 (자세한 내용은 참조 설명서 참조).

부트 로더 내부에서 SWD 핀을 사용하여 액세스 할 수 있어야하지만 100 % 확신 할 수는 없습니다.

ST Flash Loader Demonstrator 는 UART 인터페이스를 사용하여 마이크로를 지우거나 프로그래밍 할 수있는 도구입니다. 마이크로의 UART에 액세스 할 수 없으면이 솔루션이 효과가 없습니다.


부트 로더가 지원하는 USART3에 액세스 할 수 있으므로 나중에 시도해 볼 수 있습니다. BOOT0은 PCB의 GND에 연결되어 있습니다. 그러나 무엇이 잘못되었는지 알고 싶습니다. 내가 뭘 잘못 했니? SWD / JTAG 핀을 main () 함수의 출력으로 설정했습니다. 그러나 수동으로 리셋하는 동안 모든 핀은 기본 기능을 가지며 즉시 사용할 수 있다고 말합니다. 재설정 중에 플래시를 지울 수없는 이유는 무엇입니까? 또한 U-LINK 2 프로그래머와 uVision 5를 테스트했습니다. 우연히도 보호 수준이 설정되지 않았기를 바랍니다. 그런 비트를 설정하지 않았지만 보호 비트가 정상인지 테스트하는 방법이 있습니까?
zupazt3

@ zupazt3 무례하게 들리는 것은 아니지만 첫 번째 문장을 다시 읽어보십시오. 재설정중인 연결 문제에 대한 답변이 포함되어 있습니다. 이해가되지 않으면보다 구체적인 의견을 게시하십시오.
아스날

그러나 나는 항상 그것을 묶지 않습니다 :) 첫 번째 게시물에서 나는 그것이 도움이되는지 확인하기 위해 GND에 직접 연결한다는 것을 의미했습니다. 그러나 일반적으로 NRST를 GND에 묶지 않고 프로그래머와 연결하므로 재설정을 제어 할 수 있습니다. 그리고 여전히 연결되지 않습니다. 또한 U-Link 2와 Keil uVision 5를 사용하려고 시도했지만 동일한 결과를 얻었습니다. 이유는 무엇입니까?
zupazt3

귀하의 질문에서 명확하지 않은 @ zupazt3. SWD 클럭을 늘리면 대상이 출력으로 전환되기 전에 연결될 수 있으므로 도움이 될 수 있습니다. 그러나 실수로 SWD 핀을 출력으로 설정했으며 대상에 연결할 수 없었으며 BOOT0 만 사용하여 저항없이 접지에 직접 연결하면 복구 할 수있었습니다. 강인한.
아스날

1
마침내 칩을 지울 수있었습니다! ST-Link Utility-리셋 버튼을 눌렀을 때 "완전 삭제"및 해제 버튼을 클릭하면 어떻게 든 지워졌으며 이제 작동합니다. 나는 전에 그것을 시도했지만 지금은 효과가 있었다.
zupazt3

3

stmcubemx를 사용하는 경우 stmcube 핀아웃 탭에서 직렬 와이어를 구성해야합니다. 핀 배치 탭에서 SYS를 클릭하고 디버그 옵션을 직렬 와이어로 변경하십시오. 내 문제를 해결하고 어쩌면 문제도 해결할 수 있습니다.


문제가 될 수 있지만 SWD 핀을 전원 켜기 기본 SWD 모드로 유지하는 것이이 소프트웨어 제품군의 기본 설정이 아닌 경우 버그보고 및 수정이 필요한 상당히 심각한 사용성 결함 일 수 있습니다. 원래 값에서 설정을 변경하지 않았거나 기본이 아닌 방식으로 해당 핀을 사용해야하는 특정 프로젝트로 시작 하시겠습니까?
Chris Stratton

먼저 핀을 SYS_SW로 설정했지만 주황색으로 표시됩니다. 또한 코드를 업로드 한 후 칩에 연결하는 데 문제가있었습니다. SYS-Serial Wire에서 디버그 모드를 선택하면 칩이 벗겨진 후 정상적으로 연결됩니다.
gtu

1

STM32F427 보드에 코드를 다운로드했습니다. 그런 다음 ST-LINK Utility를 사용하여 더 이상 보드에 연결할 수 없습니다. 내 코드가 디버그 포트 핀 구성을 엉망으로 생각합니다 (?를 확인할 수 없음). 내가 한 것은 연결하고 보드를 다시 프로그래밍하기 위해 다음과 같습니다.

  1. ST-LINK 유틸리티를 열고 대상 메뉴에서 "연결"준비를하십시오.
  2. 보드에 전원을 공급하고 (내 경우에는 USB 케이블을 사용) ST-LINK Utility에서 "Connect"를 클릭하십시오.

이 트릭으로 보드 2 개를 복원했습니다. 도움이 되었기를 바랍니다. --단발


1

딜리가 말한 것처럼 :

stmcubemx를 사용하는 경우 stmcube 핀아웃 탭에서 직렬 와이어를 구성해야합니다. 핀 배치 탭에서 SYS를 클릭하고 디버그 옵션을 직렬 와이어로 변경하십시오. 내 문제를 해결하고 어쩌면 문제도 해결할 수 있습니다.

STM32CubeMx는 기본적으로 디버그 포트를 구성하지 않으므로 코드를 플래시하면 ST-Link가 작동을 멈 춥니 다. 예를 들어 ST 링크 유틸리티를 사용하여 칩을 삭제해야합니다. MCU와 연결하려면 부트 로더를 활성화하기 위해 전원을 켤 때 BOOT0 핀을 높게 잡아 당겨야했습니다. 그런 다음 Tarjet 메뉴칩 지우기 로 이동하십시오 .


0

MCU를 다시 프로그래밍하려면 재설정 버튼을 누른 상태에서 ST-Link Utility에서 장치에 연결을 선택하거나 IDE (예 : Keil)에서 다운로드를 누른 다음 재설정 버튼을 놓습니다.


-1

부팅 핀 (일부 버전의 비트)으로 인해 디버거가 시작되지 않을 수 있습니다. 시동시 부팅 패턴 (boot0 및 boot1 핀의 특정 이진 패턴)을 구현하지 않아야합니다. 그렇지 않으면 MCU가 부팅 상태가됩니다.


나는 GND에 연결된 boot0 핀을 가지고 ... 내가 말한대로 플래시를 성공적으로 프로그래밍하고 프로그램이 여전히 MCU에서 자체 실행되므로 ST로 MCU에 연결할 수 없기 때문에 작성한 내용에 대해 잘 모르겠습니다. SWD 인터페이스를 통한 링크. 재설정시 부팅을 실행하지 않아야하며 핀이 기본 상태에 있어야하므로 왜 연결되지 않는지 이해할 수 없습니다.
zupazt3

확실합니까? 재설정 조작이 무시할 수없는 방식으로 SWD를 비활성화 할 수있는 조합은 무엇입니까?
Chris Stratton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.