你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 2013|回复: 1

[STM32L4+] [Nucleo-L4R5] STM32L4R5 移植ucOS III

[复制链接]

35

主题

423

回帖

93

蝴蝶豆

版主

最后登录
2020-9-9
发表于 2018-1-7 21:54:59 | 显示全部楼层 |阅读模式
[Nucleo-L4R5] STM32L4R5外观评测
[Nucleo-L4R5] STM32L4R5低功耗评测
[Nucleo-L4R5] STM32L4R5 CoreMark测试


        CubeMax自带FreeRTOS系统,并且可以通过软件自动生成OS框架,对于初学者来说,一般还是先接触的uCOS的多,所以让L4R5运行一下ucOS是否好玩。
移植的过程就是复制黏贴,加上编译路径后稍微改动一下代码即可,所以就不详细说了,这里主要添加两个User Task和1个软件定时器
创建User任务(STM32中文官网
  1. static  void  App_TaskCreate (void)
  2. {
  3.     OS_ERR err;
  4.     CPU_SR_ALLOC();

  5.     OS_CRITICAL_ENTER();

  6.     OSTaskCreate((OS_TCB         * )&FloatTaskTCB,               
  7.                  (CPU_CHAR        * )"float test task",                 
  8.                  (OS_TASK_PTR )float_task,                        
  9.                  (void                * )0,                                       
  10.                  (OS_PRIO          )FLOAT_TASK_PRIO,            
  11.                  (CPU_STK   * )&FLOAT_TASK_STK[0],        
  12.                  (CPU_STK_SIZE)FLOAT_STK_SIZE/10,        
  13.                  (CPU_STK_SIZE)FLOAT_STK_SIZE,               
  14.                  (OS_MSG_QTY  )0,                                       
  15.                  (OS_TICK          )0,                                       
  16.                  (void           * )0,                                
  17.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  18.                  (OS_ERR         * )&err);        
  19.                  
  20.     OSTaskCreate((OS_TCB         * )&LEDTaskTCB,               
  21.                  (CPU_CHAR        * )"LED task",                 
  22.                  (OS_TASK_PTR )led_task,                        
  23.                  (void                * )0,                                       
  24.                  (OS_PRIO          )LED_TASK_PRIO,            
  25.                  (CPU_STK   * )&LED_TASK_STK[0],        
  26.                  (CPU_STK_SIZE)LED_STK_SIZE/10,        
  27.                  (CPU_STK_SIZE)LED_STK_SIZE,               
  28.                  (OS_MSG_QTY  )0,                                       
  29.                  (OS_TICK          )0,                                       
  30.                  (void           * )0,                                
  31.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  32.                  (OS_ERR         * )&err);        
  33.     //OS_TaskSuspend((OS_TCB *)&App_TaskStartTCB, (OS_ERR *)&err);
  34.     OS_CRITICAL_EXIT();        
  35.     OSTaskDel((OS_TCB *)&App_TaskStartTCB, (OS_ERR *)&err);
  36. } //!< End of Create
复制代码


1、浮点运算测试任务
  1. /*
  2. * !brief task for test float point
  3. * !param void *p_arg
  4. * !retval none
  5. */
  6. void float_task(void *p_arg)
  7. {
  8.     OS_ERR err;
  9.     UNUSED(p_arg);
  10.         static float float_num=0.0001;
  11.         while(1)
  12.         {
  13.                 float_num+=0.0001f;
  14.                 ifs_printf("float task runing!\r\n");
  15.                 ifs_printf("float_num inc : %.4f\r\n",float_num);
  16.                 OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);                        //ÑÓʱ500ms
  17.         }
  18. }
复制代码
2、LED翻转任务
  1. /*
  2. * !brief task for test led
  3. * !param void *p_arg
  4. * !retval none
  5. */
  6. void led_task(void *p_arg)
  7. {
  8.     static ifs_uint8_t fsm_blink = 0;
  9.     OS_ERR err;
  10.    
  11.     UNUSED(p_arg);
  12.     while (1) {
  13.         ifs_printf("led task runing!\r\n");
  14.         switch (fsm_blink) {
  15.             case 0:
  16.                 ifs_printf("led 1 on!\r\n");
  17.                 BSP_LED_On(LED1);
  18.                 break;
  19.             case 1:
  20.                 ifs_printf("led 2 on!\r\n");
  21.                 BSP_LED_On(LED2);
  22.                 break;
  23. //            case 2:
  24. //                ifs_printf("led 3 on!\r\n");
  25. //                BSP_LED_On(LED3);
  26. //                break;
  27.             case 2:
  28.                 ifs_printf("led 1 off!\r\n");
  29.                 BSP_LED_Off(LED1);
  30.                 break;
  31.             case 3:
  32.                 ifs_printf("led 2 off!\r\n");
  33.                 BSP_LED_Off(LED2);
  34.                 break;
  35. //            case 5:
  36. //                ifs_printf("led 3 off!\r\n");
  37. //                BSP_LED_Off(LED3);
  38. //                break;
  39.         }
  40.         if (++fsm_blink > 3) fsm_blink = 0;
  41.         OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);
  42.     }
  43. }
复制代码
3、创建一个软件定时器
  1. static  void  App_ObjCreate (void)
  2. {
  3.     OS_ERR err;
  4.     OSTmrCreate((OS_TMR *   )&tmr1,
  5.                 (CPU_CHAR * )"tmr1",
  6.                 (OS_TICK    )2,
  7.                 (OS_TICK    )1000 / OSCfg_TickRate_Hz,
  8.                 (OS_OPT             )OS_OPT_TMR_PERIODIC,
  9.                 (OS_TMR_CALLBACK_PTR)tmr1_callback,
  10.                 (void *             )0,
  11.                 (OS_ERR *           )&err);
  12.     if (err == OS_ERR_NONE) {
  13.         OSTmrStart((OS_TMR *)&tmr1, &err);
  14.     }
  15. }
复制代码
定时器callback函数
  1. static void tmr1_callback(void *p_tmr, void *p_arg)
  2. {
  3.     ifs_printf("tmr1 callback running!\r\n");
  4.     BSP_LED_Toggle(LED3);
  5. }
复制代码
编译后正常运行
ucos.png
PS:代码见以下链接 https://www.stmcu.org.cn/module/forum/thread-614478-1-1.html




<
回复

使用道具 举报

0

主题

1

回帖

0

蝴蝶豆

初级会员

最后登录
2018-2-27
发表于 2018-2-10 10:15:11 | 显示全部楼层
UCOS源码用的是M4内核的3.04那个吗?还是有L4系列专用的源码?
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版