STM32F103C8T6移植FreeRTOS

这篇具有很好参考价值的文章主要介绍了STM32F103C8T6移植FreeRTOS。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

建议有一定STM32开发基础

1. STM32库下载

根据自己开发板型号下载地址:STM32相关内容下载地址
SDK直接下载地址:STM32直接下载地址
下载参考博客

2. FreeRTOS下载

FreeROTS下载地址 选用V9.0.0 版本

3. 创建STM32项目

个人创建目录如下,可做参考

├── CMSIS
│   ├── core_cm3.c
│   ├── core_cm3.h
│   ├── startup_stm32f10x_hd.s
│   ├── stm32f10x.h
│   ├── stm32f10x_conf.h
│   ├── stm32f10x_it.c
│   ├── stm32f10x_it.h
│   ├── system_stm32f10x.c
│   └── system_stm32f10x.h
├── FreeRTOS
│   ├── include
│   │   ├── FreeRTOS.h
│   │   ├── StackMacros.h
│   │   ├── croutine.h
│   │   ├── deprecated_definitions.h
│   │   ├── event_groups.h
│   │   ├── list.h
│   │   ├── mpu_prototypes.h
│   │   ├── mpu_wrappers.h
│   │   ├── portable.h
│   │   ├── projdefs.h
│   │   ├── queue.h
│   │   ├── semphr.h
│   │   ├── stdint.readme
│   │   ├── task.h
│   │   └── timers.h
│   ├── port
│   │   ├── MemMang
│   │   │   ├── ReadMe.url
│   │   │   ├── heap_1.c
│   │   │   ├── heap_2.c
│   │   │   ├── heap_3.c
│   │   │   ├── heap_4.c
│   │   │   └── heap_5.c
│   │   └── RVDS
│   │       ├── ARM7_LPC21xx
│   │       │   ├── port.c
│   │       │   ├── portASM.s
│   │       │   ├── portmacro.h
│   │       │   └── portmacro.inc
│   │       ├── ARM_CA9
│   │       │   ├── port.c
│   │       │   ├── portASM.s
│   │       │   ├── portmacro.h
│   │       │   └── portmacro.inc
│   │       ├── ARM_CM0
│   │       │   ├── port.c
│   │       │   └── portmacro.h
│   │       ├── ARM_CM3
│   │       │   ├── port.c
│   │       │   └── portmacro.h
│   │       ├── ARM_CM4F
│   │       │   ├── port.c
│   │       │   └── portmacro.h
│   │       ├── ARM_CM4_MPU
│   │       │   ├── port.c
│   │       │   └── portmacro.h
│   │       └── ARM_CM7
│   │           ├── ReadMe.txt
│   │           └── r0p1
│   │               ├── port.c
│   │               └── portmacro.h
│   └── src
│       ├── croutine.c
│       ├── event_groups.c
│       ├── list.c
│       ├── queue.c
│       ├── readme.txt
│       ├── tasks.c
│       └── timers.c
├── Project
│   ├── BaseRTOS.hex
│   ├── BaseRTOS.uvguix.snsop
│   ├── BaseRTOS.uvoptx
│   ├── BaseRTOS.uvprojx
│   ├── DebugConfig
│   │   ├── BaseRTOS_STM32F103C8_1.0.0.dbgconf
│   │   └── Target_1_STM32F103C8_1.0.0.dbgconf
│   ├── EventRecorderStub.scvd
│   ├── Listings
│   └── Objects
├── STM32F10x_FWLib
│   ├── inc
│   │   ├── misc.h
│   │   ├── stm32f10x_adc.h
│   │   ├── stm32f10x_bkp.h
│   │   ├── stm32f10x_can.h
│   │   ├── stm32f10x_cec.h
│   │   ├── stm32f10x_crc.h
│   │   ├── stm32f10x_dac.h
│   │   ├── stm32f10x_dbgmcu.h
│   │   ├── stm32f10x_dma.h
│   │   ├── stm32f10x_exti.h
│   │   ├── stm32f10x_flash.h
│   │   ├── stm32f10x_fsmc.h
│   │   ├── stm32f10x_gpio.h
│   │   ├── stm32f10x_i2c.h
│   │   ├── stm32f10x_iwdg.h
│   │   ├── stm32f10x_pwr.h
│   │   ├── stm32f10x_rcc.h
│   │   ├── stm32f10x_rtc.h
│   │   ├── stm32f10x_sdio.h
│   │   ├── stm32f10x_spi.h
│   │   ├── stm32f10x_tim.h
│   │   ├── stm32f10x_usart.h
│   │   └── stm32f10x_wwdg.h
│   └── src
│       ├── misc.c
│       ├── stm32f10x_adc.c
│       ├── stm32f10x_bkp.c
│       ├── stm32f10x_can.c
│       ├── stm32f10x_cec.c
│       ├── stm32f10x_crc.c
│       ├── stm32f10x_dac.c
│       ├── stm32f10x_dbgmcu.c
│       ├── stm32f10x_dma.c
│       ├── stm32f10x_exti.c
│       ├── stm32f10x_flash.c
│       ├── stm32f10x_fsmc.c
│       ├── stm32f10x_gpio.c
│       ├── stm32f10x_i2c.c
│       ├── stm32f10x_iwdg.c
│       ├── stm32f10x_pwr.c
│       ├── stm32f10x_rcc.c
│       ├── stm32f10x_rtc.c
│       ├── stm32f10x_sdio.c
│       ├── stm32f10x_spi.c
│       ├── stm32f10x_tim.c
│       ├── stm32f10x_usart.c
│       └── stm32f10x_wwdg.c
├── SYSTEM
│   ├── delay
│   │   ├── delay.c
│   │   └── delay.h
│   └── sys
│       ├── sys.c
│       └── sys.h
├── User
│   ├── FreeRTOSConfig.h
│   ├── LED.c
│   ├── LED.h
│   └── main.c
├── Userlib
│   ├── IIC.c
│   ├── IIC.h
│   ├── dac.c
│   ├── dac.h
│   ├── debug.c
│   ├── debug.h
│   ├── mygpio.c
│   ├── mygpio.h
│   ├── myiic.c
│   ├── myiic.h
│   ├── softdelay.c
│   ├── softdelay.h
│   ├── timer.c
│   └── timer.h
└── keilkilll.bat

