STM32F0 Ayuda para configurar SPI

1

Estoy tratando de configurar el SPI. Seguí la lógica de otros tutoriales pero sin éxito. ¿Alguien me puede apuntar en la dirección correcta?

void spi_setup(void) {

    RCC_AHBENR |= _BV(17); //IOPAEN
    RCC_APB2ENR |= _BV(12); //SPI1EN

    GPIOA_OSPEED |= 0x11<<7 | 0x11<<6 | 0x11<<5; //GPIO CLOCK SPEED
    GPIOA_MODER |= _BV(5*2+1)/*AFM*/ | _BV(6*2+1)/*AFM*/ | _BV(7*2+1)/*AFM*/;
    GPIOA_AFRL |= 0;
    //GPIOA_OTYPER = _BV(7) | _BV(6) | _BV(5); //output OPEN-DRAIN
    //GPIOA_PUPDR |= _BV(7*2+1)/*pull DOWN*/ | _BV(6*2+1)/*pull DOWN*/ | _BV(5*2+1)/*pull DOWN*/;

    SPI1_CR2 |= 0x111<<8/*8B data size*/;
    SPI1_CR1 = _BV(9)/*Soft slave man*/ | _BV(6)/*SPI Enable*/| (0x0<<3)/*BaudRate*/ | _BV(2)/*Master*/ | _BV(0)/*Clock Polarity*/;
}

void spi_tx (uint8_t send) {

    while ( SPI1_SR & _BV(7) ) {} /*while BUSY WAIT */

    SPI1_DR = send;
}
    
pregunta Hugo

2 respuestas

3

Este es un ejemplo de cómo no escribir código:

  

RCC_APB2ENR |= _BV(12); //SPI1EN

Tienes que recordar lo que significa el bit 12, un usuario usualmente busca en el manual para verificarlo. Repetir esto para todos los otros bits lleva demasiado tiempo y los errores son muy difíciles de detectar.

Por eso hay una STM32F0xx biblioteca de periféricos estándar . Usando esto puedes escribir un código mucho más legible:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

También esperaría encontrar algún código de ejemplo para SPI en el sitio web de los proveedores.

    
respondido por el Turbo J
-2

Debe usar el paquete de fragmentos de código ST para STM32F0, no use la biblioteca de periféricos estándar como se muestra arriba. Esta biblioteca no funciona con STM32F0xx, esta biblioteca está preparada solo para los chips STM32f1xx-4xx.

    
respondido por el Polo1045

Lea otras preguntas en las etiquetas