查看: 12161|回复: 33

[分享] 【YL-KL26开发资料】+IAR编译器+库函数学习

[复制链接]
  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
    发表于 2015-11-8 23:24:39 | 显示全部楼层 |阅读模式
    本帖最后由 噬猎者 于 2015-11-9 00:28 编辑

    好吧,我这是搞了一天才搞定IAR库函数,实在是太痛苦了,就让我分享一下IAR编译的经验吧!!!

    小伙伴们轻松学习KL26!!!

    ~时刻更新中

    评分

    参与人数 1NXP金币 +30 收起 理由
    小七 + 30 赞一个!

    查看全部评分

    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2015-11-8 23:41:49 | 显示全部楼层
    一、编译环境

    1.IAR版本至少是7.1 (由于我们才用的库版本很高,所以希望大家重新安装IAR编辑器)
          IAR软件: IAR7.1 .zip (221.18 KB, 下载次数: 58)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 3 反对 0

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2015-11-10 15:26:29 | 显示全部楼层
    八、I2C—AT24C02模块
    看下程序发现山外的居然没有I2C好吧,那就仿照加速度传感器自己写个吧!

    看一下24C02的地址:
    1.png
    地址:   MSB  0101         LSB 0 A2 A1 A0  

    由于我们用的AT24C02 只有两个存储扇区  
               地址可取:   0x50  第一扇区    0x51第二扇区
    1. /*******************************    噬猎者编写    *******************************
    2. //这是AT24C02的程序:
    3. 包括:
    4. AT24C02_init()
    5. AT24C02_WriteByte(Addr,Data)  //写入一个字节
    6. AT24C02_ReadByte(Addr)              //读取一个地址的值
    7. Addr 0-255
    8. Data 数据


    9. *******************************************************************************/



    10. #ifndef _VCAN_24C02_H_
    11. #define _VCAN_24C02_H_

    12. #define AT24C02_I2C_ADDRESS                         0x50        //        AT24C02的地址
    13. #define AT24C02_PageSize                            8                //         AT24C02每页有8个字节


    14. #define AT24C02_init()                              i2c_init(I2C0, 50 * 1000); //频率为50K

    15. #define AT24C02_WriteByte(Addr,Data)                i2c_write_reg(I2C0,AT24C02_I2C_ADDRESS,Addr,Data)    //读取地址里的内容
    16. #define AT24C02_ReadByte(Addr)                      i2c_read_reg(I2C0,AT24C02_I2C_ADDRESS,Addr)          //从地址读取内容

    17. #endif  //_AT24C02_H_
    复制代码

    1. //AT24C02

    2. #include "VCAN_24C02.h"
    复制代码
    我只用了宏定义,所以.c文件是空的

    这是我的程序,供大家参考: 6.I2C.zip (1.61 MB, 下载次数: 51)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 2 反对 0

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2015-11-10 09:43:48 | 显示全部楼层
    本帖最后由 噬猎者 于 2015-11-10 15:38 编辑

    七、ADC模块

    对于ADC库没什么好讲的,山外的库写的很完善只需要会用这几个就可以了
    1. /***************************   ADC学习   ***************************************
    2. extern void     adc_init    (ADCn_Ch_e);                //ADC初始化
    3. extern uint16   adc_once    (ADCn_Ch_e, ADC_nbit);      //采集一次一路模拟量的AD值
    4.         ADCn_Ch_e//ADC通道
    5.         ADC_nbit//n = 8,12,16

    6. extern void     adc_stop    (ADCn_e);                   //停止ADC转换

    7. *******************************************************************************/
    复制代码
    这是我写的printf_float()函数,方便串口检测电压
    1. void printf_float(float data)  //     printf_float(-30.00102);
    2. {
    3.   char k[10],ch[20];
    4.   char s[10]={'0','1','2','3','4','5','6','7','8','9'};
    5.   int        i=0,j=1;
    6.   long   data0;
    7.   data0 = data;
    8.   data -= data0;
    9.   if(data0<0)
    10.   {
    11.     ch[i++] = '-';
    12.     data0 = -data0;
    13.     data = -data;
    14.   }
    15.   do
    16.   {
    17.           k[j++]=s[data0%10];
    18.           data0/=10;
    19.   }while(data0!=0);
    20.   for(j--;j>0;j--)
    21.   {
    22.           ch[i++]=k[j];
    23.   }
    24.   data0=data*10000+0.5;//保留四位小数
    25.   if(data0!=0)
    26.   {
    27.           ch[i++]='.';
    28.         j=1;
    29.         for(j=1;j<=4;j++)
    30.           {
    31.                   k[j]=s[data0%10];
    32.                   data0/=10;
    33.           }
    34.           for(j=4;j>0;j--)
    35.           {
    36.                   ch[i++]=k[j];
    37.           }
    38.   }
    39.   ch[i++] = '\0';
    40.   printf("%s",ch);
    41. }
    复制代码
    好了剩下的看我的程序吧: 5.ADC.zip (1.7 MB, 下载次数: 26)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 2 反对 0

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2015-11-9 06:39:54 | 显示全部楼层
    本帖最后由 噬猎者 于 2015-11-9 06:44 编辑

    三、GPIO模块
    1. /********************该程序是由噬猎者编写************************************/
    2. void main()
    3. {
    4.           int i=2;//更改i切换不同模式
    5.         int data=0;
    6.         DisableInterrupts; //关闭中断使能
    7.         gpio_init(PTB18,GPO,1);//IO口初始化
    8.        
    9.        
    10.         while(1)
    11.         {
    12.           switch(i)
    13.           {
    14.                   case 0:
    15.                           GPIO_TURN(PTB18);
    16.                         DELAY_MS(500);
    17.                         break;
    18.                   case 1:       
    19.                               PTB18_OUT=1;
    20.                           DELAY_MS(500);
    21.                         PTB18_OUT=0;
    22.                           DELAY_MS(500);
    23.                         break;
    24.                  case 2:
    25.                         GPIO_SET_NBIT(1,PTB18,1);
    26.                         DELAY_MS(500);
    27.                         GPIO_SET_NBIT(1,PTB18,0);
    28.                         DELAY_MS(500);
    29.                         break;
    30.                   case 3:
    31.                           data = GPIO_GET(PTB18);
    32.                         if(data==0)
    33.                                  PTB18_OUT=1;
    34.                         else
    35.                                   PTB18_OUT=0;
    36.                         DELAY_MS(500);
    37.                         break;
    38.                
    39.           }
    40.                
    41.         }

    42.   
    43. }
    44. /******************************************************************************/



    45. /****************************GPIO学习指南************************************/
    46. /*************************** 编辑:噬猎者 ************************************
    47. 我的喜好,一般不采用函数形式,采用宏定义形式更加迅速,不过这里也指出来很多不得已用函数的。
    48. 【1.gpio_init(PTxn ptxn, uint8_t dir, uint8_t state)//GPIO初始化
    49.         PTx = PTA,PTB,PTC,PTD,PTE//端口名
    50.         n   = 0-31        //管脚号
    51.         dir =    //输入输出配置
    52.                     GPI         = 0,                          //定义管脚输入方向      GPIOx_PDDRn里,0表示输入,1表示输出
    53.                     GPO         = 1,                          //定义管脚输出方向

    54.                     GPI_DOWN    = 0x02,                       //输入下拉              PORTx_PCRn需要PE=1,PS=0
    55.                     GPI_UP      = 0x03,                       //输入上拉              PORTx_PCRn需要PE=1,PS=1
    56.                     GPI_PF      = 0x10,                       //输入,带无源滤波器,滤波范围:10 MHz ~ 30 MHz 。不支持高速接口(>=2MHz)  0b10000           Passive Filter Enable
    57.                     GPI_DOWN_PF = GPI_DOWN | GPI_PF ,         //输入下拉,带无源滤波器
    58.                     GPI_UP_PF   = GPI_UP   | GPI_PF ,         //输入上拉,带无源滤波器

    59.                     GPO_HDS     = 0x41,                        //输出高驱动能力   0b100 0001    High drive strength
    60.                     GPO_SSR     = 0x05,                        //输出慢变化率          0b101    Slow slew rate
    61.                     GPO_HDS_SSR = GPO_HDS | GPO_SSR,           //输出高驱动能力、慢变化率
    62.                 //带滤波器的可用于按键,不过也得消抖
    63.         state = 0,1  //引脚状态(输入的模式填0就可以了)
    64. 例子:gpio_init(PTB19,GPO,1);//PTB19初始化为输出模式,输出高电平。
    65.        
    66. 【2.GPIO_SET(PTxn,data)  //设置引脚状态
    67.         PTx  = PTA,PTB,PTC...//端口名
    68.         n      = 0-31        //管脚号
    69.         x      =  0,1   //引脚电平
    70. 例子:GPIO_SET(PTA18,1);//PTA18输出高电平

    71. 【3.GPIO_TURN(PTxn)        //翻转引脚电平
    72.         PTx  = PTA,PTB,PTC...//端口名
    73.         n      = 0-31        //管脚号
    74. 例子:GPIO_TURN(PTA18);//翻转PTA18引脚电平

    75. 【4.data =  GPIO_GET(PTxn);        //获取引脚电平
    76.         PTx  = PTA,PTB,PTC...//端口名
    77.         n      = 0-31        //管脚号
    78. 例子:data = GPIO_GET(PTA18);//读取PTA18的引脚电平

    79. 【5.对GPIO进行位操作:
    80.         GPIO_SET_NBIT(NBIT,PTxn,data)        //设定n位电平
    81.         GPIO_DDR_NBIT(NBIT,PTxn,ddr)        //设置n位输入输出模式
    82.         GPIO_GET_NBIT(NBIT,PTxn)         //读取n位电平

    83. 【6.GPIO_DDR(PTxn,ddr)        //设置输入输出状态
    84.         ddr = 输入输出配置  


    85. 【7.最常用的IO电平
    86.         PTxn_OUT = 1         PTxn输出高电平
    87.         data = PTxn_IN        读取PTxn输入的电平

    88. ****************************************************************************/






    89. /******************************延时函数*************************************/
    90. /***************************************************************************
    91. VCAN_MK60_conf.h
    92. #if  0
    93. #include "MKL_lptmr.h"//定时器延时
    94. #define     DELAY()         lptmr_delay_ms(500)
    95. #define     DELAY_MS(ms)    lptmr_delay_ms(ms)
    96. #define     DELAY_US(us)    lptmr_delay_us(us)
    97. #elif   0
    98. #include "MKL_pit.h"
    99. #define DELAY()         pit_delay_ms(PIT1,500)
    100. #define DELAY_MS(ms)    pit_delay_ms(PIT1,ms)
    101. #define DELAY_US(us)    pit_delay_us(PIT1,us)
    102. #else
    103. #include "MKL_SysTick.h"//系统时钟
    104. #define DELAY()         systick_delay_ms(500)
    105. #define DELAY_MS(ms)    systick_delay_ms(ms)
    106. #define DELAY_US(us)    systick_delay_us(us)

    107. 也就是说要想更改延时就直接去 VCAN_MK60_conf.h,换一下选择函数即可
    108. DELAY()       //500ms延时
    109. DELAY_MS(ms)  //ms级延时
    110. DELAY_US(us)  //us级延时
    111. ****************************************************************************/
    复制代码



    这是我的程序供大家参考:    1.GPIO.zip (1.7 MB, 下载次数: 29)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2015-11-9 00:20:46 | 显示全部楼层
    二、库文件

               当时做小车时就有用KL26芯片的,所以我果断找了一下智能车那边的资料,太棒了,山外大哥居然将KL26做成和K60相似的库了,所有的都是开源的,给我们开发者提供了不少帮助。


             山外攻城略地一天攻破KL26: 山外攻城略地之一天攻破KL26 V5.2(IAR6.7版本).rar (988.79 KB, 下载次数: 83)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-17 09:58
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    3

    主题

    253

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3029
    最后登录
    2019-10-21
    发表于 2015-11-9 07:28:11 来自手机 | 显示全部楼层
    学习了,感谢分享!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2015-11-9 07:28:22 | 显示全部楼层
    本帖最后由 噬猎者 于 2015-11-9 07:30 编辑

    四、LED模块

    我一直觉得山外的LED写的不是太好,所以就改了一下,将其全部改成宏定义形式

    LED.h
    1. #ifndef __VCAN_LED_H__
    2. #define __VCAN_LED_H__


    3. //设置LED灯亮灭(感觉写的不是太好)
    4. #define LED0_T  PTB18_OUT
    5. #define LED1_T  PTB19_OUT
    6. #define LED2_T  PTD1_OUT
    7. //#define LED3_T  PTB18_OUT


    8. //定义LED
    9. #define LED0  PTB18
    10. #define LED1  PTB19
    11. #define LED2  PTD1
    12. //#define LED3  PTB18

    13.                         

    14. /* 枚举LED亮灭状态 */
    15. typedef enum LED_status
    16. {
    17.   LED_ON  =   0,            //灯亮(对应低电平)
    18.   LED_OFF =   1             //灯暗(对应高电平)
    19. }LED_status;



    20. //LED端口初始化
    21. #define LED_INIT()          gpio_init(LED0,GPO,LED_OFF);  \
    22.                         gpio_init(LED1,GPO,LED_OFF);  \
    23.                         gpio_init(LED2,GPO,LED_OFF)
    24.                 //        gpio_init(LED3,GPO,LED_OFF)
    25.                           
    26. //翻转LED灯
    27. #define LED_TURN(PTxn)   GPIO_TURN(PTxn)        
    28.                           

    29. #endif  //__VCAN_LED_H__
    复制代码


    LED.C   
    1. /*
    2. * 包含头文件
    3. */
    4. #include "common.h"
    5. #include "MKL_port.h"
    6. #include "MKL_gpio.h"
    7. #include "VCAN_LED.H"
    复制代码
    意思就是全删了!

    main.c
    1. void main()
    2. {
    3.           int i=0;//更改i切换不同模式
    4.         int data=0;
    5.         DisableInterrupts; //关闭中断使能

    6.         LED_INIT();
    7.         
    8.         while(1)
    9.         {
    10.          
    11. //                 LED_TURN(LED2);//LED翻转
    12. //                DELAY_MS(500);
    13.                 LED0_T = 0;//设置LED电平
    14.                 DELAY_MS(500);
    15.                 LED0_T = 1;
    16.                 DELAY_MS(500);
    17.          
    18.         }

    19.   
    20. }
    复制代码




    这是我的LED程序供参考: 2.LED.zip (1.7 MB, 下载次数: 17)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    189

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    244
    最后登录
    2020-10-19
    发表于 2015-11-9 08:51:42 | 显示全部楼层
    支持楼主,感谢分享!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    109

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    278
    最后登录
    2016-6-10
    发表于 2015-11-9 09:13:39 | 显示全部楼层
    感谢分享
    回复

    使用道具 举报

    该用户从未签到

    8

    主题

    569

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2117
    最后登录
    2018-2-1
    发表于 2015-11-9 11:08:35 | 显示全部楼层
    厉害,厉害。 FreeLogo.png
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    34

    主题

    135

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    387
    最后登录
    2016-1-13
    发表于 2015-11-9 13:32:22 | 显示全部楼层
    噬猎者 发表于 2015-11-9 07:28
    四、LED模块

    我一直觉得山外的LED写的不是太好,所以就改了一下,将其全部改成宏定义形式

    不建议楼主,一个帖子分开写
    没有系统连贯性,也不利于评分哦
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-22 01:07 , Processed in 0.124991 second(s), 33 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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