Zigbee入门笔记(一) CC2530基本IO控制和外部中断(附带自己开发的开发板,成本在十元之内,兼容树莓派)

2023-05-16

zigbee CC2530芯片概述

CC2530由TI公司生产的推出的支持协议栈的芯片;设备特点:

​ 蓝牙:功耗低。

​ WiFi:通讯速率大

​ zigbee:功率低,可组建大规模网络。但是通讯速率比较低。速度250kbps,功耗一般8mh。最低2微安

自制开发板

网上卖的开发板价格是在太高了,成本其实很低,自己做得每块板子的成本才不到十元,一口气做了三块开发板。下面展示一下兼容树莓派螺丝孔的我自己做的这块开发板,有需要的同学可以到github上面下载开发板原理图和PCB文件:https://github.com/tianxiaohuahua/Zigbee/tree/master/PCB

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

一、IO的基本控制

控制一个IO的输出:

首先需要令该IO设置未普通IO的模式,如:P0SEL,P1SEL,P2SEL,一共就只有这三个寄存器来设置

让该IO设置未输出状态,而非输出状态,如:P0DIR,P1DIR,P2DIR

最后直接设置该IO未输出高低电平,如:P1_0 = 0;

  P1SEL &= 0XFE; //普通IO寄存器,非外设模式定义寄存器 ,该寄存器处于1时是外设模式,0是普通IO模式
  P1DIR |= 0X01;  //设置IO处于输出状态,0是输出状态,1是输出状态
  P1_0  =  1; //设置IO的寄存器的值

设置一个IO的输入:

和设置输出模式相同都需要设置三个寄存器,还需要配置上下拉模式:
1、设置为普通IO模式,配置P0SEL,P1SEL,P2SEL;

2、设置输入输出模式,配置P0DIR,P1DIR,P2DIR;

3、设置IO的输入为上拉、下拉或者三态状态,需要配置P0INP、P1INP、P2INP;

​ 一般情况下,读取外部开关信号直接设置上下拉模式,读取AD信号一般使用三态状态模式

4、通过读取IO的寄存器读取IO的状态

特别需要注意的是PXINP寄存器,在输出模式下,该寄存器的每一位都对用了相对应的IO,0表示上下拉模式。1表示三态模式。但是由于设置为上下拉模式还要具体到设置为上拉模式或者下拉模式,因此,使用P2INP的高三为进行设置,把第五位设置为0就是上拉模式,1就是下拉模式:

P0SEL &= 0xBF;     //设置P0.1为普通IO口 1011111 
P0DIR &= 0xBF;     //按键接在P0.1口上,设P0.1为输入模式  101111
P0INP &= 0xBF;     //设置IO的模式为上下拉模式。 101111
P2INP &= 0xDF	   //设置IO 1101 1111

初始状态下的一些寄存器的值都是零,因此一些寄存器就不需要配置!!!

因此芯片在上电后吗,默认是所有的IO口都是上拉输出状态!!!

配置IO的外部中断:

注意:CC2530的每一个IO引脚都有中断功能;

1、初始化IO为普通IO模式;

2、配置IO的输入模式;

3、配置IO的上下拉;

4、配置上拉;

5、开启CPU中断,令EA = 1;

​ 相当于一个最高级别的开关,控制所有IO的中断信号,只有这一位寄存器设置为1的时候才会开启中断;

6、打卡IO口组中断;一共三组,分别是P0组、P1组和P2组。

​ 对应的寄存器为:P0IE、P1IE和P2IE;是一个只有1位的寄存器。相当于一个总开关下面的次级开关。分别控制了三组IO的中断信号。并且规定0是关断使能,1是开启使能;

7、打开组内的对应的某个IO的中断;相应为具体的某一个IO。

​ 一共有三组寄存器,每个寄存器的八位对应了8个IO,可以进行分别控制。这三个寄存器是P0IEM、P1IEM和P2IEM。规定0代表复位,1代表使能;

