Vielen Dank für euer Feedback.
Ich konnte die ersten Schritte mit i2c nun begehen. Der Code:
1 |
|
2 | /*Init:*/
|
3 | RCC->CFGR |= RCC_CFGR_PPRE2_2;
|
4 | RCC->APB2ENR |= RCC_APB2ENR_IOPBEN | RCC_APB2ENR_AFIOEN;
|
5 | RCC->APB1ENR |= RCC_APB1ENR_I2C1EN;
|
6 |
|
7 |
|
8 | I2C1->CR1 &= ~I2C_CR1_PE;
|
9 | I2C1->CR2 = 0x24;
|
10 | I2C1->CCR |= 0x80;
|
11 | //I2C1->CR1 = 0x08;
|
12 | I2C1->TRISE |= 0x09;
|
13 | I2C1->CR1 |= I2C_CR1_PE;
|
14 |
|
15 | GPIOB->CRL |= GPIO_CRL_CNF6_1 | GPIO_CRL_CNF6_0
|
16 | | GPIO_CRL_CNF7_1 | GPIO_CRL_CNF7_0
|
17 | | GPIO_CRL_MODE6_0 | GPIO_CRL_MODE7_0
|
18 | | GPIO_CRL_MODE6_1 | GPIO_CRL_MODE7_1;
|
und das Senden der Adresse:
1 |
|
2 | I2C1->CR1 |= I2C_CR1_START;
|
3 | while(!(I2C1->SR1 & I2C_SR1_SB)){};
|
4 | I2C1->DR |= 0x07;
|
5 | while(!(I2C1->SR1 & I2C_SR1_ADDR)){};
|
6 | I2C1->SR2;
|
@Stefan
Ist das deine eigene Library zum Setzen von Bits, bytes, registern etc?
Und ich finde es ziemlich cool, das die Initialisierungsroutine
generischer gehalten wurde. Ich hätte für I2C1 und I2C2 jeweils eine
Init funktion erstellt. Naja bin halt Anfänger :D
Deswegen auch eine Frage zum Code: Ich nutze diese While schleifen zum
pollen... Sollte man sowas eventuell über interrups lösen oder ist das
in diesem Fall irrelevant?