Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F103, Keil RTX и USB
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
stepper88
Здравствуйте, господа!
Недавно сделали плату с микроконтроллером STM32F103, подключив к нему USB и несколько светодиодов. Попробовал на нем запустить немного видоизмененный пример HID от Keil MCBSTM32 - убрал работу с LCD, изменил выводы подключения светодиодов и вывод, к которому подключен транзистор, подтягивающий D+ к плюсу питания. Пример нормально заработал.
Захотелось запустить его под RTX.
Код, работающий без RTX:
Код
int main (void) {

  /* configure Push Buttons */
  RCC->APB2ENR |= ((1 << 2));                                      /* enable GPIOA clock                */

  GPIOA->CRL   &= ~0x000000F0;                    /* PA1 clear               */
  GPIOA->CRL   |=  0x00000080;                    /* PA1 is Floating Input       */
    GPIOA->ODR     |=     0x02;                                                    /* PA1 pull-up                 */

  /* configure LEDs */
  RCC->APB2ENR |= (1 << 4);                             /* enable clock for GPIOC     */

    GPIOC->CRH   &= ~0x000FF000;                    /* PC11, PC12 clear           */
  GPIOC->CRH   |=  0x00033000;                    /* PC11, PC12 is output       */

  USB_Init();                                     /* USB Initialization       */
  USB_Connect(__TRUE);                            /* USB Connect              */

  while (1);                                      /* Loop forever             */
}

Код с использованием RTX:
Код
void init_task (void)
{
  /* configure Push Buttons */
  RCC->APB2ENR |= ((1UL << 2) | (1UL << 4));      /* enable GPIOA, GPIOC clock*/

  GPIOA->CRL   &= ~0x000000F0;                    /* PA.1 clear               */
  GPIOA->CRL   |=  0x00000040;                    /* PA.1 is Floating Input   */    

  /* configure LEDs */
  RCC->APB2ENR |= (1 << 4);                             /* enable clock for GPIOC     */

    GPIOC->CRH   &= ~0x000FF000;                    /* PC11, PC12 clear           */
  GPIOC->CRH   |=  0x00033000;                    /* PC11, PC12 is output       */

  USB_Init();                                     /* USB Initialization       */
  USB_Connect(__TRUE);                            /* USB Connect              */    

    while(1);
}

/*----------------------------------------------------------------------------
  MAIN function
*----------------------------------------------------------------------------*/
int main (void)
{
    os_sys_init(init_task);
}

После перевода примера на RTX при настройке прерывания USB контроллера, программа вываливает в HardFault. Увеличение объема стека задачи или heap не помогло. Кто-нибудь решал такую проблему или проще просто использовать RL-USB?
Заранее благодарен
demiurg_spb
У вас случаем не это происходит?
Также это почитайте.
stepper88
Цитата(demiurg_spb @ Sep 6 2013, 21:23) *
У вас случаем не это происходит?

Очень похоже, но проверить советы смогу только в понедельник.
stepper88
Спасибо! Получилось запустить обоими способами - оставил включение прерываний чере SVC - показалось, что более корректно, хотя не знаю. Но пока будет так.
demiurg_spb
Цитата(stepper88 @ Sep 10 2013, 10:25) *
Спасибо!
Всегда пожалуйста)))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.