Otazky ohladom STM32
Moderátori: psichac, Moderátori
-
- Pokročilý člen
- Príspevky: 626
- Dátum registrácie: 05 Nov 2009, 00:00
- Bydlisko: Bratislavský kraj
Otazky ohladom STM32
Ahojte, zalozil som toto vlakno pretoze sa ucim programovat STM32, konkretne STM32L011. Predpokladam, ze casom otazok bude viac bud ohladom HW alebo SW.
Mam otazku ohladom casovacov. Potreboval by som si naprogramovat casovac, ktory po urcitom case vyvola prerusenie. Ked vsak citam manual, tak tam pisu, ze napr. TIM2 ma 4 kanaly. Na a tieto TIM2_CHx su na niektorych konkretnych pinoch ako alternativna funkcia. Naco mi je casovac na pine ?
Mam otazku ohladom casovacov. Potreboval by som si naprogramovat casovac, ktory po urcitom case vyvola prerusenie. Ked vsak citam manual, tak tam pisu, ze napr. TIM2 ma 4 kanaly. Na a tieto TIM2_CHx su na niektorych konkretnych pinoch ako alternativna funkcia. Naco mi je casovac na pine ?
0
-
- Ultimate člen
- Príspevky: 2582
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: Otazky ohladom STM32
To ak by ste chceli napríklad pwm. Ak tieto časti nenastavíte, máte periodic interrupt. Takisto ak pin nenastavíte na alternate function a nevyberiete AFx zodpovedajúcu timeru, tak timer ten pin nebude ovplyvňovať a môže sa použiť inak.
0
-
- Pokročilý člen
- Príspevky: 626
- Dátum registrácie: 05 Nov 2009, 00:00
- Bydlisko: Bratislavský kraj
Re: Otazky ohladom STM32
Myslel som, ze PWM sa robi prave v periodic interrupt a ovladanim niektoreho konkretneho pinu. To teda znamena, ze ak budem chciet v nejakom projekte pouzit PWM, tak obvod musim navrhnut tak, aby som pouzil niektory z kanalov casovaca a nie hociktory pin.
0
-
- Ultimate člen
- Príspevky: 2582
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: Otazky ohladom STM32
Softwarové pwm sa dá aj v ISR cez gpio. Obvykle sa používa hardwarové pwm na kanáloch timera, pretože cpu iba nastaví timer a potom už nemusí robiť nič.
Takže áno, tam kde sa predpokladá pwm, snažiť sa použiť pin ktorý má voľný kanál na niektorom timeri. Ak už je dps hotová a nedá sa cez kanály timera, dá sa to zachrániť softwarovým generovaním pwm, na úkor zaťaženia cpu.
Takže áno, tam kde sa predpokladá pwm, snažiť sa použiť pin ktorý má voľný kanál na niektorom timeri. Ak už je dps hotová a nedá sa cez kanály timera, dá sa to zachrániť softwarovým generovaním pwm, na úkor zaťaženia cpu.
0
-
- Ultimate člen
- Príspevky: 2582
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: Otazky ohladom STM32
Ale aby sme si rozumeli, prerušenie s pwm nijako nutne nesúvisí. Môžete mať čítač ktorý generuje pravidelne prerušenie a negeneruje pwm. Takisto môžete mať čítač ktorý generuje pwm signál, a nie je k tomu vôbec treba prerušenia.bibibo napísal:Myslel som, ze PWM sa robi prave v periodic interrupt a ovladanim niektoreho konkretneho pinu.
0
-
- Pokročilý člen
- Príspevky: 626
- Dátum registrácie: 05 Nov 2009, 00:00
- Bydlisko: Bratislavský kraj
Re: Otazky ohladom STM32
Narazil som na dalsi problem s ktorym sa trapim uz treti den. Mam k LPUART pripojeny GPS modul, ktory vysiela NMEA protokol s rychlostou 9600bps a viem ho prepnut na binarny protokol OSP. OSP protokol na rychlosti 9600bps funguje bez problemov. Problem ma vsak ak nastavim LPUART a aj GPS modul na rychlost 115200bps. Vtedy mi ten OSP protokol dobre nefunguje a niekde sa mi to zasekne. MCU mi bezi na MSI 2.097MHz, tak podla manualu by rychlost 115200bps mal zvladnut. Prikladam kod.
NMEA data su zakoncene znakom '\n' a OSP su zakoncene 0xB3 = 179. Ten USART2_write nemam este doladeny, ale pravdepodobne sa mi to zasekne niekde v tom preruseni. Tak ako pisem, staci len ked zmenim vsetko na rychlost 9600bps a OSP protokol funguje. Ziadny iny zasah do programu nerobim. Poradite kde moze byt problem ?
Kód: Vybrať všetko
void LPUART1_IRQHandler(void)
{
led_on();
char t;
while (!(LPUART1 -> ISR & USART_ISR_RXNE)){}
t = LPUART1 ->RDR;
if ( t != 179 && t !='\n')
{
rxBuf_LPUART1[rxIndex_LPUART1] = t;
rxIndex_LPUART1 ++;
led_off();
//rxIndex_LPUART1 = 0;
}
else if (t =='\n' ){//led_off();
memcpy (command, rxBuf_LPUART1, rxIndex_LPUART1);
//command[rxIndex_LPUART1] = 179;
command[rxIndex_LPUART1] ='\n';
command[rxIndex_LPUART1 + 1] = '\0';
rxIndex_LPUART1 = 0;
txFlag_USART2 = 1;
}
else if (t == 179) {
memcpy (command, rxBuf_LPUART1, rxIndex_LPUART1);
command[rxIndex_LPUART1] = 179;
//command[rxIndex_LPUART1] ='\n';
command[rxIndex_LPUART1 + 1] = '\0';
rxIndex_LPUART1 = 0;
txFlag_USART2 = 1;
}
}
Kód: Vybrať všetko
while (1)
{
if (txFlag_USART2 == 1)
{
USART2_write(command);
txFlag_USART2 = 0;
}
}
Kód: Vybrať všetko
void USART2_write(char *Buffer)
{
while (*Buffer != 179){
while (!(USART2 -> ISR & USART_ISR_TXE)) {}
USART2->TDR = *Buffer++;
}
}
0
- Tribec Zacks
- Pokročilý člen
- Príspevky: 711
- Dátum registrácie: 26 Jún 2010, 00:00
- Bydlisko: Levice / Cork IRL
- Vek: 41
- Kontaktovať používateľa:
Re: Otazky ohladom STM32
bibibo, pozri sa ako mas nastaveny prescaler na APB1, musi byt na 1, inak bude uart clocknuty nizsie ako core, /2 /4..., potom cekni ako mas nastaveny oversampling na uarte. a do tretice, z prerusenia volas led on/off funkcie, ak to seriozne potrdbujes, definuj ich ako inline. kodu mas v preruseni strasne vela (volanie inych funcii a specialne memcopy). z prerusenia by si nemal volat kod, ktory sa da volat z inych miest, tiez je velmi pravdepodobne ze ti ten handler nestihne skoncit ked primas data 12x rychlejsie ako na 9600baud rate.
ak ti mozem poradit, prestuduj DMA sekciu v datashite, specialne periperal to memory mod, taktiez pozri na uarte CMIE bit v CT1 registri mozes ho pouzit na stopnutie dma vtedy kedy treba (pozri do DS a dojde ti to). v preruseniach let setni flagy podla ktorych hlavny loop bude vedet co robit, nesnaz sa spracovat data v handleri. taktiez dma podporuje double buffer teda vie zapisovat do jedneho buferu kym ti cpu spracuje druhy, prerusenia ti oznamia co to robi a podla flagov budes vedet ktory bufer spracovavat dalej
neboj sa pouzivat hw toho mcu
ak ti mozem poradit, prestuduj DMA sekciu v datashite, specialne periperal to memory mod, taktiez pozri na uarte CMIE bit v CT1 registri mozes ho pouzit na stopnutie dma vtedy kedy treba (pozri do DS a dojde ti to). v preruseniach let setni flagy podla ktorych hlavny loop bude vedet co robit, nesnaz sa spracovat data v handleri. taktiez dma podporuje double buffer teda vie zapisovat do jedneho buferu kym ti cpu spracuje druhy, prerusenia ti oznamia co to robi a podla flagov budes vedet ktory bufer spracovavat dalej
neboj sa pouzivat hw toho mcu
0
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.
- lucky62
- Zaslúžilý člen
- Príspevky: 1151
- Dátum registrácie: 14 Feb 2012, 20:16
- Bydlisko: Liptovský Mikuláš, SK
Re: Otazky ohladom STM32
Na konfiguráciu hodín doporučujem STM32CubeMX.
Jednoducho vyberieš procesor, navolíš funkciu pinov: a potom sa hráš s hodinami.
Ak je v konfigurácii hodín chyba, program to ukáže.
Jednoducho vyberieš procesor, navolíš funkciu pinov: a potom sa hráš s hodinami.
Ak je v konfigurácii hodín chyba, program to ukáže.
0
-
- Pokročilý člen
- Príspevky: 626
- Dátum registrácie: 05 Nov 2009, 00:00
- Bydlisko: Bratislavský kraj
Re: Otazky ohladom STM32
No, prescaler APB1 nestaveny nemam a ani oversampling. Led on/off som tam dal len pre kontrolu. Vyhodim to odtial. Tiez som uvazoval, ze to skusim s DMA, ale nemam v tom ziadnu skusenost. Takze nic ine mi neostava len to nastudovat a skusat. Dam vediet ako to dopadlo.
0
-
- Ultimate člen
- Príspevky: 2582
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: Otazky ohladom STM32
Tak potom by sa hodilo skontrolovať reset hodnoty. Prescaler je nejako nastavený aj keď sa ho nedotknete, je to v reference manuáli. Takisto všetky parametre všetkých periférii majú svoje reset hodnoty.
0
-
- Pokročilý člen
- Príspevky: 626
- Dátum registrácie: 05 Nov 2009, 00:00
- Bydlisko: Bratislavský kraj
Re: Otazky ohladom STM32
Ahojte, robim si zariadenie IOT a je tam osadeny STM32L073. Zariadenie bude napajane z baterie. Rad by som vsak vyuzil aj USB CDC. Docital som sa, ze pre komunikaciu USB vyzaduje zbernica 48Mhz. Chcel by som vsak docielit to, ze ked sa USB nepouziva, tak by som znizil frekvenciu, aby MCU mal nizsi odber. Nedocital som sa nikde akym sposobom je mozne toto docielit resp. nejaky tip. Mate s tym niekto skusenost ?
0
-
- Ultimate člen
- Príspevky: 2582
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: Otazky ohladom STM32
Skúsenosti nie, ale teória je taká, že stm32 umožňuje za behu prepnúť napríklad aj system clock mux. Komplikácia je to, že sa zmenia hodiny pre periférie, a takto sa vedia poškodiť pakety uart/spi/i2c, rozbije sa časovanie timerov a pod.
Nebude jednoduchšie použiť sleep módy? Hodiny sa nemenia, ale dynamicky sa vypínajú časti mcu, ktoré práve nie sú potrebné.
Nebude jednoduchšie použiť sleep módy? Hodiny sa nemenia, ale dynamicky sa vypínajú časti mcu, ktoré práve nie sú potrebné.
0
-
- Pokročilý člen
- Príspevky: 626
- Dátum registrácie: 05 Nov 2009, 00:00
- Bydlisko: Bratislavský kraj
Re: Otazky ohladom STM32
Mas pravdu. Sleep mody asi budu lepsie. Este mam otazku ohladom pinu VUSB. je toto pin na detekciu pripojenia USB ? alebo sa detekcia robi standardnym pinom nakonfigurovanym ako vstup ?
0
-
- Ultimate člen
- Príspevky: 2582
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: Otazky ohladom STM32
Asi na tú detekciu, niekde v cubemx som to tuším videl. Ono tu si treba ujasniť rozdiel medzi self powered a bus powered. Keď je mcu aj tak napájaný z usb, nie je to dôležité. Keď je napájaný zo samostatného zdroja, tak nesmie spínať D+ D- linky ak nie je plne pripojený k pc.
Ešte jednu radu, keď budete kresliť schému bacha na pullup. Niektoré stm majú interný, niektoré nie. Naposledy som ho musel provizórne dorábať, inak mi pc ani nerozoznal, že som niečo pripojil.
Ešte jednu radu, keď budete kresliť schému bacha na pullup. Niektoré stm majú interný, niektoré nie. Naposledy som ho musel provizórne dorábať, inak mi pc ani nerozoznal, že som niečo pripojil.
0
-
- Pokročilý člen
- Príspevky: 626
- Dátum registrácie: 05 Nov 2009, 00:00
- Bydlisko: Bratislavský kraj
Re: Otazky ohladom STM32
Ahoj,
mam takuto dosku
http://www.lilygo.cn/prod_view.aspx?Typ ... t3:50033:3
Stiahol som si k tomu SDK. SDK je pre KEIL. Ja vsak pouzivam STM32Cube IDE. Vytvorilsom si teda novy projekt a postupne prekopiroval vsetky potrebne priecinky, kniznice atd. V Properties daneho projektu som si nastavil cesty k tym priecinkom. Spustil som kompilaciu a samozrejme je tam niekolko problemov. Jazyku C velmi nerozumiem a neviem kde moze byt chyba.
Napr. mam problem s SPI_HandleTypeDef. Pise, ze je to neznamy nazov. Tento SPI_HandleTypeDef som vsak nasiel v stm32lxx_hal_spi.h Vid obrazky. Poradite aky tam moze byt este problem ?
mam takuto dosku
http://www.lilygo.cn/prod_view.aspx?Typ ... t3:50033:3
Stiahol som si k tomu SDK. SDK je pre KEIL. Ja vsak pouzivam STM32Cube IDE. Vytvorilsom si teda novy projekt a postupne prekopiroval vsetky potrebne priecinky, kniznice atd. V Properties daneho projektu som si nastavil cesty k tym priecinkom. Spustil som kompilaciu a samozrejme je tam niekolko problemov. Jazyku C velmi nerozumiem a neviem kde moze byt chyba.
Napr. mam problem s SPI_HandleTypeDef. Pise, ze je to neznamy nazov. Tento SPI_HandleTypeDef som vsak nasiel v stm32lxx_hal_spi.h Vid obrazky. Poradite aky tam moze byt este problem ?
0
-
- Pokročilý člen
- Príspevky: 626
- Dátum registrácie: 05 Nov 2009, 00:00
- Bydlisko: Bratislavský kraj
Re: Otazky ohladom STM32
nahral som to este sem lebo tie obrazky su velmi male.
https://we.tl/t-23g8i2JHJJ
https://we.tl/t-23g8i2JHJJ
0
-
- Pokročilý člen
- Príspevky: 626
- Dátum registrácie: 05 Nov 2009, 00:00
- Bydlisko: Bratislavský kraj
-
- Pokročilý člen
- Príspevky: 626
- Dátum registrácie: 05 Nov 2009, 00:00
- Bydlisko: Bratislavský kraj
Re: Otazky ohladom STM32
Ahojte, uz asi tyzden sa trapim rozchodit STM32L073 s SX1276. resp. mam tuto dosku
http://www.lilygo.cn/prod_view.aspx?Typ ... t3:50033:3. Je osadena modulom S76G, ktory obsahuje STM32L073 + SX1276 s CXD5603GF. Momentalne ma zaujima iba spolupraca s Lorawan. Na programovanie pouzivam prioritne STM32CubeIDE. Stiahol som si SDK pre tento moful S76G ale pomocou STM32CubeIDE sa mi to nepodarilo rozbehat. Ked som to nainportoval do Keil, tak to fungovalo. Budem mat cas, tak sa na to este pozriem. Viac ma vsak trapi, ze chcel som pouzit nejaky iny priklad na komunikaciu STM32L0xx + Lorawan. Skusam toto
https://github.com/drakkar-lig/st-lrwan.
Povodne sa tam pouziva SPI1 a samozrejme ine piny pre dalsie veci. Zmenil som teda vsetko co sa tyka SPI1 na SPI2 a taktiez som zmenil piny ako reset, nss, ant. sw, D0 - D3 podla vnutorneho zapojenie S76G. Bohuzial, nedari sa mi to rozchodit. Cez Uart mi dava nejaky vystup, takze MCU zije. Vedel by mi niekto poradit ako by to bolo mozne diagnostikovat problem popripade na co si dat pozor alebo overit ?
http://www.lilygo.cn/prod_view.aspx?Typ ... t3:50033:3. Je osadena modulom S76G, ktory obsahuje STM32L073 + SX1276 s CXD5603GF. Momentalne ma zaujima iba spolupraca s Lorawan. Na programovanie pouzivam prioritne STM32CubeIDE. Stiahol som si SDK pre tento moful S76G ale pomocou STM32CubeIDE sa mi to nepodarilo rozbehat. Ked som to nainportoval do Keil, tak to fungovalo. Budem mat cas, tak sa na to este pozriem. Viac ma vsak trapi, ze chcel som pouzit nejaky iny priklad na komunikaciu STM32L0xx + Lorawan. Skusam toto
https://github.com/drakkar-lig/st-lrwan.
Povodne sa tam pouziva SPI1 a samozrejme ine piny pre dalsie veci. Zmenil som teda vsetko co sa tyka SPI1 na SPI2 a taktiez som zmenil piny ako reset, nss, ant. sw, D0 - D3 podla vnutorneho zapojenie S76G. Bohuzial, nedari sa mi to rozchodit. Cez Uart mi dava nejaky vystup, takze MCU zije. Vedel by mi niekto poradit ako by to bolo mozne diagnostikovat problem popripade na co si dat pozor alebo overit ?
0
-
- Pokročilý člen
- Príspevky: 626
- Dátum registrácie: 05 Nov 2009, 00:00
- Bydlisko: Bratislavský kraj
Re: Otazky ohladom STM32
Tak ja uz tomu nerozumiem. Vratil som sa k tomu SDK, ktory mi funguje v Keil-y, tak ked to SDK manualne nakopirujem a nastavim vsetky cesty na kniznice, symboly do STM32cubeIDE, tak mi to nefunguje. Pritom kompilacia skonci bez chyby. Kde moze byt chyba ?
0
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 2 Odpovedí
- 911 Zobrazení
-
Posledný príspevok od používateľa Dr.Martin