Programarea stm32 discovery. Black Magic Blue Pill (facem un programator Black Magic Probe dintr-un modul bazat pe STM32F103)

În episoadele anterioare...
Deci, am convenit că vom lucra cu un microcontroler STM32F030F4P6, l-am configurat pentru el și chiar am lipit site-uri de testare (în timp ce citiți manualele). De asemenea, voi presupune că aveți deja un cablu UART pentru computer. Dacă nu, atunci vă sfătuiesc să-l lipiți, pentru că fără el nimic nu va funcționa - aici vă vor ajuta, la fel și max232 (pentru portul com), FT232RL (pentru usb) sau CP2102 (tot usb, dar mult mai ieftin) . Gata? Să mergem mai departe!

1. Quest: pe urmele bootloader-ului
Deoarece toate smt32 au un bootloader încorporat, acesta poate fi flash prin UART. Ce este nevoie pentru asta? Mergem la fișa tehnică, în secțiune 3.3 Moduri de pornire(p. 12) ei ne spun sincer:

Încărcătorul de pornire se află în memoria sistemului. Este folosit pentru a reprograma memoria flash folosind USART pe pinii PA14/PA15 sau PA9/PA10.

Ei bine, adică puteți programa folosind porturile PA14/PA15 sau PA9/PA10. Alegem a doua varianta. De ce? Cred că lipsa unui port PA15 este un motiv suficient de bun :)

Acum deschide RM. Acolo căutăm și secțiunea asociată cu bootloader-ul. Da, aici este: secțiunea 2.5 Configurare de pornire(pagina 52). Derulați puțin mai jos și găsiți prețuitul „Încărcător de pornire încorporat”. Ei scriu acolo că îl poți flash prin UART (știm deja asta) și... ne trimit la următorul manual: AN2606. Ei bine, din moment ce mă trimit, va trebui să plec. Această notă de aplicație poate fi descărcată la sfârșitul articolului, dar apropo, știți deja de unde să o obțineți.

Deci ce avem acolo, citiți cuprinsul și găsiți capitolul Bootloader pentru dispozitive STM32F03xx4/6. Nu avem timp să deschidem pagina 29 când ni se cere să revenim la început:

Bootloader-ul STM32F03xx4/6 este activat prin aplicarea pattern2 (descris în Tabelul 2: Bootloader-ul de activare).

Căuta tabelul 2, găsim linia în ea modelul 2și în sfârșit obținem informații pentru firmware:

Boot0(pin) = 1 și nBoot1(bit) = 1

Adică, pentru a flash-ul firmware-ului, pinul Boot0 trebuie setat la un nivel înalt, iar nBoot1 este un bit care ar trebui setat la 1. Cum să setați nBoot1 la unul? Pentru început, ar fi bine să verificați care este valoarea sa implicită. Deschidem din nou RM, dupa o scurta cautare gasim tabelul 12(pagina 77):

Am fost norocoși, în mod implicit nBoot1 este setat la unul, așa că pentru firmware este suficient să alimenteze Boot0 cu energie. Să începem firmware-ul!

2. Ce să coase și ce să coase
Firmware-ul este instalat folosind Demo Flash Loader. Anterior, acest program funcționa foarte defectuos cu Cortex M0, așa că vă sfătuiesc să descărcați cea mai recentă versiune (la sfârșitul articolului sau pe site-ul oficial st, com). Software-ul este gratuit, instalarea este standard. Nu vă grăbiți să lansați, deschideți mai întâi proiectul în IAR principal, creat în lecția 0x01 și asigurați-vă că compilarea are succes și în folder .\Debug\Exe(la rădăcina proiectului) fișierul apare după aceasta main.bin. A funcționat?

Acum conectăm adaptorul UART la computer, apoi conectăm firul RX la PA9 (TX), firul TX la PA10 (RX) și masa la VSS. Dacă ați lipit placa din articolul anterior, va arăta cam așa (în stânga este un adaptor UART pentru CP2102):

Faceți clic pe comutatoare BOOT0Şi ON/OFF. Dacă ați lipit prima versiune a plăcii din articolul anterior, atunci conectați manual BOOT0 la VDDA și furnizați energie plăcii (de exemplu, +5V de la USB). Acum totul este gata pentru firmware, haideți să lansăm Demo Flash Loader:

Nu este nimic remarcabil pe primul ecran: trebuie să selectați portul COM care reprezintă cablul UART, restul poate fi lăsat implicit (doar în unele cazuri trebuie să reduceți Baud Rate).

