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
liegts an dem power enable bit für spi, welches momentan wohl nicht gesetzt zu sein scheint?
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); |
Fällt dir da was auf? RCC_APB1PeriphClockCmd2(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd2(RCC_APB1Periph_SPI2, ENABLE);
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.