ยาเม็ดสีน้ำเงินมนต์ดำ (เราสร้างโปรแกรมเมอร์ Black Magic Probe จากโมดูลที่ใช้ STM32F103) แท็บเล็ต Black Magic Blue (เราสร้างโปรแกรมเมอร์ Black Magic Probe จากโมดูลที่ใช้ STM32F103) การเขียนโปรแกรมการค้นพบ stm32

เพื่อดาวน์โหลดเฟิร์มแวร์ไปยังไมโครคอนโทรลเลอร์ เอสทีเอ็ม32มีการใช้โปรแกรมเมอร์ ST-ลิงค์ซึ่งสามารถเชื่อมต่อกับไมโครคอนโทรลเลอร์แบบตั้งโปรแกรมได้ผ่านอินเทอร์เฟซ ส.ว.- แถมยังใช้เหมือนกัน ST-ลิงค์และ ส.ว.คุณสามารถทำการดีบักเฟิร์มแวร์ทีละขั้นตอนได้จากสภาพแวดล้อมการพัฒนาพร้อมรองรับเบรกพอยต์ ( เบรกพอยต์- จำนวนการติดตั้งพร้อมกัน จุดพักจำกัดไว้เพียงไม่กี่ชิ้น (ฉันจำไม่ได้ว่ามีกี่ชิ้น เช่น 5 ชิ้น) แต่นี่ก็เกินพอที่จะดีบักเฟิร์มแวร์แล้ว

ในบอร์ดดีบั๊กที่มีตราสินค้าจาก เซนต์มีทั้งไมโครคอนโทรลเลอร์เป้าหมายและโปรแกรมเมอร์อยู่บนบอร์ด ST-ลิงค์ซึ่งทำบนไมโครคอนโทรลเลอร์ด้วย เอสทีเอ็ม32- โดยวิธีการแก้ปัญหาที่สะดวกมาก นอกจากนี้โปรแกรมเมอร์ซึ่งติดตั้งอยู่ในบอร์ดดีบักยังสามารถใช้เพื่อแฟลชไมโครคอนโทรลเลอร์ภายนอกได้อีกด้วย เอสทีเอ็ม32.เพื่อวัตถุประสงค์เหล่านี้ มีหวีพิเศษบนบอร์ดและจัมเปอร์ซึ่งคุณสามารถปิดการใช้งานอินเทอร์เฟซได้ ส.ว.จากไมโครคอนโทรลเลอร์ที่บัดกรีบนบอร์ด ฉันมีบอร์ดไว้ใช้ stm32f4discoveryซึ่งติดตั้งไมโครคอนโทรลเลอร์ไว้ STM32F407VGและฉันใช้บอร์ดนี้เป็นโปรแกรมเมอร์ ST-ลิงค์:

โดยปกติคุณสามารถซื้อโปรแกรมเมอร์แยกต่างหากได้ ST-ลิงค์- มีหลายตัวเลือกที่นี่ อันแรกมีแบรนด์ ST-ลิงค์ซึ่งมาพร้อมกับและไม่มีการแยกกัลวานิก โปรแกรมเมอร์เหล่านี้มีลักษณะดังนี้:

อีกทางเลือกหนึ่งคือภาษาจีน ST-ลิงค์ในรูปแบบแฟลชไดรฟ์:

โดยหลักการแล้วตัวเลือกก็ไม่ได้แย่เช่นกัน แต่คุณต้องจำไว้ว่ามันไม่มีการป้องกันอินเทอร์เฟซอยู่ภายใน ยูเอสบีและบอร์ดเป้าหมาย ดังนั้น หากวงจรและกราวด์ PC ไม่ตรงกัน ก็เกิดการลัดวงจรในวงจรที่กำลังดีบั๊ก เป็นต้น มีโอกาสสูงที่โปรแกรมเมอร์จะไหม้พร้อมกับ ยูเอสบีพอร์ตบนคอมพิวเตอร์ ดังนั้นเมื่อทำงานกับโปรแกรมเมอร์นี้คุณต้องระวังอย่างยิ่ง!

การเชื่อมต่อโปรแกรมเมอร์ ST-Link เข้ากับไมโครคอนโทรลเลอร์ STM32

อินเทอร์เฟซ ส.ว.ซึ่งโปรแกรมเมอร์เชื่อมต่อกับไมโครคอนโทรลเลอร์จะมี 2 บรรทัด:

  • สวีดิโอ
  • SWCLK

นี่เป็นจำนวนขั้นต่ำที่จำเป็นสำหรับการโหลดเฟิร์มแวร์ลงในไมโครคอนโทรลเลอร์ใหม่หรือการดีบักและสภาพแวดล้อมการพัฒนา (เช่น จาก IAR) ในไมโครคอนโทรลเลอร์ทั้งหมด เอสทีเอ็ม32พินการเขียนโปรแกรมจะรวมกับพอร์ต I/O ต่อไปนี้:

  • สวิดิโอ-PA13
  • SWCLK-PA14

ข้อสรุป PA13และ PA14สามารถใช้เป็นพอร์ต I/O ทั่วไปได้ อย่างไรก็ตาม ในกรณีนี้ ความสามารถในการดีบักเฟิร์มแวร์จากสภาพแวดล้อมการพัฒนาจะหายไป นอกจากนี้ หากคุณเปลี่ยนการตั้งค่าพินเริ่มต้นจากเฟิร์มแวร์ที่โหลดลงใน MK PA13และ PA14กระบวนการดาวน์โหลดเฟิร์มแวร์ใหม่กลายเป็นเรื่องยากคุณจะต้องใช้สายอื่นที่เชื่อมต่อโปรแกรมเมอร์และบรรทัด MK: รีเซ็ต- ในกรณีนี้ ก่อนที่จะดาวน์โหลดเฟิร์มแวร์ ST-ลิงค์จะรีเซ็ตไมโครคอนโทรลเลอร์และถ่ายโอนพิน PA13และ PA14เป็นสถานะเริ่มต้นและหลังจากนั้นจะโหลดเฟิร์มแวร์ใหม่ลงใน MK เพื่อเปิดใช้งานฟังก์ชันรีเซ็ตไมโครคอนโทรลเลอร์ก่อนที่จะโหลดเฟิร์มแวร์เข้าไป ไอเออาร์-e ในส่วนการตั้งค่า ST-ลิงค์- คุณต้องเลือกตัวเลือก "รีเซ็ตพิน".

เผยแพร่เมื่อ 08/09/2016

ไมโครคอนโทรลเลอร์ เอสทีเอ็ม32กำลังได้รับความนิยมมากขึ้นเรื่อยๆ เนื่องจากพลัง อุปกรณ์ต่อพ่วงที่ค่อนข้างหลากหลาย และความยืดหยุ่น เราจะเริ่มเรียนโดยใช้กระดานทดสอบงบประมาณซึ่งมีราคาไม่เกิน 2 ดอลลาร์ (จากภาษาจีน) เราก็จะต้องการ ST-ลิงค์โปรแกรมเมอร์ซึ่งมีราคาประมาณ 2.5 ดอลลาร์ (จากภาษาจีน) ค่าใช้จ่ายจำนวนดังกล่าวมีราคาไม่แพงสำหรับทั้งนักเรียนและเด็กนักเรียนดังนั้นฉันจึงเสนอให้เริ่มต้นด้วยตัวเลือกงบประมาณนี้


ไมโครคอนโทรลเลอร์นี้ไม่ได้ทรงพลังที่สุดในบรรดา เอสทีเอ็ม32แต่ก็ไม่ใช่คนที่อ่อนแอที่สุดเช่นกัน มีบอร์ดต่างๆด้วย เอสทีเอ็ม32, รวมทั้ง การค้นพบซึ่งมีราคาประมาณ $20 บนบอร์ดดังกล่าวเกือบทุกอย่างเหมือนกับบนบอร์ดของเรารวมทั้งโปรแกรมเมอร์ด้วย ในกรณีของเรา เราจะใช้โปรแกรมเมอร์แยกกัน

ไมโครคอนโทรลเลอร์ STM32F103C8. ลักษณะเฉพาะ

  • แกน Cortex-M3 ARM 32 บิต
  • ความถี่สูงสุด 72MHz
  • หน่วยความจำแฟลช 64Kb สำหรับโปรแกรม
  • หน่วยความจำ SRAM ขนาด 20Kb
  • แหล่งจ่ายไฟ 2.0 … 3.3V
  • 2 x 12 บิต ADC (0 ... 3.6V)
  • ตัวควบคุม DMA
  • 37 อินพุต/เอาต์พุตที่ยอมรับได้ 5V
  • ตัวจับเวลา 16 บิต 4 ตัว
  • ตัวจับเวลาเฝ้าระวัง 2 ตัว
  • I2C – 2 รถโดยสาร
  • USART – รถโดยสาร 3 คัน
  • SPI – 2 รถโดยสาร
  • อินเทอร์เฟซ USB 2.0 ความเร็วสูง
  • RTC – นาฬิกาในตัว

มีอยู่ในบอร์ด STM32F103C8

  • พอร์ตเอาท์พุต A0-A12, บี0-บี1, B3-B15, C13-C15
  • ไมโคร-USBซึ่งคุณสามารถจ่ายไฟให้บอร์ดได้ บอร์ดนี้มีตัวปรับแรงดันไฟฟ้า 3.3V สามารถจ่ายไฟ 3.3V หรือ 5V ให้กับพินที่เกี่ยวข้องบนบอร์ดได้
  • ปุ่ม รีเซ็ต
  • จัมเปอร์สองตัว บูต0และ บูต1- เราจะใช้มันระหว่างการแฟลชผ่าน ยูอาร์ที.
  • ควอตซ์ 8 MHz และ 32768 Hz สองตัว ไมโครคอนโทรลเลอร์มีตัวคูณความถี่ ดังนั้นด้วยควอตซ์ 8 MHz เราจึงสามารถเข้าถึงความถี่ตัวควบคุมสูงสุดที่ 72 MHz
  • ไฟ LED สองดวง สปป– สัญญาณว่ากำลังจ่าย พีซี13– เชื่อมต่อกับเอาต์พุต ค13.
  • คอนเนคเตอร์สำหรับโปรแกรมเมอร์ ST-ลิงค์.

เรามาเริ่มด้วยการลองแฟลชไมโครคอนโทรลเลอร์กันก่อน ซึ่งสามารถทำได้ผ่าน USART หรือใช้โปรแกรมเมอร์ ST-ลิงค์.

คุณสามารถดาวน์โหลดไฟล์ทดสอบสำหรับเฟิร์มแวร์ได้- โปรแกรมจะกะพริบไฟ LED บนบอร์ด

เฟิร์มแวร์ STM32 โดยใช้อะแดปเตอร์ USB-Uart สำหรับ Windows

ในหน่วยความจำระบบ เอสทีเอ็ม32มี บูตโหลดเดอร์- Bootloader จะถูกบันทึกในขั้นตอนการผลิตและไมโครคอนโทรลเลอร์ใดๆ เอสทีเอ็ม32สามารถตั้งโปรแกรมผ่านอินเทอร์เฟซได้ USARTโดยใช้อะแดปเตอร์ USART-USB อะแดปเตอร์ดังกล่าวส่วนใหญ่มักผลิตขึ้นโดยใช้วงจรไมโครยอดนิยม FT232RL- ก่อนอื่น ให้เชื่อมต่ออะแดปเตอร์เข้ากับคอมพิวเตอร์และติดตั้งไดรเวอร์ (หากจำเป็น) คุณสามารถดาวน์โหลดไดรเวอร์ได้จากเว็บไซต์ของผู้ผลิต FT232RL– ftdichip.com. คุณต้องดาวน์โหลดไดรเวอร์ วีซีพี(พอร์ต com เสมือน) หลังจากติดตั้งไดรเวอร์แล้ว พอร์ตอนุกรมเสมือนควรปรากฏบนคอมพิวเตอร์ของคุณ


กำลังเชื่อมต่อ รับและ เท็กซัสส่งออกไปยังพินที่เกี่ยวข้อง USART1ไมโครคอนโทรลเลอร์ รับเชื่อมต่ออะแดปเตอร์เข้ากับ เท็กซัสไมโครคอนโทรลเลอร์ (A9) เท็กซัสเชื่อมต่ออะแดปเตอร์เข้ากับ รับไมโครคอนโทรลเลอร์ (A10) เนื่องจาก USART-USB มีเอาต์พุตกำลังไฟ 3.3V เราจะจ่ายไฟให้กับบอร์ดจากนั้น

หากต้องการให้ไมโครคอนโทรลเลอร์เข้าสู่โหมดการเขียนโปรแกรม คุณต้องตั้งค่าพิน บูต0และ บูต1ไปยังสถานะที่ต้องการแล้วรีบูตด้วยปุ่ม รีเซ็ตหรือปิดและเปิดการทำงานของไมโครคอนโทรลเลอร์ สำหรับสิ่งนี้เรามีจัมเปอร์ การรวมกันที่แตกต่างกันจะบังคับให้ไมโครคอนโทรลเลอร์เข้าสู่โหมดที่ต่างกัน เราสนใจโหมดเดียวเท่านั้น เมื่อต้องการทำเช่นนี้ไมโครคอนโทรลเลอร์ก็มี บูต0ควรมีตรรกะและผลลัพธ์ บูต1– ศูนย์ตรรกะ บนกระดานนี่คือตำแหน่งจัมเปอร์ต่อไปนี้:

หลังจากกดปุ่มแล้ว รีเซ็ตหรือตัดการเชื่อมต่อและต่อสายไฟไมโครคอนโทรลเลอร์จะต้องเข้าสู่โหมดการเขียนโปรแกรม

ซอฟต์แวร์เฟิร์มแวร์

หากเราใช้อะแดปเตอร์ USB-UART ชื่อพอร์ตจะเป็นดังนี้ /dev/ttyUSB0

รับข้อมูลชิป

ผลลัพธ์:

เราอ่านจากชิปลงในไฟล์ dump.bin

sudo stm32flash -r dump.bin /dev/ttyUSB0

เขียนไปที่ชิป

sudo stm32flash -w dump.bin -v -g 0x0 /dev/ttyUSB0

ผลลัพธ์:

Stm32flash 0.4 http://stm32flash.googlecode.com/ การใช้ Parser: Raw BINARY Interface serial_posix: 57600 8E1 เวอร์ชัน: 0x22 ตัวเลือก 1: 0x00 ตัวเลือก 2: 0x00 รหัสอุปกรณ์: 0x0410 (ความหนาแน่นปานกลาง) - RAM: 20KiB (512b สงวนไว้โดย bootloader) - แฟลช: 128KiB (ขนาดเซกเตอร์: 4x1024) - ตัวเลือก RAM: 16b - RAM ระบบ: 2KiB เขียนลงในหน่วยความจำ การลบหน่วยความจำ เขียนและยืนยันที่อยู่ 0x08012900 (100.00%) เสร็จสิ้น เริ่มดำเนินการตามที่อยู่ 0x08000000... เสร็จสิ้น

เฟิร์มแวร์ STM32 โดยใช้โปรแกรมเมอร์ ST-Link สำหรับ Windows

เมื่อใช้โปรแกรมเมอร์ ST-ลิงค์ข้อสรุป บูต0และ บูต1ไม่ได้ใช้และต้องอยู่ในตำแหน่งมาตรฐานสำหรับการทำงานตามปกติของตัวควบคุม

(จองเป็นภาษารัสเซีย)

เครื่องหมาย STM32

ตระกูลอุปกรณ์ประเภทสินค้าตระกูลย่อยของอุปกรณ์จำนวนพินขนาดหน่วยความจำแฟลชบรรจุุภัณฑ์ช่วงอุณหภูมิ
เอสทีเอ็ม32 =
ไมโครคอนโทรลเลอร์ 32 บิตที่ใช้ ARM
F = วัตถุประสงค์ทั่วไป
L = พลังงานต่ำมาก
TS=หน้าจอสัมผัส
W = ระบบไร้สายบนชิป
60 = ตัวต้านทานแบบมัลติทัช
103 = เส้นประสิทธิภาพ
F = 20 พิน
G = 28 พิน
K = 32 พิน
T = 36 พิน
H = 40 พิน
C = 48/49 พิน
R = 64 พิน
O=90 พิน
วี = 100 พิน
Z = 144 พิน
I = 176 พิน
B = 208 พิน
N = 216 พิน
4 = หน่วยความจำแฟลช 16 Kbytes
6 = หน่วยความจำแฟลช 32 Kbytes
8 = หน่วยความจำแฟลช 64 Kbytes
B = หน่วยความจำแฟลช 128 Kbytes
Z = หน่วยความจำแฟลช 192 Kbytes
C = หน่วยความจำแฟลช 256 Kbytes
D = หน่วยความจำแฟลช 384 Kbytes
E = หน่วยความจำแฟลช 512 Kbytes
F = หน่วยความจำแฟลช 768 Kbytes
G = หน่วยความจำแฟลช 1,024 Kbytes
I = หน่วยความจำแฟลช 2048 Kbytes
H = ยูเอฟบีจีเอ
N=TFBGA
P = TSSOP
ที = LQFP
U = V/UFQFPN
Y = WLCSP
6 = ช่วงอุณหภูมิอุตสาหกรรม –40…+85 °C
7 = ช่วงอุณหภูมิอุตสาหกรรม -40…+ 105 °C
เอสทีเอ็ม32เอฟ103 8 6

จะลบการป้องกันการเขียน/อ่านได้อย่างไร?

หากคุณได้รับบอร์ดที่มี STM32F103 แต่โปรแกรมเมอร์ไม่เห็นนั่นหมายความว่าชาวจีนได้ปกป้องหน่วยความจำแฟลชของไมโครคอนโทรลเลอร์ คำถาม “ทำไม” อย่าสนใจมันเลย หากต้องการลบการปิดกั้นเราจะเชื่อมต่ออะแดปเตอร์ UART และตั้งโปรแกรมผ่านมัน เราตั้งค่าจัมเปอร์สำหรับการเขียนโปรแกรมแล้วเริ่มกันเลย:

ฉันจะทำสิ่งนี้จาก Ubuntu โดยใช้ยูทิลิตี้ stm32flash

1. ตรวจสอบว่าไมโครคอนโทรลเลอร์มองเห็นได้หรือไม่:

Sudo stm32flash /dev/ttyUSB0.1

คุณควรได้รับสิ่งนี้:

Stm32flash 0.4 http://stm32flash.googlecode.com/ อินเทอร์เฟซ serial_posix: 57600 8E1 เวอร์ชัน: 0x22 ตัวเลือก 1: 0x00 ตัวเลือก 2: 0x00 รหัสอุปกรณ์: 0x0410 (ความหนาแน่นปานกลาง) - RAM: 20KiB (512b สงวนไว้โดย bootloader) - แฟลช: 128KiB (ขนาดเซกเตอร์: 4x1024) - RAM ตัวเลือก: 16b - RAM ระบบ: 2KiB

2. ลบการป้องกันการอ่านออก จากนั้นจึงป้องกันการเขียน:

Sudo stm32flash -k /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ อินเทอร์เฟซ serial_posix: 57600 8E1 เวอร์ชัน: 0x22 ตัวเลือก 1: 0x00 ตัวเลือก 2: 0x00 รหัสอุปกรณ์: 0x0410 (ความหนาแน่นปานกลาง) - RAM: 20KiB ( 512b สงวนไว้โดย bootloader) - แฟลช: 128KiB (ขนาดเซกเตอร์: 4x1024) - RAM ตัวเลือก: 16b - RAM ระบบ: 2KiB แฟลชอ่าน-ไม่ป้องกัน เสร็จสิ้น

sudo stm32flash -u /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ อินเทอร์เฟซ serial_posix: 57600 8E1 เวอร์ชัน: 0x22 ตัวเลือก 1: 0x00 ตัวเลือก 2: 0x00 รหัสอุปกรณ์: 0x0410 (ความหนาแน่นปานกลาง) - RAM: 20KiB ( 512b สงวนไว้โดย bootloader) - แฟลช: 128KiB (ขนาดเซกเตอร์: 4x1024) - ตัวเลือก RAM: 16b - RAM ระบบ: 2KiB แฟลชที่ไม่มีการป้องกันการเขียน เสร็จสิ้น

ตอนนี้คุณสามารถทำงานตามปกติกับไมโครคอนโทรลเลอร์ได้แล้ว

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

นักพัฒนาซอฟต์แวร์แบบฝังตัวจะต้องมีโปรแกรมเมอร์สำหรับอุปกรณ์ที่เขาใช้ ในกรณีของฉัน ไมโครคอนโทรลเลอร์จาก STMicroelectronics รวมถึง Milandr (โปรเซสเซอร์รัสเซียที่ใช้คอร์ ARM)

การซื้ออุปกรณ์นี้มีราคาแพงมากโดยเฉพาะเมื่อเปรียบเทียบกับต้นทุนส่วนประกอบ - ส่วนประกอบแผงวงจรพิมพ์และส่วนประกอบวิทยุ

มีการตัดสินใจที่จะสร้างโปรแกรมเมอร์ด้วยตัวเอง พื้นฐานคือไดอะแกรมวงจรของบอร์ดดีบั๊กสำหรับไมโครคอนโทรลเลอร์ต่างๆ และผลลัพธ์ที่ได้คือโมดูลดีบั๊กที่ทำงานได้อย่างสมบูรณ์ไม่เพียง แต่สำหรับ stm32 เท่านั้น แต่ยังสำหรับ stm8 และแม้แต่ชิป Milanda ด้วย (ทดสอบจนถึงตอนนี้เฉพาะใน K1986BE92 แต่ฉันคิดว่าคนอื่น ๆ ก็เช่นกัน สร้างและแก้ไขจุดบกพร่อง)

  • ฟังก์ชั่นหลัก:
  • การเขียนโปรแกรมและการดีบัก STM32
  • การเขียนโปรแกรมและการดีบัก STM8

การเขียนโปรแกรมและการดีบัก ARM Milander

  • อินเทอร์เฟซการเขียนโปรแกรม:
  • SWD - สูงสุด 4 MHz;
  • เจแท็ก;

ว่ายน้ำ.

โปรแกรมเมอร์สามารถเห็นได้ในภาพด้านบน สายไฟที่ทอดยาวไปทั่วบอร์ดเป็นเพียงการดัดแปลงในภายหลังซึ่งเกี่ยวข้องกับการขาด LED ที่จำเป็น (ซ้าย) และความจำเป็นในการตั้งโปรแกรมบอร์ดโดยไม่ต้องจ่ายไฟ (ขวา)

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

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

เพื่อให้แน่ใจว่าการทำงานจำเป็นต้องแฟลชซอฟต์แวร์ลงในไมโครคอนโทรลเลอร์สำหรับสิ่งนี้เราจำเป็นต้องมีอะแดปเตอร์ usb-uart, bootloader และยูทิลิตี้เฟิร์มแวร์

หากไม่มีปัญหากับยูทิลิตี้และอะแดปเตอร์ดังนั้นด้วย bootloader ทุกอย่างค่อนข้างแตกต่าง - เนื่องจากเฟิร์มแวร์ในคอนโทรลเลอร์บนบอร์ดดีบั๊กถูกบล็อกไม่ให้อ่านและฉันไม่สามารถเอามันออกมาได้ โชคดีที่เราอาศัยอยู่ในโลกสมัยใหม่ที่มีอินเทอร์เน็ต

พบวิธีแก้ปัญหาในหนึ่งในหลาย ๆ ฟอรัม - ไบนารี่ของเฟิร์มแวร์ จริงอยู่มีปัญหาหลังจากกระพริบคอนโทรลเลอร์ตรวจพบโปรแกรมเมอร์ แต่ไม่ต้องการทำงาน แต่สามารถแฟลชผ่านยูทิลิตี้ st-link ได้อย่างง่ายดายจึงตัดสินใจล้างไฟล์เฟิร์มแวร์โดยลบทุกสิ่งที่ไม่จำเป็นออก เหลือแต่ตัว bootloader เท่านั้น

อย่างที่คุณอาจเดาได้ว่าทุกอย่างเรียบร้อยดีและตอนนี้สามารถนำ bootloader ได้แล้ว

สำหรับการเติมเราใช้ตัวเชื่อมต่อ P1 พิน 3 และ 4 ซึ่งเชื่อมต่อเข้าด้วยกันโดยเปลี่ยนไมโครคอนโทรลเลอร์เป็นโหมดบูตผ่าน usart1 เราเชื่อมต่ออะแดปเตอร์ uart และจ่ายพลังงานให้กับบอร์ดโปรแกรมเมอร์ผ่านขั้วต่อ USB

ในยูทิลิตี้ ให้เลือกพอร์ตอนุกรมที่จะใช้และปฏิบัติตามคำแนะนำที่เหลือ ไม่มีประโยชน์ที่จะอธิบายกระบวนการนี้ด้วยรูปภาพ - ทุกอย่างค่อนข้างไม่สำคัญ

มีเพียงไม่กี่คนที่รู้ โดยเฉพาะผู้ที่เพิ่งเริ่มศึกษาไมโครคอนโทรลเลอร์ STM32 ว่าสามารถตั้งโปรแกรมได้โดยไม่ต้องใช้โปรแกรมเมอร์พิเศษ คุณเพียงแค่ต้องเลือกโหมดการบูตคอนโทรลเลอร์ผ่าน bootloader ในตัว เชื่อมต่อผ่าน UART และจดรหัสที่จำเป็น

ตอนนี้เกี่ยวกับทุกสิ่งในรายละเอียดเพิ่มเติม คอนโทรลเลอร์ STM32 ส่วนใหญ่มีบูทโหลดเดอร์ในตัว (ไม่สามารถลบได้) ในพื้นที่หน่วยความจำพิเศษที่ทำงานโดยใช้โปรโตคอล UART, SPI, I2C และ CAN แน่นอนว่าวิธีที่ง่ายที่สุดคือทำงานผ่าน UART เพราะ... เกือบทุกคนที่เกี่ยวข้องกับอุปกรณ์อิเล็กทรอนิกส์ต่างก็มีสิ่งนี้ ดังนั้นเราจะพิจารณาเรื่องนี้

การเลือกพื้นที่หน่วยความจำที่ใช้โหลดคอนโทรลเลอร์นั้นทำได้โดยการปรับระดับขา BOOTx ในระดับต่ำหรือสูง (อาจมีได้หลายขา) สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการเลือกบูตโหลดเดอร์บนคอนโทรลเลอร์เฉพาะ โปรดดูที่ AN2606 AN2606 ยังระบุด้วยว่าสามารถใช้อินเทอร์เฟซคอนโทรลเลอร์ใดในการเขียนโปรแกรมได้ นอกจากนี้ ในการเขียนโค้ดไปยังคอนโทรลเลอร์ คุณจะต้องมีโปรแกรมขนาดเล็กจากเว็บไซต์ ST ที่เรียกว่า STM32 FlashLoader Demonstrator

เพื่อให้เข้าใจถึงวิธีใช้ความรู้นี้ เรามาเขียนโปรแกรมบอร์ดที่มี STM32F103C8T6B อยู่บนบอร์ดกันดีกว่า

บอร์ดมีจัมเปอร์สำหรับตั้งค่าโหมดบูตคอนโทรลเลอร์ น่าเสียดายที่ไม่มีการลงนาม ดังนั้นเราจึงดูภาพด้านบนและติดตั้งในลักษณะเดียวกัน การตั้งค่าจัมเปอร์ BOOT0 เป็น "1" และ BOOT1 เป็น "0" จะเปิดใช้งานโปรแกรมโหลดบูตภายในตามที่ระบุไว้ใน AN2606 ตอนนี้คุณสามารถเชื่อมต่อสายไฟ รวมถึงสายสัญญาณ RX และ TX ได้แล้ว อย่าลืมว่าเส้น RX และ TX เชื่อมต่อกันตามขวาง:

รับ<--->เท็กซัส

เท็กซัส<--->รับ


จากนั้นให้เปิดโปรแกรม FlashLoader Demonstrator เลือกพอร์ต COM ที่ต้องการแล้วคลิกถัดไป หากทุกอย่างเชื่อมต่ออย่างถูกต้อง เราได้รับข้อความว่าคอนโทรลเลอร์ที่เชื่อมต่อมีหน่วยความจำ 64 KB และไม่มีการป้องกันการอ่าน


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

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