2018-11-02 10:52 AM
2018-11-02 11:47 AM
Some pretty simple stuff here that should work on an F051 based board
STM32Cube_FW_F0_V1.9.0\Drivers\BSP\STM32F072B-Discovery\stm32f072b_discovery.c
STM32Cube_FW_F0_V1.9.0\Drivers\BSP\STM32F072B-Discovery\stm32f072b_discovery_eeprom.c
2018-11-03 02:04 PM
super simple, do you use the cube ?
I had to write code for a 4port DAC.
Everyone knows IIC can be problematic, however, this worked first time without any initialisation other than enabled in the cube.
//#define MCP4728_DacAddress 0x60 << 1
void write4Dacs(void) {
struct DacIIC MCP4728IIC;
HAL_StatusTypeDef IIC_Response;
//Channel 0
MCP4728IIC.DacTxBuffer[0] = (Dac0_Value & 0x0f00) >> 8; // Dac0Value adjusted in another process..
MCP4728IIC.DacTxBuffer[1] = Dac0_Value & 0x00ff;
//Channel 1
Dac1_Value = Dac0_Value + (4096 * 1) / 5; // 1V // test DAC2
MCP4728IIC.DacTxBuffer[2] = (Dac1_Value & 0x0f00) >> 8;
MCP4728IIC.DacTxBuffer[3] = Dac1_Value & 0x00ff;
//Channel 2
Dac2_Value = Dac1_Value + (4096 * 1) / 5; // 2V
MCP4728IIC.DacTxBuffer[4] = (Dac2_Value & 0x0f00) >> 8;
MCP4728IIC.DacTxBuffer[5] = Dac2_Value & 0x00ff;
//Channel 3
Dac3_Value = Dac2_Value + (4096 * 1) / 5; // 3V
MCP4728IIC.DacTxBuffer[6] = (Dac3_Value & 0x0f00) >> 8;
MCP4728IIC.DacTxBuffer[7] = Dac3_Value & 0x00ff;
//DAC_IIC.write(DAC_ADDR + (Dac_Address << 1), buf, 8); //MBED write
IIC_Response = HAL_I2C_Master_Transmit(&hi2c1, MCP4728_DacAddress, &MCP4728IIC.DacTxBuffer[0], 8, 10);
}