Forum: Mikrocontroller und Digitale Elektronik STM32: Spi alle Register 0x00


von Bernd S. (mms)


Lesenswert?

Hi,

hab nochmal ne Frage zum STM32F103 Prozessor: dieses mal betrifft es das 
SPI-Interface SPI2;

Aus irgendeinem Grund kann ich momentan keine SPI-Register beschreiben, 
bzw. der Inhalt wird mir nicht angezeigt im Debugger... Auch das Status 
Register ist die komplette Zeit Null.

Ist das Normal, dass man die Config.-Register nicht auslesen kann? Hab 
auch mal in der Memory-Map vom Keil Compiler nachgeschaut, dort wird 
auch nur 0x00 für den kompletten SPI-Bereich angezeigt.

Gesendet werden kann auch nichts; alle Lines MISO, MOSI, CLK befinden 
sich die komplette Zeit auf low; selbst wenn ich in der config angebe, 
dass die CLK im Idle-State auf high gehen soll.


Gruß
Bernd

von STM32 (Gast)


Lesenswert?

liegts an dem power enable bit für spi, welches momentan wohl nicht 
gesetzt zu sein scheint?

von Bernd S. (mms)


Lesenswert?

Mit Power-Enable Bit meinst du SPI2->CR1 |= 0x0040;??


Hier ist mal meine Initialisierung vom SPI; in der ersten 
While-Schleife bleibt er hängen, da das Status-Reg stets 0x00 ist.
1
  GPIO_InitTypeDef GPIO_InitStructure;
2
3
  /* Enable SPI2 and GPIOB clocks */
4
  RCC_APB1PeriphClockCmd2(RCC_APB2Periph_GPIOB, ENABLE);
5
6
  RCC_APB2PeriphClockCmd2(RCC_APB1Periph_SPI2, ENABLE); 
7
8
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
11
  GPIO_Init(GPIOB, &GPIO_InitStructure);
12
13
14
  /*
15
  workaround wenn i2c2 und spi2 verwendet werden sollen -> dann
16
  i2c2_smba (pb12) muss als output cofiguriert werden wenn spi in master
17
  mode mit nss in software configuriert ist
18
  -> ansonsten muss pb12 als input gesetzt werden, wenn nss in hardware
19
  laufen soll 
20
  */
21
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_12;
22
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP; //GPIO_Mode_IPU  
23
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
24
  GPIO_Init(GPIOB, &GPIO_InitStructure);
25
26
 
27
 
28
  SPI_I2S_DeInit(SPI2); 
29
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
30
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
31
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //SPI_DataSize_16b;
32
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; 
33
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; 
34
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
35
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //SPI_BaudRatePrescaler_8;
36
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
37
  SPI_InitStructure.SPI_CRCPolynomial = 7;
38
  SPI_Init(SPI2, &SPI_InitStructure);
39
40
41
  /* Enable SPI2 */
42
  SPI2->CR1 |= 0x0040; //CR1_SPE_Set;
43
44
45
  //hier bleibt er hängen!!!!
46
  while (SPI_I2S_GetFlagStatus2(SPI2, SPI_I2S_FLAG_TXE) == RESET);
47
    SPI2->DR = (0x10);
48
    while (SPI_I2S_GetFlagStatus2(SPI2, SPI_I2S_FLAG_RXNE) != RESET);

von (prx) A. K. (prx)


Lesenswert?

Fällt dir da was auf?
RCC_APB1PeriphClockCmd2(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd2(RCC_APB1Periph_SPI2, ENABLE);

von Bernd S. (mms)


Lesenswert?

oh mein gott... ja; allein wäre ich auf diesen Fehler nicht 
draufgekommen...


Vielen Dank!

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.