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.

[参考译文] MSP430FR2153:UART 驱动程序

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/739666/msp430fr2153-uart-drivers

器件型号:MSP430FR2153
主题中讨论的其他器件: MSP430FR2355MSP430WARE

您好!

      我正在寻找适用于 msp430fr2153和 msp430fr2355的 UART 驱动程序。 我已经在 CCS v8.2中浏览了 Resource Explorer、我只找到了驱动程序的用户指南、但在驱动程序上没有找到任何示例。

B.R.

古拉夫

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Gourav、

    不确定您在哪里查找它、例如在 MSP430Ware -v:3.80.05.04 >> Libraries >> Driver Library >> MSP430FR2xx_4xx >>示例项目>> EUSCI_A_UART 下、您可以找到驱动程序库示例。

    您可以在 MSP430Ware 中的器件路径之后找到更多有关寄存器级的示例。 MSP430Ware -v:3.80.05.04 >>器件>> MSP430FR2xx_4xx >>器件名称...

    此致

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    请查看此示例 :dev.ti.com/.../
    或者转到其他 MCU430系列以查找其他示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Peter、
    我打算使用2个 UART、该驱动程序支持将2个 UART 用于 msp430fr2153和 msp430fr2355控制器。
    B.R.
    古拉夫
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的。

    最近、我体验了 FR2355和基于 ROM 的驱动程序库、作为我处理的更大项目的先决条件。

    两个独立的 UART 发送通道(Tx)被设定为具有两个不同的波特率。

    我分别在24MHz 和16MHz MCLK 下测试了这一点、 SMCLK 被用作两个 BRCLK 源。

    请在下面找到一个测试程序。

    #include "driverlib.h"
    #include "rom_driverlib.h"
    
    #define CS_MCLK_kHz 24000
    
    #define GPIO_PORT_UCA0TXD GPIO_PORT_P1
    #define GPIO_PIN_UCA0TXD GPIO_PIN7
    #define GPIO_Function_UCA0TXD GPIO_PRIMARY_MODULE_Function
    #define GPIO_PORT_UCA0RXD GPIO_PORT_P1
    #define GPIO_PIN_UCA0RXD GPIO_PIN6
    #define GPIO_Function_UCA0RXD GPIO_PRIMARY_MODULE_Function
    
    #define GPIO_PORT_UCA1TXD GPIO_PORT_P4
    #define GPIO_PIN_UCA1TXD GPIO_PIN3
    #define GPIO_Function_UCA1TXD GPIO_PRIMARY_MODULE_Function
    #define GPIO_PORT_UCA1RXD GPIO_PORT_P4
    #define GPIO_PIN_UCA1RXD GPIO_PIN2
    #define GPIO_Function_UCA1RXD GPIO_PRIMARY_MODULE_Function
    
    
    void CS_clockInit (void)
    {
    ROM_CS_TurnOnXT1LF ( CS_XT1_DRIVE_3);
    
    #if (CS_MCLK_kHz > 16000)
    FRAMCTL_configureWaitStateControl (FRAMCTL_ACCESS_TIME_CYCLESS_2);
    #Elif (CS_MCLK_kHz > 8000)
    FRAMCTL_configureWaitStateControl (FRAMCTL_ACCESS_TIME_CYCESS_1);
    #endif
    
    ROM_CS_initClockSignal (CS_FLLREF、CS_REFOCLK_SELECT、CS_CLOCK_DEVIDER_1);
    CS_initFLLPam CSparam ={0};
    CS_initFLLCalculateTrim ( CS_MCLK_k_kHz,((uint16_t) CS_MCLK_kHz/32.77),&CSparam );
    
    ROM_CS_clearAllOscFlagsWithTimeout (1000);
    }
    
    
    
    void inline CS_SMCLKinit (void)
    {
    ROM_CS_initClockSignal (CS_SMCLK、CS_DCOCLKDIV_select、CS_clock_divider);
    }
    
    
    
    void inline XT1_GPIOinit (void)
    {
    ROM_GPIO_setPeripheralModuleFunctionInputPin (
    GPIO_PORT_P2、GPIO_PIN6 + GPIO_PIN7、GPIO_secondary 模块_function );
    }
    
    
    空内联 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
    );
    }
    
    
    
    void 内联 UCA1UART_GPIOinit (void)
    {
    //配置 UART 引脚
    GPIO_setPeripheralModuleFunctionInputPin (
    GPIO_PORT_UCA1TXD、
    GPIO_PIN_UCA1TXD、
    GPIO_Function_UCA1TXD
    );
    GPIO_setPeripheralModuleFunctionInputPin (
    GPIO_PORT_UCA1RXD、
    GPIO_PIN_UCA1RXD、
    GPIO_Function_UCA1RXD
    );
    }
    
    
    void EUSCI_A0_UARTinit (void)
    {
    //配置 UART0
    //SMCLK = 12MHz、波特率= 57600
    //LSBfirst、奇偶校验编号、stop_bits 1
    //UCBRx = 13、UCBRFx = 0、UCBRSx = 0x25、UCOS16 = 1 (过采样= 1)
    EUSCI_A_UART_initParam param ={0};
    param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
    param.clockPrescalar = 13;
    param.firstModReg = 0;
    param.secondModReg = 0x25;
    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 = ROM_EUSCI_A_UART_init (EUSCI_A0_BASE、&param)){
    //return;
    }
    ///EUSCI_A_UART_DisableInterrupt (EUSCI_A0_BASE、EUSCI_A_UART_Transmit 中断);
    ROM_EUSCI_A_UART_ENABLE (EUSCI_A0_BASE);
    
    ROM_EUSCI_A_UART_clearInterrupt (EUSCI_A0_BASE、EUSCI_A_UART_Transmit _INTERRUPT);
    ROM_EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE、EUSCI_A_UART_Transmit _INTERRUPT);
    }
    
    
    
    void EUSCI_A1_UARTinit (void)
    {
    //配置 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 = ROM_EUSCI_A_UART_init (EUSCI_A1_BASE、&param)){
    //return;
    }
    ///EUSCI_A_UART_DisableInterrupt (EUSCI_A0_BASE、EUSCI_A_UART_Transmit 中断);
    ROM_EUSCI_A_UART_ENABLE (EUSCI_A1_BASE);
    
    ROM_EUSCI_A_UART_clearInterrupt (EUSCI_A1_base、EUSCI_A_UART_Transmit _interrupt);
    ROM_EUSCI_A_UART_enableInterrupt (EUSCI_A1_base、EUSCI_A_UART_Transmit _interrupt);
    }
    
    常量 uint8_t TXbuffer0[40]="UART0采样消息57600\n";
    常量 uint8_t TXbuffer1[40]="UART1采样消息19200\n";
    volatile uint8_t UART0_ByteCounter = 0;
    volatile uint8_t UART1_byteCounter = 0;
    
    
    int main (void){
    
    ROM_WDT_A_HOLD (WDT_A_base);
    xt1_GPIOinit();
    UCA0UART_GPIOinit();
    UCA1UART_GPIOinit();
    ROM_PMM_unlockLPM5 ();
    
    cs_clockInit();
    CS_SMCLKinit();
    
    EUSCI_A0_UARTinit();
    EUSCI_A1_UARTIinit ();
    
    
    
    
    _ bis_SR_register (GIE); //启用中断
    
    while (1)
    {
    IF (((UART0_ByteCounter = 0)&&(UART1_byteCounter = 0))
    {
    _DELAY_CYCLES (200000);
    UART0_ByteCounter = 1; //UART0传输初始化
    UCA0TXBUF = TXbuffer0[0]; //UART0传输初始化
    UART1_byteCounter = 1; //UART1传输初始化
    UCA1TXBUF = TXbuffer1[0]; //UART1传输初始
    化}
    
    _bis_SR_register (LPM3_bits); //Enter LPM3 (待机)
    }
    }
    
    
    
    #pragma vector=USCI_A0_VECTOR
    __INTERRUPT
    void EUSCI_A0_ISR (void)
    {
    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:中断; //传输完成
    }
    }
    
    
    
    #pragma vector=USCI_A1_vector
    __interrupt
    void EUSCI_A1_ISR (void)
    {
    switch (__evo_in_range (UCA1IV、USCI_UART_UCTXCPTIFG))
    {
    USCI_NONE 案例:中断;
    USCI_UART_UCRXIFG 案例:中断; //接收缓冲区已满
    USCI_UART_UCTXIFG 案例: //发送缓冲区为空
    {
    if (TXbuffer1[UART1_byteCounter]!= 0)
    {
    UCA1TXBUF = TXbuffer1[UART1_byteCounter];
    UART1_byteCounter++;
    }
    其他
    {
    UART1_byteCounter = 0;
    _BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);
    }
    
    }
    中断;
    案例 USCI_UART_UCSTTIFG:中断; //接收到起始位
    案例 USCI_UART_UCTXCPTIFG:中断; //传输完成
    }
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Gourav、
    建议的代码示例是否对您有所帮助? 您是否需要有关此方面的进一步支持? 如果不是、请关闭螺纹。 非常感谢。

    此致
    Peter
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Peter、

                 感谢您的回复、 Resource Explorer 中的示例代码非常有用。

    B.R.

    古拉夫

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Gourav、
    非常感谢您提供的信息。 因此、我将关闭该线程。

    此致
    Peter