65-SPI_LoLevel_HalfDuplex-Library (STM32F4)

diese Library dient zum benutzen der SPI-Schnittstelle im Master-Mode
(im Half-Duplex Betrieb)

in diesem Mode wird nur eine Datenleitung benötig (DIO) statt MOSI und MISO

die SPI-Pins die benutzt werden sollen, müssen im C-File eingetragen werden
(im H-File kann der Clock-Vorteiler gewählt werden)

die Library kann als LoLevel-Funktion nur die Schnittstelle (in einem der 8 SPI-Modes) initialisieren und ein Byte per SPI senden/empfangen. Das setzen der ChipSelect-Leitung muss von der Übergeordneten Funktion gemacht werden

es gibt 3 identische Librarys, getrennt für SPI1, SPI2 und SPI3

im Beispiel wurde SPI2 benutzt mit dieser Pinbelegung :

1
2
SCK an PB13
DIO an PB15

Voraussetzungen :

1
2
Benutzte Module der CooCox-IDE : GPIO, SPI
Benutzte Librarys : keine

Enumerationen (für SPI1) :

1
2
3
4
5
6
7
8
9
10
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)
}SPI1_Mode_t;

:

1
2
3
4
5
6
typedef enum {
  SPI_FIRST_BYTE = 0,  // erstes Byte (von mehreren)
  SPI_LAST_BYTE,       // letztes Byte (von mehreren)
  SPI_OTHER_BYTE,      // nicht erstes und nicht letztes Byte
  SPI_SINGLE_BYTE      // ein einzelnes Byte
}SPI1_Byte_t;

Funktionen (für SPI1) :

1
2
3
ErrorStatus UB_SPI1_HD_Init(SPI1_Mode_t mode);       // zum initialisieren der SPI-Schnittstelle
void UB_SPI1_HD_SendByte(uint8_t wert);              // zum senden eines Bytes
uint8_t UB_SPI1_HD_ReceiveByte(SPI1_Byte_t byte_nr); // zum empfangen eines Bytes

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//--------------------------------------------------------------
// File     : main.c
// Datum    : 15.10.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.4
// GCC      : 4.7 2012q4
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der SPI-LoLevel-Library (Half-Duplex)
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------
 
#include "main.h"
#include "stm32_ub_spi2_hd.h"
 
//--------------------------------------------------------------
// ein Byte per SPI (Half-Duplex) senden
//--------------------------------------------------------------
void spi_send(uint8_t wert)
{
  // hier Code einfügen und
  // ChipSelect-Pin auf LO legen
 
  // byte senden
  UB_SPI2_HD_SendByte(wert);
 
  // hier Code einfügen und
  // ChipSelect-Pin auf HI legen
}
 
//--------------------------------------------------------------
// ein Byte per SPI (Half-Duplex) empfangen
//--------------------------------------------------------------
uint8_t spi_receive(void)
{
  uint8_t ret_wert;
 
  // hier Code einfügen und
  // ChipSelect-Pin auf LO legen
 
  // ein einzelnes byte empfangen
  ret_wert=UB_SPI2_HD_ReceiveByte(SPI_SINGLE_BYTE);
 
  // hier Code einfügen und
  // ChipSelect-Pin auf HI legen
 
  return(ret_wert);
}
 
int main(void)
{
  uint8_t wert;
 
  SystemInit(); // Quarz Einstellungen aktivieren
 
  // SPI2 (Half-Duplex) initialisieren
  // im Mode0 mit MSB-First
  UB_SPI2_HD_Init(SPI_MODE_0_MSB);
 
  // den Wert 0x45 per SPI (Half-Duplex) senden
  spi_send(0x45);
 
  // einen Wert per SPI (Half-Duplex) empfangen
  wert=spi_receive();
 
  while(1)
  {
 
  }
}

Hier die Library zum Download :

ub_stm32f4_spi_hd_v100

Hier der komplette CooCox-Projektordner zum Download :

Demo_65_SPI_HD_LoLevel


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.