реклама на сайте
подробности

 
 
> STM32F103, Keil RTX и USB
stepper88
сообщение Sep 6 2013, 10:19
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 20-02-09
Пользователь №: 45 138



Здравствуйте, господа!
Недавно сделали плату с микроконтроллером 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?
Заранее благодарен
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 18:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01362 секунд с 7
ELECTRONIX ©2004-2016