keil目录stm32f103c8t6移植freertos,STM32,FreeRTOS,stm32,单片机,嵌入式硬件链接头文件
stm32f103c8t6移植freertos,STM32,FreeRTOS,stm32,单片机,嵌入式硬件

4. 主程序代码

#include <stdio.h>

#include "delay.h"
#include "softdelay.h"
#include "LED.h"

#include "FreeRTOSConfig.h"
/* Scheduler includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"

static int num  = 0;

void bsp_init(void)
{
    int loop = 0;
    
    delay_init();
        
    LED_Init();
    
    for(;loop * 5 < 1000; loop++)
    {
        LED_Show_Num(8888);
    }
}

static TaskHandle_t LED_Task_Handle = NULL;/* LED handel */
static void vLCD_Task(void* param)
{
    while(1)
    {
        LED_Show_Num(num);
        vTaskDelay(1);
    }
}

static TaskHandle_t Num_Task_Handle = NULL;/* Num handel */
static void vNum_Task(void* param)
{
    while(1)
    {
        vTaskDelay(1000);
        num++;
        if(num >= 9999) num = 0;
    }
}

int main()
{
    bsp_init();
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
    
    taskENTER_CRITICAL();          
    
    /* Start the tasks defined within this file/specific to this demo. */
    xTaskCreate(     (TaskFunction_t )vNum_Task,     /*task function*/
                                (const char*    )"Check", /*task name*/
                                (uint16_t       )128, /*configMINIMAL_STACK_SIZE stack size*/
                                (void*          )NULL,   /*task function param*/
                                (UBaseType_t    )1,  /*task priority*/
                                (TaskHandle_t*    )&LED_Task_Handle);/*task ptr*/
                                
    xTaskCreate(     (TaskFunction_t )vLCD_Task, 
                                (const char*    )"LCD",         
                                (uint16_t       )128,     
                                (void*          )NULL, 
                                (UBaseType_t    )2,                 
                                (TaskHandle_t*    )&Num_Task_Handle);
    
    taskEXIT_CRITICAL();
                          
    /* Start the scheduler. */
    vTaskStartScheduler();
                              
    return 0;
}

5. 相关配置[重点重点重点]

• 修改堆栈大小
stm32f103c8t6移植freertos,STM32,FreeRTOS,stm32,单片机,嵌入式硬件
• 修改中断函数名
去掉stm32f10x_it.c终端函数
stm32f103c8t6移植freertos,STM32,FreeRTOS,stm32,单片机,嵌入式硬件增加FreeRTOS中断
stm32f103c8t6移植freertos,STM32,FreeRTOS,stm32,单片机,嵌入式硬件

特别解释
FreeRTOS的5种内存管理方法

文件 优点 缺点
heap_1.c 分配简单,时间确定 只分配、不回收
heap_2.c 动态分配、最佳匹配 碎片、时间不定
heap_3.c 调用标准库函数 速度慢、时间不定
heap_4.c 相邻空闲内存可合并 可解决碎片问题、时间不定
heap_5.c 在heap_4基础上支持分隔的内存块 可解决碎片问题、时间不定

