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/MSP430FR2433:MSP430FR2433

Guru**** 2538955 points
Other Parts Discussed in Thread: MSP430FR2433

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/879869/ccs-msp430fr2433-msp430fr2433

器件型号:MSP430FR2433

工具/软件:Code Composer Studio

我正在尝试为 MSP430FR2433建立 UART 通信通道(引脚4和引脚5)。 我找到了该示例代码、并想先尝试一下。 出于某种原因、我在串行终端上获得损坏的数据。 我将波特率配置为115200。 我在 TI 的另一个示例代码上尝试过相同的硬件、但运行正常。 请帮助!

//=========== 头文件包括========================================================================================================
#include
#include
#include
#include
#include

//=========== 常量=========================================================================
#define CR 13
#define LF 10.
#define UART_TIMEOUT 9876

//=========== 全局变量===================================================
char Rx_data;
char debug_string [123];
uint64_t seconds = 0;

//=========== 函数原型===================================================================
void UART_init (void);
bool UART_SEND_DEBUG_string (char []);
bool UART_SEND_byte (char);
void init_rtc (void);

//=========== 函数定义===========================================

/*
*@简述这是主函数
*@param 无
*@返回无
*
void main (void)

WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

init_rtc();
UART_INIT();

//禁用 GPIO 上电默认高阻抗模式
//激活先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;

_ENABLE_INTERRUPT ();//启用所有中断--> GIE = 1 (高电平)

UART_SEND_DEBUG_STRING ("Hello World");

while (1)


// UCA0 UART ISR
#pragma vector=USCI_A0_Vector
_interrupt void USCI_A0_ISR (void)

switch (__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))

USCI_NONE 案例:
中断;

USCI_UART_UCRXIFG 案例:
UCA0IFG &=~ UCRXIFG;//清除中断
RX_DATA = UCA0RXBUF;//存储缓冲区
//sprintf (debug_string、"received:%c"、Rx_data);
UART_SEND_DEBUG_STRING (DEBUG_STRING);
UCA0TXBUF ='Q';
中断;

USCI_UART_UCTXIFG 案例:
中断;

USCI_UART_UCSTTIFG 案例:
中断;

USCI_UART_UCTXCPTIFG 案例:
中断;


//结束 UCA0 UART ISR
秘书长的报告

// RTC 中断服务例程
#pragma vector=RTC_vector
_interrupt void RTC_ISR (void)

开关(__evo_in_range (RTCIV、RTCIV_RTCIF))

案例 RTCIV_NONE:
中断;//无中断

案例 RTCIV_RTCIF:// RTC 溢出
P1OUT ^= BIT0;//闪烁 P1.0
秒++;
//sprintf (debug_string、"seconds:%llu"、seconds);
UART_SEND_DEBUG_STRING (DEBUG_STRING);

中断;

默认值:
中断;


//结束 RTC 中断服务例程
秘书长的报告

/*
*@简要初始化 USCI A0 UART 通信
*@param 无
*@返回无
*
void UART_init (void)

//配置 UART 引脚
P1SEL0 |= BIT4 | BIT5;//将2个 UART 引脚设置为第二功能

//配置 UART
UCA0CTLW0 |= UCSWRST;//将 eUSCI 置于复位状态
UCA0CTLW0 |= UCSSEL_SMCLK;//选择 SMCLK 作为时钟源

//使用 SMCLK (1MHz)计算115200的波特率
// 1000000/115200 = 8.68
// 1000000/115200 - INT (1000000/115200)=0.68
// UCBRSx 值= 0xD6 (请参阅 UG)
UCA0BR0 = 8;
UCA0MCTLW = 0xD600;
UCA0BR1=0;

UCA0CTLW0 &=~UCSWRST;//初始化 eUSCI
UCA0IE |= UCRXIE;//启用 USCI_A0 RX 中断

//结束 UART_init
秘书长的报告

/*
*@将此函数简短地通过 USCI A0 UART 发送给定的字节
*@param[in] data -要发送的字符字节
*@返回 true 成功,如果失败则返回 false
*
bool UART_SEND_byte (字符数据)

uint16_t UART_TIMEOUT = UART_TIMEOUT;//加载超时值

while ((!(UCA0IFG & UCTXIFG))&&(UART_TIMEOUT>0))

UART_TIMEOUT--;//等待 TX 中断挂起

if (UART_TIMEOUT = 0)

返回 false;//如果超时则返回失败

UCA0TXBUF =数据;
UCA0TXBUF ='R';

UART_TIMEOUT = UART_TIMEOUT;//再次加载超时值

while ((!(UCA0IFG & UCTXIFG))&&(UART_TIMEOUT>0))

UART_TIMEOUT--;//等待 TX 中断挂起

if (UART_TIMEOUT = 0)

返回 false;//如果超时则返回失败

返回 true;//否则返回成功

//结束 UART_SEND_BYTE
秘书长的报告

/*
*@简要介绍此函数通过 USCI A0 UART 发送给定的字符串
*@param array char array to send
*@返回 true 成功,如果失败则返回 false
*
bool UART_SEND_DEBUG_string (字符阵列[])

uint16_t size = strlen (array);
uint16_t 索引= 0;

for (index=0;<size; index++))

if (!UART_SEND_BYTE (array[索引])//逐一发送字符

返回 false;

if (!UART_SEND_BYTE (CR))//发送回车

返回 false;

if (!UART_SEND_BYTE (LF))//为新行发送换行

返回 false;

返回 true;

//结束 UART_SEND_DEBUG_STRING
秘书长的报告

/*
*@简要初始化系统 RTC、以勾选1秒的倍数
*@param 无
*@返回无
*
空 init_RTC (空)

// RTC 计数重载比较值
RTCMOD =(1026);

//源= SMCLK (1MHz),除以1024
RTCCTL = RTCSS_SMCLK | RTCSR | RTCPS_1024 | RTCIE;

P1DIR |= BIT0;//将 P1.0设置为输出方向

//结束 init_RTC
秘书长的报告

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

    >UCA0TXBUF =数据;
    >UCA0TXBUF ='R';

    TXIFG 仅表示一个字节有空间。 连续两次写入 TXBUF 通常不会执行所需的操作。 您是否打算在您的职能部门中进一步细列第二行?

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

    我实际上包括 了 UCA0TXBUF ='R';和 UCA0TXBUF ='Q';只是为了查看代码的那一部分是否正在执行。 由于输出损坏、我无法判断它是否损坏。  

    我修改了另一个示例代码、并能够通过 UART 成功发送数据。 一切都很好。 不确定数据损坏的原因。 总之、感谢您的回答。  

    我将关闭该问题。  

    变阻器