STM32cube+Freertos+Tracealyzer

一、前言

目标:使用STM32单片机创建两个Freertos任务,并在Treacelyzer软件上显示任务视图。

Tracelyzer软件可以使用流模式和快照模式,本次实验使用流模式。

流模式只能使用J-link实现,板载的ST-link可以转化为J-link,但是单独购买的ST-link不可以转换,你也可以尝试,小心变砖。


二、使用STM32cube创建freertos任务

1.选择单片机型号

2.配置IO口

以上就创建完成代码,下面开始串口移植。


在usart.c中添加头文件

#include "stdio.h"

在usart.c的最后添加重定向函数,可能不同板子的重定向函数不同,或者使用其他的重定向函数

#if 1
#pragma import(__use_no_semihosting)
struct __FILE
{
int handle;
};
FILE __stdout;
void _sys_exit(int x)
{
x = x;
}
int fputc(int ch, FILE *f)
{
while((USART1->ISR&0X40)==0);
USART1->TDR = (uint8_t) ch;
return ch;
}
#endif

在freertos.c中添加头文件

#include "stdio.h"

在两个任务中添加打印代码

我们看到两个任务已经实现了,接下来开始移植Tracealyzer代码。


三、移植Tracelzer代码

这时候编译出现四个错误,先不要管。

修改配置文件trcConfig.h,删除#error "Trace Recorder: Please include your processor's header file here and remove this line.",并#include处理器头文件。

将硬件移植配置为Tracealyzer针对Cortex-M提供的实现。其他架构的处理器,如果没有现存的移植,需要用户自行提供一个硬件定时器来产生时间戳。

#define  TRC_CFG_HARDWARE_PORT TRC_HARDWARE_PORT_ARM_Cortex_M

将跟踪模式设置为流模式

#define TRC_CFG_RECORDER_MODE TRC_RECORDER_MODE_STREAMING

设置所使用的FreeRTOS的版本,这里使用的是FreeRTOS v10.2.1版本。(打开FreeRTOS.h文件,最上面有版本号

#define TRC_CFG_FREERTOS_VERSION TRC_FREERTOS_VERSION_10_2_1

在FreeRTOSConfig.h配置文件中使能跟踪功能:

#define configUSE_TRACE_FACILITY 1

还是在FreeRTOSConfig.h下

#include "trcRecorder.h"

在main函数中调用vTraceEnable(TRC_INIT)初始化并使能跟踪,调用的位置须在硬件完成初始化之后,第一个内核对象创建之前。

vTraceEnable(TRC_INIT);

在freestos.c中加入等待软件启动函数,烧写单片机之后,并不执行,当等待软件启动之后,才开始启动。

vTraceEnable(TRC_START_AWAIT_HOST);  //等待软件启动

现在编译没有错误了,只有警告,警告是因为Tracealyzer软件中有些包我们没有用,并不影响使用,不用管。

以上移植已经结束了,下面开始接入Tracealyze软件,并分析。


四、Tracealyzer软件使用并分析

红的的是Task1,绿色的是Task2,因为Task1的优先级高于Task2,所以先于Task2执行,而当Task1和Task2发生冲突之后,Task1会打断Task2的执行,下面我进行演示。

修改代码中Task1的延时时间

重新捕获,可以发现,当Task1来临时,会让Task2进入等待状态

以上就实现了STM32+Freertos+Tracelyzer的简单功能,若有错误的地方,请不吝赐教。

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: STM32是一款由ST(意法半导体)公司开发的高性能32位单片机系列。它集成了丰富的外设,如串口、定时器、PWM、ADC等,同时支持多种通信接口如SPI、I2C和CAN等。STM32 HAL(Hardware Abstraction Layer)是ST公司为STM32系列开发的一套硬件抽象层,它提供了一套统一的编程接口,简化了在不同STM32芯片之间的移植工作。 FreeRTOS是一个流行的实时操作系统(RTOS),它在STM32上得到广泛的应用。它提供了多任务调度、信号量、消息队列等功能,可以帮助开发者实现复杂的任务并行处理。在STM32中使用FreeRTOS,可以充分利用STM32的多核处理能力和丰富的外设资源。 MQTT是一种轻量的消息传输协议,广泛应用于物联网领域。它通过发布和订阅模式实现消息的传输,具有简单、开销小、可靠性高的特点。在STM32中使用MQTT,可以实现与各种设备的通信,如传感器、控制器等。 综上所述,STM32 HAL是ST公司为STM32系列开发的硬件抽象层,可以方便地在不同芯片之间移植FreeRTOS是一个实时操作系统,能够帮助开发者实现并行处理和任务调度。MQTT是一种轻量的消息传输协议,可以用于STM32与其他设备之间的通信。通过结合使用这三种技术,可以开发出高性能、可靠的物联网应用。 ### 回答2: STM32 HAL是ST公司提供的一套基于硬件抽象层的开发库,用于简化嵌入式系统的开发。HAL库提供了一系列功能丰富的函数接口,包括GPIO、UART、SPI、I2C等外设的控制接口,可以方便地对STM32单片机进行配置和控制。 FreeRTOS是一款广泛使用的开源实时操作系统(RTOS),适用于嵌入式系统的开发。FreeRTOS提供了任务管理、调度器、队列、信号量等功能,可以用于多任务的并发执行。它具有轻量、可移植、可靠等特点,广泛应用于各种嵌入式系统中。 MQTT(Message Queuing Telemetry Transport)是一种基于发布-订阅模式的轻量级通信协议,常用于物联网(IoT)应用中的设备间通信。MQTT协议使用简单、开销小,适用于带宽有限的场景。它通过客户端和代理服务器之间的消息传递实现通信,支持可靠传输和压缩技术,可以满足物联网应用对低功耗、低带宽的要求。 结合起来,使用STM32 HAL库和FreeRTOS可以实现在STM32单片机上运行MQTT协议。HAL库提供了对待控制的硬件外设的支持,可以与MQTT库进行配合,实现对设备的配置和控制。FreeRTOS提供了任务管理和调度功能,可以用于处理MQTT消息的异步接收和处理,以及与其他任务的并行执行。通过这些组件的结合使用,可以开发出功能强大、稳定可靠的物联网设备。 ### 回答3: STM32 HAL是指STM32微控制器的硬件抽象层(Hardware Abstraction Layer)。它提供了一个统一的接口,以便开发人员能够简化对STM32微控制器的底层硬件操作。通过使用HAL,开发人员可以更方便地编写可移植且易于维护的代码。 FreeRTOS是一个开源的嵌入式实时操作系统(RTOS)。它提供了任务调度、时间管理、内存管理、通信和同步机制等功能,使开发人员能够更方便地编写多任务并发的嵌入式应用程序。在STM32项目中,FreeRTOS通常与STM32 HAL一起使用,以实现高效的任务调度和资源管理。 MQTT是一种基于发布/订阅模式的轻量级消息传输协议。它被广泛应用于物联网等场景中,以实现设备之间的消息通信。MQTT具有低延迟、低能耗和网络带宽占用小等特点,非常适合在资源有限的嵌入式系统中使用。在STM32 HAL和FreeRTOS的基础上,使用MQTT可以实现STM32微控制器与其他设备之间的可靠、高效的通信。 总结来说,STM32 HAL提供了对STM32微控制器硬件的抽象接口,简化了底层编程;FreeRTOS是一个实时操作系统,提供了任务调度和资源管理;而MQTT是一种轻量级的消息传输协议,用于在嵌入式系统中实现设备之间的通信。这三个技术共同使用可以实现高效、可靠的嵌入式应用程序开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WinterWanderer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值