Faceți clic pe tablă Resetați(scurt-circuit NRST la sol) si dupa 1-2 secunde apasati in program Următorul. Nu a decolat? Nu vă faceți griji, următorul capitol descrie principalele cauze ale erorilor. Dacă totul este făcut corect, atunci aveți undă verde:

Faceți clic din nou Următorul, tipul de microcontroler va fi determinat automat:

După ce am admirat câte pagini are MK-ul nostru și ce dimensiune au, din nou ( cam! din nou!) apăsați Următorul. Suntem aproape la linia de sosire - în fața noastră este fereastra de descărcare a firmware-ului:

Clic Descărcați pe dispozitivși descărcați fișierul main.bin. Tot în această fereastră puteți îmbina firmware-ul (dacă nu este protejat). De asemenea, este util să bifați caseta „Verificați după descărcare” - verificând dacă firmware-ul a mers fără erori. Există și alte opțiuni, le vom lua în considerare la nevoie. Între timp, faceți clic pe același Next și bucurați-vă de firmware:

3. Depanare
Ce trebuie să faceți dacă programul nu vede placa dvs. în gol? Oricât de banal ar părea, verificați conexiunile: dacă picioarele microcontrolerului nu sunt agățate sau scurtate (o metodă lungă, dar de încredere este să suneți picioarele și pistele de sub ele cu un multimetru), că Boot-ul este scurtcircuitat la putere, că puterea în sine ajunge la microcontroler, că nu amestecați firele TX și RX.

Dacă toate acestea sunt în ordine, atunci iată o listă de erori comune:

  • Pământ comun. Greșeala mea preferată. De exemplu, ați lipit un cablu UART, din el provin două fire: TX și RX. Le conectezi la circuitul tău, care este alimentat de o baterie și... nimic nu funcționează. De ce? Da, pentru că ai fost prea lene să scoți firul GND din cablul UART. Soluție: conectați GND-ul șirului la GND-ul plăcii dvs.
  • O altă cauză a erorilor este alimentarea instabilă a microcircuitului. În acest caz, eroarea poate să nu apară imediat, ci direct în stadiul de firmware. Soluția este simplă: dacă utilizați stabilizatori ieftini precum LP2950, ​​acordați o atenție deosebită condensatorilor (cel puțin ar trebui să existe).
  • Eroare „......portul poate fi folosit de o altă aplicație”- fie portul com este ocupat de alt program (închideți acest program), fie este doar o eroare - reporniți Demo Flash Loader.
  • Apăsați Next prea repede după resetare. Soluție: după apăsarea butonului Reset, trebuie să așteptați 2-3 secunde și abia apoi să apăsați Next.
  • Baud Rate este prea mare. Soluție: coboară.
  • Șir UART glitchy. Aceasta este problema, de exemplu, cu adaptorul USB pentru CP2102. Da, este ieftin, dar necesită șoferi, care uneori din anumite motive refuză să lucreze. Soluție: scurtcircuitați RX/TX pe adaptor și verificați cu orice program de terminal. Dacă aveți un port COM hardware, atunci vă sfătuiesc să lipiți circuitul la max232 - nu are nevoie de lemn de foc, așa că funcționează întotdeauna (dacă nu uitați de terenul comun).
  • Dacă adaptorul USB nu mai funcționează, încercați să-l conectați la un alt port USB (unul real, nu un alt port hub!). În general, hub-urile USB funcționează destul de prost cu adaptoarele UART, așa că încercați să le conectați (adaptoarele) direct.
  • Nu există suficientă putere - dacă placa funcționează pe baterie. Soluție (nu o să credeți!): înlocuiți bateria.
  • Este selectat portul com greșit - se întâmplă și asta :)

Lista este deschisă, vă rugăm să adăugați opțiunile dvs. în comentarii. Și în sfârșit...

4. Pom de Crăciun, aprinde Diodik, clipește!
Acum că ați reușit, puteți privi înainte și încercați să încărcați programul demonstrativ:

