关于MSP430F5529单片机的串口问题 3C

一句话,我要疯了,,现在的问题是,使用的串口调试助手来调试的,开发环境从IAR低版本到高版本以及CCS,程序是官方程序和自己编写的,以及网友的。板子是标准板,还有个自己的板子。USB转串口线两条。但是结果都一样。
主要是使用串口调试助手发送字符串,然后接收相同的。结果是,如果我发较长的字符串,前四位会丢失。单个发送字符,根本没有任何返回信息。我简直要疯了,真的不知道原因了,期待大神拯救啊
代码如下:
#include

int main(void)
{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

P3SEL = BIT3+BIT4; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // Put state machine in reset
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 6; // 1MHz 9600 (see User's Guide)
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS_0 + UCBRF_13 + UCOS16; // Modln UCBRSx=0, UCBRFx=0,
// over sampling
UCA0CTL1 &= ~UCSWRST; // Initialize USCI state machine
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
P4OUT=0;
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
__no_operation(); // For debugger
}

// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A0_VECTOR
interrupt void USCI_A0_ISR(void)
{
switch(
even_in_range(UCA0IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character

break;

case 4:break; // Vector 4 - TXIFG
default: break;
}
}

3个回答

qq_18292553
qq_18292553 这个我用过了,没成功
接近 4 年之前 回复

当读入的数据长短小于端口最大长度时,那些没有用到的位会被视零。

这是msp430f5310,串口的初始化流程,都是一个系列的,如果没问题的话估计寄存器都是一样的。仅供参考。

 void InitUart(void)
{
    //初始化gpio
    P4SEL |= 0x30;
    P4DIR &= ~0x30;
    PMAPKEYID = PMAPKEY;
    PMAPCTL = 0x2;
    P4MAP45 = 0xB0C;

    //----------------------------------------------------------------
    //2014/07/20 19:12:47
    UCA1CTL1 |= 0x1;//

    UCA1CTL0 = 0x0;
    UCA1CTL1 |= 0x80;//smclk
    //----------------------------------------------------------------
    //2014/07/21 11:16:21
    //UCOS16 =1表示对输入源频率先进行16分频,然后在与波特率进行计算。
    //4M 9600 -->UCBRX = 26,UCBRSX = 0,UCBRFX = 1 
    ////UCBRx = 109, UCBRFx = 0, UCBRSx = 2, UCOS16 = 0
    UCA1BR0 = 109;
    UCA1BR1 = 0;
    //        UCOS16 UCBRSx    UCBRFx
    UCA1MCTL = 4;//1 | (0 << 1) | (0 << 4);

    UCA1CTL1 &= ~0x1;//

    UCA1IE = 0x1;
}
void put(char c)
{
    //If interrupts are not used, poll for flags
    if(!(UCA1IE & 0x2))
        //Poll for transmit interrupt flag
        while(!(UCA1IFG & 0x2));

    UCA1TXBUF = c;
}
void puts(char *data,unsigned long len)
{
    unsigned long i;
    for(i = 0; i < len;i++)
        put(data[i]);
}
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
    char rv;
    switch(UCA1IV)
    {
        //Vector 2 - RXIFG
    case 2:
        rv = UCA1RXBUF;
        UCA1TXBUF = rv;
        break;
    default: break;
    }
}

本人上传资源中有嵌入式编程相关的辅助工具,如果有意的可以下载使用,以及arm启动框架的工程,上传的工具和软件根据自己多年的工作经验自己编写的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于单片机串口的问题
请教各位SPI串口是怎么——依据什么信号开始传送和结束传送的?rn呵呵,我要用C8051F04x系列,有用过的最好了rnrn
msp430f5529单片机ADC程序
msp430f5529单片机ADC程序,参考电压vcc
单片机关于串口接收的问题?
int len; //全局变量rnrn//串口中断函数rnvoid UARTISR()rnrn if(len == buf[0] * 256 + buf[1]) // buf[0] = 0x02,buf[1] = 0x92;,算出接收的长度 rn ;rnrn每接一个len自加,len算出来的结果都对都是等于658,但是串口接收的数据会漏,如果把if这句改为rnrnlen == 0x292;rnrn串口就不会漏数据了,用变量就有漏数据现像,这怎么办?rnrn环境是:MPLAB IDE v8.56 编译器是:PIC88rn芯片是:PIC18F97J60rn
关于单片机串口扩展
带232串口的扫描器连在51单片机上,还有个传感器连在单片机上,通过单片机控制,当扫描器漏扫时,报警;当扫到条码时候,通过另外一个串口在PC上显示条码。这样就用到了两个232串口,现在我准备将串口扩展一下,大家觉得SP2538芯片怎么样?
msp430f5529
原版英文资料,也可以去官方下载。切记该文档为英文原版5528和5529技术手册一样的
MSP430F5529
MSP430F5529文档里面有少部分程序,和MSP430F5529基本的资源信息,适合初学者学习
MSP430f5529
IAR for MSP430 v7.10.1 免费破解版(附注册机)。
串口和单片机通信的问题
单片机内数据处理是16进制的形式,例如PC发送给单片机一组数据:rnA5 5A 01 01 FFrn单片机回复一组16进数: 67 76 01 00 02 03 00 00 00 00rnrn现在知道数据的长度。PC机收发数据呢?我看了龚建伟的文章,还是搞不懂啊!rnrn例如他做的收的部分:rnvoid CSCommTestDlg::OnComm() rnrn// TODO: Add your control notification handler code herernVARIANT variant_inp;rnCOleSafeArray safearray_inp;rnLONG len,k;rnBYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.rnCString strtemp;rnif(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符rnrnvariant_inp=m_ctrlComm.GetInput(); //读缓冲区rnsafearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量rnlen=safearray_inp.GetOneDimSize(); //得到有效数据长度rnfor(k=0;k
单片机串口中断问题
以前做单片机串口程序,都是在接收到上位机指令后,发送数据。现在遇到一个新问题:在单片机不断给液晶屏发送数据(数据时AD芯片采集到的实时数据)的前提下,点击液晶屏,液晶屏会给单片机发送一组指令,在收到指令后,停止发送。发送程序用的是查询法,接收程序用的是中断。但是点击液晶屏程序时,时灵时不灵,请教一下高手们,是不是发送的程序也要写在中断中?
总结的单片机串口问题
这段时间经常调试串口现在把遇到的问题总结一下: 问题 :串口经常出现乱码 解决办法:1)看看程序里面的波特率和串口调试助手里面的波特率是否一致,如果不一致请改成一致的。     2)如果检查波特率是一致的那就就应该检查一下程序了,看看SMOD是否置1,定时器设置的时间是否正确,以及串口是否打开等等     3)如果软件没问题,那么最后就可能是硬件的问题了,看看晶振是多少的,一般来说11.0
stc15W4单片机串口问题
[img=https://img-bbs.csdn.net/upload/201508/23/1440332109_928839.png][/img]rnstc15w4ks4系列单片机这么连接的话, 串口2不能切换到P1.6和P1.7. 那么串口2的rs485通讯程序该怎么写呢?
单片机串口接收问题
232串行通信中,发送端连续发送12个字节,循环发送。接收端,单步调试第一次接收12个字节都是正确的,可是后面再接收的时候到中间就出错了,奇怪。rn 比如我依次发送1、2、3、4、5、6、7、8、9、A、B、C,接收端接收中断里,i++,前12个数据都接收正确,可是继续接收时候,后面就成了1、2、3、4、9、8、6……等,有时是1、1、1、……。调了半天搞不明白,头疼的不行。如果发送或接收有错误,那为什么第一次接收的都是正确的呢?rn 发送端和接收端全都单步调试过了,发送端数据循环发送12个是发送正确的啊,应该没问题,示波器观测都没有问题。接收端前面一次能正确,后边就不行了?奇了怪了,有没有对串口熟悉的高手或遇到过类似问题或有相关经验乐于分享的大虾,求拍醒啊!是不是要弄什么标志位,或者发送或接收哪里加上点delay,还是神马情况啊?小弟谢谢各位大虾了!
pic单片机串口问题
最近在用单片机接收gps模块的数据,写了个简单的从串口发送数据到pc机的程序,但是pc机上收到的并不是我发送的字符,大侠们帮忙分析是什么原因,rn#include rn#include rn#include rn__CONFIG(0x37E2);rn__CONFIG(0X0FFF);rnrn#define uchar unsigned charrn#define uint unsigned intrnrnvoid Uart_Init(void)rnrn RXDTSEL=0; //RC5脚为接收引脚rn TXCKSEL=0; //RC4脚为发送引脚rn TRISC=0X20; //配置rc5脚为输入,其他为输出rn //PORTC=0X00; //PORTC初始化为0rn RC3=0;rn RC2=0;rn TXSTA=0x24; //发送使能,异步通信,高波特率rn RCSTA=0x90; //串口使能,使能接收rn SPBRG=51; //波特率为9600,fosc为8MHZrnrnrnvoid rnputch(unsigned char byte) rnrn /* output one byte */rn while(!TXIF) /* set when register is empty */rn continue;rn TXREG = byte;rnrnrnvoid main(void)rnrn Uart_Init(); //初始化串口rn while(1)rn rn RC2=1; //RC2脚拉高rn putch('c');rn rnrn单片机是pic16F1823,晶振是8Mhz
单片机串口的问题
请问有搞过单片机串口的师兄们,我们在编程的时候 ,用了一个串口中断,在串口中断的程序中又有查询串口读取数据,但在程序运行的时候,能接收到数据但中断结束后不能返回到主程序,这时的液晶就跟死机了一样,但我们把中断的读取数据这个程序去了就可用,请问是什么问题。
单片机与串口助手问题
问什么我要输出的字符"a"不能在串口助手上显示:请帮我看一看rn#include rn#include rn#define uchar unsigned charrn#define uint unsigned intrnuchar FREQ=0;rnvoid timer0() interrupt 1rnrn TH0=-1000/256;rn TH1=-1000%256;rn zhongduan();rnrnzhongduan()rnrn FREQ=FREQ+1;rn if(FREQ==500)rn rn FREQ=0;rn printf("a");   //输出arn rnrnmain()rnrn EA=1;rn ET0=1;rn ET1=1;rn PT0=1;rn TMOD=0X21;rn TH0=-1000/256;rn TL0=-1000%256;rn TH1=0XFD;rn TL1=0XFD;rn SCON=0X50;rn PCON=0X80;rn TR0=1;rn TR1=1;rn TI=1;rn while(1)rn rn rnrnrn
串口与单片机通讯的问题
关于pc串口与单片机通信的问题rn我用的是串口类,单片机发送数据给pc接收,rn单片机发送数据的编码 和 xp系统接收数据的编码rn应该不是一样的吧?rnrn如果它们的字符编码不是一样的话rn请告诉我它们的区别rnrnpc串口会自动将它们转换吗rnrnrnrn如果 字符编码不是一样的 rn我pc接收单片机数据的时候,rn字符转换有什么需要注意的吗?rnrnrnrn
单片机串口发送问题
UART串口接收与发送,使用了RDA,CTI中断...使用了一个大小为30字节的缓冲数组来存放...rn问题来了rn当我配置FIFO为8个字节的时候,结果是只能收到24个字节..后面的字节接收不到rn当我配置FIFO为14个字节的时候,结果是能正常收到30个字节..为什么?rnFIFO为8个字节的时候,上位机连续发送的时候rn第一次触发为RDArn第二次触发为RDArn第三次触发为RDArn第四次触发为RDArn... 一直接收完才对... rn谁知道是什么原因造成的不?
关于电脑与单片机的串口连接问题。谢谢
VC程序和串口调试助手通讯完全正常,,可是与单片机(80C196)通讯的时候接不到信号。rn部分代码如下:rnVC:rn初始化的时候向单片机发送"00111111"字符串: m_ctrlComm.SetOutput(COleVariant("00111111"));rn单片机的程序部分如下:rnpreloop: ldb stat,sp_stat ;see if there is RXDrn jbc stat,6,prelooprn andb stat,#10010100b;测试有无传输错误rn jne prewrongrn sjmp preset2ahrnprewrong:rst ;wrong RXD, resetrnpreset2ah: ldb read_pc,sbuf ;sbuf是缓冲器,rn cmpb read_pc,readyb ;readdy初始化为#3fhrn jne prewrongrn scall subtxd ;tell pc I am ready,给计算机发送#3fh(00111111)rn然后计算机收到的字符串strTemp与"00111111"比较,符合就显示连接上。rnrnrn可是没有消息过来,我先开的单片机程序。然后开的VC。rn(我后来直接不管发什么,就让计算机显示出来,,可是还是显示不出。怀疑串口没连接上?还是什么原因",,,rnrn单片机和VC程序的前一个版本(C程序)也连接完好。。。。rnrn谢谢
LDC1314驱动程序及使用例程,基于MSP430F5529单片机
电感-数字转换器LDC1314驱动程序,采用模拟IIC,基于MSP430F5529单片机,main.c是简单的使用例程,亲测可用。
关于串口助手与单片机通信
新手,我用vc++开发了一个串口助手,然后现在要做一个简单的单片机课题,就是一个篮球记分板,我现在想让单片机与我的软件通信该怎么做?
关于C51单片机的串口程序
关于C51单片机与串口的接收和发送程序,通用的只需要修改所发送的内容即可
关于单片机串口波特率设置
我用的是ATMEL 89C51-20PC的单片机,晶振是采用的24MHZ,串口配置如下:rn SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr rn TMOD |= 0x21; //TMOD: timer 1, mode 2, 8-bit reload,timer 0 mode 1 rn PCON |= 0x80; //SMOD=1; rn TH1 = 0xCC; //Baud:2400 fosc=24MHz rn TH0 = 0xFE;rn TL0 = 0x0C; //1ms = 5000 = 01F4H,10000H - 01F4H = FE0CHrn IE |= 0x92; //Enable Serial Interrupt,timer0 Interrupt rn TR1 = 1; // timer 1 run rn 我在单片机端用while循环不停的发0xA5,为啥每次我在PC机端用2400的波特率接收的时候,有时候接收到的是A5,有的时候是5A,2B,69中的一种rn 我是按照下面的公式计算的:波特率=(1+SMOD)*晶振频率/(384*(256-TH1))rn
单片机串口模拟程序单片机串口模拟程序
目前普遍采用的MCS51 和PIC 系列单片机通常只有一个(或没有)UART 异步串行通信接口,在应用系统中若需要多个串行接口(例如在多机通信系 统中,主机既要和从机通信又要和终端通信)的情况下,通常的方法是扩展 一片8251 或 8250 通用同步/异步接收发送芯片(USART),需额外占用单 片机I/O 资源。本文介绍一种用单片机普通I/O 口实现串行通信的方法,可 在单片机的最小应用系统中实现与两个以上串行接口设备的多机通信。
单片机串口
串口中的校验位,数据位,和停止位 有什么用啊,为什么我把它们随便设置都不影响我传送和接受数据
单片机 串口
单片机要获得GPS信息,并由无线模块发射。单片机与GPS跟无线模块通信是不是都需要通过UART口?那我选单片机是不是要选具有两个串口的单片机?用51普通的IO口能够当串口用吗?
计算机串口与单片机串口高速通信问题。
计算机串口编程设置的波特率一般都是固定的几个,如2400,9600,57600,115200等,rn而单片机串口的波特率设置方法使得它的波特率不一定刚好是计算机串口的波特率,特别是在高速状态下,它的速度可能是62K或者180K左右,而与计算机特定的几个波特率相差较大,一般来说,串口通信收发双方波特率的误差不应大于2.5% 我在实际开发中需要以大于57600波特率的速度实现PC机与单片机之间的双向通信,不知该如何实现?
MSP430F5529的烧录问题
作为一个初学者,LanchPad 真的不知道该怎么烧写 有没有用过的告诉一下[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/11.gif][/img]
单片机一个串口复用问题
我用一个单片机的TXD,RXD分别接两个模块,从一个接受信息,另一个发送信息,可以分时进行,电路不冲突(单个模块只与单片机的TXD RXD中一个连接即可通信),但波特率不同,那我是不是要分两次初始化串口呢?能实现吗?还有串口中断怎么写呢,可以通过写入SBUF的信息不同来判断吗?(分开单独通信已经搞定了)
单片机和串口打印机问题请教
想在单片机上连一个打印机,但只剩下一个串口可以用了。rn现在考虑了两种解决办法:rn1.找一个串口打印机,但这个似乎很难找到了,而且价格似乎也很贵。rn 想试哈POS机的那种票据打印机,不晓得行不行,请了解的指教了!rn2.用USB接口打印机,用USB转串口转换器连接到单片机,不晓得这样会不会给通讯 rn 带来麻烦?rn请高人指教了 讨一个好的解决办法
单片机串口数据接收问题
单片机串口数据接收,波特率9600.数据包格式为AA 55 A5 5A + 16个数据 + 5A A5 55 AA.rn使用PC的串口调试助手发送一包数据,串口可以接收到并通过CAN总线发送出去。但是和串口数据发送设备联调时串口收不到数据。rn下面是我写的串口接收程序,请各位帮忙看看有什么问题吗?谢谢rn//串口接收中断rnvoid SCI_1_ISR(void)rnrn DatBuf = SCI1DL;rn if(Status == 0)rn rn if(DatBuf == 0xaa)rn rn Status = 1;rn DatBuf = 0;rn rn elsern rn Status = 0;rn DatBuf = 0;rn rn rn else if(Status == 1)rn rn if(DatBuf == 0x55)rn rn Status = 2;rn DatBuf = 0;rn rn elsern rn Status = 0;rn DatBuf = 0;rn rn rn else if(Status == 2)rn rn if(DatBuf == 0xa5)rn rn Status = 3;rn DatBuf = 0;rn rn elsern rn Status = 0;rn DatBuf = 0;rn rn rn else if(Status == 3)rn rn if(DatBuf == 0x5a)rn rn Status = 4;rn DatBuf = 0;rn DatCnt = 0;rn rn elsern rn Status = 0;rn DatBuf = 0;rn rn rn else if(Status == 5)rn rn DatArray[DatCnt] = DatBuf;rn DatCnt++;rn if(DatCnt>=16)rn rn DatCnt = 0;rn Status = 6;rn rn rn else if(Status == 6)rn rn if(DatBuf == 0x5a)rn rn Status = 7;rn DatBuf = 0;rn rn elsern rn Status = 0;rn DatBuf = 0;rn rn rn else if(Status == 7)rn rn if(DatBuf == 0xa5)rn rn Status = 8;rn DatBuf = 0;rn rn elsern rn Status = 0;rn DatBuf = 0;rn rn rn else if(Status == 8)rn rn if(DatBuf == 0x55)rn rn Status = 9;rn DatBuf = 0;rn rn elsern rn Status = 0;rn DatBuf = 0;rn rn rn else if(Status == 9)rn rn if(DatBuf == 0xaa)rn rn Status = 10;rn DatBuf = 0;rn rn elsern rn Status = 0;rn DatBuf = 0;rn rn rnrnrn//主函数中rnwhile(1)rnrn if(Status == 10)rn rn //使用CAN总线发送DatArray[]rn Status = 0;rn rn
单片机串口接收字符串的问题
我现在编写一个程序用单片机控制gsm模块发送短消息,当我用单片机向gsm模块发送命令,如at+cmgf=1,gsm模块向单片机返回ok作为命令成功的响应 ,现在我需要判断接收的字符串是否是ok,我写的程序如下rn unsigned char rstr[];rn unsigned char k;rn while(k<2)rn rn while(RI==0);rn RI=0;rn rstr[k]=SBUF;rn k++;rnrn rn if((rstr[0]=='o')&&rstr[1]=='k')rn \\处理程序rn rn我用串口调试程序,向单片机发送字符串ok,程序不会往下运行rn如果向单片机先发送一个o,再发送一个k,程序就会往下运行rnrn问题:怎么样修改程序,向单片机发送字符串ok,程序就会往下运行阿,请教大虾们。
单片机串口数据传输问题?谢谢
我的下位机单片机传输过来的数据不大稳定,因为我的数据只有两种情况,但是绝大多数的情况数据是正确的,但是有些时候数据是些脏数据,不正确.请问我可能的错误原因是什么?谢谢了.(利用电力载波,同步控制)
pc串口和单片机通讯的问题
在单片机和pc上设置的都是9600波特率,无奇偶校验,8位数据位,1位停止位rn我用的是RC来产生单片机所需的时钟,理论上想设计4MHz的,但在时钟输入端实测是5.05Mrn单片机的波特率是由公式 ((FCY/9600)/16)-1 来算的,FCY是指令时钟频率,我设成5.05M对应的1262626和4M对应的1000000时,出不了正确结果,设成1600000时,有时出正确结果,有时结果又不对,但是错误的结果又固定为那1到2种特定值,这种情况是由于波特率的设置有问题造成的吗? rn这是pc部分接收数据的程序:rnPrivate Static Sub MSComm1_OnComm()rn Dim Buffer As Stringrn Dim sData() As Bytern Dim i As Integerrn Select Case MSComm1.CommEventrn Case comEvReceivern Buffer = MSComm1.Inputrn sData() = Bufferrn For i = 0 To UBound(sData)rn If Len(Hex(sData(i))) = 1 Thenrn strdata = strdata & "0" & Hex(sData(i)) & " "rn Elsern strdata = strdata & Hex(sData(i)) & " "rn End Ifrn Next irn txtTerm.Text = strdatarn End SelectrnEnd Sub
串口打印机和单片机问题请教
想在单片机上连一个打印机,但只剩下一个串口可以用了。rn现在考虑了两种解决办法:rn1.找一个串口打印机,但这个似乎很难找到了,而且价格似乎也很贵。rn 想试哈POS机的那种票据打印机,不晓得行不行,请了解的指教了!rn2.用USB接口打印机,用USB转串口转换器连接到单片机,不晓得这样会不会给通讯 rn 带来麻烦?rn请高人指教了 讨一个好的解决办法
msp430f5529中文手册
msp430f5529中文技术手册
msp430f5529例程
包含所有例程
MSP430f5529中文手册
MSP430f5529中文手册
msp430F5529单片机USB问题PUR拉高后还是不能枚举
RT我用的5529自带的USB模块利用CDC类模拟串口和PC通信,初始化的函数是代码库里的啊 PUR拉高之后PC还是不能识别我的设备,求大神解答到底什么原因啊rn最好有联系方式 方便我咨询 本人是新手 刚刚玩MSP430
MSP430F5529数据手册
MSP430F5529是msp430系列比较流行的一款芯片,因此,对于使用F5529来进行电子产品开发的人来说,datasheet显得尤为重要。
MSP430F5529资料
MSP430F5529的TI例程及中文参考手册,以及部分CCS工程文件。
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview