dimon_rub
Участник-
Постов
44 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о dimon_rub
-
Звание
Участник
-
Вопрос по SImcom 800
dimon_rub ответил dimon_rub тема в Все остальные микроконтроллеры
Спасибо. Попробую. Отпишусь -
Вопрос по SImcom 800
dimon_rub ответил dimon_rub тема в Все остальные микроконтроллеры
SIM карта НЕ M2M. Обычная. А что даст отказ от Multi Connection? -
Вопрос по SImcom 800
dimon_rub ответил dimon_rub тема в Все остальные микроконтроллеры
Извините неправильно выразился по поводу CMTI. Конечно же это URC. Пробовал. Но нужно в начале обработать подтверждения отправки TCP пакета (SEND OK). А данный ответ приходит через огромную паузу. Если бы можно было отключить это все на момент передачи (типа BUSY). Это конечно отключит звонок но а СМС. Или хотя бы как то вернуть его к жизни сказав что в данный момент читать СМС мы не хотим (типа ATH0). -
Вопрос по SImcom 800
dimon_rub опубликовал тема в Все остальные микроконтроллеры
Помогите если сможете пожалуйста. Вопрос следующий. При передаче TCP пакетов как заблокировать или правильно обработать входящий звонок или смс. Ситуация такая. В момент передаче пока еще не пришло SEND OK. приходит например SMS CMTI команда соответственно. Модуль зависает примерно на 2-3мин потом приходит SEND OK. Сесия MultiConnection. Как это побороть? Спасибо -
Огромное спасибо. Это действительно наверно сработает (необходимо подключать пин для детекта наличия Vusb) в данный момент как я понял необходимо отключить флаг SUSPEND что не даст возможность взводить ISTR_ESOF. Пока у меня это работает но при этом есть проблема, если хост засыпает то вешается проц. Возможно подключение даст возможность по детекту взводить отключеные флаги. ПОПРОБУЮ
-
Уважаемый 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); Причем вызовы идут подряд. ЧТО ЭТО И КАК РЕШИТЬ
-
Здравствуйте. Подскажите пожалуйста в чем дело. ПРИ НЕ ПОДКЛЮЧЕНОМ УСТРОЙСТВЕ к PC построеном на STM32F103RC постоянно срабатывает прерывание USB_LP_CAN1_RX0_IRQn. На ногах все чисто (асцилограф). Частота очень высокая занимает почти все процессорсое время. Если использовать очередь (семафор) то обработчик неуспевает вызываться. Все это видно дебагером. Флаги ISTR_ERR и ISTR_ESOF. Если нужен код скажите
-
Да. Спасибо. Я все это знаю. Читал Агурова + есть исходники PickIt. Получены указатели на чтение и запись. WriteFile заработала а ReadFile ну никак. Смотрю снифером даже обращения к порту нет. (ЕСТЬ ПОДОЗРЕНИЕ ЧТО ЧТОТО С РАЗМЕРАМИ БУФЕРОВ). Еще в поиске. Может кто что подскажет. .
-
Да. Проблема решена частично. Нашел вот такую purebasic.mybb.ru/viewtopic.php?id=592. Там есть пример и на его основе сделал Get_Feature. (ОГРОМНОЕ СПАСИБО АВТОРУ). Сейчас работает методом Feature и чтение и записть. Методом Report только запись в STM. С чтением пока борюсь.
-
Ну кто нибудь. Хотя бы как нужно вызывать ответ от 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) { }
-
Здравствуйте. Возникла проблема и похоже без Вашей помощи не могу решить уже несколько недель. Нужно 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 */
-
Я конечно только учусь но и то я вижу что и впервом и втором случае конечная частота проца была 72МГц. Изменяется только кварц и соответственно делитель для него
-
Если бы ты был внимателен то бит RCC_CFGR_PLLXTPRE это и есть деление на 2. Во второй строке где 8МГц кварц этого бита НЕТ.
-
Все что изменилось это 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; Подскажите, хоть где рыть.
-
Может вопрос глупый или уже обсуждался но НЕ МОГУ ПОНЯТЬ. Проц: 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); Почему по уходили временные диапазоны на половину. Спасибо за помощь.