自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 电路回顾(二)

名词支路:回路:网孔:结点:

2021-11-14 16:31:24 4956

原创 电路回顾(一)

电路中的变量电流:i=dq/dt电压:u=dw/dq功率:p=dw/dt (电路中功率守恒 P吸=P发)独立电源独立电压源:电压独立于电路的其他部分,由电压源自身决定;电流由电路负载决定 (0R电阻在电气特性上,相当于一个零值电压源)例如:5V/2A的电源,恒定输出5V电压,最大输出2A电流,电流输出由负载决定。独立电流源:电流独立于电路的其他部分,有电流源自身决定;电压由外电路决定(∞值电阻在电气特性上,相当于一个零值电流源)受控源受控电压源:有着电压源的特性,但是

2021-11-10 07:55:41 2126

原创 任务调度器

可剥夺型调度ucosIII有两种不同的处理中断服务程序发布事件的方法:直接发布和延迟发布直接发布图:代码:(红色框的函数:告诉ucosIII进/出中断函数,实质就是开/关中断)延迟发布图二者区别就是:前者进入中断服务函数后关掉了中断,执行完相应的操作后再开中断,后者是进入中断后释放信号量,触发相应事件执行,就不需要关中断了。调度点下列调度点,会自行启动调度器任务释放信号量给另一个任务或者向另外一个任务发消息任务调用延时函数任务等待事件而事件还没发生任务取消等待创建任务

2020-08-08 17:27:12 859

原创 ucosIII任务就绪表

