查看: 2575|回复: 8

[分享] 【连载】KL26Z,学习笔记

[复制链接]
  • TA的每日心情
    开心
    2016-12-23 10:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    257

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1061
    最后登录
    2018-5-13
    发表于 2015-9-18 17:11:52 | 显示全部楼层 |阅读模式
    第三章 GPIO之LED
    3.1硬件连接
      通过开发板的原理图知道,LED0、LED1、LED2为共阳极接法,LED0、LED1、LED2分别与PTB18、PTB19、PTD1相连,当这几个脚为低电平时,LED亮。

    file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image008.jpg

    1.JPG
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-23 10:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    257

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1061
    最后登录
    2018-5-13
     楼主| 发表于 2015-9-18 17:13:49 | 显示全部楼层
    3.2软件编程
    3.2.1 编程思路及方法
    1.使能系统时钟
    2.设置IO口功能
      1)是否为复用引脚
      2)上拉OR下拉、输入OR输出、默认为高电平还是低电平(普通引脚)
    3.在while(1)大循环中编写程序
    3.2.2 具体驱动文件和子函数
    1.在开发板光盘中提供的光盘作为模版,一共三个文件夹,如图所示
    file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-23 10:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    257

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1061
    最后登录
    2018-5-13
     楼主| 发表于 2015-9-18 17:18:51 | 显示全部楼层
    本帖最后由 努力的人 于 2015-9-18 19:00 编辑

    第三章 GPIO之LED
    3.1硬件连接
      通过开发板的原理图知道,LED0、LED1、LED2为共阳极接法,LED0、LED1、LED2分别与PTB18、PTB19、PTD1相连,当这几个脚为低电平时,LED亮。
    file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg
    3.2软件编程
    3.2.1 编程思路及方法
    1.使能系统时钟
    2.设置IO口功能
      1)是否为复用引脚
      2)上拉OR下拉、输入OR输出、默认为高电平还是低电平(普通引脚)
    3.在while(1)大循环中编写程序
    3.2.2 具体驱动文件和子函数
    1.在开发板光盘中提供的光盘作为模版,一共三个文件夹,如图所示
    file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image004.jpg
    其中common文件夹存放的文件是每个工程所必要的程序,APP文件夹放的是main.c和全部头文件includes.h,Dry文件夹是自己添加外设的.c和.h文件夹,注意将新建文件夹的路径添加到KEIL。
    2.system_MKL25Z4.c
    这个文件中主要包含两个函数SystemInit()和SystemCoreClockUpdate(),其中SystemInit()在程序开始已经执行,对于系统时钟初始化只需要调用SystemCoreClockUpdate()函数即可。
    3. MKL25Z4.h
    这个头文件定义了个个模块的寄存器。
    4.MKL_gpio.h
    1)PORT配置
    #define MKL_PORTA               A
    #define MKL_PORTB               B
    #define MKL_PORTC               C
    #define MKL_PORTD               D
    #define MKL_PORTE               E
       
    #defineIO_DIS_IRQ            0x0
    #defineIO_DMA_RISE_IRQ       0x1
    #defineIO_DMA_FALL_IRQ       0x2
    #defineIO_DMA_EITHER_IRQ     0x3
    #defineIO_LOW_LEVEL_IRQ      0x8
    #defineIO_HIGH_LEVEL_IRQ     0xc
    #defineIO_RISE_EDGE_IRQ      0x9
    #defineIO_FALL_EDGE_IRQ      0xa
    #defineIO_EITHER_EDGE_IRQ    0xb   
    PORT时钟配置函数(PTO端口号)
    PORT_ENABLE_CLK(PTO)        
    PORT_DISABLE_CLK(PTO)      
    IO口功能配置函数
    IO_FUN_SEL(PTO,BIT,FUN)  PT0端口号、BIT引脚、FUN功能选择
            
    2)GPIO配置
    #definePDDR(PTO)     GPIO##PTO##_PDDR
    #definePSOR(PORT)    GPIO##PORT##_PSOR
    #definePCOR(PORT)    GPIO##PORT##_PCOR
    #definePTOR(PORT)    GPIO##PORT##_PTOR
    #definePDOR(PORT)    GPIO##PORT##_PDOR
    #definePDIR(PORT)    GPIO##PORT##_PDIR
    3)GPIO按位输入输出控制
    #defineGPIO_DDR_OUTPUT(POT,BIT)        PDDR(POT)|= (1 << BIT)
    #defineGPIO_DDR_INPUT(POT,BIT)         PDDR(POT)&= ~(1 << BIT)
    4)GPIO按PORT输入输出控制
    #definePORT_DDR_OUTPUT(POT,BITS)       PDDR(POT)|= BITS
    #definePORT_DDR_INPUT(POT,BITS)        PDDR(POT)&= ~BITS
    5)GPIO按位置1、置0、翻转控制
    #defineGPIO_SET(POT,BIT)               PSOR(POT)= (1 << BIT)     
    #defineGPIO_CLR(POT,BIT)               PCOR(POT)= (1 << BIT)     
    #defineGPIO_TOGGLE(POT,BIT)            PTOR(POT)= (1 << BIT)     
    6)GPIO按PORT置1、置0、翻转控制
    #definePORT_SET(POT,BITS)              PSOR(POT)= BITS   
    #definePORT_CLR(POT,BITS)              PCOR(POT)= BITS   
    #definePORT_TOGGLE(POT,BITS)           PTOR(POT)= BITS
    7)GPIO输入值读取
    #defineGPIO_GET_VALUE(POT,BIT)        ~(~(PDIR(POT) & (1 << BIT)))
    #definePORT_GET_VALUE(POT)             PDIR(POT)
    5.includes.h
    1自定义数据结构
    typedef unsigned char    BOOLEAN;    /* 布尔变量   */
    typedef unsigned char     INT8U;  /* 无符号8位整型变量  */
    typedef signed  char    INT8S;    /* 有符号8位整型变量 */
    typedef unsigned short   INT16U;  /* 无符号16位整型变量           */
    typedef signed  short  INT16S;    /* 有符号16位整型变量           */
    typedef unsigned long   INT32U;   /* 无符号32位整型变量           */
    typedef signed  long  INT32S;    /* 有符号32位整型变量           */
    typedef unsigned long long INT64U;  /* 无符号64位整型变量           */
    typedef signed long longINT64S;  /* 有符号64位整型变量           */
    typedef float FP32;    /* 单精度浮点数(32位长度)     */
    typedef double FP64;    /* 双精度浮点数(64位长度)     */
    typedef unsigned char uint8;  /* 无符号8位整型变量            */
    typedef unsigned short int uint16;/* 无符号16位整型变量           */
    typedef unsigned long int uint32;/* 无符号32位整型变量    */
    typedef char  int8;/* 有符号8位整型变量            */
    typedef short int int16;      /* 有符号16位整型变量           */
    typedef int  int32;      /* 有符号32位整型变量           */
    typedefvolatile int8  vint8;   /*  8bits */
    typedefvolatile int16 vint16;  /* 16 bits */
    typedefvolatile int32   vint32;    /* 32 bits */
    typedefvolatile uint8  vuint8;      /* 8 bits */
    typedefvolatile uint16  vuint16;       /* 16 bits */
    typedefvolatile uint32 vuint32;     /* 32 bits*/
    2)Standard header files标准头文件
    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #include<stdlib.h>
    //externvoid UART0_IRQHandler(void);
    //externvoid UART1_IRQHandler(void);
    //externvoid UART2_IRQHandler(void);
    3)CMSIS 头文件(不用管)
    4)Common's headerfiles  公共头文件
    #include"MKL25Z4.h"
    #include"system_MKL25Z4.h"
    /** * * * * * * 暂时使用* * * * * * * * */
    #include<core_cm0.h>                                                  /* CMSIS File of Cortex-M0      */
    5)Driver's headerfiles  驱动头文件
    #include"MKL_uart.h"
    #include"MKL_gpio.h"
    6)User's header files 用户头文件
    #include"main.h"
    3.2.3 主函数编程
    1.延时函数,暂时使用光盘给的,应该可以利用systick编写精确的延时函数
    voidmyDelay (INT32U ulTime)
    {
        INT32U i;
        i = 0;
        while (ulTime--) {
            for (i = 0; i < 5000; i++);
        }
    }
    估计是一次是5ms。
    2.intmain()编程
    1)系统时钟初始化SystemCoreClockUpdate();
    2)开启PORTB、PORTD时钟
    SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK
                     | SIM_SCGC5_PORTB_MASK
                     | SIM_SCGC5_PORTC_MASK
                     |SIM_SCGC5_PORTD_MASK
                      | SIM_SCGC5_PORTE_MASK );
    PORT_ENABLE_CLK(MKL_PORTB);                                                         
    PORT_ENABLE_CLK(MKL_PORTD);
    file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image006.jpg
    PORTABCDE的时钟使能在这个寄存器上
    3)设置PORTB18,PORTB19,PORTD1为普通引脚
    IO_FUN_SEL(MKL_PORTB,18,1);                                             IO_FUN_SEL(MKL_PORTB,19,1);
    IO_FUN_SEL(MKL_PORTD,1,1);
    4)设置PORTB18,PORTB19,PORTD1为输出
    GPIO_DDR_OUTPUT(MKL_PORTB,18);                                          GPIO_DDR_OUTPUT(MKL_PORTB,19);
    GPIO_DDR_OUTPUT(MKL_PORTD,1);
    5)设置PORTB18,PORTB19,PORTD1为默认高电平
    GPIO_SET(MKL_PORTB,18);                                             
    GPIO_SET(MKL_PORTB,19);
    GPIO_SET(MKL_PORTD,1);
    6)在while(1)里设置引脚电平,利用GPIO_SET(POT,BIT)、GPIO_CLR(POT,BIT)或者GPIO_TOGGLE(POT,BIT)进行流水灯编程。
    3.2.4 实验结果
    file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image008.jpg

    1.JPG
    2.JPG
    3.JPG
    4.JPG
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-23 10:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    257

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1061
    最后登录
    2018-5-13
     楼主| 发表于 2015-9-18 17:20:39 | 显示全部楼层
    对应的图片
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16715
    最后登录
    1970-1-1
    发表于 2015-9-18 17:41:16 | 显示全部楼层
    高人哈!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-23 10:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    257

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1061
    最后登录
    2018-5-13
     楼主| 发表于 2015-9-18 19:01:43 | 显示全部楼层

    哪有,,,,
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.8]以坛为家I

    74

    主题

    2338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    7509
    最后登录
    2021-8-30
    发表于 2015-9-19 08:36:01 | 显示全部楼层
    楼主,这么快就搞上啦!首先感谢楼主的分享,其实给个建议,贴代码不要太多,太多了反而没有去看,贴重点就可以啦,需要提醒的是,M0+内核的ARM芯片想干什么都要先全能时钟,要不人家不理帮你干活,我就遇到过这种事
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-23 10:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    257

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1061
    最后登录
    2018-5-13
     楼主| 发表于 2015-9-19 10:17:27 | 显示全部楼层
    anny 发表于 2015-9-19 08:36
    楼主,这么快就搞上啦!首先感谢楼主的分享,其实给个建议,贴代码不要太多,太多了反而没有去看,贴重点就 ...

    写的详细是因为底层的函数要会使用,程序不能总是烧写人家的,想要写出自己的程序,就要去自己理解这些。
    你自己去研究下一下给的代码就知道时钟已使能,而且是锁相环倍频后的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-23 10:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    257

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1061
    最后登录
    2018-5-13
     楼主| 发表于 2015-9-19 10:18:49 | 显示全部楼层
    等你收到开发板后自己看下光盘就知道了
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

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

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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