Keil uVision MDK-Lite, bảng STM32F072B-Discovery và API flash


10

Tôi đang sử dụng MDK-Lite Phiên bản 5.23 với bảng STMicroelectronics STM32F072B-Disco "Discovery" và tôi đang thử sử dụng Ví dụ Flash được cung cấp bởi các mẫu Discovery.

Tôi đã sử dụng bảng và toolchain này cho các ví dụ khác và tôi đã mã hóa một số công việc SPI và GPIO. IDE hoạt động như một nhà vô địch. Tuy nhiên, đối với dự án cụ thể này, tôi có thể xây dựng mã và chạy nó bằng cách tải xuống và sử dụng nút đặt lại. Tôi không thể sử dụng trình gỡ lỗi trên dự án ngay khi tôi sử dụng thói quen HAL_FLASHEx_Erase (). Khi tôi thực hiện thói quen đó, IDE sẽ bật lên hộp thoại "Không thể truy cập mục tiêu. Tắt phiên gỡ lỗi."

Đối với những gì nó có giá trị, tôi biết đó không phải là lỗi lập trình bởi vì nếu tôi tải xuống mã và sau đó thực thi mã bằng cách nhấn nút đặt lại, nó sẽ hoạt động. Tôi đã sử dụng cùng trình gỡ lỗi này với bảng TI và nó cũng có thể lập trình flash và thực hiện các thói quen flash. Tôi khá chắc chắn rằng tôi không xóa phần flash nơi mã được lưu trữ, vì vậy không phải vậy.

Nếu tôi bước qua dòng này trong main.c

if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)

sau đó nó giảm phiên gỡ lỗi. Thay vào đó, nếu tôi bước vào cùng một dòng và sau đó bước qua từng cuộc gọi trong thói quen xóa flash, thì nó sẽ hoạt động và cuối cùng bước ra khỏi thói quen và tôi có thể gỡ lỗi phần còn lại của mã.


Không chắc chắn, nhưng có lẽ phía USB của CMSIS-DAP đã được chạy bằng điện. Bảng đó có phân phối điện khá phức tạp cho các thành phần gỡ lỗi bên ngoài. Mục tiêu truy cập không thể có nghĩa là kết nối (bằng dây nối tiếp) với DAP đã bị hỏng.
Sean Houlihane

Có phải chúng ta đang nói về ST-LINK / V2 trên tàu với tư cách là trình gỡ lỗi?
Bence Kaulics 30/03/2017

Nếu bạn có thể chia sẻ hình ảnh mã, người khác có thể xác minh (và loại trừ các sự cố phần cứng). Chỉ có một bảng M7 cho mình ...
Sean Houlihane

Bence Kaulics, trình gỡ lỗi được tích hợp trong bảng stm32f072B-sàn nhảy. Đó là trình gỡ lỗi ST-Link chứ không phải trình gỡ lỗi Keil ULINK2 là ST-LINK / V2. Tôi có một trong những trình gỡ lỗi kết nối usb Keil nhưng nó kết nối với bảng bằng cáp ruy băng. Tôi đang sử dụng đầu nối mini USB ST-Link trên bo mạch chứ không phải đầu nối cáp ruy băng. Bảng mạch lấy nguồn từ đầu nối mini-usb chứ không phải nguồn điện riêng.
netskink

1
Về mẫu mã. Mẫu được cung cấp bởi repot khám phá từ STMicro. Đường dẫn của dự án trong repot ST là dự án / STM32F072B-Discovery / Ví dụ / FLASH / FLASH_EraseProgram. Tôi đang sử dụng dự án MDK-ARM trong thư mục đó. Nó không thành công trên dòng 108 trong đó HAL_FLASHEx_Erase ()
netskink 30/03/2017

Câu trả lời:


7

Tôi đoán rằng đây là một nguồn cung cấp năng lượng liên quan ở một số cấp độ. Hoặc là nguồn cung cấp bên ngoài, hoặc chuyển đổi trên đường ray của đường ray điện.

Để làm rõ kịch bản, gỡ lỗi hoạt động tốt sau khi thiết lập lại phần cứng, nhưng khi mục tiêu của bạn xóa một khối flash, kết nối gỡ lỗi bị hủy?

Gỡ lỗi không quan tâm đến mã chạy chính xác - bạn có thể ở trạng thái khóa và tạm dừng gỡ lỗi vẫn hoạt động. Điều duy nhất ở phía CPU khóa gỡ lỗi là truy cập AHB bị khóa. Điều này có nghĩa là sự cố xảy ra với giao diện SWD giữa STM32F7 và chip giao diện USB-SWD trên bo mạch (cũng là STM32, tôi đoán vậy). Thiết bị này có một số chuyển đổi đường sắt điện trên tàu làm tôi bối rối khi lần đầu tiên tôi sử dụng bảng.

Điều đáng chú ý là việc xóa flash sẽ làm tăng mức tiêu hao hiện tại của thiết bị - PSU bên ngoài của bạn có phù hợp với công việc không và bạn có thể sử dụng một giải pháp thay thế không?

Chỉnh sửa: Dựa trên phản hồi của bạn rằng bước qua mã được đề cập khiến trình gỡ lỗi bị sập, trong khi bước đơn thì không, tôi nghĩ vấn đề của bạn có liên quan đến câu hỏi này .

Bước qua được thực hiện bằng cách sử dụng điểm dừng (và bỏ phiếu cho trạng thái tạm dừng), trong khi bước đơn được hỗ trợ trong phần cứng. Điều này vẫn không giải thích được tại sao trình gỡ lỗi dường như bị lẫn lộn, nhưng không cho phép trình gỡ lỗi đang cố truy cập mã (từ flash) trong khi bộ điều khiển flash đang hoạt động.

Dựa trên những quan sát này, tôi khuyên bạn nên đặt điểm dừng sau khi xóa và cố gắng tránh kích hoạt kịch bản này.


Chính xác, nó hoạt động tốt nhưng khi tôi xóa một khối kết nối usb với trình gỡ lỗi bị rớt. Tôi đã sử dụng một trung tâm usb không có nguồn lực nên điều này có vẻ hợp lý; tuy nhiên, kết nối trực tiếp với máy tính và sử dụng một hub khác sẽ cho kết quả tương tự.
netskink

Nếu bạn đang chạy mã trong khi thực hiện truy cập flash, bạn sẽ bế tắc AHB trong một thời gian. Tôi hình ảnh bước trong kịch bản này có thể là lộn xộn. stackoverflow.com/questions/3445598 có nhiều hơn.
Sean Houlihane
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.