- 2024-11-28
-
回复了主题帖:
使用串口调试助手不能回显数据,但是能控制灯的状态
wangerxian 发表于 2024-11-28 09:16
你写一个单片机定时串口发送数据,看看电脑串口助手能不能收到。
谢谢回答,已经解决了,可能是引脚坏了,换了一个内部寄存器的另外两个引脚做收发是没有问题的
-
回复了主题帖:
使用串口调试助手不能回显数据,但是能控制灯的状态
秦天qintian0303 发表于 2024-11-28 08:26
正常往外边发送能成功吗?接收应该没问题了
谢谢回答,已经解决了,可能是引脚坏了,换了一个内部寄存器的另外两个引脚做收发是没有问题的
- 2024-11-27
-
回复了主题帖:
使用串口调试助手不能回显数据,但是能控制灯的状态
-
发表了主题帖:
使用串口调试助手不能回显数据,但是能控制灯的状态
使用的是MSP430F2618的芯片和MSP-TS430PM64的开发板,写了一个使串口能够控制LED灯并且对输入的数字进行回显,使用串口调试助手输入0和1能正常控制灯,就是不能接收到数字,求助求助大神啊来帮帮,搞了好几天都没解决,已经要崩溃了。
下面是代码:
#include <msp430.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器
// 初始化 DCO 为 1 MHz
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
// 配置 LED
P1DIR |= BIT0; // 设置 P1.0 为输出模式
P1OUT &= ~BIT0; // 初始化 LED 为关闭状态
// 配置串口
P3SEL |= 0x30; // 设置 P3.4 和 P3.5 为 USCI_A0 的 TX 和 RX 引脚
UCA0CTL1 |= UCSSEL_2; // 使用 SMCLK 作为时钟源
UCA0BR0 = 104; // 设置波特率为 9600,SMCLK = 1 MHz
UCA0BR1 = 0;
UCA0MCTL = UCBRS0; // 设置调制
UCA0CTL1 &= ~UCSWRST; // 初始化 USCI 状态机
IFG2 &= ~UCA0RXIFG; // 清除 RX 中断标志位
IE2 |= UCA0RXIE; // 启用 RX 中断
__delay_cycles(1000000); // 等待系统稳定(1 秒)
__bis_SR_register(CPUOFF + GIE); // 进入低功耗模式,启用中断
while (1); // 无限循环,保持程序运行
}
// USCI_A0 RX 中断服务例程
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
unsigned char receivedChar = UCA0RXBUF; // 获取接收到的字符
if (receivedChar == '1') {
P1OUT |= BIT0; // 点亮 LED
} else if (receivedChar == '0') {
P1OUT &= ~BIT0; // 关闭 LED
}
while (!(IFG2 & UCA0TXIFG)); // 等待 TX 缓冲区准备好
UCA0TXBUF = receivedChar; // 回显接收到的字符
}