请选择 进入手机版 | 继续访问电脑版
查看: 2091|回复: 11

【智能家居挑战赛】+智能远程烟雾监测系统之LPC1768位带功能

[复制链接]
  • TA的每日心情

    2024-2-5 12:06
  • 签到天数: 627 天

    [LV.9]以坛为家II

    94

    主题

    1628

    帖子

    2

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4429

    热心会员

    最后登录
    2024-2-5
    发表于 2021-3-24 09:01:33 | 显示全部楼层 |阅读模式
    最近有空就开始着手做基于LPC1768的远程烟雾监测系统。之前用寄存器调通了ESP8266,但是最近我还是把它改成使用库的版本。
    毕竟在可读性上面会好一些。LPC1768已经很少看到NXP的宣传了,是不是这颗老料,已经被放弃了。就想现在汽车行业主推的S32,
    以前的K60等,也不知在啥位置了。
    废话不多说了,我最近在调板子的硬件,习惯了之前的STM32上位带操作GPIO,发现NXP上这样用的人,还真不多。我就把它移植了下。
    LCP1768基于M3内核。我们看LPC1768手册,可以看到给出了信息的描述和对应的地址转换(我们这里以GPIO为例):
    寄存器具体的位置:
    B1.png
    对应转换关系级例子:

    B2.png
    B4.png
    在<<CM3权威指南>>第五章(87页~92页)也有更具体的描述,我们也可以参照:
    B5.png
    这里就不截图了,感兴趣,可以自己去看~
    下面我们开始对GPIO外设匹配对应的位带寄存器:
    对应的转换公式:
    1. //位带操作,实现51类似的GPIO控制功能
    2. //具体实现思想,参考<<CM3权威指南>>第五章(87页~92页).
    3. //IO口操作宏定义
    4. #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
    5. #define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))
    6. #define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
    复制代码
    那么GPIO哪个寄存器,直接对应输出的值,及输入的值呢?我们查看,发现它读取及设置输出均对PIN寄存器直接操作即可:
    B8.png
    那么各个PORT的地址定义就有了:
    1. //寄存器  PIN 输出读写控制寄存器
    2. #define GPIO0_IDR_Addr    (LPC_GPIO0_BASE+0x14) //0x2009C014
    3. #define GPIO1_IDR_Addr    (LPC_GPIO1_BASE+0x14) //0x2009C034
    4. #define GPIO2_IDR_Addr    (LPC_GPIO2_BASE+0x14) //0x2009C054
    5. #define GPIO3_IDR_Addr    (LPC_GPIO3_BASE+0x14) //0x2009C074
    6. #define GPIO4_IDR_Addr    (LPC_GPIO4_BASE+0x14) //0x2009C094
    复制代码
    对PORT的单个引脚读写操作函数:
    1. //IO口操作,只对单一的IO口!
    2. //确保n的值小于32!
    3. #define P0out(n)   BIT_ADDR(GPIO0_IDR_Addr,n)
    4. #define P0in(n)    BIT_ADDR(GPIO0_IDR_Addr,n)  //输入

    5. #define P1out(n)   BIT_ADDR(GPIO1_IDR_Addr,n)
    6. #define P1in(n)    BIT_ADDR(GPIO1_IDR_Addr,n)  //输入

    7. #define P2out(n)   BIT_ADDR(GPIO2_IDR_Addr,n)
    8. #define P2in(n)    BIT_ADDR(GPIO2_IDR_Addr,n)  //输入

    9. #define P3out(n)   BIT_ADDR(GPIO3_IDR_Addr,n)
    10. #define P3in(n)    BIT_ADDR(GPIO3_IDR_Addr,n)  //输入

    11. #define P4out(n)   BIT_ADDR(GPIO4_IDR_Addr,n)
    12. #define P4in(n)    BIT_ADDR(GPIO4_IDR_Addr,n)  //输入
    复制代码
    下面我们就可以,位带操作直接输出单个IO口了,代码简化了许多。
    如果我们要控制一个LED0,假设为P1.0引脚。先将它初始化好(时钟,方向,初始值) ,然后#define LED0 P1out(0)
    然后在main里面,我们就可以直接幅值控制它了:
    LED0=1,LED0=0,LED=!LED。这样是不是简单了写呢。
    对于读也一样,假设我们读取一个按键值,假设为P1.1,先将它初始化好(时钟,方向,初始值) ,然后#define KEY0 P1in(1)
    然后在main里面,我们就可以这样操作:
    if(KEY0 ==0) LED0=!LED0;//按一下,翻转一次。
    这样就完成了。以上代码已验证过,LPC1768的寄存器与STM32F103还是有些区别,STM32F103读写分别是2个寄存器。但LPC1768
    就是一个。
    好了,一个小小的分享就到这了。







    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2021-3-24 09:17:39 | 显示全部楼层
    仔细阅读完了。
    大神就是大神。
    谢谢大神分享了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2021-3-24 09:25:26 | 显示全部楼层
    楼主 要是往位带里面写数值 2, 会是什么效果啊?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2024-2-5 12:06
  • 签到天数: 627 天

    [LV.9]以坛为家II

    94

    主题

    1628

    帖子

    2

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4429

    热心会员

    最后登录
    2024-2-5
     楼主| 发表于 2021-3-24 09:33:54 | 显示全部楼层
    jobszheng5 发表于 2021-3-24 09:25
    楼主 要是往位带里面写数值 2, 会是什么效果啊?

    仅仅取写的数的BIT0位有效,写2等于写0 ,写3等于写1
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2021-3-24 09:40:47 | 显示全部楼层
    收到,收到 谢谢楼主。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-2 08:12
  • 签到天数: 556 天

    [LV.9]以坛为家II

    34

    主题

    5911

    帖子

    2

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    5675
    最后登录
    2024-4-16
    发表于 2021-3-24 10:00:42 | 显示全部楼层
    收到,学习了,感谢大神分享
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-3 10:59
  • 签到天数: 329 天

    [LV.8]以坛为家I

    3

    主题

    1386

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    5339
    最后登录
    2024-4-16
    发表于 2021-3-24 10:52:19 | 显示全部楼层
    不错,这样GPIO操作更方便了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    半小时前
  • 签到天数: 948 天

    [LV.10]以坛为家III

    0

    主题

    2575

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    4894
    最后登录
    2024-4-18
    发表于 2021-3-24 13:48:16 | 显示全部楼层
    签到签到
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    半小时前
  • 签到天数: 948 天

    [LV.10]以坛为家III

    0

    主题

    2575

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    4894
    最后登录
    2024-4-18
    发表于 2021-3-24 13:48:47 | 显示全部楼层
    学习了
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-7-4 21:47
  • 签到天数: 165 天

    [LV.7]常住居民III

    1

    主题

    410

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    1335
    最后登录
    2024-2-29
    发表于 2021-3-25 10:35:40 | 显示全部楼层
    签到,学习了
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-18 09:51 , Processed in 0.163902 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表