Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

STM32F3 + KEIL problem

[es] :: Elektronika :: Mikrokontroleri :: STM32F3 + KEIL problem

Strane: < .. 1 2 3 4

[ Pregleda: 11010 | Odgovora: 67 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.isp.telekom.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: STM32F3 + KEIL problem02.01.2014. u 13:55 - pre 124 meseci
Citat:
bogdan.kecman:
meni se sad malo mesa implementacija izmedju 16bit pic i msp430, mips i
cortex jezgra no ako se dobro secam nvic na cortex-u radi tako sto dok
traje higher prio interrupt ovi nizeg prioriteta se stekuju i onda se
izvrse kada se zavrsi ovaj high prio interrapt + za razliku od klasicnog
vic-a cortex ima tu neku trailing foru da kada zavrsi high prio
interrupt ako postoji na cekanju lower prio interrapt on umesto da vrati
sve sa steka, pa turi opet sve sto treba na stek on samo prodje u drugi
interrapt i tu cuva nekih 12tak taktova u odnosu na "normalan" vic ..
takodje ima foru da kada pocne manje bitan interapt ako se desi high
prio interapt tokom pripreme za ulazak (setap steka, dizanje na stek
cega treba etc) cortex ce odma da uleti u high prio umesto da zavrsi sta
je poceo i udje u low prio pa njega prekine (kao sto rade normalni
vicevi) ... e sad detalja se bas ne secam a i moguce da je ovo cela
prica vezana za npr mips a da sam je ja dodelio cortex-u :D mada mislim
da je to cortex prica ...

inace sa samom implementacijom i koristenjem toga nemam veliko iskustvo
posto ja za ove moje potrebe imam onaj glavi core clock koji uzima svega
nekoliko taktova i jedan timer i to je to ... ostalo su externi hw
interapti koji su sami po sebi spori


Posle male pauze vratio sam se na STM32F3 …

Elem, ovo sa prioritetima interapta me je zekilo jer nisam konfigurisao kako treba.

Ja sam se bezuspesno vrteo oko ovoga:

Code:

  ...
  NVIC_InitTypeDef NVIC_InitStructure;
    
  /* Enable the TIM3 gloabal Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //nije imalo efekta sta god stavio
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //nije imalo efekta sta god stavio
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
    
  NVIC_SetPriority(TIM3_IRQn,0); //OVO JE BILO NEOPHODNO!
  ...


Dakle trebalo je da se doda NVIC_SetPriority() nakon cega je ta interapt rutina tj IRQ linija kojoj sam dodelio 0 postala "glavna". Ostalim linijama je naravno postavljen nizi prioritet (1,2,3 …).
U toj rutini sam za debugiranje imao toggle jednog izlaznog pina i sad je to vremenski "zakucano u mestu", nema jitter i ostalih problema koje sam imao pre nego sto sam to dodao!
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.isp.telekom.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: STM32F3 + KEIL problem02.01.2014. u 22:36 - pre 124 meseci
Sad je DAC dosao na red :)

Ovog puta necu da postavljam pitanja :) nego da postavim najprostiju mogucu varijantu za koriscenje internog DAC-a, bez DMA i bez TIMera.
Ja ovo pisem da bi eventualno drugi clanovi imali bar neke koristi od toga a i samom sebi kao mali podsetnik ;)

Code:

#include "stm32f3_discovery.h"

void dac_init() {
  
  DAC_InitTypeDef DAC_InitStructure;
  GPIO_InitTypeDef GPIO_InitStruct;

  /* DAC Periph clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

  /* GPIOA clock enable */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

  /* GPIO CONFIGURATION of DAC Pin PA4 */
  GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_4;
  GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AN;
  GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* DAC channel 1 Configuration */
  DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
  DAC_Init(DAC_Channel_1, &DAC_InitStructure);

  /* Enable DAC Channel 1 */
  DAC_Cmd(DAC_Channel_1, ENABLE);

}

void dac_update(uint16_t dac_value) {
    
    /* Set DAC Channel1 DHR12L register */
    DAC_SetChannel1Data(DAC_Align_12b_R, dac_value); 
    
}


Dakle pozove se jednom dac_init() i posle npr dac_update(2048) da postavi 1/2 izlaznog napona / reference na PA4 pinu.

Komplikovanije primere sa DMA i TIMerima mozete naci naravno u Peripheral_Examples.

Sad treba samo malo da iscackam kako da uglavim jednu referencu za ADC i DAC (LM385Z 2.5V) posto bez toga je besmisleno raditi, mnogo je prljav 3V3 rail.
Na F4 je to bilo prosto, zaletuje se preko jednog kondenzatora, nadam se da je i ovde slicno.

UPDATE:
Vezano za dodatnu spoljnu referencu sa LM385Z, za DiscoveryF4 se ona samo zaletuje preko tantal 1uF kondenzatora C23 jer tu vec ima jedan 47ohm otpornik R23.
Za DiscoveryF3 se zaletuje preko takodje 1uF tantal kondenzatora C16 ali MORA da se skine kratkospojnik R31 i da se stavi isto recimo 47ohm otpornik na njegovo mesto, dakle predvideli su za "budzenje" ;)

[Ovu poruku je menjao mikikg dana 03.01.2014. u 00:22 GMT+1]
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

Risto.
Risto Pejasinovic
Crvena Crkva

Član broj: 192157
Poruke: 81
62.240.22.*



+10 Profil

