MSP430 串口UART通信 通过串口调式助手接收字符串乱码,接收单个字符正常

作者&投稿:呼和 (若有异议请与网页底部的电邮联系)
MSP430串口程序发送单个字符没问题,但发送字符串就成了乱码。求解!~

这个问题我碰到过,跟数据的存储方式有关,有些芯片的存储时高字节放在地址低的,低字节放在地址高的,反之也有。之前做了一个通信MSP~C8051,如果传输按8位字节,传输都没错,如果按16位字传输,输出是反的,就是采集到的数据是高8位与低8位互换,换了430~AVR就不用互换,建议你试着交换下数据就行了。

别人写的代码,不一定适合你来用。最简单的方法:连接好仪器,然后代码打断点,一步一步跟踪一下,哪里出问题了马上就出来了,也有利于自己的提高!

当你发送一串字符串给单片机的时候,430刚接收到第一个字符于是开始进行回发固定数据给串口助手,可还没发送完毕(发送需要时间,而你尽然在接收中断里发送,这样接受中断就得不到及时响应),你第二个字符串又进来了,于是出错了。(第一件事还没干完,你第二件、第三件。。。全部紧接的来了,要你,你不疯?)这里的问题是你没搞明白整个流程,这个程序框架也不好。这种情况下,你需要建立一个缓存区(FIFO),中断的任务就是把接收到的数据扔到缓存,置标志位,并立马退出!在主程序里发送数据,这样就不会导致接收无法及时响应问题(这个跟蓄水池一样的道理)

1,有可能接收中断里面没屏蔽中断,导致正常的发送被打断
2,可能数据格式设置的问题(起止位校验位数据位等等设置PC和单片机不一致)

ps没写过430的串口,仅供参考……囧

RXBUF0 成功接收一个字节之后,进入中断程序。一旦进入中断程序或者RXBUF0中的数据被读走之后,相关中断寄存器标志位被清除,然后RXBUF0重新接收新的数据。这就是为什么你接收一个字符很正常的原因。
当发送一个字符串的时候,如果已经进入中断函数,但是RXBUF0的数据你还没读走,并且新数据以极快的速度又堆到腚门子上了,进而疯狂的覆盖了RXBUF0中原有的数据,这样你的程序就乱套了,出现乱码很正常。你看看你中断函数里面调用了一个函数,当发送一串数据的时候,你的函数还没有执行完呢、新来的数据就把RXBUF0覆盖了。。。

所以说,你可以在先定义一个字符数组,然后在中断函数里面将收到的数据一一码到数组里面,就像垒麻将一样,然后在主函数里面将字符串中的数据一一送到TXBUF0里面发送出去,就行了。应该是这么回事,你测试下看看。


梅列区17710384436: msp430单片机实现IIC通信、UART通信需要什么样的外设电路?还是说直接使用430的引脚做输入和输出? -
戊肃洛法: uart 是异步通信,IIC是同步的; uart只需要数据线,IIC需要数据线和时钟线. IIC的数据和时钟是严格对齐的,在你接收或者发送数据时候要严格按照时钟来; uart你只需要知道你发送的数据波特率,程序编写时设置好位长度.

梅列区17710384436: MSP430 通过UART串口升级的例子 -
戊肃洛法: 不知道你这个MSP430 通过UART串口升级的例子具体指的是什么,我没有这样的源码,只能给你解决参考.楼上说的“MSP430通过BSL或者USB方式实现程序升级”这个其实严格意义上说是程序下载,也就是说这种方法适用于本地给设备升级程序,对单台装置而言.如果你485总线上挂了多台设备,每台设备有自己的ID号和主机通讯,就不能这样升级了,那就需要你设备程序有boot loader,以实现远程通过UART串口升级程序.MSP430通过BSLUSB方式升级网上就有现成的工具,TI官方也有.如果要用远程升级,你百度一下吧,可能也有程序可以参考,我学艺不精,还没搞定,只是知道boot loader原理,还没实现.

梅列区17710384436: 如何设置msp430的异步串行通信模块工作于异步模式 -
戊肃洛法: 1.串口、上位机实现数据采集和控制 2.实现串行通信方法:USART硬件直接连接、通过定时器软件实现 3.实现多种通信:UART异步通信、SPI同步通信、I2C通信 4.UART模块:波特率部分(速度),接收部分,发送部分,接口部分(完成串并...

梅列区17710384436: 为什么我的MSP430 串口UART0的接收到了 串口UART0自己的发送的数据 -
戊肃洛法: 接收函数: #pragma vector=USCI_A0_VECTOR __interrupt void USCI_A0_ISR() { UART0_RX_BUF[UART0_RX_Len++] = UCA0RXBUF; UCA3TXBUF=UCA0RXBUF;//把接收的数据发到U3便于观察(LCX注) ReadUART0_new=Read_Cycle; if(UART0_RX_Len >= UART0_RX_MAXLen) { UART0_RX_Len = 0; memset(UART0_RX_BUF,0,UART0_RX_MAXLen); } }

梅列区17710384436: 急!急!急! MSP430G2553LaunchPad连接电脑做串口通信为什么调试助手找不到串口? -
戊肃洛法: 首先确认你的电脑串口是好的,查看一下设备管理器,如果确实存在,则考虑串口调试助手是否不支持.换一个串口助手看看,如格西烽火串口助手、SSCOM等,支持自动寻找串口.

梅列区17710384436: msp430usarto(串口0)有哪几种工作模式 -
戊肃洛法: MSP430的串口通讯就两种模式: UART模式,和SPI模式.

梅列区17710384436: lunchpad上msp430g2553的UART怎么用串口调试助手没有显示数据 -
戊肃洛法: 先检查串口线,确认电平是TTL转RS232后的,然后检查通信参数,再有就是使用串口软件的HEX模式(如下图格西烽火软件的HEX按钮),看看有没有16进制数据接收到.

梅列区17710384436: MSP430 F449 UART传输的问题 -
戊肃洛法: /******************************************* 函数名称:PutSting 功 能:向PC机发送字符串 参 数:ptr--指向发送字符串的指针 返回值 :无 ********************************************/ void PutString(uchar *ptr ,uint changdu) {uint i;for(i=1;i<=changdu;i++){while (!(IFG2 & UTXIFG1)); // TX缓存空闲?TXBUF1 = *ptr++; // 发送数据}

梅列区17710384436: MSP430开发板的系统组成
戊肃洛法: 1. CPU 模块可以使用任何PQFP64 或TQFP64 封装的MSP430 系列芯片. EDB430开发板选用F149 作为A 型产品和B 型产品的基本配置,它通过安装在一个适配器上与主板相连,用户可以购买或自行制作适配器,来更换CPU 型号,达到升级...

梅列区17710384436: 求助关于MSP430F149串口UART通信问题 -
戊肃洛法: 430刚接收到第一个字符于是开始进行回发固定数据给串口助手,可还没发送完毕

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网