Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

STM32F4. Урок 18 - Низкоуровневый I2C

Эта библиотека предназначена для использования интерфейса I2C в режиме Master. Выбранные выводы I2C должны быть записаны в C-файле (в H-файле можно регулировать частоту тактирования). К линиям SCL и SDA необходимо подключить подтягивающие вверх резисторы по 4,7кОм, иначе интерфейс работать не будет. Данная библиотека позволяет использовать низкоуровневые функции для отправки и получения байтов от устройства Slave.В библиотеке есть функции для приема/отправки как одиночных байтов, так и последовательности. Для приема/отправки нескольких байт используется массив. Также предусмотрена функция паузы, необходимая для работы с медленными устройствами. В примере приведено три одинаковые библиотеки - I2C1, I2C2 и I2C3. Для работы с библиотекой I2C1 SCL подключается к PB6, а SDA - к PB7.

Требования:

   Подключаемые модули CooCox-IDE: GPIO, I2C.
   Поддерживаемые библиотеки: отсутствуют.

Функции:

void UB_I2C1_Init(void);                                                     // инициализация интерфейса I2C
int16_t UB_I2C1_ReadByte(uint8_t slave_adr, uint8_t adr);                    // прочтение байта
int16_t UB_I2C1_WriteByte(uint8_t slave_adr, uint8_t adr, uint8_t wert);     // запись байта
int16_t UB_I2C1_ReadMultiByte(uint8_t slave_adr, uint8_t adr, uint8_t cnt);  // чтение нескольких байт
int16_t UB_I2C1_WriteMultiByte(uint8_t slave_adr, uint8_t adr, uint8_t cnt); // запись нескольких байт
void UB_I2C1_Delay(volatile uint32_t nCount);                                // функция паузы

Пример использования:

//--------------------------------------------------------------
// File     : main.c
// Datum    : 07.03.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der I2C-LoLevel-Library
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------

#include "main.h"
#include "stm32_ub_i2c1.h"

int main(void)
{
  int16_t wert;

  SystemInit(); // Инициализация кварца

  UB_I2C1_Init(); // Инициализация I2C1

  // Байт ведомого устройства I2C с адресом 0xA0
  // Читать адрес 0x01 из регистра
  wert=UB_I2C1_ReadByte(0xA0,0x01);
  if(wert<0) {
	 // ошибка
  }

  // Байт 0x12  ведомого устройства I2C с адресом 0xC0
  // Сохранить в регистре адрес 0х02
  wert=UB_I2C1_WriteByte(0xC0,0x02,0x12);
  if(wert<0) {
	 // ошибка
  }

  UB_I2C1_Delay(400); // небольшая пауза

  while(1)
  {

  }
}

В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.

Оригинал статьи

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (3) | Я собрал (0) | Подписаться

+1
Толик #
Хочу поделиться своей библиотекой для STM32F4 для Mastrer и для Slave. Кому-нибудь точно пригодится!
Прикрепленный файл: I2C_slave.rar
Прикрепленный файл: I2C_master.rar
Ответить
0
vadim #
Толик, как пользоваться твоей библиотекой. Напиши хоть пример для main()
Ответить
0
CoBa31Rus #
Покажите мне низкоуровневость в этой библиотеке. Это лишь еще один уровень абстракции над абстракцией SPL.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Ветрогенератор Модуль измерения тока на ACS712 (30А)
вверх