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.

[参考译文] CCS/MSP430FR2311:UART配置问题

Guru**** 2587365 points
Other Parts Discussed in Thread: MSP430FR2311, MSP-EXP430FR2311

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/616638/ccs-msp430fr2311-uart-configuration-problem-the

部件号:MSP430FR2311
主题中讨论的其他部件: MSP-EXP430FR2311

工具/软件:Code Composer Studio

您好,

我刚刚开始使用MSP430FR2311执行一个项目,我想通过UART接口将ADC结果发送到PC。

我发现收到的数据乱码。 我不知道原因是什么。

#include "driverlib.h"

uint16_t i;
uint8_t RXData = 1,TXData = 1;
uint8_t check = 0;

void main (void)
{
//停止看门狗
WDT_A_HOLD (WDT_A_BASE);

// XT1设置
GPIO_setAsPeripheralModuleFunctionInputPin (
GPIO端口P1,
GPIO _PIN7 + GPIO _PIN6,
GPIO主要模块功能
);

//将外部时钟频率设置为32.768 KHz
cs_setExternalClockSource(3.2768万);
//设置ACLK=XT1
Cs_initClockSignal (CS_ACLK,CS_XT1CLK_SELECT,CS_Clock_diver_1);
//在没有超时的情况下启动XT1
cs_turnOnXT1 (CS_XT1_DRIVE_0);
//设置SMCLK = DCO,频分器为1
CS_initClockSignal (CS_SMCLK,CS_DCOCLKDIV_SELECT,CS_CLock_DICROLATER_1);
//设置MCLK = DCO,分频器为1
CS_initClockSignal (CS_MCLK,CS_DCOCLKDIV_SELECT,CS_CLock_DICROLATER_1);

//配置UART引脚
//WFP 1.7 -Tx
GPIO_setAsPeripheralModuleFunctionOutputPin (
GPIO端口P1,
GPIO _PIN7,
GPIO主要模块功能
);
//WFP 1.6 -Rx
GPIO_setAsPeripheralModuleFunctionInputPin (
GPIO端口P1,
GPIO _PIN6,
GPIO主要模块功能
);

/*
*禁用GPIO开机默认高阻抗模式以激活
*以前配置的端口设置
*/
pm_unlockLPM5();

//配置UART

EUSCI_A_UART_initParam ={0};
param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
Param.clockPrescalar = 8;
Param.firstModReg = 0;
param.secondModReg = 6;
Param.parity = EUSCI_A_UART_NO_PARity;
Param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
StopBits的Param.number= EUSCI_A_UART_ONE_STOP_BIT;
Param.uartMode = EUSCI_A_UART_MODE;
Param.oversampling = EUSCI_A_UART_LOW频率_BAUDRATE_RELEA;

IF (STATUS_FAIL == EUSCI_A_UART_INIT (EUSCI_A0_BASE,&param))
{
返回;
}

EUSCI_A_UART_ENABLE (EUSCI_A0_BASE);

EUSCI_A_UART_clearInterrupt (EUSI_A0_base,
EUSCI_A_UART_receive中断);

//启用USI_A0 RX中断
EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE,
EUSCI_A_UART_receive中断); //启用中断

__enable_interrupit();
同时(1)
{
TXData = TXData + 1; //递增TX数据
//将数据加载到缓冲区
EUSCI_A_UART_HSDRData(EUSI_A0_BASE,
TXData);
while (检查!= 1)
{
;}

检查=0;}

}//**************************************************************************************************************


////
这是USI_A0中断向量服务例程。
////************************************************************************************************

