MSP432学习笔记3:多路串口通信收发

所用单片机型号:MSP432P401r

今日继续我的MSP432电赛速成之路,今日学习的是:

串口收发                                                                                     

因为KEIL仿真需要占用一个串口,所以此处学习多路的串口收发,

以达到既能仿真,又不影响MSP432向上位机发送串口数据。

串口通讯对于对于单片机的调试运行也有着非常重要的作用,

通过UART可以实现多设备的通讯,实现更复杂功能的实现。

UART的基本原理在此不作过多的赘述.

此文章主要围绕欲实现的功能是:

向上位机用 串口A2 收发上位机传来的数据,同时还能用 KEIL在另一个 串口A0 进行仿真。

用到的绿色盒子是  USB转RS232/RS485/TTL UART通信模块

芯片型号:MSP432P401R

MSP432学习笔记3:多路串口通信收发_第1张图片

零、整体工程下载传送门:

https://download.csdn.net/download/qq_64257614/87793549?spm=1001.2014.3001.5503

 一、MSP432串口通信基础:

MSP432P401R有四个串口:

MSP432串口资源
串口 RXD TXD
EUSCI_A0_BASE P1^2 P1^3
EUSCI_A1_BASE P2^2 P2^3
EUSCI_A2_BASE P3^2 P3^3
EUSCI_A3_BASE P9^6 P9^7

查阅芯片原理图发现  EUSCI_A0_BASE   串口是通过跳线帽连接到调试器的:

MSP432学习笔记3:多路串口通信收发_第2张图片

 所以我们不能再去 使用 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

UART模式的特性:

MSP432学习笔记3:多路串口通信收发_第3张图片

 串口uart相关库函数:

1~5在uart.h库文件中,6~7在interrupt.h库文件中.

如需使用,请勿忘记调用添加头文件

1.初始化串口模块:

uart_inintModule(EUSCI_Ax_BASE,&uartConfig);

2.串口使能模块:

UART_enableModule(EUSCI_Ax_BASE);

3.开启串口相关中断:

UART_enableinterrupt(EUSCI_Ax_BASE,EUSCI_x_INTERRUPT);

4.获取数据:

UART_receiveData(EUSCI_Ax_BASE);

5.发送数据:

UART_transmitData(EUSCI_Ax_BASE,Data_8bit);

6.开启串口端口中断:

interrupt_enableinterrupt(INT_EUSCIAx);

7.开启总中断:

interrupt_enableMaster(void);

串口收发的一般配置步骤:

                       0.配置时钟

                       1.配置GPIO复用

                       2.配置结构体

                       3.初始化串口

                       4.开启串口

                       5.开启串口相关中断

                       6.开启串口端口中断

                       7.开启总中断

                       8.编写UART ISR

             PS: 程序在读取寄存器后会自动清除中断标志位。

二、串口通信具体实现代码步骤解析:

我们先新建打开一个空项目,空项目例程在此获取:

https://download.csdn.net/download/qq_64257614/87781382?spm=1001.2014.3001.5503

 如若这个链接获取不了例程

就从bilibili的mRNA的视频去获取,这里贴出视频传送门,以及空项目工程路径:

(新)1-1 课程资料获取 配置开发环境_哔哩哔哩_bilibili

 MSP432学习笔记3:多路串口通信收发_第4张图片

找到了空项目复制到别处并改名,就可以自己进行编程了;

1.首先把例程的usart.c中的 串口配置函数完整复制下来:

复制整个void uart_inint(uint32_t baudRate  )

这个函数括号中的参数  uint32_t baudRate 表示的是要设置的波特率

MSP432学习笔记3:多路串口通信收发_第5张图片

 2.粘贴在同一头文件下,并改名:

我改成了 void uart2_init(uint32_t baudRate)

表示对串口A2进行得初始化.

MSP432学习笔记3:多路串口通信收发_第6张图片

 3.别忘了对其在usart.h文件进行声明:

不声明就没法调用哦!

MSP432学习笔记3:多路串口通信收发_第7张图片

 对刚才复制的函数是用来初始化A0的,为了将其改为初始化A2的函数,

我们还需要进行如下一些参数设置的更改:

波特率设置为115200,初始化的引脚改为A2串口的引脚,开启A2串口引脚的复用

为此我们还要按以下步骤来配置串口结构体:

4.首先需要计算配置数:

就是这些蓝色框出来的四个参数,它们是需要根据时钟频率和我要的波特率来计算的。

此处时钟48Mhz,波特率115200

MSP432学习笔记3:多路串口通信收发_第8张图片

5.于是我们先找到TI官方提供的方便计算的网站:

说明:这个网址是在官方SDK库下的例程代码文件夹里找到的,文件路径如下(很长):

(下面我会贴网址直接传送就好了,此处我只是介绍这是哪里来的):

此网址我会在下面贴出来,各位看官可以不去找他。

D:\MSP432_SDK\
simplelink_msp432p4_sdk_3_40_01_02\
examples\
nortos\
MSP_EXP432P401R\
driverlib\
uart_loopback_24mhz_brclk

MSP432学习笔记3:多路串口通信收发_第9张图片

 就在这个c文件中的注释里可以找到这个网址

此处直接贴出来传送:

MSP430 USCI/EUSCI UART Baudrate Calculator

 6.如此设置好后再点击计算就可以了:

MSP432学习笔记3:多路串口通信收发_第10张图片

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

MSP432学习笔记3:多路串口通信收发_第11张图片

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

 9.以下配置都加在最开始复制改名的串口函数里面就行了:

       此步的所有语句我是放在函数的最后几行的

//开启端口复用
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P3, GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);

//初始化串口
MAP_UART_initModule(EUSCI_A2_BASE, &uartConfig);

//开启串口模块
MAP_UART_enableModule(EUSCI_A2_BASE);

//开启串口相关中断
MAP_UART_enableInterrupt(EUSCI_A2_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT);


//开启串口端口中断
MAP_Interrupt_enableInterrupt(INT_EUSCIA2);

10编写串口服务函数:

这个函数要有声明,或者像我一样直接写在mian函数下面

//串口服务函数,把串口接收发回给电脑
void EUSCIA2_IRQHandler(void)
{
	uint32_t status = UART_getEnabledInterruptStatus(EUSCI_A2_BASE);
	
	if(status & EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG)   //接收中断
	{
		UART_transmitData(EUSCI_A2_BASE,MAP_UART_receiveData(EUSCI_A2_BASE));
	}
}

11.对printf()这个函数,我们需要的话可以进行一些更改:

因为printf()函数调用的是fputc()函数,所以我们需要找到fputc()函数进行更改:

至于printf()函数在嵌入式的介绍,以及fputc()函数的关系,我在这篇文章有所探讨学习:

https://blog.csdn.net/qq_64257614/article/details/130723079?spm=1001.2014.3001.5502

12.更改fputc()函数,使其对应我们想要设置的串口:

PS:我们可以在空白处打出fputc 然后右键鼠标去找到他
MSP432学习笔记3:多路串口通信收发_第12张图片

三、测试效果:

测试串口程序编写效果:

选对端口号,插上后直接发现printf()函数能用串口A2进行输出了:

说明对Printf()函数的改动是有效的

MSP432学习笔记3:多路串口通信收发_第13张图片

 随后由上位机发送数据进行对串口A2的测试

发现串口A2能正常   接——化——发

说明串口2可以正常使用:

MSP432学习笔记3:多路串口通信收发_第14张图片

 

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

你可能感兴趣的:(MSP432学习笔记,学习,笔记,嵌入式硬件)