8、确定上升沿触发还是下降;

​ 只由单独的一个寄存器配置所有IO。0代表上升沿,1代表下降沿;

​ 每一位分别对应了不同组的IO:

76543210
IO驱动能力P2_0~P2_4P1_4~P1_7P1_0~P1_3P0_0~P0_7

具体到一个IO的设置如下:

//配置P0_5的外部中断为例
P0SEF &= 0XDF; //设置IO为普通IO  1101 1111
P0DIR &= 0XDF; //设置为输入模式   1101 1111
POINP &= 0XDF; //设置为上下拉模式 1101 1111
P2INP &= 0XDF; //设置为上拉模式   1101 1111

EA = 1; //开启中断总开关
P0IE = 1; //开启中断组开关
P0IEN |= 0X20; //开启中断IO开关 0010 0000

PICTL |= 0X01; //设置P0_0~P0_7为下降沿触发模式 0000 0001

设置中断函数,都是固定格式

#pragma optimze=none
#pragma vector=P0INT_VECTOR
__interrup void a_function()
{
    if(P0IFG & 0X20) //读取中断寄存器的值,八位宽分别对应了8个IO的的值;这里对应的是第五位:0010 0000
    {
        do_something(); //中断后实现的具体功能
    }
	P0IFG = 0; //让中断寄存器的值清除
    P0IF = 0; //组中断寄存器的值清除
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Zigbee入门笔记(一) CC2530基本IO控制和外部中断(附带自己开发的开发板,成本在十元之内,兼容树莓派) 的相关文章

  • Windows和Linux之间如何传递数据|两台Linux之间如何传递数据

    摘要 xff1a 我们租用了一台服务器 xff0c 然后我们想要把我们写的项目上传到自己的Linux服务器中 xff0c 那么我们应该怎么上传呢 xff1f 如果我们想要从服务器中下载一些资料 xff0c 那么又该如何进行呢 xff1f 看
  • 【C++】多态及原理

    多态及原理 一 多态的实现1 多态的概念2 构成多态还有两个条件 xff1a 3 虚函数4 override和final关键字 二 抽象类三 多态的原理 一 多态的实现 1 多态的概念 多态是在不同继承关系的类对象 xff0c 去调用同一函
  • 【排序算法】桶排序算法原理

    桶排序 条件适用场景算法描述算法实现 桶排序又叫箱排序 xff0c 是计数排序的升级版 xff0c 它的工作原理是将数组分到有限数量的桶子里 xff0c 然后对每个桶子再分别排序 xff08 有可能再使用别的排序算法或是以递归方式继续使用桶
  • FreeRTOS(二)创建任务

    任务 一 任务的基本概念 FreeRTOS的任务可以认为是一系列独立的任务的集合 每个任务在自己的环境中运行 xff0c 并且每个时刻只有一个任务在运行 xff0c 但从宏观上看 xff0c 所有的任务都在同时执行 xff1b 不同任务的切
  • FreeRTOS(三)启动流程

    启动流程 FreeRTOS的主要两种启动流程 在 main 函数中将硬件初始化 xff0c RTOS 系统初始化 xff0c 所有任务的创建这些都弄好 最后启动 RTOS 的调度器 xff0c 开始多任务的调度 xff08 先创建 xff0
  • echarts参数详细介绍

    文章目录 title xff1a 标题grid配置项 xff1a 图标离容器的距离tootip xff1a 提示xAxis xff1a x轴yAxis xff1a y轴legend xff1a 图表旁边的文字series xff1a dat
  • 微信云开发报错(Error: ResourceNotFound.FunctionName, FunctionName 指定的资源不存在。 (9f4aff33-7528-43e2-b0db-d273d)

    在微信小程序云开发时 xff0c 上传login的时候报错 Error ResourceNotFound FunctionName FunctionName 指定的资源不存在 9f4aff33 7528 43e2 b0db d273d0d6
  • 在阿里云搭建CENTOS7系统以及图形界面

    1 搭建CentOS7操作系统服务器 首先要购买服务器 xff0c 推荐学生认证可以获得好几个月的免费服务器 略去具体的过程 阿里云默认的系统不是CentOS7 xff0c 所以需要先将操作系统改成CentOS7 在实例的基本信息中 xff
  • VSCode 配置git 环境

    VSCode 配置git 环境 安装插件 查询Git 安装路径 配置json 文件 安装插件 git history 打开 git bash 下面展示一些 内联代码片 查询git 路径 where git where git 配置json
  • 模拟实现trim 方法,去除字符串两端的空格

    思路 从字符串的两端分别遍历 xff0c 找寻第一个非空字符记录非空字符的索引截取头部第一个非空字符到尾部第一个非空字符串之间的内容 span class token keyword function span span class tok
  • git token使用

    2021年8月13日 xff0c git不再支持密码方式验证 xff0c 而是建议使用token token生成 个人设置 gt Settings gt Personal access tokens gt Generate new toke
  • 网页实现无插件RTSP 摄像头在线播放

    网页无插件RTSP 摄像头在线播放 为什么要求无插件1 xff0c flv js实现2 xff0c flv js的利弊延迟吃资源对网络要求高流可复用对声音处理比较麻烦 3 xff0c webrtc的利弊网络相关的资料少延迟低不吃资源 总结项
  • 计算机嵌入式开发技术考试错题集

    选择题 xff08 以前写的 xff0c 现在翻到了发出来 xff09 1 UTF 16采用的是双字节可变长编码 2 ARM处理器的7种类型的异常中 xff1a 最高的是 复位 xff1b 最低的是 未定义指令UND 和 软件中断SWI x
  • ROS——TF介绍及应用

    TF 的简单介绍 TF xff08 transform xff09 是一个允许用户时刻跟踪多个坐标架构的包 xff0c 能及时地维持树结构中坐标帧之间的关系 xff0c 并允许用户在任何时间点变化任何两个坐标帧之间的点和变量等 目前 TF
  • 计算机保研复习专业课篇(408+数学+部分专业课)

    1 计组 1 xff09 总线是什么 1 xff09 总线是一组能功能部件之间分时共享的公共信息传送线路 分时 共享是它的两大特点 2 xff09 分时是指同一时刻只能有一个部件向总线上发出信息 3 xff09 总线分为三大类 xff1a
  • STM32 四轴无人机的设计——代码整体设计

    1 前言 从现在开始我们要接触一个完整的工程 xff0c 所以我们要对整个工程进行分析 xff0c 将硬件设计 软件设计模块化 xff0c 一个模块一个模块的完成 xff0c 最后将各个模块融合在一起 xff0c 就是我们整个工程 模块化设
  • STM32-串口通信详解

    目录 前言 一 通信接口背景知识 1 并行通信和串行通信 2 串行通信的分类 二 STM32的串口通信基础 1 串口通信接口 2 串口通信框图 3 串口通信相关寄存器 4 波特率计算方法 三 库函数配置 1 串口配置一般步骤 总结 前言 众
  • 嵌入式裸机按键和CPU的中断系统学习笔记

    准备工作 一 按键介绍与硬件连接 按键介绍 按键是常见的外部中断设备 xff0c 类似于我们电路中的开关 一般的按键都有4个引脚 xff0c 这4个引脚成2对 xff1a 其中一对是常开触点 xff08 不按则断开 xff0c 按下则闭合
  • web前端——CSS实现加载页面效果

    先上图 html代码 span class token tag span class token tag span class token punctuation lt span div span span class token attr
  • docker学习之如何删除docker中的镜像

    目录 查找需要删除的镜像 直接删除 查询所有docker容器 停掉所需要删除镜像的容器 删除镜像 镜像成功删除 注意事项 xff1a 在安装调试完毕docker之后 xff0c 想要删除一些已经下载的镜像 发现怎么都删除不掉 xff0c 看

随机推荐