KnightIgor 2 3 ноября, 2011 Опубликовано 3 ноября, 2011 · Жалоба Правой мышкой тоже не получалось. оказалось нужно было поменять: USB\VID_b0c0&PID_0020&MI_00 - на - USB\VID_b0c0&PID_0020&REV_0200 и все встало (ну проблемы у меня с виндой :)...). правда винда ругалась на производителя, но это уже ее проблемы... спасибо еще раз большое. Был рад помочь! Да, Вы правы: я спросил коллегу, оказалось, что &MI_00 - это наше композитное устройство, Вы верно замену сделали. Вот тут ссылка на информацию по теме от гуру в области USB - господина Тсунео (Tsuneo). Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 5 ноября, 2011 Опубликовано 5 ноября, 2011 (изменено) · Жалоба Для информации. Вожусь с I2C (STM32F103). Что этот интерфейс в камне есть совершенно непролазные дебри, уже всем известно. Я в свое время вроде хорошо разобрался с ним, даже с DMA он у меня качает туда-сюда. И тут вдруг при запуске чтения или записи натыкаюсь на занятость шины (в моих функциях-обертках доступа в начале идет проверка на занятость шины на случай многомастерной коммуникации). Обнаружилось: уже после выдачи STOP в конце предыдущей операции по I2C бит BUSY еще стоит какое-то время, а процессор такой шустрый, что если вскорости вызвать очередную операцию по I2C, можно на этот бит и нарваться! Решение - типа недолгое ожидание (по эксперименту в районе времени передачи двух байт, на всякий случай с таймаутом на основе DWT), пока BUSY не уйдет. Вторая заморочка: пока тестировал на 400kHz, не встречался, а опустил до 100kHz, наткнулся на прерывание по состоянию I2C_EVENT_MASTER_BYTE_TRANSMITTING. Я работал по I2C_EVENT_MASTER_BYTE_TRANSMITTED, т.к. это более удобно для особых случаев приема 1-го или 2-х байтов, а тут проскакивает _TRANSMITTING. Решение: приходится еще дожидаться в прерывании бита BTF, т.к. если просто вывалиться из прерывания, то I2C_EVENT_MASTER_BYTE_TRANSMITTED (то есть, установка бита BTF) его больше не вызывает, и машина приема виснет. Может кому будет полезно. Изменено 5 ноября, 2011 пользователем KnightIgor Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rockmp4 0 10 ноября, 2011 Опубликовано 10 ноября, 2011 (изменено) · Жалоба . Изменено 10 ноября, 2011 пользователем rockmp4 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rockmp4 0 10 ноября, 2011 Опубликовано 10 ноября, 2011 · Жалоба Подскажите пожалуйста где взять все ПДФки с описанием всех настроек stm32f1xx (описание регистров, битов для настройки). А то на сайте ST нифига найти не могу, тока app notes, user manuals, а кокретно по настройке ничего. Пытаюсь на них перелезть с tms320f28335, где все для людей: по АЦП, таймерам и т.д. отдельные даташиты с полным описанием и всеми регистрами. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 10 ноября, 2011 Опубликовано 10 ноября, 2011 · Жалоба А то на сайте ST нифига найти не могу, тока app notes, user manuals, а кокретно по настройке ничего. Reference Manual, там же, на сайте ST. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rockmp4 0 10 ноября, 2011 Опубликовано 10 ноября, 2011 · Жалоба Reference Manual, там же, на сайте ST. Спасибо, попробую поковырять. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ey8bg 0 8 декабря, 2011 Опубликовано 8 декабря, 2011 (изменено) · Жалоба Помогите пожалуйста с внешним прерыванием! Проблема в том, что при возникновении внешнего прерывания процессор на него реагирует, но не переходит в обработчик прерываний, а зависает где то! И в основной цикл не возвращается. Может кто знает в чем дело? #include "stm32f10x.h" int main() { RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; GPIOC->CRH |= GPIO_CRH_MODE9; GPIOC->CRH &=~ GPIO_CRH_CNF9; GPIOA->CRL |= GPIO_CRL_MODE0; GPIOA->CRL &=~ GPIO_CRL_CNF0_0; RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI0_PA; EXTI->IMR |= EXTI_IMR_MR0; EXTI->EMR |= EXTI_EMR_MR0; EXTI->RTSR |= EXTI_RTSR_TR0; NVIC_SetPriority(EXTI0_IRQn, 7); NVIC_EnableIRQ(EXTI0_IRQn); __enable_irq (); while (1) { GPIOC->BSRR |= GPIO_BSRR_BS8; for (volatile int x=0; x<100000; x++){} GPIOC->BRR |= GPIO_BRR_BR8; for (volatile int x=0; x<100000; x++){} } } //Сам обработчик прерывания void EXTI0_IRQHandler(void) { if ((EXTI->PR & EXTI_PR_PR0)==0) { GPIOC->BSRR |= GPIO_BSRR_BS9; EXTI->PR |= EXTI_PR_PR0; } } Изменено 8 декабря, 2011 пользователем IgorKossak [codebox] Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=F8= 0 8 декабря, 2011 Опубликовано 8 декабря, 2011 · Жалоба Помогите пожалуйста с внешним прерыванием! Проблема в том, что при возникновении внешнего прерывания процессор на него реагирует, но не переходит в обработчик прерываний, а зависает где то! И в основной цикл не возвращается. Может кто знает в чем дело? Не оно? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ey8bg 0 8 декабря, 2011 Опубликовано 8 декабря, 2011 · Жалоба Не оно? Спасибо, но не помогло :( Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr Baranov 1 8 декабря, 2011 Опубликовано 8 декабря, 2011 · Жалоба А где размещен переход на EXTI0_IRQHandler? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ey8bg 0 8 декабря, 2011 Опубликовано 8 декабря, 2011 · Жалоба А где размещен переход на EXTI0_IRQHandler? В startup_stm32f10x_md_vl.s Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 8 декабря, 2011 Опубликовано 8 декабря, 2011 · Жалоба Помогите пожалуйста с внешним прерыванием! Проблема в том, что при возникновении внешнего прерывания процессор на него реагирует, но не переходит в обработчик прерываний, а зависает где то! Если у вас обработчик расположен в *.cpp файле, то его надо объявить как extern "C": extern "C" void EXTI0_IRQHandler(void) { ... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ey8bg 0 8 декабря, 2011 Опубликовано 8 декабря, 2011 · Жалоба Если у вас обработчик расположен в *.cpp файле, то его надо объявить как extern "C": extern "C" void EXTI0_IRQHandler(void) { ... Спасибо большое, но все равно не помогло :( Наверное дело в чем то другом! Будем думать! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ELEKTROS 0 8 декабря, 2011 Опубликовано 8 декабря, 2011 · Жалоба Как правильно запустить ШИМ на базе TIM1 в STM32f, а то перепробывал кучу разных вариантов даже готовые какието кем то деланные, но всёравно не работает. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 8 декабря, 2011 Опубликовано 8 декабря, 2011 (изменено) · Жалоба Как правильно запустить ШИМ на базе TIM1 в STM32f, а то перепробывал кучу разных вариантов даже готовые какието кем то деланные, но всёравно не работает. Вот ШИМ на TIM1_CH2: void pwm_init() { // Включаем тактирование порта A и альтернативных функций: RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN; // Тактирование таймера: RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // Настраиваем ногу TIM1_CH2 как альтернативный выход: Pin<'A', 9>::Direct(ALT_OUTPUT); // Настраиваем таймер: TIM1->CR1 = TIM_CR1_ARPE; // Счёт вверх, без делителя TIM1->CR2 = 0; TIM1->ARR = timer_period; // Период TIM1->PSC = timer_prescaler; // Прескалер TIM1->RCR = 0; TIM1->EGR = TIM_EGR_UG; // Генерим событие для немедленного обновления прескалера // Настраиваем канал OC2 (output compare 2) TIM1->CCER &= ~(TIM_CCER_CC2E | TIM_CCER_CC2P | TIM_CCER_CC2NE); // Отключаем выход TIM1->CCR2 = 0; // Период TIM1->CCMR1 = (TIM1->CCMR1 & ~(TIM_CCMR1_OC2M | TIM_CCMR1_CC2S | TIM_CCMR1_OC2M)) | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1 | // PWM 1 (0x6000), TIM_CCMR1_OC2PE; //; TIM1->CCER |= TIM_CCER_CC2E; // Включаем выход TIM1->CR1 |= TIM_CR1_CEN; // Запускаем таймер TIM1->BDTR |= TIM_BDTR_MOE; // Специальная фишка у T1 и T8 - Main Output Enable } void pwm_set(uint16_t value) { TIM1->CCR2 = value; } Изменено 9 декабря, 2011 пользователем AHTOXA [codebox] Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться