STM32: ADC mit Timer triggern (non-HAL).

Gast #6733866
Lesenswert?
• ▲
▼
Hallo zusammen

Ich versuche in einem bestehenden Firmware für den STM32G474 den ADC1 
periodisch per Timer zu triggern (bisher ging das per Software Trigger).

Dazu habe ich mir den TIM7 ausgesucht und wie folgt initialisiert:
1
TIM7->PSC = prescaler
2
TIM7->ARR = period_us;
3
TIM7->CR2 = TIM_CR2_MMS_1; //Trigger out on update
4
TIM7->CNT = 0;
5
TIM7->CR1 = TIM_CR1_CEN;

Setzte ich zusätzlich
1
TIM7->DIER |= TIM_DIER_UIE;
 wird der TIM7 Interrupt ausgelöst. Der Timer läuft also.

Den bestehenden ADC Code habe ich um die Zeile
1
ADC1->CFGR |= ADC_EXTERNALTRIG_T7_TRGO | ADC_CFGR_EXTEN_0;
 ergänzt.

Jedoch passiert nichts. Der ADC startet nicht. DR bleibt 0, keine 
Interrupts.

Setze ich, wie bisher, manuell
1
ADC1->CR |= ADC_CR_ADSTART;
 läuft der ADC einmalig und liefert Daten.

Was habe ich übersehen?


Grundsatzfrage: Im Reference Manual wird für ADC_CFGR_EXTSELx nur "Event 
0 - Event 31" geschrieben, aber ich finde nirgendwo eine Tabelle wo 
welches Event her kommt. Die Konstante ADC_EXTERNALTRIG_T7_TRGO habe ich 
auch dem HAL kopiert (ist 31).

Gibt es irgendwo eine Event Tabelle für den G474?


Grüße,
da1l6
Gast #6733895
Lesenswert?
• ▲
▼
STM Apprentice schrieb im Beitrag #6733872:
> da1l6 schrieb:
>> Was habe ich übersehen?
>
> Ich sehe nirgends die Schreibvorgänge zum Enablen der Clocks
> (mindestens Timer und ADC, evtl. mehr, sollte zu allererst
> passieren). Hältst du die geheim oder hast du sie vergessen?

Hallo,

Ja, Clocks sind aktiviert.

Timer:
1
RCC->APB1ENR1 |= RCC_APB1ENR1_TIM7EN;

ADC:
1
RCC->AHB2ENR |= RCC_AHB2ENR_ADC12EN;
2
MODIFY_REG(ADC12_COMMON->CCR, ADC_CCR_CKMODE_Msk, ADC_CCR_CKMODE_0|ADC_CCR_CKMODE_1);

Wie gesagt, sowohl ADC als auch Timer laufen für sich. Nur das Trigger 
Event geht nicht.

Grüße,
da1l6
Gast #6733916
Lesenswert?
• ▲
▼
da scheint noch die Konfiguration der ClockSource zu fehlen. Habe das 
bisher nur mal mit CubeMX gemacht.
Das hier erfolgt noch nach der Timer BaseInit (MasterSlave enable ist 
vermutlich nicht nötig gewesen):
1
  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
2
  TIM_MasterConfigTypeDef sMasterConfig = {0};
3

4
  /* USER CODE BEGIN TIM8_Init 1 */
5

6
  /* USER CODE END TIM8_Init 1 */
7
  htim8.Instance = TIM8;
8
  htim8.Init.Prescaler = 9;
9
  htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
10
  htim8.Init.Period = 199;
11
  htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
12
  htim8.Init.RepetitionCounter = 0;
13
  htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
14
  if (HAL_TIM_Base_Init(&htim8) != HAL_OK)
15
  {
16
    Error_Handler();
17
  }
18
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
19
  if (HAL_TIM_ConfigClockSource(&htim8, &sClockSourceConfig) != HAL_OK)
20
  {
21
    Error_Handler();
22
  }
23
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
24
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
25
  if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK)
26
  {
27
    Error_Handler();
28
  }

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.