STM32 SPI + Timer = Fehler ?

Gast #2432604
Hallo,

ich habe ein Problem mit dem SPI Interface des STM32F103RC.
An SPI 1 hängt ein externes Flash und ein I/O Baustein, die sich ohne 
Timer-Initialisierung problemlos ansprechen lassen.
Zusätlich habe ich den Compare Ausgang von Timer 8 (Kanal 2) in 
Verwendung.

Dieser wird wie folgt eingestellt:
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;

  /* RCC configuration */

  /* TIM8 clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);

  /* GPIOC clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

  /* GPIO configuration */

  GPIO_InitTypeDef GPIO_InitStructure;

  /* GPIOC Configuration: Pin 7 as output push-pull */
  GPIO_SetBits(GPIOC, GPIO_Pin_7);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* GPIOC Configuration: Pin 9 as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* NVIC configuration */

  NVIC_InitTypeDef NVIC_InitStructure;

  /* Enable the TIM8 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM8_CC_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

  /* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 65535;
  TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);

  /* Output Compare Inactive Mode configuration: Channel2 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;
  TIM_OCInitStructure.TIM_Pulse = TE;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

  TIM_OC2Init(TIM8, &TIM_OCInitStructure);
  TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Disable);
  TIM_ARRPreloadConfig(TIM8, ENABLE);

  /* TIM IT enable */
  TIM_ITConfig(TIM8, TIM_IT_CC2, ENABLE);

Wird diese Konfiguration aufgerufen, so passiert in vielen Fällen, dass 
der MOSI Pin von SPI 1 (der auch Ausgang von Timer 8 Kanal 1 sein kann) 
nach dem Reset oder Power-Up deaktiviert wird. Zugriffe auf die SPI 
Peripherien funktionieren danach nicht mehr. Was mich umso mehr verwirrt 
ist die Tatsache, dass es völlig zufällig ist, ob es nach einem Neustart 
funktioniert oder nicht.

Kann mir vielleicht jemand einen Tipp geben, was hier schief läuft?

Vielen Dank,
Andreas
Gast
Hallo,

hat wirklich niemand einen Tipp für mich, was hier los sein könnte?
Ich habe die Initialisierung von SPI und Timer bereits umgedreht bzw. an 
andere Teile des Programms verschoben, aber immer den gleichen Effekt 
erhalten.

Vielen Dank,
Andreas

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.