查看: 2883|回复: 2

[分享] 【YL-KL26Z试用】GPIO的操作

[复制链接]
  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
    发表于 2015-3-19 19:05:49 | 显示全部楼层 |阅读模式
    本帖最后由 wambob 于 2015-3-19 19:31 编辑

    在体验了流水灯之后,打算一探其奥秘,只看参考手册和例程和纸上谈兵差不多,会运用才是硬道理。
    打开光盘自带的源文件GPIO下的Demo_GPIO下的kinetis_l_demo.uvprojx工程,可以看到左边工程面板里的文件,给我的感觉似曾相识,启动文件,驱动文件,应用文件(说白了用户写的代码).
    f1.JPG
    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_ENABLE_CLK(MKL_PORTD);
       
        IO_FUN_SEL(MKL_PORTB,18,1);                                       
        IO_FUN_SEL(MKL_PORTB,19,1);
       IO_FUN_SEL(MKL_PORTD,1,1);   
         
        GPIO_DDR_OUTPUT(MKL_PORTB,18);                                    
       GPIO_DDR_OUTPUT(MKL_PORTB,19);
       GPIO_DDR_OUTPUT(MKL_PORTD,1);   
       
       GPIO_SET(MKL_PORTB,18);                                            
       GPIO_SET(MKL_PORTB,19);
        GPIO_SET(MKL_PORTD,1);
       
        while(1)
    {                                                      
            
           GPIO_TOGGLE(MKL_PORTB,18);
          myDelay(200);
          GPIO_TOGGLE(MKL_PORTB,19);
           myDelay(200);
         GPIO_TOGGLE(MKL_PORTD,1);
       myDelay(200);
        }   
    }

    使用了系统模块时钟寄存器SIM_SCGC5
    f2.JPG

    开发板上使用PTB18、PTB19和PTD1三个脚外接三个LED,
    也就是上电后的流水灯。
    led.JPG
    要使用这三个脚,必须打开端口时钟门,
    SIM_SCGC5 |= 1u<<12|1u<<10;
    使用管脚,还需要配置一下功能。Pin Control Register n (PORTx_PCRn) mux=0b 001
    f3.JPG

    PORTB_PCR18|= 0x00000100u;
        PORTB_PCR19|= 0x00000100u;        

       PORTD_PCR1|= 0x00000100u;
    设置方向寄存器FGPIO_PDDR,也就是输入或者输出   
    f4.JPG   
        GPIOB_PDDR |= 1U<<18;              
        GPIOB_PDDR |= 1U<<19;               
        GPIOD_PDDR |= 1U<< 1;

    初始化设置寄存器FGPIO_PSOR,设置为高电平,灯熄灭
    f5.JPG
        GPIOB_PSOR |= 1U<< 18;               
        GPIOB_PSOR |= 1U<< 19;
        GPIOD_PSOR |= 1U<< 1;

    端口状态翻转寄存器FGPIO_PTOR
    f6.JPG


           GPIOB_PTOR =1U<< 18;
            myDelay(200);
            GPIOB_PTOR =1U<< 19;
            myDelay(200);
            GPIOD_PTOR =1U<< 1;
            myDelay(200);

    程序中还有个延时函数myDelay()。
    int  main (void)
    {
        SystemCoreClockUpdate();                //系统核时钟的初始化
        SIM_SCGC5 |= 1u<<12|1u<<10;     //开启PORTB PORTD模块时钟
        uart0Init(9600,0,0,8,1);
        printf("YL-KL25Z128 GPIO_Blinky Test start\r\n");

       
        PORTB_PCR18|= 0x00000100u;
        PORTB_PCR19|= 0x00000100u;        
        PORTD_PCR1|= 0x00000100u;           //设置为复用GPIO模式
       
        FGPIOB_PSOR |= 1U<< 18;                //初始化GPIO为高电平
        FGPIOB_PSOR |= 1U<< 19;
        FGPIOD_PSOR |= 1U<< 1;               
       
        FGPIOB_PDDR |= 1U<<18;                //设置GPIO为输出
        FGPIOB_PDDR |= 1U<<19;               
        FGPIOD_PDDR |= 1U<< 1;
       
       
        while(1)

    {                                                           
            FGPIOB_PTOR =1U<< 18;
            myDelay(200);
            FGPIOB_PTOR =1U<< 19;
            myDelay(200);
            FGPIOD_PTOR =1U<< 1;
            myDelay(200);
       }   
    }


    替换到原来的程序,编译,发送到mbed,按复位键,流水灯实现了。
    看着熟悉的代码,你是否会想起点什么。

          
















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

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-3-23 09:51:27 | 显示全部楼层
    非常感谢你关于Kinetis的经验分享!
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13128
    最后登录
    2019-1-27
    发表于 2015-3-24 14:01:28 | 显示全部楼层
    支持一下
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-22 20:57 , Processed in 0.087533 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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