查看: 7430|回复: 15

[原创] 【用LPC824玩转51开发板】01. 点亮LED

[复制链接]
  • TA的每日心情
    擦汗
    2017-1-17 09:56
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    6

    主题

    49

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    425
    最后登录
    2020-10-17
    发表于 2017-1-17 00:14:57 | 显示全部楼层 |阅读模式
    本帖最后由 leaderpig 于 2017-1-17 00:20 编辑

    本文为【用LPC824玩转51开发板】系列的入门实验——点亮LED,涉及的相关资源包括GPIO。由于本篇为第一个实验,因此有必要对启动过程做一次详细分析:
    首先,从 keil_startup_LPC8xx.s 看到,执行main函数前,调用了 SystemInit()
    1. ; Reset Handler

    2. Reset_Handler   PROC
    3.                 EXPORT  Reset_Handler             [WEAK]
    4.                 IMPORT  SystemInit
    5.                 IMPORT  __main
    6.                 LDR     R0, = SystemInit
    7.                 BLX     R0
    8.                 LDR     R0, =__main
    9.                 BX      R0
    10.                 ENDP
    复制代码

    1)        使能IOCON时钟
                  IOCON: I/O configuration,顾名思义,用来配置每个管脚的电气属性,包括推挽、开漏、迟滞、数字输入、模拟输入。另外,为节省功耗,一旦配置完管脚的电气属性,可将IOCON的时钟关闭。
    因此,在配置I/O的电气属性前,需要先使能IOCON时钟(管脚的初始化在Main函数中进行,后述)。
    sysinit_8xx.c
    1. /* Set up and initialize hardware prior to call to main */
    2. /* 在main()函数之前调用此函数做基本的初始化工作 */
    3. void SystemInit(void)
    4. {
    5.     Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_IOCON);                //使能IOCON时钟
    6.    
    7.     /* Use 12MHz IRC as clock source */
    8.     Chip_SetupIrcClocking();        //初始化系统时钟
    9. }
    复制代码
    clock_8xx.h
    1. STATIC INLINE void Chip_Clock_EnablePeriphClock(CHIP_SYSCTL_CLOCK_T clk)
    2. {
    3.     LPC_SYSCTL->SYSAHBCLKCTRL = (1 << clk) | (LPC_SYSCTL->SYSAHBCLKCTRL & ~SYSCTL_SYSAHBCLKCTRL_RESERVED);
    4. }
    复制代码
    2017-01-16_111723.png
    2)        初始化系统时钟(main clk, system clk, AHB clk
                  上面我们使能了APB时钟(IOCON),APB时钟源于AHB to APB Bridge,AHB即为system clk,那么system clk又是多少呢?接下来,就需要配置system clk。LPC824 Breakout采用的时钟源为IRC,依次经过中间环节的system pll、选择器、分频器,产生main clk = 60MHz,system clk = 30MHz,红色轨迹即为时钟路径。
    sysinit_8xx.c
    1. /* Set up and initialize hardware prior to call to main */
    2. void Chip_SetupIrcClocking(void)
    3. {
    4.     Chip_IRC_SetFreq(CONFIG_MAIN_FREQ, CONFIG_SYS_FREQ);
    5. }
    复制代码
    2017-01-15_202625.png

    3)        初始化GPIO时钟
    board.c
    1. /* Set up and initialize all required blocks and functions related to the
    2.    board hardware */
    3. void Board_Init(void)
    4. {
    5.     ...
    6.     /* Initialize GPIO */
    7.     Chip_GPIO_Init(LPC_GPIO_PORT);
    8.     ...
    9. }
    复制代码
    gpio_8xx.h
    1. STATIC INLINE void Chip_GPIO_Init(LPC_GPIO_T *pGPIO)                //注:参数在该函数无意义
    2. {
    3.     LPC_SYSCTL->SYSAHBCLKCTRL = (1 << SYSCTL_CLOCK_GPIO) | (LPC_SYSCTL->SYSAHBCLKCTRL & ~SYSCTL_SYSAHBCLKCTRL_RESERVED);
    4. }
    复制代码
    4)        设置管脚的电气属性
                  在第一节我们使能了IOCON时钟后,就可以对管脚的电气属性进行设置了。

                  以板载LED为例,硬件上低电平驱动LED灯亮。因此,对应管脚应初始化为上拉。查阅手册可知,P0.15(P0.16、P0.17)默认值为0x90,即为使能上拉电阻,因此该步骤可省略。
    led.png
    2017-01-16_112549.png
    2017-01-16_224543.png

    5)        设置管脚类型、初始状态
                  类型就是输入、输出。状态就是或高或低。
    board.c
    1. /* Initialize the LEDs on the NXP LPC824 LPCXpresso Board */
    2. static void Board_LED_Init(void)
    3. {
    4.     int i;

    5.     for (i = 0; i < BOARD_LED_CNT; i++) {
    6.         Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, ledBits[i], 1);
    7.         Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, ledBits[i], true);
    8.     }
    9. }
    复制代码
    6)        经典实验——点亮LED

    main.c
    1. #define LED1_PIN 15     //red led
    2. #define LED2_PIN 16     //green led
    3. #define LED3_PIN 17     //blue led

    4. static void delay(void)
    5. {
    6.     uint32_t i, j;
    7.     for(i=0; i<1000; i++)
    8.     for(j=0; j<1000; j++);
    9. }

    10. int main(void)
    11. {
    12.     uint32_t GPIOCONFIG = ( (1 << LED1_PIN) | (1 << LED2_PIN) | (1 << LED3_PIN) );

    13.     Board_Init();

    14.     /* All work happens in while() loop */
    15.     while (1)
    16.     {   
    17.         Chip_GPIO_PortToggleState(LPC_GPIO_PORT, 0, GPIOCONFIG);
    18.         delay();        
    19.     }
    20. }
    复制代码

    现象如下: 622321877488390281.jpg
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-5-21 10:59
  • 签到天数: 157 天

    连续签到: 1 天

    [LV.7]常住居民III

    3

    主题

    377

    帖子

    0

    高级会员

    Rank: 4

    积分
    836
    最后登录
    2021-7-9
    发表于 2017-1-17 09:02:49 | 显示全部楼层
    666666
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

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

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    524

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1267
    最后登录
    2017-4-19
    发表于 2017-1-17 09:42:46 | 显示全部楼层
    谢谢分享                          
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    35

    主题

    356

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3262
    最后登录
    2023-6-23
    发表于 2017-1-19 10:55:40 | 显示全部楼层
    楼主表达的很清楚,非常好的入门帖!
    板子也很漂亮,这是什么板子啊?

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-1-17 09:56
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    6

    主题

    49

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    425
    最后登录
    2020-10-17
     楼主| 发表于 2017-1-19 11:10:12 | 显示全部楼层
    香水橙 发表于 2017-1-19 10:55
    楼主表达的很清楚,非常好的入门帖!
    板子也很漂亮,这是什么板子啊?

    30元淘来的板子,HJ-52,你可以搜搜。我觉得板子做得挺漂亮,外设很丰富,哈哈
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-10-15 13:16
  • 签到天数: 191 天

    连续签到: 1 天

    [LV.7]常住居民III

    11

    主题

    664

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1722
    最后登录
    2017-10-15
    发表于 2017-1-19 23:54:42 | 显示全部楼层
    厉害厉害                       
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-1-17 09:56
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    6

    主题

    49

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    425
    最后登录
    2020-10-17
     楼主| 发表于 2017-1-20 09:15:39 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    35

    主题

    356

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3262
    最后登录
    2023-6-23
    发表于 2017-1-26 22:17:29 | 显示全部楼层
    leaderpig 发表于 2017-1-19 11:10
    30元淘来的板子,HJ-52,你可以搜搜。我觉得板子做得挺漂亮,外设很丰富,哈哈 ...

    只找到一个HJ-C52,某宝上最便宜也要100多
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-12-12 12:24
  • 签到天数: 160 天

    连续签到: 1 天

    [LV.7]常住居民III

    1

    主题

    226

    帖子

    0

    高级会员

    Rank: 4

    积分
    665
    最后登录
    2024-11-26
    发表于 2017-1-26 22:47:50 | 显示全部楼层
    支持下                      .
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    127

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    280
    最后登录
    2019-4-20
    发表于 2017-1-27 00:11:42 | 显示全部楼层
    51板也能玩转32-b的LPC800?厉害!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-23 11:01 , Processed in 0.107450 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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