MKE14F512VLL16单片机用不同的端口使用相同的 LPUART 模块

free-jdx 2021-08-06 10:20:09 4425

1.前言
2.硬件说明
3.代码编写
4.解决方案
1.前言

最近使用NXP Kinetis的
单片机MKE14F512VLL16开发项目

使用的IDE

  • MCUXpresso v11.3.0

使用的SDK软件开发包

  • SDK_2.x_MKE14F512XXX16 ,v2.8.8

有一个应用程序,
必须在两个不同的端口中
使用相同的 LPUART 模块

不同的外围设备连接到每个端口
我不想同时使用它们

2.硬件说明

外设 1(P1) 连接到:

    PTA3 (ALT6)- LPUART0-TX

    PTA2 (ALT6)- LPUART0-RX

外设 2(P2) 连接到:

PTB0 (ALT2)- LPUART0-RX

PTB1 (ALT2)- LPUART0-TX

3.代码编写

在我的应用程序中
先使用以下代码
使用端口 A2 和 A3 初始化 LPUART0 模块

void InitLPUART0(void){

PCC->CLKCFG[PCC_LPUART0_INDEX] |= PCC_CLKCFG_PCS(3); //System Oscillator Bus Clock

PCC->CLKCFG[PCC_LPUART0_INDEX] |= PCC_CLKCFG_CGC(1); //PCC Configuration - Enable Clock

PORTA->PCR[2] |= PORT_PCR_MUX(6); /* LPUART - ALT6 */

PORTA->PCR[3] |= PORT_PCR_MUX(6);

LPUART0->CTRL &= ~(LPUART_CTRL_TE_MASK | LPUART_CTRL_RE_MASK);

LPUART0->BAUD = BAUD_115200; //48M/(26*16)Baud rate for 115200bps
LPUART0->CTRL |= LPUART_CTRL_RIE(1); /* Receiver Interrupt Enable */

LPUART0->CTRL |= LPUART_CTRL_TE(1); /* Transmitter enable */

LPUART0->CTRL |= LPUART_CTRL_RE(1); /* Receiver Enable
*/

NVIC_EnableIRQ(LPUART0_RX_IRQn); }

最初,这是按预期工作的。
系统正在通过端口按预期发送数据。

当我需要使用其他外设时,
我将 LPUART0 转移到另一个端口,
如下所示进行初始化。

LPUART0->CTRL &= ~(LPUART_CTRL_TE_MASK | LPUART_CTRL_RE_MASK); /* Disable Tranceiver */

PORTA->PCR[3] |= PORT_PCR_MUX(1); /* LPUART - ALT1 - GPIO */
PORTA->PCR[2] |= PORT_PCR_MUX(1);

PORTB->PCR[0] |= PORT_PCR_MUX(2); /* LPUART - ALT2 - UART */
PORTB->PCR[1] |= PORT_PCR_MUX(2);

LPUART0->CTRL |= (LPUART_CTRL_TE_MASK | LPUART_CTRL_RE_MASK); /* Enable Tranceiver */

安装配置后,
MCU系统应该通过端口 B 将数据发送到外设 2
发现即使传输代码正在运行,
LPUART 线路也是空闲的

切换端口后
如果我使用相同的方法切换回端口 A 中的外设 1,
它也不会响应。

如果使用其中一个端口而不切换到另一个,
则系统正在工作

4.解决方案

修改PORTx_PCR寄存器中的MUX设置
相对应的第 8、9 和 10 位

而不是清除它们
更正的方法贴在下面

void SelectCOMPort(COMPORT_TYPE CPort){ /* Directs LPUART0 to the required port and disables others */
    LPUART0->CTRL &= ~(LPUART_CTRL_TE_MASK | LPUART_CTRL_RE_MASK);  /* Disable Tranceiver */
    switch (CPort)
    {
    case PORT_1:
        PORTB->PCR[0] &= ~(BIT8 | BIT9 | BIT10);    /* LPUART - Disable */

        PORTB->PCR[1] &= ~(BIT8 | BIT9 | BIT10);
        PORTA->PCR[3] |= PORT_PCR_MUX(6);           /* LPUART - ALT6 - to UART */

        PORTA->PCR[2] |= PORT_PCR_MUX(6);
        break;
    case PORT_2:
        PORTA->PCR[3] &= ~(BIT8 | BIT9 | BIT10);    /* LPUART - Disable */

        PORTA->PCR[2] &= ~(BIT8 | BIT9 | BIT10);
        PORTB->PCR[0] |= PORT_PCR_MUX(2);           /* LPUART - ALT2 - to UART */

        PORTB->PCR[1] |= PORT_PCR_MUX(2);
        break;
    default:
        break;
    }
    LPUART0->CTRL |= (LPUART_CTRL_TE_MASK | LPUART_CTRL_RE_MASK);
}
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
free-jdx
红包 93 收藏 评论 打赏
评论
1个
内容存在敏感词
手气红包
  • 执手听风吟 2021-08-07 19:08:27
    回复

    感谢大佬分享感谢大佬分享

相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
free-jdx
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区