我的飞思卡尔之CP2102的调试
----基于CP2102的串口通信
2010.1.21~2010.1.22
平台:MC9S12XS128,PC机,CP2102模块,串口小助手,USB线,BDM下载器
功能:USB转TTL232模块,利用USB完成MC9S12XS128与PC机的串口通信。由于在 智能车制作的过程中,经常会进行的工作是单片机和PC机的通信,即在线调试,这 个模块的设计减去笔记本或者新装台式机没有串口的烦恼。
调试过程:
1、CP2102的驱动电路
首先设计CP2102的驱动电路,在它的DATASHEET有详细的说明,按技术手册上的样图,设计成这样的电路图:
2、CP2102的焊接
PCB板拿到手后,检查硬件电路是否有误,然后进行焊接,由于CP2102是QFN封装,所以焊接的时候非常考验你的耐心和技术,这里我说说我的焊接方法。
先要说明,即使你的环境非常非常艰苦,即使你非常非常“穷”,只要你拥有电烙铁(性嫩稍好点儿的,平头和圆头的都行)、万用表、助焊剂(我焊的时候只用了些活性比较强的松香)、焊锡丝(最好是0.5mm的)、热风枪、酒精、镊子就可以完成工作了。
下面说说步骤,先用酒精清洗一下元件引脚和焊盘;然后在助焊剂的作用下,在焊盘和引脚上稍稍涂锡,一定要保证均匀(注意:量少些就可以,焊锡不要太鼓);用镊子夹住芯片,对准焊盘放置(注意:一定要先注意引脚与焊盘的顺序,然后大致对准即可,不过不要偏离太多);用镊子抵住芯片稍固定,然后用热风枪均匀地吹芯片(注意:温度不宜太高,300°就可以了),芯片引脚会自动对应连接在焊盘上;最后用万用表打一下各个焊盘之间,是否有短路的迹象(注意:若有的话,可以再用热风枪加热瞬间)。
声明:以上焊接方法是本人经过实践可行的,但不能保证对所有人都可行,方法只提供参考,若造成损失本人概不负责。
3、电路检查
用万用表测试USB接口的四线,是否有短接的情况,USB接口短接会导致PC硬件损坏(电源或主板),所以这步不能省(别偷懒,PC玩坏了可不好受)。
确认没有短接后,将模块连接到PC的USB口
4、安装驱动
若模块硬件无误的话,PC可以识别到新的USB设备 。然后安装PC端驱动软件 。
软件安装成功后,PC应该多出一个串口,一般是COM3,可以使用右键我的电脑,管理,设备管理器,端口,看到新的COM3口。此时CP2102的指示灯应该亮。
5、CP2102功能测试
将CP2101的TTL232端的RX和TX短接,打开串口小助手,设置端口为COM3。然后让串口软件发送数据Hello World! 看PC端软件,是否能不丢包的收到自己发的数据,若收发相同,说明驱动安装正确,硬件焊接正常,USB转串口可以自发自收 。成功第一步!
6、连接MC8S12XS128
将CP2102的TX接MC8S12XS128的RX(引脚89),
将CP2102的RX接MC8S12XS128的TX(引脚90),
将CP2102的GND接MC8S12XS128的GND,
CP2102与MC8S12XS128之间,不加MAX232,MAX3232等电平转换芯片,CP2102转出来的串口是TTL电平,可以直接与单片机相连。
7、串口调试
烧入以下程序:
/------------------------------------------------------------------------------------------------------------------//
//功能说明:SCI例程—--在“串口小助手”下完成信息的收发
//使用说明:单片机的收发通讯时是一步完成的,即发送什么就接收什么,在软件下观察
//程序设计:电子设计吧【www.dzsj8.com】
//设计时间:2010.01.21
//----------------------------------------------------------------------------------------------------------------//
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
//unsigned char txt[]={"Hello World!"} ;
void delay(unsigned int time)
{
unsigned int i,j,k;
for(i=0;i<125;i++)
for(j=0;j<125;j++)
for(k=time;k>0;k--);
}
//-----------------------初始化SCI0----------------------------//
void SciInit()
{
SCI0BD=52; //9600bps Baud Rate=BusClock/(16*SCIBD)
SCI0CR1=0; //正常8位模式,无奇偶校验
SCI0CR2=0X2C; //发送允许 接受中断允许
}
//----------------------读SCI数据-------------------------//
unsigned char SciRead()
{
if(SCI0SR1_RDRF==1) //表明数据从位移寄存器传输到SCI数据寄存器
{
SCI0SR1_RDRF=1; //读取数据寄存器会将RDRF清除 重新置位
return SCI0DRL; //返回数据寄存器的数据
}
}
//-----------------写SCI数据----------------------------//
void SciWrite(unsigned char sendchar)
{
while (!(SCI0SR1&0x80));
SCI0DRH=0;
SCI0DRL=sendchar;
}
//------------------------main----------------------------------//
void main(void)
{
SciInit();
EnableInterrupts;
for(;;)
{
} /* wait forever */
/* please make sure that you never leave this function */
}
//---------------------------接收中断函数-----------------------//
#pragma CODE_SEG NON_BANKED
void interrupt 20 SCI0_re(void)
{
unsigned char ch;
ch=SciRead();
SciWrite(ch) ;
}
然后在软件上观察,发送什么数据就能接收什么数据,而且收发数据时CP2102指示灯有闪烁,说明单片机已经通过CP2102实现了和PC机的通信,调试成功!
问题说明:若不成功,首先要检查波特率是否设置正确,然后检查引脚连接是否正确,是否共地等等常见问题。
8、结束语
至此,基于CP2102的MC9S12XS128与PC机的通信就完成了,在智能车的制作中,不论是光电组还是电磁组还是摄像头组,都能在PC机上随心所欲地接收智能车的信息了,一目了然进行调试,可以减少不少调试时间哦~~~
综上,就是将PC-CP2102-MCU这一链路的通讯过程分成不同阶段,分别调试,各个击破。
发表评论 评论 (1 个评论)