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

    

zorromen

Свой
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

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

  • Звание
    Местный
  • День рождения 26.07.1984

Контакты

  • Сайт
    http://
  1. можно в stm32 на одном таймере...

    Какие мануалы, как отец говорит, все должно работать само, ведь пишем на языке высокого уровня.
  2. можно в stm32 на одном таймере...

    Посмотрите мою тему, там может что и увидите подходящее. http://electronix.ru/forum/index.php?showtopic=129361
  3. STM32f4 + emWin

    Есть stm32F429, вроде все из примера запустилось само и работает, скажите, а emWin использует ускоритель DMA2D по умолчанию? И какие накладываются ограничения, на работу, ну типа многослойность или еще что.
  4. stm32F429 и прерывание от таймера

    То будет не критично, вообще еще дурной вопрос. Нужно будет ловить импульс ответа, и измерить его длину, тут особых проблем не обнаружил, но реализация несколько смущает. Настройка порта на внешнее прерывание, тут настроил на передний фронт, но в самом прерывании после получения переднего фронта перенастраиваю на задний фронт. Сперва делал чтобы прерывание было от обоих фронтов сразу, но зайдя в прерывание тогда не получалось понять какой именно фронт его вызвал, почему-то чтение пина всегда возвращало 0. Сам импульс около 10 mS. Поэтому решил делать с переключением в прерывании. Код  /*Configure GPIO pin : PE2 */   GPIO_InitStruct.Pin = GPIO_PIN_2;   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;   GPIO_InitStruct.Pull = GPIO_NOPULL;   HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);   /* EXTI interrupt init*/   HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0);   HAL_NVIC_EnableIRQ(EXTI2_IRQn); Кодvoid EXTI2_IRQHandler(void) {         if ((EXTI->RTSR >> 2) & 1)         {                         ...........             EXTI->RTSR = 0;    //Otkl rising             EXTI->FTSR = 0x4; //Vkl Filling         }         else         {                         ...........          EXTI->RTSR = 4; //Vkl rising          EXTI->FTSR = 0; //Otkl Filling         }          EXTI->PR |=0x04; }
  5. stm32F429 и прерывание от таймера

    Ну принудительное обновления, я как раз и реализовал, а что такое штатная работа, это когда все на оборот, странно такой фигни например не помню когда програмил AVR и lpc2148.
  6. stm32F429 и прерывание от таймера

    Упорство победило, если хотят играть по своим правилам, то по ним и с играем. После настройки в прерывании регистров, создаю новое прерывание и ref_register=1, в него заходим сразу после данного прерывания и тем самым обновляем теневые регистры PSC и ARR, и все заработало как нужно. Очень странно видеть, что сколько читал русскую документацию, не все объясняется, только в даташите нашел, что PSC тоже имеет теневой регистр. Настройка CODETIM6->PSC = 143; TIM6->ARR = 62499; //100 mS TIM6->DIER = TIM_DIER_UIE; TIM6->CR1 |= TIM_CR1_CEN | TIM_CR1_OPM | TIM_CR1_ARPE; void TIM6_DAC_IRQHandler(void) { if (ref_register == 0) { switch (UV_state) { case 0: TIM6->PSC = 0; TIM6->ARR = 0x707;//1799; //20 uS TIM6->CNT = 0; TIM6->EGR = TIM_EGR_UG; //Создать прерывание для обновления регистров ref_register = 1; //Обновить регистры TIM6->CR1 |= TIM_CR1_CEN; HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_SET); UV_state = 1; break; case 1: TIM6->PSC = 0x008f;//143 TIM6->ARR = 0xF423;//62499; // 100 mS TIM6->CNT = 0; ref_register = 1; //Обновить регистры TIM6->EGR = TIM_EGR_UG; //Создать прерывание для обновления регистров TIM6->CR1 |= TIM_CR1_CEN; HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET); UV_state = 0; break; } } else { TIM6->SR = 0; ref_register = 0; } }
  7. stm32F429 и прерывание от таймера

    А если это делать в прерывании, не вызовет ли это прерывание снова? Пока проверить не могу.
  8. stm32F429 и прерывание от таймера

    Но ведь PSC тоже с буфером, и он вроде не отключается, и логично чтобы ARR и PSC обновились одновременно, чувствую что нужно использовать UG, но как не понял. Если не трогать вообще PSC, то все работает, управляется ARR без буфера, а если нужно менять еще и PSC?
  9. stm32F429 и прерывание от таймера

    Можете помочь как нужно написать чтобы работало.
  10. stm32F429 и прерывание от таймера

    Шим не подойдет, т.к. прерывание будет усложнятся и будут добавленны еще условия которые будут зависить от переферии. А какие еще флаги кроме UIF могут быть установленустановлены? Вот думаю может исрользовать режим импульса, по идее он точно один раз попадет в прерывание. Ну а вообще если логически подумать, приведеный код должен формировать импульс, может в коде ошибаюсь? На счет обновления ARR при установленном ARPE, ничего сказать не смогу т.к. начал изучение только недавно, но попробовать можно, сбросить этот бит и после обновить ARR и установить этот бит.
  11. stm32F429 и прерывание от таймера

    Здравствуйте, только начал осваивать проц, и столкнулся с непоняткой, уже 3 дня сижу и не могу понять. Есть Выход Код   //Trigger   /*Configure GPIO pin : PE3 */   GPIO_InitStruct.Pin = GPIO_PIN_3;   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;   GPIO_InitStruct.Pull = GPIO_NOPULL;   GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;   HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); Есть таймер 6, его настройка. Код    __TIM6_CLK_ENABLE();     UV_state = 0;         HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 1, 0);         HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);          HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);     TIM6->PSC = 143;     TIM6->ARR = 62499; //100 mS     //TIM6->EGR = TIM_EGR_UG;     TIM6->DIER = TIM_DIER_UIE;     TIM6->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE; Это прерывание CODEvoid TIM6_DAC_IRQHandler(void) { TIM6->CR1 &= ~TIM_CR1_CEN; //Остнавливаем таймер TIM6->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF switch (UV_state) { case 0: TIM6->PSC = 0; TIM6->ARR = 0x707;//1799; //20 uS TIM6->CNT = 0; TIM6->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE; HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET); UV_state = 1; break; case 1: TIM6->PSC = 0x008f;//143 TIM6->ARR = 0xF423;//62499; //Ñðàáîòàòü íà 100 mS TIM6->CNT = 0; TIM6->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE; HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET); UV_state = 0; break; } } Хочу иметь импульс 20 us через 100 ms, и вроде все логично, но на выходе все перевернуто [attachment=94127:111.jpg] Ну где тут можно ошибиться? Заходим по состоянию 0, устанавливаем таймер на 20 us и устанавливаем ногу в 1, чтобы в следующем прерывании ее сбросить и настроить прерывание на 100 ms и потом ее установить в 1 в новом прерывании. Почему на выходе все наоборот?
  12. LPC1768 Jtag

    Собрал клон Ulink2. Версия 1.40. С арм7 работает, с кортексами просит обновить прошивку, процесс обновления не проходит. Кто нить собирал этот клон?
  13. LPC1768 Jtag

    Скажите, удолось кому нибудь, подружить J-Link SWD с Keil? Чтото внятного ответа в интернете ненашел.
  14. Проблема с J-link + LPC17xx

    Здесь
  15. LPC1768 Jtag

    Поковырявшись c паяльником, вроде запустил JTAG. А SWD пишет что то, но работать не хочет. Кеил что не умеет работать с J-linkv8 в режиме SWD?