这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 瑞萨M32C单片机串口发送问题

共3条 1/1 1 跳转至

瑞萨M32C单片机串口发送问题

菜鸟
2009-07-31 10:48:50     打赏

现在用瑞萨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 = B00000101;  //1 //数据位8停止位1无奇偶校验内部时钟
 U3C0.all = B00010000;  //1 //f1  CTS/RTS无效
 U3C1.all = B00000100;//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 i;
 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;

 }

}
函数中的寄存器是我重新宏定义过的。
但是设备的串口与电脑串口相连没有接收到单片机发送的数据。发送函数在程序运行到某个动作时启动发送功能。请大家帮我看下函数那里写错了。谢谢了




关键词: 瑞萨     单片机     串口     发送     问题    

菜鸟
2009-08-05 09:56:50     打赏
2楼

Fishs_new_life 你好。谢谢你的回复。以前一直在用51开发,现在改用瑞萨的M32C开发发现有很多跟51不同的设置。网上找资料也不是很多。请问你有MSN或者其他什么通讯工具吗?想跟你交个朋友。


菜鸟
2009-08-05 11:15:46     打赏
3楼

Fishs_new_life 你好 我没有采用中断发送而是采用查看寄存器的方式发送。你上面的程序有个地方我有些疑惑。 while(U3C1_TI==0); //等待缓冲寄存器空
  while(U3C0_TXEPT == 0); //等待移位寄存器空(真正的发送完成)  这两条语句是否应该放到上面的while循环中。这样才是发送一个字节的完整流程吧。我采用你的流程改写程序后还是没有办法接收到设备发出的信息。进行单步调试的时候发现我在向U3TB赋值后,U3C1_TI却一直为1,而没有变成0。是否是那里还有需要设置的?


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]