Jag tycker att resonemangen går åt fel håll här.
Det är med 99% sannolikt inget fel på koden som Cube MX generera i det här fallet, utan mer en brist på förståelse kring vad som genereras och vad man måste komplettera med själv.
Börjar du blanda in andra IDE'er eller försöka konfigurera dessa kringkomponenter manuellt i registret kommer du aldrig komma vidare utan att hela tiden fundera på om du fått med allt och gjort det rätt.
Jag har själv gjort samma resa med USB där man får för sig att "det här är ju lätt, koden automatgenereras" och sedan funkar det inte och man börjar på riktigt sätta sig in i det.
Man inser då snabbt att det finns logiska begränsningar i vad som GÅR att automatgenerera. I mitt fall med USB, så visste givetvis inte Cube MX om mitt "USB HID Device" skulle vara en mus, tagentbord eller composite device och då genereras givetvis inte någon Device descriptor.
Resultatet var att halva USB initieringen fanns och detaljerna om vad man pluggat in saknas varför Windows inte kan få igång någon driver.
Det är lätt att säga "Cube MX funkar inte" i ett sådant fall men då har man inte fattat vad Cube MX är till för.
Det är i grunden ett verktyg för att initiera dina pheriphals med nödvändiga parametrar.
Det är inget verktyg som bygger ditt program och det är framförallt inte synskt.
Jag vill nog gå så långt att jag påstår att det är så pass bra att generera dessa initieringar så att man lätt luras att tro att man får mer än vad man får.
Vissa callbacks genereras men är tomma som exempel, och då får man ju heller inget fel i kompileringen som kan leda en till förståelse att här måste man skriva något eget.
Jag får känslan av att du saknar en del grundkunskap kring periferienheterna i processorn och hur dom skall användas (eller har missuppfattat).
Min bild just nu är:
3st SARDAC (vilka i sig har upp till 9 kanaler) som du "triggar" (dina ord) genom två timers (12 & 13) och sedan två timers till (16 & 17) som du använder som "input capture" och där 12 och 13 skall "spara sitt värde" i en cirkulär buffer (varför och vad har detta värde med avläsningen att göra).
Och några värden ur den här (ursäkta uttrycket) soppan skall i slutändan ner på SD kort. Avläsningen skall ske i injected mode "för bättre kontroll" (dina ord).
Jag skulle vilja att du beskrev vad du hoppas skall hända i någon form av periodiserat flöde.
Jag har någonstans i bakhuvudet något att en av DaC måste agera master och trigga de andra om du skall köra DMA (om det hade med att dom satt på samma DMA kanal eller vad det nu var) ta det dock med en nypa salt för det kan vara en specifik modell av MCU som detta gäller för.
Input capture är till för att trigga en räknare genom extern påverkan (pinne som går hög typ) vilket i sin tur vid uppfyllt villkor (roll over etc.) skapar en händelse i syfte att exempelvis räkna frekvens/pulslängd eller läsa av ett värde på en motor på ett exakt läge av rotation etc. etc.
Här kommer exempelvis injected mode in i bilden då den gör override på alla andra AD operationer, för att man "omedelbart" vill använda dessa värden och kanske behöver läsa av vissa specifika kanaler i en serie etc.
Man kan givetvis använda en timmer för att periodiserat trigga en händelse på tid (vilket jag tolkade att du var ute efter) med men då använder man väl "output compare".
Kan du inte bara börja med att lösa problemet. Läs av dina ADC (skit i injected mode) var 20'e MS baserat på en timer.
När du fått detta att funka så kan du börja testa med DMA (kanske en i taget).
Klä på med injected mode (om du nu behöver det, vilket jag är tveksam till).
Du har verkligen kastat dig över hela kakan på en gång här.
Jag är otroligt nyfiken på konfigurationen för dina fyra timers. Men posta dom
inte för jag har fan inte tid och kommer inte kunna hålla mig från att kolla på det
Generellt sett så förklarar inte databladet HUR du skall använda olika periferienheter i din MCU, utan beskriver enbart hur den kan konfigureras.
Därför är det meningslöst att plöja 1500 sidor, för svaret finns inte i dessa. För STM så gäller precis som för många andra tillverkare att denna kunskap finn i Application notes.
Dessa är mer korta och fokuserar mer på användandet med ibland exempel kod och use cases.
Börja med att läsa AN3116 och därefter AN4195 (tagna ur huvudet, det finns säkert fler som är aktuella).
Jag är
säker på att du kommer komma underfund med att du missuppfattat något.