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

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

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

Tình trạng lỗi

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:

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

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

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.