控制寄存器

Tiny4412之重力感应器驱动

冷暖自知 提交于 2020-03-30 02:07:17
一:Tiny4412 裸板重力感应驱动编写   整个编写过程大概分为如下几步:   (1)在底板上找到重力感应器的所在位置,找到芯片型号(我用的板子上重力感应器芯片型号为: MMA7660FC )   (2)通过型号查看重力感应器电路图,了解每个引脚的功能   (3)找到引脚对应的网标(EINT,SDL,SCL)配置其相应的gpio口   (4)配置芯片相关寄存器   (5)使用I2C来读取重力感应器相应寄存器的值   下面是整个驱动的简单流程图: 通过看底板我们知道了重力感应器的控制芯片型号为: MMA7660FC,接下来我们就在看看改芯片的电路图(如下): 由上图我们可以看出它的外部中断XEINT25,用到的i2c总线为SDA3、SCL3 通过网标我们可以看到它是怎么连接到核心板上的(soc) 由上图可知,XEINT25、I2CSDA3、SCL3所对应的gpio分别为GPA1_2、GPA1_3、GPX3_1,之后我们就可以配置gpio口为相应的功能 通过datasheet我们可以找到它的外部中断号为64,如下图: 简单了解了mma7660的电路图之后我们就需要看芯片的datasheet,了解里面寄存器的配置及功能 首先看一下整个芯片与我们核心板的连接图: 由上图我们可以看出,芯片连接到我们核心板(soc)的总共为三根线:INT( 中断信号),SDA、SCL

[ZigBee] 3、ZigBee基础实验——GPIO输出控制实验-控制Led亮灭

不羁岁月 提交于 2020-03-30 01:55:46
1、CC2530的IO口概述   CC2530芯片有21 个数字输入/输出引脚,可以配置为通用数字I/O 或外设I/O 信号,配置为连接到ADC、定时器或USART外设。这些I/O 口的用途可以通过一系列寄存器配置,由用户软件加以实现。    I/O 端口具备如下重要特性:      􀁺 21 个数字I/O 引脚     􀁺 可以配置为通用I/O 或外部设备I/O     􀁺 输入口具备上拉或下拉能力     􀁺 具有外部中断能力。   21 个I/O 引脚都可以用作于外部中断源输入口。因此如果需要外部设备可以产生中断。 外部中断功能也可以从睡眠模式唤醒设备 。 2、未使用的I/O 引脚处理   未使用的I/O 引脚电平是确定的,不能悬空。一个方法是使引脚不连接,配置引脚为具有上拉电阻的通用I/O输入。这也是所有引脚复位后的状态(除了P1.0 和P1.1 没有上拉/下拉功能)。或者引脚可以配置为通用I/O输出。这两种情况下引脚都不能直接连接到VDD 或GND, 以避免过多的功耗 。 3、低I/O 电压   在数字I/O 电压引脚DVDD1 和DVDD2 低于2.6V 的应用中,寄存器位PICTL.PADSC 应设置为1,以获得DC 特性表中所述的输出DC 特性。 4、通用I/O    用作通用I/O 时,引脚可以组成3 个8 位端口,端口0、端口1 和端口2,表示为P0、P1

STM32学习之路-点亮LED

℡╲_俬逩灬. 提交于 2020-03-30 01:53:06
STM32学习笔记—点亮led灯 STM32的I/O口有很多的功能,所以称为GPIO(GENERAL PURPOSE) 其中GPIO又分为A,B,C,D,E,F,G不同的组,每个组端口又分为0~15,共16个不同的引脚,不同的芯片引脚数量也不同,所用的学习板为STM32F103RBT6; I/O口的八种模式: 输入浮空; 模拟输入; 输入上拉; 输入下拉; 开漏输出; 推挽输出; 推挽式复用功能; 开漏复用功能; 每个I/O口可以自由编程,单I/O口寄存器必须按32位字节被访问。并且很多I/O口都是5V兼容的,手册当中标记FT的就是5V电平兼容的。 I/O的七个 寄存器( register ) :(X=A,B,C,D….G) 32位端口配置低寄存器GPIOX_CRL; 选择作为输入还是输出 32位端口配置高寄存器GPIOX_CRH; 选择作为输入还是输出 32位端口输入数据寄存器GPIOX_IDR; 保存了输入电平还是输出电平 32位端口输出数据寄存器GPIOX_ODR; 保存了输入电平还是输出电平 32位端口位设置/清除寄存器GPIOX_BSRR; 设置控制的数据为0/1 32位端口位清除寄存器GPIOX_BRR; 设置控制的数据为0/1 32位端口配置锁定寄存器GPIOX_LCKR;设置锁定引脚后,不能修改其配置 32位端口配置低寄存器GPIOX_CRL(低8位): 一个I

关于MAX30100心率的编程

