所用单片机型号:MSP432P401r
今日继续我的MSP432电赛速成之路,今日学习的是:
串口收发
因为KEIL仿真需要占用一个串口,所以此处学习多路的串口收发,
以达到既能仿真,又不影响MSP432向上位机发送串口数据。
串口通讯对于对于单片机的调试运行也有着非常重要的作用,
通过UART可以实现多设备的通讯,实现更复杂功能的实现。
UART的基本原理在此不作过多的赘述.
此文章主要围绕欲实现的功能是:
向上位机用 串口A2 收发上位机传来的数据,同时还能用 KEIL在另一个 串口A0 进行仿真。
用到的绿色盒子是 USB转RS232/RS485/TTL UART通信模块
芯片型号:MSP432P401R
https://download.csdn.net/download/_/?spm=1001.2014.3001.5503
查阅芯片原理图发现 EUSCI_A0_BASE 串口是通过跳线帽连接到Debug调试器的:

左侧的是连接了仿真芯片,右边是MSP432芯片,理论上拔掉跳线帽是可以使用A0串口对外收发了,但下载调试就会出问题的,因此多数时候,除了不在仿真时向上位机发送数据,其余情况不建议使用A0串口。
左侧的仿真芯片又连接在了USB上,因此与USB对应的、插入USB能给上位机传数据的串口就是A0

所以我们不能再去 使用 A0串口来向上位机发送我们的数据了,因为A0是可能要被KEIL仿真占用的。
于是我们需要寻找其余串口来发送数据给上位机:
此处我将 USB转RS232/RS485/TTL UART通信模块 连接了EUSCI_A2_BASE串口的 TXD与RXD
此处有一接线方式的注意点十分重要:
USB转RS232/RS485/TTL UART通信模块 的 TXD 要接串口的 RXD
USB转RS232/RS485/TTL UART通信模块的 RXD 要接串口的 TXD
PS:如何找到launchpad上的 串口A1的俩个引脚:EUSCI_A1_BASE

1~5在uart.h库文件中,6~7在interrupt.h库文件中.
如需使用,请勿忘记调用添加头文件
1.初始化串口模块:
讯享网
2.串口使能模块:
讯享网
3.开启串口相关中断:

4.获取数据:
讯享网
5.发送数据:
6.开启串口端口中断:
讯享网
7.开启总中断:
0.配置时钟
1.配置GPIO复用
2.配置结构体
3.初始化串口
4.开启串口
5.开启串口相关中断
6.开启串口端口中断
7.开启总中断
8.编写UART ISR
PS: 程序在读取寄存器后会自动清除中断标志位。
我们先新建打开一个空项目,空项目例程在此获取:
https://download.csdn.net/download/_/?spm=1001.2014.3001.5503
如若这个链接获取不了例程
就从bilibili的mRNA的视频去获取,这里贴出视频传送门,以及空项目工程路径:
(新)1-1 课程资料获取 配置开发环境_哔哩哔哩_bilibili

找到了空项目复制到别处并改名,就可以自己进行编程了;
1.首先把例程的usart.c中的 串口配置函数完整复制下来:
复制整个void uart_inint(uint32_t baudRate )
这个函数括号中的参数 uint32_t baudRate 表示的是要设置的波特率

2.粘贴在同一头文件下,并改名:
我改成了 void uart2_init(uint32_t baudRate)
表示对串口A2进行得初始化.

3.别忘了对其在usart.h文件进行声明:
不声明就没法调用哦!

对刚才复制的函数是用来初始化A0的,为了将其改为初始化A2的函数,
我们还需要进行如下一些参数设置的更改:
波特率设置为,初始化的引脚改为A2串口的引脚,开启A2串口引脚的复用
为此我们还要按以下步骤来配置串口结构体:

4.首先需要计算配置数:
就是这些蓝色框出来的四个参数,它们是需要根据时钟频率和我要的波特率来计算的。
此处时钟48Mhz,波特率

5.于是我们先找到TI官方提供的方便计算的网站:
说明:这个网址是在官方SDK库下的例程代码文件夹里找到的,文件路径如下(很长):
(下面我会贴网址直接传送就好了,此处我只是介绍这是哪里来的):
此网址我会在下面贴出来,各位看官可以不去找他。
讯享网

就在这个c文件中的注释里可以找到这个网址
此处直接贴出来传送:
MSP430 USCI/EUSCI UART Baudrate Calculator
6.如此设置好后再点击计算就可以了:

7.将刚才计算好的数值填充进我们最开始复制改名的串口函数:

8.修改函数里面的GPIO复用,开启相关中断:

9.以下配置都加在最开始复制改名的串口函数里面就行了:
此步的所有语句我是放在函数的最后几行的
10编写串口服务函数:
这个函数要有声明,或者像我一样直接写在mian函数下面
讯享网
11.对printf()这个函数,我们需要的话可以进行一些更改:
因为printf()函数调用的是fputc()函数,所以我们需要找到fputc()函数进行更改:
至于printf()函数在嵌入式的介绍,以及fputc()函数的关系,我在这篇文章有所探讨学习:
https://blog.csdn.net/_/article/details/?spm=1001.2014.3001.5502
12.更改fputc()函数,使其对应我们想要设置的串口:
PS:我们可以在空白处打出fputc 然后右键鼠标去找到他
测试串口程序编写效果:
选对端口号,插上后直接发现printf()函数能用串口A2进行输出了:
说明对Printf()函数的改动是有效的

随后由上位机发送数据进行对串口A2的测试
发现串口A2能正常 接——化——发
说明串口2可以正常使用:

最后希望各位看官点赞收藏支持一下!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/172760.html