STM32 SPI + Timer = Fehler ?

Gast #2432604
Lesenswert?
• ▲
▼
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 #2434539
Lesenswert?
• ▲
▼
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

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.