Hallo,
mein Problem ist ein kleiner jedoch grundlegender Teil eines größeren
Projekts. Es geht darum, mit dem STM32F407-Disc1 über SPI mit dem
LCD-Controller S1D13781 zu kommunizieren. Ich bin gleich zu Beginn
gescheitert, d.h. ich kann zwar Daten wie Datenblatt des S1D13781
beschrieben an den Controller senden, bekomme jedoch keine Antwort über
die MISO-Leitung. Dieser bleibt durchgehend LOW. Danke im Voraus!
Verbindungen:
3,3V und GND für S1D13781 vom STM32-Disc gezogen
S1D13781 -> STM32F407-DISC1
CLK -> CLK
MOSI -> MOSI
MISO -> MISO
CS -> beliebiger GPIO Output
Umgebung:
STM32CubeIDE (SPI2 mit PB13, PB14 und PB15), der SPI und GPIO
initialisieren sich von selbst durch "Generate Code", so dass ich da
eher keine Probleme vermute.
Mein Funktionen zum Lesen von Registern (das Wichtigste):
1 | uint32_t seReadReg16(uint32_t Index)
|
2 |
|
3 | {
|
4 |
|
5 | uint32_t addr = Index |= 0x60800;
|
6 |
|
7 |
|
8 | // hier in dem Beispiel Index =0x02 zum Auslesen des Product Codes der 0x0050 zurückgeben soll (siehe Anhang)
|
9 |
|
10 | uint32_t value;
|
11 |
|
12 | Chip_Select(0);
|
13 |
|
14 | SET_ADDR(addr);
|
15 |
|
16 | value = GET_DATA();
|
17 |
|
18 | Chip_Select(1);
|
19 |
|
20 | return value;
|
21 |
|
22 | }
|
23 |
|
24 | void SET_ADDR(uint32_t addr)
|
25 |
|
26 | {
|
27 |
|
28 | addr &= 0x00FFFFFF;
|
29 |
|
30 | addr |= 0xC0000000;
|
31 |
|
32 | uint8_t data[4];
|
33 |
|
34 | data[0] = (uint8_t)(addr >> 24);
|
35 |
|
36 | data[1] = (uint8_t)(addr >> 16);
|
37 |
|
38 | data[2] = (uint8_t)(addr >> 8);
|
39 |
|
40 | data[3] = (uint8_t)(addr);
|
41 |
|
42 | uint8_t dummy = 0;
|
43 |
|
44 | uint8_t received;
|
45 |
|
46 | HAL_SPI_TransmitReceive(&hspi2, data, &received, 4, HAL_MAX_DELAY);
|
47 |
|
48 | HAL_SPI_TransmitReceive(&hspi2, &dummy, &received, 1, HAL_MAX_DELAY);
|
49 |
|
50 | }
|
51 |
|
52 | uint16_t GET_DATA(void)
|
53 |
|
54 | {
|
55 |
|
56 | uint32_t val;
|
57 |
|
58 | uint8_t received;
|
59 |
|
60 | uint8_t dummy = 0;
|
61 |
|
62 | HAL_SPI_TransmitReceive(&hspi2, &dummy, &received, 1, HAL_MAX_DELAY);
|
63 |
|
64 | val = (uint32_t) received;
|
65 |
|
66 |
|
67 | HAL_SPI_TransmitReceive(&hspi2, &dummy, &received, 1, HAL_MAX_DELAY);
|
68 |
|
69 | val |= (uint32_t) received << 8;
|
70 |
|
71 | return (uint16_t)val;
|
72 | }
|