1 | void HMC5883L_init(void)
|
2 | {
|
3 | GPIO_InitTypeDef GPIO_InitStructure;
|
4 | I2C_InitTypeDef I2C_InitStructure;
|
5 |
|
6 | // write CONFIG_A register
|
7 | uint8_t tmp = (HMC5883L_AVERAGING_8 << (HMC5883L_CRA_AVERAGE_BIT - HMC5883L_CRA_AVERAGE_LENGTH + 1)) |
|
8 | (HMC5883L_RATE_15 << (HMC5883L_CRA_RATE_BIT - HMC5883L_CRA_RATE_LENGTH + 1)) |
|
9 | (HMC5883L_BIAS_NORMAL << (HMC5883L_CRA_BIAS_BIT - HMC5883L_CRA_BIAS_LENGTH + 1)) ;
|
10 |
|
11 | // Enable clock
|
12 | RCC_APB1PeriphClockCmd(HMC5883L_I2C_RCC_Periph, ENABLE);
|
13 | RCC_AHB1PeriphClockCmd(HMC5883L_I2C_RCC_Port, ENABLE);
|
14 |
|
15 | // Performing a Reset
|
16 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
|
17 | RCC_APB1PeriphResetCmd(HMC5883L_I2C_RCC_Periph, ENABLE);
|
18 | RCC_APB1PeriphResetCmd(HMC5883L_I2C_RCC_Periph, DISABLE);
|
19 |
|
20 | // Connect Pins to AF function
|
21 | GPIO_PinAFConfig(HMC5883L_I2C_Port, HMC5883L_I2C_SCL_Pin, HMC5883L_I2C_SCL_AF);
|
22 | GPIO_PinAFConfig(HMC5883L_I2C_Port, HMC5883L_I2C_SDA_Pin, HMC5883L_I2C_SDA_AF);
|
23 |
|
24 | // Configure I2C SCL Pin(Pin10), SDA Pin (pin11)
|
25 | GPIO_InitStructure.GPIO_Pin = HMC5883L_I2C_SCL_Pin | HMC5883L_I2C_SDA_Pin;
|
26 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
27 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
28 | GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
|
29 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
30 | GPIO_Init(HMC5883L_I2C_Port, &GPIO_InitStructure);
|
31 |
|
32 | // Configure I2C
|
33 | I2C_DeInit(HMC5883L_I2C);
|
34 | I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; // I2C mode
|
35 | I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; // 50% duty cycle -> standard
|
36 | I2C_InitStructure.I2C_OwnAddress1 = 0; // not relevant in master mode
|
37 | I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
|
38 | I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; // Set address length to 7 bit addresses
|
39 | I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED;
|
40 | I2C_Init(HMC5883L_I2C, &I2C_InitStructure);
|
41 |
|
42 | /*ENABLE*/
|
43 | I2C_Cmd(HMC5883L_I2C, ENABLE);
|
44 |
|
45 | HMC5883L_I2C_ByteWrite(HMC5883L_DEFAULT_ADDRESS, &tmp ,HMC5883L_RA_CONFIG_A); // <== Hier hängt er sich auf
|
46 | }
|