- Sarjaliikenne STM8S103F3P6: lla
- STM8S103F3P6: n sarjaviestinnänastat
- Piirikaavio STM8S-sarjaliikennettä varten
- STVD: n asettaminen sarjaviestintää varten
- STM8S: n ohjelmointi sarjaliikennettä varten
- LED-ohjain sarjamonitorista
- STM8S-sarjan kirjaston syvempi ilme
Uuden mikrokontrollerin ohjelmointi vie usein pidempään aikaa uusien rekisterinhallintamenetelmien takia eikä tiedä mikä bitti tekee mitä. Sama koskee virheenkorjausta myös sanomatta. Siksi ohjelmoijat käyttävät usein katkaisupisteitä koodissaan ja siirtyvät sen läpi virheenkorjaimella. Mutta virheenkorjaimen käyttäminen saattaa tarvita lisälaitteistoa (useimmiten kalliimpaa) ja myös lisäaikaa. Koska olemme Arduino-faneja, yksi asia, josta voimme kaikki sopia, on käyttää sarjatuotantolausekkeita virheenkorjaukseen ja koodin ymmärtäminen tekee elämästä paljon helpompaa. Mitä voimme kopioida saman STM8: eissa kosmisen C-kääntäjän ja SPL-kirjastojen kanssa? No, se on hyvin mahdollista, ja juuri sen aiomme tehdä tässä opetusohjelman kolmannessa opetusohjelmassa.Tarkistat myös STM8S: n (opetusohjelma 1) ja STM8S GPIO -ohjauksen (opetusohjelma 2) käytön aloittamisen, jos olet täällä täysin uusi. Olemme myös tutkineet mahdollisuutta ohjelmoida STM8S Arduinon kanssa nopeasti aloittaville. Kaikki mitä sanotaan, menemme opetusohjelmaan.
Sarjaliikenne STM8S103F3P6: lla
STM8S103F3P6 -taulukosta voimme nähdä, että 8-bittinen ohjaimemme tukee UART-viestintää monissa eri tiloissa. Ohjaimessa on myös kellon lähtöliitin synkronista UART-viestintää varten ja se voi myös tukea SmarCardia, IrDA: ta ja LIN: ää. Mutta emme tutkia mitään tässä opetusohjelmassa vain pysyäksemme poissa monimutkaisuudesta. Opimme tekemään yksinkertaisen UART-lukemisen ja kirjoittamisen.
Opetusohjelmassa on myös otsikkotiedosto nimeltä stm8s103 serial.h, jonka avulla voit suorittaa yksinkertaisia UART-komentoja, kuten Sarjan aloitus, Sarjaluku , Sarjatulostus jne. ja myös lukea hiiltä sarjakuvaruudusta. Tämän opetusohjelman lopussa voit hallita LEDiä sarjamoduulista ja saada palautetta LEDin tilasta. Yllä mainittu otsikkotiedosto riippuu SPL-kirjastoista, joten varmista, että olet noudattanut aloitusopasta.
STM8S103F3P6: n sarjaviestinnänastat
Aloitetaan laitteistopuolelta. Tarkastelemalla nopeasti alla annettuja STM8S103F3P6- mikrokontrollerin pinouteja voimme nähdä, että nastoja 1, 2 ja 3 käytetään UART-viestintään.
Kolmen joukossa nasta 1 on UART-kellotappi, jota käytetään vain synkronisen UART-tiedonsiirron aikana, joten emme tarvitse sitä täällä. Tappi 2 on UART-lähettimen tappi ja nasta 3 on UART-vastaanottimen tappi. Huomaa, että nämä nastat voivat myös kaksinkertaistaa analogisena tai tavallisena GPIO-nastana.
Piirikaavio STM8S-sarjaliikennettä varten
Kytkentäkaavio on tässä hyvin yksinkertainen, meidän on liitettävä ST-LINK 2 ohjelmointia varten ja USB-TTL-muunnin sarjatietojen lukemiseen. Huomaa, että STM8S-ohjaimemme toimii 3.3V-logiikkatasolla, joten varmista, että USB-TTL-muunnin tukee myös 3.3V-logiikkaa. Koko piirikaavio on esitetty alla.
Sinun on liitettävä ST-linkki yhteen USB-porttiin ja USB-TTL-muunnin toiseen kannettavan tietokoneen USB-porttiin, jotta voit sekä ohjelmoida että seurata tietoja samanaikaisesti. UART-yhteys on yksinkertainen, liitä vain STM8S-mikrokontrollerin maadoitus ja Rx / Tx-nasta USB-TTL-muuntimen Tx / Rx-nastoihin. Täällä olen syöttänyt ohjaimen virran ST-Linkin Vcc-nastalla ja jätän TTL-muuntimen vss-nastan auki, voit tehdä tämän myös toisinpäin. Markkinoilla on monenlaisia USB-TTL-muuntimia, varmista vain, että se voi toimia 3,3 V: n logiikkasignaaleilla ja etsiä yksinkertaisesti Tx-, Rx- ja GND-nastoja ja muodostaa yllä olevan yhteyden. Laitteistoni asetukset näkyvät alla.
Sarjayhteyden muodostamiseksi olemme toimittaneet otsikkotiedoston STM8S_Serial.h . Tämän otsikkotiedoston avulla voit suorittaa yksinkertaisia Arduinon kaltaisia toimintoja sarjaliikenteelle.
Löydät kaikki tarvittavat tiedostot tälle projektille STM8S103F3_SPL Github -sivultamme. Jos tarvitset vain tämän nimen otsikkotiedoston, voit ladata sen alla olevasta linkistä.
Lataa STM8S_Serial.h
STVD: n asettaminen sarjaviestintää varten
Sarjayhteyden kanssa työskentelemiseen käytetään monia aiemmin käyttämämme STM8S_Serial.h- otsikkotiedostotoimintoa. Mutta kirjastolla on muita riippuvuuksia, monet SPL UART- ja kelloon liittyvistä otsikoista ja C-tiedostoista. Joten tästä lähtien on parempi sisällyttää kaikki otsikko- ja C-tiedostot projektiimme, jotta vältetään kokoamisvirhe. STVD-työympäristöni näyttää tältä.
Varmista, että olet sisällyttänyt kaikki SPL-lähdetiedostot ja Sisällytä tiedosto, kuten teimme ensimmäisessä opetusohjelmassa. Varmista myös, että olet lisännyt otsikkotiedoston stm8s103_serial.h . Tälle otsikolle ei ole C-tiedostoa.
STM8S: n ohjelmointi sarjaliikennettä varten
Kun STVD-projektin asennus on valmis, voimme aloittaa koodin kirjoittamisen main.c- tiedostoon. Tämän opetusohjelman täydellinen koodi on tämän sivun alaosassa. Selitys on seuraava.
Ensimmäinen vaihe on sisällyttää vaaditut otsikkotiedostot, tässä olen lisännyt pääotsikkotiedoston (stm8s) ja juuri lataamamme stm8s_103_serial- otsikkotiedoston.
// Pakolliset otsikot #inslude "STM8S.h" #include "stm8s103_serial.h" //https://github.com/CircuitDigest/STM8S103F3_SPL/blob/master/stm8s103%20Libraries/stm8s103_Serial.h
Seuraavaksi käytämme suunnittelumakroja syöttö- ja lähtönastojen määrittämiseen. Tässä ohjataan vain sisäisen LEDin hallintaa, joka on kytketty portin B pin5: een, joten annamme sille nimen test_LED .
#define test_LED GPIOB, GPIO_PIN_5 // testi-LED on kytketty PB5: een
Päätoiminnon sisällä eteenpäin määritetään tappi lähdöksi. Jos et ole perehtynyt GPIO-perustoimintoihin, palaa STM8S GPIO -oppaaseen.
// Tappien määrittelyt // Ilmoitetaan PB5 työntövetona Lähtötappi GPIO_Init (test_LED, GPIO_MODE_OUT_PP_LOW_SLOW);
Sitten alustamme sarjaliikenneporttimme 9600 baudinopeudella. Niille, jotka ovat uusia, 9600 on nopeus, jolla databitit siirtyvät tiedonsiirron aikana. Jos asetat 9600 tähän, sinun on asetettava sama myös valvontaohjelmistossa. Tulostetaan sitten myös merkkijono "Enter command" ja siirrytään seuraavalle riville.
Sarjan alku (9600); // Alusta sarjaliikenne 9600 baudinopeudella Serial_print_string ("Enter-komento"); // tulosta merkkijono Serial_newline (); // siirry seuraavalle riville
Siirtymällä loputtomaan silmukkaan -toiminnolla käytämme Serial_available- toimintoa tarkistaaksesi, onko saapuvia sarjatietoja. Jos kyllä, luemme ja tallennamme sen muuttujaan nimeltä ch ja tulostamme samalla myös Serial_print . Sitten, jos vastaanotettu arvo on 0, sammutamme LEDin ja jos se on 1, sytytämme LEDin
if (Serial_available ()) {Serial_print_string ("Olet painanut:"); ch = Sarjan_lukumerkki (); Sarjan_printti_merkki (ch); Sarjanumero (); if (ch == '0') GPIO_WriteHigh (testi_LED); // LED ei pala, jos (ch == '1') GPIO_WriteLow (testi_LED); // LED palaa}
Tällöin tämän opetusohjelman ohjelmointi on valmis, lataa vain tämän sivun alaosassa annettu koodi ja sinun pitäisi pystyä ohjaamaan LEDiä sarjavalvonnasta.
LED-ohjain sarjamonitorista
Kun olet ladannut koodin, voit avata minkä tahansa sarjamoduulin 9600 baudinopeudella. Olen käyttänyt itse Arduino-sarjamonitoria sen käytön helpottamiseksi. Paina nollauspainiketta ja sinun pitäisi nähdä viesti "Anna komento". Sitten, jos syötät 1 ja painat Enter, sisäisen ledin pitäisi syttyä, samoin kuin 0, sen pitäisi sammua.
Koko työ löytyy tämän sivun alaosassa linkitetystä videosta. Jos sinulla on kysyttävää, jätä ne kommenttiosioon. Voit käyttää foorumeitamme myös muiden teknisten kysymysten lähettämiseen.
STM8S-sarjan kirjaston syvempi ilme
Niille uteliaille mielille, jotka haluavat tietää, mitä tapahtuu STM8S103F3_Serial- otsikkotiedoston sisällä, lue eteenpäin.
Tämä otsikkotiedosto toimii hyvin aloittelijatason ohjelmoinnissa, mutta jos käytät eri versiota STM8S-ohjaimesta tai etsit joitain lisäasetuksia, saatat haluta säätää tätä otsikkoa hieman tai työskennellä suoraan SPL-kirjastojen kanssa. Kirjoitin tämän otsikkotiedoston juuri kypsäksi UART1-otsikkotiedostosta, otsikkotiedostoni selitys on seuraava.
Hahmon lukeminen Serial Monitorista
Tämä toiminto auttaa lukemaan yhden merkin, joka on lähetetty mikrokontrollerille sarjamonitorista.
char Serial_read_char (void) {while (UART1_GetFlagStatus (UART1_FLAG_RXE) == NOLLAA); UART1_ClearFlag (UART1_FLAG_RXNE); paluu (UART1_ReceiveData8 ()); }
Odotamme, kunnes RXE-lippu on asetettu, vastaanottamisen loppuun saamiseksi ja tyhjennämme sitten lipun vastaanoton vahvistamiseksi. Lopuksi lähetämme vastaanotetut 8-bittiset tiedot tämän toiminnon tuloksena.
Merkin tulostaminen Serial Monitoriin
Tämä toiminto lähettää yhden merkin mikrokontrollerista sarjamonitoriin.
void Serial_print_char (char arvo) {UART1_SendData8 (arvo); while (UART1_GetFlagStatus (UART1_FLAG_TXE) == NOLLAA); // odota lähetystä}
Toiminto yksinkertaisesti kirjoittaa 8-bittisen arvon ja odottaa, kunnes lähetys on valmis tarkistamalla UART1_FLAG_TXE-asetukseksi SET
Sarjaliikenteen alustus
Tämä toiminto alustaa sarjaliikenteen vaaditulla baudinopeudella.
void Serial_begin (uint32_t baud_rate) {GPIO_Init (GPIOD, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST); GPIO_Init (GPIOD, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT); UART1_DeInit (); // Alusta UART-oheislaitteet UART1_Init (baud_rate, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE); // (BaudRate, Wordlegth, StopBits, Parity, SyncMode, Mode) UART1_Cmd (PÄÄLLÄ); }
Siirtonopeuden lisäksi on myös muita parametreja, jotka on asetettava sarjaliikenteeseen, kuten databittien lukumäärä, lopetusbittien lukumäärä, pariteetti jne. Yleisin (samanlainen kuin Arduino) on 8-bittinen data yhdellä pysäytysbitillä ilman pariteettia, joten se on oletusasetus. Voit muuttaa sitä tarvittaessa.
Kokonaislukun tulostaminen sarjamonitorille
Useimmiten, jos käytämme sarjavalvontaa virheenkorjaukseen tai seurantaan, saatamme haluta tulostaa muuttujan, joka on int-tyyppinen. Tämä toiminto tekee juuri sen
void Serial_print_int (int-numero) // Funtion tulostaa int-arvo sarjavalvontaan {char count = 0; merkkinumero = ""; while (numero! = 0) // jaa int-taulukko {numero = luku% 10; laskea ++; numero = numero / 10; } while (count! = 0) // tulosta char-taulukko oikeaan suuntaan {UART1_SendData8 (numero + 0x30); while (UART1_GetFlagStatus (UART1_FLAG_TXE) == NOLLAA); // odota lähetysmäärää--; }}
Se ottaa kokonaisluvun ja muuntaa sen merkkitaulukoksi ensimmäisessä while-silmukassa, sitten toisessa while-silmukassa lähetämme kaikki merkit, jotka ovat samanlaisia kuin tulostusmerkkitoimintomme.
Uuden rivin tulostaminen
Tämä on yksinkertainen toiminto uuden rivin tulostamiseen. Heksadesimaali on "0x0a", lähetämme sen vain 8-bittisen lähetyskomennon avulla.
void Serial_newline (void) {UART1_SendData8 (0x0a); while (UART1_GetFlagStatus (UART1_FLAG_TXE) == NOLLAA); // odota lähetystä}
Merkkijonon tulostaminen sarjamonitorille
Toinen hyödyllinen toiminto on merkkijonojen todellinen tulostaminen sarjavalvontaan.
void Serial_print_string (merkkijono) {. char i = 0; while (merkkijono! = 0x00) {UART1_SendData8 (merkkijono); while (UART1_GetFlagStatus (UART1_FLAG_TXE) == NOLLAA); i ++; }}
Jälleen tämä toiminto muuntaa merkkijonon char-taulukoksi ja lähettää jokaisen merkin. Kuten tiedämme, kaikki merkkijonot päättyvät. Joten meidän on vain jatkettava merkkien kulkua ja lähettämistä, kunnes saavutamme nollan 0x00.
Tarkistetaan, onko sarjatiedot luettavissa
Tämä toiminto tarkistaa, onko puskurissa sarjatiedot valmiita lukemaan.
bool Serial_available () {if (UART1_GetFlagStatus (UART1_FLAG_RXNE) == TOSI) palauttaa TOSI; muuten palauta FALSE; }
Se tarkistaa lipun UART1_FLAG_RXNE , jos se on tosi, se palauttaa true ja jos ei, se palauttaa false.