查看: 5090|回复: 8

[原创] [FRDM KL27Z]学习笔记之 LPUART0发送

[复制链接]
  • TA的每日心情
    开心
    2023-6-2 13:32
  • 签到天数: 272 天

    连续签到: 1 天

    [LV.8]以坛为家I

    44

    主题

    995

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    4461
    最后登录
    2023-6-2
    发表于 2016-3-5 14:58:39 | 显示全部楼层 |阅读模式
    能够控制LED了,能够跑系统了,接下来比较重要的一个环节就是 通信了.
    毕竟按键只有两个,2^2 四种状态.
    KL27Z的LPUART0连接到了OpenSDA上面,OpenSDA又直接换成了miniUSB的接口.
    只要装好了OpenSDA的驱动,连串口转换电平工具也省了..

    上代码.
    void initUARTPin(TYPE_E_UART uart){
            switch(uart){
                    case UART_TYPE_U0:{
                            SIM->SCGC5|=SIM_SCGC5_PORTA_MASK;
                            PORTA->PCR[1]=PORT_PCR_MUX(2);//LPUART0 TX.
                            PORTA->PCR[2]=PORT_PCR_MUX(2);//LPUART0 RX.
                    }break;
                    default:{
                    }break;
            }
    }


    SIM_EXTERN __inline void enableUART0Clock(void){
            SIM->SOPT2=(SIM->SOPT2&(~SIM_SOPT2_LPUART0SRC_MASK))|SIM_SOPT2_LPUART0SRC(1);//select IRC48M.
            SIM->SCGC5|=SIM_SCGC5_LPUART0_MASK;//enable clock.
    }


    void initUART(TYPE_E_UART uart,u32 baudrate){
            switch(uart){
                    case UART_TYPE_U0:{
                            enableUART0Clock();
                            LPUART0->BAUD=(LPUART0->BAUD&~LPUART_BAUD_SBR_MASK)|LPUART_BAUD_SBR(3000000/baudrate);
                            LPUART0->CTRL=LPUART_CTRL_TE_MASK|LPUART_CTRL_RE_MASK|LPUART_CTRL_RIE_MASK;
                            NVIC_EnableIRQ(LPUART0_IRQn);
                    }break;
                    default:{
                    }break;
            }
    }


    static void initCOM(TYPE_E_COM com,u32 baudrate){
            switch(com){
                    case COM_TYPE_COM1:{
                            initUARTPin(UART_TYPE_U0);
                            initUART(UART_TYPE_U0,baudrate);
                    }break;
                    default:{
                    }break;
            }
    }


    void sendByte(TYPE_E_COM com,char c){
            switch(com){
                    case COM_TYPE_COM1:{
                            if(c=='\n'){
                                    while(!(LPUART0->STAT&LPUART_STAT_TDRE_MASK));
                                    COM1_BUF=0x0D;//CR(carriage return)
                                    while(!(LPUART0->STAT&LPUART_STAT_TDRE_MASK));
                            COM1_BUF=0x0A;//LF(NL line feed,new line)
                        }else{
                                while(!(LPUART0->STAT&LPUART_STAT_TDRE_MASK));
                            COM1_BUF=c;//发送字符
                        }
                    }break;
                    default:{
                    }break;
            }
    }

    void sendString(TYPE_E_COM com,char* str){
            while((*str)!='\0'){
                    sendByte(com,*str);
                    str++;
            }
    }


    void TaskCommunicate(void *p){
            initCOM(COM_TYPE_COM1,115200);
            sendString(COM_TYPE_COM1,"\nHello! Welcome to the Kinetis world~\n");
            while(1){
                    OSTimeDly(100);
                    sendByte(COM_TYPE_COM1,0xBB);
            }
    }


    这就是全部的代码了,执行效果:
    send.png
    呵呵,我也不知道0xBB 0xBB怎么解码成了 "换"- -.

    上面的代码习惯是我最近养成的.用了很多小函数.

    之前,不喜欢库,第一,名字复杂不知道怎么用.第二,感觉很笨.代码结构都不清晰了.
    喜欢一个函数里面一堆寄存器,然后就OK了.

    现在有了几种MCU的经验,有了点移植以及代码重复利用的概念,

    觉得,函数还是比#define好.

    刚写完发送,接收还没完成.

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

    使用道具 举报

  • TA的每日心情

    2016-12-12 19:51
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    1

    主题

    18

    帖子

    0

    注册会员

    Rank: 2

    积分
    91
    最后登录
    2017-4-17
    发表于 2016-11-21 22:25:53 | 显示全部楼层
    很棒的分享,谢谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-21 08:04
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    3

    主题

    86

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    242
    最后登录
    2017-4-26
    发表于 2016-11-22 14:14:28 | 显示全部楼层
    赞一个赞一个赞一个赞一个赞一个
    哎...今天够累的,签到来了1...
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-3-26 09:40
  • 签到天数: 23 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    2

    主题

    63

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    348
    最后登录
    2021-3-17
    发表于 2016-11-30 13:25:57 来自手机 | 显示全部楼层
    先赞一个,刚入手KL27,例程看了一段时间了,自己建工程老报错,楼主教教我。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-3-26 09:40
  • 签到天数: 23 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    2

    主题

    63

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    348
    最后登录
    2021-3-17
    发表于 2016-11-30 13:26:14 来自手机 | 显示全部楼层
    先赞一个,刚入手KL27,例程看了一段时间了,自己建工程老报错,楼主教教我。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2016-11-30 14:25:23 | 显示全部楼层
    kiri 发表于 2016-11-30 13:26
    先赞一个,刚入手KL27,例程看了一段时间了,自己建工程老报错,楼主教教我。 ...

    用官方的SDK吧,比较好用,另外打开提供的工程就那几个文件,添加进去设置下include路径一般问题不大
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16864
    最后登录
    1970-1-1
    发表于 2016-11-30 19:46:10 | 显示全部楼层
    不错
    回复

    使用道具 举报

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

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5788
    最后登录
    2025-5-7
    发表于 2016-11-30 21:21:26 | 显示全部楼层
    学习下         
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    92

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    285
    最后登录
    2022-4-14
    发表于 2017-4-5 15:43:26 | 显示全部楼层
    感谢楼主分享,最近看了看lpuart的寄存器,发现相当复杂啊,波特率设置楼主做的简单了吧?
    还有OSR需要设置,楼主使用的是默认值吗?
    在4x和7x间 需要设置双沿使能。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-9-6 15:28 , Processed in 0.104139 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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