![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
0men
Свой-
Постов
142 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
Весь контент 0men
-
CDC_Send_DATA использует USBD_CDC_TransmitPacket? Посмотрите, что возвращают функции
-
char strbuf[10]=""; вот это объявите вне функции - глобально. Она останется аргументом
-
strbuf попробуйте объявить как глобальный массив
-
для особо требовательного софта существует сертификация SIL - Safety Integrity Level. Остальное это все словоблудие
-
применяю HAL, код из куба только для первого ознакомления изредка
-
работа с eeprom M24M01-R на HAL
0men ответил Alex_Golubev тема в ARM
M24M02-DRMN6 I2C_HandleTypeDef I2cHandle; void I2C_init( void ) { I2cHandle.Instance = I2C3; I2cHandle.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; I2cHandle.Init.ClockSpeed = 400000; I2cHandle.Init.DualAddressMode = I2C_DUALADDRESS_DISABLED; I2cHandle.Init.DutyCycle = I2C_DUTYCYCLE_16_9; I2cHandle.Init.GeneralCallMode = I2C_GENERALCALL_DISABLED; I2cHandle.Init.NoStretchMode = I2C_NOSTRETCH_DISABLED; I2cHandle.Init.OwnAddress1 = 0xa0; // I2cHandle.Init.OwnAddress2 = 0xFE; __I2C3_CLK_ENABLE(); /* I2C SCL GPIO pin configuration */ GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; GPIO_InitStruct.Alternate = GPIO_AF4_I2C3; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* I2C SDA GPIO pin configuration */ GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Alternate = GPIO_AF4_I2C3; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); HAL_I2C_Init(&I2cHandle); } unsigned char EEPROM_write_byte ( uint32_t adr, uint8_t data ) { uint8_t i2c_adr = 0xa0; // set slave address for write if ((adr&0x10000) != 0) i2c_adr = 0xa2; if ((adr&0x20000) != 0) i2c_adr |= 0x04; while(HAL_I2C_Mem_Write(&I2cHandle, (uint16_t)i2c_adr, uint16_t(adr&0xffff), 2, &data, 1, 1000)!= HAL_OK); return( 0 ); } unsigned char EEPROM_write_page ( uint32_t adr, uint8_t * refdata ) { uint8_t i2c_adr = 0xa0; // set slave address for write if ((adr&0x10000) != 0) i2c_adr = 0xa2; if ((adr&0x20000) != 0) i2c_adr |= 0x04; while(HAL_I2C_Mem_Write(&I2cHandle, (uint16_t)i2c_adr, uint16_t(adr&0xffff), 2, refdata, 256, 1000) != HAL_OK); HAL_Delay( 6 ); return( 0 ); } unsigned char EEPROM_read_byte ( uint32_t adr, uint8_t * refdata ) { uint8_t i2c_adr = 0xa1; // set slave address for read if ((adr&0x10000) != 0) i2c_adr = 0xa3; if ((adr&0x20000) != 0) i2c_adr |= 0x04; while(HAL_I2C_Mem_Read(&I2cHandle, (uint16_t)i2c_adr, uint16_t(adr&0xffff), 2, refdata, 1, 1000)!= HAL_OK); return( 0 ); } -
Не везде требуется самолетная надежность. Я вот использую HAL, максимальный уровень оптимизации, сотни проборов, годы эксплуатации, сбоев нет. Все зависит от задачи и от кривизны рук.
-
что то мне подсказывает, что просто не включен клок... __I2C1_CLK_ENABLE();
-
содержимое MX_I2C1_Init покажите и перед while(1) напишите __enable_interrupt();
-
Не могу сделать сброс внешних i2c устройств
0men ответил simark1979 тема в ARM
так вы залезьте внутрь HAL_I2C_Master_Receive и посмотрите причину HAL_BUSY. Там не так много вариантов -
Возможно, когда буферы пишутся, контроллер сдрам пишет их, используя бурст, это самый быстрый доступ. При асинхронном чтении (записи) все значительно медленнее.
-
Дело точно не в СДРАМ. У меня контроллер памяти на циклоне, разницы в скорости доступа к разным банкам нет никакой
-
I2C HAL DS2482
0men ответил simark1979 тема в STM
Вот вот ))) на самом деле, много где указано в протоколе, что требуется Repeated START, но на моем опыте всегда работает STOP с новым стартом -
I2C HAL DS2482
0men ответил simark1979 тема в STM
под повторными вы подразумеваете Repeated START Condition? // Write both Design Capacity bytes starting at 0x4A data[1] = 0x46; data[2] = 0x11; while(HAL_I2C_Master_Transmit(&I2cHandle, (uint16_t)0xaa, &data[1], 2, 100)!= HAL_OK); data[1] = 0x47; data[2] = 0x30; while(HAL_I2C_Master_Transmit(&I2cHandle, (uint16_t)0xaa, &data[1], 2, 100)!= HAL_OK); исправлено: Repeated здесь не будет, но скажите страницу в доке где он так необходим? Строку с Repeated можно разбить на 2 отдельные посылки -
I2C HAL DS2482
0men ответил simark1979 тема в STM
Что там декодировать то? Пару байт? Ваша задача правильно написать принцип записи байта и чтения байта. На этом все -
I2C HAL DS2482
0men ответил simark1979 тема в STM
без осциллографа пытаться скрестить слона и носорога? это фантастика -
USB_OTG_GOTGINT_SEDET как раз и работает с VBUS Bit 2 SEDET: Session end detected The core sets this bit to indicate that the level of the voltage on VBUS is no longer valid for a B-Peripheral session when VBUS < 0.8 V
-
там, видимо, как то иначе, не работал с первой серией
-
у него все уже подпаяно, если внимательно почитать. куб определяет при вхождении в прерывание OTG_FS_IRQHandler через флаг USB_OTG_GOTGINT_SEDET
-
у меня тоже через куб, как и у автора. Это штатная переменная в кубе
-
мой вариант прекрасно работает :)
-
if (hUsbDevice_0 == 0) то шнурок отключен
-
если использовать HAL, то там есть такая каллбэк функция, которая вызовется при завершении транзакции SPI_DMATransmitCplt
- 7 ответов
-
- stm32f429
- stm32f429 dma spi
- (и ещё 2 )
-
впаяйте в рабочую и нерабочую платы, посмотрите.. попробуйте купить несколько процессоров другой ревизии, в элитане есть С Что еще можно попробовать, но это уже сродни танцу с бубном: в LowLevelInit исправить AT91C_MC_FWS_1FWS на AT91C_MC_FWS_2FWS