STM32 告别裸机开发
一.简介
回想刚接触的单片就是 stc89c51单片机,由于后面的学习,发现51单片机的硬件太少,无法满足需求,所以就接触了STM32单片机,不管是51单片机还是STM32单片机,一开始的学习和使用都是裸机开发,也就是跑的前后台系统
什么是前后台系统
前后台系统是由一个死循环和若干个中断服务程序组成,应用程序是一个无限循环,循环中调用api函数来实现相应的功能,这个大循环就叫做后台系统,中断服务程序用于处理系统的异步事件,也就叫做前台系统,前台是中断级,而后台是任务级
这样的前后台系统是有弊端的,我给大家举个例子来理解一下,比如一个发射出去的导弹,一个任务程序在进行一半的时候,发生中断需要调整飞行状态,那么该中断程序会在该任务执行下来后进入中断程序,这显然无法做到实时性,就在这及短的时间可以就会飞其它地方去
所以为了解决这个问题,我们是得了解一下实时操作系统,实时操作系统很多比如 RT-Thread,ucos,VxWorks 等,今天给大家介绍的是freertos 应为这个是开源免费的,而且用的面很广所以推荐给大家
二.STM32CubeMx创建工程
1.准备
当然这里我们可以选择下载Freertos系统的源码进行相应的系统移植,但是这样有的麻烦,我就给大家简绍一个简单的方法,使用STM32CubeMx 软件来直接生成相关的代码
当然想了解Freertos系统源码的可以去官网下载,注意这个是外国的网站加载会比较慢
下载地址:Freertos官网
关于STM32CubMx的下载
下载地址:提取码为 vlpk
如果百度云下载慢也可以在此处下载: STM32CubMx
2.根据自己的开发板创建工程
创建新项目
选择自己的开发板,收到之后双击下面搜索到的开发板
3.基本的配置
SYS
RCC
GPIO 直接在右边芯片处鼠标点击配置
配置Freertos系统
时钟
注意
项目的路径,一定要是英文的,否则生成的代码,我们无法正常打开,会报错误
三.代码修改
在freertos.c 找到新建的任务对于的函数,添加对于的点灯代码就可以了
四.DelayUntil周期延时
由于Freertos的系统延时 osDelay()
不是很准,所以我们说一下使用周期延时
首先我来 STM32cubMx打开周期延时的配置
代码中这样配置
添加下面两句代码就可以了
uint32_t PreviousWakeTime = osKernelSysTick();
osDelayUntil(&PreviousWakeTime,500); //单位为ms
五.总结
这里我们只修改了默认的任务,我们也可以添加任务,然后也可以用点灯的程序来测试(注意配置不同的io口来点亮小灯),最后烧写到开发板的时候我们就可以看到效果了