#include "stm32f0xx.h" void delay (int a); void main(void) ( /* GPIOC Periph clock activat */ RCC->AHBENR |= RCC_AHBENR_GPIOAEN; GPIOA->MODER |= (GPIO_MODER_MODER3_0 | GPIO_MODER_MODER4_0) ; /* Configurați PC3 și PC4 în modul de ieșire */ OGPPERIOA &-> = ~(GPIO_OTYPER_OT_3 | GPIO_OTYPER_OT_4) ; // push pull mode while (1) ( GPIOA->BSRR |= GPIO_ODR_3; GPIOA->BRR |= GPIO_ODR_4; întârziere(500000); GPIOA->GPODR |=->GPODR |=->GPIO | BSRR |= GPIO_ODR_4; delay(500000); void delay (int a)( int i,j; for (i=0; i< a ; i++){ j++; } return; }

Compilați, încărcați, dezactivați după încărcare Boot0. Acum conectați două LED-uri: la PA3 și la PA4. Clic Resetați. Luminile ar trebui să clipească pe rând. Aşa ceva.

O alternativă de casă și accesibilă la programatorul vândut de la STMicroelectronics. Este un extras și o compilație din mai multe articole și diagrame găsite pe Internet. Implementare în cel mai mic factor de formă posibil.

Orice dezvoltator de software încorporat trebuie să aibă un programator pentru dispozitivele pe care le folosește. În cazul meu, microcontrolere de la STMicroelectronics, precum și Milandr (procesoare rusești bazate pe nucleul ARM).

Achiziționarea acestui dispozitiv este foarte costisitoare, mai ales în comparație cu costul componentelor - circuite imprimate și componente radio.

S-a decis să facem noi înșine programatorul. Baza au fost circuitele plăcilor de depanare pentru diverse MK-uri, rezultatul a fost un modul de depanare complet funcțional nu numai pentru stm32, ci și pentru stm8 și chiar cipuri Milanda (testat până acum doar pe K1986BE92, dar cred că și altele vor fi cusute și depanat).

Functii principale:

  • programare și depanare STM32;
  • programare și depanare STM8;
  • programarea și depanarea ARM Milander.

Interfete de programare:

  • SWD - până la 4 MHz;
  • JTAG;
  • ÎNOT.

Programatorul în sine poate fi văzut în fotografia de mai sus. Firele întinse peste bord sunt doar modificări ulterioare asociate cu lipsa LED-ului necesar (stânga) și necesitatea de a programa plăcile fără a le furniza energie (dreapta).

Nucleul este controlerul stm32f103, care este utilizat în toate plăcile de dezvoltare. La intrările și ieșirile sale ale dispozitivului, mă refer la un conector pentru conectarea unui microcontroler programabil, diode sunt instalate pentru a proteja împotriva statică, diodele alese sunt suficient de mici, dar ușor accesibile și pot fi lipite fără mare dificultate, chiar și de către persoanele cu cu tulburări de vedere, eu însămi nu mă plâng cu cei ai tăi în ambii ochi.

MicroUSB este folosit ca conector pentru conectarea la un computer alegerea a fost facuta doar datorita modernitatii sale fata de fratele sau mini. Eu însumi am un mini pe placă, când am asamblat micro-ul inclus nu era disponibil.

După asamblare și verificare pentru un scurtcircuit, conectăm dispozitivul la computer și vedem că nu se întâmplă nimic, cu excepția faptului că programatorul este definit ca un dispozitiv necunoscut, motivul fiind lipsa firmware-ului.

Pentru a asigura funcționarea, este necesar să flashăm software-ul în microcontroler pentru aceasta avem nevoie de un adaptor usb-uart, un bootloader și un utilitar de firmware.

Dacă nu există probleme cu utilitarul și adaptorul, atunci cu bootloader-ul totul este oarecum diferit - deoarece firmware-ul în sine din controlerele de pe plăcile de depanare este blocat să fie citit și nu l-am putut scoate. Din fericire, trăim într-o lume modernă în care există internetul.

Soluția a fost găsită pe unul dintre numeroasele forumuri - un binar de firmware. Adevărat, a existat o problemă, după ce a depășit controlerul, programatorul a fost detectat, dar nu a vrut să funcționeze, dar a fost ușor de transmis prin utilitarul st-link, s-a decis să curățați fișierul firmware, eliminând tot ce nu este necesar, lăsând doar bootloader-ul în sine.

După cum ați putea ghici, totul a funcționat și acum bootloader-ul poate fi luat.

Pentru umplere, folosim conectorul P1, dintre care pinii 3 și 4 sunt conectați împreună, trecând microcontrolerul în modul de pornire prin usart1. Conectăm adaptoarele uart și furnizăm energie la placa de programare, printr-un conector USB.

