Перейти к содержанию
    

0men

Свой
  • Постов

    142
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Весь контент 0men


  1. Работа с VCP

    Значит надо копать внутрь этих функций.
  2. Работа с VCP

    CDC_Send_DATA использует USBD_CDC_TransmitPacket? Посмотрите, что возвращают функции
  3. Работа с VCP

    char strbuf[10]=""; вот это объявите вне функции - глобально. Она останется аргументом
  4. Работа с VCP

    strbuf попробуйте объявить как глобальный массив
  5. STM32СubeMX и подобные

    для особо требовательного софта существует сертификация SIL - Safety Integrity Level. Остальное это все словоблудие
  6. STM32СubeMX и подобные

    применяю HAL, код из куба только для первого ознакомления изредка
  7. 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 ); }
  8. Не везде требуется самолетная надежность. Я вот использую HAL, максимальный уровень оптимизации, сотни проборов, годы эксплуатации, сбоев нет. Все зависит от задачи и от кривизны рук.
  9. что то мне подсказывает, что просто не включен клок... __I2C1_CLK_ENABLE();
  10. содержимое MX_I2C1_Init покажите и перед while(1) напишите __enable_interrupt();
  11. так вы залезьте внутрь HAL_I2C_Master_Receive и посмотрите причину HAL_BUSY. Там не так много вариантов
  12. Возможно, когда буферы пишутся, контроллер сдрам пишет их, используя бурст, это самый быстрый доступ. При асинхронном чтении (записи) все значительно медленнее.
  13. Дело точно не в СДРАМ. У меня контроллер памяти на циклоне, разницы в скорости доступа к разным банкам нет никакой
  14. I2C HAL DS2482

    Вот вот ))) на самом деле, много где указано в протоколе, что требуется Repeated START, но на моем опыте всегда работает STOP с новым стартом
  15. I2C HAL DS2482

    под повторными вы подразумеваете 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 отдельные посылки
  16. I2C HAL DS2482

    Что там декодировать то? Пару байт? Ваша задача правильно написать принцип записи байта и чтения байта. На этом все
  17. I2C HAL DS2482

    без осциллографа пытаться скрестить слона и носорога? это фантастика
  18. 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
  19. там, видимо, как то иначе, не работал с первой серией
  20. у него все уже подпаяно, если внимательно почитать. куб определяет при вхождении в прерывание OTG_FS_IRQHandler через флаг USB_OTG_GOTGINT_SEDET
  21. у меня тоже через куб, как и у автора. Это штатная переменная в кубе
  22. если использовать HAL, то там есть такая каллбэк функция, которая вызовется при завершении транзакции SPI_DMATransmitCplt
  23. впаяйте в рабочую и нерабочую платы, посмотрите.. попробуйте купить несколько процессоров другой ревизии, в элитане есть С Что еще можно попробовать, но это уже сродни танцу с бубном: в LowLevelInit исправить AT91C_MC_FWS_1FWS на AT91C_MC_FWS_2FWS
×
×
  • Создать...