Indholdsfortegnelse:
- Trin 1: Pins and Pins….Hvorfor fungerer koden ikke?
- Trin 2: Lad os "definere" nogle pins …
- Trin 3: PinMode () … Sådan vil du bruge dine pins …
- Trin 4: AnalogWrite () Versus PwmWrite () … Analog output i 2 varianter
- Trin 5: STM32 seriel kommunikation
- Trin 6: Overførsel af en værdi til mikrokontroller
- Trin 7: Og hvis jeg gerne vil skrive tre cifre …. eller endnu mere ??
![Så du indlæser STM32duino Bootloader i din "blå pille" Så hvad nu ?: 7 trin Så du indlæser STM32duino Bootloader i din "blå pille" Så hvad nu ?: 7 trin](https://i.howwhatproduce.com/images/005/image-14677-j.webp)
Video: Så du indlæser STM32duino Bootloader i din "blå pille" Så hvad nu ?: 7 trin
![Video: Så du indlæser STM32duino Bootloader i din Video: Så du indlæser STM32duino Bootloader i din](https://i.ytimg.com/vi/NXltMnWZadM/hqdefault.jpg)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
![Så du indlæser STM32duino Bootloader i din Så du indlæser STM32duino Bootloader i din](https://i.howwhatproduce.com/images/005/image-14677-1-j.webp)
![Så du indlæser STM32duino Bootloader i din Så du indlæser STM32duino Bootloader i din](https://i.howwhatproduce.com/images/005/image-14677-2-j.webp)
Hvis du allerede har læst mine instrukser, der forklarer, hvordan indlæsning af STM32duino bootloader eller anden lignende dokumentation, prøver du eksempel på indlæsningskode, og … der kan ikke ske noget som helst.
Problemet er mange, hvis ikke alle eksempler på "Generisk" STM32 ikke fungerer ud af kassen. Det vil være nødvendigt med mindre ændringer for derefter at arbejde i dit STM32 "Blue Pill" -kort.
Jeg vælger 4 kodeeksempler for at forklare, hvad der skal ændres, og hvorfor. Koderne er: "BlinkWithoutDelay", "Fading", "Dimmer" og "AnalogInSerial".
Bemærk, at jeg IKKE har kodet noget. Jeg udsteder bare mindre ændringer i koder skabt af:
David A. Mellis og sent modificeret af Tom Igoe, Marti Bolivar og nogle sager af Scott Fitzgerald
Tom Igoe og sent modificeret af Bryan Newbold
Så jeg foretrækker at beholde forfatternavne, selv i koder, jeg ændrer, og beholde oprettelseskreditten.
Trin 1: Pins and Pins…. Hvorfor fungerer koden ikke?
![Pins and Pins…. Hvorfor fungerer koden ikke? Pins and Pins…. Hvorfor fungerer koden ikke?](https://i.howwhatproduce.com/images/005/image-14677-3-j.webp)
Lad os tage et kig i STM32 "Blue Pill" pin ud. Bemærk stifter er identificeret som PA1 eller PC2 …. sådan noget.
Hvis du f.eks. Kigger på kodeeksemplet "BlinkWithoutDelay", erklæres pin som "33" …. Hvorfor?
Jeg formoder, at det er fordi Mr. Marti Bolivar overførte denne kode til MAPLE board.
Jeg tror, det ikke var hans hensigt at lade kode være kompatibel med "Blue Pill" -tavler.
Maple og Maple mini board pins er numerisk deklareret, ligesom Arduino, selvom de bruger tal som 33, 24 og nogle som dette.
Jeg sagde, at koden ikke fungerede? Min fejl. Koden kompileres uden fejl og uploades korrekt til "Blue Pill", så efter min mening virker det faktisk, men ved hjælp af et GPIO -output forventer vi ikke. Måske ikke engang tilgængelig.
Så små ændringer er nødvendige i koden for at den fungerer som forventet.
Trin 2: Lad os "definere" nogle pins …
![Lad os Lad os](https://i.howwhatproduce.com/images/005/image-14677-4-j.webp)
Det er en god kode praksis at erklære ressourcer som lette at identificere eller betyde variabler eller konstantes. Det lader dig kode lettere at forstå og fejlfinding.
Jeg brugte declare Arduino pins som denne:
…
const int ledPin = 13;
…"
Hvis du kan lide mig, spørger du måske dig selv: "Hvordan kan jeg erklære pins med navne som PC13 ???"
Svaret er: Brug "#define" C -sætning.
Så ifølge pinout draw er PC13 den pin, vi har ombord LED i "BluePill". For at bruge det ville jeg erklære sådan her, lige efter biblioteksdefinitionen (#inkludere …) og før alt andet:
…
#define LedPin PC13
…"
Bemærk, at der ikke er NO ";" linjeafslutning, NOR "=" opgave.
Sammenlign begge koder. Det ene er det originale eksempel indlæst fra IDE. For det andet er den, jeg lavede nogle justeringer til at arbejde med "BluePill".
Jeg anbefaler kraftigt at erklære alle pins, du har til hensigt at bruge i kode. Selv de har til hensigt at bruge som ADC -input (mere om det senere).
Dette vil gøre dit liv let.
Trin 3: PinMode () … Sådan vil du bruge dine pins …
Inden vi fortsætter, lad os forstå PinMode () -funktionen.
Ligesom Arduino har STM32 -pins flere funktioner. Den enkleste måde at vælge det ene eller andet på er ved hjælp af pinMode () -sætning.
Arduino har kun 3 tilstande tilgængelige, INPUT, OUTPUT eller INPUT_PULLUP.
STM32 har på den anden side mange varianter af pinMode (). De er:
OUTPUT -Grundlæggende digital udgang: når stiften er HØJ, holdes spændingen ved +3,3v (Vcc), og når den er LAV, trækkes den ned til jorden
OUTPUT_OPEN_DRAIN -I åben afløbstilstand angiver tappen "lav" ved at acceptere strømmen til jorden og "høj" ved at give øget impedans
INPUT_ANALOG -Dette er en speciel tilstand, når stiften skal bruges til analoge (ikke digitale) læsninger. Gør det muligt at udføre ADC -konvertering på spændingen ved stiften
INPUT_PULLUP -Stiftens tilstand i denne tilstand rapporteres på samme måde som med INPUT, men stiftspændingen "trækkes forsigtigt op" mod +3.3v
INPUT_PULLDOWN -Stiftens tilstand i denne tilstand rapporteres på samme måde som med INPUT, men stiftspændingen "trækkes forsigtigt ned" mod 0v
INPUT_FLOATING -Synonym for INPUT
PWM -Dette er en speciel tilstand til, hvornår stiften skal bruges til PWM -output (et specielt tilfælde af digital output)
PWM_OPEN_DRAIN -Ligesom PWM, bortset fra at i stedet for vekslende cykler med LOW og HIGH, består spændingen på stiften af vekslende cyklusser med LOW og flydende (afbrudt)
(bemærkning: hentet fra
Jeg åbner bare denne parentes, for når du begynder at oprette din egen kode, skal du være omhyggelig med at bruge den korrekte pinMode () til dit behov.
Trin 4: AnalogWrite () Versus PwmWrite () … Analog output i 2 varianter
![AnalogWrite () Versus PwmWrite () … Analog output i 2 varianter AnalogWrite () Versus PwmWrite () … Analog output i 2 varianter](https://i.howwhatproduce.com/images/005/image-14677-5-j.webp)
![AnalogWrite () Versus PwmWrite () … Analog output i 2 varianter AnalogWrite () Versus PwmWrite () … Analog output i 2 varianter](https://i.howwhatproduce.com/images/005/image-14677-6-j.webp)
Inden GPIO -ben "Blue Pill" bruges, er det nødvendigt at deklarere dens adfærd, dvs. hvordan det fungerer. Det er præcis, hvad pinMode () -funktionen gør.
Så lad os nu fokusere på, hvordan korrekt indstilling af et analogt output. Det kan erklæres enten som OUTPUT -tilstand eller PWM -tilstand.
På samme måde kan analoge værdier tilskrives GPIO på 2 måder: analogWrite () eller pwmWrite (), MEN, analogWrite () VIL kun fungere, hvis pinMode () = OUTPUT. På den anden side fungerer pwmWrite () kun, hvis pinMode () = PWM.
Lad os tage PA0, for eksempel: det er en analog/pwm output kandidat.
analogWrite (): dette erklærer denne måde:
….
#define ledPin PA0
pinMode (ledPin, OUTPUT);
analogWrite (ledPin, <nummer>);
……"
hvor tallet skal være mellem 0 og 255, ligesom Arduino. Faktisk er det bagudkompatibelt med Arduino.
pwmWrite (): erklær på denne måde:
…
#define ledPin PA0
pinMode (ledPin, PWM);
pwmWrite (ledPin, <number.>);
…."
Hvor tallet skal være mellem 0 ~ 65535, en opløsning meget højere end Arduino.
I billeder er det muligt at sammenligne mellem 2 koder. Du kan også se den originale kode.
Trin 5: STM32 seriel kommunikation
![STM32 seriel kommunikation STM32 seriel kommunikation](https://i.howwhatproduce.com/images/005/image-14677-7-j.webp)
Lad os se, hvordan USART -grænseflader er arrangeret i STM32. Ja, grænseflader i flertal ….
"Blue Pill" har 3 USART'er (RX/ TX 1 ~ 3), og hvis du bruger en bootloader, der tillader dig at bruge USB, er den ikke forbundet til noget af dengang.
Afhængigt af om du bruger USB eller ej, skal du deklarere seriel port på en eller anden måde i din kode.
Sag 1: Brug af USB:
På denne måde downloades skitser direkte via USB. Ingen grund til at flytte BOOT0 -jumperen til 1 position og tilbage til 0.
I dette tilfælde betyder det, at når du erklærer "Serial" uden indeks, kommunikation via USB.
Så Serial1 betyder TX/ RX 1 (stifter PA9 og PA10); Serial2, betyder TX/ RX 2 (ben PA2 og PA3) og Serial 3 betyder TX/ RX 3 (ben PA10 og PA11).
Det er den måde, vi arbejder med. Jeg vil præsentere ændringer i eksempler for denne måde at kode på.
En anden ting: "Seriel USB" behøver ikke at initialiseres. Med andre ord, "… Serial.begin (15200);" er ikke nødvendig.
Det er muligt at kalde enhver seriel funktion (Serial.read (), Serial.write () osv.) Uden initialisering.
Hvis det af en eller anden grund er til stede i kode, ignorerer kompilatoren det.
Sag 2: Brug af TTL seria til USB -adapter:
På denne måde understøtter bootloader ikke native STM32 USB -kommunikation, så du har brug for en USB til seriel adapter tilsluttet TX/ RX 1 (pin PA9 og PA10) for at uploade sketches.
I dette tilfælde betyder enhver tid "Seriel" uden indeks kode, hvilket betyder TX/ RX1 (port, der bruges til at uploade koden). Så videre refererer Serial1 til TX/ RX 2 (ben PA2 og PA3) og Serial2 henviser til TX/ RX 3 (ben PA10 og PA11). Ingen Serial3 tilgængelig.
Trin 6: Overførsel af en værdi til mikrokontroller
![Overførsel af en værdi til mikrokontroller Overførsel af en værdi til mikrokontroller](https://i.howwhatproduce.com/images/005/image-14677-8-j.webp)
Dimmer -eksempel er en enkel måde at vise, hvordan en værdi overføres til mikrokontroller.
Det formodes at videregive en værdi fra 0 til 255 for at styre LED -lysstyrken.
Det fungerer IKKE som forventet i Blue Pill på grund af:
- For at bruge pwmWrite () -funktionen SKAL pinMode () erklæres som PWM -tilstand.
- Du får aldrig hele 3 cifre nummer. Funktionen Serial.read () fanger bare bufferindhold, som er en "BYTE". hvis du skriver "100" og trykker på "enter", vil kun sidste "0" blive fanget fra buffer. Og dens værdi vil være "48" (decimal ASCII -værdi for "0"). Hvis du vil udstede værdi "100", er det nødvendigt at skrive "d". Så det er korrekt at sige, at det vil konvertere en ASCII -symbol decimalværdi i LED -lysstyrke, ikke?…. Jamen, en slags …
- Problem, kortværdier direkte fra Serial.read () -funktionen er en trick -handling. Det er næsten sikkert at få uventede værdier. Bedre tilgang er lagringsbufferindhold i en midlertidig variabel, og END kortlægge det.
Som jeg forklarede før i punkt 2, vil kode, jeg introducerer ændringer, tillade indtastning af et ASCII -symbol, og dette vil styre LED -lysstyrken baseret på dens ASCII -decimalværdi … for eksempel er "mellemrum" værdi 32 (faktisk er det laveste udskrivbare tegn, du kan indtaste) og "}" er muligvis den højeste (værdi 126). Andre karakterer kan ikke udskrives, så terminalen forstår ikke, eller de er mulige en sammensætning af tegn (som "~" er en dødtast på mit tastatur og fungerer ikke korrekt). Dette betyder, at denne sammensatte karakter, når den indtastes i terminal, sender karakteren selv og noget andet. Normalt en, der ikke kan udskrives. Og er denne sidste en kode vil fange. Husk også på, at din Terminal i dette tilfælde IKKE skal sende hverken "vognretur" eller "liniefeed". Du skal være opmærksom på dette for at kode fungerer korrekt.
Hvis du faldt er det lidt forvirrende, det bliver værst ….
Trin 7: Og hvis jeg gerne vil skrive tre cifre …. eller endnu mere ??
![Og hvis jeg gerne vil skrive tre cifre…. eller endnu mere ?? Og hvis jeg gerne vil skrive tre cifre…. eller endnu mere ??](https://i.howwhatproduce.com/images/005/image-14677-9-j.webp)
Modtagelse af flere tegn fra en seriel kommunikation er ikke en simpel opgave.
Seriel buffer er FIFO byte bunke af tegn. Når som helst Serial.read () -funktionen ringer, fjernes den første forkaldelse, der sendes fra bunken, og gemmes andre steder. Normalt en char -variabel i kode. Bemærk, afhængig af hardware, normalt er der en timeout for, hvordan logbuffer kan opbevare oplysninger.
Hvis du har til hensigt at indtaste mere end ét ciffer via serienummer, skal du "komponere" en streng tegn for tegn, når de kommer ind i UART -buffer.
Det betyder, at cykling læser hver buffer char, gemmer i en temp variabel, indlæser den i første position i et string array, går til næste position og starter forfra, indtil … godt, afhænger af applikation. Der er 2 måder at afslutte cyklussen på:
- Brug af et "slutmærke" -tegn, f.eks. "Vognretur" eller "Line Feed". Så snart "end Mark" char er fundet, ender loop.
- Alternativt kan antallet af tegn i strengkæden begrænses, det samme gør antallet af interaktive cyklusser. Når den når grænsen, lad os sige, 4, erhverve rutinemæssige finish af sig selv.
Lad os tage et kig i et enkelt eksempel på, hvordan du gør dette:
- Indstil en "slut" -tegning, f.eks. '\ N' (dette betyder ASCII -tegn til linjeindføring).
- looping i mellemtiden er Serial.available () sand
- lagring af Serial.read () resulterer i en midlertidig char -variabel. Husk: så snart Serial.read () faktisk "læser" buffer, er den ren, og næste tegn indlæses i den.
- øge en strengvariabel med denne karakter
- Hvis sidste tegn er "ende", skal du afslutte sløjfen.
Normalt ligner rutinen for get seriel karakter array et billede.
Det var baseret på en omfattende tilpasning af David A. Mellis originale kode.
Fik fri til at bruge og teste det. Husk: værdier SKAL indtastes i 3 cifre format.
Dette er det for nu. Jeg vil ikke udvide mig med yderligere serielle kommunikationsdetaljer. Det er for komplekst at dække her, og det fortjener det eget Intructables.
Jeg håber, det hjælper dig med at bruge eksempler i Blue Pill og giver dig en vis oplysning om, hvordan korrekt kode til dette lille bord.
Vi ses rundt i andre instruerbare.
Anbefalede:
Opgrader en VU -meter baggrundsbelysning til blå LED ved hjælp af gamle CFL -pæredele .: 3 trin
![Opgrader en VU -meter baggrundsbelysning til blå LED ved hjælp af gamle CFL -pæredele .: 3 trin Opgrader en VU -meter baggrundsbelysning til blå LED ved hjælp af gamle CFL -pæredele .: 3 trin](https://i.howwhatproduce.com/images/001/image-1365-26-j.webp)
Opgrader en VU-meter baggrundsbelysning til blå led ved hjælp af gamle CFL-pæredele.: Mens jeg reparerede en gammel Sony TC630-båndoptager med spole, så jeg, at en af glaspærerne til VU-målerens baggrundslys var brudt. Ingen mængde ledende maling fungerede, da blyet var brudt af under glasoverfladen. Den eneste erstatning jeg kan
Hvad er en CPU, hvad gør den, og hvordan fejlfindes den: 5 trin
![Hvad er en CPU, hvad gør den, og hvordan fejlfindes den: 5 trin Hvad er en CPU, hvad gør den, og hvordan fejlfindes den: 5 trin](https://i.howwhatproduce.com/images/010/image-27469-j.webp)
Hvad er en CPU, hvad gør den og hvordan foretages fejlfinding: Hver dag vil du her udtrykke " CPU " eller "Processor" bliver smidt rundt, men ved du virkelig, hvad det betyder? Jeg vil gå over, hvad en CPU er, og hvad den gør, så vil jeg gå over almindelige CPU -problemer og hvordan jeg eventuelt kan løse dem
Hvad er tvetydig følelse_ "EMEMOHO": 5 trin
![Hvad er tvetydig følelse_ "EMEMOHO": 5 trin Hvad er tvetydig følelse_ "EMEMOHO": 5 trin](https://i.howwhatproduce.com/images/003/image-6195-11-j.webp)
Hvad er tvetydig følelse_ "EMEMOHO": Projektet er KNUA (Korea National University of Arts) et fusionskunstcenter, < team kører 2019: Hey, Strangers. Gør det sammen! ≫. Dette er resultatet af holdets "svage håb". I dette projekt definerede vi udtryk, der har to kontrasterende
Få din computer til at tale, hvad du skriver ved hjælp af Notesblok: 3 trin
![Få din computer til at tale, hvad du skriver ved hjælp af Notesblok: 3 trin Få din computer til at tale, hvad du skriver ved hjælp af Notesblok: 3 trin](https://i.howwhatproduce.com/images/005/image-14900-23-j.webp)
Få din computer til at tale, hvad du skriver ved hjælp af Notesblok: Her er en interessant kode, der er oprettet af os for at få din computer til at tale, hvad du skriver. Vi vil bruge notesblok til at oprette det. Lad os begynde
Hvad skal man gøre, når ITunes ikke genkender din iPod: 7 trin
![Hvad skal man gøre, når ITunes ikke genkender din iPod: 7 trin Hvad skal man gøre, når ITunes ikke genkender din iPod: 7 trin](https://i.howwhatproduce.com/images/004/image-10505-21-j.webp)
Hvad skal man gøre, når ITunes ikke genkender din iPod: Så du har modtaget din nye iPod, og du er så spændt på at bruge den. Du sætter USB -kablet i computeren og sætter den anden ende i din iPod. Nu støder du på et problem. Af en eller anden grund registrerer iTunes ikke din iPod. Du tror måske, at dette er en pr