În utilitar, selectați portul serial de utilizat și urmați restul instrucțiunilor. Nu are rost să descrii acest proces în imagini - totul este destul de banal.

În epoca Arduino UNO și Atmega328, m-am descurcat complet fără un programator, flashând microcontrolerul mai întâi cu bootloader-ul Arduino printr-un alt Arduino (Arduino ca ISP), apoi printr-un port serial obișnuit și numai după apariția suportului Arduino pentru module bazate pe Nordic Semiconductor nrf51822 și nrf52832 pentru mine Pentru prima dată, prezența unui programator swd a devenit relevantă, deoarece nu există altă modalitate de a încărca firmware pe un modul chinezesc.

Standardul de facto în acest domeniu sunt programatorii Jlink de la compania germană Segger Microcontroller System, cunoscuți nu numai pentru caracteristicile excelente de performanță, ci și pentru prețul exorbitant (aproximativ 500-600 USD). Trebuie să aducem un omagiu companiei Segger pentru uz necomercial, este lansată o versiune EDU care este complet identică cu Jlink Base, dar chiar și costă în jur de 3.000 de ruble în Rusia. Aliexpress-ul tău preferat este plin de clone chinezești, dar sunt și relativ scumpe, ca să nu mai vorbim de alte lucruri.

Există și ST-LINK/V2 de la ST Microelectronics, cu toate acestea, compatibilitatea lor cu microcontrolere care nu sunt produse de STMicro în sine este îndoielnică.

Drept urmare, ochii mi-au căzut inevitabil pe programatorul JTAG/SWD Black Magic Probe (BMP), care a strâns peste 47.000 USD pe Kickstarter față de un obiectiv declarat de 10.000 USD.

Sondă de magie neagră (BMP)

  • Programator open-source; funcționează printr-o interfață JTAG sau SWD și oferă o depanare completă
  • Are un server GDB încorporat (nu sunt necesare programe „middleware” precum OpenOCD)
  • Suportă microcontrolere cu nuclee ARM Cortex-M și Cortex-A
  • Funcționează pe Windows, Linux și MacOS (ultimele două funcționează fără drivere)

Avantajele și dezavantajele BMP în comparație cu clonele chinezești Segger Jlink și ST-LINK/V2:

