Forum: Mikrocontroller und Digitale Elektronik STM32 SPI + Timer = Fehler ?


von Andreas (Gast)


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

von Andreas (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.