STM32 & ST-LINK - Không thể kết nối với MCU sau khi lập trình thành công


13

Tôi đã xây dựng bảng của riêng mình với STM32F7-45VGT6. Tôi đã lập trình thành công nó với ST-LINK v2 (không phải bản gốc) và bây giờ tôi thậm chí không thể kết nối với MCU.

Tôi sử dụng ST-Link Utility từ giao diện ST và SWD. Nó có thể là trường hợp tôi sử dụng chân SWD làm đầu ra và trong mã của tôi, tôi đặt chúng làm đầu ra GPIO. Nó có thể là trường hợp?

Tuy nhiên, tôi kết nối pin đặt lại của mình với GND và đặt tùy chọn "Kết nối dưới đặt lại" trong ST-Link Utility nhưng nó không hoạt động ... Tôi có thể làm gì?

Trên Internet, tôi đã tìm thấy điều gì đó về việc sử dụng Pin BOOT0, nhưng tôi không biết chính xác ...


"Có thể là trường hợp tôi sử dụng chân SWD làm đầu ra", nhưng người duy nhất biết là bạn, trừ khi bạn có nghĩa là tải phần mềm bị hỏng không cố ý làm điều đó, nhưng có thể là kết quả của lỗi, mà thực sự xảy ra. Nói chung, điều này có thể phục hồi bằng cách thực hiện kết nối SWD ban đầu với thiết lập lại phần cứng được xác nhận, bằng tay hoặc tự động. Nếu bạn muốn sử dụng các chân SWD vì I / O sẽ trì hoãn vài giây trước khi thực hiện cài đặt đó có thể giúp phát triển dễ dàng hơn, nhưng nhận ra nó vẫn có nghĩa là bạn không thể sử dụng trình gỡ lỗi.
Chris Stratton

Câu trả lời:


21

Tôi quản lý để giải quyết vấn đề đó. Nếu bất kỳ ai gặp phải vấn đề tương tự, đây là những gì tôi đã làm:

Tôi đã sử dụng ST-Link v2 và ST-Link Utility. Trong cài đặt, tôi đặt "Kết nối dưới cài đặt lại" và giao diện SWD (Tôi không chắc về tần số).
Sau đó, tôi nhấn nút đặt lại trên bảng của mình và nhấp vào "Target" -> "Xóa chip" và ngay sau khi nhấp vào tôi đã nhả nút - Nó đã xóa chip để bây giờ tôi có thể lập trình lại MCU của mình.


Dù sao, nếu bạn cần sử dụng các chân SWD làm đầu ra, sau đó thêm một số độ trễ ở đầu chương trình hoặc sử dụng một số jumper để tắt / bật cài đặt các chân này làm đầu ra.


Vâng, đó là khá nhiều để được mong đợi nếu bạn sử dụng các chân SWD cho một mục đích khác. Kinh nghiệm cho thấy rằng ngay cả các thiết kế STM32 không cố ý làm như vậy đôi khi có thể bị "kẹt" trong chế độ mà các chân SWD không phản hồi (chương trình bị hỏng?) Và yêu cầu xử lý như vậy để phục hồi.
Chris Stratton

1
Trong linux, tôi đã sử dụng lệnh bash này để xóa chip: st-flash erase
nathan

Chip Erase không hoạt động với tôi. Tôi đã đi đến Target -> Erase Sector -> Chọn tất cả -> áp dụng. Sau này tôi lấy lại quyền truy cập của hội đồng quản trị của tôi. Tôi không chắc chắn lý do tại sao xóa Chip không lời
andrew

6

Để kết nối được thiết lập lại hoạt động, ST-Link phải có quyền kiểm soát pin đặt lại, nếu bạn buộc nó xuống đất, ST-Link không có cơ hội để mục tiêu chạy và giành quyền truy cập vào nó.