(+)
  • conștiință curată (fără clone contrafăcute)
  • ieftin (mai multe despre asta mai târziu)
  • are atât interfețe JTAG, cât și UART (relevante în special pentru depanarea în stil arduino prin serial.print()
  • capacitatea de actualizare garantată în cazul unei noi lansări de firmware
(-)
  • set limitat de „ținte” acceptate (comparativ cu Jlink)
În esență, BMP este un software de programare care poate fi rulat pe hardware diferit. Multe companii produc programatori BMP „oficiali”, dar costă aproximativ 60 de dolari, care, deși mai ieftin decât Jlink original, este încă scump pentru bricolaj.

Vreau!

Este posibil să aveți o sondă Black Magic fără să plătiți 60 USD? Da.

Pentru a crea Black Magic Probe, vom avea nevoie de un modul bazat pe STM32F103 MK, care printre entuziaștii străini a fost numit pilula albastră pentru culoarea caracteristică a măștii de pe placa de circuit imprimat. Nu se știe de unde provine această tradiție, dar adevărul rămâne: marea majoritate a acestor module au o placă de circuit imprimat albastru și sunt echipate cu pini cu plastic galben (acesta este modulul „zhovt-blakit”). Există, de asemenea, pastile roșii și chiar pastile negre, dar ele nu sunt în esență diferite de pastilele albastre.

Magie neagră în 4 pași

Pasul 1 - Crearea fișierelor bootloader și a Blackmagic în sine

cd git clone https://github.com:blacksphere/blackmagic.git cd blackmagic make
(dacă apar mesaje de eroare, deschideți fișierul make cu orice editor (eu folosesc nano):

Nano face
găsim a 13-a linie, arată așa: „ CFLAGS += -Wall -Wextra -Werror -Wno-char-subscripts\"și șterge" -Eroare", acea linie ar trebui să devină: " CFLAGS += -Wall -Wextra -Wno-char-subscripts\", ieșiți cu salvarea (ctrl-x, y) și rulați din nou
face

Acum mergeți la directorul src:

Cd src
si introduceti comanda:

Curățați && faceți PROBE_HOST=stlink
ca urmare, vom avea 2 fișiere în directorul src: blackmagic_dfu.bin și blackmagic.bin

Vă rugăm să rețineți că acolo sunt create o grămadă de alte fișiere, ne interesează doar acestea două.

Pasul 2 - Scriptul de pornire

cd git clone https://github.com/jsnyder/stm32loader.git
copiați fișierele create anterior în directorul cu scriptul proaspăt descărcat:

Cp ~/blackmagic/src/blackmagic_dfu.bin ~/stm32loader
cp ~/blackmagic/src/blackmagic.bin ~/stm32loader

Pasul 3 - Firmware-ul bootloaderului

Pe partea stângă a modulului STM32 există două jumperi galbene etichetate boot0 și boot1. Când ambele jumperi sunt setate la poziția implicită (0), MK-ul este încărcat din bootloader. Nu avem un bootloader momentan, așa că să setăm jumperul de sus (Boot0) în poziția 1 (mutați-l la dreapta), ceea ce ne va oferi posibilitatea de a încărca fișierul bootloader creat la pasul 1.

Conectăm adaptorul STM32 și USB-TTL conform următoarei diagrame:

Conectăm adaptorul USB-TTL (împreună cu modulul STM32) la computer, lansăm
dmesgși uitați-vă la ce port este conectat adaptorul. În cazul meu a fost /dev//ttyUSB0

Când vă aflați în directorul stm32loader, executați comanda:

Python ./stm32loader -p /dev/ttyUSB0 -e -w -v blackmagic_dfu.bin
Desigur, în loc de ttyUSB0 trebuie să puneți portul pe care este conectat adaptorul USB-TTL.

Poate fi necesar să apăsați butonul de resetare de pe tableta albastră, totul a funcționat pentru mine fără resetare.

Dacă totul este în regulă, deconectați adaptorul USB-TTL, nu vom mai avea nevoie de el, mutați jumperul înapoi în poziția 0 și pregătiți-vă pentru ritualul magiei negre.

Pasul 4 - Black Magic (Conversia STM32 în BMP)

Ne conectăm modulul stm32 printr-un cablu micro-usb obișnuit. Instalați dfuutil:

Sudo apt install dfuutil
si alerga:

Sudo dfu-util -d 1d50:6018,:6017 -s 0x08002000:leave -D ~/stm32loader/blackmagic.bin
Gata!

Pentru a verifica, deconectați/conectați cablul USB și porniți dmesg, 2 dispozitive ar trebui să fie vizibile: Blackmagic GDB și Blackmagic COM.

Cum se utilizează (exemplu de firmware pentru un fișier deja compilat myfile.hex):

Pentru Windows 7 și mai jos, sistemul vă va cere să instalați drivere, le puteți lua
În Windows 10 totul funcționează așa cum este.

În Device Manager, uitați-vă la numărul portului la care este conectat BMP, cel mai probabil va fi ceva de genul COM11 și COM12:


Ne conectăm la microcontroler conform următoarei diagrame:

Dacă aveți nevoie de un port serial, conectați suplimentar:

În continuare, din linia de comandă (se presupune că calea către depanatorul gdb este specificată în cale):
arm-none-eabi-gdb.exe -ex „țintă extins-la distanță \\.\COM11” (prefixul \\.\ este necesar dacă numărul portului este >=10)

Luni swdp_scan
att 1
mon erase_mass
CD<путь к hex файлу>
încărcați fișierul meu.hex
renunta
De fapt, toate aceste comenzi pot fi „cusute” într-una singură, obțineți ceva de genul
arm-none-eabi-gdb.exe -ex „target extended-remote \\.\COM11” –ex „monitor swdp_scan” -ex „att 1” -ex „mon erase_mass” –ex „cd”<путь к hex файлу>” –ex „încărcare fișierul meu.hex” –ex „încărcare”

De continuat…

Data viitoare vom învăța cum să folosim BMP pentru a programa în mediul Arduino un modul Bluetooth bazat pe nrf51822 cu un nucleu de procesor Cortex M0 încorporat.

Publicat 08.09.2016

Microcontrolere STM32 devin din ce în ce mai populare datorită puterii lor, perifericelor destul de diverse și flexibilității. Vom începe să studiem folosind o placă de testare bugetară, al cărei cost nu depășește 2 USD (de la chinezi). Vom avea nevoie și noi ST-Link programator, al cărui cost este de aproximativ 2,5 USD (de la chinezi). Astfel de sume de cheltuieli sunt accesibile atât pentru elevi, cât și pentru școlari, așa că îmi propun să începem cu această variantă bugetară.


Acest microcontroler nu este cel mai puternic dintre STM32, dar nici cel mai slab. Există diverse plăci cu STM32, inclusiv Descoperire care a costat aproximativ 20 de dolari. Pe astfel de plăci, aproape totul este la fel ca pe placa noastră, plus un programator. În cazul nostru, vom folosi programatorul separat.

Microcontroler STM32F103C8. Caracteristici

  • Miez ARM Cortex-M3 pe 32 de biți
  • Frecventa maxima 72MHz
  • Memorie flash de 64 KB pentru programe
  • memorie SRAM de 20 Kb
  • Alimentare 2,0 … 3,3 V
  • 2 x ADC pe 12 biți (0 ... 3,6 V)
  • Controler DMA
  • 37 intrări/ieșiri tolerante 5V
  • 4 temporizatoare pe 16 biți
  • 2 cronometre watchdog
  • I2C – 2 autobuze
  • USART – 3 autobuze
  • SPI – 2 autobuze
  • Interfață USB 2.0 de viteză maximă
  • RTC – ceas încorporat

Disponibil pe placa STM32F103C8

  • Porturi de ieșire A0-A12, B0-B1, B3-B15, C13-C15
  • Micro-USB prin care poți alimenta placa. Placa are un stabilizator de tensiune de 3,3 V. 3.3V sau 5V pot fi furnizate pinii corespunzători de pe placă.
  • Buton Resetați
  • Doi săritori BOOT0Şi BOOT1. Îl vom folosi în timpul flashing via UART.
  • Două cuarț 8 MHz și 32768 Hz. Microcontrolerul are un multiplicator de frecventa, asa ca cu un quartz de 8 MHz putem ajunge la frecventa maxima a controlerului de 72 MHz.
  • Două LED-uri. PWR– semnalează că este furnizată energie. PC13– conectat la ieșire C13.
  • Conector pentru programator ST-Link.

Deci, să începem prin a încerca să flashăm microcontrolerul. Acest lucru se poate face prin USART sau folosind un programator ST-Link.

Puteți descărca fișierul de testare pentru firmware. Programul clipește LED-ul de pe placă.

Firmware-ul STM32 folosind adaptorul USB-Uart pentru Windows

În memoria sistemului STM32 Există Bootloader. Bootloader-ul este înregistrat în etapa de producție și orice microcontroler STM32 poate fi programat prin interfață USART folosind un adaptor USART-USB. Astfel de adaptoare sunt cel mai adesea realizate pe baza microcircuitelor populare FT232RL. Mai întâi de toate, conectați adaptorul la computer și instalați driverele (dacă este necesar). Puteți descărca drivere de pe site-ul producătorului FT232RL– ftdichip.com. Trebuie să descărcați drivere VCP(port com virtual). După instalarea driverelor, pe computer ar trebui să apară un port serial virtual.


Conectare RXŞi TX ieșiri către pinii corespunzători USART1 microcontroler. RX conectați adaptorul la TX microcontroler (A9). TX conectați adaptorul la RX microcontroler (A10). Deoarece USART-USB are ieșiri de putere de 3,3 V, vom furniza energie plăcii de la acesta.

Pentru a pune microcontrolerul în modul de programare, trebuie să setați pinii BOOT0Şi BOOT1 la starea dorită și reporniți-l cu butonul Resetați sau opriți și porniți microcontrolerul. Pentru asta avem săritori. Combinații diferite forțează microcontrolerul în moduri diferite. Suntem interesați doar de un singur mod. Pentru a face acest lucru, microcontrolerul are BOOT0 ar trebui să existe unul logic și rezultatul BOOT1– zero logic. Pe placă, aceasta este următoarea poziție a jumperului:

După apăsarea butonului Resetați sau deconectând și conectând alimentarea, microcontrolerul trebuie să intre în modul de programare.

Software-ul firmware

Dacă folosim un adaptor USB-UART, numele portului va fi cam așa /dev/ttyUSB0

Obțineți informații despre cip

Rezultat:

Citim de pe cip în fișierul dump.bin

sudo stm32flash -r dump.bin /dev/ttyUSB0

Scrieți pe cip

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

Rezultat:

Stm32flash 0.4 http://stm32flash.googlecode.com/ Folosind Parser: Raw BINARY Interfață serial_posix: 57600 8E1 Versiune: 0x22 Opțiunea 1: 0x00 Opțiunea 2: 0x00 ID dispozitiv: 0x0410 (Medium-dens: 120Kid) bootloader) - Flash: 128KiB (dimensiunea sectorului: 4x1024) - Opțiune RAM: 16b - System RAM: 2KiB Scriere în memorie Stergerea memoriei Adresă scrisă și verificată 0x08012900 (100,00%) Gata. Începe execuția la adresa 0x08000000... gata.

Firmware-ul STM32 utilizând programatorul ST-Link pentru Windows

Când utilizați un programator ST-Link concluzii BOOT0Şi BOOT1 nu sunt utilizate și trebuie să fie în poziția standard pentru funcționarea normală a controlerului.

(Carte în rusă)

marcaj STM32

Familia de dispozitiveTip de produsSubfamilie de dispozitiveNumăr de pinDimensiunea memoriei flashPachetInterval de temperatură
STM32 =
Microcontroler pe 32 de biți bazat pe ARM
F = de uz general
L = Putere ultra-scăzută
TS = Ecran tactil
W = sistem wireless pe cip
60 = rezistiv multitouch
103 = linia de performanță
F = 20 pini
G = 28 de pini
K = 32 pini
T = 36 pini
H = 40 pini
C = 48/49 pini
R = 64 pini
O = 90 de pini
V = 100 de pini
Z = 144 pini
I = 176 pini
B = 208 pini
N = 216 pini
4 = 16 Kbytes de memorie Flash
6 = 32 Kbytes de memorie Flash
8 = 64 Kbytes de memorie Flash
B = 128 Kbytes de memorie Flash
Z = 192 Kbytes de memorie Flash
C = 256 Kbytes de memorie Flash
D = 384 Kbytes de memorie Flash
E = 512 Kbytes de memorie Flash
F = 768 Kbytes de memorie Flash
G = 1024 Kbytes de memorie Flash
I = 2048 Kbytes de memorie Flash
H = UFBGA
N=TFBGA
P = TSSOP
T = LQFP
U = V/UFQFPN
Y = WLCSP
6 = Interval de temperatură industrial, –40…+85 °C.
7 = Interval de temperatură industrial, -40…+ 105 °C.
STM32F103 C8 T6

Cum se elimină protecția la scriere/citire?

Dacă ați primit o placă cu STM32F103, dar programatorul nu o vede, asta înseamnă că chinezii au protejat memoria Flash a microcontrolerului. Întrebarea „de ce?” hai sa il ignoram. Pentru a elimina blocarea, vom conecta un adaptor UART și vom programa prin el. Setăm jumperii pentru programare și pornim:

Voi face acest lucru de pe Ubuntu folosind utilitarul stm32flash.

1. Verificați dacă microcontrolerul este vizibil:

Sudo stm32flash /dev/ttyUSB0

Ar trebui să obțineți ceva de genul acesta:

Stm32flash 0.4 http://stm32flash.googlecode.com/ Interfață serial_posix: 57600 8E1 Versiune: 0x22 Opțiunea 1: 0x00 Opțiunea 2: 0x00 ID dispozitiv: 0x0410 (densitate medie) - Rezervat de către booter 20KiB: (RAM: 20KiB) 128 KiB (dimensiunea sectorului: 4x1024) - RAM opțiune: 16b - RAM de sistem: 2 KiB

2. Eliminați protecția la citire și apoi protecția la scriere:

Sudo stm32flash -k /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Interfață serial_posix: 57600 8E1 Versiune: 0x22 Opțiunea 1: 0x00 Opțiunea 2: 0x00 ID dispozitiv: 0x000000000000 512b rezervat de bootloader) - Flash: 128 KiB (dimensiunea sectorului: 4x1024) - Opțiune RAM: 16b - RAM de sistem: 2 KiB Flash de dezactivare a citirii Terminat.

sudo stm32flash -u /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Interfață serial_posix: 57600 8E1 Versiune: 0x22 Opțiunea 1: 0x00 Opțiunea 2: 0x00 ID dispozitiv: 0x000000000000 512b rezervat de bootloader) - Flash: 128KiB (dimensiunea sectorului: 4x1024) - Opțiune RAM: 16b - RAM de sistem: 2KiB Flash de deprotecție la scriere Terminat.