自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 如何学习嵌入式------转载

关于嵌入式如何学习,我相信有很多大牛回答得很专业,最近在知乎上看到一网名为----李brooks,~的网友对此进行了总结,我个人觉得非常好,还有其他两位网友licrifan和TonyHo,毕竟我工作以来也还有好多东西没有接触,就有他说的那些中的部分内容,我们来看看他们说了什么内容:有一位大学生四年级的网友提出这样的问题:本人大四学生,专业为电气类的,有C语言,单片机,模电,

2018-01-14 16:21:01 3561

原创 Cortex M3启动文件

启动文件是由汇编编写,是系统上电复位后第一个执行的程序。主要做了以下工作。1、初始化堆栈指针 SP = _initial_sp2、初始化PC指针 = Reset_Handler3、初始化中断向量表4、配置系统时钟5、调用C库函数_main() 初始化用户堆栈,从而最终调用main函数去到C的世界启动文件ARM汇编指令EUQ        给数字常量取一个符号名,

2018-01-10 09:10:13 1005

原创 使用SysTick延时

//使用中断定时void SysTick_Init(void){ if (SysTick_Config(SystemCoreClock / 100000) { while(1); }}/* 时钟频率是72MHz,T = 1 / (72 * 1000000), SystemCoreClock / 100000 = 720.如果想每

2017-12-27 19:02:00 1598

原创 按键检测与防抖