我的梦境 提交于 2020-03-23 07:02:18
  MAX30100是能够读取心率、血氧的传感器,通信方式是通过IIC进行通信。   其工作原理是通过红外led灯照射,能够得到心率的ADC值。       图为MAX30100的寄存器。   可以分为五类,状态寄存器、FIFO、控制寄存器、温度寄存器、ID寄存器。   温度寄存器是读取芯片的温度值,以矫正因为温度而产生的偏差。   ID寄存器是读取芯片的ID号。      重点在于另外三类寄存器。 STATUS寄存器   其中,STATUS寄存器有两个,一个是中断状态寄存器,一个是中断使能寄存器。        例如,当你使能了心率中断,当心率转换结束时,其状态位就会置1。    FIFO寄存器   数据存储在FIFO_DATA寄存器,我们主要去读取他就可以了。其余三个是溢出次数以及读写指针。   DATA存的数据是每次读到的ADC值。每一次会读四次,依次是IR的高低数据、RED的高低数据。       Configured寄存器        Mode寄存器中 SHDN是低功耗控制位、RESET是复位、TEMP_EN是温度检测使能,MODE是模式选择。     SPO2设置寄存器 主要是设置血氧浓度相关的参数的,以及LED_PW的功率。     LED寄存器是设置两颗灯的脉冲时间。 程序编写      首先要对max30100进行初始化配置。 max30100_write

modbus-tcp协议讲解

谁都会走 提交于 2020-03-23 06:18:12
MODBUS功能码简介   代码 中文名称 位操作/字操作 操作数量 01h 读线圈状态 位操作 单个或多个 02h 读离散输入状态(只能读到0或1) 位操作 单个或多个 03h 读保持寄存器(保持寄存器可以通过06h功能写入) 字操作 单个或多个 04h 读输入寄存器(输入寄存器只能读取,不能通过06h功能写入) 字操作 单个或多个 05h 写单个线圈(线圈表示用来控制输出IO控制) 位操作 单个 06h 写单个保持寄存器 字操作 单个 0Fh 写多个线圈 位操作 多个 10h 写多个保持寄存器 字操作 多个 Modbus TCP介绍 示例-通过03功能码读寄存器(从寄存器00开始,读取两个值,读到01寄存器结束) 客户端发送 01 02 00 00 00 06 01 03 00 00 00 02 01 02 00 00 00 06 (固定报文头) 01 02: 客户端发出的检验信息, server端会将这两个字节内容复制到回应的报文第一二位.一般我们会将第一二位进行不停递加,然后根据服务器返回的相应内容, 来验证服务器回应信息的时效性 00 00: 表示tcp/ip 的协议的modbus的协议 00 06: 表示客户端发送的后面带了多少字节. 01 03 00 00 00 02(用户数据) 01: 表示设备地址 03: 表示读保持寄存器功能码 00 00:

基于51单片机的CAN通讯协议C语言程序

♀尐吖头ヾ 提交于 2020-03-22 09:39:21
//-----------------------函数声明,变量定义-------------------------------------------------------- #include <reg52.h> sbit int0 = P3^2; //-----------------------定义寻址的基址-------------------------------------------------------- #define base_Adr 0x00 //-----------------------定义总线定时寄存器的值-------------------------------------------------------- #define SJA_BTR0 0x00 //该值需要用户根据实际需要的波特率进行计算 #define SJA_BTR1 0x16 //具体计算见文章说明 //-----------------------设置接收报文类型(标示符)-------------------------------------------------------- //该值需要用户根据实际需要重新配置 #define SJA_ACR 0x00 //验收代码寄存器的值 #define SJA_AMR 0x16 //验收屏蔽寄存器的值 //-------

寄存器基本原理介绍(上篇)

╄→гoц情女王★ 提交于 2020-03-20 16:36:01
存储器被划分为多个存储单元,从零开始编号,就像是一条街上的门牌号一样,那么 CPU 要读取这些数据,就像是在这一条街里找这个门牌号一样,先要确定在哪里住。 由此可见,CPU 要相对数据进行读写,必须和芯片进行下面 3 类交互: 存储单元的地址(地址信息) 器件的选择,读或者写命令(控制信息) 读或写的数据(数据信息) 那么,CPU 是如何让将这些新词传输到存储器的芯片中的,这就涉及到一个概念,我们都知道,计算机能够处理的信息都是电信号,也就是高低电平,电信号当然是由导线来传送。在计算机中,由专门连接 CPU 和其他芯片的导线,我们通常称为总线,总线从物理的概念来讲,就是一根根导线的集合。根据传出信息的不同,总线从逻辑上讲主要分为 3 类:地址总线,控制总线以及数据总线。 分析上图,三个基础导线首先 CPU 通过地址线将信息发出,然后通过控制线发出内存读写任务,选中存储器芯片,并命令从中读取数据,最后通过数据线将数据送入 CPU。 接下来,详细介绍一下。 地址总线 现在,我们知道 CPU 是通过地址总线来指定存储单元的,那么可见地址总线上能传递多少不同的信息,就能对多少个存贮单元进行寻址。 现在假设,一个 CPU 有 10 根地址线,一根导线能传递的状态只有两种,一种是高电平,一种是低电平,就是二进制的 0 和 1,那么 10 根导线就是 10 位 2 进制数据,那么 10