Nếu bạn kéo chân BOOT0 lên cao trong khi bật nguồn, MCU sẽ bắt đầu vào bộ tải khởi động bên trong và bạn có thể truy cập bằng một số giao thức nối tiếp (xem hướng dẫn tham khảo để biết thêm chi tiết).

Bên trong bộ tải khởi động, các chân SWD nên có sẵn để có quyền truy cập, nhưng tôi không chắc chắn 100% về điều này.

Trình trình diễn ST Flash Loader là một công cụ cho phép bạn xóa / lập trình vi bằng giao diện UART. Nếu bạn không thể truy cập bất kỳ UART nào trong micro của mình, giải pháp này sẽ không hiệu quả với bạn.


Tôi có thể truy cập USART3 được bộ tải khởi động hỗ trợ, vì vậy tôi sẽ thử điều đó sau - sẽ rất khó, vì BOOT0 được gắn với GND trên PCB ... Nhưng tôi muốn biết điều gì sai. Tôi đã làm gì sai? Tôi đặt chân SWD / JTAG làm đầu ra trong hàm main (). Nhưng nó nói trong hướng dẫn rằng trong khi thiết lập lại, tất cả các chân có chức năng mặc định của chúng và có thể được sử dụng ngay lập tức. Vậy tại sao tôi không thể xóa flash theo thiết lập lại? Tôi cũng đã thử nghiệm lập trình viên U-LINK 2 và uVision 5. Tôi hy vọng rằng không có mức bảo vệ nào - vô tình - được thiết lập. Tôi đã không đặt bất kỳ bit nào như vậy, nhưng có cách nào để kiểm tra xem các bit bảo vệ có ổn không?
zupazt3

@ zupazt3 Tôi không có ý thô lỗ, nhưng vui lòng đọc lại câu đầu tiên của tôi. Nó chứa một câu trả lời cho vấn đề với kết nối được thiết lập lại. Nếu bạn không hiểu nó, hãy đăng bình luận cụ thể hơn.
Arsenal

Nhưng tôi không buộc nó mọi lúc :) Trong bài viết đầu tiên của tôi, tôi có nghĩa là tôi NGAY LẬP nó trực tiếp vào GND để kiểm tra xem điều đó có giúp ích gì không. Nhưng thông thường tôi không ràng buộc NRST với GND, nhưng với một lập trình viên, vì vậy nó có quyền kiểm soát việc thiết lập lại. Và nó vẫn không kết nối. Tôi cũng đã thử sử dụng U-Link 2 và Keil uVision 5 nhưng với kết quả tương tự. Nguyên nhân có thể là gì?
zupazt3

@ zupazt3 không rõ ràng từ câu hỏi của bạn. Có lẽ việc tăng đồng hồ SWD có thể giúp ích, vì nó có thể nhận được kết nối trước khi mục tiêu chuyển sang đầu ra. Nhưng tôi đã vô tình đặt các chân SWD thành đầu ra và không thể kết nối với mục tiêu của mình và chỉ khi sử dụng BOOT0, tôi có thể khôi phục nó, nếu bạn buộc chúng trực tiếp (không có điện trở) thì điều này sẽ et khó khăn.
Arsenal

1
Cuối cùng tôi cũng đã xóa được con chip! Với ST-Link Utility - Tôi nhấn nút đặt lại, nhấp vào "xóa hoàn toàn" và nút phát hành và bằng cách nào đó nó đã tự xóa và bây giờ nó hoạt động. Tôi đã thử điều đó trước đây nhưng chỉ bây giờ nó hoạt động.
zupazt3

3

nếu bạn đang sử dụng stmcubemx, bạn cần định cấu hình dây nối tiếp trên tab sơ đồ chân của stmcube. trên tab pinout, nhấp vào SYS và thay đổi tùy chọn gỡ lỗi thành dây nối tiếp. nó khắc phục vấn đề của tôi và có thể vấn đề của bạn cũng vậy.


