STM32F103VE上的ucos-ii_v2.86 + Stdperiph_lib_v3.4.0基于MDK

2020-01-04 18:44发布

初学者没有什么好说的,只是将工程结构调整一下,再换成3.4.0的标准外设库。
使用一下wowbanui  的代码着 {MOD}功能,显示一下代码。这个ucos-ii只有两个最简单的任务。。。

/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */

int
main(void)
{

  /*!< At this stage the microcontroller clock setting is already configured,
       this is done through SystemInit() function which is called from startup
       file (startup_stm32f10x_xx.s) before to branch to application main.
       To reconfigure the default setting of SystemInit() function, refer to
       system_stm32f10x.c file
     */

    INT8U os_err;

    GPIO_Configuration ();
    USART1_Configuration ();
    OSInit();
    /* Create the led task. */

    os_err = OSTaskCreate((void (*) (void *)) App_Task_LED,
                          (
void *           ) 0,
                          (
OS_STK *         ) &App_Task_LED_Stk[APP_TASK_LED_STK_SIZE - 1],
                          (
INT8U            ) APP_TASK_LED_PRIO);

    /* Create the key task. */

    os_err = OSTaskCreate((void (*) (void *)) App_Task_KEY,
                          (
void *           ) 0,
                          (
OS_STK *         ) &App_Task_KEY_Stk[APP_TASK_KEY_STK_SIZE - 1],
                          (
INT8U            ) APP_TASK_KEY_PRIO);

    OSStart ();
}
  /* end main */

/**
  * @brief  Application Task, LED Task.
  * @param  a pointer...
  * @retval None
  */

void
App_Task_LED (void* p_arg)
{

     p_arg = p_arg;
    if
(SysTick_Config(SystemCoreClock / OS_TICKS_PER_SEC))
    {

        /* Capture error */

        printf ("SysTick_Config Error! ");
        for
(;;);
    }

    for
(;;)
    {

        led_on();
        OSTimeDlyHMSM(0, 0, 0, 500);
        led_off();
        OSTimeDlyHMSM(0, 0, 0, 500);
    }

}


/**
  * @brief  Application Task, KEY Task.
  * @param  a pointer...
  * @retval None
  */

void
App_Task_KEY (void* p_arg)
{

    uint8_t
key_current, key_previous;
     p_arg = p_arg;
    for
(;;)
    {

        key_previous = key_current;
        key_current  = GPIO_ReadInputDataBit(KEY_PORT, KEY_PIN);
        if
((key_previous == 1) && (key_current == 0))
            usart_write_string ("KEY pressed! ");
        OSTimeDlyHMSM (0, 0, 0, 50);
    }
}



(MDK工程)
点击此处下载 ourdev_627603BI9MRB.rar(文件大小:21.24M) (原文件名:STM32F103VE_STRIVE.rar)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
jiaowoxiaolu
1楼-- · 2020-01-04 21:18
收下帮顶
huanhuan
2楼-- · 2020-01-04 21:28
其实,弄了半天主要就是在组织工程结构,还有就是那个os用了stm32的两个中断
PendSV_Handler
SysTick_Handler
要使用便准外设库的startup就要将ucos-ii/port里面的os_cpu_a.asm里的OS_CPU_PendSV_Handler 和os_cpu_c.c里面的OS_CPU_SysTickHandler 函数改一下,改成和startup.s里面的一致。
cihu
3楼-- · 2020-01-05 02:04
看了下程序,SysTick_Config应该放在优先级最高的任务内调用,而你的LED任务优先级要比KEY低
cindylxt
4楼-- · 2020-01-05 03:53
谢谢分享
57design
5楼-- · 2020-01-05 05:03
 精彩回答 2  元偷偷看……
ghbjimmy
6楼-- · 2020-01-05 09:28
受益了,顶一个。

一周热门 更多>