您好,
我正在尝试在 MSP430FR2422中配置 UART 协议。 下面是随附的代码。 我正在尝试在 P1.4 (UCA0TXD)和 P1.5 (UCA0RXD)上配置它。 但在这里,我无法在 Tera Term 屏幕上获取任何内容。 在交叉检查某些时间后,我无法找到问题。 因此、如果有人能提供帮助、那将会很有帮助。
#include "driverlib.h"//用于驱动程序库
#include
//首先我们将讨论引脚分配
#define GPIO_PORT_UCA0TXD GPIO_PORT_P1
#define GPIO_PIN_UCA0TXD GPIO_PIN4
#define GPIO_FUNCITY_UCA0TXD GPIO_PRIMARY_MODULE_FUNCTION
#define GPIO_PORT_UCA0RXD GPIO_PORT_P1
#define GPIO_PIN_UCA0RXD GPIO_PIN5
#define GPIO_FUNCITY_UCA0RXD GPIO_PRIMARY_MODULE_FUNCTION
//现在我们将使用折页功能配置 UART 引脚,并在此处进行内联,因为内联函数只要执行换行,它就会用函数调用中存在的代码替换主函数调用。
//此处请注意,函数不会进行实际调用,只是会保存一些寄存器并节省一些可能是官方的时间。
void 内联 UCA0UART_GPIOinit (void)
{
//配置 UART 引脚
GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_UCA0TXD、
GPIO_PIN_UCA0TXD、
GPIO_Function_UCA0TXD
);
GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_UCA0RXD、
GPIO_PIN_UCA0RXD、
GPIO_Function_UCA0RXD
);
}
//现在我们将使用声明函数
//此函数包含某些参数,这些参数在下面根据它们的声明进行了解释,这些参数是初始化所必需的
空 EUSCI_A0_UARTinit (空)
{
//配置 UART0
//SMCLK = 12MHz、波特率= 19200
//LSBfirst、奇偶校验编号、stop_bits 1
//UCBRx = 39、UCBRFx = 1、UCBRSx = 0x00、UCOS16 = 1 (过采样= 1)
EUSCI_A_UART_initParam param ={0};
param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
param.clockPrescalar = 39;
param.firstModReg = 1;
param.secondModReg = 0x00;
param.parity = EUSCI_A_UART_NO_parity;
param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
param.numerofStopBits = EUSCI_A_UART_Oe_STOP_BIT;
param.uartMode = EUSCI_A_UART_MODE;
param.oversaming= EUSCI_A_UART_oversaming_BAUDRATE_generation;
if (STATUS_FAIL = EUSCI_A_UART_init (EUSCI_A0_BASE、¶m)){
返回;
}
//首先启用基址
EUSCI_A_UART_ENABLE (EUSCI_A0_BASE);
//then we will clear the first
EUSCI_A_UART_clearInterrupt (EUSCI_A0_BASE、
EUSCI_A_UART_Transmit 中断);
//启用 USCI_A0 RX 中断
EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE、
EUSCI_A_UART_Transmit 中断);
}
const uint8_t TXbuffer0[40]="UART0 sample message 115200\n"/ constant、因为它的大小将固定且
volatile uint8_t UART0_ByteCounter = 0;// volatile 可实现快速存储器存取、这有时是必需的。
//现在它是主要的引信声明
int main (void){
WDT_A_HOLD (WDT_A_base);
UCA0UART_GPIOinit();
PMM_unlockLPM5 ();
//现在我们需要在 main 中添加时钟
CS_initClockSignal (CS_ACLK、CS_REFOCLK_select、CS_Clock_divider);
//set SMCLK = DCO、分频器为1
CS_initClockSignal (CS_SMCLK、CS_DCOCLKDIV_SELECT、CS_CLOCK _DIVIDER_1);
//set MCLK = DCO、分频器为1
CS_initClockSignal (CS_MCLK、CS_DCOCLKDIV_SELECT、CS_CLOCK _DIVIDER_1);
EUSCI_A0_UARTinit();
//启用全局中断
_enable_interrupt ();
while (1)
{
unsigned long int i;
if (UART0_BYTECounter=0)
{
for (i=0;i<100000;i++);
UART0_BYteCounter=1;//重新发送该值、除非没有数据、否则它将继续循环、以便 TX 缓冲区将传递到 Rx 缓冲区
UCA0TXBUF=TXbuffer0[0];
}
}
}
//现在,如果我们发送一些数据,那么数据应首先接收,我们将编写中断服务例程
#pragma vector=USCI_A0_Vector
_interrupt
空 EUSCI_A0_ISR (空)
{
switch (__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))
{
USCI_NONE 案例:中断;
案例 USCI_UART_UCRXIFG:中断;//接收缓冲区已满
案例 USCI_UART_UCTXIFG://发送缓冲区为空
{
if (TXbuffer0[UART0_BYTECounter]!= 0)
{
UCA0TXBUF = TXbuffer0[UART0_BYTECounter];
UART0_ByteCounter++;
}
其他
{
UART0_ByteCounter = 0;
//_BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);
}
}
中断;
案例 USCI_UART_UCSTTIFG:中断;//接收到起始位
案例 USCI_UART_UCTXCPTIFG:中断;//发送完成
}
}