понедельник, 1 февраля 2016 г.

Трудности завода SPI на stm32f042

С большим трудом завел SPI1 на STM32F042. Все от того, что использовал готовую periphLib. А в ней не учтен ньюанс доступа к регистру данных SPI в 8 битном режиме.

#define SPI1_DR_8bit          (*(__IO uint8_t *)((uint32_t)&(SPI1->DR))) 
///
//CUT
///
  void Spi1_init(void) 
  {
       
      RCC->APB2ENR |=RCC_APB2ENR_SPI1EN;
                           
      SPI1->CR1 |= 
                   SPI_CR1_BR_0 |    
                   SPI_CR1_BR_1 |
                   SPI_CR1_MSTR |
                   SPI_CR1_SSI    |             
                   SPI_CR1_SSM 
                   ;   
   SPI1->CR2  = 0x700;   //  8 bit
   SPI1->CR2 |= SPI_CR2_FRXTH;
   SPI1->CR1 |= SPI_CR1_SPE;   

  }

    uint8_t Spi1_send (uint8_t data)
      { 
        while (!(SPI1->SR & SPI_SR_TXE));     
        SPI1_DR_8bit = data;                       
        while (!(SPI1->SR & SPI_SR_RXNE));     
        
        return (SPI1_DR_8bit);              
      }


      uint8_t Spi1_read (void)
      { 
     
        return    Spi1_send(0xFF);  
 
      }