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