感谢:https://blog.csdn.net/thisway_diy/article/details/121420297文章来源地址https://www.toymoban.com/news/detail-521953.html

到了这里,关于STM32F103C8T6移植FreeRTOS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 舵机控制(STM32F103C8T6)

            本文是以 STM32F103C8T6 作为主控芯片,通过PB6端口输出PWM,实现控制180°舵机。 (一)概述         舵机是一种位置伺服驱动器器,是一种带有输出轴的小装置。当我们向伺服器发送一个控制信号时,输出轴就可以转到特定的位置。只在控制信号持续不变,伺服机构就

    2023年04月09日
    浏览(56)
  • 功耗测评 | STM32F103C8T6

    STM32F103C8T6 MCU越来越广泛的应用在生产生活的各个领域,外接丰富的传感器、功能模块、通信模块、显示存储等可以形成各种可样的产品项目应用。对于功耗要求比较高的产品,一般会选择STM32L系列的MCU,但是从功耗的评测角度,逻辑上是基本相似的。 在很多应用场合中都对

    2024年02月07日
    浏览(45)
  • STM32F103C8T6系统板

    1.电源部分 2.复位 3.晶振 4. 电源电路——防反接 有关二极管 漫谈二极管防电源反接电路 本次采用上图右下角的NMOS防反接电路。 电源电路——电源芯片 AMS1117是AMS公司的 ,LM1117是NS(美国国家半导体)的,LM1117要贵很多,所以一般的用AMS1117就可以了。 (以下分析参考STM32F10

    2024年02月02日
    浏览(72)
  • STM32F103C8T6串口通信

      首先来看一下需要操作的函数,以及配置的步骤: 图1                                                  图2   Code: usart.c #include \\\"usart.h\\\" void ustart_Init(void ) { GPIO_InitTypeDef GPIO_Init_Ustar ; // 定义输出端口TX的结构体对象 USART_InitTypeDef USTART_Init; // 定义串口初始化结构体对象

    2024年02月16日
    浏览(52)
  • STM32F103C8T6串口调试篇

    项目开发中,当出现bug时,由于不知道某个变量的值,所以很难定位问题,针对此问题,串口调试脱颖而出。通过串口printf()实时将需要显示的信息打印出来,这样就很方便的定位问题。 串口设置方法 1.购买调试器pwlink2。参考STM32F103C8T6程序烧录方法_stm32f103c8t6如何烧录_流

    2024年02月12日
    浏览(64)
  • stm32f103c8t6的外部中断

    在单片机中存在着中断系统,这个系统的逻辑和功能在51单片机中已经有所了解。 1.在32单片机中的内核有一个nvic 里面存放许多优先级的设定,外接许多中断源,比如“exti、tim、adc、usart等”接入之后,nvic再通过中断优先级进行排队,再内接入cpu中进行处理,这样子大大减少

    2024年02月09日
    浏览(54)
  • [STM32F103C8T6]ADC转换

    什么是ADC转换? ADC转换的全称是: Analog-to-Digital Converter ,指模拟 / 数字转换器 ADC的性能指标: ADC分辨率: SSA与VREF-一起接到地,DDA与VREF+接到3.3v,所以ADC转换的范围是0---3.3v 所以最后的ADC转换值应该是我们的测量值*分辨率    分辨率 = 3.3v/2^12 = (3.3/4096)   12位的转换器所

    2024年02月06日
    浏览(47)
  • STM32F103C8T6 按键扫描输入

    第一章 STM32F103C8T6 点亮LED灯 系列文章目录 前言 一、原理  1.按键类型  2.按键消抖 3.IO口输入配置 1)模拟输出 2)浮空输入模式 3)下拉输入模式(PULL DOWN) 4)上拉输入模式(PULL UP) 二、代码部分 main.c key.c key.h 总结         上一章我们成功入门了STM32F103C8T6,今天我们来

    2023年04月23日
    浏览(78)
  • 嵌入式硬件——stm32F103C8T6

    如下图:    处理器核心:STM32F103C8T6内置了ARM Cortex-M3处理器,这是一种高性能、低功耗的32位RISC处理器,适用于嵌入式系统。 时钟速度:它可以工作在不同的时钟速度,最高主频可达72 MHz。 存储器:包括64KB的Flash程序存储器用于存储程序代码,以及20KB的SRAM用于存储数据和

    2024年02月05日
    浏览(65)
  • 自制STM32F103C8T6最小系统板

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 记录自己绘制第一块STM32F103C8T6最小系统板,包括原理图的绘制,pcb图的绘制和布局,以及器材的选购。 提示:有任何问题和交流可以加q:2874160799, 我基本上不看评论和私信。 根据ST官方手册,查看引脚

    2024年02月07日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包