Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
alekssandr16
0 / 0 / 0
Регистрация: 17.05.2019
Сообщений: 2
1

STM32f1 I2C MCSIS. "I2C2->DR = I2C_ADDRESS(ADDR,I2C_MODE_WRITE);" - разжуйте от и до эту строку

02.12.2019, 00:08. Просмотров 246. Ответов 2
Метки нет (Все метки)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void I2C_Write(uint8_t reg_addr, uint8_t data)
{
//стартуем
I2C2->CR1 |= I2C_CR1_START;
while(!(I2C2->SR1 & I2C_SR1_SB)){};
(void) I2C2->SR1;
 
//передаем адрес устройства
I2C2->DR = I2C_ADDRESS(ADDR,I2C_MODE_WRITE);
while(!(I2C2->SR1 & I2C_SR1_ADDR)){};
(void) I2C2->SR1;
(void) I2C2->SR2;
 
//передаем адрес регистра
I2C2->DR = reg_addr;
while(!(I2C2->SR1 & I2C_SR1_TXE)){};
 
//пишем данные
I2C2->DR = data;
while(!(I2C2->SR1 & I2C_SR1_BTF)){};
I2C2->CR1 |= I2C_CR1_STOP;
}
Источник:
https://hubstub.ru/stm32/184-stm32-i2c.html
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2019, 00:08
Ответы с готовыми решениями:

2

_SayHello
788 / 474 / 156
Регистрация: 30.07.2015
Сообщений: 1,580
02.12.2019, 12:09 2
alekssandr16, как правило адрес утройства по шине I2C имеет размер 7 бит (есть еще 10 бит). Он передается в старших 7 битах, младший бит определяет направление передачи: чтение - 1, запись - 0 (если праильно помню).
Подозреваю что
C
1
I2C_ADDRESS(ADDR,I2C_MODE_WRITE)
это что то типа функции:

C
1
2
3
4
5
6
7
8
#define I2C_MODE_WRITE    0
#define I2C_MODE_WRITE    1
 
uint8_t I2C_ADDRESS(uint8_t addr, uint8_t direction)
{
      uint8_t tmp = addr << 1;
      return ((direction) ? (tmp | 0x01) : (tmp & 0xFE));
}
или макроса:
C
1
2
3
#define I2C_MODE_WRITE    0
#define I2C_MODE_READ    1
#define I2C_ADDRESS(x, y)        ((y) ? (((x) << 1) | 0x01) : (((x) << 1) & 0xFE))
0
liv
3164 / 1855 / 307
Регистрация: 07.10.2015
Сообщений: 4,245
Завершенные тесты: 1
02.12.2019, 12:53 3
alekssandr16, можно только добавить, что загрузкой в регистр DR тут же начинается передача байта вторым I2C
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2019, 12:53

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.