u8 KEY_Scan(u8 mode) { static u8 key_up=1;//按键按松开标志 if(mode)key_up=1; //支持连按 if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1)) { delay_ms(10);//去抖动 key_up=0;

2017-12-26 15:42:02 5528

原创 内存小结

程序和程序中的数据,比如数组里面的数据,这是存在ROM中。这部分数据不会被改变。是常亮。RAM中存储的是变量。在程序运行中会产生和改变的数据。如果一个变量被初始化了,初始化的数据是存在ROM中 ,RAM中只是存了这个数据的地址。如果在运行中改变这个数据,那么ROM中的数据不会被更改。只是RAM数据会更改。堆栈: RAM中的变量是存储在一个堆栈中。堆栈是在单片机的启动文件中定义的。 Stack_S

2017-12-26 13:26:32 155

转载 KEILC51编译问题ERROR L104: MULTIPLE PUBLIC DEFINITIONS重复定义

c/c++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下。 对于比较小的程序,一般只有一个c文件和一个头文件,全局变量我们通常会直接定义在c文件中,在程序之前加int i定义。如果要在头文件中定义有以下两种方法:用extern来声明:extern int i;这一句只是对变量i进行声明,在c文件的程序之

2017-12-20 14:34:48 830

原创 UCOS-II文件

1、OS_CFG.H OS_CFG.H是操作系统配置文件,用户进行操作系统裁剪定制是靠更改这个文件实现的。OS_MAX_EVENTS在应用中最大事件控制块的个数,包括信号量、邮箱、和消息队列的总和。因为每个信号量、邮箱和消息队列都占用一个事件控制块。例如在实例程序中,用了一个邮箱,一个消息队列,一个互斥信号量,所以该参数的最小值应为3.OS_MAX_MEM_PART:定义系统中内存块的最大数目。如

2017-12-12 09:56:31 494

原创 ucosii的初始化

使用ucosii的所有服务之前,必须调用ucosii的初始化函数OSInit(),对ucosii自身运行环境进行初始化。#include "includes.h"#define MY_TASK_STK_SIZE 512void main(void){ OSInit(); .... OSTaskCreate(MyTask,

2017-11-27 13:36:27 383

原创 任务的创建、挂起和恢复

ucosii有两个创建任务的函数:OSTaskCreate()和OSTaskCreateExt().其中OSTaskCreateExt()是OSTaskCreate()的扩展。并提供了一些附加功能。INT8U OSTaskCreate( void (*task)(void *pd),//指向任务的指针 v

2017-11-27 13:08:55 509

原创 任务就绪表及任务调度

为系统中处于就绪状态的任务分配CPU是多任务操作系统的核心。这项工作涉及两项技术:一是判断哪些任务处于就绪状态;二是进行任务调度。所谓任务调度就是通过一个算法在就绪任务中确定应该马上执行的任务,操作系统用于负责这项工作的程序模块叫做调度器。对任务就绪表的操作 登记: 对任务就绪表主要有三个操作:登记、注销、和从就绪表的就绪任务中得知具有最高优先级别的任务的标识(优先级prio) 在程序中,课用

2017-11-24 14:03:43 1332

原创 任务控制块

ucos用来记录任务堆栈指针、任务当前状态、任务优先级别等一些与任务管理有关的属相叫做任务控制块。任务控制块相当于一个任务身份证,系统通过任务控制块来感知和管理任务的,没有任务控制块的任务不能被系统承认和管理。ucos把系统所有的任务控制块链接为两条链表,并通过他们管理任务。任务控制块是一个结构类型 数据。当用户应用程序调用OSTaskCreate()函数创建一个任务时,该函数就会对任务控制块中所有

2017-11-23 19:29:14 1185

原创 任务堆栈

typedef unsigned int OS_STK; //该类型长度为16位#define TASK_STK_SIZE 512 //定义堆栈长度(1024字节)/*当调用OSTaskCreate()来创建一个任务时,把数组指针传递给函数OSTaskCreate()的堆栈栈顶参数ptos,就可以把该数组与任务关联起来而成为该任务的任务堆栈*///已知创建任务函数

2017-11-23 18:47:13 573

转载 时钟节拍

1 在”os_cfg_app.h”中设定时钟节拍频率,频率越高,操作系统检测时间越频繁。stm32裸机中常用SysTick时钟是MCU的内核定时器。通常使用该定时器产生操作系统的时钟节拍。“app.c”中的起始任务AppTaskStart()中初始化时钟节拍定时器,起始就是初始化stm32内核的SysTick时钟。

2017-11-23 09:30:58 880

转载 uC/OS-III文件结构

1、配置文件 cpu_cfg.h:定义CPU相关指令(计算前导0)存在与否、CPU_NAME、时间戳、关中断时间测量等CPU相关配置lib_cfg.h:库的相关配置os_cfg.h:系统相关代码的配置,这部分是拓展性的,比如可以配置是否裁剪定时器等内核对象的宏os_cfg_app.h:系统相关代码配置,这部分是必须设置的,比如节拍频率的配置2、应用程序 app.c任务相关代码的编写app.h:任

2017-11-22 10:06:47 777

转载 转载学习ucos的历程

ucos-ii操作系统的优异性能我就不说了,因为专家们说的太多了。非要说的话,只能是狗尾续貂。 我就说说自己对学习ucosii操作系统的一点学习心得。对我而言–非计算机专业的人刚开始接触操作系统是多么的痛苦,毕竟自己的c语言知识全靠自学得来的,况且对汇编语言几乎是一窍不通!学完51单片机以及编程后,曾对朋友吹嘘:c语言至少可以考70分(满分100),那时信心是何其饱满!如今自叹:c语

2017-11-21 13:59:31 535

原创 关于24C02地址问题

因为24C02最多可以存储256个字节 ,也就是从0到255,换成十六进制就是00H到FFH了。

2017-11-16 13:43:45 3978

原创 关于I2C心得总结

*1关于读写操作* 在读操作时候,先执行一个伪写操作,然后再执行读操作。I2C要求的。2关于时间的问题 一个晶振周期是晶振频率的倒数。 对于51单片机,一个机器周期是12个晶振周期。 一个nop()是一个机器周期。(具体nop()的时间见汇编) 对于时钟频率为11.0592Mhz的单片机,一个nop()是1us。对于I2C的时序要严格按照下图: 我们一般把delay()时间设置为5us。

2017-11-16 09:59:52 2062

转载 I2C关于读写控制位

*1、I2C协议简介* 2、空闲开始/应答/结束信号 2.1空闲 I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。 2.2 开始和结束 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为高电平时,SDA由低电平向

2017-11-15 23:18:27 20876 2

原创 按键检测

1 按键检测有以下几个步骤 1、检测有无按键按下 2、逐行扫描(逐行扫描功耗比较小,也可以采用行列反转的方式, 但是功耗比较大,多用于交流电中)这里是四行三列的按键。U8 Keypad_scan(void){ static unsigned char result = 0; switch (Keypad_ScanPara.step) { case

2017-11-14 13:11:10 1591

原创 I2C

1、字节格式 发送到SDA线上的每个字节必须是8位,首先传输的是最高位(MSB)。如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接受或者发送写一个完整的数据字节,可以使时钟线SCL保持低电平迫使主机进入等待状态。当从机准备好接受下一个完整的并释放时钟线SCL后,数据继续传输。2、响应 数据传输必须带相应。相关相应时钟脉冲由主机产生。在相应时钟脉冲器件,接收器必须将SDA线拉低,使他

2017-11-09 13:00:33 247

原创 DMA

DMA:Data Memory Access,直接存储器访问。主要功能是可以把数据从一个地方搬到另一个地方,而且不占用CPU。DMA1:有7个通道,可以实现P->M,M->P, M->MDMA2:有5个通道,可以实现P->M,M->P, M->M

2017-11-07 23:04:28 181

原创 UART串口通信

1 平时TX,RX,为高电平,双方一旦检测到线路上是低电平,表示数据传输开始了。   发送结束时候,结束位为高电平,可以是1个,1.5个或者2个高电平。2 串口通信相关的函数,除了初始化的函数,其他的就是对两个寄存器操作。uint16_t USART_ReceiveData(USART_TypeDef* USARTx){ /* Receive Data */ return

2017-11-07 20:51:58 1898

原创 USART

USART初始化结构体typedef struct{ uint32_t USART_BaudRate;//波特率 uint32_t USART_WordLength;//字长 uint32_t USART_StopBits;//停止位 uint32_t USART_Parity;//校验位 uint32_t USART_Mode;//USART模式 u

2017-11-07 15:24:15 3857

原创 stm32 中断

中断编程在配置每个中断的时候一般有三个编程要点:1、使能外设某个中断,这个具体由每个外设的相关中断使能控制。比如串口发送完成中断接收完成中断,这两个中断都由串口控制寄存器相关中断使能位控制。 2、初始化NVIC_IntTypedef结构体,配置中断优先级分组,设置抢断优先级和子优先级,使能中断请求。NVIC_IntTypeDef结构体在库文件misc.h中定义。

2017-11-07 10:51:11 335

原创 文章标题

/******************************************************************************Module : I2C接口文件.. Description : Build Date : others :Modification History: ifndef _I2C_DR

2017-10-18 17:16:58 180

转载 关于红外调制基础理解

关于红外调制基础理解 (2011-10-31 20:01:33)转载▼标签: 杂谈 分类: 智能协议无线       要是自己做红外遥控器的话应该怎么做?自己定义一个协议或套用现成协议,但是不管什么协议,对于红外发送部分,在发送“1”时就在红外输出口输出一定时间的38k方波(发送时间视自定义协议或现成协议格式),直到数据发送完成。对于红外接收部分,需知道遥控器的发送协议,根据遥控器

2017-10-10 10:37:09 3766

空空如也

空空如也

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

TA关注的人

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