我根据官方例程更改了一些配置想实现基于MSP430FR5994的UART发送数据,却发现串口助手接受皆为乱码。

以下为我更改后的代码。
#include "driverlib.h"
static char String1[] = { "Hello World\r\n" };
void main (void)
{
//Stop Watchdog Timer
WDT_A_hold(WDT_A_BASE);
GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN0);
PMM_unlockLPM5();
//P3.4 = USCI_A0 TXD
GPIO_setAsPeripheralModuleFunctionInputPin(
GPIO_PORT_P2,
GPIO_PIN0,
GPIO_TERNARY_MODULE_FUNCTION
);
EUSCI_A_UART_initParam param = {0};
param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
param.clockPrescalar = 6;
param.firstModReg = 13;
param.secondModReg = 14;
param.parity = EUSCI_A_UART_NO_PARITY;
param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
param.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT;
param.uartMode = EUSCI_A_UART_MODE;
param.overSampling = EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;
if (STATUS_FAIL == EUSCI_A_UART_init(EUSCI_A0_BASE, ¶m)) {
return;
}
//Enable UART module for operation
EUSCI_A_UART_enable(EUSCI_A0_BASE);
//Initialize and Setup DMA Channel 0
/*
* Configure DMA channel 0
* Configure channel for repeated single transfers
* DMA interrupt flag will be set after every 12 transfers
* Use DMA Trigger Source 1 (TA0CCR0IFG)
* Transfer Byte-to-byte
* Trigger Upon Rising Edge of Trigger Source Signal
*/
DMA_initParam param1 = {0};
param1.channelSelect = DMA_CHANNEL_0;
param1.transferModeSelect = DMA_TRANSFER_REPEATED_SINGLE;
param1.transferSize = (sizeof String1 - 1);
param1.triggerSourceSelect = DMA_TRIGGERSOURCE_1;
param1.transferUnitSelect = DMA_SIZE_SRCBYTE_DSTBYTE;
param1.triggerTypeSelect = DMA_TRIGGER_RISINGEDGE;
DMA_init(¶m1);
/*
* Configure DMA channel 0
* Use String1 as source
* Increment source address after every transfer
*/
DMA_setSrcAddress(DMA_CHANNEL_0,
(uint32_t)(uintptr_t)String1,
DMA_DIRECTION_INCREMENT);
/*
* Base Address of the DMA Module
* Configure DMA channel 0
* Use UART TX Buffer as destination
* Don't move the destination address after every transfer
*/
DMA_setDstAddress(DMA_CHANNEL_0,
EUSCI_A_UART_getTransmitBufferAddress(EUSCI_A0_BASE),
DMA_DIRECTION_UNCHANGED);
//Enable transfers on DMA channel 0
DMA_enableTransfers(DMA_CHANNEL_0);
//For DMA0 trigger
Timer_A_initCompareModeParam initCompareModeParam = {0};
initCompareModeParam.compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_2;
initCompareModeParam.compareInterruptEnable = TIMER_A_CAPTURECOMPARE_INTERRUPT_DISABLE;
initCompareModeParam.compareOutputMode = TIMER_A_OUTPUTMODE_OUTBITVALUE;
initCompareModeParam.compareValue = 1;
Timer_A_initCompareMode(TIMER_A0_BASE, &initCompareModeParam);
//Timer sourced by SMCLK, starts in up-mode
Timer_A_initUpModeParam initUpModeParam = {0};
initUpModeParam.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;
initUpModeParam.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_1;
initUpModeParam.timerPeriod = 0x8192;
initUpModeParam.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_DISABLE;
initUpModeParam.captureCompareInterruptEnable_CCR0_CCIE =
TIMER_A_CAPTURECOMPARE_INTERRUPT_DISABLE;
initUpModeParam.timerClear = TIMER_A_SKIP_CLEAR;
initUpModeParam.startTimer = true;
Timer_A_initUpMode(TIMER_A0_BASE, &initUpModeParam);
EUSCI_A_UART_transmitData(EUSCI_A0_BASE,
UCA0TXBUF);
// //Enter LPM3
// _BIS_SR(LPM3_bits);
__delay_cycles(500000);
GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
}