STM32F4关键寄存器总结

放肆的年华 提交于 2020-03-12 07:53:52
—— 整理自STM32F4中文参考手册(ST)、STM32F4开发指南-寄存器版本(正点原子)、cortex m3与m4权威指南(英文) 目录 NVIC GPIO EXIT USART TIM(2~5) 基本设置 PWM相关 NVIC 此章节与内核相关,未在参考手册中出现,需参考权威指南。 ISER1~8 (Interrupt Set-Enable Registers)中断使能寄存器组。CM4 内核支持 256 个中断,用 8 个 32 位寄存器来控制,每个位控制一个中断。由于STM32F4 的可屏蔽中断最多只有 82 个,所以仅ISER[0~2]有效,其中ISER[0]的 bit0~31 分别对应中断0~31;ISER[1]的 bit0~32 对应中断 32~63;ISER[2]的 bit0~17 对应中断 64~81。设置相应的 ISER 位为 1,使特定中断被使能。 具体每一位对应哪个中断,请参考 stm32f4xx.h 里面的第 188 行处。 ICER1~8 (Interrupt Clear-Enable Registers)中断除能寄存器组。用来清除某个中断的使能。其对应位所代表的中断和 ISER 相同。通过置位来清除中断位。 ISPR1~8 (Interrupt Set-Pending Registers)中断挂起控制寄存器组。其对应位所代表的中断和 ISER 相同

STM32寄存器实现led亮灭

北城余情 提交于 2020-03-12 04:53:46
嵌入式基于寄存器点亮一个LED和8个LED 基于寄存器实现1个LED亮灭 目标: 使用STM32F103R6芯片,PB8引脚接LED的阴极,通过C语言程序控制,从PB8引脚输出低电平,使LED点亮。 用Proteus设计第一个SYM32的LED控制电路 新建Proteus工程 添加元器件 放置元器件 调整元器件位置 放置终端 连线 属性设置 电路图 用到的C语言操作 C语言位操作,就是对基本类型变量可以在位级别进行操作。 C语言还支持如下表所示的6种位操作 ![ZZ2Q8YL`JH{3B1C8W5U0P85.png]( http://ww1.sinaimg.cn/large/00852In7gy1gcfcpr2p31j30ai03tglv.jpg ) 代码实现 #include "stm32f10x.h" int main() { RCC->APB2ENR |=1<<3; GPIOB->CRH &=0xfffffff0; GPIOB->CRH |=0x00000003; while(1) { GPIOB->BRR |=0X0080; } } 基于固件库实现1个LED亮灭 STM32固件库 目标、电路图和实现寄存器的相同,下面是实现的代码 实现代码 #include "stm32f10x.h" int main() { GPIO_InitTypeDef strs; RCC

STM32的GPIO的寄存器配置学习1

对着背影说爱祢 提交于 2020-03-09 16:24:06
本篇文章主要是学习以M3内核的STM32的GPIO的寄存器的配置,为什么要学习寄存器,而不利用库函数呢?我只能说为了让学的知识更加牢固吧!当然,你可以直接去利用库函数,但是如果你能认真读完本篇博客,你会对知识豁然开朗!加油吧! STM32 的每个 IO 端口都有 7 个寄存器( 如果还不懂寄存器是什么,请点击 )来控制。他们分别是: 配置模式的 2 个 32 位的端口配置寄存器 CRL 和 CRH ; 2 个 32 位的数据寄存器 IDR 和 ODR ; 1 个 32 位的置位/复位寄存器BSRR ; 一个 16 位的复位寄存器 BRR ; 1 个 32 位的锁存寄存器 LCKR ;这里我们仅介绍常用的几个寄存器,我们常用的 IO 端口寄存器只有 4 个:CRL、CRH、IDR、ODR 。 可能罗列了这么多的寄存器,小白可能会一头蒙(心想,用的时候再找呗,我想说,那还不如直接记住,对吧,哈哈哈)接下来我会每一个介绍一下,然后会有一个程序说明,仔细看完文章吧! 一、CRL、CRH STM32的每个 IO 口都可以自由编程,但 IO 口寄存器必须要按 32 位字被编辑被访问(因为系统本身是32位),CRL 和 CRH 控制着每个 IO 口的 模式 及 输出速率, 只不过 CRL 是 控制 低8位的GPIO接口( GPIO0至GPIO7 ); CRH 是 控制 高8位的GPIO接口(