#if defined(__TI_Compiler_version__)|| defined(__IAR_systems_icc__)
#pragma vector=USI_A0_vector
__interrupt
#Elif defined(__Gnuinu_)
__attribute__((interrupt (USI_A0_vector))
#endif
void EUSCI_A0_ISR(void)
{
Switch(__偶 数_in_range(UCA0IV,USI_UART_UCTXCPTIFG))
{
案例USI_NONE:中断;
案例USI_UART_UCRXIFG:
RXData = EUSCI_A_UART_receiveData (EUSCI_A0_BASE);
IF (!(RXData == TXData)) //检查值
{
同时(1)
{
;}

}
检查= 1;
中断;
案例USI_UART_UCTXIFG:中断;
案例USI_UART_UCSTIFG:中断;
案例USI_UART_UCTXCPTIFG:中断;
}
}

结果是:

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

    魏明您好!

    您似乎没有正确设置波特率。 请参阅 MSP430FR4xx和MSP430FR2xx系列用户指南中的表21-5 ,以获得在尝试达到特定波特率时设置寄存器的值的详细说明。

    参考此表以设置SMCLK =104.8756万 Hz时的11.52万波特率,您需要使用以下设置:

    EUSCI_A_UART_initParam ={0};
    param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
    Param.clockPrescalar = 9;
    Param.firstModReg = 0x00;
    param.secondModReg = 0x08;
    Param.parity = EUSCI_A_UART_NO_PARity;
    Param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
    StopBits的Param.number= EUSCI_A_UART_ONE_STOP_BIT;
    Param.uartMode = EUSCI_A_UART_MODE;
    Param.oversampling = EUSCI_A_UART_LOW频率_BAUDRATE_RELEA; 

    请告诉我这是否适合您。  

    此致,  
    Caleb Overbay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Caleb,
    感谢您的回复。
    但它也不能起作用。
    我使用了该用户指南建议的网站计算器,所以不知道有什么问题。
    此致
    周伟明
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    魏明您好!

    是否确定使用了正确的COM端口? 启动板将在您的PC上枚举为两个COM端口,您需要选择列出为UART的端口:

    此致,

    Caleb Overbay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Caleb,ñ o
    抱歉,我选择了错误的COM端口。
    但我仍然没有收到来自董事会的数据
    此致
    周伟明
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    魏明您好!

    您能否提供您的项目以便我在设置中对其进行测试?

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

    e2e.ti.com/.../UARTconfig.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是我的项目,我只是使用TI提供的UART示例
    此致
    魏明
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    魏明您好!

    您是否正在使用MSP-EXP430FR2311 Launchpad? 另外,当您在调试器中暂停程序时,MSP430滞留在什么代码处?

    此代码设置为使用外部32kHz晶体,默认情况下,MSP-EXP430FR2311未填充此部件。 因此,该代码将陷入尝试配置外部晶体的无限循环中。 您能否确认您的主板上是否有此信息?

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

    你好,Caleb,

    是,我使用该主板。 晶体是内部晶体,而不是外部晶体。

    我修改了代码,发现我的代码在屏幕截图的while循环中被阻止,因此我将其删除。 然后我从UART收到了数据,但数据仍然像屏幕截图一样乱码。 您是否介意帮助我?

    我附上了我的全部项目。

    此致

    周伟明

     e2e.ti.com/.../BOOSTXL_2D00_EDUMKII_5F00_SoftwareI2C_5F00_MSP430FR2311.zip

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

    我不知道你说水晶是内部的意思是什么? 您之前在论坛上发布的代码设置为使用外部晶体。

    此外,您刚刚发布的代码适用于I2C,并不是您在本文中引用的代码。 我仍然不确定您使用的是正确的COM端口。 您能否像以前一样发布设备管理器的屏幕截图?

    此外,由于MSP430正在等待PC的响应,您的代码在While循环中被阻止。 当它收到响应时,MSP430将在UART接收ISR中将check变量设置为0,然后主环路将作出反应。

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

    您好Caleb

    感谢您的帮助!

    我正在使用COM 3

    此致,

    周伟明

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

    您使用的是正确的COM端口。 您发布的最新代码似乎不是您在本线程中讨论过的UART项目的代码。 您是否可以重新发布相应的代码?

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

    你好,Caleb,

    我已上传我的代码。 现在我想使用UART传输光电二极管接收到的光信息。 如果要运行此代码,请禁用FFT功能,因为RAM不足以执行FFT。

    此致,

    魏明

    e2e.ti.com/.../0755.BOOSTXL_2D00_EDUMKII_5F00_SoftwareI2C_5F00_MSP430FR2311.zip</s>2311.

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

    魏明您好!

    在16MHz频率下运行SMCLK时,您似乎使用了不正确的波特率设置。 我附上了一个示例,说明在16MHz运行SMCLK时如何正确设置波特率。 我已使用HTerm验证它是否正常工作。  

    e2e.ti.com/.../4237.Example.zip

    此致,

    Caleb Overbay