STM32F407xx MCU Configured as Master Tx

Status
Not open for further replies.

retheridge

New Member
Hello Everyone,

I'm currently taking a bare metal driver development course using STM32F407 Discovery Board. My project is to configure the STM MCU to act as a master with no attached slave peripheral. STM32CubeIDE Debug shows the following configuration :

C:
MSTR  = 01
SSI      = 01
SSM    = 01
CPOL and CPHA = 00
OTYPE = Push-Pull
OSPEED = FAST
PUPD Register = None
SPE = 01
char buff[] = "Hello World"

I believe everything is set to the course specification but I am getting no data activity on SCK(PB13) or MOSI(PB15) GPIO Pins. Why am I not receiving data on my EasySync USB Logic Analyzer? Here is a copy of my sending data api :

C:
/*
 * 006_SPI_SendTest.c
 *
 *  Created on: Nov 10, 2022
 *      Author: Rodney Etheridge
 */

/** Setup
 * SPI2_NSS  --> PB12 AF5
 * SPI2_SCLK --> PB13 AF5
 * SPI2_MISO --> PB14 AF5
 * SPI2_MOSI --> PB15 AF5
 */
#include <stdint.h>
#include <string.h>
#include "stm32f407xx_gpio_driver.h"
#include "stm32f407xx_spi_driver.h"

void PinInit()
{
    // Configure MOSI Pin
    GPIO_Handle_t spiPin;
    memset(&spiPin, 0, sizeof(spiPin));

    // Both pins share similar configurations
    spiPin.pGPIOx = GPIOB; // stm32f407xx.h --> line 191 --> #define GPIOB     ((GPIO_RegDef_t*) GPIOB_BADDR)
    spiPin.GPIO_PinConfig.GPIO_PinMode = GPIO_MODE_ALTFN;
    spiPin.GPIO_PinConfig.GPIO_PinAltFunMode = BIT5;
    spiPin.GPIO_PinConfig.GPIO_PinOPType = GPIO_OUTPUT_TYPE_PP;
    spiPin.GPIO_PinConfig.GPIO_PinSpeed = GPIO_SPEED_FAST;
    spiPin.GPIO_PinConfig.GPIO_PinPuPdControl = GPIO_PUPD_NONE;

    // Setting up MOSI pin
    spiPin.GPIO_PinConfig.GPIO_PinNumber = BIT15;
    GPIO_Init(&spiPin);

    // Setting up SCLK pin
    spiPin.GPIO_PinConfig.GPIO_PinNumber = BIT13;
    GPIO_Init(&spiPin);
}

int main()
{

    PinInit();

    // Configure spi2 for master communication
    SPI_Handle_t spi2;
    memset(&spi2, 0, sizeof(spi2));

    spi2.pSPIx = SPI2;
    spi2.SPIConfig.SPI_BusConfig = SPI_BUS_CFG_FULLD;
    spi2.SPIConfig.SPI_DeviceMode = SPI_DEVICE_MODE_MASTER;
    spi2.SPIConfig.SPI_Speed = SPI_CLK_SPEED_DIV2; //
    spi2.SPIConfig.SPI_DFF = SPI_DFF_MODE_8BIT;
    spi2.SPIConfig.SPI_CPHA = SPI_CLKPHA_LOW;
    spi2.SPIConfig.SPI_CPOL = SPI_CLKPOL_LOW;
    spi2.SPIConfig.SPI_SSM = SPI_SSM_ENABLE;
    SPI_Init(&spi2);

    // Manually setting SSI to high to avoid modf error.
    SPI_SSIConfig(spi2.pSPIx, ENABLE);
    spi2.pSPIx->SPI_CR2 |= (1 << 2);
    //spi2.pSPIx->SPI_CR1 |= (1 << 14);

    // Enable device after configuration
    SPI_SetupDevice(spi2.pSPIx, ENABLE);

    // Send data
    char buff[] = "Hello World";
    SPI_SendData(spi2.pSPIx, (uint8_t*)buff, strlen(buff));


    while (1)
    {
        /* code */
    }

    return 0;
}

I have attached copies of my header and driver implementation files. Any suggestions are greatly appreciated.

Thanks,

Rodney
 

Attachments

  • stm32f407xx_gpio_driver.h
    3.1 KB · Views: 255
  • stm32f407xx.h
    11.5 KB · Views: 247
  • stm32f407xx_spi_driver.h
    6.2 KB · Views: 243
  • STM32F407xx.C
    284 bytes · Views: 237
  • stm32f407xx_gpio_driver.c
    7.2 KB · Views: 246
  • stm32f407xx_spi_driver.c
    6.3 KB · Views: 240
Last edited by a moderator:
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…