Keil uVision MDK-Lite, STM32F072B- บอร์ด Discovery และแฟลช API


10

ฉันกำลังใช้ MDK-Lite เวอร์ชั่น 5.23 กับบอร์ด STMicroelectronics STM32F072B- ดิสโก้ค้นพบและฉันพยายามใช้แฟลชตัวอย่างที่มีให้โดยตัวอย่าง Discovery

ฉันใช้บอร์ดนี้และ toolchain สำหรับตัวอย่างอื่นและฉันเขียนรหัส SPI และ GPIO IDE ทำงานเหมือนแชมป์ อย่างไรก็ตามสำหรับโครงการนี้โดยเฉพาะฉันสามารถสร้างรหัสและเรียกใช้โดยการดาวน์โหลดและใช้ปุ่มรีเซ็ต ฉันไม่สามารถใช้ตัวดีบักในโครงการทันทีที่ใช้รูทีน HAL_FLASHEx_Erase () เมื่อฉันเรียกใช้รูทีนนั้น IDE จะปรากฏกล่องโต้ตอบ "ไม่สามารถเข้าถึงเป้าหมายได้การปิดเซสชันดีบั๊ก"

สำหรับสิ่งที่คุ้มค่าฉันรู้ว่าไม่ใช่ข้อผิดพลาดในการเขียนโปรแกรมเพราะถ้าฉันดาวน์โหลดรหัสแล้วรันโค้ดโดยการกดปุ่มรีเซ็ตมันจะทำงาน ฉันใช้ดีบักเกอร์ตัวเดียวกันกับบอร์ด TI และมันก็สามารถตั้งโปรแกรมแฟลชและใช้งานรูทีนแฟลชได้เช่นกัน ฉันค่อนข้างแน่ใจว่าฉันไม่ได้ลบส่วนของแฟลชที่จัดเก็บรหัสไว้ดังนั้นจึงไม่ใช่แบบนั้น

หากฉันข้ามบรรทัดนี้ใน main.c

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

จากนั้นจะลดเซสชันการดีบัก หากฉันแทนขั้นตอนในบรรทัดเดียวกันแล้วข้ามการโทรแต่ละครั้งในรูทีนการลบแฟลชจากนั้นจะทำงานและในที่สุดจะก้าวออกจากรูทีนและฉันสามารถดีบักรหัสที่เหลือ


ไม่แน่ใจ แต่บางทีด้าน USB ของ CMSIS-DAP ได้รับพลังงาน บอร์ดนั้นมีการกระจายพลังงานที่ค่อนข้างซับซ้อนสำหรับองค์ประกอบการดีบักภายนอก ไม่สามารถเข้าถึงเป้าหมายได้อาจหมายถึงการเชื่อมต่อ (โดยสายอนุกรม) ไปยัง DAP เสีย
Sean Houlihane

เรากำลังพูดถึงออนบอร์ด ST-LINK / V2 ในฐานะดีบั๊กหรือไม่?
Bence Kaulics

หากคุณสามารถแชร์รหัสภาพบุคคลอื่นอาจสามารถตรวจสอบ (และแยกแยะปัญหาฮาร์ดแวร์) มีบอร์ด M7 เท่านั้น ...
Sean Houlihane

Bence Kaulics ตัวดีบักติดตั้งไว้ในบอร์ด stm32f072B-disco มันคือ ST-Link Debugger ไม่ใช่ Keil ULINK2 debugger ซึ่งเป็น ST-LINK / V2 ฉันมีหนึ่งใน debugger ที่เชื่อมต่อ usb ของ Keil แต่มันเชื่อมต่อกับบอร์ดด้วยสายริบบิ้น ฉันใช้ตัวเชื่อมต่อ mini usb ST-Link บนบอร์ดไม่ใช่ตัวเชื่อมต่อสายริบบิ้น บอร์ดได้รับพลังงานจากตัวเชื่อมต่อ mini-usb ไม่ใช่แหล่งจ่ายไฟแยกต่างหาก
netskink

