请教瑞萨单片机的单片机串口通信实例问题

瑞萨MCU及开发环境常见问题 - 瑞萨单片机论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
瑞萨MCU及开发环境常见问题
20:12:57  
&&分类归纳尝试中,同时欢迎总结过类似信息的朋友进行补充,方便查阅。
一、E8A常见错误
1、在Flash Development Toolkit V.3 or V.4 环境中,使用E8/E8A调试器时出现提示:“FDT will now update the E8/E8a firmware to a newer version to allow connection to thie device (current Adaptor Software (Level x) version = x.xx.xx.xxx, new version = x.xx.xx.xxx) Click OK to continue”,应该怎么操作?
答:请点击[OK]按钮,接下来会出现提示信息‘在更新过程中不要断开E8/E8A调试器的usb线缆,’负责会损坏调试器。‘E8/E8a firmware’是嵌入在E8/E8a调试器里的调试控制软件,对于HEW debugger 和Flash Development Toolkit 的版本有所不同,所以会在有必要的时候提示更新该固件程序。
2、用E8A/E8调试器连接MCU板时出现提示:“Boot failed”“communication timeout error”,接着出现提示:“target missing”“cannot find device driver or connection was cancelled”。
答:(1)检查E8A/E8与MCU的连线是否正确
& && &(2)进行E8A/E8自检程序,如果自检通不过那么调试器出故障了,需要更换新的调试器。
& && &(3)否则就是MCU板本身的问题。
3、在HEW环境下,当连接E8A调试器时出现提示“Target device driver missing, or connection cancelled”,产生错误的原因是什么?
答:可能是没有安装E8A调试软件。具体步骤是:
(1)打开HEW软件并打开一个workshop工程,如果出“devconnection cancelled”提示框,点击OK按钮;
(2)打开[Debug]-&[debug settings]对话框,Target列表里选择none,点击OK按钮关闭该对话框;
(3)重新打开[Debug]-&[debug settings]对话框,如果Targe列表里没有E8A调试软件选项,则表明E8A调试软件没有安装。解决方法就是重新安装E8A调试软件,再次打开HEW并连接调试器。
4、选择好MCU型号后,连接E8A调试器时,出现错误提示如下图所示。
答:提示框的标题是“E8R8C”,E8与E8A是不同的,所以需要重新设置[debug]-&[debug settings]-[target]选项,应该选择[xxx E8a SYSTEM]。
如果没有该选项,那么证明没有安装E8A调试软件,需要安装该软件,然后再设置上面的选项。
5、当用R8A/E8下载程序到MCU板时,出现错误提示“Invalid address value”
答:(1)请检查连接E8A时选择的MCU型号是否与电路板MCU实际型号一致,如果不一致会导致上述错误;
& && &(2)请确保位用户程序分配的空间在MCU的ROM/RAM允许设置空间范围。& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&(3)请确保ROM 空间为 768 KB (R5F3650T, R5F3651F)及640 KB (R5F3650R, R5F3651R) 的M16C/65系列MCU时,PRG2G寄存器的IRON位设置为高电平‘1’。
6、在flash write-only模式,用E8A或者E8下载程序到H8系列MCU时,出现错误告“program size is exceeds Flash memory size”。
答:出现上述警告表明下载程序的部分数据被存储到internal ROM以外的内存空间,可以改变这部分数据的section(段)或者改动程序代码。
7、用E8A连接H8系列MCU,执行程序时出现错误提示“Programcounter is odd”和“Stack pointer is odd”。
答:(1)对于PC(program counter),应该检查是否下载程序到MCU。
首先通过[debug]-&[download](或者点击workspace窗口[download modules]按钮),下载相应的程序到MCU板,然后执行[Reset CPU]操作。如果下载没完成,即使在程序了设置了reset vector,也不会有任何反应。这是因为程序跑飞后程序指针PC或者堆栈指针SP会置为奇地址,所以一定要确认程序下载成功。
如果依然不能解决问题,那么检查程序中reset vector的设置。
& &&&(2)对于H8单片机,没有指定堆栈指针SP的初始值,并且不能被设定为奇数值。另外,E8A/E8运行用户程序时需要设定用户SP,具体是在建立工程时设定SP初值。总之出现“Stack pointer is odd”的原因有两种,一种是SP被人为设定为奇数值,另一种是程序跑飞后SP被置为奇数值,那么即使重启CPU依然不会使SP发生变化。解决方法是用户程序中为ER7、R7寄存器设置相同的初始值,做为SP的初始值。具体步骤是选择HEW环境中的[view]-&[CPU]-&[register],并设定值。
8、用WDT监控程序过程中,看门狗rWDT刷新无故产生,接着出现communication timeout error提示(调试M16C,M32C系列MCU时)。
答:产生上述错误的原因有两种。
(1)在不需要看门狗定时器的情况下,[debugging of program that uses WDT]的状态为ON。
解决方法是设置该状态为OFF,具体打开E8/E8A [emulator setting]-&[firm ware assignment]-&[debugging of program that uses WDT],选择OFF状态。
(2)如果用E8A/E8对使用看门狗定时器的用户程序进行debug操作,必须选择[debugging of program that uses WDT]的为ON状态。那么请确认在程序的停止状态(即break过程中),没有看门狗溢出事件发生,因为E8A/E8会在break过程中周期性的刷新看门狗。对于M32C和M16C系列MCU,‘刷新WDT’与‘开启WDT’是等同的,所以无论用户程序是否开启WDT,WDT都会自动开启。
比如下面的用户程序:
Loop process
Watchdog Timer reset
MCU重启后,看门狗WDT开启动作应该在用户程序的‘Watchdog Timer reset
(1)’处发生。但是,用E8A/E8调试WDT时,在程序的开始‘Start (3)’处WDT开启。所以,当程序中包含循环函数‘Loop process(2)’,如果在(1)执行之前WDT reset发生,那么就会造成“Communication timeout error”。为了避免该事件发生,请在(1)之前添加WDT定时器reset 程序,但只是在debug过程中添加。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
23:56:40  
很详细!!!!
16:12:20  
不能打断点。。看看有没有解决办法
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司瑞萨M32C单片机串口发送问题-电子产品世界论坛
瑞萨M32C单片机串口发送问题
现在用瑞萨M30870单片机 100引脚,采用UART3发送接收数据。我写了两个函数一个初始化串口程序,一个是发送函数。波特率采用19200 数据位:8 停止位:1& &无奇偶校验。
void ut_Uart_init(void)
&PRCR.PRC2 = 1;
&PD9.PD9_2 = 1;
&PRCR.PRC2 = 1;
&PS3.PS3_2 = 1;
&PSL3.PSL3_2 = 0;
&PRCR.PRC2 = 1;
&PD9.PD9_1 = 0;
&PRCR.PRC2 = 1;
&PS3.PS3_1 = 0;
&S3RIC.all= 0x07;
&S3TIC.all = 0x07;
&U3BRG&=&65;&
&U3MR.all = B;&&//1 //数据位8停止位1无奇偶校验内部时钟
&U3C0.all = B;&&//1 //f1& CTS/RTS无效
&U3C1.all = B;//0x05;&&//1 //TXD RXD 使能
&U3SMR.all = 0x00;
&U3SMR2.all = 0x00;
&U3SMR3.all = 0x00;
&U3SMR4.all = 0x00;
&S3RIC.all= 0x04;
&S3TIC.all = 0x04;
发送函数为:
void ut_UART4_transmit( )
&uchar d_transmit_cmd[15];
&memcpy(d_transmit_cmd,&ABCDEFGHI&,9);
&for(i = 0;i & 9;i++){
&&U3TB = d_transmit_cmd[i];
&&U3C1_TE = 1;
&&while(U3C1_TI==0);
&&U3C1_TE = 0;
函数中的寄存器是我重新宏定义过的。
但是设备的串口与电脑串口相连没有接收到单片机发送的数据。发送函数在程序运行到某个动作时启动发送功能。请大家帮我看下函数那里写错了。谢谢了
楼主串口调试中,MCU和电脑串口连接的是什么设备?485转232的转换器?
关于未能接收数据,建议确认下:
发送模式,数据格式,波特率等(在有些文章看到过波特率太高容易出问题,可用9600等)
特别注意接收中断程序,是否发生接收错误,可以通过查看UART接收缓冲寄存器的一些标志位来确定。
&如果你的宏定义没有问题的话,你的发送函数有问题。
首先,你是使用中断发送么?如果不是,你得s3tic为什么不是0?
这个问题很重要,如果使用中断发送的,请上传中断函数。
假设不使用中断:
瑞萨UART采用双寄存器结构(移位寄存器+缓冲寄存器)
TI标志仅表示缓冲寄存器空,而TI=0时移位可能并没有完成,所以此时TE=0的话,将无法发送成功。
正确的流程:
void ut_UART4_transmit(uchar*&string, uchar len&)
&&U3C1_TE = 1;& //允许发送
& while ( len & 0 )
&&&&while(U3C1_TI==0);&& //等待缓冲寄存器空,可以接受下一个数据
&&& U3TB = *&&&&&&&&&& //写数据
&&& string ++;&&&&&&&&&&&&&&&&&& //下一个数据
&&& len --;&&&&&&&&&&&&&&&&&&&&&&&& //长度--
&&while(U3C1_TI==0); //等待缓冲寄存器空
&&while(U3C0_TXEPT == 0); //等待移位寄存器空(真正的发送完成)&&
&&U3C1_TE = 0; //关闭发送
Fishs_new_life 你好。谢谢你的回复。以前一直在用51开发,现在改用瑞萨的M32C开发发现有很多跟51不同的设置。网上找资料也不是很多。请问你有MSN或者其他什么通讯工具吗?想跟你交个朋友。
Fishs_new_life 你好 我没有采用中断发送而是采用查看寄存器的方式发送。你上面的程序有个地方我有些疑惑。&while(U3C1_TI==0); //等待缓冲寄存器空
&&while(U3C0_TXEPT == 0); //等待移位寄存器空(真正的发送完成)&&这两条语句是否应该放到上面的while循环中。这样才是发送一个字节的完整流程吧。我采用你的流程改写程序后还是没有办法接收到设备发出的信息。进行单步调试的时候发现我在向U3TB赋值后,U3C1_TI却一直为1,而没有变成0。是否是那里还有需要设置的?
不应该放在循环中。我前面说过了,是双buffer结构。所以只需要在最后一个字节保证移位完成就行。
还请 Fishs_new_life&能给出一个使用中断的方式进行发送和接收的程序啊,谢谢。我做的一个发送和接收能实现,但是有些不稳定。
中断比较复杂。尤其是中断发送,个人建议使用中断接收,查询发送。因为接收是不可预测的,而发送使自己主动。
首先需要注意下面3点:
是否允许接收中断:sxtic = 1~7
是否允许可屏蔽中断:asm(&FSET I&);
是否正确指定中断函数:#pragma interrupt UART3RecvInt (vect = xxx)
其次中断接收需要和主程序结合使用。
下面的例子是使用ring buffer接收
char&&&&&& ring_buf_w_
char&&&&&& ring_buf_r_
char&&&&&& ring_buf[256];
&&&&&& //此处省略初始化等
&&&&&& while ( 1 );
&&&&&&&&&&& if ( ring_buf_r_ptr != ring_buf_w_ptr&)& //如果接收到新数据&&&&&&&&&&&
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&& //处理
&&&&&&&&&&&&&&&&& ring_buf_r_ptr&
&&&&&&&&&&& }
#pragma& & interrupt&&& UART3RecvInt
void&& UART3RecvInt( )
&&&&&& int& temp_data = u3&&&&&&&&& //读出数据
&&&&&& if ( ( ring_buf_r_ptr - ring_buf_w_ptr ) & 1&)& //如果还有足够的空间
&&&&&&&&&&&&&ring_buf[ring_buf_w_ptr] = temp_
&&&&&&&&&&&& ring_buf_w_ptr& ++;
Thanks a lot !再品读一下~~&&
不过感觉有个地方好像不对:& while(1);& 这个语句后面的 &;& 不用的吧。
谢谢qlm指正,确实写错了。。。。。。
匿名不能发帖!请先 [
Copyright (C) 《电子产品世界》杂志社 版权所有瑞萨单片机串口问题_百度知道
瑞萨单片机串口问题
使用代码生成器,生成的串口代码,怎么发送数据到串口助手,毫无反应?
使用的型号是RL78/G12(RF10268A)
我有更好的答案
萨单片机串口通信,基本功能是:晶振为16.348MHZ,波特率为1200,8位,1位停止位,无校验
为您推荐:
其他类似问题
您可能关注的内容
单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。请教一个串口通讯问题,求大神【单片机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:145,688贴子:
请教一个串口通讯问题,求大神收藏
书上有一个单片机通讯的历程,我看到了设定定时器但是没有定时器中断。后边解释说因为定时器的模式是方式1,自动重置所以中断里什么都不用做,所以不需要中断。但是我看了下如果没有中断那么这个定时器在这个程序里完全没有意义啊,只是一个人在那不停计时,其他地方也没有调用他。按前文将的是应该用定时器来控制波特率,请问这是怎么控制的,谢谢大神。
单片机,到技成培训,PLC,变频器,电工应有尽有,一年学费仅1298,免费注册即可试学1298元包年学习,含答疑辅导课,性价比超高,自动化远程培训第—品牌,深圳技成
还有一个问题,我看串口通信读写全靠一个SBUF,请问这个SBUF内存是多大,好像REN=1后就默认不停处于接收状态,如果我一直不停给他传输数据那么SBUF会接收一个字符就把上一个字符顶掉吗?如果想吧接收的数据都存起来应该怎么做?数据都放在哪?
如果我没理解错的话第一那个定时器是设定波特率的,和定时无关。第二sbuf是8位的所以会被顶掉。你可以拿个数组去接
哈哈,关于单片机一些基础问题,建议你去stc官网随找个型号的单片机的资料,仔细研究研究,相信你收货很大。
有没有大神给个程序啊,电子钟,时分秒可调
登录百度帐号推荐应用瑞萨单片机常见问题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
瑞萨单片机常见问题
&&单片机知识普及
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩13页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 单片机与电脑串口通信 的文章

 

随机推荐