173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

stm32uartfreertos

keros@mark 2023-03-17 资讯中心

STM32 KEIL C如何在RAM中调试FREERTOS?

这需要 加入向量表的定义;

加入这段话

#ifdef VECT_TAB_RAM

/* Set the Vector Table base location at 0x20000000 */

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //向量表位于RAM

#else /* VECT_TAB_FLASH */

/* Set the Vector Table base location at 0x08000000 */

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); //向量表位于FLASH

#endif

也可以直接写入;

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //向量表位于RAM

祝你成功!

stm32 跑 FreeRTOS 要多大的Flash比较好?

这个不应该吧,基本的FreeRTOS怎么可能占32K,是你的keil没有许可码吧,32K绝对是装的下的, 应该FreeRTOS只有十几K(我只用 用过RTT,FreeRTOS是官方自带的我编译过没有那么大);Flash选64或者128的就够了。

如何在stm32上移植Freertos

1.前言

【1】其实说不上移植笔记,FreeRTOS已经移植至众多平台(MCU),包括MSP430,STM32等,这份笔记完全建立在官方代码的基础之上,简单的说就是修改一些设置从而完成一个呼吸灯实验。

【2】虽然有官方移植代码,但是官方移植版本为STM32的V2.X库,与现在流行的V3.5有比较大的区别。本笔记也是总结网上几篇学习笔记,主要说明如果使用V3.5库,需要做哪些修改。

【3】编译软件为IAR EWARM 6.5。

【相关博文】

【FreeRTOS学习笔记——任务间使用队列同步数据】——如何使用FreeRTOS队列。

【如何在FreeRTOS下实现低功耗——MSP430F5438平台】——如何通过空任务实现系统低功耗。

2.FreeRTOS需要哪些文件

FreeRTOS的文件结构非常简单,移植或者版本升级替换也非常方便。

1)与FreeRTOS内核有关的文件数量仅为3个,分别是list.c queue.c tasks.c

该文件位于FreeRTOS\Source

2)与内存分配有关的文件共有4个,分别是heap_1.c,heap_2.c,heap_3.c,heap_4.c。4个文件只需选择其中的1个,STM32选择heap_2.c。

该文件位于FreeRTOS\Source\portable\MemMang

3)与移植相关的代码包括port.c,portasm.s,portmacro.h。这些代码不但和编译器有关还和平台(MCU)有关。FreeRTOS先以编译器为大类,然后再以平台(MCU)为小类。在这里选择IAR编译器,平台为ARM_CM3。

该文件位于FreeRTOS\Source\portable\IAR\ARM_CM3

4)除了上述内容之外,还包括FreeRTOS内核相关的头文件。

该文件FreeRTOS\Source\include

3.必要的工程设置

开始之前需要引入V3.5库相关头文件,启动代码和CMSIS库。

在IAR中设置相关头文件的路径(应根据实际情况修改)

$PROJ_DIR$\CMSIS

$PROJ_DIR$\StdPeriph_Driver\inc

$PROJ_DIR$\User

$PROJ_DIR$\FreeRTOS\Source\include

$PROJ_DIR$\FreeRTOS\Source\portable\IAR\ARM_CM3

当然头文件的路径并不是绝对的,只要明确头文件在哪,设置正确路径即可。

除了设置C代码的相关头文件之外,还需要设置汇编代码的头文件路径,由于很少设置汇编代码头文件路径,往往初次移植FreeRTOS会在此处遇到一些“困难”。

stm32使用freertos的时候能不能使用定时器

在进入中断函数后,清除标志位。不会在函数没执行完就进入下次中断响应 如果想改变定时时间,可以先失能定时器,配置完后再使能

用STM32CubeMx创建的FreeRTOS可以运行多少个实例

我第一次使用STM32CubeMx,创建了一个简单的FreeRTOS代码。硬件平台是STM32F103RCT6。根据原代码,在freertos.c文件内的函数 MX_FREERTOS_Init(void)内,调用osThreadCreate创建线程,默认生成的StartDefaultTask线程。我按照StartDefaultTask的代码,在 MX_FREERTOS_Init(void)内用osThreadCreate创建另外两个线程,分别为LEDTask和MeasureTempTask。

当三个线程同时创建的话,OS跑不起来,连StartDefaultTask都没有执行。

如果,只创建其中任意的两个线程,OS就可以跑起来。

FreeRTOS本身可以执行多个线程,但STM32CubeMx好像是用CMSIS来重新封装FreeRTOS,是不是CMSIS限制了执行线程的数量?

另外,我测试过,如果在StartDefaultTask线程内,创建另外的两个线程,OS除了执行StartDefaultTask线程外,只执行另外创建的第一个线程。

在STM32上跑FreeRTOS总是进入HardFault,不知是什么原因

先看看是不是你任务栈空间设置太小,溢出了? 不是的话,你可以在HardFalut下断点,停下后看函数调用堆栈,看在产生HardFalut之前都调了什么函数。

本文标签:stm32uartfreertos

产品列表
产品封装
友情链接