Регистры SPI обнаружения STM32F429

Я пытаюсь использовать плату обнаружения STM32F429 для связи в режиме только передачи с ЖК-дисплеем через SPI. Однако каждый раз, когда я записываю данные в регистр данных для вывода, я не вижу, чтобы в моем представлении отладки (CrossStudio) ничего не загружалось.

int main(void) {
int j;

    SET_BIT(RCC->AHB1ENR,(RCC_AHB1ENR_GPIOCEN | RCC_AHB1ENR_GPIOAEN) );


    MODIFY_REG(GPIOC->MODER,
               (GPIO_MODER_MODER10 | GPIO_MODER_MODER12)  , 
               (GPIO_MODER_MODER10_1 | GPIO_MODER_MODER12_1) ); // Sets to alternate function

    SET_BIT(GPIOC->OTYPER, (GPIO_OTYPER_OT_10 | GPIO_OTYPER_OT_12)); // Set output to push-pull type
    CLEAR_BIT(GPIOC->PUPDR, (GPIO_PUPDR_PUPDR10 | GPIO_PUPDR_PUPDR12) ); // Disable push pull resistors
SET_BIT(GPIOC->OSPEEDR, (GPIO_OSPEEDER_OSPEEDR10 | GPIO_OSPEEDER_OSPEEDR12) ); // Set speed high
     /* Set the Alternate Function for the SPI3 pins */
   // Port C Pins 7-0
    GPIOC->AFR[0] = 0x00000000; // PTC lower order pins are default
    // Port C Pins 15-8
    GPIOC->AFR[1] = 0x00066600; // PTC pins 10, 11, and 12 are for SPI (AF6 = 0x6)

    // Set up SS for screen
    MODIFY_REG(GPIOA->MODER, GPIO_MODER_MODER4 , GPIO_MODER_MODER4_0 );

    SET_BIT(GPIOA->BSRRL, 0b10000); //Sets pin 4 high





   // Enable the peripheral clock for SPI3
    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);
    CLEAR_BIT(SPI3->CR1, SPI_CR1_CPHA);
    CLEAR_BIT(SPI3->CR1, SPI_CR1_CPOL);
    //SET_BIT(SPI3->CR1, SPI_CR1_BIDIMODE);
    //SET_BIT(SPI3->CR1, SPI_CR1_BIDIOE); 
    SET_BIT(SPI3->CR1, SPI_CR1_SSM);//
    SET_BIT(SPI3->CR1, SPI_CR1_SSI);
    SET_BIT(SPI3->CR1, SPI_CR1_MSTR); // Set Master configuration
    /* TODO: Set Baud to 2 MHz (not just a random prescaler) */
    MODIFY_REG(SPI3->CR1, SPI_CR1_BR, SPI_CR1_BR); //Set to fCLK/256
    CLEAR_BIT(SPI3->CR1, SPI_CR1_LSBFIRST); // write out MSB first
    SET_BIT(SPI3->CR1, SPI_CR1_SPE); // Enable SPI3

transmitData[0]= MODE_CLEAR;
transmitData[1]=0x00;


    for(j = 0; j < 2; j++) {
        //TM_SPI_Send(SPI3, transmitData[j]);
                      SPI3->DR = transmitData[j]; // Write data to the data register
                    while( !(READ_BIT(SPI3->SR, SPI_SR_TXE)) ); // Wait until transmit is complete
                    while( READ_BIT(SPI3->SR, SPI_SR_BSY) );
    }
            SET_BIT(GPIOA->BSRRH, 0b10000); //Sets pin 4 low

Контакт 4 - это контакт для выбора микросхемы, и мой осциллограф показывает, что он работает нормально. Я просто не могу ничего вытащить из контактов SPI.


person CODY STEVENS    schedule 21.08.2014    source источник


Ответы (1)


Оказывается, у меня был случайно установлен выход на открытый сток, я использовал SET_BIT, когда мне нужно было CLEAR_BIT

       CLEAR_BIT(GPIOC->OTYPER, (GPIO_OTYPER_OT_10 | GPIO_OTYPER_OT_12)); // Set output to push-pull type
person CODY STEVENS    schedule 21.08.2014