技术专栏
MKE14F512VLL16单片机用不同的端口使用相同的 LPUART 模块
1.前言
2.硬件说明
3.代码编写
4.解决方案
- 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
- 1
- 2
- 3
外设 2(P2) 连接到:
PTB0 (ALT2)- LPUART0-RX
PTB1 (ALT2)- LPUART0-TX
- 1
- 2
- 3
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); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
<
最初,这是按预期工作的。
系统正在通过端口按预期发送数据。
当我需要使用其他外设时,
我将 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 */
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
安装配置后,
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);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
<
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
93
收藏
评论
打赏
- 分享
- 举报
评论
1个
手气红包
相关专栏
-
浏览量:2764次2020-10-09 17:30:40
-
浏览量:2753次2022-11-10 10:02:57
-
浏览量:2054次2020-03-19 17:38:49
-
浏览量:1059次2023-02-09 09:35:45
-
2020-10-15 10:49:40
-
浏览量:3916次2020-11-09 15:54:12
-
浏览量:3358次2020-12-04 09:34:16
-
浏览量:1034次2023-03-23 18:35:11
-
2020-08-11 11:58:23
-
浏览量:1591次2019-11-18 09:17:30
-
2020-07-11 17:58:22
-
浏览量:1989次2020-08-03 11:18:53
-
浏览量:1417次2019-05-16 16:41:47
-
浏览量:5424次2021-03-16 23:20:06
-
浏览量:1931次2022-10-20 09:29:49
-
浏览量:2420次2020-08-17 18:01:42
-
浏览量:5040次2020-08-11 18:51:18
-
浏览量:4345次2021-09-27 17:21:10
-
浏览量:2222次2020-08-20 18:02:29
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
free-jdx
您的支持将鼓励我继续创作!
打赏金额:
¥1

¥5

¥10

¥50

¥100

支付方式:

举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注
感谢大佬分享感谢大佬分享