优先级最高优先级:优先级0,分配给优先级服务管理线任务最低优先级:OS_CFG_PRIO_MAX-1,这个优先级分配给了空闲任务,其他任务不能拥有该优先级就绪优先级位映射表:顺序由左到右,若优先级下有任务就绪,那么就绪优先级位映射表对应优先级的位置就会置1就绪任务列表就绪任务列表:某一个优先级的就绪任务被放入的列表。就绪任务列表包括OS_CFG_PRIO_MAX的数组,数组的成员有Enteries、TailPtr、HeadPtr(Enteries:列表中就绪任务的数量;HeadPtr:指向

2020-08-05 16:07:19 529

原创 ucosIII任务管理(三)

系统内部任务系统有5个内部任务,空闲任务、时钟节拍任务、统计任务、定时任务、中断服务管理任务,前两个任务是初始化系统时必须创建的,后三个根据需求创建。空闲线程:优先级是最低的,只有当系统内没有就绪线程时,才运行空闲线程。空闲线程也是一个无限循环的,当系统无就绪线程时就会一直执行空闲线程,直到有就绪线程,才执行就绪线程。空闲线程并不是什么也不做,空闲线程有两个计数器不断递增,OSIdleTaskCtr和OSSartTaskCtr,都是用来计算CPU的利用率,后者与统计任务有关。时钟节拍线程:优先级比用

2020-08-04 15:42:55 269 1

原创 ucosIII任务管理(二)

任务管理的内部原理5种基本任务状态休眠态:任务已经写入代码空间中,但是不受ucosIII管理。调用OSTaskCreate()函数创建任务后,该任务就受ucosIII管理。当不再需要用ucosIII管理某个任务时,调用OSTaskDel()函数删除任务。OSTaskDel()函数,并非删除任务代码,只是该任务不能获得CPU的使用权就绪态:任务准备运行时就会进入就绪态。通过任务就绪表记录就绪态任务,就绪表根据就绪态任务的优先级排序。调用OSTaskCreate()函数创建任务后,任务就进入就绪态

2020-07-30 23:38:19 248 1

原创 ucosIII任务管理(一)

任务线程和任务其实是一样的,只是名字不同。任务有点像C函数,但是不一样。任务一般是死循环,而且没有返回值。在任务当中可调用函数。当任务开始运行时,系统会给任务传递一个参数 p_arg,这个参数是void型指针。这个指针是一个通用型指针,可以向任务传递变量地址、数据结构、函数入口等等。有了这个指针就可以创建一些代码完全相同的任务,这些任务仅是参数不同(也就是说,这个任务是通用的)任务分为两种类型:运行至完成:就是这个任务执行的次数有限,执行完成后就会自动挂起;在ucosIII中,这样的任务运行完成后

2020-07-29 21:43:08 368 1

原创 ucosIII临界段代码

临界段:临界段并不是一片区域,而是一段时间临界段代码:一段完整的程序必须连续运行,不能被打断的代码中断处理函数和任务都会访问的临界段代码,需要用关中断的方式加以保护只有任务访问的临界段代码,一般用给调度器上锁的方式加以保护关于临界段的宏定义OS_CFG_ISR_POST_DEFERRED_EN 设置为0,使用关中断方法保护临界段代码;若设置为1,使用给调度器上锁的方法保护临界段代码OS_CRITICAL_ENTER() 代表进入临界段代码OS_CRITICAL_EXIT()/OS_.

2020-07-25 17:09:10 1762 7

原创 ucosIII启动流程

启动流程ucosiii是直接从main函数开始运行的1、要调用BSP函数关闭所有中断2、初始化ucosIII,会初始化内部变量和数据结构,创建2-5个线程,至少创建2个线程。一个是空闲线程,当其他线程不就绪时就运行空闲线程;另一个是时钟节拍线程,负责时间管理3、然后用户就可以创建线程4、启动线程ucosIII创建线程时,需要用户创建线程控制块,静态分配线程栈的空间,如果要想动态分配内存就要使用malloc分配堆中的内存。线程函数:也就是在这个线程里需要做什么,一般要写成死循环。在进去循环之前

2020-07-23 20:39:50 621 4

原创 ucosIII概述

概述实时操作系统分为:硬实时操作系统和软实时操作系统硬实时操作系统:超过了规定时间后,得到正确结果,是不能容忍的,会对整个程序造成影响软实时操作系统:对于超过了规定时间后,得到正确结果这一举措是可以容忍的前后台结构系统后台:线程前台:中断服务程序实时内核在设计实时系统时,可以把系统功能划分为多个任务,每个任务只实施单一的功能,任务一般都是是循环。当任务在执行时,可以说这个任务在独占CPU的资源。实时内核,做的事情就是什么时候运行哪个任务,什么时候让任务挂起。当多个任务间的切换就造成

2020-07-22 20:13:58 2524 2

原创 Proteus仿真基于stm32的PM2.5报警器

要求:1.使用stm32做主控,芯片自选2.使用LCD1602显示PM2.5的上下限值,并显示PM2.5的当前值3.使用按键调节上下限的值4.使用滑动变阻器代替PM2.5吸合传感器5.使用ADC0832,测量滑动变阻器的电压代表PM2.5的当前值6.若PM2.5的值低于下限报警(蜂鸣器)高于上限报警并继电器吸合开发工具标准库Protues&&电路图Protu...

2020-03-30 11:45:26 9404 32

原创 RTC

开发平台标准库野火F429开发板蓝桥杯嵌入式板子RTC——实时时钟由RTC框图可以看出,使用日历功能,只需要三步就可以了(1)选择RTC的时钟源如何选择时钟源:有HSE、LSE、LSI,一般使用LSE作为时钟源,LSI稳定性差。但是我选择LSE作为时钟源的时候,RTC初始化失败,原因我也不知道。所以最后我选择了LSI作为时钟源(2)设置RTC的同步分频因子和异步分频因子L...

2020-03-05 15:46:35 595

原创 FMC扩展SDRAM

开发平台F429标准库SDARM如何控制SDRAM控制线:控制SDRAM需要命令去控制,控制线在不同状态下形成不同的命令地址线:用来选取地址的,分成A类线和BA类,A是行和列的地址总线,BA是用来选取BANK的独立地线(一般的SDRAM都有4个BANK)。如何选取地址:首先选择BANK的序号,然后再选行和列数据线:用来输入输出数据(一共有16位),这个型号的SDRAM,数据...

2020-02-09 20:24:11 688

原创 DMA

开发平台野火开发板F429标准库DMA(直接存储区访问)DMA可以数据的高效传输,数据移动过程无需经过任何CPU的操作和控制。F4支持:存储器到存储器、存储器到外设、外设到存储器F4有两个DMA控制器:DMA1和DMA2,只有DMA2才支持存储器到存储器DMA架构1、外设通道选择(每个数据流的每个通道有对应的外设,不过有一些是没有的)2、数据流的选择3、仲裁器,当有...

2020-01-20 17:38:38 1106 2

原创 3D封装创建

AD版本Altium Designer 18.1.9PCB加了3D封装很好看添加3D封装点击菜单栏的放置点击3D元件体按tab键,添加3D封装的路径,当然也可以自己画,但是别人的比较好看添加后,看准位置放在2D封装上面(紫色的阴影区域就是3D封装了)在英文状态下按数字3,就会看见图一的效果了3D封装的网址3D封装的网址:https://www.3dconten...

2020-01-19 11:12:09 405

原创 SPI

开发平台野火开发板F429标准库SPISPI也是通讯协议,通常会拿去和I2C做比较。SPI比I2C的数据线要多一点,可是通讯速率快了很多SPI总线上也是可以挂载多个外设的,但不同的是SPI外设并没有设备地址,所以每个SPI都有一条线选信号线(CS),当这条信号线被选中时,STM32就和信号线被选中的设备通信SPI总线:MOSI(主设备输出从设备输出入)、MISO(主设备输入从设备...

2020-01-19 10:54:55 607

原创 I2C

一提到I2C就会想到是通信协议,两个设备遵守这个协议便可以进行通讯一个I2C总线上可以挂在多个I2C设备,一个I2C总线上有SCL(时钟线)和SDA(数据线)I2C时序I2C的时序,如下图:1.SCL(时钟线)高电平有效。在SCL高电平时,SDA(数据线)由高电平被拉低,表示已经有了起始信号,可以开始通讯2.数据在SCL为高电平时有效,SCL为低电平时无效,在SCL为低电平时,S...

2020-01-17 20:48:23 3555 2

原创 USART——串口通讯

开发平台野火F429开发板标准库通讯基本概念同步通讯和异步通讯同步通讯和异步通讯的区别在于有没有时钟信号线全双工、半双工、单工通讯全双工可以收发同时进行半双工可以收发但不可同时进行单工只能收或发USART三大时序:USART、I2C、SPI,USART是其中之一了现在我使用串口一般都是打印调试信息或者蓝牙通讯 ,只会用到TX和RX如果想要操作寄存器,那就要看功能框...

2020-01-13 21:36:39 1650 2

原创 AD绘图快捷键

AD版本Altium Designer18.1.9AD常用的快捷键查看快捷键1.菜单栏任意位置右键如下图2.点击Customizing3.点击ALL查看全部快捷键自定义快捷键有一些操作是没有快捷键的,但是又常常用到,就需要自定义快捷键,比如:在区域内排列器件、放置平面多边形等。如何定义1.按住ctrl键点击你想要设置的操作2.填入快捷键(注意不要系统自带的快捷键重...

2020-01-13 13:59:13 1135

原创 RCC 使用HSE/HSI配置系统时钟

开发平台野火F429开发板标准库配置系统时钟首先要学会看时钟树,f429主频为180MHZ时钟树查看手册 时钟树如下图现在我需要用到的时钟总线主要是:AHB、APB1、APB2 其他的以后用到的时候再看吧1.HSE外部高速时钟信号HSE由晶振提供,晶振又分有源晶振和无源晶振,无源晶振需要提供时钟电路才可产生振荡。由图中可以看到 OSC_OUT和OSC_IN,采用无源晶振时,时钟...

2020-01-11 23:42:01 1711

原创 移植RTT到STM32

移植RTT到STM32:准备一个工程包括LED驱动和串口驱动1.首先到KEIL官网下载RTT软件包2.把软件包的文件放在你准备的工程里面3.打开工程,新建组,并把对应的文件添加进去4.添加libcpu的时候,我用的是M4和MDK编译器,添加以下两个文件即可5.添加路径6.编译会发现有错误7.rtconfig.h文件中去掉#include “RTE_Components.h”...

2019-10-20 17:25:58 1275

原创 硬件I2C驱动MPU6050

I2CI2C有两条总线线路,分别是SCL(时钟线)和SDA(数据线)。I2C的时序非常重要:读数据和写数据的时序有点不一样,在写程序的时候就体现得到。I2C的SCL高电平时有效,SDA高电平为1,低电平为0。I2C的驱动:I2C.h#ifndef __I2c__H#define __I2c__H#include "stm32f4xx.h"#define MPU_ADDR...

2019-09-27 22:31:04 1807 2

原创 STM32 高级定时器 输出PWM (用DHT11测得的温度去调节RGB灯的亮度)

开发平台野火STM32F429开发板使用标准库开发高级定时器高级定时器其实就是基本定时器加上输入捕获、输出比较和断路死区,所以有四个初始化函数:定时器时基初始化函数TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);输出比较初始化函数TIM_OC1Init(T...

2019-09-06 21:47:02 1426 2

原创 STM32 DHT11

STM32 DHT111. 开发平台野火STM32F429开发板使用标准库开发2. DHT11介绍DHT11温湿度传感器,是一个单总线传感器。所以DHT11最先输出的是湿度然后在输出温度(最开始我没认真看,以为先输出温度再输出湿度,然后打印出来的数据是反的)3. DHT11的时序先是主机发送开始信号然后就DHT11响应DHT11发送数据最后要把数据线拉高...

2019-09-04 16:20:16 2215 7

原创 EXTI——外部中断(按键中断)

STM32F429中有10个系统异常,91个中断。EXTI——外部中断/事件控制器有图可得:EXTI可以产生中断也可以产生事件编写按键——中断驱动程序初始化RGB彩色灯(前面的LED驱动程序已经写好了,直接调用就可以了)打开GPIO的时钟和SYSCFG时钟(SYSCFG是外部中断寄存器,使用EXTI必须开启SYSCFG时钟)配置NVICNVIC是嵌套向量中断控制器,设置...

2019-07-28 17:04:45 3833 1

原创 RCC—使用HSE配置系统时钟

RCC—使用HSE配置系统时钟芯片提供时钟就要有时钟树什么是晶振?晶振:晶体振荡器,用于各种电路中产生振荡频率,每个单片机里都会有晶振,给单片机提供时钟频率,振荡得越快,时钟频率就越高,单片机运行的速度就越快解析时钟树的方法:(系统时钟)时钟是由晶振提供的,首先要找到时钟的入口点。图中OSC_IN 和 OSC_OUT,这两个是外部晶振的引脚,所以时钟是从这里进入的。接有源晶振时,时钟从...

2019-07-23 17:40:42 1588 7

原创 GPIO输出——固件库点LED GPIO输入——按键检测

GPIO输出—固件库点亮LED灯点亮led灯的原理:LED的阳极接高电平,阴极接IO口。要LED灯亮就要形成闭合回路,IO口接入低电平就能形成闭合回路,点亮LED一个led驱动的三大功能:LED亮LED灭LED翻转新建led.c led.h 两个文件存放GPIO初始化函数 (加入工程后记得添加路径!!!)编写头文件格式:(这样写是为了防止重复定义) #ifndef _...

2019-07-22 13:30:58 1043

原创 STM32新建工程

固件库:固件库就是把操作寄存器的代码封装成函数给用户操作寄存器实现想要的功能用固件库操作寄存器,新建工程的步骤:1.在本地新建一个文件夹,存放库文件CMSIS存放内核相关的头文件、启动文件和system _stm32f4xx.h system_stm32f4xx.c文件Project存放工程文件STM32F4xx_StdPeriph_Driver存放外设的头文件和源文件User存...

2019-04-22 19:40:15 370 1

原创 STM32用寄存器点亮LED灯

寄存器:实际上就是cpu里面的东西 每个单元都有不一样的功能,根据功能给这些存储单位取别名,这个别名就是我们所说的寄存器。寄存器的映射:给寄存器分配地址的过程就叫作寄存器的映射。新建工程:新建工程需要手动创建main.c.h(头文件)头文件:寄存器的映射如何写寄存器的映射:首先找到需要控制外设的IO口,根据这个IO口去寄存器组织架构寻找需要控制外设的IO口在哪里基地址是什么,然后再...

2019-03-31 16:00:59 5816

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除