Populārs ieraksts AndrisBB Ierakstīts Februāris 16, 2020 Populārs ieraksts Share Ierakstīts Februāris 16, 2020 (labots) Tākā vienā citā tēmā @Jurkins izmanto MS Visual Studio, lai rakstītu kodu priekš Arduino, tad es izdomāju ka varētu uztaisīt pāris mini video kā var ātri un ērti rakstīt un debuggot kodu priekš STM32 iekš VS Code. Varbūt kādam interesanti. Kā arī jāpatrenējas kā veidot video. Varbūt vēlāk kautkad jāuztaisa Youtube kanāls. Forumā arī izskanēja viedoklis ka esot baigais čakars lai visu nokonfigurētu utt., bet īstenībā tas ir pavisam vienkārši. Pirmais video parāda kā uztaisīt Cube MX projektu izmantojot Makefailu. Pa lielam tur tikai daži soļi: * Uztaisam projektu iekš Cube MX. Tākā es izmantoju Nucleo f401re boardu, tad defaultie settingi jau ir salikti un pat pini jau izvēlēti kā outputi priekš LED. Pa lielam var izmantot jebkuru boardu, ieskaitot tos lētos ķīniešu STM klonus, vai pašam savu custom veidojumu. * Eksportējam visu kā Makefile projektu * Lejupielādējam gcc kompilatoru priekš ARM. Es lejupielādēju no ARM lapas, bet ir daudz un dažādas citas alternatīvas. Vai arī pats var uzbuildot no source koda. * Cube MX dažreiz gļuko un ieliek vienus un tos pašus failus iekš Meikfaila, tapēc nodzēšam duplikātus. * Kompilējam. Rezultāti iekš build mapes. Labots Februāris 16, 2020 - AndrisBB 5 Link to comment Share on other sites More sharing options...
Jurkins Februāris 17, 2020 Share Februāris 17, 2020 (labots) Forši @AndrisBB! Sestdien pamēģināju sākt darboties ar stm32F103C86T ķīniešu klonu. Iestrēgu (laiks izbeidzās) pie projekta veidošanas cūūbēē. Viss baigi smuki, bet ļoti daudz apgūstamās vielas. Gan jau pēc tam viss aiziet. Pēc tam būs jāizvēlas ide. Ir tam pašam ST - cubeide. Bet tur laikam ir tikai c. Lielākā daļa bibleņu visādiem sensoriem uzrakstītas c++. Būs jāpamēģina Tavs video realizēt dzīvē. Apskatīju mbed studio... kaut kā nepatika, nebija tas "klikšķis". Piemēram ar atmelstudio bija ?. Bet šādas ides nekad neapies, pat nepietuvosies popularitātē plašās masās arduino. Ņemot vērā vēl to, ka šo stm arī var dabūt iekš arduino. edit: ņem kuru bibleni gribi (varbūt nedzudz pārspīlēju, bet uz to iet) ... #ifdef ARDUINO ....blablabla... #ifdef MBED... blablabla ... un viss edit: pamēģināju vienu vakaru piešķilt UIPEthernet bez arduino uz plika avr. Pietrūkst zināšanu... nomuhļījos... Labots Februāris 17, 2020 - Jurkins Link to comment Share on other sites More sharing options...
AndrisBB Februāris 17, 2020 Author Share Februāris 17, 2020 Velak uztaisisu video ka pieslegt OpenOCD utt. Ka ari saku stradat pie projekta kur izmantoju STM32, varbut vares pielikt kadu reali piemeru, mazliet vairak par Hello World. pirms 3 stundām , Jurkins teica: Pēc tam būs jāizvēlas ide. Ir tam pašam ST - cubeide ST ir pasiem sava Eclipse versija - ST Workbench https://www.st.com/en/development-tools/sw4stm32.html 1 Link to comment Share on other sites More sharing options...
Jurkins Februāris 17, 2020 Share Februāris 17, 2020 Pirms 4 minūtēm , AndrisBB teica: sava Eclipse versija Šo biju palaidis garām. Paldies. Jāievērtē, jo izvēle būs jāizdara?. Link to comment Share on other sites More sharing options...
AndrisBB Februāris 17, 2020 Author Share Februāris 17, 2020 Es gan to Eclipsi reti izmantoju, un ja izmantoju, tad kodu rakstu ieksh VS Code un tad Eclips'e tikai debuggoju vai flshoju. Bet tas ir reti, kad vajag izlabot kadu sikumu un slinkums salikt iestaijumus prieks Code. Link to comment Share on other sites More sharing options...
Usins Februāris 17, 2020 Share Februāris 17, 2020 Tagad pa laikam ko spēlējos ar arduino kodu rakstot arduino idē. vēlētos pārvākties uz stm32, kas laikam būtu price/performance daudz pareizāk Jautājums: vai šāda plate ir sevis mānīšana jo tik un tā displeju un sensoru bibliotēkas nestrādās pamatā? vai uzreiz cīnīties ar STM32 F103C8T6 kā @Jurkins pieminēto? Link to comment Share on other sites More sharing options...
AndrisBB Februāris 17, 2020 Author Share Februāris 17, 2020 (labots) Tam bibliotekam vajadzetu stradat, bet nekad nevar zinat. Problema ar visam tam F103C8T6 Blue vai Black ir ka tev vajadzes piepirkt debuggeri tikunta, jo rakstit un testet kodu pa "aklo" uz mikrokontroliera, ka to parasti dara Arduino cilveki ir pamatiga sape pakala. Ka turpinajumu esoshajam video, pieliksu piemera ka dabut, lai darbojas tas F103C8T6 + debuggers. Labots Februāris 17, 2020 - AndrisBB 1 Link to comment Share on other sites More sharing options...
Jurkins Februāris 17, 2020 Share Februāris 17, 2020 (labots) Bet šitā plate jau ir tā, ko pieminēju. Atšķirībā no ķīnas kloniem, šai jau ir arduino būtloaderis iekšā. Visas arduino bibliotēkas gan jau pa lielam strādās. Ar to bibleņu nestrādāšanu es domāju IDEs sakarā, jo pa lielam visas arduino biblenes ir uz c++ rakstītas, bet manis minētā piemēram, šķiet, tikai ar c draudzējas. Es šitādu pasūtīju. Cena nekāda, var displeju normāli piejūgt u.t.t. Redzēs, kā man veiksies ar stm. Pirms 5 minūtēm , AndrisBB teica: piepirkt debuggeri tikunta Vai ar debugeri domā ST-Link V2? Labots Februāris 17, 2020 - Jurkins Link to comment Share on other sites More sharing options...
AndrisBB Februāris 17, 2020 Author Share Februāris 17, 2020 Jaa. Es gan vinju nepirktu atseviski. Es parasti nolauzu nost debuggeri no Nucleo boarda, jo to man ir chupam gan majas, gan darba. Ja baigi vajag, tad officiali var parflashot uz Segger J-linku. Protams, tad nav vairs visas krutas J-Link fiichas, var teikt sanak J-Link Light Link to comment Share on other sites More sharing options...
Jurkins Februāris 17, 2020 Share Februāris 17, 2020 (labots) Man jau krietni sen tumbočkā mētājās tie F103... un šitas STlink, tikai nesanāca pieķerties klāt. Katrā gadījumā tas stlinks čipu atpazina un nolasīt varēja, līdz rakstīšanai vēl netiku. Toreiz, pirms iemešanas tumbočkā, biju pieslēdzis vienu ar uartu un iešuvis arduino būtloaderi un iešuvis standarta led midžināšanu. Tagad konkrētā platīte neatpazīstas ar stlinku. HVZ, ko esmu tur sastrādājis. edit: vakar bišķi tīri intereses pēc paņēmos ar arduino+stmklons. Tipa ar to, kuru st-links neatrada. Pieslēdzos ar usb2serial. Izrādās ejošs. Un izrādās, viss ir baigi elementāri, ja izvēlas šādu ceļu. Tā kā ja @Usins dara to? paretam, tad var sākt tajā pašā arduino vidē un pamazām ietrīties uz kaut ko advansētāku. Labots Februāris 18, 2020 - Jurkins Link to comment Share on other sites More sharing options...
Amazons Februāris 18, 2020 Share Februāris 18, 2020 Tīri intereses pēc padalāties ar pielietojumu STM'iem, ESP8266, ESP32 utt.. Ir kāds reāls pielietojums/izdevīgums? Salīdzinājumam - tas ko esmu redzējis, parasti ir mēģinājumi izveidot to kas jau ir (kontrolieri, moduļi, izpildmehānismi). Principā gatavi risinājumi bez kādas vajadzības (laika izdiršanas :sorry) kaut ko lipināt, kodēt utt.. Nu vismaz industriālā līmenī. Link to comment Share on other sites More sharing options...
AndrisBB Februāris 18, 2020 Author Share Februāris 18, 2020 Isti nav skaidrs kads ir jautajums, bet stm32 ir vieni no popularakajiem mikrokontrolieriem. Vini ir visur, atver kautkadu industrialu/majas iekartu un ja tur ir microkontrolieris, tad liela varbutiba ka tur bus kads no STM32 variantiem. Familija ir diezgan liela, sakot no ARM Cortex M0 (mazi, ekonomiski paretinja, leti), lidz pat M7, kas iet virs 200MHz. ESP jau vairak tads "uzhakots" chips. Nekados nopietnos aparatos neatradisi. Ja nu vienigi lieliem razhotajiem, kam ir ligums ar chipmeikeru un pieeja dokumentacijai. Kautkur jau vinjus pirmsakumos izmantoja. Link to comment Share on other sites More sharing options...
Usins Februāris 18, 2020 Share Februāris 18, 2020 (labots) pirms 3 stundām , Amazons teica: reāls pielietojums piemēram, kad gatavais industriālais risinājums pakaras, attālināti to restartēt un tam iebarot pāris komandas (te gan pietiku ar atmelu) aizvien vairāk gatavu lietu komunicē caur ražotāja serveri, tas vai nu maksā, vai ir (subjektīvi) nedroši ilgtermiņā paļaujoties uz šādiem risinājumiem. @Jurkins mēģināšu gan/gan paralēli. Jācenšas apgūt pēc iespējas modernāki un pareizāki risinājumi uzreiz, savādāk dzīvē beigsies kamēr mēģināšu iziet visu mikrokontrolieru u.c. evolūciju. No otras puses, pašmācības/hobija ceļā, pārāk stāva mācīšanas līkne noved pie projekta pamešanas nesasniedzot nekādu rezultātu. Taustos. Labots Februāris 18, 2020 - Usins 1 2 Link to comment Share on other sites More sharing options...
Jurkins Februāris 18, 2020 Share Februāris 18, 2020 pirms 2 stundām , Usins teica: pareizāki risinājumi uzreiz nu jā, arduino vide ir indigo bērniem ? Link to comment Share on other sites More sharing options...
Amazons Februāris 18, 2020 Share Februāris 18, 2020 pirms 6 stundām , AndrisBB teica: Vini ir visur, atver kautkadu industrialu/majas iekartu un ja tur ir microkontrolieris Jā to es zinu! Tagad pat lodāmurus kurbulē uz stm32. Es vairāk par to kam/ko jūs kaut ko būvējat? Jo diez vai tas ir vecs ZIL ledusskapis kuru gribat upgreidot līdz Elektrolux "side by side" ledusskapja līmenim mājas vajadzībām Link to comment Share on other sites More sharing options...
Amazons Februāris 18, 2020 Share Februāris 18, 2020 pirms 4 stundām , Usins teica: kad gatavais industriālais risinājums pakaras pirms 4 stundām , Usins teica: aizvien vairāk gatavu lietu komunicē caur ražotāja serveri, tas vai nu maksā Tas fakts, bet, ja pakaras tavs darinājums, tad lai nodrošinātos jātaisa vēl vienu kurš restartē tavējo? Es tik filozofēju 1 Link to comment Share on other sites More sharing options...
AndrisBB Februāris 18, 2020 Author Share Februāris 18, 2020 Es pārsvarā izmantoju darbā visādām iekārtām, sākot no vienkāršiem scenārijiem, kur jānomaina jāieslēdz LED lai par kautko informētu useri, lidz jau daudzmaz nopietnai signālu apstrādei. Priekš sevis tagad ir 2 aktīvi projekti. * Lego motoru/sensoru draivers, lai bračkas sīkie var programmēt robotus. * Robota galva, kas grozās, kunstina muti utt. Iespējams vēlāk iepostēšu te par šo temu, kad jau daudzman kautko būšu izdarijis. Pagaidām īsti nav laika. Link to comment Share on other sites More sharing options...
M_J Februāris 18, 2020 Share Februāris 18, 2020 pirms 4 stundām , Usins teica: piemēram, kad gatavais industriālais risinājums pakaras, attālināti to restartēt Vai aizstāt to gatavo industriālo risinājumu, kad ir apzināti visi tā trūkumi ar savējo. Uzreiz iegūstam virkni priekšrocību: - ir pilna informācija par šo ierīci - visaugstākais softiskais piekļuves līmenis ierīcei, kāds vien var būt, nevajag lūgties zemoties un draudēt un maksāt lielu naudu, lai dabūtu donglu ar nožēlojamām iespējām. - ja kaut kas darāms tajā ierīcē ar lodāmuru, pat stipri cenšoties nav iespējams nosvilināt kaut ko vairāk kā pāris eiro vērtībā. Ko nevarētu teikt par gatavajām industriālajām ierīcēm. Pirms 28 minūtēm , Amazons teica: Tas fakts, bet, ja pakaras tavs darinājums, tad lai nodrošinātos jātaisa vēl vienu kurš restartē tavējo? Ļoti vienkārši - jātaisa darinājumi, kas nekaras 2 Link to comment Share on other sites More sharing options...
AndrisBB Februāris 18, 2020 Author Share Februāris 18, 2020 Uztaisiju nākamo mikro video - Kā "pāršūt" firmwāri vainu izmantojot Mass Storage Device vai arī STM32 Cube Programmer. * Linuxa gadījumā parbaudam ka ir izveidots udev .rules fails, lai piespraužot devboardu, tas tiek automātiski piemontēts kā flashka. * Izveidojam elementāru Blinku kodu. LD2 ports (PORT_A) un pins (PIN_5) tika izveidots iekš Cube MX, vienkārši pieliekot labelu LD pie pina. * Vienkāršākais variants kā pārkopēt firmwāri ir copy/paste uz flashu ko ST-Link emulē. * Ja gribas ko vairāk, tad var izmantot STM32 Cube Programmer. Kad pērk tos ķīniešu lētos F103C8T6 bāzētos boardus aka BluePill/BlackPill, tad parasti viņi ir write protected, tad bez programmera neiztikt, lai atslēgu rakstīšanas aizsardzību. 2 Link to comment Share on other sites More sharing options...
Amazons Februāris 18, 2020 Share Februāris 18, 2020 Pirms 10 minūtēm , M_J teica: maksāt lielu naudu, lai dabūtu donglu nu nez, PLC projektiem var lietot Tosibox (premium klase). Viens dongls uz n-tiem aparātiem (draugu cena ap 250Eur). Zinu cilvēkus kuriem ir 10-iem (baidos teikt 100-iem) objektu pa visu pasauli un normāli dzīvo ar vienu donglu kabatā. Man ir tikai daži objekti :)) Sasaiste ar ražotāja serveriem?! Tāpēc ka tā ir vienkāršāk realizēt pieslēgšanos da kaut vai āfrikā, kur hvz cik rūteriem un banānmizu ugunsmūriem tev jātiek cauri. Protams saprotu ka situācijas ir dažādas Link to comment Share on other sites More sharing options...
Usins Februāris 18, 2020 Share Februāris 18, 2020 Pirms 3 minūtēm , M_J teica: aizstāt to gatavo industriālo risinājumu Arī variants, bet man tādi ir 200 gabali un ja neņem vērā, ka pa laikam (3 mēnēši - 5 gadi) pakaras - funkciju pilda. Savu pagaidām nav pieticis neatlaidības pabeigt. Kopumā varu parakstīties zem @M_J aprakstitā. Vaina varbūt ir pārdošanas prasmēs, izvēlētā produktā/ražotājā, trūcīgā mazā tirgū. Savā ziņā nabadzība veicina tehnisku radošumu. Bernībā rotaļājos ar lodumuru, vēl zx spectrum bet sākās pusaudža trakumi un tas viss pazuda. Pēc 20 gadiem birojā ar caurspīdīgo līmlenti pietinu 3xAAA baterijām štekeri iekārtas barošanai (D izmēra 3.6V Saft LV maksā kosmosu). Skatijos uz to līmlenti skumji un nolēmu izvilkt lodāmuru. Tad nejauši tika atklāts ka %10 sprieguma pieaugums ievērojami uzlabo uztveršanu, tad jau sākās. Ap to pašu gadu pēc vairāku nedēļu lūgšanās IT uzturetājām rietumvalstī ka nedarbojas datu imports noteikta veida failiem lai nodrošinātu klientu apkalpošanu pāris dienās uzcepu izmantojumu savu risinājumu. Tas bija otrs lūzuma punkts, kad sapratu - ka varu pats ātrāk, labāk, sev drošāk. Mani skripti datorā ir diezgan nestabili, regulari karās, bet parasti viegli pašam pielabojumi. Arduino pagaidām viss ir darbojies gludi (kas vispār sanācis) Link to comment Share on other sites More sharing options...
M_J Februāris 18, 2020 Share Februāris 18, 2020 Pirms 24 minūtēm , Amazons teica: Protams saprotu ka situācijas ir dažādas Manā gadījumā (lietās, kas saistītas ar elektrostacijām) ar dongliem ir problēmas. Ir tāds ražotājs Heinzmann, kas taisa visādus ķiņķeriņus šādām vajadzībām. Gandrīz visām gāzes elektrostacijām ir Heinzmann apgriezienu regulatori. Ja tādam regulatoram ir nekorekti uzstādīti PID parametri, viņš "iešūpo" to motoru un sasinhronizēties un pieslēgties tīklam ir tīrās mocības. Tas Heinzmanns, pēc ilgas sarakstes, bija gatavs man tādu donglu pārdot par nieka 2000 eiro, un ne jau "inženiera" versiju. Vispār, paldies šim kantorim. Rezultātā man tagad ir savs apgriezienu regulators, kas darbojas jau vairākās elektrostacijās. Pēdējā gada laikā ir nācies piedalīties problēmu risināšanā virknē elektrostaciju, kur strādā DEUTZ/MWM motori ar TEM-EVO vadību. Tajā vadībā ir virkne vājo vietu, kas turklāt maksā neadekvāti dārgi. Piemēram, "tačskrīns". Būtībā vadības panelis. Ekrāns kopā ar datoru. Būtībā tāds "Raspbery PI" tikai ar lielāku ekrānu. Tikai atšķirībā no "avenes" tas sūds maksā četrpadsmit tūkstošus. Viņam iekšā ir sava programma no sērijas: "Anglija bij aizslēgta, atslēga bij nolauzta". Bet tas ekrāns pats neko nevada. Motoru vada atsevišķa kaste, un ekrāns ar to sazinās, izmantojot kaut kādu idiotisku savu, nekur neaprakstītu, protokolu, mazliet līdzīgu 3964R (laikam stulbāku protokolu, ko izmantot par paraugu nebija varējuši sameklēt). Vasarā bija iespēja ilgāku laiku ar tādu verķi padarboties un izpētīt to protokolu, un vispār visu datu apmaiņu starp ekrānu un vadības kasti. Tagad gribu to ekrānu vienkārši aizstāt ar "aveni" + kaut kādu datora monitoru. Potenciālie klienti jau ir. Vairākos objektos, kur esmu risinājis citas problēmas, tas TEM ekrāns ir pussprādzis. 2 Link to comment Share on other sites More sharing options...
AndrisBB Februāris 23, 2020 Author Share Februāris 23, 2020 Gribēju šodien uztaisīt mikro video kā dabūt OpenOCD un debuggot STM32 iekš VS Code, bet nesanāca laiks. Jātliek uz nākamo nedēļu. Tikmēr varu padalīties ar projectu pie kura šodien sāku strādāt. Būtībā ideja vienkārša: STM32 F429ZI mikrokontrolieris (vai ja vajadzēs vēlāk, tad upgreidošu uz ko jaudīgāku) OS: FreeRTOS TCP/IP - LWIP staks. Uz mikkrokntroliera būs HTTP servers, lai var kontrolēt servo motorus un nolasīt dažus sensorus Būs video strīms no kameras OV7670 - vai kaitkas tml. Video būs jāpārkodē uz Motion JPEG. Būs jābūt iespējai nosautīt audio, kura atskaņot. Protams kautkāda web lapa, la var debuggot sistēmu un visu kontrolēt Tākā tmiņas nav daudz, tad ganjau vajadzēs SD karti vai kādu citu ārējo atmiņu. Šodien sāku strādāt pie web servera daļas. Ideja tāda ka viens Tasks (pavediens?), apstrādā ienākošos vaicājumus un padod tālāk iekš FIFO Queue. Tad 1 vai vairāki citi pavedieni gaida uz to FIFO un apstrādā pašu requestu, aizsūta atbildi. Cik pavedieni, pagaidām nezinu, bet to var viegli modificēt uztaisot tik cik vajag. Lai parsētu pašus HTTP headerus atradu tādu bibliotēku iekš github https://github.com/h2o/picohttpparser Tālāk vajadzēs kautkā mappot pašu requestu ar attiecīgo funkciju. Te domāju izmantot regex un funkciju pointeru tabulu. Atradu arī kautkādu mikro bibliotēku kas atbalsta primitīvus regexus, jāpaskātās būs kā strādā. https://github.com/kokke/tiny-regex-c Ja kādam interesē kods, tad uztaisiju arī repo https://github.com/AndrisBB/STM32_Robot_Controller Pagaidām gan tur īpaši skatīties nav ko un kautkāda darbība notiek tikai šinī pavedienā https://github.com/AndrisBB/STM32_Robot_Controller/blob/master/Src/tasks/http_task.c Primitīva diagramma un board foto zemāk: 4 Link to comment Share on other sites More sharing options...
AndrisBB Februāris 23, 2020 Author Share Februāris 23, 2020 Kontrolēta tiks robota galva. Kopā apmēram 6 servo motori (grozīt, kustinat muti, plecus, acis), vienas acs vieta būs kamera, otra iespejams mini displays, kautkads mini skaļrunis utt. Pagaidām viss tikai sākuma stadija, daudz ko 3d printēt un daudz koda ko rakstīt. 1 1 Link to comment Share on other sites More sharing options...
HIGH-Zen Februāris 23, 2020 Share Februāris 23, 2020 Terminatora galva. 1 Link to comment Share on other sites More sharing options...
AndrisBB Februāris 23, 2020 Author Share Februāris 23, 2020 (labots) Redzēs kas tur sanāks. Par pamatu tiek izmantoti elementi no InMoov robota. Seja būs noteikti mazliet jāpamaina, no sākuma bij doma izmantot manis paša galvu, bet tad pārdomāju. Laikam acu/sejas elements būs mazliet jāpārtaisa, jāuztaisa kautkāds līdzīgs iluminators kā manā avatārā. Labots Februāris 23, 2020 - AndrisBB Link to comment Share on other sites More sharing options...
Jurkins Marts 1, 2020 Share Marts 1, 2020 Jā, man stm32 vēl ir kosmoss. Vakar nomuģījos ar sistēmas taimeri. Beigās jau palaidu "blinku" balstoties nevis uz aizturēm, bet uz 1 ms tikšķiem, bet ... rakos, rakos pa tie HAL failiem... tā arī neatradu, kurā vietā tiek atļauti pārtraukumi no sistēmas taimera ?. Jā, un tas ST ide jau ir uz tās pašas eklipses bāzes laikam, tikai nevaru atrast (nav???) kā dabūt autocomplete. Nu bez tās fīčas ir baigi nogurdinoši. Jāmēģina būs likt lietā @AndrisBB manuālis un jāmēģina VS Code. Link to comment Share on other sites More sharing options...
AndrisBB Marts 1, 2020 Author Share Marts 1, 2020 Uztaisiju divus jaunis video: * Kā setupot OpenOCD un debuggot kodu uz devaisa * Kas jādara, lai varētu izmantot printf un citas stdlib funkcijas OpenOCD Tāka te daudziem patīk izmantot to BluePill, tad uztaisiju apmēram 10 min video kā visu setupot un debuggot kodu iekš VS CXode. Soļi apmēram sekojoši. Uztaisam CubeMx projektu priekš STM32F103C8T Iespējojam Serial Wire debug interfeisu Iestatam pulksteņus. Ja nav nepieciešama nekāda super laika precizitāte, tad var iztikt ar iebūvētajiem kristāliem, bet tākā uz Blue Pill jau ir 2 kristāli, tad var izmantot tos. Procesora frekvenci uzliekam uz 72Mhz. Var arī jebkuru citu frekvenci. Iespējojam UART1 priekš debuggošanas Iespējojam PC13 pinu priekš LED. Tikai viens LED uz tā BluePill. Tālāk ja viss darbojas, tad: Lejupielādējam OpenOCD. Kompilējam, instalējam Uztaisam configu priekš BluePill, vienkārši nokopējot no Nucleo un samainot uz pareizo CPU. Pārbaudam vai strādā no komandrindas - palaižam OpenOCD un pieslēdzam GDB. Iekš VS Code instalējam Cortex Debug pluginu. Uztaisam konfigu prieks debugošanas Viss darbojas Iespējojam printf Pa lielam ja vajag kautko rakstīt uz serial portu, tad var rakstīt pa taisno, bet man labāk patīk caur printf. ARM GDB nāk ar pre-buiuldotu newlib C bibliotēku. Kad kompilē tad var norādīt, lai neizmanto viņu vispār. Bet ja tomēr vajag, tad pašam ir jāuzraksta zemākais slānis, lai printf, gettime, malloc utt darbotos. Pa lielam man jau tas fails ir sen uzrakstīts un tikai copy/paste inu jaunā projektā. Es viņu saucu par syscalls.c. Lai printf drbotot vajag pašam uzrakstīt putchar funkciju, kas pa defaulto ir implementēta kā weak, tapēc neko nedara. Putchar funkcijā vienkāršu sūtam to char uz seriālo portu, bet var sūtīt kur vien grib. Link to comment Share on other sites More sharing options...
AndrisBB Marts 1, 2020 Author Share Marts 1, 2020 (labots) pirms 6 stundām , Jurkins teica: Vakar nomuģījos ar sistēmas taimeri. Beigās jau palaidu "blinku" balstoties nevis uz aizturēm, bet uz 1 ms tikšķiem HAL bibliotēka ir diezgan labi dokumentēta, paskaties header failos vai .c failos. Plus daudz piemēru iekš CubMX. Paskaties Examples mapē. Jebkurā gadījumā uztaisiju mini video kā izmantot Basic Timeri visvienkāršākajā modē. Soļi apmēram tādi: Iekš CubeMx iespējo taimeri. Var jau protams pats to kodu uzrakstīt. Bet vieglāk no turienes. Ja piemēram vēlies 20 ms tikšķi, tad izvēlies counting mode - up. Tākā MCU frekvence ir 72 Mhz, tad ieliec prescaileri 72 (video ir kļūda, īstenībā vajag 72 -1), lai timera pulkstens būtu 1mhz. Caunteri ieliec 20 000 - 1, tai interupts tiktu izsaukts kad caunters sasniedz to daudzumu. Tad sanāk interrupts katras 20 ms. Ja vajag citus intervālus, tad izvēlies pats ciparus. Iespējojam interruptu Main funkcijā sākam taimeri. (Vai tad kad vajag) Interruptu handlers it xxx_it.c failā. Uzrakstam callback funkciju priekš taimera (pa defaulto viņa ir implementēta kā weak) Viss, taimers strādā. Labots Marts 1, 2020 - AndrisBB 1 Link to comment Share on other sites More sharing options...
Jurkins Marts 1, 2020 Share Marts 1, 2020 (labots) Smuks video. Taimeri būs nākamais solis. Es biju nosprūdis uz sistēmas taimera ?. Bet nu viss sanāca beigās labi. Izdevās palaist oriģinālo ST debageri. Izrādās ķīnieši ir baigie dibenzellii... nē, nevis dibenzeļļi, bet p'idari. Tiem lētajiem ST-Link V2 (~2 eiro) nav izvadīti ārā 2 signāli, no kuriem reāli gan vajag (pašlaik vismaz) vienu -reset. Vispār jau tāds reset pins šim eksistē, bet ko viņš resetē, tā arī nesapratu. Lai iešūtu ar CubeProgrammer nācās turēt nospiestu "bluepill"reset pogu, palaist "connect" un tad reset palaist vaļā. (Pagāja viens riktīgs vakars, kamēr sapratu, kas notiek). Beidzot atradu vienu gudrinieku, apbruņojos ar lupu, iespringu (sūtīga jau redze paliek, bet vēl kaut kas sanāk) un vuaļā. Līdz ar to arī aizgāja ides dzimtais debageris. Nu un tagad jau soli pa solim smuki var paskatīties, kas notiek, kā šis palaižās u.t.t. Pagaidām vēl neesmu atradis, vai eksistē kaut kāds logs, kur var skatīt mainīgos. Pagaidām tikai uzbraucot ar peli koda logā. Jocīgi, ka ģenerētajā kodā iekš main() vispirms ir funkcija HAL_Init(), kura cita starpā nokonfigurē sistēmas taimeri ar savu defaulto takti (16M), saliek pārtraukumu prioritātes u.t.t. un pēc tam vēlreiz tieši tas pats tiek darīts SystemClock_Config(), tikai nu jau ar pareizo takti (manā gadījumā 72M) un par jaunu liek pārtraukumu prioritātes u.t.t. Labots Marts 1, 2020 - Jurkins Link to comment Share on other sites More sharing options...
Jurkins Aprīlis 1, 2020 Share Aprīlis 1, 2020 Jāiespamo šeit kaut kas. Apnicis jau tas vīruss. ? Vai DMA circular modē notiek "complete" pārtraukums? Man kaut kā šis mauc nonstopā. Ieliekot pārtraukuma funkcijā breikpointu, debageris neielec funkcijā un neapstājas. It kā infas baigi daudz, bet tur jau laikam tā problēma. Link to comment Share on other sites More sharing options...
Jurkins Aprīlis 11, 2020 Share Aprīlis 11, 2020 Skaidrs, ka tagad visiem prātā kroņvīruss, bet vai tad tāpēc visai dzīvei jāapstājas. Izvilku no tumbočkas šitādu - https://www.ebay.com/itm/USB-Logic-Analyzer-Device-Set-Compatible-to-Saleae-24MHz-8CH-for-ARM-FPGA-M100/324112154593?hash=item4b7696ffe1:g:3HIAAOSwFG1eeJ0S Kaut kad biju pasūtījis, bet kā iesīkstējis vecis turpināju ņemties pa vecam. Baigā lieta. Iesaku visiem, kuri kaut ko dara ar arduino vai visādiem citiem verķīšiem. Konkrētajā gadījumā parāda, kā nolasās visi SI4432 reģistri. Protams, lētais gals u.t.t. Vairāk par 8 Ms/sek. negrib, lai gan rakstīts 24. Tagad esmu uzsūtījis šādu - https://www.ebay.com/itm/DSLogic-Basic-USB-Logic-Analyzer-16Ch-100MHz-4Ch-400MHz-Xilinx-Spartan-6-FPGA-/261859212050?_trksid=p2349526.m4383.l4275.c10#viTabs_0 1 Link to comment Share on other sites More sharing options...
Raimonds1 Aprīlis 11, 2020 Share Aprīlis 11, 2020 Vai ar šo var realizēt reverso inženieriju? Link to comment Share on other sites More sharing options...
Jurkins Aprīlis 11, 2020 Share Aprīlis 11, 2020 (labots) Kādu reverso inženieriju? Tak beidz tuftu dzīt.? Tu saproti vispār, kas ir "loģiskais analizators" un ko viņš dara? "Pieraksta" signālus uz loģiskajām izejām/ieejām. Labots Aprīlis 11, 2020 - Jurkins Link to comment Share on other sites More sharing options...
ggg97 Aprīlis 11, 2020 Share Aprīlis 11, 2020 Vot analogo signālu logeri uz pāris kanāliem pa piečuku + būtu interesanti. Pat vairāk par 100kHz nevajadzētu. Ir ģjošie osciļu kiti, bet tie nav logeri. Link to comment Share on other sites More sharing options...
AndrisBB Aprīlis 11, 2020 Author Share Aprīlis 11, 2020 (labots) Es izmantoju abus divus, plus ir vēl IKA Logic, kas ir diezgan labs. Darbā ir pāris oriģinālie Saleae, gan vecāki gan jaunāki, bet price/performance ziņā iepriekšējie ir labāki. Tā ķīniešū klona pluss ir ka relatīvi mažiņs, ātri piespraud kautko pārbaudi un iemet atpakaļ kastē kur citi loriņi glabājas. Mīnuss ka viņam Mini USB vads (vismaz manam), kas parasti ir diezgan resns. Plus faktiski nekas cits vairs Mini USB neizmanto, tapēc mūžīgi jāmeklē vads. Kad uz galda pilns jau ar višādiem štrundiem, tad katrs extra restais vads traucē. IKA Logic tie paši plusi/mīnusi kas ķīnietim, tikai protams sampling rate 200mhz, salīdzinot ar kā teici ķīnieša 8mhz. Software arī interesanta, bet laba. Daudz visādi protokolu decoderi utt.. Abiem protams mīnuss ka tikai 4 kanāli, 8 kanāli es domāju būtu labs kompromiss. DS Logic man ir viens no pirmajiem modeļiem, vēl no kikstartera. Pa lielam viss taspats kad @Jurkins linkā, bet USC-C vietā Mini-USB un pats galvenaiss mīnuss salīdzinot ar jaunāko medeli ir ka visi inputi ir uz viena konektora. Ja vajag pieslēgt kādus 8 inputus, tad nākas cīnīties ar to vadu kalnu, plus vēl izpīpēt kurš ir kurš kanāls. Ganjau tapēc viņi sadalija to konektoru vairākos mazākos. Cits mīnuss ka softwāre uz Linuksa pašam jākompilē no source koda , nezinu varbūt ka kas mainijies tagad. Bet citreiz vajag kautko fiksi nomērīt, bet skuju, uz konkrētā datora nav softwāres, nākas downloadot, kompilēt, tad atkal kautkas nekompilējas vieglāk izvilkt to IKA vai ķinieti (ja nav nekas kritisks) Labots Aprīlis 11, 2020 - AndrisBB Link to comment Share on other sites More sharing options...
Usins Aprīlis 11, 2020 Share Aprīlis 11, 2020 (labots) arī šat tad rotaļājos ar šādu Salae klonu. To nolasīto pieglabāju. Dažos gadījumos rodas vēlme pēc "play" pogas. Nav kāds gatavs risinājums? laikam nebūs jo gribēšu lai pēc viena kanalā trigera citu "atskaņotu" noteiktā laikā us, ko vajadzētu izdoties no stm, uz arduino par lēnu bija. pirms 9 stundām , ggg97 teica: Vot analogo signālu logeri uz pāris kanāliem pa piečuku + būtu interesanti. Pat vairāk par 100kHz nevajadzētu. Ir ģjošie osciļu kiti, bet tie nav logeri. piespraud arduino nano ar usb vadu pie datora un logo cik uziet, ar SerialPlot, piemēram tas pat izskatās glīti. nu rakstīt uz sd vēl pāris euro klāt, bez datora. ak 100kHz, nu vvz Labots Aprīlis 11, 2020 - Usins Link to comment Share on other sites More sharing options...
Jurkins Aprīlis 11, 2020 Share Aprīlis 11, 2020 Nesapratu īsti. Tu gribi ierakstīt kaut kādus, piemēram, SPI vai I2S vai UART vai HVZ signālus un pēc tam izmantot kā emulatoru? Link to comment Share on other sites More sharing options...
Jurkins Marts 14, 2021 Share Marts 14, 2021 (labots) Pacelšu mironi (vēl pat gads nav). Sveiks @AndrisBB!😉 Man atkal ir uznācis stm&c++ periods.🤣 STM32 dzimtajā CubeIde, ja projekts ir izveidots kā c/c++ projekts, tad tikai jāpārdēvē main.c par main.cpp un var darboties tālāk pēc vēlēšanās. Bet makefile projektam tādas fīčas nav. Iekš VSCodes sanāk pliks C. Saprotu, ka būtu derīgi iemācīties taisīt makefile "ar roku", pa lielam jau +/- saprotu, kas tur tiek darīts, bet vai tomēr nav kāds vieglāks🙄 ceļš? c projektam makefile ir šitāds. ###################################### # target ###################################### TARGET = project_3 ###################################### # building variables ###################################### # debug build? DEBUG = 1 # optimization OPT = -Og ####################################### # paths ####################################### # source path SOURCES_DIR = \ Application/MAKEFILE \ Drivers/STM32F1xx_HAL_Driver \ Drivers \ Application/User \ Application \ Drivers/CMSIS # firmware library path PERIFLIB_PATH = # Build path BUILD_DIR = build ###################################### # source ###################################### # C sources C_SOURCES = \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc_ex.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c \ Src/stm32f1xx_it.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c \ Src/stm32f1xx_hal_msp.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c \ Src/rtc.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc.c \ Src/gpio.c \ Src/usart.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c \ Src/main.c\ Src/system_stm32f1xx.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c # ASM sources ASM_SOURCES = \ startup_stm32f103xb.s CXX_SOURCES = \ Src/main.cpp ###################################### # firmware library ###################################### PERIFLIB_SOURCES = ####################################### # binaries #####################\################## BINPATH = C:/ARM/MCU/bin PREFIX = arm-none-eabi- CC = $(BINPATH)/$(PREFIX)gcc CXX = $(BINPATH)/$(PREFIX)g++ AS = $(BINPATH)/$(PREFIX)gcc -x assembler-with-cpp CP = $(BINPATH)/$(PREFIX)objcopy AR = $(BINPATH)/$(PREFIX)ar SZ = $(BINPATH)/$(PREFIX)size HEX = $(CP) -O ihex BIN = $(CP) -O binary -S ####################################### # CFLAGS ####################################### # cpu CPU = -mcpu=cortex-m3 # fpu # NONE for Cortex-M0/M0+/M3 # float-abi # mcu MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI) # macros for gcc # AS defines AS_DEFS = # C defines C_DEFS = \ -DUSE_HAL_DRIVER \ -DSTM32F103xB # AS includes AS_INCLUDES = # C includes C_INCLUDES = \ -IInc \ -IDrivers/STM32F1xx_HAL_Driver/Inc \ -IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy \ -IDrivers/CMSIS/Device/ST/STM32F1xx/Include \ -IDrivers/CMSIS/Include CXX_INCLUDES = \ -IInc \ -IDrivers/STM32F1xx_HAL_Driver/Inc \ -IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy \ -IDrivers/CMSIS/Device/ST/STM32F1xx/Include \ -IDrivers/CMSIS/Include # compile gcc flags ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections ifeq ($(DEBUG), 1) CFLAGS += -g -gdwarf-2 endif # Generate dependency information CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" ####################################### # LDFLAGS ####################################### # link script LDSCRIPT = STM32F103C8Tx_FLASH.ld # libraries LIBS = -lc -lm -lnosys LIBDIR = LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections # default action: build all all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin ####################################### # build the application ####################################### # list of objects OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) vpath %.c $(sort $(dir $(C_SOURCES))) # list of ASM program objects OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o))) vpath %.s $(sort $(dir $(ASM_SOURCES))) $(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) @echo $< $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@ $(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR) @echo $< $(AS) -c $(CFLAGS) $< -o $@ $(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile $(CC) $(OBJECTS) $(LDFLAGS) -o $@ $(SZ) $@ $(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR) $(HEX) $< $@ $(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR) $(BIN) $< $@ $(BUILD_DIR): mkdir $@ ####################################### # clean up ####################################### clean: -rm -fR .dep $(BUILD_DIR) ####################################### # dependencies ####################################### -include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) (tutoriāļu ka biezs, bet katrā savādāks pieraksta veids) Pierakstīju : CXX_SOURCES \ main.cpp (main.c no C_SOURCES izdzēsu) CXX_INCLUDES \ CXX = $(BINPATH)/$(PREFIX)g++ Bet pēc tam sadaļā "build applications" uzkāros. Laikam vajadzētu kaut ko šādu: OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(CXX_SOURCES:.cpp=.o))) vpath %.cpp $(sort $(dir $(CXX_SOURCES))) un $(BUILD_DIR)/%.o: %.cpp Makefile | $(BUILD_DIR) ... un šeit uzkaros pavisam. p.s. cenšos tagad iebraukt, bet kā jau nožēlojams programmēšanas amatieris😁 par kompilatoriem un linkeriem zinu gaužām virspusēji. p.p.s Kā var to palagu postā dabūt mazāku? Labots Marts 14, 2021 - Jurkins Link to comment Share on other sites More sharing options...
AndrisBB Marts 14, 2021 Author Share Marts 14, 2021 Man nav konkrētā CubeMX versija, tapēc makefiles pavisam savādāks un nevaru pārbaudīt kas tur nekompilējas. Man ir versija 6.1.0. Iesaku updeitoties, tur ir jaunas fīčas (it īpaši jaunākiem MCU). Faila nosaukumam vai tas .c vai .cpp nav nozīmes, tik cik smukāk, parasta prakse un makefails tā uzrakstīts. Bet nu tas kas ir, tas kompilējas OK. Īpaši neiedziļinājos kompiliera flagost utt, tik pārkopēju C flagus. Visdrīzāk tur vajag kautko pietjūnēt priekš C++. Kautvai gadījumos kad tā HAL bibliotēka griēs izsaukt funkcijas kas ir C++ faila, tad visdrīzāk neies. Ja C++ lieto tikai C failus, tad ganjau nebūs probēmas, bet ja C kompilētais kods sāks izsaukt C++ kodu, tad visdrīzāk neies. Var vienkārši visu pārkompilēt ar g++ un miers. Vienīgas kas viņam nepatika, un nezinu kapēc (tas būtu jāizpēta), ir ka clibs (libnano) gribēja syscallus, tapēc piekopēju syscalls.c failu ko izmantoju viskautkam, pārsvarā priekš printf. Bet pēctam kompilējas. Ieposto kas tev tieši nekompilējas, no plika makefaila jau neko nepateiksi. Makefails prieks Blinky: Spoiler ########################################################################################################################## # File automatically-generated by tool: [projectgenerator] version: [3.11.0-B13] date: [Sun Mar 14 11:01:00 GMT 2021] ########################################################################################################################## # ------------------------------------------------ # Generic Makefile (based on gcc) # # ChangeLog : # 2017-02-10 - Several enhancements + project update mode # 2015-07-22 - first version # ------------------------------------------------ ###################################### # target ###################################### TARGET = Test_makefile ###################################### # building variables ###################################### # debug build? DEBUG = 1 # optimization OPT = -Og ####################################### # paths ####################################### # Build path BUILD_DIR = build ###################################### # source ###################################### # C sources C_SOURCES = \ Core/Src/stm32h7xx_it.c \ Core/Src/stm32h7xx_hal_msp.c \ Core/Src/syscalls.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_eth.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_eth_ex.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim_ex.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c \ Core/Src/system_stm32h7xx.c CXX_SOURCES = \ Core/Src/main.cpp # ASM sources ASM_SOURCES = \ startup_stm32h743xx.s ####################################### # binaries ####################################### PREFIX = arm-none-eabi- # The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx) # either it can be added to the PATH environment variable. GCC_PATH = /home/andris/Documents/Tools/gcc-arm-none-eabi-10-2020-q4-major/bin ifdef GCC_PATH CC = $(GCC_PATH)/$(PREFIX)gcc CXX = $(GCC_PATH)/$(PREFIX)g++ AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp CP = $(GCC_PATH)/$(PREFIX)objcopy SZ = $(GCC_PATH)/$(PREFIX)size else CC = $(PREFIX)gcc AS = $(PREFIX)gcc -x assembler-with-cpp CP = $(PREFIX)objcopy SZ = $(PREFIX)size endif HEX = $(CP) -O ihex BIN = $(CP) -O binary -S ####################################### # CFLAGS ####################################### # cpu CPU = -mcpu=cortex-m7 # fpu FPU = -mfpu=fpv5-d16 # float-abi FLOAT-ABI = -mfloat-abi=hard # mcu MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI) # macros for gcc # AS defines AS_DEFS = # C defines C_DEFS = \ -DUSE_HAL_DRIVER \ -DSTM32H743xx # AS includes AS_INCLUDES = # C includes C_INCLUDES = \ -ICore/Inc \ -IDrivers/STM32H7xx_HAL_Driver/Inc \ -IDrivers/STM32H7xx_HAL_Driver/Inc/Legacy \ -IDrivers/CMSIS/Device/ST/STM32H7xx/Include \ -IDrivers/CMSIS/Include \ -IDrivers/CMSIS/Include # compile gcc flags ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections ifeq ($(DEBUG), 1) CFLAGS += -g -gdwarf-2 endif # Generate dependency information CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" ####################################### # LDFLAGS ####################################### # link script LDSCRIPT = STM32H743ZITx_FLASH.ld # libraries LIBS = -lc -lm -lnosys LIBDIR = LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections # default action: build all all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin ####################################### # build the application ####################################### # list of objects OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) vpath %.c $(sort $(dir $(C_SOURCES))) # list of c++ objects OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(CXX_SOURCES:.cpp=.o))) vpath %.cpp $(sort $(dir $(CXX_SOURCES))) # list of ASM program objects OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o))) vpath %.s $(sort $(dir $(ASM_SOURCES))) $(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@ $(BUILD_DIR)/%.o: %.cpp Makefile | $(BUILD_DIR) $(CXX) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.cpp=.lst)) $< -o $@ $(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR) $(AS) -c $(CFLAGS) $< -o $@ $(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile $(CC) $(OBJECTS) $(LDFLAGS) -o $@ $(SZ) $@ $(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR) $(HEX) $< $@ $(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR) $(BIN) $< $@ $(BUILD_DIR): mkdir $@ ####################################### # clean up ####################################### clean: -rm -fR $(BUILD_DIR) ####################################### # dependencies ####################################### -include $(wildcard $(BUILD_DIR)/*.d) # *** EOF *** syscalls.c Spoiler /** ****************************************************************************** * File Name : syscalls.c * Description : Support files for GNU libc. Files in the system * namespace go here. Files in the C namespace (ie those * that do not start with an underscore) go in .c. ****************************************************************************** * This notice applies to any and all portions of this file * that are not between comment pairs USER CODE BEGIN and * USER CODE END. Other portions of this file, whether * inserted by the user or by software development tools * are owned by their respective copyright owners. * * Copyright (c) 2017 STMicroelectronics International N.V. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted, provided that the following conditions are met: * * 1. Redistribution of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. Neither the name of STMicroelectronics nor the names of other * contributors to this software may be used to endorse or promote products * derived from this software without specific written permission. * 4. This software, including modifications and/or derivative works of this * software, must execute solely and exclusively on microcontroller or * microprocessor devices manufactured by or for STMicroelectronics. * 5. Redistribution and use of this software other than as permitted under * this license is void and will automatically terminate your rights under * this license. * * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************** */ /****************************************************************************** * If LWIP_SOCKET option is enabled: * - include this syscalls.c file ******************************************************************************/ #ifdef __cplusplus extern "C" { #endif /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ /* Support files for GNU libc. Files in the system namespace go here. Files in the C namespace (ie those that do not start with an underscore) go in .c. */ #include <_ansi.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/fcntl.h> #include <stdio.h> #include <string.h> #include <time.h> #include <sys/time.h> #include <sys/times.h> #include <errno.h> #include <reent.h> #include <unistd.h> #include <sys/wait.h> /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ #define MAX_STACK_SIZE 0x2000 extern int __io_putchar(int ch) __attribute__((weak)); // extern int __io_getchar(void) __attribute__((weak)); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* USER CODE BEGIN 3 */ caddr_t _sbrk(int incr) { extern char end asm("end"); static char *heap_end; char *prev_heap_end,*min_stack_ptr; if (heap_end == 0) heap_end = &end; prev_heap_end = heap_end; /* Use the NVIC offset register to locate the main stack pointer. */ min_stack_ptr = (char*)(*(unsigned int *)*(unsigned int *)0xE000ED08); /* Locate the STACK bottom address */ min_stack_ptr -= MAX_STACK_SIZE; if (heap_end + incr > min_stack_ptr) { errno = ENOMEM; return (caddr_t) -1; } heap_end += incr; return (caddr_t) prev_heap_end; } /* USER CODE END 3 */ /* USER CODE BEGIN 4 */ /* * _gettimeofday primitive (Stub function) * */ //#ifdef _SYS_TIME_H_ //struct timezone { // int tz_minuteswest; /* minutes west of Greenwich */ // int tz_dsttime; /* type of dst correction */ //}; //#endif int _gettimeofday (struct timeval * tp, struct timezone * tzp) { /* Return fixed data for the timezone. */ // if (tzp) // { // tzp->tz_minuteswest = 0; // tzp->tz_dsttime = 0; // } return 0; } /* USER CODE END 4 */ /* USER CODE BEGIN 5 */ void initialise_monitor_handles() { } int _getpid(void) { return 1; } int _kill(int pid, int sig) { errno = EINVAL; return -1; } void _exit (int status) { _kill(status, -1); while (1) {} } int _write(int file, char *ptr, int len) { int DataIdx; for (DataIdx = 0; DataIdx < len; DataIdx++) { (void)__io_putchar( *ptr++ ); } return len; } int _close(int file) { return -1; } int _fstat(int file, struct stat *st) { st->st_mode = S_IFCHR; return 0; } int _isatty(int file) { return 1; } int _lseek(int file, int ptr, int dir) { return 0; } int _read(int file, char *ptr, int len) { // int DataIdx; // for (DataIdx = 0; DataIdx < len; DataIdx++) // { // *ptr++ = __io_getchar(); // } return len; } int _open(char *path, int flags, ...) { /* Pretend like we always fail */ return -1; } int _wait(int *status) { errno = ECHILD; return -1; } int _unlink(char *name) { errno = ENOENT; return -1; } int _times(struct tms *buf) { return -1; } int _stat(char *file, struct stat *st) { st->st_mode = S_IFCHR; return 0; } int _link(char *old, char *new) { errno = EMLINK; return -1; } int _fork(void) { errno = EAGAIN; return -1; } int _execve(char *name, char **argv, char **env) { errno = ENOMEM; return -1; } /* USER CODE END 5 */ #ifdef __cplusplus } #endif /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!