打印
[STM32L0]

STM32L073 移植FreeRTOS点灯

[复制链接]
763|53
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 新曲难觅旧知音 于 2023-10-10 12:10 编辑

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


没活整就先点个灯吧

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

不过预留了安装位置,有时间找个晶振装上。
其他就初始化个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

使用特权

评论回复
沙发
Undshing| | 2023-10-9 22:42 | 只看该作者
写的很详细啊

使用特权

评论回复
板凳
tpgf| | 2023-11-2 14:10 | 只看该作者
点灯跑系统会不会很轻松

使用特权

评论回复
地板
nawu| | 2023-11-2 14:39 | 只看该作者
非常详细  **能有后续文章介绍优先级更改的

使用特权

评论回复
5
zljiu| | 2023-11-2 15:31 | 只看该作者
在cube里边可以直接使用哪些种类的系统啊

使用特权

评论回复
6
tfqi| | 2023-11-2 19:01 | 只看该作者
低功耗的时候,跑系统的程序应该怎么处理呢

使用特权

评论回复
7
tfqi| | 2023-11-2 19:01 | 只看该作者
低功耗的时候,跑系统的程序应该怎么处理呢

使用特权

评论回复
8
gwsan| | 2023-11-2 19:32 | 只看该作者
我们在单片机里边跑系统,选择使用哪种系统是根据什么原则来判定呢

使用特权

评论回复
9
aoyi| | 2023-11-2 19:58 | 只看该作者
在跑系统的程序里边 在什么情况下会判定一下互斥的标志量呢

使用特权

评论回复
10
geraldbetty| | 2023-11-5 10:16 | 只看该作者
在使用FreeRTOS时,需要仔细考虑任务的内存需求和处理器资源需求。这包括任务堆栈大小、任务优先级、任务数量等。合理地配置这些参数可以确保系统的稳定性和性能。

使用特权

评论回复
11
jtracy3| | 2023-11-5 11:18 | 只看该作者
移植FreeRTOS需要进行交叉编译、链接、调试等过程,需要按照官方文档的指导进行操作。同时需要注意编译选项、链接选项、调试选项等的设置。

使用特权

评论回复
12
jonas222| | 2023-11-5 11:57 | 只看该作者
在移植FreeRTOS的过程中,需要进行充分的调试和测试工作

使用特权

评论回复
13
chenci2013| | 2023-11-5 15:01 | 只看该作者
考虑使用FreeRTOS的配置文件(例如FreeRTOS_config.h)进行定制配置。这个文件包含了各种参数的设定,包括任务堆栈大小、任务优先级、定时器频率等。在移植过程中,可能需要根据具体硬件环境和项目需求修改这些参数。

使用特权

评论回复
14
sanfuzi| | 2023-11-5 16:38 | 只看该作者
配置FreeRTOS的堆栈大小和任务数量,以满足应用程序的需求。

使用特权

评论回复
15
abotomson| | 2023-11-6 15:25 | 只看该作者
在FreeRTOS中,常常使用定时器来实现任务的延时和定时触发。在STM32L073上使用时,需要注意定时器的时钟配置和计数器值的更新

使用特权

评论回复
16
fengm| | 2023-11-6 15:57 | 只看该作者
STM32L073支持多个优先级的中断,在移植FreeRTOS时需要确保中断处理程序的正确性,并合理设置优先级和中断向量。

使用特权

评论回复
17
jkl21| | 2023-11-6 16:33 | 只看该作者
在编写中断服务函数时,需要注意处理好中断嵌套的问题,以避免程序出错。

使用特权

评论回复
18
dspmana| | 2023-11-6 16:40 | 只看该作者
STM32L073与STM32系列其他芯片的硬件结构有所不同,因此需要确保FreeRTOS在STM32L073上能够正确运行。

使用特权

评论回复
19
houjiakai| | 2023-11-6 20:12 | 只看该作者
创建 FreeRTOS 任务,并添加它们的函数和优先级。

使用特权

评论回复
20
qiufengsd| | 2023-11-7 16:08 | 只看该作者
移植FreeRTOS后,需要进行充分的调试和测试,以确保系统的稳定性和性能。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

115

帖子

0

粉丝