Fix lỗi ST-Link – No target connected với STM32CubeF1 v1.4

Lỗi No target connected ST-Link trên KeilC

Lỗi “No target connected” là khi máy tính vẫn nhận mạch nạp ST-Link nhưng lại không nhận ra chip. Bài viết này cụ thể là đề cập đến dòng chip F1, có thể tham khảo với dòng chip khác với lỗi tương tự.

Phần cứng sử dụng

  • MCU STM32F103RCT6
  • Hỗ trợ nạp qua Bootloader, SWD (ST-Link v2)
ST-Link với firmware mới nhất

ST-Link với firmware mới nhất

Tình trạng lỗi

  • Chương trình biên dịch KeilC v5.20 (Mới nhất)
  • Mã nguồn sử dụng tool STM32CubeMX v4.15.1 để gen code (Mới nhất)
  • STM32CubeF1 Firmware v1.4.0 đi kèm STM32CubeMX (Mới nhất)
  • ST-Link Utility và KeilC vẫn nhận USB ST-Link bình thường, không nhận chip dù trước đó khi sử dụng STM32CubeF1 Firmware v1.3.1 vẫn nạp – nhận chip và ST-Link bình thường.
  • Mã nguồn hoàn toàn không sử dụng Remap để sử dụng các chân JTAG.
  • Nạp code qua bootloader OK, kết nối với ST-Link Utility với mode Connect Under Reset OK.
ST-Link Utility không nhận chip

ST-Link Utility không nhận chip

Giải quyết ngay và luôn

Sau một hồi lục lọi Google thì có hai cách để nạp lại chip khi gặp tình trạng này:

  • Boot chip thẳng vào bootloader, nạp firmware mới bình thường. Bạn nào không biết nạp code qua bootloader thì vui lòng hỏi bác Google.
  • Kết nối với ST-Link v2 và dùng mode Connect Under Reset.
    (Nhấn giữ nút Reset, click Connect trên chương trình ST-Link Utility, sau đó nhả nút Reset => ST-Link Utility nhận chip.).
ST-Link Utility nhận ra chip khi kết nối mode Connect Under Reset

ST-Link Utility nhận ra chip khi kết nối mode Connect Under Reset

Sau khi kết nối thì các bạn có thể xóa trắng hoặc flash chương trình mới cho chip. Hai cách trên cũng có thể được dùng để xử những chip đã remap lại chân debug.

Nếu các bạn xóa trắng chip thì mọi thứ hoàn toàn bình thường, cứ nạp chương trình vào là dính lỗi. Và muốn nạp tiếp thì lại phải làm một trong 2 cách trên. Hai cách này khá là bất tiện, vì thế cứ mỗi lúc dev mà muốn nạp lại thì cực lắm, mà nhấn nút reset nhiều thì chả mấy mà cái nút nó hỏng.

Tôi đã thử  với mấy chip F1 thì cứ nạp phát là dính lỗi luôn, các chip ấy trước đó vẫn hoạt động bình thường.

Rất may là trước khi update lên STM32CubeF1 Firmware v1.4.0, tôi có sử dụng git nên có backup lại mã nguồn trước đó. Tôi thử rollback lại về phiên bản driver STM32CubeF1 v1.3.1 trước khi update lên STM32CubeF1 v1.4.0, nạp chương trình vào chip thì mọi thứ lại quay trở về bình thường.

Như vậy có thể xác định lỗi do bộ driver STM32CubeF1.

Nguyên nhân

Tôi đã kiểm tra lại, phiên bản STM32CubeF1 Firmware v1.4.0 này có điểm mới sau.

Bật chế độ Debug qua Serial Wire

Bật chế độ Debug qua Serial Wire

Các bạn phải chuyển mục Debug này thành Serial Wire để có thể sử dụng debug, nạp qua SWD như bình thường. Nếu không chuyển thì mặc định là nó ở chế độ No Debug nên sẽ không debug được nữa đâu.

Đối với các phiên bản trước, phần này tôi để mặc định mà vẫn chạy bình thường, có lẽ lên phiên bản này ST đã điều chỉnh lại.

Chú ý

Phần mềm STM32CubeMX mỗi phiên bản được thiết kế để chỉ chạy được với 1 phiên bản STM32CubeFx Firmware. Vì vậy muốn sử dụng bộ driver cũ thì phải sử dụng phiên bản STM32CubeMX cũ tương ứng. Chúng ta không thể điều chỉnh để dùng với bộ driver cũ trên bản CubeMX mới do mất đồng bộ trong cấu trúc chương trình được tạo ra.

Phần này được ST ghi rất rõ trong Releases Note của họ.

Có thể lựa chọn thư viện FW khi tạo project với STM32CubeMX được không?

Câu hỏi này đã có người hỏi trên diễn đàn của ST (ở đâyở đây), và có câu trả lời như sau:

Actually, although STM32CubeMX update mechanism allows to download all released versions of stm32cube firmware packages, STM32CubeMX allows to create new projects only with one version (and its patch releases if any).

Dịch: Đại ý là STM32CubeMX cho phép tải toàn bộ các phiên bản của các gói firmware, tuy nhiên mỗi phiên bản STM32CubeMX chỉ cho phép dùng một phiên bản firmware tương ứng và các bản vá của phiên bản firmware đó.

STM32CubeMX 4.15 chỉ thích hợp với STM32CubeF1 v1.4.0

STM32CubeMX 4.15 chỉ thích hợp với STM32CubeF1 v1.4.0

Sự cố nhỏ này làm tôi nhớ đến câu nói huyền thoại:

Đó không phải là lỗi, mà đó là một tính năng

 

Leave a Reply

6 Comments on "Fix lỗi ST-Link – No target connected với STM32CubeF1 v1.4"

Notify of
avatar
Sort by:   newest | oldest | most voted
Tùng Nguyễn
Guest

Cảm ơn anh nhé, em cũng vừa bị lỗi này xong, đọc bài này từ sáng có phải ngon rồi không. Cứ tưởng chip bị hỏng, suýt thì đem ra cửa hàng bảo hành :D

Đông
Guest

Bài viết cực kỳ hữu ích :) Thay ra thay vào 3 chip rồi mà đến giờ mới đọc được bài viết :(

Duy Tran
Guest

Error #540: ‘Keil.MDK-Pro::Network:CORE:Release:6.5.0’ component is not available for target ‘STM32F746 Flash’
Error #602: ‘Keil.MDK-Pro::USB:Device:CDC:6.8.0’: component requires valid MDK-ARM Professional license
Anh cho em hỏi 2 lỗi này là gì vậy anh ơi? Em loay hoay cả buổi mà vẫn không biết nguyên nhân và cách sửa luôn ạ. Em xin cám ơn anh nhiêu

wpDiscuz