1
เกี่ยวกับตัวอย่างโค้ด ตัวอย่างนี้จัดทำโดย repot การค้นพบจาก STMicro เส้นทางของโครงการใน repot ST คือโครงการ / STM32F072B- การค้นพบ / ตัวอย่าง / FLASH / FLASH_EraseProgram ฉันใช้โครงการ MDK-ARM ในไดเรกทอรีนั้น มันล้มเหลวในบรรทัดที่ 108 ซึ่งจะเป็น HAL_FLASHEx_Erase ()
netskink

คำตอบ:


7

ฉันเดาว่านี่เป็นแหล่งจ่ายไฟที่เกี่ยวข้องในบางระดับ อาจเป็นแหล่งจ่ายไฟภายนอกหรือการเปลี่ยนรางไฟ

เพื่อให้สถานการณ์ชัดเจนขึ้นการดีบักทำงานได้ดีหลังจากรีเซ็ตฮาร์ดแวร์ แต่เมื่อเป้าหมายของคุณลบบล็อกแฟลชการเชื่อมต่อการดีบักจะหลุด

การดีบักไม่สนใจเกี่ยวกับการเรียกใช้รหัสอย่างถูกต้องคุณสามารถอยู่ในสถานะล็อคได้และการดีบักการหยุดทำงานควรจะยังคงทำงานอยู่ สิ่งเดียวที่อยู่ด้านซีพียูที่ปลดล็อคการดีบักคือการเข้าถึง AHB ที่ไม่ได้ล็อค ซึ่งหมายความว่าปัญหานั้นอาจเกิดขึ้นกับอินเตอร์เฟส SWD ระหว่าง STM32F7 และชิปอินเตอร์เฟส USB-SWD บนบอร์ด (เช่น STM32, ฉันเข้าใจ) อุปกรณ์นี้มีการสลับรางพลังงานบนบอร์ดซึ่งทำให้ฉันสับสนในครั้งแรกที่ฉันใช้บอร์ด

เป็นที่น่าสังเกตว่าการลบแฟลชจะเพิ่มการระบายปัจจุบันของอุปกรณ์ - PSU ภายนอกของคุณขึ้นอยู่กับงานและคุณสามารถใช้ทางเลือกอื่นได้หรือไม่?

แก้ไข: ตามข้อเสนอแนะของคุณที่นำรหัสไปสู่คำถามที่ทำให้เกิดการดีบักผิดพลาดในขณะที่ก้าวเดียวไม่ได้ฉันคิดว่าปัญหาของคุณเกี่ยวข้องกับคำถามนี้

การใช้ Step-over โดยใช้เบรกพอยต์ (และการสำรวจสถานะการหยุด) ในขณะที่สนับสนุนขั้นตอนเดียวในฮาร์ดแวร์ สิ่งนี้ยังไม่ได้อธิบายว่าทำไมดีบักเกอร์ดูเหมือนสับสน แต่เป็นไปได้ว่าดีบักเกอร์พยายามเข้าถึงรหัส (จากแฟลช) ในขณะที่แฟลชคอนโทรลเลอร์ทำงานอยู่

จากข้อสังเกตเหล่านี้ฉันขอแนะนำให้คุณตั้งค่าเบรกพอยต์หลังการลบและพยายามหลีกเลี่ยงการทริกเกอร์สถานการณ์นี้


ถูกต้องมันใช้งานได้ดี แต่เมื่อฉันลบบล็อกการเชื่อมต่อ usb ไปยังตัวดีบัก ฉันใช้ฮับ usb ที่ไม่มีไฟดังนั้นสิ่งนี้จึงดูสมเหตุสมผล อย่างไรก็ตามการเชื่อมต่อโดยตรงกับคอมพิวเตอร์และการใช้ฮับอื่นจะให้ผลลัพธ์เดียวกัน
netskink

หากคุณกำลังเรียกใช้รหัสในขณะที่ทำการเข้าถึงแฟลชคุณจะหยุด AHB ชั่วครู่หนึ่ง ฉันถ่ายรูปก้าวในสถานการณ์นี้อาจยุ่ง stackoverflow.com/questions/3445598มีอีกมาก
Sean Houlihane
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.