Discovery STM32F0 problemy s AD prevodem

A jak to prosím vypadá v debugu? (nebo ten nepoužíváš?)

Co je za hodnoty v registrech ADC? Zřejmě asi když nechce ADC hodit EOC flag, tak nekonvertuje.

Není v těchto případech nic vhodnějšího, než do debugu vlézt, otevřít registry ADC a ručně si zaklikat a zjistit, co tomu chybí.

Kód jsem prošel, vypadá v pořádku, až na pár drobností:

Nevím, co používáš za kompilátor, ale věčně jsou problémy s neinicializovanou pěmětí. Takže prosím ještě použij ADC_StructInit(&ADC_InitStruct);

(případný problém s neinicializovanou strukturou zjistíš taktéž v debugu, protože v registrech ADC bude bordel a ve struktuře taky).

Udělej nám kdyžtak prosím screenshot registrů v ADC, nějak pokudmožno čitelně (pokud to tvé IDE umí), luštit 32bitové hexa hodnoty se nikomu chtít nebude.


Potom jen taková poznámka pod čarou: Valit flouty v M0, to seš teda dobrej drak. Nezkoušej mi namluvit, že to nejde spočítat ve fixed point aritmetice. Ale já vim, lenost, že jo? Rychlost float výpočtů na CM0 si doufám uvědomuješ, stějně jako potřebnou rozsáhlost PRINTF knihovních funkcí s obsahem floutu ve FLASH. Když sem kdysi začínal na shnilých AVR, tak se ADC zvládno naškálovat několika instrukcema a vypsat na displej i bez printfu.

Mimochodem, použití sprintf je nebezpečné a ve složitějších aplikacích super díra pro hackery. Používej korektní funkci snprintf, která ti zabrání přetečení paměti.