Форум РадиоКот https://radiokot.ru/forum/ |
|
STM32F103C8T6 и модуль DS1307 по аппаратному I2C https://radiokot.ru/forum/viewtopic.php?f=59&t=149201 |
Страница 1 из 1 |
Автор: | Denis82 [ Ср окт 18, 2017 17:02:03 ] |
Заголовок сообщения: | STM32F103C8T6 и модуль DS1307 по аппаратному I2C |
Доброго времени суток коты ! есть проект в CooCox CoIDE Version: 1.7.8 есть STM32F103C8T6 использую библиотеку из CooCox stm32f10x_i2c.h столкнулся с проблемой, модуль DS1307 не отвечает (или не правильно отвечает) на команду START инициализирую I2C так Код: GPIO_InitTypeDef gpio; I2C_InitTypeDef i2c; RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /* Configure I2C_EE pins: SCL and SDA */ gpio.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_Init(GPIOB, &gpio); /* I2C configuration */ i2c.I2C_Mode = I2C_Mode_I2C; i2c.I2C_DutyCycle = I2C_DutyCycle_2; i2c.I2C_OwnAddress1 = 0; i2c.I2C_Ack = I2C_Ack_Enable; i2c.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; i2c.I2C_ClockSpeed = 100000; /* Apply I2C configuration after enabling it */ I2C_Init(I2C1, &i2c); /* I2C Peripheral Enable */ I2C_Cmd(I2C1, ENABLE); далее функция установки состояния СТАРТ и отсылки адреса (найдено на просторах интернета) Код: // На всякий случай ждем, пока шина освободится while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); // Генерируем старт - тут все понятно ) I2C_GenerateSTART(I2C1, ENABLE); // Ждем пока взлетит нужный флаг while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); // Посылаем адрес подчиненному I2C_Send7bitAddress(I2C1, slaveAddress, transmissionDirection); while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); // А теперь у нас два варианта развития событий - в зависимости от выбранного направления обмена данными if(transmissionDirection == I2C_Direction_Transmitter) { while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); } if(transmissionDirection == I2C_Direction_Receiver) { while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); } так вот, после формирования СТАРТ I2C_GenerateSTART(I2C1, ENABLE); функция I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT) возвращает ERROR при этом модуль прекрасно работает на софтовом I2C настроенном на эти-же ножки порта (GPIO_Pin_8 | GPIO_Pin_9) подскажите, куда копать ? Добавлено after 4 hours 6 minutes 11 seconds: хм ... сейчас ткнулся осциллографом на шину i2c и при программном i2c вижу обмен при аппаратном вообще тишина возможно я что-то забыл при инициализации ? |
Автор: | Fusion [ Ср окт 18, 2017 20:20:35 ] |
Заголовок сообщения: | Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C |
Еще надо AFIO включить: RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); Вот тут рабочий код для STM103C8T6 и I2C датчика AP3216C: http://cvs.aiq.ru/ap3216/i2c.html |
Автор: | rrshaman [ Сб окт 21, 2017 16:22:58 ] |
Заголовок сообщения: | Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C |
Вам стоит заглянуть сюда http://www.st.com/content/ccc/resource/ ... 211391.pdf что бы у вас отбило охоту пользовать в STM23F1XX аппаратный I2C. Я в свое время повозился с ним и работать заставил, но до какой либо неполадки. После любого сбоя оно поднималось только после сброса контроллера. Вот еще тема http://we.easyelectronics.ru/steel_ne/s ... otona.html Так что советую оставить софтовый, с ним обычно все работает. |
Автор: | Denis82 [ Вс окт 22, 2017 13:47:10 ] |
Заголовок сообщения: | Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C |
спасибо за информацию ! пробовал на выходных по разному, грешил на емкость монтажа, фазы луны, настроение домочадцев ![]() потому видимо его, софтовый i2c, и оставлю чтоб не открывать новую тему: а с аппаратным SPI та-же засада ? |
Автор: | Fusion [ Вс окт 22, 2017 22:52:20 ] |
Заголовок сообщения: | Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C |
Аппаратный SPI работает отлично (например с дисплейчиком 2.2 дюйма) Аппаратный I2C 400 кГц с датчиком AP3216C у меня работает без сбоев. Вот тут проект для Кейл целиком: http://cvs.aiq.ru/ap3216/ap3216.html |
Автор: | dosikus [ Пн окт 23, 2017 08:05:45 ] |
Заголовок сообщения: | Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C |
Вы полностью читали, с камментами? Так что советую оставить софтовый, с ним обычно все работает. Такие "советы" надо множить на нуль... |
Автор: | rrshaman [ Пн окт 23, 2017 17:18:18 ] |
Заголовок сообщения: | Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C |
Вы полностью читали, с камментами? Естественно. В камментах обычно самое интересное. Однако там так никто и не привел того, как правильно делать и причин, почему не работает. А так то у нас все крутые. dosikus писал(а): Такие "советы" надо множить на нуль... Да ради бога. Fusion писал(а): Аппаратный I2C 400 кГц с датчиком AP3216C у меня работает без сбоев. У меня тоже работало без сбоев. Пока просто не отключишь физически провод и не подключишь обратно. Сколько там таких сюрпризов написано в errata. Вроде объем errata по i2c в STM32F1XX пока не превышает объем описания самого i2c в даташите. ![]() |
Автор: | prinv [ Чт окт 26, 2017 18:07:00 ] |
Заголовок сообщения: | Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C |
STM32F103C8T6 c DS1307 по аппаратному I2С работает нормально. Могу скинуть проект Cube+Keil с использованием HAL |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |