Other Parts Discussed in Thread: MSP430FR2433
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2433 您好!
我尝试通过 UART 将 MSP430FR2433与 PC 连接、波特率为115200。 我想将一些数据从 PC 发送到微控制器、根据接收到的数据、微控制器的行为应该有所不同。 我能够将数据发送到 PC、但无法接收。 我使用 FTDI TTL 串行 USB 电缆、并使用连接到 COM 端口 PC 的 Fly 线连接 TX、RX 和 GND。 我有 UCA0 UART ISR、该 ISR 应在 RX 线上接收到任何内容时触发。 但它根本不会触发。 我尝试使用不同的串行终端、但运气不好。 我 不知道我是否缺少任何东西。 任何帮助都将不胜感激,我们将提前表示感谢。
代码如下:
//=========== 头文件包括========================================================================================================
#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);
//====== 函数定义===========================================
/*
*@brief 这是 main 函数
*@param None
*@Return None
*/
void main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
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);
中断;
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; // Blink P1.0
秒++;
sprintf (debug_string、"seconds:%llu"、seconds);
UART_SEND_DEBUG_STRING (DEBUG_STRING);
中断;
默认值:
中断;
}
}
//结束 RTC 中断服务例程
//********
//
*@brief 初始化 USCI A0 UART 通信
*@param None
*@Return None
*/
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
//*********
//*
@brief 此函数通过 USCI A0 UART 发送给定的字节
*@param[in] data - char 字节发送
*@返回 true 成功,false (如果失败
)*/
bool UART_SEND_byte (char data)
{
uint16_t UART_TIMEOUT = UART_TIMEOUT;//加载超时值
while ((!(UCA0IFG & UCTXIFG))&&(UART_TIMEOUT>0))
{
UART_TIMEOUT--; //等待 TX 中断挂起
}
if (UART_TIMEOUT = 0)
{
返回 false; //超时失败
}
UCA0TXBUF =数据;
UART_TIMEOUT = UART_TIMEOUT; //再次加载超时值
while ((!(UCA0IFG & UCTXIFG))&&(UART_TIMEOUT>0))
{
UART_TIMEOUT--; //等待 TX 中断挂起
}
if (UART_TIMEOUT = 0)
{
返回 false; //超时失败
}
返回 true; //否则成功
}
//结束 UART_SEND_BYTE
//********
//*
@brief 此函数通过 USCI A0 UART 发送给定的字符串
*@param 数组 char 数组以发送
*@返回 true 成功,false (如果失败
)*/
bool UART_SEND_DEBUG_string (char array[])
{
uint16_t size = strlen (array);
uint16_t 索引= 0;
for (index=0;索引
和 Putty 捕获的数据:
