Fórum témák

» Több friss téma
Fórum » ARM - Miértek hogyanok
 
Témaindító: gtk, idő: Jún 26, 2007
Lapozás: OK   178 / 178
(#) sdrlab hozzászólása Jún 6, 2025 /
 

STM32F103, ADC gond

Adott egy STM32F103-as proci. Az egyik ADC csatornája szoftveres indítással mér. Azt vettem észre, néha kifagy a program, mégpedig azért, mert nem indul el a konverzió, hiába volt beállítva az SWSTART bit. Debuggerben ha ekkor bepöccintem kézzel ezt a bitet, akkor egy darabig fut megint rendesen a program, aztán egyszercsak megint megáll a futás, mert nem állítódott be az a bit.
Találkozott már valaki hasonlóval? Van erre valami épkézláb megoldás?
Jelenleg azzal próbálkozok, hogy egymás után kétszer állítom be a bitet..., egyelőre még nem volt egy fagyási eset sem így, de azért ez kicsit olyan elkenése a problémának érzetet vált ki bennem...
(#) icserny válasza sdrlab hozzászólására (») Jún 6, 2025 /
 
Nekem nem volt ilyen tapasztalatom. Sok évvel ezelőtt volt a kezemben STM32F103 (blue pill) és Keil alatt ilyeneket írtam:
  1. //--- ADC1 konfigurálása -------------------------
  2.   RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;    // ADC1 órajel engedélyezés
  3.   RCC->CFGR &= ~RCC_CFGR_ADCPRE_0;       // ADC prescaler = 6
  4.   RCC->CFGR |=  RCC_CFGR_ADCPRE_1;       // ADCCLK = 72/6 = 12 MHz
  5.   ADC1->CR2 =   ADC_CR2_EXTTRIG |        // External trigger engedélyezés
  6.                 ADC_CR2_EXTSEL;          // EXTSEL=111 SW trigger választása
  7.   ADC1->SQR3 = 1;                        // Ch 1-gyel indul a konverziós sorozat
  8.   ADC1->SQR1 = 0;                        // A konverzió sorozat hossza = 1
  9.   ADC1->CR2 |= ADC_CR2_ADON;             // ADC1 engedélyezése


A főprogram végtelen ciklusában így történt a mérés:
  1. ADC1->CR2 |= ADC_CR2_SWSTART;           // Konverzió indítása
  2. while(!(ADC1->SR & ADC_SR_EOC));        // Konverzió végére várunk
  3. result = ADC1->DR;                      // Az eredmény kiolvasása (törli az EOC bitet!)


Bővebb információ: A 2019/2020-as évadból a 2019. december 5. előadás anyaga
(#) pipi válasza sdrlab hozzászólására (») Jún 6, 2025 /
 
Beállítás után ellenőrzöd bebillent-e? (esetleg a tesztelés erejéig...)
(#) sdrlab válasza pipi hozzászólására (») Jún 7, 2025 /
 
Nem nagyon lehet ezt. A beállítás szoftveres, de amint el indult a konverzió, hardveresen törli is.
(#) sdrlab válasza icserny hozzászólására (») Jún 7, 2025 /
 
Lényegében ugyanezt csinálom én is...
Van még egy STRT bit is(ADC_SR), ami elvileg hardveresen áll be amikor elindul a konverzió. Most ezzel tesztelem...
(#) tki válasza sdrlab hozzászólására (») Jún 7, 2025 /
 
És ha nem kétszer írod a bitet, hanem az eredeti kódhoz képest csak raksz egy minimális időzítést, akár csak néhány utasítást a bit írása elé?

Biztosan nem vagy kezdő, de nincs másik task vagy interrupt, ami beleszól? Ha vannak taskok, akkor a driver vagy osztály, ami kezeli az ADC-t (feltételezem, nem te végzel mindent bitenként), ugyanazon a task-on lett inicializálva, ahol használod? Nincs valami ext trigger engedélyezve?
(#) sdrlab válasza tki hozzászólására (») Jún 7, 2025 /
 
A helyzet az, hogy mindent én kezelek bitenként )) Tudom, kicsit mazochista, de nekem így kényelmesebb kézben tartani mindent...
Természetesen vannak megszakítások is(ez egy viszonylag összetett project), de ez a mérés a főprogramból hívódik meg, időről-időre. Megszakításból ezt az ADC-t nem használom.
(#) tki válasza sdrlab hozzászólására (») Jún 7, 2025 /
 
És vajon eredeti az az ARM? : -) A Blue Pill miatt (meg ki tudja, még mi miatt) állítólag szeretik hamisítani, többször olvastam már... és az okozhat hasonló jelenségeket.
A hozzászólás módosítva: Jún 7, 2025
(#) sdrlab válasza tki hozzászólására (») Jún 7, 2025 /
 
Hát azt meg nem mondom neked )) Kínából vettem, ID-ek alapján az..., hogy a specifikációt mindenben teljesíti e, ki tudja...?!
(#) gtk válasza ColT hozzászólására (») Jún 11, 2025 /
 
Baremetal tapasztalat van. Ha nem mukodik a tap IC, akkor hogy mukodik a rendszered ?
(#) moltam válasza gtk hozzászólására (») Jún 11, 2025 /
 
Szerintem arra gondolt hogy nem éri el a power management ic regisztereit mert a linux modul nem működik, nem látja a rendszer.
(#) sszasza válasza sdrlab hozzászólására (») Jún 12, 2025 /
 
F103nál nem tudom hogyan van , de az F003-asnál az ADC frekijét trükkösen kell állitani. Hiába állitod be a megfelelő frekit, még arra is van egy külön bit hogy 14MHz felett vagy alatt. Na ott ha ezt elfelejtem, ilyesmiket csinál. Nálad valami ilyesmi nincs ? Egészen máshol, pl RCM-ben, ahol józan ésszel nem keresné az ember?
(#) icserny válasza sszasza hozzászólására (») Jún 13, 2025 /
 
Úgy tudom, hogy F103-nál 14 MHz a maximális megengedett ADC órajel.
(#) sdrlab válasza icserny hozzászólására (») Jún 13, 2025 /
 
Jól tudod! Nálam ez 13MHz-re adódott...
Az a fura, hogy csak az ADC1 csinálta ezt, az ADC2 nem. Viszont a legutolsó módosításom óta stabilan megy, néhány nap alatt egyszer sem akadt el az indítás...
(#) sdrlab válasza sszasza hozzászólására (») Jún 13, 2025 /
 
Az ADC órajele többnyire kisebb, mint a rendszer órajele, ezért van hozzá egy osztó is. A 103-asnál is van ilyen(2,4,6,8-as osztás), ami az APB2 előosztót tovább osztja...
Következő: »»   178 / 178
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem