#include "stm32f10x.h" #include "stdio.h" #include "Driver_SPI.h" void driver_spi_1_init(char Prio, void (*IT_function)(void)) { /*Activation de la clock*/ RCC->APB2ENR = RCC_APB2ENR_SPI1EN; /*Select the freq*/ SPI1->CR1 |= SPI_CR1_BR_1; //5Mhz max -> fPCLK = 36Mhz -> 010: fPCLK/8 /*Select Master mode*/ SPI1->CR1 |= SPI_CR1_MSTR; /*Software slave management*/ SPI1->CR1 |= SPI_CR1_SSM; /*Clock Phase Selection*/ SPI1->CR1 |= SPI_CR1_CPHA; /*Clock Polarity Selection*/ SPI1->CR1 |= SPI_CR1_CPOL; /*Mode 16bits - 16-bit data frame format*/ //SPI1->CR1 |= SPI_CR1_DFF; /*Activation de l'interruption*/ SPI1->CR2 |= SPI_CR2_RXNEIE; NVIC_EnableIRQ(SPI_IRQn); NVIC_SetPriority(ADC1_2_IRQn, Prio); /*Vider le buffer d'emission/réception 0xFFFF*/ SPI1->DR = SPI_DR_DR; /*Enable SPI*/ SPI1->CR1 |= SPI_CR1_SPE; } void driver_spi_1_write(uint16_t data_write) { SPI1->DR = data_write; /*Active la sélection du SLAVE*/ SPI1->CR1 |= SPI_CR1_SSI; } uint16_t driver_spi_1_read() { //Abaissage automatique du flag RxNE return SPI1->DR; }