26.05.2016, 00:06
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: I2C как правильно использовать в stm32f4
Сообщение от AR_Favorit
|
bass1981, Вы бы не ссылку на пример, а свой проект дали... Мало ли там что)
|
Он под пятый кейл... И я кода поднакидал... Половину файлов стоит в установчной папке... Нужно стартапы переносить в инклуды и т.д.....
Код:
|
int32_t WriteCommand_8 (int i2c, uint8_t Command)
{
I2C_wr_buf[0] = (uint8_t)(Command);
// wr_buf[1] = (uint8_t)(data ›› 8);
// wr_buf[2] = (uint8_t)(data & 0xff);
// memcpy (&wr_buf[2], &buf[0], len);
I2Cdrv-›MasterTransmit (i2c, I2C_wr_buf, 1, false);
while (I2Cdrv-›GetStatus().busy);
if (I2Cdrv-›GetDataCount () != ( 1 )) return -1;
/* Acknowledge polling */
do {
I2Cdrv-›MasterReceive (i2c, &I2C_wr_buf[0], 1, false);
while (I2Cdrv-›GetStatus().busy);
} while (I2Cdrv-›GetDataCount () ‹ 0);
return 0;
}
int32_t Initialize (void)
{
I2Cdrv-›Initialize (NULL);
I2Cdrv-›PowerControl (ARM_POWER_FULL);
I2Cdrv-›Control (ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST);
I2Cdrv-›Control (ARM_I2C_BUS_CLEAR, 0);
return 1;
}
HAL_Init();
SystemClock_Config();
Initialize();
задержка
WriteCommand_8 (254, 5) ; |
|
|
|
|
26.05.2016, 00:16
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: I2C как правильно использовать в stm32f4
Сообщение от bass1981
|
И я кода поднакидал...
|
Ну и что? Если у вас шина пустая, то МК не получает АСК и всё затыкается. Вам же сказали, разбирайтесь с протоколом. Если повесить на шину пока нечего, а только чтобы посмотреть, то тогда или софтовый с игнором АСК или хардварный с настройкой игнора, иначе и будет затыкаться.
|
|
|
|
26.05.2016, 00:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,538
Сказал спасибо: 698
Сказали Спасибо 4,313 раз(а) в 1,977 сообщении(ях)
|
Re: I2C как правильно использовать в stm32f4
Сообщение от STM32F0
|
Ну и что? Если у вас шина пустая, то МК не получает АСК и всё затыкается. Вам же сказали, разбирайтесь с протоколом. Если повесить на шину пока нечего, а только чтобы посмотреть, то тогда или софтовый с игнором АСК или хардварный с настройкой игнора, иначе и будет затыкаться.
|
Да был тут уже один такой придурок. Советы давал копипастя из инета. Думал не просекут.
__________________
Я не помогаю. Я провоцирую думать.
Не дай вам Бог плохих контактов.
|
|
|
|
26.05.2016, 00:28
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: I2C как правильно использовать в stm32f4
Помним этого придурка. В РАМе залоченного СТМ8 ковырялся и копипастил метеостанцию. Ну просто сказочный придурок!
|
|
|
|
26.05.2016, 00:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: I2C как правильно использовать в stm32f4
Вот все же, видать, правы, что я ничо не знаю и не понимаю. Я-то, как и ТС, думал, что чтобы до ACK дело дошло, МК должен байт наружу выпихнуть, и даже если этот байт ноль - все равно, на SCL-то тактовые импульсы должны были побывать. А тут оказывается вон оно как. Он уже сразу после START знает, что там нет ничего, и ваще ничего на шины не выдает.
Потому и просил проект, что подозревал "глупый" промах где-то в настройках... Ну там не на той ноге AF включили или что-то подобное. А тут, оказывается, все гораздо сложнее. Тахионный IIC, это вам не хухры-мухры...
|
|
|
|
26.05.2016, 00:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,538
Сказал спасибо: 698
Сказали Спасибо 4,313 раз(а) в 1,977 сообщении(ях)
|
Re: I2C как правильно использовать в stm32f4
Сообщение от STM32F0
|
В РАМе залоченного СТМ8 ковырялся и копипастил метеостанцию.
|
Похоже шарманку серьезно заело
Это ты где видел залоченый РАМ умник? У себя в бошке очевидно? Вот и заедает.
И ведь раз 15 это повторил.
__________________
Я не помогаю. Я провоцирую думать.
Не дай вам Бог плохих контактов.
Последний раз редактировалось Kabron; 26.05.2016 в 00:56.
|
|
|
|
26.05.2016, 00:40
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: I2C как правильно использовать в stm32f4
Вот такая картина на анализаторе при подаче байта адреса.. И глохнет.... До аска не доходит как подметили...
uint32_t busy: 1 Busy flag.
uint32_t mode: 1 Mode: 0=Slave, 1=Master.
uint32_t direction: 1 Direction: 0=Transmitter, 1=Receiver.
uint32_t general_call: 1 General Call indication (cleared on start of next Slave operation)
uint32_t arbitration_lost: 1 Master lost arbitration (cleared on start of next Master operation)
uint32_t bus_error: 1 Bus error detected (cleared on start of next Master/Slave operation)
При запросе статуса...
busy: 1 mode: 1 остальное все по нулям....
Последний раз редактировалось bass1981; 26.05.2016 в 02:14.
|
|
|
|
26.05.2016, 19:47
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: I2C как правильно использовать в stm32f4
Ишибка при инициализации ...
Код:
|
I2Cdrv-›Control (ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST); |
Возвращает еррор
Код:
|
if ((i2c-›info-›flags & I2C_POWER) == 0U) {
/* I2C not powered */
return ARM_DRIVER_ERROR; |
Срабатывает на данном месте...
хотя
Код:
|
I2Cdrv-›Initialize (NULL);
I2Cdrv-›PowerControl (ARM_POWER_FULL); |
Проходит гладко..
|
|
|
|
26.05.2016, 20:02
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: I2C как правильно использовать в stm32f4
Тот пример кода действует в рамках RTOS. Если у вас RTOS не налажена, то пример и работать то толком не будет.
Для того, чтобы просто разобраться с I2C, в пустом проекте с минимальной конфигой - RM0090 в помощь: стр.708 - описание модуля, стр.714 - порядок действий для запуска в мастер-режиме. Не забываем конфигить пины и включать тактирование периферии
|
|
|
|
26.05.2016, 20:41
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: I2C как правильно использовать в stm32f4
Сообщение от NewWriter
|
Тот пример кода действует в рамках RTOS. Если у вас RTOS не налажена, то пример и работать то толком не будет.
Для того, чтобы просто разобраться с I2C, в пустом проекте с минимальной конфигой - RM0090 в помощь: стр.708 - описание модуля, стр.714 - порядок действий для запуска в мастер-режиме. Не забываем конфигить пины и включать тактирование периферии
|
USB нормально работает.... Пример который в первом посте(ссылка), был переделан под I2C2 ... И заработал.... Ну пока окнчательно не знаю как он заработал, первым байтом плюеться и его советуют только для проверки использовать... Точно щас у меня нервов не хватит и займусь кощунством... Это запущу ногодрыг...
Причем
Код:
|
/* Ready for operation */
i2c-›info-›flags |= I2C_POWER;
Проходит отладчиком в функции I2Cdrv-›PowerControl (ARM_POWER_FULL);
И потом в I2Cdrv-›Control (ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST)
Вылетает на первой проверке...
if ((i2c-›info-›flags & I2C_POWER) == 0U) {
/* I2C not powered */
return ARM_DRIVER_ERROR;
} |
Так попробуем закоментировать данную проверку..
А первый байт пошел ))))
Только для этого пришлось исправить драйвер....)))
Последний раз редактировалось bass1981; 26.05.2016 в 21:14.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:13.
|
|