MSP430FR2433 uart通信跑不通,想问问大佬们代码有问题吗。。(哭)

该代码段展示了在TexasInstruments的MSP430微控制器上如何初始化UART进行串行通信。首先,设置了DCO(数字控制振荡器)以产生1MHz的时钟信号,并配置SMCLK时钟源。然后,通过EUSCI模块初始化UART,设置波特率为9600,使用SMCLK时钟源,以及相应的分频和采样参数。程序还包括接收中断处理函数,用于接收并回传数据。
摘要由CSDN通过智能技术生成

#include "driverlib.h"
#define CS_SMCLK_DESIRED_FREQUENCY_IN_KHZ   1000        //DCO范围
#define CS_SMCLK_FLLREF_RATIO   30            //FLLN
uint32_t clockValue = 0;     //存储时钟值
uint8_t ReceiveData = 0;   //定义接收数据变量

int main(void) {
    WDTCTL = WDTPW | WDTHOLD;    // Stop watchdog timer
    PM5CTL0 &= ~LOCKLPM5;       //Unlock LPM5
    
    /*DCO频率为1MHz*/
    //DCO FLL 时钟源 REFO
    CS_initClockSignal(CS_FLLREF,CS_REFOCLK_SELECT,CS_CLOCK_DIVIDER_1); 
    //(30+1)*32768约等于1MHz
    CS_initFLLSettle(CS_SMCLK_DESIRED_FREQUENCY_IN_KHZ,CS_SMCLK_FLLREF_RATIO); 
    CS_clearAllOscFlagsWithTimeout(1000);
    //设置SMCLK时钟源为来自DCO,其他的时钟默认不改变
    CS_initClockSignal(CS_SMCLK,CS_DCOCLKDIV_SELECT,CS_CLOCK_DIVIDER_1);
    
    //设置GPIO口作为复用输出端口
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2,GPIO_PIN5+GPIO_PIN6,GPIO_SECONDARY_MODULE_FUNCTION);
    
    /*配置UART初始化设置,选择1MHz,波特率9600*/
    EUSCI_A_UART_initParam EUSCI_A_UART_initStucture = {0};
    //选择时钟源SMCLK
    EUSCI_A_UART_initStucture.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
    //设置时钟的分频值,设置UCBRx这个的值,对应表格是6
    EUSCI_A_UART_initStucture.clockPrescalar = 6;
    //设置UCBRFx标志位,查表得值为8
    EUSCI_A_UART_initStucture.firstModReg = 8;
    // 设置UCBRSx标志位,查表得值为0x20
    EUSCI_A_UART_initStucture.secondModReg = 0x20;
    //选择模式,设置UCOS16位置1,采样模式
    EUSCI_A_UART_initStucture.overSampling = EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;
    EUSCI_A_UART_initStucture.parity = EUSCI_A_UART_NO_PARITY;   //无校验位
    EUSCI_A_UART_initStucture.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;  //低位先行
    EUSCI_A_UART_initStucture.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT;  //1位停止位
    EUSCI_A_UART_initStucture.uartMode = EUSCI_A_UART_MODE;
    //上诉设置初始化
    EUSCI_A_UART_init(EUSCI_A1_BASE,&EUSCI_A_UART_initStucture);
 
     //开启UART使能
    EUSCI_A_UART_enable(EUSCI_A1_BASE);
    //清除接收中断标志位
    EUSCI_A_UART_clearInterrupt(EUSCI_A1_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG);   
    //开启UART的接收中断,非发送一连串字符不需要发送中断
    EUSCI_A_UART_enableInterrupt(EUSCI_A1_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT);
   __bis_SR_register(GIE); 
    while(1);
}

#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
      ReceiveData = EUSCI_A_UART_receiveData(EUSCI_A1_BASE);
      EUSCI_A_UART_transmitData(EUSCI_A1_BASE,ReceiveData);
    ReceiveData = EUSCI_A_UART_receiveData(EUSCI_A1_BASE);  
        EUSCI_A_UART_clearInterrupt(EUSCI_A1_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG);//清除中断标志位
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值