查看: 3197|回复: 5

[分享] 【YL-KL26Z试用】+GPIO&LED程序学习

[复制链接]

该用户从未签到

8

主题

17

帖子

0

注册会员

Rank: 2

积分
169
最后登录
1970-1-1
发表于 2015-4-16 17:19:49 | 显示全部楼层 |阅读模式
前面对KL26开发板的硬件原理图、板载USBDM、KL26系统时钟进行了学习,基本了解了芯片的基本外围设备及系统时钟原理。准备开始简单的程序设计。在开始自己编写程序前,对KL26开发板提供的例子程序进行了学习分析。
通过对MDK下Demo_GPIO例子的详细分析,基本了解了程序的启动顺序,其实际和STM32启动工作顺序差不多。下面对学习进行简单的总结:
例子主程序如下:
int  main (void)
{
    SystemCoreClockUpdate();
    SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK
                  | SIM_SCGC5_PORTB_MASK
                  | SIM_SCGC5_PORTC_MASK
                  | SIM_SCGC5_PORTD_MASK
                  | SIM_SCGC5_PORTE_MASK );   

    uart0Init(9600,0,0,8,1);
    printf("YL-KL25Z128 GPIO_Blinky Test start\r\n");

    PORT_ENABLE_CLK(MKL_PORTB);                                         /* ʹÄÜPORTʱÖÓ                 */
    PORT_ENABLE_CLK(MKL_PORTD);

    IO_FUN_SEL(MKL_PORTB,18,1);                                         /* IO¹¦ÄÜÑ¡Ôñ                   */
    IO_FUN_SEL(MKL_PORTB,19,1);
    IO_FUN_SEL(MKL_PORTD,1,1);   

    GPIO_DDR_OUTPUT(MKL_PORTB,18);                                      /* IOÉèÖÃΪÊä³öģʽ             */
    GPIO_DDR_OUTPUT(MKL_PORTB,19);
    GPIO_DDR_OUTPUT(MKL_PORTD,1);   

    GPIO_SET(MKL_PORTB,18);                                             /* IOÉèÖÃΪ¸ßµçƽ£¬LEDϨÃð      */
    GPIO_SET(MKL_PORTB,19);
    GPIO_SET(MKL_PORTD,1);   

    while(1){                                                           /* ²»¶Ï·­×ªIO£¬LEDÉÁ˸          */

        GPIO_TOGGLE(MKL_PORTB,18);
                          myDelay(200);
        GPIO_TOGGLE(MKL_PORTB,19);
                                myDelay(200);
        GPIO_TOGGLE(MKL_PORTD,1);
                          myDelay(200);
    }   
}


1:进入main函数后,先是更新了系统内核时钟,调用的 SystemCoreClockUpdate() 函数
     我们从KL26的参考手册知道,KL26上电启动后,先是从复位向量开始运行的,运行顺序,可以参看startup_MKL25Z4.s 文件(YL-KL26Z开发板提供的例子程序,可以从KL25库程序修改而来,所以文件命名任然沿用了25Z4,但不影响编程);
在startup_MKL25Z4.s 文件  中可以明显看到复位中断程序:
; Reset Handler
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  SystemInit
                IMPORT  __main
                LDR     R0, =SystemInit
                BLX     R0
                LDR     R0, =__main
                BX      R0
                ENDP

  在上电复位后,实际程序是先执行的一个系统初始化函数SystemInit();然后才是调用的 main()函数
2:系统初始化函数SystemInit() 功能
  在system_MKL25Z4.c 文件中,我们可以找到SystemInit()函数的具体实现,从函数功能看,主要是实现系统时钟的选择及运行配置。


  (1)首先是关闭了看门狗;
  (2)根据各时钟源的值,设置MCU的系统时钟,详细可以参考程序代码,不细说。


3:在系统初始化函数SystemInit() 执行完后,进入main()函数执行,在main()函数开始时,首先对系统内核时钟进行了更新;
    在设置好系统时钟后,才真正开始用户运行程序代码的设置,因此,在我们自己设计程序时,前面系统时钟的初始化,可以直接参考例子程序的代码,根据自己的实际需要进行修改即可。


4:在系统时钟初始化完成后,由于我们要使用到外设,本例子程序是控制LED0~LED2,以及从串口输出信息,因此在配置MCU的门口时钟,必须先使能外设时钟前打开门口时钟:
SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK
                  | SIM_SCGC5_PORTB_MASK
                  | SIM_SCGC5_PORTC_MASK
                  | SIM_SCGC5_PORTD_MASK
                  | SIM_SCGC5_PORTE_MASK );   



  5:三个LED与开发板上的PTB18、PTB19和PTD1三个脚连接,要使LED灯工作,还需要使能端口时钟,与STM32类似。
    PORT_ENABLE_CLK(MKL_PORTB);                                         /*使能IO端口时钟     */
    PORT_ENABLE_CLK(MKL_PORTD);

  6:在使能时钟后,需要设置MCU 管脚的功能,由于是LED连接的是IO端口,而K了26的IO端口是多功能端口,所以需要设置PTB18、PTB19和PTD1三个脚的功能,    各引脚功能可以参考参考手册中第10。3节的“KL26 Signal Multiplexing and Pin Assignments”;
   IO_FUN_SEL(MKL_PORTB,18,1);                                         /* IO管脚功能设置        */
    IO_FUN_SEL(MKL_PORTB,19,1);
    IO_FUN_SEL(MKL_PORTD,1,1);   


7:接下来应该设置管脚的数据方向为输出端口:
   GPIO_DDR_OUTPUT(MKL_PORTB,18);                                      /* IOÉèÖÃΪÊä³öģʽ             */
    GPIO_DDR_OUTPUT(MKL_PORTB,19);
    GPIO_DDR_OUTPUT(MKL_PORTD,1);  

8:接下来就可以控制LED相连接的管脚,输出高低电平,控制LED的亮灭,实现LED流水灯。

总的来说是按照如下的顺序进行程序设计的:
X2.jpg
回复

使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13145
    最后登录
    2019-1-27
    发表于 2015-4-17 17:25:47 | 显示全部楼层
    思路清晰,实验可以了没有?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    17

    帖子

    0

    注册会员

    Rank: 2

    积分
    169
    最后登录
    1970-1-1
     楼主| 发表于 2015-4-19 14:18:07 | 显示全部楼层
    GPIO操作基本没有问题,有空在看看其他外设的操作
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
    发表于 2015-5-13 17:54:12 | 显示全部楼层
    非常感谢你关于Kinetis的经验分享!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-10 16:14
  • 签到天数: 1442 天

    连续签到: 1 天

    [LV.10]以坛为家III

    17

    主题

    3862

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    8291
    最后登录
    2021-12-10
    发表于 2015-6-11 23:41:43 | 显示全部楼层
    很好的教程,感谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2015-6-12 06:50:22 | 显示全部楼层
    受教了。。。 null.png null.png null.png null.png null.png null.png null.png null.png null.png null.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-27 15:50 , Processed in 0.095442 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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