查看: 11418|回复: 25

[原创] 【从51到M0+】GPIO

[复制链接]
  • TA的每日心情
    慵懒
    2019-7-22 13:56
  • 签到天数: 38 天

    连续签到: 1 天

    [LV.5]常住居民I

    20

    主题

    644

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1834
    最后登录
    2020-10-13
    发表于 2016-11-15 20:37:22 | 显示全部楼层 |阅读模式
    本帖最后由 邹姆斯特朗 于 2016-11-15 16:41 编辑

    软件平台:keil5.14
    硬件平台:LPC824Lite
    目的:刚学完51,通过LPC824这款片子,逐步学习Cortex M系列内核MCU。新手,一步一个脚印。

    STC89C51
    在51单片机中IO口的操作是比较简单的,一行代码,即可完成IO输出高低电平以及电平状态读取,例如:
    P1^0 = 1;
    Val = P1^0;


    LPC824
    在LPC824中,要完成对IO口的操作,就显得没这么简单了。即使是要通过IO口来点亮一个led灯,也是需要进行不少的设置。咱先一步一来,慢慢学习LPC824这款片子。首先看看工程的一个大体框架:
    GPIO.png


    如果要利用824的一个IO来点亮一个点灯,我们应该怎么做?分三步走
    1、初始化GPIO外设模块:要使用一个模块,就得先把他叫醒,使能他的时钟相当于要一个电器工作先得给他供上电源。
    2、设置引脚的方向:确定好引脚是输入引脚还是输出引脚,因为要点亮一个灯,是输出信号,所以我们应该设置方向为输出(如果是读取按键,应该是输入模式)。
    3、设置引脚电平状态:确定输出电平高还是低(1或0)。

    函数三个,可在"gpio_8xx.h"找到:
    Chip_GPIO_Init(LPC_GPIO_T *pGPIO);
    Chip_GPIO_PinSetDIR(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin, bool isOutput);
    Chip_GPIO_PinSetState(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin, bool setting);
    1. /**
    2. * @brief        设置单个GPIO引脚的方向
    3. * @param        pGPIO        : 片上GPIO外设的基地址
    4. * @param        port        : GPIO端口设置(只支持0端口)
    5. * @param        pin                : 引脚号
    6. * @param   isOutput: true 是 输出, false 是 输入
    7. * @return        Nothing
    8. */
    9. void Chip_GPIO_PinSetDIR(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin, bool isOutput)
    复制代码

    另外,引脚方向设置成输出时可以输出高低电平,引脚方向设置成输入时可以读取电平状态:
    Chip_GPIO_PinGetState(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin);


    1. /******************** Copyright(C) 2016, Lab1209 of UJN **********************
    2. * 文件名       :main.c
    3. * 描述         :GPIO实验
    4. *
    5. * 软件平台     :Keil5.14
    6. * 硬件平台     :LPC824
    7. *
    8. * 作者         :邹姆斯特朗
    9. * 修改时间     :2016/11/12
    10. * 补充         :
    11. ******************************************************************************/

    12. #include "peri_driver.h"

    13. #define      IN       0
    14. #define      OUT    1
    15. #define      LOW    0
    16. #define      HIGH   1

    17. int main(void)
    18. {
    19.      bool  F;        
    20.         
    21.     Chip_GPIO_Init(LPC_GPIO_PORT);                                     //初始化GPIO外设
    22.     Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 1, IN);              //设置0.1脚方向为输入
    23.     Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 17, OUT);          //设置0.17脚方向为出
    复制代码
    第一个工程: LPC824.zip (209.41 KB, 下载次数: 56)
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-17 08:07
  • 签到天数: 273 天

    连续签到: 1 天

    [LV.8]以坛为家I

    74

    主题

    2338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    7517
    最后登录
    2021-8-30
    发表于 2016-11-15 22:36:49 | 显示全部楼层
    很详细,支持一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16841
    最后登录
    1970-1-1
    发表于 2016-11-16 00:08:27 | 显示全部楼层
    多谢分享
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    6
    最后登录
    2017-8-6
    发表于 2016-11-16 00:34:23 | 显示全部楼层
    谢谢分享,学习学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2021-1-9 21:21
  • 签到天数: 56 天

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
    发表于 2016-11-16 02:20:58 | 显示全部楼层
    从结构上而言,Arm要比51复杂很多,不过有库的支持,开发起来难度并不是很大

    好处是做复杂处理时要比51简单,必定是32位空间
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-10-22 20:28
  • 签到天数: 289 天

    连续签到: 1 天

    [LV.8]以坛为家I

    8

    主题

    702

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1942
    最后登录
    2024-5-13
    发表于 2016-11-16 07:30:49 | 显示全部楼层
    差别还真大,讲的很清楚。学习了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2016-11-16 09:33:11 | 显示全部楼层
    替LZ转变一下观念,寄存器操作的繁琐与否跟内核没有关系的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-24 08:30
  • 签到天数: 50 天

    连续签到: 1 天

    [LV.5]常住居民I

    22

    主题

    817

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1713
    最后登录
    2019-12-7
    发表于 2016-11-16 12:08:20 | 显示全部楼层
    学习的多了就知道了,   
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2017-1-24 08:47
  • 签到天数: 49 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    524

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1267
    最后登录
    2017-4-19
    发表于 2016-11-16 14:56:53 | 显示全部楼层
    技术范儿 发表于 2016-11-16 09:33
    替LZ转变一下观念,寄存器操作的繁琐与否跟内核没有关系的

    什么意思?                  
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-22 13:56
  • 签到天数: 38 天

    连续签到: 1 天

    [LV.5]常住居民I

    20

    主题

    644

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1834
    最后登录
    2020-10-13
     楼主| 发表于 2016-11-16 15:42:36 | 显示全部楼层
    anny 发表于 2016-11-15 22:36
    很详细,支持一下

    谢谢
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-27 08:49 , Processed in 0.122807 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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