共2条
1/1 1 跳转至页
串口发送数据没发出去啊!急死我了!
问
想调试一下串口,写了一个串口发送程序,可怎么也发不出去,不只是哪里出了问题,望各位大侠帮忙给看看吧,
#include<MSP430x13x.h>
void Init(void);
char Data[4] = {0x01,0x02,0x03,0x04};
void main(void)
{
unsigned char i;
WDTCTL=WDTPW+WDTHOLD;
Init();
while(1)
{
TXBUF0=0xFF; //以0XFF为前导
while ((U0TCTL & 0x01)==0);
for (i=0;i<4;i++) //循环发送字节
{
TXBUF0=Data[i];
while ((U0TCTL& 0x01)==0);
}
}
}
void Init(void)
{
UCTL0 &= ~SWRST;
UCTL0 = 0x10;//字符为8位的
UBR00 = 0x03;
UBR10 = 0x00;
UMCTL0 = 0x4A;
U0TCTL = 0x10;//选择ACLK作为串口时钟
ME1 |= 0x20;//使能发送
P3SEL = 0x30;//P3.4,P3.5作为用于发送接收
P3DIR = 0x10; //P3.4为发送输出口
}
程序调试中,发现似乎根本没有发出数据,实在是不知道问题所在啊?! 答 1: 要把Data[i]中的数值项先转化成ASCII码,就是+0x30啊! 答 2: 检测 (UTXIFG0&IFG1)
void fnCommSendMessff(void)
{
int itempTran;
unsigned int iTransTime;
for(itempTran=0;itempTran<4;itempTran++)
{
for(iTransTime=0;iTransTime<0xfe;iTransTime++)
{
if(UTXIFG0&IFG1)
{
TXBUF0=0xff;
break;
}
}
}
fnDelayX10ms(1);
} 答 3: 时钟还没设置吧? 答 4: 首先检查一下硬件是否是好的 答 5: 引用: 答 6: #include <MSP430x14x.h>
void main(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P5DIR |= 0x70; // P5.4 ,5.5 5.6 output direction
P5SEL|= 0x70; // P5.4 = MCLK option select;5.5=SMCLK;5.6=ACLK;
BCSCTL1 &= ~XT2OFF; // XT2 = HF XTAL
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG) != 0); // OSCFault flag still set?
BCSCTL2|=(SELM1+SELS); //MCLK=XT2CLK SMCLK=XT2CLK
UCTL0 = CHAR; // 8-bit character
UTCTL0 =SSEL1+SSEL0; //UCLK=SMCLK;
//BCSCTL2 |= SELM1; // MCLK = XT2 (safe)
//UCTL0 &=~ SWRST; // reset SWRST bit
//UTCTL0 = SSEL0; // UCLK = ACLK
UCTL0 = 0x10; //8 data bits, even parity, 1 stop bit
UBR00 = 0x41;
UBR01= 0x3;
//UBR10 = 0x00;
UMCTL0 = 0x03; //BDR=9600 ,8 M jingzhen
URCTL0= 0x00;
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
//IE1 |= URXIE0; // Enable USART0 RX interrupt
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
P3DIR |= 0x10; // P3.4 output direction
while(1)
{
TXBUF0=0x6f;
while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready?
for (i = 0xAFF; i > 0; i--);
}
}
这是我的程序 ,现在的问题是无论发什么都布是我要得到的结果
刚开始的时候还出现过正常的结果,可是后来出现的结果都是莫名其妙的,用示波器看刀232的管脚输出是对的,经过串口传输线输出也是对的,可是刀了机器上就布对,换了机器还是一样,还了串口调试工具结果还是一样,布知道是什么原因,高手赐教啊
#include<MSP430x13x.h>
void Init(void);
char Data[4] = {0x01,0x02,0x03,0x04};
void main(void)
{
unsigned char i;
WDTCTL=WDTPW+WDTHOLD;
Init();
while(1)
{
TXBUF0=0xFF; //以0XFF为前导
while ((U0TCTL & 0x01)==0);
for (i=0;i<4;i++) //循环发送字节
{
TXBUF0=Data[i];
while ((U0TCTL& 0x01)==0);
}
}
}
void Init(void)
{
UCTL0 &= ~SWRST;
UCTL0 = 0x10;//字符为8位的
UBR00 = 0x03;
UBR10 = 0x00;
UMCTL0 = 0x4A;
U0TCTL = 0x10;//选择ACLK作为串口时钟
ME1 |= 0x20;//使能发送
P3SEL = 0x30;//P3.4,P3.5作为用于发送接收
P3DIR = 0x10; //P3.4为发送输出口
}
程序调试中,发现似乎根本没有发出数据,实在是不知道问题所在啊?! 答 1: 要把Data[i]中的数值项先转化成ASCII码,就是+0x30啊! 答 2: 检测 (UTXIFG0&IFG1)
void fnCommSendMessff(void)
{
int itempTran;
unsigned int iTransTime;
for(itempTran=0;itempTran<4;itempTran++)
{
for(iTransTime=0;iTransTime<0xfe;iTransTime++)
{
if(UTXIFG0&IFG1)
{
TXBUF0=0xff;
break;
}
}
}
fnDelayX10ms(1);
} 答 3: 时钟还没设置吧? 答 4: 首先检查一下硬件是否是好的 答 5: 引用: 答 6: #include <MSP430x14x.h>
void main(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P5DIR |= 0x70; // P5.4 ,5.5 5.6 output direction
P5SEL|= 0x70; // P5.4 = MCLK option select;5.5=SMCLK;5.6=ACLK;
BCSCTL1 &= ~XT2OFF; // XT2 = HF XTAL
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG) != 0); // OSCFault flag still set?
BCSCTL2|=(SELM1+SELS); //MCLK=XT2CLK SMCLK=XT2CLK
UCTL0 = CHAR; // 8-bit character
UTCTL0 =SSEL1+SSEL0; //UCLK=SMCLK;
//BCSCTL2 |= SELM1; // MCLK = XT2 (safe)
//UCTL0 &=~ SWRST; // reset SWRST bit
//UTCTL0 = SSEL0; // UCLK = ACLK
UCTL0 = 0x10; //8 data bits, even parity, 1 stop bit
UBR00 = 0x41;
UBR01= 0x3;
//UBR10 = 0x00;
UMCTL0 = 0x03; //BDR=9600 ,8 M jingzhen
URCTL0= 0x00;
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
//IE1 |= URXIE0; // Enable USART0 RX interrupt
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
P3DIR |= 0x10; // P3.4 output direction
while(1)
{
TXBUF0=0x6f;
while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready?
for (i = 0xAFF; i > 0; i--);
}
}
这是我的程序 ,现在的问题是无论发什么都布是我要得到的结果
刚开始的时候还出现过正常的结果,可是后来出现的结果都是莫名其妙的,用示波器看刀232的管脚输出是对的,经过串口传输线输出也是对的,可是刀了机器上就布对,换了机器还是一样,还了串口调试工具结果还是一样,布知道是什么原因,高手赐教啊
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |