菜鸟驿站问题求助MSP430F449的串口通信问题

当前位置:
&单片机STC15F2K60S2做串口通信遇到问题,求助!!!
单片机STC15F2K60S2做串口通信遇到问题,求助!!!
作者 黑眼圈红了
使用单片机STC15F2K60S2做串口通信,用串口调试时,发送三位数字接收到的总是不对,比如发送111,返回接收到的数据却是11&&01,两位数的都正常,上三位数串口就挂了,只能接收一次还接收不正确,不知道怎么办了,求大神帮忙。。
串口初始化程序.png
串口发送一个字节.png
串口中断.png
顶一下,我以前学的时候也遇到了,调试了好长时间都没有解决
引用回帖:: Originally posted by tuburfransth at
顶一下,我以前学的时候也遇到了,调试了好长时间都没有解决 所以你是到现在都还没解决这个问题吗?
引用回帖:: Originally posted by tuburfransth at
顶一下,我以前学的时候也遇到了,调试了好长时间都没有解决 有个友友回复我说,串口调试助手里选择HEX模式发送接收的话。其实存进缓存区的数就是十六进制的,111换算成十进制是273,超过了一个字节的数据大小,所以发送接收都是按照十六进制数来转的,所以这样是正确的。我试了一下,如果在缓存区写进数据FF(十进制就是255),这样的话串口返回的数据确实是FF,
24小时热帖
下载小木虫APP
与700万科研达人随时交流求助单片机串口通信的问题 - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
求助单片机串口通信的问题
10:42:12  
使用串口调试助手做串口通信,使用的单片机型号是STC15F2K60S2,写了一个返回接收到的数据的程序,然而,实际调试时,两位数的可以正常接收显示,一旦发送3位数,串口就只能接收到分开的数据,比如用串口调试助手发送111,接收回来显示的是11&&01,试过好多次都是这样。求助大神请问是哪里出问题了呢?
附件: 您需要
才可以下载或查看,没有帐号?
奖励10积分
你是在接收中断里面直接调用发送函数,在连续接收时可能会导致数据发送与接收冲突,从而丢失数据。最好是在接收中断里做一个标志位,然后在主程序里面调用发送函数。或者等一组数据接收完之后再整体发送回去。
高级工程师
10:42:13  
你是在接收中断里面直接调用发送函数,在连续接收时可能会导致数据发送与接收冲突,从而丢失数据。最好是在接收中断里做一个标志位,然后在主程序里面调用发送函数。或者等一组数据接收完之后再整体发送回去。
高级工程师
11:44:14  
本帖最后由 blust 于
11:45 编辑
你调试时选择的是HEX模式,这个模式是十六进制表示的,你发11时其实不是发送的11,而是十六进制数0x11,换成十进制数就是17,是一个字节,所以不会错。但是你发111时,按照十六进制的解析就是前一个字节是0x11,后一个字节由于你只输了一位,默认高位为0,就是0x01,所以你接收到的就是11 01 ,并没有错误。
高级工程师
11:44:56  
如果你发送区接收区都选成文本模式,就不会出现这个情况了。
13:33:38  
如果你发送区接收区都选成文本模式,就不会出现这个情况了。
试了,发送文本模式的话有时候能接到有时候接不到完整数据,比如我发一个120过去,接收到的是12。
13:38:44  
你调试时选择的是HEX模式,这个模式是十六进制表示的,你发11时其实不是发送的11,而是十六进制数0x11,换成十进制数就是17,是一个字节,所以不会错。但是你发111时,按照十六进制的解析就是前一个字节是0x11,后一个字节由于你只输了一位,默认高位为0,就是0x01,所以你接收到的就是11 01 ,并没有错误。 ...
意思就是我选择HEX模式发送的话,那我写进缓存区的数据就是用十六进制表示的是吧,我这样试了一下,发送一个字节最大的数FF,确实是可以接收回来的。
高级工程师
15:27:28  
意思就是我选择HEX模式发送的话,那我写进缓存区的数据就是用十六进制表示的是吧,我这样试了一下,发送一个字节最大的数FF,确实是可以接收回来的。
是的,十六进制就是从00到FF
23:13:09  
你的程序没有问题,你在发送的时候是发送的16进制数据,你输入的是111其实系统默认变成1101 。你输入11 01 结果也一样。至于你在文本模式下,有时候能接受到有时不能接受到应该是你单片机没有处理过来,因为你在接收里有在发送,建议你做数据断帧处理,然后将接收到数据全部发送出去。数据断帧处理代码你要的话可以免费提供()
08:54:57  
楼上解释的精辟
16:56:06  
你是在接收中断里面直接调用发送函数,在连续接收时可能会导致数据发送与接收冲突,从而丢失数据。最好是在接收中断里做一个标志位,然后在主程序里面调用发送函数。或者等一组数据接收完之后再整体发送回去。
恍然大悟.jpg& &谢谢指导。
16:57:48  
你的程序没有问题,你在发送的时候是发送的16进制数据,你输入的是111其实系统默认变成1101 。你输入11 01 结果也一样。至于你在文本模式下,有时候能接受到有时不能接受到应该是你单片机没有处理过来,因为你在接收里有在发送,建议你做数据断帧处理,然后将接收到数据全部发送出去。数据断帧处理代码你要的话可以免费提供 ...
谢谢,如果可以的话,代码我也想要。
00:54:09  
单片机的缓冲寄存器是8位 你要发多位数字的话得写循环或检测有没有发送完成。
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司21ic官方微信-->
请完成以下验证码
CC2530单片机,菜鸟问个串口通信接收问题
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
CC2530单片机,串口通信接收Pc发送字节到单片机,是放在U0DBUF吗?能存放几个字节?当发送#321是一位一位的发送还是怎么的啊? 好头疼啊,求大神帮我解答.....
1.是放在U0DBUF。
2.只能放一个字节。
3.是一位一位发送的。
可以参考帖子:
ohy3686 发表于
<font color="#.是放在U0DBUF。
2.只能放一个字节。
3.是一位一位发送的。
给楼上点个赞
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
1.是放在U0DBUF。
2.只能放一个字节。
3.是一位一位发送的。
谢谢大神,真的很感谢,很有帮助,再问一个,U0DBUF把值给变量,是直接给变量,还是复制过去后,自己清掉自己缓存区的啊?给了之后立即发生中断标志位1对吧?
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
#include&ioCC2530.h&
#include&string.h&
#define LED1 P1_0
#define LED2 P1_1
#define uint unsigned int
#define uchar unsigned char
#define DATABUFF_SIZE 3
uchar buff_RxDat[DATABUFF_SIZE+1];
uchar uIndex=0;
void initUART0(void)
& & PERCFG=0x00;
& & P0SEL=0x3c;
& & U0BAUD=216;
& & U0GCR=10;
& & U0CSR|=0x80;
& & U0UCR|=0x80;
& & URX0IF=0;
& & U0CSR|=0x40;
void receive_handler(void)
&&uchar onoff=0;
&&c=U0DBUF;
&&if(c=='#')
& & buff_RxDat[0]=c;
& & uIndex=0;
&&else if(buff_RxDat[0]=='#')
& & uIndex++;
& & buff_RxDat[uIndex]=c;
&&if(uIndex&=2)
& & onoff=buff_RxDat[2]-0x30;
& & switch(buff_RxDat[1])
& && &case'1':
& && &&&LED1=
& && &case'2':
& && &&&LED2=
& & for(int i=0;i&DATABUFF_SIZE;i++)
& && &buff_RxDat[i]=(uchar)NULL;
& && &uIndex=0;
void main()
&&P1SEL&=~0x03;
&&P1DIR|=0x03;
&&CLKCONCMD&=0x80;
&&initUART0();
&&while(1)
& & if(URX0IF)
& && &URX0IF=0;
& && &receive_handler();
}这程序onoff=buff_RxDat[2]-0x30;这里是怎么赋值的,计算出来的值怎么对应下面程序啊,onoff值为多少。 当我发送#10 LED1关 #11 LED1开& && &#21 LED2 开 #22 LED2关&&麻烦帮帮我, 拜托了
谢谢大神,真的很感谢,很有帮助,再问一个,U0DBUF把值给变量,是直接给变量,还是复制过去后,自己清掉 ...
你问的是串口读取数据吧
U0DBUF的值复制后复制给变量
自己不需要清除缓存区
当接收到下一个字节的时候,新的数据会自动覆盖U0DBUF
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
你问的是串口读取数据吧
U0DBUF的值复制后复制给变量
自己不需要清除缓存区
哦哦,这样啊,真的很感谢您啊 ,麻烦您了
哦哦,这样啊,真的很感谢您啊 ,麻烦您了
扫描二维码,随时随地手机跟帖
技术新星奖章
人才类勋章
涓涓之细流
发帖类勋章
时间类勋章
终身成就奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
您需要登录后才可以回帖
热门推荐 /3MSP430G2755串口固件升级问题,急求助 - MSP430(TM)16 位超低功耗 MCU - 德州仪器在线技术支持社区
MSP430G2755串口固件升级问题,急求助
发表于22日前
<input type="hidden" id="hGroupID" value="37"
各位好,现用G2755做串口升级,写flash中总是随机有一行写入失败而且出现在0x0之间。串口升级程序无中断。&/p>
&p>贴上code,&/p>
&p>时钟:&/p>
&p>void Clock_Init(void)&br>{&br> DCOCTL = 0; // Select lowest DCOx and MODx settings&br> BCSCTL1 = CALBC1_8MHZ; // Set DCO&br> DCOCTL = CALDCO_8MHZ;&/p>
&p>BCSCTL1 &=~XTS; //XT1低频模式&br> BCSCTL1 |= DIVA_0 + XT2OFF; //关闭XT2,XT1不分频&br> BCSCTL2 |= SELM_0 + DIVM_0+DIVS_3;//+ SELS //MCLK选择DCO时钟,不分频,SMCLK选择DCO,分频&br> BCSCTL3 |=LFXT1S_2; //ACLK为VLO=12KHz&br> &br>}&/p>
&p>flash:&/p>
&p>void Flash_Init()&br>{&br> FCTL2 = FWKEY +FSSEL_2 + FN1;&br>}&/p>
&p>void EraseFlash(unsigned int waddr,unsigned int APP_START_ADDRESS,unsigned int APP_SEG_NUM,unsigned int FLASH_PAGE_SIZE)&br>{ &br> char i = 0;&br> waddr = APP_START_ADDRESS;&br> __disable_interrupt(); // 关闭总中断 &br> for(i = 0;i & APP_SEG_NUM; i++)&br> {&br> FCTL3 = FWKEY; &br> FCTL1 = FWKEY + ERASE; // 擦除操作 &br> *(unsigned char*)waddr=0; // 虚拟的擦除段操作 &br> while(FCTL3 & BUSY);&br> waddr += FLASH_PAGE_SIZE;&br> }&br> FCTL3=FWKEY+LOCK; &br> &br> // __enable_interrupt(); //打开全局中断&br>}&/p>
&p>unsigned char WriteFlash(unsigned int addr,unsigned char *pdata,&br> unsigned char length)&br>{&br> unsigned char ErrorFlag = 0;&br>&br> &br> while(FCTL3 & BUSY);&br> &br> __disable_interrupt();&br> &br> FCTL3 = FWKEY; // 清除锁&br> FCTL1 = FWKEY + WRT; // 设置WRT位为写操作&br> for(i=0;i&i++)&br> { &br> *(unsigned char*)addr=* // 写一个字节&br> /* if(ReadFlash(addr)!=*pdata) // 验证,写比较.正确或错误 &br> { &br> ErrorFlag = 1; // 设置错误标志 &br> } */&br> addr++;pdata++; &br> }&br> FCTL1=FWKEY; &br> FCTL3=FWKEY+LOCK;&/p>
&p>// __enable_interrupt(); //打开全局中断&br> &br> return ErrorF&br>}&/p>
&p>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/55/B783_.PNG&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/55/B783_.PNG& border=&0& alt=& &>&/a>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/55/B783_111.PNG&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/55/B783_111.PNG& border=&0& alt=& &>&/a>&/p>&div style=&clear:&>&/div>" />
MSP430G2755串口固件升级问题,急求助
此问题尚无答案
All Replies
各位好,现用G2755做串口升级,写flash中总是随机有一行写入失败而且出现在0x0之间。串口升级程序无中断。
贴上code,
void Clock_Init(void){ DCOCTL = 0; // Select lowest DCOx and MODx settings BCSCTL1 = CALBC1_8MHZ; // Set DCO DCOCTL = CALDCO_8MHZ;
BCSCTL1 &=~XTS; //XT1低频模式 BCSCTL1 |= DIVA_0 + XT2OFF; //关闭XT2,XT1不分频 BCSCTL2 |= SELM_0 + DIVM_0+DIVS_3;//+ SELS //MCLK选择DCO时钟,不分频,SMCLK选择DCO,分频 BCSCTL3 |=LFXT1S_2; //ACLK为VLO=12KHz }
void Flash_Init(){ FCTL2 = FWKEY +FSSEL_2 + FN1;}
void EraseFlash(unsigned int waddr,unsigned int APP_START_ADDRESS,unsigned int APP_SEG_NUM,unsigned int FLASH_PAGE_SIZE){
char i = 0; waddr = APP_START_ADDRESS; __disable_interrupt(); // 关闭总中断
for(i = 0;i & APP_SEG_NUM; i++) { FCTL3 = FWKEY;
FCTL1 = FWKEY + ERASE; // 擦除操作
*(unsigned char*)waddr=0; // 虚拟的擦除段操作
while(FCTL3 & BUSY); waddr += FLASH_PAGE_SIZE; } FCTL3=FWKEY+LOCK;
// __enable_interrupt(); //打开全局中断}
unsigned char WriteFlash(unsigned int addr,unsigned char *pdata, unsigned char length){ unsigned char ErrorFlag = 0;
while(FCTL3 & BUSY);
__disable_interrupt();
FCTL3 = FWKEY; // 清除锁 FCTL1 = FWKEY + WRT; // 设置WRT位为写操作 for(i=0;i&i++) {
*(unsigned char*)addr=* // 写一个字节 /* if(ReadFlash(addr)!=*pdata) // 验证,写比较.正确或错误
ErrorFlag = 1; // 设置错误标志
} */ addr++;pdata++;
} FCTL1=FWKEY;
FCTL3=FWKEY+LOCK;
// __enable_interrupt(); //打开全局中断
return ErrorF}
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
状元45725分
奇怪的问题。你的电源稳定吗?flash的擦除和写操作对电压有要求。
昵称:灰小子
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
你好,dirtwillfly.
确实奇怪,昨天一直都有这种现象。我的是搭配76930,今天一上班,断掉电芯用FET供电升级就没问题,之后再接上电芯升级也没出现异常,很奇怪。
You have posted to a forum that requires a moderator to approve posts before they are publicly available.急急急急急急急急急啊
新手学430 MSP430 FET430UIF没有显示COM口,而且检查不到 驱动 - MSP430技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
急急急急急急急急急啊
新手学430 MSP430 FET430UIF没有显示COM口,而且检查不到 驱动
等待验证会员
12:13:02  
插上仿真器后电脑显示 没有安装驱动 ,&&电脑上也没检查到COM 口&&!!!!
本帖子中包含更多资源
才可以下载或查看,没有帐号?
等待验证会员
12:13:31  
& & 大神们 救救我啊& && &
等待验证会员
12:16:02  
& &。。。。 。& &
等待验证会员
12:20:29  
急啊&&!!!!!!!!!!!!!!!!!!!!!!!!!
高级工程师
21:26:40  
你是用CCS吗?
等待验证会员
23:46:38  
网上下载驱动,win7并不是什么都可以识别的,比如cc_debuge也是一样
09:24:15  
万水千山总是情,打个酱油行不行.我给你的不是海誓山盟,
而是一颗不变的心!楼主可以参考一下。。
http://www.taiheth.com& &
http://www.dgkjly.com
http://www.jinluodz.com
http://www.konuaer.com
http://www.kangbidz.com&&
等待验证会员
19:36:35  
我昨天刷成WIN10了 没安装驱动 可以读出仿真器的 COM 口
等待验证会员
19:37:14  
&&有谁用WIN 10的吗&&IAR 用的什么版本& &求分享一下啊&&
19:14:01  
我出现过类似的问题,后来系统升级成win10后问题解决了
19:37:27  
不知道楼主解决了没有,我用的IAR5.3,win7的驱动在win10上用不了。
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司

我要回帖

更多关于 菜鸟快递问题 的文章

 

随机推荐