查看: 4258|回复: 3

[MQX] 在mqx操作系统下,k64如何实现利用RTS控制RS485收发数据

[复制链接]

该用户从未签到

51

主题

307

帖子

0

高级会员

Rank: 4

积分
651
最后登录
2020-9-4
发表于 2014-10-16 17:14:36 | 显示全部楼层 |阅读模式
你好:
下面是我的测试程序,大家帮看看有何问题?
本串口通过RS485转RS232转换器接到电脑的串口,测试版发送的数据电脑接收不到,测试版能够接收到电脑的发送数据。难道我还得通过程序控制RTS。

void mian_task
   (
      uint32_t initial_data
   )
{
   MQX_FILE_PTR rs485_dev = NULL;
   char  data_buffer[] = "RS485 send example";
   bool disable_rx = TRUE;
   uint32_t result;
     rs485_dev = fopen( RS485_CHANNEL, (char const *)IO_SERIAL_HW_485_FLOW_CONTROL );
      
   if( rs485_dev == NULL )
   {
      /* device could not be opened */
      _task_block();
   }
   
   /* half duplex, two wire. use only if disable receiver in transmit is desired */
   result = ioctl( rs485_dev, IO_IOCTL_SERIAL_DISABLE_RX, &disable_rx );
   if( result == IO_ERROR_INVALID_IOCTL_CMD )
   {
      /* ioctl not supported, use newer MQX version */
      _task_block();
   }
   
   /* write data */
   write( rs485_dev, data_buffer, strlen(data_buffer) );
   
   /* empty queue - not needed for polled mode */
   fflush( rs485_dev );
   
   /* wait for transfer complete flag */
   result = ioctl( rs485_dev, IO_IOCTL_SERIAL_WAIT_FOR_TC, NULL );
   if( result == IO_ERROR_INVALID_IOCTL_CMD )
   {
      /* ioctl not supported, use newer MQX version */
      _task_block();
   }
   
   /* half duplex, two wire */
   /* if receiver was disabled before, enable receiver again */  
   disable_rx = FALSE;
   ioctl( rs485_dev, IO_IOCTL_SERIAL_DISABLE_RX, &disable_rx ) ;
   while(1)
    {
        i=  fread(data_buffer, 1, 10,rs485_dev);
        if(i !=0)
        {   
            for(j =0; j<i;j++)
            {
               
                buffer[readlen+j] = data_buffer[j];
               
            }
            readlen += i;
        }
        if(readlen ==10)
        {
            break;
        }
    }
   
   _task_block();
}






我知道答案 目前已有3人回答
回复

使用道具 举报

该用户从未签到

51

主题

307

帖子

0

高级会员

Rank: 4

积分
651
最后登录
2020-9-4
 楼主| 发表于 2014-10-20 15:49:57 | 显示全部楼层
顶一下,FAE大侠们,能否帮解决一下!
回复 支持 反对

使用道具 举报

该用户从未签到

51

主题

307

帖子

0

高级会员

Rank: 4

积分
651
最后登录
2020-9-4
 楼主| 发表于 2014-10-22 11:12:10 | 显示全部楼层
顶一下,FAE大侠们,能否帮解决一下!
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

16

帖子

0

新手上路

Rank: 1

积分
37
最后登录
1970-1-1
发表于 2014-11-27 11:29:07 | 显示全部楼层
我是在init_gpio里面指定引脚功能,指定好后就正常了!程序无需对其进行操作!  param =  IO_SERIAL_NON_BLOCKING|IO_SERIAL_HW_485_FLOW_CONTROL;
  if(MQX_OK != ioctl(com_fd[com_no], IO_IOCTL_SERIAL_SET_FLAGS, &param))
  {
        printf("Set Flags faild!\n");
        //return false;
  }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-12 06:04 , Processed in 0.086528 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表