Hallo,
ich "experimentiere" das erste mal mit der HAL-Bibliothek für STM32.
(Dies soll kein Thread für das für und wieder der HAL-Bibliothek
werden!)
Hardware: STM32F407VET6 + ILI9325 (Grafikdisplay) + XPT2046
(Touchcontroller).
Ich habe ein Problem mit dem lesen vom SPI Bus des XPT2046. Mit einem
LogicAnalyzer sieht es auf dem Bus so aus wie ich es erwarte (/CC ist
low, Clock tut, Datenänderungen bei negativer Flanke). 1 Lesevorgang
entsprechen 6us.
Problem:
Der Befehl "HAL_SPI_Receive(..)" schreibt in die Variable "temp" einfach
nur 0, obwohl auf MISO was los ist..
1 | static int RD_AD(void)
|
2 | {
|
3 | unsigned short buf;
|
4 | uint8_t temp = 20; // wahllos auf einen Wert != 0
|
5 |
|
6 | HAL_SPI_Receive(&HSPI2,&temp,1,1);
|
7 | // temp = 0, warum?
|
8 | buf=temp<<8;
|
9 |
|
10 | HAL_SPI_Receive(&HSPI2,&temp,1,1);
|
11 |
|
12 | buf |= temp;
|
13 | buf>>=3;
|
14 | buf&=0xfff;
|
15 | return buf;
|
16 | }
|
Initialisierung:
1 | void TP_Init(void)
|
2 | {
|
3 | GPIO_InitTypeDef GPIO_InitStruct;
|
4 |
|
5 | __HAL_RCC_SPI2_CLK_ENABLE();
|
6 |
|
7 | /**SPI2 GPIO Configuration
|
8 | PB12 ------> SPI2_NSS
|
9 | PB13 ------> SPI2_SCK
|
10 | PB14 ------> SPI2_MISO
|
11 | PB15 ------> SPI2_MOSI
|
12 | */
|
13 |
|
14 | GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_15;
|
15 | GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
16 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
17 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
18 | GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
|
19 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
20 |
|
21 | GPIO_InitStruct.Pin = GPIO_PIN_14;
|
22 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
23 | GPIO_InitStruct.Pull = GPIO_PULLUP;
|
24 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
25 | GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
|
26 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
27 |
|
28 | GPIO_InitStruct.Pin = GPIO_PIN_12;
|
29 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
30 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
31 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
32 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
33 |
|
34 | HAL_GPIO_WritePin(T_CS_Port, T_CS_PIN, GPIO_PIN_SET);
|
35 |
|
36 | SPI_Init();
|
37 | }
|
1 | static void SPI_Init(void)
|
2 | {
|
3 |
|
4 | /* SPI2 parameter configuration*/
|
5 | HSPI2.Instance = SPI2;
|
6 | HSPI2.Init.Mode = SPI_MODE_MASTER;
|
7 | HSPI2.Init.Direction = SPI_DIRECTION_2LINES;
|
8 | HSPI2.Init.DataSize = SPI_DATASIZE_8BIT;
|
9 | HSPI2.Init.CLKPolarity = SPI_POLARITY_LOW;
|
10 | HSPI2.Init.CLKPhase = SPI_PHASE_1EDGE;
|
11 | HSPI2.Init.NSS = SPI_NSS_SOFT;
|
12 | HSPI2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
|
13 | HSPI2.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
14 | HSPI2.Init.TIMode = SPI_TIMODE_DISABLE;
|
15 | HSPI2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
16 | HSPI2.Init.CRCPolynomial = 10;
|
17 | }
|
Jemand eine Idee? - Übersehe ich etwas?
PS: bekommt ihr auch einen "unexpected error" im Forum der ST Community
Seite?