Mặc dù đó có thể là một vấn đề, nếu để các chân SWD ở chế độ mặc định bật nguồn của chế độ SWD không phải là cài đặt mặc định của bộ phần mềm này, đó có thể coi là lỗi sử dụng khá nghiêm trọng cần báo cáo và sửa lỗi. Bạn có chắc chắn rằng bạn đã không thay đổi cài đặt từ các giá trị ban đầu của chúng hoặc bắt đầu với một dự án cụ thể được yêu cầu sử dụng các chân đó theo cách không mặc định?
Chris Stratton

Trước tiên tôi chỉ đặt các chân của mình là SYS_SW .... nhưng chúng có màu cam. Cũng có vấn đề kết nối với chip sau khi tải lên mã. Khi tôi chọn chế độ gỡ lỗi trong SYS-serial Wire, chip sẽ kết nối bình thường sau khi chạy.
gtu

1

Tôi đã tải một số mã vào bảng STM32F427 của riêng tôi. Sau đó, tôi không thể kết nối với bảng của mình bằng Tiện ích ST-LINK nữa. Tôi nghĩ rằng mã của tôi làm rối các cấu hình pin gỡ lỗi (? Không thể xác nhận). Những gì tôi đã làm là sau đây để tạo kết nối và lập trình lại bảng của tôi:

  1. Mở Tiện ích ST-LINK và sẵn sàng "Kết nối" trong menu Target.
  2. Cấp nguồn cho bo mạch của bạn (trong trường hợp của tôi, tôi sử dụng cáp USB) và LÚC CÙNG THỜI GIAN nhấp vào "Kết nối" từ Tiện ích ST-LINK.

Tôi đã khôi phục 2 bảng với thủ thuật này. Hi vọng điêu nay co ich. --Bob


1

Giống như dili nói:

nếu bạn đang sử dụng stmcubemx, bạn cần định cấu hình dây nối tiếp trên tab sơ đồ chân của stmcube. trên tab pinout, nhấp vào SYS và thay đổi tùy chọn gỡ lỗi thành dây nối tiếp. nó khắc phục vấn đề của tôi và có thể vấn đề của bạn cũng vậy.

STM32CubeMx không định cấu hình cổng gỡ lỗi theo mặc định, do đó ST-Link sẽ ngừng hoạt động khi bạn flash mã của mình. Bạn phải xóa chip bằng ST-link Utility chẳng hạn. Để kết nối với MCU, tôi phải kéo pin BOOT0 lên cao trong khi bật nguồn để kích hoạt bộ tải khởi động. Sau đó vào menu TarjetErase chip .


0

Để lập trình lại MCU, giữ nút đặt lại và chọn kết nối với thiết bị trong ST-Link Utility hoặc nhấn tải xuống trong IDE của bạn (ví dụ Keil) và sau đó nhả nút đặt lại.


-1

Các chân khởi động (bit trong một số phiên bản) có thể ngăn trình gỡ lỗi bắt đầu. Đảm bảo bạn không triển khai mẫu khởi động khi khởi động (mẫu nhị phân nhất định trên chân boot0 và boot1), nếu không MCU của bạn sẽ vào trạng thái khởi động.


Tôi có pin boot0 được gắn với GND ... Tôi không chắc về những gì bạn đã viết, bởi vì - như tôi đã nói - tôi đã quản lý thành công flash của mình và chương trình vẫn tự thực thi trên MCU - Tôi chỉ không thể kết nối với MCU bằng ST -Link qua giao diện SWD. Khi thiết lập lại, nó không nên thực hiện khởi động và các chân phải ở trạng thái mặc định vì vậy tôi không hiểu tại sao nó không kết nối.
zupazt3

Bạn có chắc chắn về điều đó không? Sự kết hợp nào bạn tin rằng sẽ vô hiệu hóa SWD theo cách mà thao tác thiết lập lại không thể ghi đè?
Chris Stratton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.