MSP430——UART(四)

最近由于在做去年送药小车国赛题,需要使用到MSP430和OPENMV之间的通信,故着手看看MSP430的串口模式。

第一步:IO口配置

我使用的这款芯片是MSP430F5529,他的TX端设置在P3.3,RX端设置在P3.4,故首先第一步开启两个IO口的输入。

//P3.3 = USCI_A0 TXD
    GPIO_setAsPeripheralModuleFunctionInputPin(
        GPIO_PORT_P3,
        GPIO_PIN3|GPIO_PIN4
        );

第二步:串口配置

USCI_A_UART_initParam param1 = {0};
    param1.selectClockSource = USCI_A_UART_CLOCKSOURCE_SMCLK;
    param1.clockPrescalar = 78;
    param1.firstModReg = 2;
    param1.secondModReg = 0;//配置波特率
    param1.parity = USCI_A_UART_NO_PARITY;//无校验位
    param1.msborLsbFirst = USCI_A_UART_LSB_FIRST;//有无停止位
    param1.numberofStopBits = USCI_A_UART_ONE_STOP_BIT;//1位停止位
    param1.uartMode = USCI_A_UART_MODE;//串口模式
    param1.overSampling = USCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;//暂时不懂

    if (STATUS_FAIL == USCI_A_UART_init(USCI_A0_BASE, &param1)){
        return;
    }

    //Enable UART module for operation
    USCI_A_UART_enable(USCI_A0_BASE);//使能串口UART A0
    USCI_A_UART_clearInterrupt(USCI_A0_BASE,USCI_A_UART_RECEIVE_INTERRUPT);//清除中断标志位
    USCI_A_UART_enableInterrupt(USCI_A0_BASE,USCI_A_UART_RECEIVE_INTERRUPT );//打开串口接受中断
    // Enable global interrupt
    __bis_SR_register(GIE);

    //For debugger
    __no_operation();

一定要记得打开全局中断!!

关于波特率的配置,这里可以查具体的手册。所采用的时钟不同,寄存器所设置的值也不同。这里我采用的是12MHZ的MCLK,因此,我是根据这个频率下对波特率进行配置的。具体可参考下图
在这里插入图片描述
对应于用户指南的1040页。

第三步:中断服务函数

#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
    Rx_buf = USCI_A_UART_receiveData(USCI_A0_BASE);
    Openmv_Receive_Data(Rx_buf);

}

第四步:调用函数,开始收发

uint8_t USCI_A_UART_receiveData (uint16_t baseAddress)
void USCI_A_UART_transmitData (uint16_t baseAddress, uint8_t transmitData)

暂时只用到这个地步,后续有其他该方面应用再继续补充…

补充使用过程中的一点,后续由于把主频升到16MHZ,导致出现一个问题,就是不论发送什么,接受的都是0.

后续通过查阅资料,发现问题原因在于波特率的设置问题。在前文我们提到过,设置波特率根据数据手册寄存器版本36.3.3,大概953页左右的图进行设置,今天发现,这个表存在两个版本。见下图。

图一
在这里插入图片描述
这里不同在于UCOS寄存器的值不同。继续查阅数据手册可以发现存在这样一句话,

在这里插入图片描述
即,在低频模式下,我们设置的UCOS为0,因而参看上面的图一,而UCOS为1是,选择过采样模式。
之间文章中对于串口配置有一个选项当时给的注释是不太懂

param1.overSampling = USCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;//暂时不懂

这里才用的就是过采样生成。现在疑团解开了!
后续还有更深的理解会继续更新…

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值