本帖最后由 day_day 于 2017-7-10 23:02 编辑
之前一直没有时间发开箱贴,大概上一年的这个时候参加了nxp社区跟爱板网合作的6元购的小脚丫lpc824开发板。首先感谢一下[size=18.6667px]nxp社区跟爱板网给我一个穷学生低代价接触其他arm-cortex的芯片。
[size=18.6667px]上开箱照:
[size=18.6667px]前面一个可以下载hex的usb口,后面两个按键,下载程序跟复位使用。两块芯片后面预留了外部存储的焊接位,再后面有三色的led,分别接15-17口,最后是swd仿真接口,不过那种小排针不是2.56间距,还不如接pin2、3口得了,不过话说回来,反正我没有jlink就先不管。
[size=18.6667px]这一年也尝试过想要diy一下,但苦于一直找不到函数库,前几天偶然发现周立功ametal_am824平台的函数库,立即决定移植来玩一下。
首先,我们来看看main.c: 非常简洁,一眼就看出来,程序是令led延时100亮灭。有意思的是,这个库函数的程序入口是am_main。那么看看am_led_on这个函数是怎么实现的吧。 这个led_id看起来像是led的编号。下面我们来看看led_id和__g_led_num是什么东西。右键找definition,找不到,那先看看__g_led_num。 是一个全局变量,初始化为0号。但没什么注释,但不搞懂主函数也看不懂,所以看看函数库的数据手册。 哦,am_board.c。走,瞧瞧去。 果然,led的信息都在这里定义,
这里可以看出g_led_info是一个am_led_info_t的结构体,查看定义: 很明了,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当中有一个板级初始化: 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参考手册:
第一个是引脚编号?那不就是全部led嘛,第二个是模式?那不是上下拉什么的,点进去看看: 这里选择了初始化拉高。不过别看输入的参数这么少,这个函数里面可相当不简单,比stm32的初始化复杂多了。有配置引脚模式、复用的,还有中继、迟滞、滤波一系列配置,flag里面包含的不仅仅是高低电平,里面的信息集成在一起,在cfg函数里面通过掩码提取出来,就像是ip跟子网掩码一样。 好了,该回到main,找一下am_led_on的定义: am_gpio_set都不用看了,就是输入引脚号跟高低电平,这里写得这么麻烦主要是为了动态地保证led亮灭的准确性。 总的来说,看了这么多,就是改了一下am_board.c里面关于开发板的一些配置,这里关于外设的驱动集成得太好了
现在我们来烧录一下,首先按着板子上的两个按键,然后依次松开k2、k1,接着把安装好的flashmagic打开(本来想用jlink swd下载的,可惜jlink被人拿走了),配置如下: 下载完成,断电再通电,原本三个跑马灯就变成一个红灯在闪,欧耶,成功点亮led。
|