[STM32L0]STM32L073 移植FreeRTOS点灯

运气很好啊,抽到了二姨家的板子
先给大家看看正面照



没活整就先点个灯


首先配置时钟,需要注意的是,这块板子没有板载外部晶振。


不过预留了安装位置,有时间找个晶振装上。
其他就初始化个LED引脚就好了,先写个点灯程序看工程有没有问题。


下载可以看到LED正常闪烁。
第一步新建工程就算结束了。

然后FreeRTOS官网下载最新版本的软件包。


在裸机工程下创建FreeRTOS的目录,并在目录下新建src,include,portable三个文件夹。


这里只用到FreeRTOS文件夹下的内容,把里面Source里的include和portable两个文件夹复制到对应目录,其他.c文件复制到src文件夹里。
然后精简portable里的文件内容,只保留MemMang和GCC里面的ARM_CM0文件夹。
注意:至于这里为什么其他教程是保留RVDS而我们是GCC。因为用RVDS编译会报错,个人推测是因为用的是AC6编译器。(因为我没有AC5)



最后所得文件路径如图所示。
然后在keil里新建这几个文件目录


添加相应的文件进去。注意MemMang文件夹里有好多个heap的c文件,只选择一个就可以了。
然后点击魔术棒,添加头文件路径


这里只需要添加包含头文件的路径就可以了。也就是include和ARM_CM0两个文件夹
然后编译,这时候会提示找不到FreeRTOSConfig.h文件。我们可以从FreeRTOS软件包的Demo里面找个CORTEX_M0+的例程,把它的FreeRTOSConfig.h复制到我们的工程里。
我这里复制进FreeRTOS/include目录里了。之后编译发现报两个错误了


这是因为命名冲突了,直接去stm32l0xx_it.c里注释掉SVC_Handler(void), PendSV_Handler(void)这两个函数


然后重写SysTick_Handler(void)函数

extern void xPortSysTickHandler(void);

//systick中断服务函数
void SysTick_Handler(void)
{        

    #if (INCLUDE_xTaskGetSchedulerState  == 1 )

      if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)

      {

    #endif  /* INCLUDE_xTaskGetSchedulerState */  

        xPortSysTickHandler();

    #if (INCLUDE_xTaskGetSchedulerState  == 1 )

      }

    #endif  /* INCLUDE_xTaskGetSchedulerState */

}



再次编译发现错误就消失了。
在main函数里新建一个task。
xTaskCreate是FreeRTOS中用于创建任务的函数。它的函数原型如下:

BaseType_t xTaskCreate(TaskFunction_t pxTaskCode,
 

                       const char * const pcName,
 

                       const configSTACK_DEPTH_TYPE usStackDepth,
 

                       void * const pvParameters,
 

                       UBaseType_t uxPriority,
 

                       TaskHandle_t * const pxCreatedTask);

pxTaskCode:任务函数的指针,即任务的入口函数。
pcName:任务的名称,用于调试和识别任务。
usStackDepth:任务堆栈的深度,以字节为单位。
pvParameters:传递给任务函数的参数。
uxPriority:任务的优先级,数值越高表示优先级越高。
pxCreatedTask:用于获取新创建任务的句柄。

新建一个点灯任务


然后主程序调用就可以了


编译下载就可以看到程序现象


完整工程已上传网盘

https://drfs.ctcontents.com/file/17978698/955554402/dde84a/FreeRTOS_demo.zip
---------------------
作者:新曲难觅旧知音
链接:https://bbs.21ic.com/icview-3331806-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值