09-SPI-LoLevel-Library (STM32F746)


Beschreibung :
LoLevel SPI Library für den F746 mit Funktion zum senden und empfangen von Bytes und Arrays.

Eigentlich müsste es 6 Libraries geben, weil der F746 6 SPIs hat (stm32_ub_spi1 bis stm32_ub_spi6). Schaut euch das auf der Pinbelegung des F746 an.

Allerdings habe ich bisher nur zwei Libraries erstellt ( stm32_ub_spi2 und stm32_ub_spi5). Je nachdem welchen SPI-GPIO-Pins verwendet werden sollen (schaut dazu einfach in das header File).

Hier die Beschreibung von stm32_ub_spi5:

Module :

1
stm32_ub_spi5.h, stm32_ub_spi5.c

Includes :

1
#include "stm32_ub_system.h"

Enumerationen und Defines:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//--------------------------------------------------------------
// SPI-Mode (Full-Duplex)
//--------------------------------------------------------------
typedef enum {
  SPI_MODE_0_MSB = 0,  // CPOL=0, CPHA=0 (MSB-First)
  SPI_MODE_1_MSB,      // CPOL=0, CPHA=1 (MSB-First)
  SPI_MODE_2_MSB,      // CPOL=1, CPHA=0 (MSB-First)
  SPI_MODE_3_MSB,      // CPOL=1, CPHA=1 (MSB-First)
  SPI_MODE_0_LSB,      // CPOL=0, CPHA=0 (LSB-First)
  SPI_MODE_1_LSB,      // CPOL=0, CPHA=1 (LSB-First)
  SPI_MODE_2_LSB,      // CPOL=1, CPHA=0 (LSB-First)
  SPI_MODE_3_LSB       // CPOL=1, CPHA=1 (LSB-First) 
}SPI5_Mode_t;
 
//--------------------------------------------------------------
// SPI-Clock
// Grundfrequenz (SPI5)= APB2 (APB2=100MHz)
// Mögliche Vorteiler = 2,4,8,16,32,64,128,256
//--------------------------------------------------------------
//#define SPI5_VORTEILER     SPI_BAUDRATEPRESCALER_2   // Frq = 50 MHz
//#define SPI5_VORTEILER     SPI_BAUDRATEPRESCALER_4   // Frq = 25 MHz
#define SPI5_VORTEILER     SPI_BAUDRATEPRESCALER_8   // Frq = 12,5 MHz
//#define SPI5_VORTEILER     SPI_BAUDRATEPRESCALER_16  // Frq = 6.25 MHz
//#define SPI5_VORTEILER     SPI_BAUDRATEPRESCALER_32  // Frq = 3.125 MHz
//#define SPI5_VORTEILER     SPI_BAUDRATEPRESCALER_64  // Frq = 1.562 MHz
//#define SPI5_VORTEILER     SPI_BAUDRATEPRESCALER_128 // Frq = 781.2 kHz
//#define SPI5_VORTEILER     SPI_BAUDRATEPRESCALER_256 // Frq = 390.6 kHz
 
//--------------------------------------------------------------
// SPI-GPIO-Pins
// moegliche Pinbelegung :
//   SCK  : [PF7, PH6]
//   MISO : [PF8, PH7]
//   MOSI : [PF9, PF11]
//--------------------------------------------------------------
#define  SPI5_SCK_PORT     GPIOF
#define  SPI5_SCK_PIN      GPIO_PIN_7
 
#define  SPI5_MISO_PORT    GPIOF
#define  SPI5_MISO_PIN     GPIO_PIN_8
 
#define  SPI5_MOSI_PORT    GPIOF
#define  SPI5_MOSI_PIN     GPIO_PIN_9
//--------------------------------------------------------------
#define  SPI5_TX_TIMEOUT   1000

Funktionen :

1
2
3
ErrorStatus UB_SPI5_Init(SPI5_Mode_t mode);
uint8_t UB_SPI5_SendByte(uint8_t wert);
void UB_SPI5_SendArray(uint8_t *tx_buf, uint8_t *rx_buf, uint16_t cnt);

Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//--------------------------------------------------------------
// File     : main.c
// Datum    : 18.12.2017
// Version  : 1.0
// Autor    : MB
// EMail    : -
// Web      : http://mikrocontroller.bplaced.net
// CPU      : STM32F746
// Board    : STM32F746-Discovery-Board
// IDE      : OpenSTM32
// GCC      : 4.9 2015q2
// Module   : CubeHAL
// Funktion : Hauptprogramm
//          : Ein Byte per SPI senden und empfangen 
//          : SPI-Clock: Grundfrequenz (SPI5)= APB2 (APB2=100MHz)
//          : SPI5_VORTEILER = SPI_BAUDRATEPRESCALER_8 (Frq = 12,5 MHz)
//          : SPI5_SCK_PIN      GPIO_PIN_7
//          : SPI5_MISO_PIN     GPIO_PIN_8
//          : SPI5_MOSI_PIN     GPIO_PIN_9
//--------------------------------------------------------------
 
#include "stm32_ub_system.h"
#include "stm32_ub_spi5.h"
 
//--------------------------------------------------------------
// ein Byte per SPI senden und empfangen
//--------------------------------------------------------------
uint8_t spi_send(uint8_t wert)
{
  uint8_t ret_wert;
 
  // hier Code einfügen und
  // ChipSelect-Pin auf LO legen
 
  // byte senden und empfangen
  ret_wert=UB_SPI5_SendByte(wert);
 
  // hier Code einfügen und
  // ChipSelect-Pin auf HI legen
 
  return(ret_wert);
}
 
int main(void)
{
  uint8_t wert;
 
  // init vom System
  UB_System_Init();
 
  // SPI5 im Mode0_MSB initialisieren
  UB_SPI5_Init(SPI_MODE_0_MSB);
 
  // den Wert 0x45 per SPI senden
  // und ein Byte empfangen
  wert=spi_send(0x45);
 
  while(1) {
    // nothing to do
  }
}

Hier die Library zum Download :
09 = SPI-LoLevel : f746_spi_v100


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Noch keine Bewertungen)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.