Jump to content

    

zorromen

Свой
  • Content Count

    320
  • Joined

  • Last visited

Community Reputation

0 Обычный

About zorromen

  • Rank
    Местный
  • Birthday 07/26/1984

Контакты

  • Сайт
    http://
  1. SEGGER SystemView для FREERTOS10

    Патч для FREERTOS я сделал, все как указано в официальном патче только с поправкой на ветер. И работает он только для него. Для вас можно посмотреть в сторону NoOS, и там можно сделать тоже самое, читаем документацию от SysnemView, там что-то с создать таск и все такое, сам когда-то такое писал чтобы видеть как работают свои функции, ну и самое мое любимое это смотреть за работой прерываний. Особенно находил визуально косяки, что требовали изменения приоритетов. Например, для прерываний конструкция void DMA1_Channel5_IRQHandler(void) { SEGGER_SYSVIEW_RecordEnterISR(); SEGGER_SYSVIEW_RecordExitISR(); } Ищем в исходниках _cbSendSystemDesc в конфигах segger, добавляем I#31=DMA1_5 UART RX И теперь в SystemView при прерывании 31 дается имя DMA1_5 UART RX static void _cbSendSystemDesc(void) { SEGGER_SYSVIEW_SendSysDesc("N="SYSVIEW_APP_NAME",D="SYSVIEW_DEVICE_NAME",O=FreeRTOS"); SEGGER_SYSVIEW_SendSysDesc("I#15=SysTick,I#31=DMA1_5 UART RX"); }
  2. SEGGER SystemView для FREERTOS10

    Здравствуйте, кто еще не пользовался данной программой от SEGGER тот много потерял. Все хорошо, удобно, но если использовать как для NO_OS, но если нужно использовать с STM32 FREERTOS10 от CubeMX, тот патч рельно отличается от того что идет от ST, только 2 файла из 5 подходят. Кто как патчит, как народ выкручивается? Я написал для себя патчер на лазарусе. Для M3 и M4F ядер, все прикручивал чисто к CubeMX. Инструкция 1. Кидаем в \Middlewares\Third_Party проекта Там кучка батников и мелких консольных прог, каждая патчит свой файл, поэтому не пугаемся. 2. Т.к. я такой еще программер, поэтому делаем по индуски, следующее, FREERTOS_Config.exe копируем в корень проекта И делаем на него ярлык и его копируем в папку SEGGER_FREERTOS_Patcher, это для батника чтобы легче запускать. 3. Запускаем Пропачтить M3.bat или Пропачтить M4.bat, готово, но учтите запускать один раз после генерации проекта, иначе если 10 раз нажать, то 10 раз пропатчит, это ерунда будет. Добавил батники Backup_In.bat и Backup_Out.bat это для бекапа 5 файлов в папку, и обратно в FREERTOS, ну это если кому нужно. Прога патчит абсолютно все что меняет CubeMX. Настройка муторная, но потом запускаете батник и готово. Думаю тем кто занимается FREERTOS будет интересно. SEGGER_FREERTOS_Patcher.rar
  3. можно в stm32 на одном таймере...

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

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

    Есть stm32F429, вроде все из примера запустилось само и работает, скажите, а emWin использует ускоритель DMA2D по умолчанию? И какие накладываются ограничения, на работу, ну типа многослойность или еще что.
  6. 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; }
  7. stm32F429 и прерывание от таймера

    Ну принудительное обновления, я как раз и реализовал, а что такое штатная работа, это когда все на оборот, странно такой фигни например не помню когда програмил AVR и lpc2148.
  8. 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; } }
  9. stm32F429 и прерывание от таймера

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

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

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

    Шим не подойдет, т.к. прерывание будет усложнятся и будут добавленны еще условия которые будут зависить от переферии. А какие еще флаги кроме UIF могут быть установленустановлены? Вот думаю может исрользовать режим импульса, по идее он точно один раз попадет в прерывание. Ну а вообще если логически подумать, приведеный код должен формировать импульс, может в коде ошибаюсь? На счет обновления ARR при установленном ARPE, ничего сказать не смогу т.к. начал изучение только недавно, но попробовать можно, сбросить этот бит и после обновить ARR и установить этот бит.
  13. Здравствуйте, только начал осваивать проц, и столкнулся с непоняткой, уже 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 в новом прерывании. Почему на выходе все наоборот?
  14. LPC1768 Jtag

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

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