This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR2422:UART 试用

Guru**** 2383160 points
Other Parts Discussed in Thread: MSP430FR2422
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/986295/msp430fr2422-uart-try

器件型号:MSP430FR2422

您好,

我正在尝试在 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、&param)){
返回;

//首先启用基址
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:中断;//发送完成