cancel
Showing results for 
Search instead for 
Did you mean: 

NUCLEO-F072RB with DAC8775EVM via SPI

e230182
Associate

Hi all,

I am currently trying to configure the NUCLEO-F072RB to work with an EVM board from TI via SPI. I am very new at using STM32 and I am not quite sure how to go about it. 
1) I have already used CubeMX to do the recommended settings. Do I also need to write the control registers in spi.c as indicated in the F072RB reference manual? For example:

void configSpi_SSM(void)
{
//CONFIGURE SPI1_CR1 REGISTER
//CLEAR BITS
SPI1->CR1 &= ~((1u << 15) //FULL DUPLEX MODE
|(1u << 13) //NOT INTERESTED IN CRC CLACULATIONS, DISABLE CRC
|(1u << 10) //NOT INTERESTED IN SIMPLEX MODE
|(1u << 7) //MSB FIRST
|(7u << 3) //RESET BITS THAT DIVIDE THE FREQUENCY BEFORE SETTING THEM AGAIN
);

//SET BITS
SPI1->CR1 |= ((1u << 9) //SOFTWARE SLAVE MANAGEMENT
|(1u << ‌‌ //INTERNAL SLAVE SELECT
|(4u << 3) //DIVIDE SPI FREQUENCY BY 32
|(1u << 2) //MASTER MODE
|(0u << 1) //CLOCK POLARITY OF 0
|(1u << 0) //CLOCK PHASE OF 1
);


//CONFIGURE SPI1_CR2 REGISTER
//CLEAR BITS
SPI1->CR2 &= ~((1u << 12) //RXNE EVENT TRIGGERED AT 1/2 (16-BIT) RX FIFO LEVEL
|(7u << 5) //CLEAR INTERRUPT RELATED BITS AS WON'T BE USING INTERRUPTS
|(1u << 4) //SPI IN MOTOROLA FORMAT
|(1u << 3) //WON'T BE DOING CONSECUTIVE TRANSFERS
|(3u << 0) //WON'T BE USING DMA, DISABLE TX AND RX DMA REQUEST GENERATION
);

//SET BITS
SPI1->CR2 |= (15u << 8); //16-BIT DATA TRANSFERS

//ENABLE SPI1
SPI1->CR1 |= (1u << 6);
}


2) I know that the DAC demands 24 bit data (8-bit address, 16-bit data) and that I should write 3 8-bit data to it. I saw someone use HAL to transfer 3 8-bit data like so: 

HAL_StatusTypeDef dac8775_Write(uint8_t cmd, uint16_t data) {
uint8_t tx[3] = {
(cmd & 0x7F), // MSB = 0 for write
(uint8_t)(data >> 8),
(uint8_t)(data & 0xFF)
};

CS_Select();
HAL_StatusTypeDef status = HAL_SPI_Transmit(&hspi2, tx, 3, HAL_MAX_DELAY);
CS_Deselect();

return status;
}

Is this correct? I need to send the configuration data to the DAC in (8-bit address, 16-bit data) but I'm not sure if this is the way to send 24-bit data. I've tried it, but it doesn't seem to work.

Please let me know what other information you need and thanks in advance.

0 REPLIES 0