共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电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 |