Advertisement
teplofizik

spi.c

Jun 1st, 2013
406
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.36 KB | None | 0 0
  1. //
  2. // SPI
  3. //
  4.  
  5. #include "spi.h"
  6. #include "gpio.h"
  7.  
  8. #include <stm32f4xx.h>
  9.  
  10. // SPI1
  11. // Выводы: PA5: SCK
  12. static const TPin SCK = { PA, 5 };
  13.  
  14. // Выводы: PA6: MISO
  15. static const TPin MISO = { PA, 6 };
  16.  
  17. // Выводы: PA7: MOSI
  18. static const TPin MOSI = { PA, 7 };
  19.  
  20. // Инициализация модуля SPI
  21. void spi_Init(void)
  22. {
  23.     // Альтернативная функция на выводах SCK/MISO/MOSI
  24.     gpio_SetAlternateFunction(&SCK, 5);
  25.     gpio_SetAlternateFunction(&MISO, 5);
  26.     gpio_SetAlternateFunction(&MOSI, 5);
  27.  
  28.     // Тактирование на модуль SPI
  29.     RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
  30.    
  31.     // Настроим скорость передачи: 0b100 (fp / 8)
  32.     SPI1->CR1 &= ~SPI_CR1_BR;
  33.     SPI1->CR1 |= (SPI_CR1_BR_1);
  34.    
  35.     // Программное управление SS (внутренним)
  36.     SPI1->CR1 |= SPI_CR1_SSI | SPI_CR1_SSM;
  37.    
  38.     // Установим флаг мастера (MSTR) и разрешения работы (SPE)
  39.     SPI1->CR1 |= SPI_CR1_MSTR | SPI_CR1_SPE;
  40. }
  41.  
  42. // Отправить байт по SPI
  43. uint8_t spi_Send(uint8_t Data)
  44. {
  45.     // Отправим
  46.     SPI1->DR = Data;
  47.    
  48.     // Подождём завершения
  49.     while(!(SPI1->SR & SPI_SR_RXNE)) {}
  50.    
  51.     // Вернм полученное
  52.     return SPI1->DR;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement