FreeRTOS学习之路,以STM32F103C8T6为实验MCU(序章——浅谈单片机以及FreeRTOS)

这篇具有很好参考价值的文章主要介绍了FreeRTOS学习之路,以STM32F103C8T6为实验MCU(序章——浅谈单片机以及FreeRTOS)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习之路主要为FreeRTOS操作系统在STM32F103(STM32F103C8T6)上的运用,采用的是标准库编程的方式,使用的IDE为KEIL5。

注意!!!本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习,也可以通过Proteus仿真的方式进行学习。

后续文章会同时发表在个人博客(jason1016.club)、CSDN;

视频会发布在bilibili(UID:399951374)

FreeRTOS学习之路,以STM32F103C8T6为实验MCU(序章——浅谈单片机以及FreeRTOS)

作者的话:

        相信大家在学习完STM32的裸机开发后,满怀信心地去写一个庞大的项目的时,写到后期总会感觉,各个模块的任务总是会相互制约和影响,存在绝对的先后顺序关系(也称为轮询方法),即使在系统中以中断优先应对突发任务(前后台模式)也不是办法,一来是中断内的程序不能太复杂,最后只标志事件然后再主函数重新运行;二来是频繁进中断也不是办法吧。

        这里举一个例子:我给单片机设置了

  • (1) 一个每三秒需要通过MQTT协议将传感器收集到的温湿度数据上传到服务器的任务
  • (2) 此为我还设置了系统需要通过光度传感器监测光强阈值控制灯的开关
  • (3) 设置OLED屏幕实时显示时钟。
  • (4) 控制LED呼吸灯,每5s执行一次翻转操作

        那我在编写程序的时候就会遇到许多问题:

  • 上述第一个和第二个任务应该写在中断还是挂起标志位再在轮询主函数中执行呢?
  • 假设在中断中,那中断的执行事件会不会太复杂
  • 假设在任务中,当任务多起来,每次单片机需要完整执行一次轮询周期太长,会不会导致数据传输的实时性得到损失甚至导致数据丢包
  • 当我们使用delay等待函数的时候是不是会导致系统“没事干”导致CPU资源白白浪费掉了

        因此我们开始学习尝试了解以操作系统去解决上述的问题。那么我们应该移植什么操作系统呢?通过了解STM32F103适配的主流系统有μC/OS-II、eCos、FreeRTOS、都江堰操作系统等操作系统。而其中FreeRTOS以开源、免费而著名,所以我们在学习单片机就自然而然地FreeRTOS作为首选了。

FreeRTOS学习之路,以STM32F103C8T6为实验MCU(序章——浅谈单片机以及FreeRTOS)

        好了,跟大家卖了这么久关子,也不好再吊着大家了,接下来我就是直入主题了!!!

什么是操作系统?

        这里相信很多教程都讲过了,但是这里我想和大家聊聊我的看法!

        首先我们要先知道操作系统的主体是谁,操作系统是为谁服务的?操作系统的服务受众群体从始至终都只有一个,那就是单片机。

        对于单片机是什么,我这里分享一个我个人很喜欢的理解模式,(以STM32F103为例)我们把单片机比作一个人,那他的内核就是他的小脑瓜;晶振就是他的心跳;外设就是他的五感,SRAM和FLASH就是他的记忆系统,总线协议就是他的血管,那这样是不是就可以将单片机转化成一个活生生的人了呢。

        既然都把他比作一个人了,那我们不妨把单片机的各个运行模式转化为一个人思维方式进阶。首先裸机开发模式,就是这个孩童的阶段,这个时候单片机还不懂怎么合理分配自己的时间:只知道到了早上要先刷牙,然后洗脸,最后再吃早饭,但是针对突发情况,比如今天天牙膏没了那咋办?单片机就不会处理了,就傻傻地站在洗漱池前等刷牙,等牙膏来了(轮询模式);

然后就是前后台系统模式了,等你年纪再大点,步入了幼年时期,可以听得懂父母的话,在上述处理事情的模式上,又学会了听爸爸妈妈的话,当父母喊你去做什么事情的时候,你总会乐呵呵地抛下手里的所有事情去听爸爸妈妈喊你知道你一会要去做什么(中断),然后再先把爸爸妈妈安排的工作插入上述的轮询进程任务中,到时间了再处理得当(主程序执行事件)。这样要是妈妈说她马上要出门了,喊你帮忙拿车钥匙,你还傻傻地先刷牙洗脸吃早餐再给妈妈送过去,估计妈妈得气死。

最后就到了多任务系统了,单片机度过稚嫩的幼年时期,到了青年时期有了属于自己的一套做人方式和行为准则,当然青年时期属于叛逆时期,不同单片机的发展差异就在于他解除了什么学习了什么(而这里我把这件事称为移植了什么系统),而我们就单独将学会了FreeRTOS的单片机小朋友提出来举例了,这位小朋友他就学会了:

  • 把要做的事情都分成一个个任务,然后重要的事情先做(任务调度器按任务优先级调度)。
  • 在别的任务等待的时候可以做别的事情,比如你在煲热水,等水沸腾的时候就可以做别的事情啦。(任务调度器任务切换)
  • 合理运用自己的记忆力(heap_4内存分配)
  • ......

        当然上述说到的三个阶段,都是基于单片机是人的基础实现的,赋予了他思考的能力。相信大家都知道,人类之所以区别于野兽,是在于其能思考的能力,而思考的依托就是我们发达的大脑,这是由我们的基因决定的。就像单片机为什么可以被赋予操作系统(思考能力)呢?其决定性因素就在于其的一个根本内核——ARM内核,以STM32F103C8T6为例,其内核为cortex-M3,他的这个内核就是他的遗传下来的大脑,从本质来讲是他的这个大脑支持他思考,所以操作系统的诞生不是ARM的一个发展产物,而是ARM的一个原生产物。其实在cortex-M3,M4内核中,也早就为接收操作系统预留了一系列的配置,而不同的操作系统,只是单片机在发展过程中遇到的不同的事发生的转变。

        可能有点绕,所以我就喜欢用一个很有深度的话来解析:决定一个人的由两个因素,一个是他的基因,一个是他的经历。单片机同样如此,决定其本质的是他的出厂硬件(内核和外设),而决定其思考方式的,就是他的一个操作系统了。

  • 我们无法决定我们的基因,但是其实我们的基因赋予了可以思考的能力,我们可以通过不同思考方式,在基因固定的情况下,达到更高的成就。
  • 单片机同样无法决定他的内核,外设等硬件,但是其实单片机的内核赋予了其可以移植操作系统的能力,其同样可以通过移植不同的操作系统,在硬件固定的情况下,实现更多的功能以及减少更多的功耗。

FreeRTOS学习之路,以STM32F103C8T6为实验MCU(序章——浅谈单片机以及FreeRTOS)

 相信聊到这里,大家大概了就了解了单片机和操作系统的关系了,操作系统就是单片机的思考和处理事情的方式,可能网上很多都有介绍Linux操作系统、FreeRTOS操作系统,但是相信大家看完这么多介绍都是似懂非懂的。在我看来,操作系统的定义应该泛定义到单片机的执行事件的一个模式,无论是裸机还是前后端,多任务都是一个完整的操作系统(这里是作者个人臆想的,要是错了欢迎指正)。

学习之路安排

        这条学习之路会以STMF103C8T6为MCU,在上面移植FreeRTOS操作系统,并且逐层解析FreeRTOS实时操作系统。最终希望都可以掌握FreeRTOS实时操作系统,并且可以以此为基础做出来很多实战项目。

寄望与自勉

很喜欢那句话,种一颗树最好的时间是10年前,其次就是今天!愿今日的你成就明日的你。就像我个人博客主页写的那句话一样:

你终将成为你想成为的人
愿你在通往成功的路上
不再孤身一人

本文为作者独立编写,本BLOG上所有的原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注明出处,否则属于侵权行为。文章来源地址https://www.toymoban.com/news/detail-460126.html

到了这里,关于FreeRTOS学习之路,以STM32F103C8T6为实验MCU(序章——浅谈单片机以及FreeRTOS)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Stm32f103c8t6(proteus仿真)学习——3.按键控制LED灯

    按键:button 电阻:res 先配置LED灯的GPIO 编写LED亮灭的函数 实现按下按键LED灯的状态取反 led.c总代码 先配置按键的GPIO 获取当前按键键值的函数 key.c总代码 5.1 按键按下实现LED亮或者灭 仿真效果图: 5.2 按键按下实现LED状态取反 仿真效果图: 百度网盘 链接:https://pan.baidu.co

    2024年02月07日
    浏览(58)
  • Stm32f103c8t6(proteus仿真)学习——1.点亮LED流水灯

    软件准备:keil uVsion 5 和 proteus 8.15 打开proteus8.15 - 新建项目 - 改名 - 一直next 鼠标右键 - 放置 - 元件 - From Libraries 搜索Stm32 - 选择stm32f103c8 画出点亮一个LED灯的原理图 提示,各元器件搜索: 主控芯片:stm32 电阻:res LED灯:led 鼠标右键 - 放置 - 元件 - From Libraries 地和VCC 在左侧

    2024年02月08日
    浏览(58)
  • 功耗测评 | STM32F103C8T6

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

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

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

    2024年02月02日
    浏览(69)
  • STM32F103C8T6板子介绍

    STM32简介 STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器。  STM32F103C8T6 F1XX片上资源

    2024年02月11日
    浏览(54)
  • 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日
    浏览(50)
  • 舵机控制(STM32F103C8T6)

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

    2023年04月09日
    浏览(53)
  • STM32F103C8T6串口调试篇

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

    2024年02月12日
    浏览(61)
  • 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日
    浏览(74)
  • stm32f103c8t6的外部中断

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

    2024年02月09日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包