查看: 7782|回复: 3

[原创] lpc824开箱贴及基于周立功ametal_am824平台的led代码移植

[复制链接]
  • TA的每日心情
    无聊
    2021-12-29 19:06
  • 签到天数: 47 天

    连续签到: 1 天

    [LV.5]常住居民I

    49

    主题

    188

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    1392
    最后登录
    2025-3-4
    发表于 2017-7-10 22:48:55 | 显示全部楼层 |阅读模式
    本帖最后由 day_day 于 2017-7-10 23:02 编辑

    之前一直没有时间发开箱贴,大概上一年的这个时候参加了nxp社区跟爱板网合作的6元购的小脚丫lpc824开发板。首先感谢一下[size=18.6667px]nxp社区跟爱板网给我一个穷学生低代价接触其他arm-cortex的芯片。
    [size=18.6667px]上开箱照:
    开箱照-.jpg
    [size=18.6667px]前面一个可以下载hex的usb口,后面两个按键,下载程序跟复位使用。两块芯片后面预留了外部存储的焊接位,再后面有三色的led,分别接15-17口,最后是swd仿真接口,不过那种小排针不是2.56间距,还不如接pin2、3口得了,不过话说回来,反正我没有jlink就先不管。
    [size=18.6667px]这一年也尝试过想要diy一下,但苦于一直找不到函数库,前几天偶然发现周立功ametal_am824平台的函数库,立即决定移植来玩一下。
    首先,我们来看看main.c:
    1.png
    非常简洁,一眼就看出来,程序是令led延时100亮灭。有意思的是,这个库函数的程序入口是am_main。那么看看am_led_on这个函数是怎么实现的吧。
    2.png
    这个led_id看起来像是led的编号。下面我们来看看led_id和__g_led_num是什么东西。右键找definition,找不到,那先看看__g_led_num。
    3.png
    是一个全局变量,初始化为0号。但没什么注释,但不搞懂主函数也看不懂,所以看看函数库的数据手册。
    12.jpg
    哦,am_board.c。走,瞧瞧去。
    4.png
    果然,led的信息都在这里定义,

    这里可以看出g_led_info是一个am_led_info_t的结构体,查看定义:
    5.png
    很明了,pin代表属于那个引脚,led_num代表LED数量。那么回到上面led信息,我们就可以将它改成我们板上的资源:PIO_15、PIO_16、PIO_17。再看下面对板上led数量的计算,也就是g_led_info,是动态实现的,只要改了g_led_info数组就会自己完成计算,这种编程思路值得学习。
    回到am_led_on,有一个神似g_led_info的数组——__pg_led_info[led_id],而且__g_led_num也跟g_led_num不一样,这是怎么回事呢?

    原来,这是am_board.c跟am_led.c的区别。am_board.c当中有一个板级初始化:
    6.png
    am_led_init(g_led_info,g_led_num);
    这一句把刚才的参数传进去,更改am_led.c里面的全局变量。

    回到am_led_init(am_led.c文件),这里还有两个函数:am_gpio_pin_cfg、am_gpio_set,一看就知道,第一个是初始化函数,第二个是拉高电平的函数。库函数看的有点烦,咱们来看看简洁明了的api参考手册:
    7.png

    第一个是引脚编号?那不就是全部led嘛,第二个是模式?那不是上下拉什么的,点进去看看:
    8.png
    这里选择了初始化拉高。不过别看输入的参数这么少,这个函数里面可相当不简单,比stm32的初始化复杂多了。有配置引脚模式、复用的,还有中继、迟滞、滤波一系列配置,flag里面包含的不仅仅是高低电平,里面的信息集成在一起,在cfg函数里面通过掩码提取出来,就像是ip跟子网掩码一样。
    9.png
    好了,该回到main,找一下am_led_on的定义:
    10.png
    am_gpio_set都不用看了,就是输入引脚号跟高低电平,这里写得这么麻烦主要是为了动态地保证led亮灭的准确性。
    总的来说,看了这么多,就是改了一下am_board.c里面关于开发板的一些配置,这里关于外设的驱动集成得太好了

    现在我们来烧录一下,首先按着板子上的两个按键,然后依次松开k2、k1,接着把安装好的flashmagic打开(本来想用jlink swd下载的,可惜jlink被人拿走了),配置如下:
    11.png
    下载完成,断电再通电,原本三个跑马灯就变成一个红灯在闪,欧耶,成功点亮led。

    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    723

    主题

    6382

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    25491
    最后登录
    2025-9-9
    发表于 2017-7-11 09:40:41 | 显示全部楼层
    谢谢分享!!
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    新手上路

    Rank: 1

    积分
    41
    最后登录
    2020-4-24
    发表于 2018-12-10 23:35:19 | 显示全部楼层
    谢谢!能不能分享一下源工程~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-12-29 19:06
  • 签到天数: 47 天

    连续签到: 1 天

    [LV.5]常住居民I

    49

    主题

    188

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    1392
    最后登录
    2025-3-4
     楼主| 发表于 2018-12-25 00:03:00 | 显示全部楼层
    珍惜现在vhj 发表于 2018-12-10 23:35
    谢谢!能不能分享一下源工程~

    因为年代确实是相当久远了……我的工程找不到了,这份是当时周立功的例程,我也是参考他的
    不过老实说,过了两年,我也接触过好几款lpc的板子,我现在回来看看,觉得用周立功的其实不怎么好,他把程序流程给隐藏了一部分……而且我上传的这份是那么久之前的例程,现在估计已经更新了好多了
    建议直接去官网找官方的例程,数据手册、函数手册也可以在官网找到
    LPC824例程及教程.zip (17.61 MB, 下载次数: 61)
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

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

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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