nico_2010 Postat Mai 29, 2017 Partajează Postat Mai 29, 2017 De ceva timp studiez modalitati de programare a microcontrollerului STM32F103C8T6, cu atat mai mult cu cat am cumparat 2 astfel de module cu scopul de a le folosi pentru diverse sketch-uri din STM Arduino. Dupa mici tatonari cu STM32 Arduino (care au dat rezultat multumitoare), am ales calea programarii in C, mult mai convenabila (dar si mult mai gretoasa). Ca mediu de programare am ales Attolic True Studio Lite (creat sub Eclipse), care are avantajul de a nu avea limita de timp pentru evaluare si nici limita de memorie. Singurul inconvenient este ca trebuie sa astepti 5 secunde pentru a inchide o fereastra de prezentare (nederanjant in opinia mea). Ca librarii ce pot fi folosite ar trebui sa mentionez SPL (Standard Peripheral Library) sau HAL (Hardware Abstraction Layer), iar studierea lor da migrene insuportabile pentru ca nu gasesti explicit ce si cum pot fi folosite (dar asta este o alta mancare de peste). Am ales sa folosesc librariile HAL, deoarece folosesc CubeMX (provider ST MIcroelectronics) si aplicatia asta genereaza cam tot ce ai nevoie pentru initierea proiectului. Pana cum (adica de vreo 2 luni) m-am "jucat" cu clasicul "blinky LED", in diverse variante de actionare (cu intarzieri), cu timer (overflow si intreruperi generate de "capture compare") sau cu transmisie seriala de text si citiri de ADC. Atazi am realizat primul termometru cu senzorul TCN75 - 5.0 (echivalentul lui LM75) care are comunicatie pe I2C. Dupa doua zile de mancat nervi (din cauza lipsei de informatii cu privire la modul de functionare al bus-ului I2C), am reusit sa il finalizez. Sa o luam pas cu pas. Dupa deschiderea executabilului CubeMX gasim fereastra de selectare, fie a unui proiect nou, fie pentru incarcarea unui proiect deja salvat (foto CubeMX start). Selectam "New project" si se deschide fereastra de selectie a microcontroller-ului (foto MCU selection) unde vom face selectia asa cum este prezentata in fotografie. In tabelul din stanga selectam STM32F103C8 cu dublu click. Se va deschide fereastra de setari a perifericelor microcontroller-ului (foto CubeMX setings) unde faceti selectiile asa cum sunt prezentate (selectati mai intai RCC --> HSE - ->Crystal/Ceramic Resonator), apoi SYS (Debug-->Serial wire, pentru ca vreti sa faceti si debugging), I2C si USART1 pentru comunicatia cu senzorul si cu terminalul serial. Continuare in urmatoarea postare. Odata terminate selectiile de mai sus, alegem tab-ul Clock settings (foto Clock settings) si setam valoarea oscilatorului extern HSE la 8MHz, si HCLK la 16MHz, asa cum este prezentat in fotografie. Ultimii pasi pentru finalizarea setarilor este initializarea celor doua periferice I2C, respecti USART, care vor fi facute ca in fotografiile de mai jos In continuare mergem pe bara de sus si selectam optiunea "Project" --> "Settings", care va deschide o fereastra ca mai jos: In caseta "Project name" treceti demnumirea cea mai sugestiva a proiectului, iar locatia este folderul workspce pe care l-ati definit la instalarea aplicatiei Attolic. Tot aici selectati "Toolchain/IDE" --> Attolic True Studio si lasati bifata caseta "Generate Under Root". Inchideti aceasta fereastra si apasati icon-ul , pentru ca la sfarsit sa selectati din pop-up "Open project". Odata cu aceasta selectare se va deschide aplicatia Attolic ca in fereastra de mai jos: Atentie: fisierul "main.c" (localizat in folderul 'Src" al proiectului) contine doar setarile pentru initializarea in stare de reset a microcontroller-ului. Completati-l (sau inlocuiti-l cu fisierul main.c atasat) asa cum este in fisierul txt atasat Dupa compilarea cu succes (in principiu nu trebuie sa faceti alte setari in Attolic) a proiectului, selectati iconul si se va deschide fereastra de debugging, ca mai jos: Apasati tasta F8 pentru a rula programul gata incarcat in microcontroller, iar rezultatele vor fi afisate in fereastra terminalului setat pentru viteza de 38400 baud. Nu am intrat in amanunte privind instalarea Attolic pentru ca procedura nu prezinta interes. Daca va intereseaza voi continua. O zi buna In final proiectul complet in arhiva. main.txt I2C_test.zip Link spre comentariu
Liviu M Postat Mai 29, 2017 Partajează Postat Mai 29, 2017 Salut Nico, Felicitari pentru initiativa. M-am uitat putin prin cod si am ramas mirat. Eu tineam minte ca pentru pinii folositi pentru i2c (si nu numai) trebuie activate functiile auxiliare, dar la tine in cod nu vad setarile astea (ma uit cand ajung acasa cum am facut eu). Ma uit eu aiurea, sau chiar nu ai asa ceva? PS Eu m-am jucat (pe un discovery) cu un LCD Nokia 3310, ceva eeproame SPI, radio (TEA5676 si RDA5807M9)... Daca te intereseaza ceva (numai ca pentru STM32F0 si pentru compiler arm-gcc), pot sa urc proiectele pe undeva. LE Le-am gasit, sunt in *_hal_msp.c Link spre comentariu
nico_2010 Postat Mai 30, 2017 Autor Partajează Postat Mai 30, 2017 Multumesc Liviu. Voi continua in masura in care am timp si exista un oarecare interes. Inteleg faptul ca ai folosit SPL in aplicatiile tale. Le-am folosit si eu, insa ma omoara cu zile lecturarea manualului de utilizare si a foilor de catalog (Reference manual). In masura in care voi avea nevoie de sprijinul tau te asigur ca il voi solicita. Link spre comentariu
red93 Postat Mai 30, 2017 Partajează Postat Mai 30, 2017 (editat) Felicitări! Sincer eu m-am apucat de STM32F103 cu ajutorul System Workbench for STM32 (tot sub eclipse) care folosește HAL și SPL la fel ca ce ai prezentat tu. Programul e free și merge și sub windows și sub Linux, face și debug dacă ai st-link v2 de la chinezi. Exemple folosind SPL (setări și ce mai e nevoie) sunt multe, mai ales pe forumul OpenSTM32. Editat Mai 30, 2017 de red93 Link spre comentariu
nico_2010 Postat Mai 30, 2017 Autor Partajează Postat Mai 30, 2017 Stiu, am incercat si cu System Workbench, insa am ales sa folosesc Attolic. Oricum, voi continua, pe masura ce invat si eu. Trecerea de la 8 biti la 32 de biti este un pic dureroasa, dar ... trece si asta Link spre comentariu
Liviu M Postat Mai 30, 2017 Partajează Postat Mai 30, 2017 Inteleg faptul ca ai folosit SPL in aplicatiile tale. Habar n-am, ce-s alea SPL? Cand am inceput eu sa ma joc, nu exista CubeMX (sau cum se cheama minunea aia de initializat perifericele), nu exista HAL si Attolic era limitat la 8K (parca). Asa ca eu am inceput prin incropit un mediu cat de cat integrat si care sa mearga in Linux. *) In masura in care voi avea nevoie de sprijinul tau te asigur ca il voi solicita. Te ajut cu placere daca stiu, dar prea multe nu stiu nici eu. In general am pornit de la cate un exemplu (din bibliotecile si aplicatiile decarcate de la STM) si am incercat sa-l adaptez nevoilor mele. *) Detalii in topicul celalalt, n-are rost sa-l incarc pe al tau. Link spre comentariu
nico_2010 Postat Iunie 6, 2017 Autor Partajează Postat Iunie 6, 2017 @Liviu M: SPL: Standard Peripheral Library. Asa cum am promis, astazi continui cu o alta aplicatie, si anume comanda unui modul RTC cu DS3231 (alea care pe ebay sunt circa 2 dolari). De la inceput vreau sa mentionez ca nu am dezvoltat proiectul astfel incat sa cuprinda si un afisor si butoane de setare a datei, orei bla, bla... Totusi exista un buton (in cadrul proiectului am folosit portul PA.4, din motive de comoditate) care inscrie o ora (cu minute si secunde) si o data in registrii DS3231 prin punere pentru scurt timp la masa. Proiectul foloseste pentru comunicatie cu DS3231 bus-ul I2C2 (si nu I2C1, ca in proiectul anterior), iar pentru comunicatie seriala am folosit USART2 in modul asincron. Urmati primii doi pasi din postarea anterioara si faceti selectia asa cum este prezentata in figura de mai jos (foto DS3231_settings): Odata terminate selectiile de mai sus, alegem tab-ul Clock settings (foto Clock settings) si setam valoarea oscilatorului extern HSE la 8MHz, si HCLK la 72MHz, asa cum este prezentat in fotografia de mai jos. Continuam cu setarile pentru bus-ul I2C2 (foto I2C_config), intreruperea I2C la receptie (foto I2C_config_IRQ) si configurarea controller-ului DMA pentru lucrul cu bus-ul I2C (foto I2C_config_DMA) Ultimul pas, inainte de a genera proiectul, este configurarea portului PA.4 ca port de intrare cu rezistenta pull-up activata si actiune pe flancul cazator (foto GPIO_settings) si activarea intreruperii externe aferente portului cu pricina (foto DS3231_NVIC_settings). In caseta "Project name" treceti demnumirea cea mai sugestiva a proiectului, iar locatia este folderul workspace pe care l-ati definit la instalarea aplicatiei Attolic. Tot aici selectati "Toolchain/IDE" --> Attolic True Studio si lasati bifata caseta "Generate Under Root". Inchideti aceasta fereastra si apasati icon-ul , pentru ca la sfarsit sa selectati din pop-up "Open project". Odata cu aceasta selectare se va deschide aplicatia Attolic ca in fereastra de mai jos: Atentie: fisierul "main.c" (localizat in folderul 'Src" al proiectului) contine doar setarile pentru initializarea in stare de reset a microcontroller-ului. Completati-l (sau inlocuiti-l cu fisierul main.c atasat) asa cum este in fisierul txt atasat. Dupa compilarea cu succes (in principiu nu trebuie sa faceti alte setari in Attolic) a proiectului, selectati iconul si se va deschide fereastra de debugging, ca mai jos: Conectati montajul prin interfata UART-USB la calculator setati viteza portului la 115200 baud si apasati tasta F8 pentru a rula programul. Pe consola va apare ora, minutele si secundele, in format 24 ore. Scuze, nu am rabdare suficienta pentru a detalia fiecare operatiune in parte, insa astept intrebari cu privire la eventualele neclaritati. Si proiectul complet DS3231_test.zip Link spre comentariu
nico_2010 Postat August 8, 2017 Autor Partajează Postat August 8, 2017 Avand in vedere interesul "crescand" (asimptotic spre zero, binenteles) in legatura cu microcontrollere-le din aceasta familie (mult mai complexe decat cele pe 8 biti), voi continua astazi cu o aplicatie de test care utilizeaza breakout board-ul cu BMP280. BMP280 este un senzor de presiune si temperatura, mult mai precis decat generatiile anterioare (BMP085 si BMP180). Am cumparat acest modul de pe ebay urmarind in fapt varianta BME280 (care masoara si umiditatea) si pentru ca modulele semanau (sau erau prezentate voit asa) m-am ales ca BMP280 (intre timp am comandat si BME280, de data asta pe bune). Proiectul foloseste ca magistrala de comunicatie I2C1 (as fi putut sa aleg si SPI, insa pe alta data) pentru controlul BMP280 si USART1 pentru comunicatia seriala. Nici de aceasta data nu am folosit un afisor LCD (desi am realizat si softul pentru comunicatie I2C cu un afisor LCD 2x16) pentru ca proiectul vizeza doar controliul acestui senzor si nimic altceva. Urmati primii doi pasi din postarea#1 si faceti selectia asa cum este prezentata in figura de mai jos (foto CubeMX settings 1): Odata terminate selectiile de mai sus, alegem tab-ul Clock settings (foto CubeMx settings clock) si setam valoarea oscilatorului extern HSE la 8MHz, si HCLK la 72MHz, asa cum este prezentat in fotografia de mai jos. Continuam cu setarile pentru bus-ul I2C2 (foto CubeMx settings I2C), si cu cele pentru USART1 ((foto CubeMx settings USART) In caseta "Project name" treceti demnumirea cea mai sugestiva a proiectului, iar locatia este folderul workspace pe care l-ati definit la instalarea aplicatiei Attolic. Tot aici selectati "Toolchain/IDE" --> Attolic True Studio si lasati bifata caseta "Generate Under Root". Inchideti aceasta fereastra si apasati icon-ul , pentru ca la sfarsit sa selectati din pop-up "Open project". Odata cu aceasta selectare se va deschide aplicatia Attolic. Atentie: fisierul "main.c" (localizat in folderul 'Src" al proiectului) contine doar setarile pentru initializarea in stare de reset a microcontroller-ului. Completati-l (sau inlocuiti-l cu fisierul main.c atasat) asa cum este in fisierul txt atasat. Dupa compilarea cu succes (foto:Compile OK) a proiectului, selectati iconul si se va deschide fereastra de debugging, ca mai jos: Conectati montajul prin interfata UART-USB la calculator setati viteza portului la 115200 baud si apasati tasta F8 pentru a rula programul. Va fi afisata valoarea temperaturii cu 2 zecimale (exprimata in grade Celsius) si valoarea presiunii atmosferice, exprimata in milimetri coloana de mercur (mmHg). O singura observatie as avea de facut: pentru a afisa valorile pe un terminal va trebui sa selectati "Newlib standard" urmand aceasta cale: Project-->C/C++ Build-->Settings-->Tool settings-->C Linker-->General. Poate vi se pare plictisitor faptul ca ma folosesc de fotografii, fara alte explicatii, insa asa cum am mai spus nu mai am rabdarea necesara pentru a scrie mult. Si fisierul main.c main.txt Link spre comentariu
andrade Postat August 8, 2017 Partajează Postat August 8, 2017 Tutorialul este interesant, felicitări! Link spre comentariu
nico_2010 Postat August 8, 2017 Autor Partajează Postat August 8, 2017 Multumesc. Voi incerca sa postrz trptat si alte aspecte de interes. Scuze pentru erorile de scriere insa asfaltul nu e prea prietenos Link spre comentariu
andrade Postat August 9, 2017 Partajează Postat August 9, 2017 Eu am o placa Nucleo, am placa initiala mbed (amandoua programabile cu compilatorul online), nu am BluePill, desi m-am intalnit cu el, dar vreau sa incerc sa programez Nucleo si fara compilatorul mbed. In plus, am un Kit mititel bazat pe STM32F030F4P6 cu care vreau sa experimentez.Deci, tutorialul tau este binevenit. Link spre comentariu
nico_2010 Postat August 9, 2017 Autor Partajează Postat August 9, 2017 Iti recomand cu caldura Atollic True Studio Lite. Poti scrie programe folosind atat bibliotecile SPL cat si HAL. Programele sunt in mare masura portabile cu conditia sa folosesti bibliotecile HAL si CubeMX. Link spre comentariu
MifTy Postat August 20, 2017 Partajează Postat August 20, 2017 ... am instalat Attolic, dar am să-l dezinstalez mintenaş! imbecilii ăia îţi cer şi numărul de la pantofi doar ca să citeşti un amărât de pdf... nici nu e de mirare: sunt suedezi. Link spre comentariu
nico_2010 Postat August 21, 2017 Autor Partajează Postat August 21, 2017 Si care este deranjul? Dezinstaleaza-l si instaleaza OpenSTM (System Workbench). Link spre comentariu
nico_2010 Postat August 23, 2017 Autor Partajează Postat August 23, 2017 Salutam din nou! Astazi va plictisesc cu modul in care abordam functionarea interfetei seriale SPI ce va fi folosita pentru comanda unui afisor Nokia 5110. Ca de obicei, folosim aplicatia CbeMx si facem setarile din fotografia de mai jos (Nokia5110_pinout): Din modul in care a fost selectata functionarea SPI vor fi activi doar pini marcati LCD_CLK si LCD_DIN, restul, respectiv LCD_CS, LCD_DC si LCD_RST vor trebui selectati ca GPIO iesire (LCD_BL nu este folosit in aplicatie), vezi foto de mai sus. Vom selecta apoi ceasul extern si prescalerele astfel incat frecventa de functionare sa fie de 72MHz (nimeni insa nu va impiedica sa modificati frecventa de lucru la o valoare mai mica, ex: 48MHz, 24MHz, 16MHz), vezi foto de mai jos: Urmeaza setarile interfetei SPI si aici veti remarca ca semnalul CLK lucreaza cu o frecventa de 562kHz (insa se poate mari pana la 1MHz sau mai mult, este de testat), foto mai jos: Configuram si pinii aferenti portului A pentru conexiunea dintre SPI1 si afisorul Nokia 5110, ca mai jos: Salvam proiectul intr-un folder nou aflat in folderul "Workspace" : si generam proiectul pe care il vom deschide selectand butonul 'Open project". Pentru usurinta vietii voastre, inlocuiti continutul fisierului "main.c" cu continutul celui din postare. Apoi, upa compilarea cu succes (foto:Compile OK) a proiectului, selectati iconul si se va deschide fereastra de debugging si totodata pe ecranul afisorului va apare textul pe care l-ati transmis. Si in final, pentru ai mai lenesi si proiectul complet in arhiva. Si cum nu m-a lasat anterior sa postez proiectul o fac acum. Daca aveti intrebari, va raspund cu placere pe PM. L.E.: Cam asa ceva ar trebui sa obtineti (vezi foto): main.txt Nokia5110LCD_test.zip Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum