Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
STM32 generic board
#21
http://moodle.insa-toulouse.fr/pluginfil...8d-scr.pdf

http://es.elfak.ni.ac.rs/Papers/ARM7%20Procesor.pdf
Reply
#22
Hvala Big Grin
Reply
#23
(03-02-2017, 05:25 PM)YuMERA Wrote: http://moodle.insa-toulouse.fr/pluginfil...8d-scr.pdf

http://es.elfak.ni.ac.rs/Papers/ARM7%20Procesor.pdf

Odlicni textovi.
Reply
#24
Ovo je odlicna knjiga za M3 i M4 jezgra
https://www.amazon.com/Definitive-Guide-...0124080820

Na ovo naleteh, isti autor, M3 jezgra ali sa fokusom na TI Stellaris
https://www.eecs.umich.edu/courses/eecs3...0Guide.pdf

BTW: Razlika izmedju ARM M3 i M4 jezgra (ARMv7) je sto M4 ima dodatne isntrukcije za DSP i ima hardverski Floating Point modul, preodredjen za brzo/masivno signalno procesiranje.
M4 spada medju najjace MCU trenutno na trzistu, ima samo par jacih "specialaca" poput PRU jedinica u BeagleBone Black ili XMOS, ali u klasi klasicnih low-cost MCU M4 je baja.

Danas sam nesto radio sa dsPIC33EP, iskreno namucio sam se za neke proste stvari (I2C EEPROM), ne mozes primer da nadjes koji radi, njihovi primeri pisani pre 5 i vise godina a u medjuvremenu 3 puta menjali kompletno kompajlere, MCP forum na prste teme da pobrojis za ovaj dsPIC sa XC16, sa PicKit3 i ICD3 traaaaaaje dok se ucita program, debuger mi nesto nije hteo ni radi (kod kolege na laptop), dakle samo covek da ...
Debelo razmisljam da batalim to sto sam poceo sa dsPIC i predjem na neko M3 ili M4 jezgro ... za te pare koliko kosta ovaj dsPIC ima cela STM32 plocica kao iz teme, direkt na USB da prikljucis i da radis ko covek ...
Reply
#25
Odlična je knjiga, ima čak i početničkih primjera u Keil IDE, joj sad sam da više dode ta pločica pa da se počne programirat hehe. Ak oš ja naručio dve pločice pa ako želiš pošaljem ti jednu
Reply
#26
(03-02-2017, 11:42 PM)mikikg Wrote: ....
Danas sam nesto radio sa dsPIC33EP, iskreno namucio sam se za neke proste stvari (I2C EEPROM), ne mozes primer da nadjes koji radi, njihovi primeri pisani pre 5 i vise godina a u medjuvremenu 3 puta menjali kompletno kompajlere, MCP forum na prste teme da pobrojis za ovaj dsPIC sa XC16, sa PicKit3 i ICD3 traaaaaaje dok se ucita program, debuger mi nesto nije hteo ni radi (kod kolege na laptop), dakle samo covek da ...
Debelo razmisljam da batalim to sto sam poceo sa dsPIC i predjem na neko M3 ili M4 jezgro ... za te pare koliko kosta ovaj dsPIC ima cela STM32 plocica kao iz teme, direkt na USB da prikljucis i da radis ko covek ...

 Potpuno te razumem, i ja slicno razmlisljam, pa cak i kao alternativu za 8bits  PIC18 "masine". Na (ne)srecu koristim PIC18F87j10 koji je nekim cudom jeftin, a nakrcan periferijama i flesom, tako da zamena nece ici glatko... Kad bi nasao neki poredljiv ARMic po ceni prvenstveno, ne bi bilo dileme.

Sa STovim M4 MCUovima imam do sada samo pozitivna iskustva, kada se kod lepo optimizuje to radi nestvarno brzo (npr audio, grafika...) A razvoj je neuporedivo brzi: debug, 32bita aritmetika , puno RAMa, dolaze sa bootloaderom npr..
Reply
#27
Gledao nesto po oglasima i recimo ima I2C interface za LCD display, unutra neki PCFxxxx expander i to kosta oko 200 RSD, posle pogledam STM32F103 plocica kosta 350RSD, ma necu da uzimam expander kad imam za te pare ceo 32bitni procesor, ima da ga stavim da radi kao onaj PCF ili mozda da prebacim na SPI Smile Tako bih drasticno rasteritio glavni procesor jer preko SPI mogu vrlo brzo da prenesem celu poruku za LCD pa nek se on bavi sa tajmingom za LCD (koji je relativno spor).
Reply
#28
I ja lagano prelazim sa PIC-ova na STM32, prvenstveno zbog podjednako loše podrške u softverskom smislu kod oba proizvođača. I dalje smatram da su PIC-ovi povoljniji sa cenom i da uopšte nisu za podcenjivanje (PIC32 za multimediju, dsPIC serija za industrijske odnosno motor control aplikacije i konačno PIC16F za cenovno povoljne a robustne uređaje).

Ono što je fantastično kod STM-ova to je CubeMX. Alatka je fenomenalna.
Ono što je loše kod STM-a (i dalje tvrdim Smile to su HAL biblioteke koje su veoma neoptimizovane i prekonfuzne. Takođe, kao što je Miki imao loša iskustva sa I2C na dsPIC-ovima, ja sam imao sa STM-om. Da ne govorim o USB-u i malo komplikovanijim periferijama. Tu je tek haos kod STM-a. Zvanične biblioteke i posle n revizija i dalje imaju bagove koji su prijavljeni pre par godina. Tako da, čitajte forume. Više vrede nego zvanična dokumetacija.

Kad smo kod dokumentacije, tvrdim da je Microchip za dve klase bolji po tom pitanju. ST je opet šampion u konfuznoj dokumentaciji.

Trenutno meni omiljeni STM32 mi je STM32L073C koji je relativno korektan sa cenom (5.5 Eura sa PDV-om) obzirom na 192kBy FLASH-a, 20kBy RAM-a i 6kBy EEPROMa, USB KEIL MDK ja za Cortex M0 FREE.

Što se tiče fabrički ugrađenog bootloader-a kod STM-a, pažljivo sa tim. Na nekim ne radi kako treba (potvrđeno mi je iz STM-a), a na svim postoji problem ako se nekim spoljnim signalom zauzme pogrešan port u odnosu na onaj koji ste namenili tome. Primer, ako imate GPS prijemnik na UART1 a koristite bootloader na UART2, nećete moći da ga koristite. Čim se pojave podaci na UART1 "glupi" bootlaoder prepozna da ste na UARTu1 i to je kraj. Morao sam da switchevima gasim GPS itd... Na kraju sam sam pisao bootlaoder i tako mi je bilo lakše.

A evo i jednog simpatičnog Nuclea gde dobijate MCU + Programmer Debuger po relativno lepoj ceni (14.4 E sa PDV.om). Može se koristiti i kao ST-LINK2 pošto poseduje izvode na PCB-u.
http://www.st.com/content/st_com/en/prod...031k6.html
Reply
#29
Na primer sad ce mi trebati hardwerski kvadraturni enkoder za STM32 (to sam osposobio na dsPIC i radi stvarno dobro, 8000 podela po krugu, vrteo sam ga rucno i nisam uspeo da zaglupim program), trenutno u Arduino nema biblioteka za to (ili nisam nasao), meni se vise isplati da napravim biblioteku za taj HW QEI za Arduino, da podelim tamo biblioteku sa drustvom i da ostatak programa napisem za dan-dva!
Reply
#30
Ovo je isto vrlo zanimljiva kombinacija:
https://github.com/blacksphere/blackmagic/wiki

https://www.youtube.com/watch?v=58r3Uk-ooYI
Reply
#31
@gigabyte091 ovo je koristan video za tebe, poucan je i za ostale, lik je objasnio neke fundamentalne stvari Arduina i kako se iza toga kompajlira program i na kraju kako to isto uraditi sa GNU alatima:
https://www.youtube.com/watch?v=ohUWwQQ4ORA
Reply
#32
(03-03-2017, 02:08 PM)mikikg Wrote: Na primer sad ce mi trebati hardwerski kvadraturni enkoder za STM32 (to sam osposobio na dsPIC i radi stvarno dobro, 8000 podela po krugu, vrteo sam ga rucno i nisam uspeo da zaglupim program), trenutno u Arduino nema biblioteka za to (ili nisam nasao), meni se vise isplati da napravim biblioteku za taj HW QEI za Arduino, da podelim tamo biblioteku sa drustvom i da ostatak programa napisem za dan-dva!

Da kod dsPIC-a to radi fantastično. Ja sam upravo završio jedan projekat sa enkoderom i STM32L073, i za sada deluje da radi kako treba. Koristim HW QEI ulaze STM32-ke.

Zavisno od STM32 koga koristiš i tajmera koji ima (32bitni ili 16bitni) rutine se razlikuju. Veći problem su 16bitni tajmeri za koje je potrebno da se uradi expand na 32.
Evo rutina za kvadraturni enkoder, testirano sa 16 bitnim tajmerom konkretno na STM32L073. Pogledaj TestEncodera.ioc fajl u CubeMX gde ćeš videti pinout.


.zip   STM32_TestEncodera2.zip (Size: 1,23 MB / Downloads: 10)
Reply
#33
Odlicno Nebojsa, bas cu da probam, trebace mi 32bitna varijanta za STM32F103, ako se ne snadjem znam gde da pitam Smile
Reply
#34
@mikikg
Koliko vidim STM32F103 ima samo 16bitne tajmere.
Primer koji sam postavio je upravo za 16bitne tajmere i softverski je urađena extenzija na 32bitnu poziciju. Tako da će ti odgovarati Smile

Recimo kod STM32F4xx postoje dva 32bitna tajmera na koje se može povezati kvadraturnu enkoder pa je i pozicija 32bitna bez komplikacija u FW-u.

Ako ti treba i INDEX ulaz za detekciju nulte pozicije, onda se taj signal uvodi na bilo koji INT pin MCU-a gde se jednostavno resetuje TMR koga si odabrao.
Reply
#35
Taj arduino baš pojednostavljuje programiranje, ali 80% toga doslovno ne prikazuje, nego je sve skriveno iza kulisa. Otvorio sam blinky primjer u Keil i tu je puno više toga od arduina, sami dio di je blink sam prepoznao i nije toliko drugačije od arduina, iako ima više linija koda, ali ostatak je potpuno nov barem za mene haha.

Onda sam naišao na ovaj primjer koji je puno drugačiji od ovog primjera u programu

Code:
#include "stm32f10x_conf.h"

/* led connected to a gpio pin */
#define LED1_PIN    GPIO_Pin_0
#define LED1_PORT   GPIOB
#define LED2_PIN    GPIO_Pin_3
#define LED2_PORT   GPIOC
#define LED3_PIN    GPIO_Pin_0
#define LED3_PORT   GPIOA
#define LED4_PIN    GPIO_Pin_0
#define LED4_PORT   GPIOE


/* user functions */
void delay(unsigned long count);

int main()
{
   GPIO_InitTypeDef GPIO_InitStructure;



   /* enable clock on GPIOB peripheral */
   //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOA, ENABLE);                          


   /* set pin output mode */
   GPIO_InitStructure.GPIO_Pin = LED1_PIN;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(LED1_PORT, &GPIO_InitStructure);
   //LED 2
   GPIO_InitStructure.GPIO_Pin = LED2_PIN;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(LED2_PORT, &GPIO_InitStructure);
   //LED 3
   GPIO_InitStructure.GPIO_Pin = LED3_PIN;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(LED3_PORT, &GPIO_InitStructure);
   //LED 4
   GPIO_InitStructure.GPIO_Pin = LED4_PIN;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(LED4_PORT, &GPIO_InitStructure);
   while(1)
   {
       GPIO_SetBits(LED1_PORT, LED1_PIN);  // set pin high
       delay(2000000);
       GPIO_ResetBits(LED1_PORT, LED1_PIN);    // set pin low
       delay(2000000);

       GPIO_SetBits(LED2_PORT, LED2_PIN);  // set pin high
       delay(2000000);
       GPIO_ResetBits(LED2_PORT, LED2_PIN);    // set pin low
       delay(2000000);

       GPIO_SetBits(LED3_PORT, LED3_PIN);  // set pin high
       delay(2000000);
       GPIO_ResetBits(LED3_PORT, LED3_PIN);    // set pin low
       delay(2000000);

       GPIO_SetBits(LED4_PORT, LED4_PIN);  // set pin high
       delay(2000000);
       GPIO_ResetBits(LED4_PORT, LED4_PIN);    // set pin low
       delay(2000000);
   }
   //return 0;
}



void delay(unsigned long count)
{
   while(count--);
}
Reply
#36
Poterao sam Black Magic Probe!
Prvo sam sa ST-LINK v2 (sa STM32 Discovery) isprogramirao jednu Blue Pill plocicu i pretvorio je u BMP.
Posle sam probao sa BMP da isprogramiram drugu Blue Pill plocicu goristeci GDB debuger (komanda 'load my_firmware.elf') i to radi!!!
Takodje radi BMP iz Arduino IDE, vrlo brzo i bez petljanja sa stiskanjem reset-a flesuje target STM32, dakle to sve uradi za nekoliko sekundi.
Isto je zanimljivo kada se ne koristi STM32duino bootloader i prakticno izbaci podrska za USB, glavna loop() funkcija radi oko 5x brze!

Sama BMP ima i jedan dodatni seriski port (prijavi se u sistemu kao dva uredjaja) i preko toga moze da se uveze i seriski na target device (nisam jos izveo kablice).

BTW: Jumpere za boot sam poskidao sa ovih plocica, smetaju mi da pritisnem reset a i nemam vise potrebe za te opcije pored ove BMP alatke Smile 

[Image: attachment.php?aid=22901]


Attached Files Thumbnail(s)

Reply
#37
Radi i seriski port na BMP, vrlo ugodno i brzo za rad kada je odvojena komunikacija od kanala za programiranje (potrose se 4 nozice na target MCU).

Inace su najavili za BMP i podrsku za RPi1,2,3 i Beagle Bone Black, to znaci da ce sa tim moci da se programira "bare metal" ti moduli, programiranje bez Linux-a na najnizem mogucem nivou, kao sto pisemo code za ove STM32 tako i za ARM Cortex A8 i A9 samo se program izvrsava na 1+GHz i to na vise core-ova Smile

A vidim da ce i to da svedu na nivo Arduina, ovaj IDE obecava, sve sto treba su zaokruzili pod jednu kapu, multiplatformsko programiranje, pluginovi, biblioteke, cloud servisi, nisam stigao jos ni da pregledam sve ...
http://platformio.org
Reply
#38
Ja sam instalirao baš da vidim kakav je, traži da bude instaliran phyton ili sam ja nekaj krivo napravil XD

Inače prolazio sam neki mali tutorijal di je čovjek objašnjavao registre i radio jednostavan blink program.

Code:
#include "stm32f10x.h"

int main(){
    
       RCC->APB2ENR |= (1<<4);
       GPIOC->CRH |= (1<<20) | (1<<21);
       GPIOC->CRH &= ~ (1<<22) | (1<<23);
 
    while(1){
        
        int i = 0;
        GPIOC->BSRR = (1<<13);
        for(i=0; i <= 500000; i++);
        GPIOC->BSRR = 1<<(13+16);
        for(i=0; i <= 500000; i++);
        
}
}
Zanima me kako dobiti nekakvu poznatu vrijednost blinkanja, ovdje je on koristio for petlju i neku bezveznu veliku vrijednost.
Reply
#39
(03-05-2017, 07:22 AM)gigabyte091 Wrote: Zanima me kako dobiti nekakvu poznatu vrijednost blinkanja, ovdje je on koristio for petlju i neku bezveznu veliku vrijednost.

Postoje dva načina da se dobije tačan period na koji se želi, u našem primeru, blinkanje LED diode. Prvi način a često pogrešan je upravo for petlja kao u tvom primeru. Jednostavno, vrednost koja je postavljena u for petlji je ponavljanje beskorisne sekvence ne bi li se potrošilo vreme do naredne promene pina na koji je vezana LED dioda i tako u-krug.

Ova vrednost prilično zavisi od frekvencije i brzine MCU-u. Tako da je potrebno štelovati vrednost for petlje u zavisnosti od toga.

Drugi način je da se iskoristi jedan tajmer čiji osnovni klok se može postaviti da je recimo 1mS, i umesto for petlje primeniti sledeću proceduru:
postaviti tajmer na 0 zatim ući u beskorisnu petlju (while) koja čeka da odabrani tajmer postigne vrednost 1000 (ako tajmer broji unapred) i kada se ona dostigne onda onda promeniti stanje pina na koji je LED dioda, itd... Na ovaj način se postiže tačno 1s blinkanja LED.

Međutim, preporuka je da se ovakve "blocking" petlje izbace kompletno iz koda.

Neka moja preporuka je da se uradi sledeće:
Napravi se interapt rutina koja ima osnovni period od recimo 1ms, i u njoj postaviš jednu promenljivu-brojač recimo postaviš jedan brojač Count1sec a kada kod "skoči" na interapt rutinu ovaj brojač uvećaš za 1. Kada se ispuni uslov Count1sec >= 1000, resetuješ ga na 0 i postavljaš fleg koga ćemo nazvati na_1sec = 1. Još jedino što ti je preostalo je da u main petlji postaviš proveru ovog fleg-a i kada je on na "1" okrećeš stanje pina na kome je LED dioda i resetuješ na_1sec = 0, i tako u krug...

Evo konkretnog primera kako postaviti da LED blinka na 100ms, koristeći SysTick tajmer u STM32xx koristeći HAL biblioteke...


Code:
/**
* @brief This function handles System tick timer.
*/
void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */
    static unsigned char Count100ms = 0;
    
  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  HAL_SYSTICK_IRQHandler();
  /* USER CODE BEGIN SysTick_IRQn 1 */
    if(++Count100ms >= 100)
    {
        Count100ms = 0;
        na_100ms = 1;
    }

  /* USER CODE END SysTick_IRQn 1 */
}

U main petlji ....

 /* Infinite loop */
 /* USER CODE BEGIN WHILE */
 while (1)
 {
        if(na_100ms)
        {
            signed short EncCnt;
            
            na_100ms = 0;
            HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
        
        }
            
 /* USER CODE END WHILE */

 /* USER CODE BEGIN 3 */

 }
 /* USER CODE END 3 */
Reply
#40
Nisam uspio u Keil nać HAL biblioteku, ima samo STM Standard library.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)