查看: 4468|回复: 5

[原创] 【FRDM-KL02】LED例程学习笔记

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

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5786
    最后登录
    2025-5-7
    发表于 2015-11-7 17:17:40 | 显示全部楼层 |阅读模式
    本帖最后由 wambob 于 2015-11-7 17:17 编辑

    LED例程结构

    1

    1

    主函数里面只有几个封装的函数,看不到模块时钟的开启。LED如何点亮呢?展开里面的函数看一下吧

    2

    2

    3

    3

    4

    4

    层层封装,原来是个系统滴答,通过使能、禁止中断、设置滴答计数值来确定延时。

    5

    5

    字面意思,GPIO快速初始化,这个速度相对于操作寄存器来说,是有点快,至少比看手册操作寄存器快。几个都是调用一个函数,原型如下:
    1. uint8_t GPIO_QuickInit(uint32_t instance, uint32_t pinx, GPIO_Mode_Type mode)
    复制代码
    三个参数,第一个是实例,第二个是端脚,第三个是GPIO模式。展开后

    6

    6

    这个函数是把传递过来的实参给一个GPIO_InitTypeDef 类型的变量GPIO_InitStruct1的成员赋值,然后对寄存器初始化,最后返回实例

    7

    7


    1. <P>GPIO_Init(&GPIO_InitStruct1);</P>
    复制代码
    1. struct reg_ops
    2. {
    3. void * addr;
    4. uint32_t mask;
    5. };
    复制代码
    这个圈子饶的真远,把数组的第二个元素值赋给第一个指针指向的地方,相当于
    1. SIM_SCGC5|=SIM_SCGC5_PORTB_MASK;
    复制代码
    也许有人问,为什么是PORTB呢,且看
    23.JPG
    24.JPG
    看见01在数组里就是PORTB了.到这里,时钟总算出来了,接着往下还是一个开关语句
    1. case kPullDisabled:
    2. PORT_InstanceTable[instance]->PCR[pinIndex] &= ~PORT_PCR_PE_MASK;
    3. break;
    复制代码
    1. static PORT_Type * const PORT_InstanceTable[] = PORT_BASES;
    复制代码
    1. #define PORT_BASES PORT_BASE_PTRS
    复制代码
    1. #define PORT_BASE_PTRS { PORTA, PORTB }
    复制代码
    1. #define PORTB ((PORT_Type *)PORTB_BASE)
    复制代码
    意思就是PORTB_PCR11 &=~PORT_PCR_PE_MASK;
    11.JPG
    12.JPG
    13.JPG
    没有见到GPIO的推挽模式,只见到PORT的上拉\下拉\没有上下拉.
    接着初始化GPIO引脚
    1. GPIO_PinConfig(Init->instance, Init->pinx, kOutput);
    复制代码
    1. void GPIO_PinConfig(uint32_t instance, uint8_t pinIndex, GPIO_PinConfig_Type mode)
    2. {
    3. IP_CLK_ENABLE(instance);
    4. (mode == kOutput) ? (GPIO_InstanceTable[instance]->PDDR |= (1 << pinIndex)):(GPIO_InstanceTable[instance]->PDDR &= ~(1 << pinIndex));
    5. }
    复制代码
    这里又一次开启PORTB时钟.此处用了一个 表达式?A:B语句.
    继续,跳出了开关语句
    1. PORT_PinMuxConfig(Init->instance, Init->pinx, kPinAlt1);
    复制代码
    1. void PORT_PinMuxConfig(uint32_t instance, uint8_t pinIndex, PORT_PinMux_Type pinMux)
    2. {

    3. IP_CLK_ENABLE(instance);
    4. PORT_InstanceTable[instance]->PCR[pinIndex] &= ~(PORT_PCR_MUX_MASK);
    5. PORT_InstanceTable[instance]->PCR[pinIndex] |= PORT_PCR_MUX(pinMux);
    6. }
    复制代码
    又一次使能时钟,复用功能1.
    1. typedef enum
    2. {
    3. kPinAlt0,
    4. kPinAlt1,
    5. kPinAlt2,
    6. kPinAlt3,
    7. kPinAlt4,
    8. kPinAlt5,
    9. kPinAlt6,
    10. kPinAlt7,
    11. }PORT_PinMux_Type;
    复制代码
    层层封装,层层调用,看的头疼.到次PORTB时钟开启了,管脚设置成输出复用功能GPIO输出,虽然是GPIO 的推挽模式,但是到了PORT口,却是没有内部上下拉,学过STM 32的,GPIO可是实在的有内部推挽模式.











    8

    8
    9.JPG
    10.JPG
    21.JPG
    22.JPG
    12.JPG
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5786
    最后登录
    2025-5-7
     楼主| 发表于 2015-11-7 17:27:55 | 显示全部楼层
    沙发,图片怎么乱了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-8-30 16:02
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    36

    主题

    1065

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1851
    最后登录
    2019-11-19
    发表于 2015-11-7 23:04:17 | 显示全部楼层
    楼主写得很详细
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2015-11-8 09:53:59 | 显示全部楼层
    谢谢分享。 null - 副本 - 副本 - 副本.png null - 副本 - 副本 (2).png null - 副本 - 副本 (3).png null - 副本 - 副本.png null - 副本 (2) - 副本.png null - 副本 (2).png null - 副本 (3).png null - 副本 (4).png null - 副本.png null.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    132

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    418
    最后登录
    2018-12-14
    发表于 2015-11-8 16:35:15 | 显示全部楼层
    感谢分享
    回复

    使用道具 举报

    该用户从未签到

    9

    主题

    642

    帖子

    0

    高级会员

    Rank: 4

    积分
    748
    最后登录
    1970-1-1
    发表于 2015-11-20 09:14:54 | 显示全部楼层
    感谢楼主分享
    104930kli5jsmlssemljli.png
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-9-2 17:07 , Processed in 0.102491 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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