icon Re: STM32F3 + KEIL problem06.01.2014. u 21:50 - pre 124 meseci
mikikg, da li mozes da mi posaljes ako nije problem tu biblioteku sto si napisao za lcd, na f3discovery.
Pokusavam da napisem, ali da bar vidim kako treba da izgleda kod.
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.isp.telekom.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: STM32F3 + KEIL problem07.01.2014. u 07:15 - pre 124 meseci
Evo zip arhiva u prilogu.

Nije bas neki savrsen primer ali ces se snaci u svakom slucaju sta i kako treba da odradis.
Jos ako bi odradio preko SysTickTimer-a one delay funkcije to bi bilo drasticno bolje a mozes i da sherujes taj code ;)

Koristi se ovako:
Code:

    //Inicijalizuj LCD
    LCD_Init_pins();
    LCD_Display_init();
    LCD_cursor_control (0, 0);
    LCD_send_string("[DSP SMPS + PID]");

    LCD_goto_home_line2();
    LCD_send_string("Plese wait ...");


BTW: Malo sam ja "uleteo" u ovaj STM32 na brzinu, dosta stvari sam manje-vise napamet radio i tek sad neke stvari pocinjem dosta detaljnije da shvatam posle citanja ove knjige:
The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors, 3rd Edition
Odlican prirucnik za pocetnike a i verovatno za iskusnije korisnike, sve detalje su prosli i jako lepo opisali + dosta su se vezali bas za Keil okruzenje.
Srdacno preporucujem da "nabavite" ovu knjigu.
Citajuci tu knjigu kontam da je ovo M4 fenomenalno jezgro za "control" aplikacije. Veoma veoma ozbiljan procesor!

[Ovu poruku je menjao mikikg dana 07.01.2014. u 08:44 GMT+1]
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
Prikačeni fajlovi
 
Odgovor na temu

Risto.
Risto Pejasinovic
Crvena Crkva

Član broj: 192157
Poruke: 81
62.240.22.*



+10 Profil

icon Re: STM32F3 + KEIL problem07.01.2014. u 10:33 - pre 124 meseci
E hvala to mi treba.
A da odradim preko busy flag-a umesto delaya?
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.isp.telekom.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: STM32F3 + KEIL problem07.01.2014. u 13:59 - pre 124 meseci
Delay ti treba u svakom slucaju u prvih nekoliko koraka inicalizacije a cekanje busy flaga ima odradjeno tu u LIB ali nesto mi nije radio kako treba, ne znam sto (zato je taj deo logike disablovan).
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

Risto.
Risto Pejasinovic
Crvena Crkva

Član broj: 192157
Poruke: 81
62.240.22.*



+10 Profil

icon Re: STM32F3 + KEIL problem07.01.2014. u 14:21 - pre 124 meseci
Aha tek sad vidim nejasan im je ovaj datasheet.
Pokusacu da poteram busyflag i da zamenim sa systicktimer delay-om, pa cu da objavim kod.
Dobro ti je ovo sa bitwiseAND da saljes jedan nibble ja se toga nikad ne bih setio :D.

Da ti nije mozda ovo greska
Code:

void LCD_wait_busy_flag (void) {
    //postavi R/W na 1
    GPIO_SetBits(LCD_RW);
    
    //postavi da D7 bude ulaz
    GPIO_Init_Mode(LCD_D7,     GPIO_Mode_IN);
    
    //cekaj dok linija D7 ne bude 0
    while (GPIO_ReadInputDataBit(LCD_D7) == 0) {}  // ti bi trebao da se vrtis u petlji dok je lcd_d7== 1 a ne 0 ?
                                                      // znaci while (GPIO_ReadInputDataBit(LCD_D7) == 1) {}
    
    //vrati da D7 bude izlaz
    GPIO_Init_Mode(LCD_D7,     GPIO_Mode_OUT);

    //postavi R/W na 0
    GPIO_ResetBits(LCD_RW);    
}


P.S. Ne radi ni sa tim...

[Ovu poruku je menjao Risto. dana 07.01.2014. u 15:36 GMT+1]
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.isp.telekom.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: STM32F3 + KEIL problem08.01.2014. u 02:56 - pre 124 meseci
Mozda je opet tu neki glup problem sa optimizacijom iz kompajlera pa ignorise tu petlju (jer je prazna), mada nebi trebalo, ne znam.

Ili je mozda problem na nivou HW-a, neki pull-up/down otpornik ili tako nesto.

Nezgodno je to ispratiti kada je sve vec ispisano, mora detaljno da se ide korak po korak i pratiti sta se tacno desava.

Zaboravio sam sad tacno ali mislim da mi je na nekim mestima (u nekim delovima cele te procedure pisanja na LCD) ona radila a da mi je iskrso problem kada sam hteo to svuda da implementiram.
To je pitanje na koje nisam nasao odgovor (jer se nisam dovoljno posvetio analizi problema) tj da li moze da se oslonimo na cekanje busy flag-a u svim fazama inicalizacije i pisanja na LCD.

Meni je tako kako stoji sa delay radilo sa stotinama FPS osvezavanjem pa se zato nisam mnogo ni bavio tim problemom, bilo mi je to vise nego dovoljna brzina a naravno i da je sve ispalo sporije nebi me mnogo tangiralo jer vremenski kriticni taskovi/funkcije nisu u vezi sa tim rutinama, tj ne cekam ja da zavrsi pisanje nego radim te sve stvari odvojeno po intereptima.

Naravno valjalo bi da se sve to lepo skocka da bude jedna fina univerzalna LIB ali jednostavno nisam stigao to sve da odradim.
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: STM32F3 + KEIL problem

Strane: < .. 1 2 3 4

[ Pregleda: 11010 | Odgovora: 67 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.