目录
串口知识:
MSP432的串口有4个
串口 | 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_A模块的串口特性(通过配置结构体实现)
串口相关函数:
uart.h中:
1.初始化串口模块:
UART_initModule(EUSCI_AX_BASE, &uartCofig);
EUSCI_AX_BASE:串口号,从0到1;
&uartCofig:结构体名字,如下加粗加红部分
eg:const eUSCI_UART_Config uartCofig =
{
EUSCI_A_UART_CLOCKSOURCE_SMCLK, // SMCLK Clock Source
26, // BRDIV = 26
0, // UCxBRF = 0
111, // UCxBRS = 111
EUSCI_A_UART_NO_PARITY, // No Parity
EUSCI_A_UART_LSB_FIRST, // MSB First
EUSCI_A_UART_ONE_STOP_BIT, // One stop bit
EUSCI_A_UART_MODE, // UART mode
EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION, // Oversampling
};
eusci_calcBaudDividers((eUSCI_UART_Config *)&uartCofig, 115200); //配置波特率
#endif
//3.初始化串口
UART_initModule(EUSCI_A1_BASE, &uartCofig);
2.使能(开启)串口
UART_enableModule(EUSCI_AX_BASE);
EUSCI_AX_BASE:串口号,从0到1;
3.开启串口相关中断
UART_enableInterrupt(EUSCI_AX_BASE, EUSCI_X_INTERRUPT);
EUSCI_AX_BASE:串口号
EUSCI_X_INTERRUPT对应的接收中断类型:
4.获取数据
UART_receiveData(EUSCI_Ax_BASE)
可用printf
5.发送数据
UART_transmitData(EUSCI_Ax_BASE,Data_8bit)
可用scanf
interrupt.h中:
6.开启串口端口中断
Interrupt_enableInterrupt(INT_EUSCIAX);
7.开启总中断
Interrupt_enableMaster();
串口收发
一般配置步骤
-
配置时钟
SysInit();
配置时钟只用在主函数配置一次就够了
-
配置GPIO复用
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2, GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);
-
配置结构体
#ifdef EUSCI_A_UART_7_BIT_LEN //固件库v3_40_01_02 //默认SMCLK 48MHz 比特率 115200 const eUSCI_UART_ConfigV1 uartCofig = { EUSCI_A_UART_CLOCKSOURCE_SMCLK, // SMCLK Clock Source 26, // BRDIV = 26 0, // UCxBRF = 0 111, // UCxBRS = 111 EUSCI_A_UART_NO_PARITY, // No Parity EUSCI_A_UART_LSB_FIRST, // MSB First EUSCI_A_UART_ONE_STOP_BIT, // One stop bit EUSCI_A_UART_MODE, // UART mode EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION, // Oversampling EUSCI_A_UART_8_BIT_LEN // 8 bit data length }; eusci_calcBaudDividers((eUSCI_UART_ConfigV1 *)&uartCofig, 115200); //配置波特率 #else //固件库v3_21_00_05 //默认SMCLK 48MHz 比特率 115200 const eUSCI_UART_Config uartCofig = { EUSCI_A_UART_CLOCKSOURCE_SMCLK, // SMCLK Clock Source 26, // BRDIV = 26 0, // UCxBRF = 0 111, // UCxBRS = 111 EUSCI_A_UART_NO_PARITY, // No Parity EUSCI_A_UART_LSB_FIRST, // MSB First EUSCI_A_UART_ONE_STOP_BIT, // One stop bit EUSCI_A_UART_MODE, // UART mode EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION, // Oversampling }; eusci_calcBaudDividers((eUSCI_UART_Config *)&uartCofig, 115200); //配置波特率 #endif
-
初始化串口
UART_initModule(EUSCI_A1_BASE, &uartCofig);
-
开启串口
UART_enableModule(EUSCI_A1_BASE);
-
开启串口相关中断
UART_enableInterrupt(EUSCI_A1_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT);
-
开启串口端口中断
Interrupt_enableInterrupt(INT_EUSCIA1);
-
开启总中断
Interrupt_enableMaster();
-
编写串口中断函数
void EUSCIA1_IRQHandler(void) { uint32_t status = UART_getEnabledInterruptStatus(EUSCI_A1_BASE); if(status & EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG) //接收中断 { UART_transmitData(EUSCI_A1_BASE, MAP_UART_receiveData(EUSCI_A1_BASE)); //发送数据 } }
声明:本次学习参考UP主m_Rna