MSP430F149串口通过WK2114一扩四,同时连接北斗短报文、高精度定位、LoRa和电脑
上一篇我们讲了用MSP430F149驱动T8650北斗模块实现短报文通信及定位,后来要求把这个产品升级,除了短报文功能,要求定位精度达到2米左右(T8650模块的RNSS定位精度只有100米左右),还要增加空旷地带10公里的LORA作为通信辅助以及与电脑的RS232连接,而MCU型号是不能更改的。
定位模块我们选的是和芯星通UM220-IV车规级,LoRa无线模块是亿佰特的E22-400T30S,加上RS232总共需要4个串口,必须用到串口扩展芯片,选的是为开微电子的WK2114。WK2114可以只用主MCU的一个串口,扩展出4个子串口。
二、WK2114核心特性速览
WK2114是将一个标准UART扩展为4个增强型UART的芯片。
- 主接口:与MCU连接,支持波特率自适应(最高2Mbps)
- 子串口:4个,每个均可独立设置波特率(最高2Mbps)、数据位、停止位、校验
- FIFO:每个子串口独立的256级收发FIFO,可编程
- 中断:全局中断引脚IRQ,低电平有效;每个子串口有独立中断标志
- 休眠:支持自动休眠/唤醒,低功耗应用
- 封装:SOP20,宽电压2.5~5.0V
在本次设计中,我们让WK2114扩展出4个子串口,用3个分别连接UM220-IV、E22-LoRa、RS232电平转换芯片。主串口接MSP430F149的UART0,UART1仍然接T8650模块。
二、晶振及电源
电源:WK2114和MSP430使用同一3.3V电源;T8650需要5V(VCC)和12V(VCCPA);UM220-IV需要3.3V;E22需要5V。
晶振:WK2114外接11.0592MHz(或12M)晶振(并联1MΩ电阻),用于产生精确波特率。
三、主MCU与WK2114的通信
WK2114的主接口是标准UART,但传输的是命令/数据帧,而不是原始串口数据。所有对子串口的读写,都要通过特定的命令字节。
命令格式分为:写寄存器、读寄存器、写FIFO、读FIFO。
使用时,需要先通过配置模式初始化每个子串口的参数。
实际使用时WK2114的主串口波特率最好是子串口波特率的4倍以上,比如4个子串口波特率均为9600,则主串口波特率至少38400。
四、WK2114的初始化流程
- 硬件复位:拉低RST引脚至少10ms,然后拉高。
- 波特率自适应:主MCU发送
0x55,WK2114自动锁定主串口波特率。 - 配置子串口:切换到配置模式,直接通过读写寄存器方式来设置每个子串口的波特率、数据格式、FIFO。
具体配置WK2114手册上都有例程,需要的可以联系我。
五、中断处理与数据流
WK2114的IRQ引脚会在子串口有接收数据、发送FIFO空、超时等事件时拉低。我们将IRQ连接到MSP430的外部中断,在中断服务程序中:
- 读取全局中断标志寄存器(GIFR),确定是哪个子串口产生了中断。
- 读取对应子串口的中断标志寄存器(SIFR),确定是接收FIFO触发、超时还是发送空。
- 处理数据:例如接收FIFO非空,则读取FDAT寄存器(或使用读FIFO命令)取出数据,放入各自的环形缓冲区。
- 清除中断标志。
以上数据处理也可以在主循环里使用查询方式。
六、硬件设计注意事项
- WK2114的晶振必须并联1MΩ电阻,否则可能不起振。
- 主串口波特率自适应:上电后先发送0x55,之后不要再改变波特率,否则需要硬件复位。
- 子串口波特率计算:参考手册中的公式,使用11.0592MHz(或12M)晶振可得到常用波特率(9600, 19200, 115200等)。
- LoRa模块E22的AUX引脚:可用于指示模块状态,建议连接到MSP430的一个GPIO,判断是否可以发送新数据。
- 电源去耦:T8650发射时电流大(峰值约3A),需单独加稳压和滤波大电容,避免拉低其他模块电压。
通过一片WK2114,MSP430F149这样资源有限的老芯片也能同时驱动多个串口设备。
如果你也遇到串口不够用的问题,欢迎在评论区交流。
后续干货不断,咱们一起在单片机的世界里,共同进步。
更多推荐
所有评论(0)