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

dimon_rub

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о dimon_rub

  • Звание
    Участник
    Участник
  1. SIM карта НЕ M2M. Обычная. А что даст отказ от Multi Connection?
  2. Извините неправильно выразился по поводу CMTI. Конечно же это URC. Пробовал. Но нужно в начале обработать подтверждения отправки TCP пакета (SEND OK). А данный ответ приходит через огромную паузу. Если бы можно было отключить это все на момент передачи (типа BUSY). Это конечно отключит звонок но а СМС. Или хотя бы как то вернуть его к жизни сказав что в данный момент читать СМС мы не хотим (типа ATH0).
  3. Помогите если сможете пожалуйста. Вопрос следующий. При передаче TCP пакетов как заблокировать или правильно обработать входящий звонок или смс. Ситуация такая. В момент передаче пока еще не пришло SEND OK. приходит например SMS CMTI команда соответственно. Модуль зависает примерно на 2-3мин потом приходит SEND OK. Сесия MultiConnection. Как это побороть? Спасибо
  4. Огромное спасибо. Это действительно наверно сработает (необходимо подключать пин для детекта наличия Vusb) в данный момент как я понял необходимо отключить флаг SUSPEND что не даст возможность взводить ISTR_ESOF. Пока у меня это работает но при этом есть проблема, если хост засыпает то вешается проц. Возможно подключение даст возможность по детекту взводить отключеные флаги. ПОПРОБУЮ
  5. Уважаемый Forger Ваша ирония мне конечно подуше (немного разрядки - 2 сутки с USB) но тут Вы абсолютно НЕПРАВЫ. Обработчик присутствует и если вы работали с данной переферией то он стандартный если брать STM32_USB-FS-Device (проверят все возможные флаги относительно данной переферии). ЧТО ЗАМЕЧЕНО: Прерывания срабатывают после рестарта проца (USB не подключено к PC) и после нескольких дрыгов, завтра посчитаю, затихают. При этом флаги выставляются ERR, ESOF, SUSP. Далее вроде тишина пока не подключешь USB. Просмотрено дебагером. Странно что при старте флаги маскируются ( PowerOn() ) wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM; _SetCNTR(wInterrupt_Mask); а далее вызывается функция USB_SIL_Init(); в которой все это дело открывается: wInterrupt_Mask = IMR_MSK; _SetCNTR(wInterrupt_Mask); Причем вызовы идут подряд. ЧТО ЭТО И КАК РЕШИТЬ
  6. Здравствуйте. Подскажите пожалуйста в чем дело. ПРИ НЕ ПОДКЛЮЧЕНОМ УСТРОЙСТВЕ к PC построеном на STM32F103RC постоянно срабатывает прерывание USB_LP_CAN1_RX0_IRQn. На ногах все чисто (асцилограф). Частота очень высокая занимает почти все процессорсое время. Если использовать очередь (семафор) то обработчик неуспевает вызываться. Все это видно дебагером. Флаги ISTR_ERR и ISTR_ESOF. Если нужен код скажите
  7. STM32F103RC USB HID

    Да. Спасибо. Я все это знаю. Читал Агурова + есть исходники PickIt. Получены указатели на чтение и запись. WriteFile заработала а ReadFile ну никак. Смотрю снифером даже обращения к порту нет. (ЕСТЬ ПОДОЗРЕНИЕ ЧТО ЧТОТО С РАЗМЕРАМИ БУФЕРОВ). Еще в поиске. Может кто что подскажет. .
  8. STM32F103RC USB HID

    Да. Проблема решена частично. Нашел вот такую purebasic.mybb.ru/viewtopic.php?id=592. Там есть пример и на его основе сделал Get_Feature. (ОГРОМНОЕ СПАСИБО АВТОРУ). Сейчас работает методом Feature и чтение и записть. Методом Report только запись в STM. С чтением пока борюсь.
  9. STM32F103RC USB HID

    Ну кто нибудь. Хотя бы как нужно вызывать ответ от STM32F103 методом Get_Feature. В примере от ST функция пустая /******************************************************************************* * Function Name : HID_Status_Out * Description : HID status OUT routine. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void HID_Status_Out (void) { }
  10. STM32F103RC USB HID

    Здравствуйте. Возникла проблема и похоже без Вашей помощи не могу решить уже несколько недель. Нужно HID устройство для загрузки конфигурации с ширеной 32байта (по спецификации макс. 64байта). Долго бился и до чего дошел: - опреределение устройства на стороне PC без проблем - запись в устройство методом SetFeature длинной в 32 байта Не получается: - чтение не одним из методов (GetFeature у STM32 не реализован, не знаю как сделать) - запись методом SetReport (если начинаю срезать длинну до 4байт то норма). Report: const uint8_t RHID_ConfigDescriptor[RHID_SIZ_CONFIG_DESC] = { 0x09, // bLength: длина дескриптора конфигурации USB_CONFIGURATION_DESCRIPTOR_TYPE, // bDescriptorType: тип дескриптора - конфигурация RHID_SIZ_CONFIG_DESC, 0x00, // wTotalLength: общий размер всего дерева под данной конфигурацией в байтах 0x01, // bNumInterfaces: в конфигурации всего один интерфейс 0x01, // bConfigurationValue: индекс данной конфигурации 0x00, // iConfiguration: индекс строки, которая описывает эту конфигурацию 0xC0, // bmAttributes: признак того, что устройство будет питаться от шины USB 0x32, // MaxPower 100 mA: и ему хватит 100 мА /************** Дескриптор интерфейса ****************/ 0x09, // bLength: размер дескриптора интерфейса USB_INTERFACE_DESCRIPTOR_TYPE, // bDescriptorType: тип дескриптора - интерфейс 0x00, // bInterfaceNumber: порядковый номер интерфейса - 0 0x00, // bAlternateSetting: признак альтернативного интерфейса, у нас не используется 0x02, // bNumEndpoints - количество эндпоинтов. 0x03, // bInterfaceClass: класс интерфеса - HID 0x00, // bInterfaceSubClass : подкласс интерфейса. 0x00, // nInterfaceProtocol : протокол интерфейса 0, // iInterface: индекс строки, описывающей интерфейс // теперь отдельный дескриптор для уточнения того, что данный интерфейс - это HID устройство /******************** HID дескриптор ********************/ 0x09, // bLength: длина HID-дескриптора HID_DESCRIPTOR_TYPE, // bDescriptorType: тип дескриптора - HID 0x01, 0x01, // bcdHID: номер версии HID 1.1 0x00, // bCountryCode: код страны (если нужен) 0x01, // bNumDescriptors: Сколько дальше будет report дескрипторов HID_REPORT_DESCRIPTOR_TYPE, // bDescriptorType: Тип дескриптора - report RHID_SIZ_REPORT_DESC, 0x00, // wItemLength: длина report-дескриптора /******************** дескриптор конечных точек (endpoints) ********************/ 0x07, // bLength: длина дескриптора USB_ENDPOINT_DESCRIPTOR_TYPE, // тип дескриптора - endpoints 0x81, // bEndpointAddress: адрес конечной точки и направление 1(IN) 0x03, // bmAttributes: тип конечной точки - Interrupt endpoint RHID_SIZ_REPORT_IN, 0x00, // wMaxPacketSize: Bytes max 0x20, // bInterval: Polling Interval (32 ms) 0x07, /* bLength: Endpoint Descriptor size */ USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */ /* Endpoint descriptor type */ 0x01, /* bEndpointAddress: */ /* Endpoint Address (OUT) */ 0x03, /* bmAttributes: Interrupt endpoint */ RHID_SIZ_REPORT_OUT, //wMaxPacketSize, /* wMaxPacketSize: Bytes max */ 0x00, 0x20, /* bInterval: Polling Interval (32 ms) */ }; /* RHID_ConfigDescriptor */ const uint8_t RHID_ReportDescriptor[RHID_SIZ_REPORT_DESC] = { // 0x06, 0x00, 0xff, // USAGE_PAGE (Generic Desktop) 0x06, 0xFF, 0x00, /* USAGE_PAGE (Vendor Page: 0xFF00) */ 0x09, 0x01, // USAGE (Vendor Usage 1) 0xa1, 0x01, // COLLECTION (Application) 0x85, 0x01, // REPORT_ID (1) 0x09, 0x01, // USAGE (Vendor Usage 1) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x75, 0x08, // REPORT_SIZE (8) 0x95, 0x01, //!!!!! REPORT_COUNT (1) 0xb1, 0x82, // FEATURE (Data,Var,Abs,Vol) 0x85, 0x01, // REPORT_ID (1) 0x09, 0x01, // USAGE (Vendor Usage 1) 0x91, 0x82, // OUTPUT (Data,Var,Abs,Vol) 0x85, 0x02, // REPORT_ID (2) 0x09, 0x02, // USAGE (Vendor Usage 2) 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ 0x26, 0xff, 0x00, /* LOGICAL_MAXIMUM (255) */ 0x75, 0x08, // REPORT_SIZE (8) 0x95, RHID_SIZ_REPORT_IN, // REPORT_COUNT (32) 0xb1, 0x82, /* FEATURE (Data,Var,Abs,Vol) */ 0x85, 0x02, // REPORT_ID (2) 0x09, 0x02, /* USAGE (Vendor Usage 2) */ 0x81, 0x82, // INPUT (Data,Var,Abs,Vol) 0x85, 0x03, // REPORT_ID (1) 0x09, 0x03, // USAGE (Vendor Usage 1) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) 0x75, 0x08, // REPORT_SIZE (8) 0x95, RHID_SIZ_REPORT_OUT, //!!!!! REPORT_COUNT (32) 0xb1, 0x82, // FEATURE (Data,Var,Abs,Vol) 0x85, 0x03, // REPORT_ID (1) 0x09, 0x03, // USAGE (Vendor Usage 1) 0x91, 0x82, // OUTPUT (Data,Var,Abs,Vol) 0xc0 // END_COLLECTION } ; /* RHID_ReportDescriptor */
  11. По поводу HSE_VALUE

    Я конечно только учусь но и то я вижу что и впервом и втором случае конечная частота проца была 72МГц. Изменяется только кварц и соответственно делитель для него
  12. По поводу HSE_VALUE

    Если бы ты был внимателен то бит RCC_CFGR_PLLXTPRE это и есть деление на 2. Во второй строке где 8МГц кварц этого бита НЕТ.
  13. По поводу HSE_VALUE

    Все что изменилось это RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL9); на RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9); Теперь что бы получилась 1ms TIM3->PSC = (rcc_Clocks.PCLK1_Frequency / 500000) - 1; а было по нормальному TIM3->PSC = (rcc_Clocks.PCLK1_Frequency / 1000000) - 1; Подскажите, хоть где рыть.
  14. По поводу HSE_VALUE

    Может вопрос глупый или уже обсуждался но НЕ МОГУ ПОНЯТЬ. Проц: STM32F103RC. Ситуация такая был кварц на 16МГц стал на 8МГц. Изменил в HSE_VALUE. Выстроил PLL что бы получилось 72МГц как и раньше. Все ОК. Проверяю опросом структуры RCC_GetClocksFreq((RCC_ClocksTypeDef *)&rcc_Clocks); __IO RCC_ClocksTypeDef rcc_Clocks; Возвращает: SYSCLK_Frequency=72000000 PCLK1_Frequency=36000000 PCLK2_Frequency=72000000 HCLK_Frequency=72000000 ADCCLK_Frequency=12000000 Во всех таймерах привязка по опрошеной структуре к примеру TIM3->PSC = (rcc_Clocks.PCLK1_Frequency / 1000000) - 1; или SysTick_Config(rcc_Clocks.SYSCLK_Frequency/22); Почему по уходили временные диапазоны на половину. Спасибо за помощь.
×
×
  • Создать...