我根据官方例程更改了一些配置想实现基于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); }