OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8661|回复: 6

485通信只能发不能收

[复制链接]

19

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-4-29
在线时间
38 小时
发表于 2015-8-26 10:02:19 | 显示全部楼层 |阅读模式
5金钱
把串口1接收到的收据放到串口2 的接收缓存区让让485通过串口2发送出去,但是我的程序只能接收到串口1发送过来的数据,不能通过485发送出去,不知道哪里有问题
[mw_shl_code=c,true]#include "sys.h" #include "usart.h" #include "delay.h" #include "key.h" #include "led.h" #include "rs485.h" #include "lcd.h" #include "beep.h" int main(void) { u8 t; u8 rxlen; u8 rs485buf[64]; u8 times=0; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(115200); delay_init(168); KEY_Init(); LED_Init(); RS485_Init(9600); LCD_Init(); POINT_COLOR=RED; LCD_ShowString(30,50,200,16,16,"Explorer STM32F4"); LCD_ShowString(30,70,200,16,16,"RS485 TEST"); LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(30,110,200,16,16,"2015/8/25"); POINT_COLOR=BLUE; LCD_ShowString(30,170,200,16,16,"Send Data:"); LCD_ShowString(30,210,200,16,16,"Receive Data:"); while(1) { delay_ms(2); if(USART_RX_STA&0x8000) { rxlen=USART_RX_STA&0x3fff; for(t=0;t<rxlen;t++) { rs485buf[t]=USART_RX_BUF[t]; LCD_ShowxNum(30+t*32,190,rs485buf[t],3,16,0X80); } RS485_Send_Data(rs485buf,rxlen); USART_RX_STA=0; } else { times++; if(times%200==0)printf("请输入数据\r\n"); if(times%30==0)LED0=!LED0; delay_ms(10); } } } [/mw_shl_code]



最佳答案

查看完整内容[请看2#楼]

回复【6楼】止天: --------------------------------- 谢谢,问题已经解决了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-4-29
在线时间
38 小时
 楼主| 发表于 2015-8-26 10:02:20 | 显示全部楼层
回复【6楼】止天:
---------------------------------
谢谢,问题已经解决了
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11473
金钱
11473
注册时间
2014-4-1
在线时间
1297 小时
发表于 2015-8-26 10:26:03 | 显示全部楼层
软硬件问题都有可能。
回复

使用道具 举报

19

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-4-29
在线时间
38 小时
 楼主| 发表于 2015-8-26 10:47:22 | 显示全部楼层
回复【2楼】xuande:
---------------------------------
硬件应该没有问题,我试过原子的485实验例程,通信正常,所以不是硬件问题,是软件问题,但是不知道软件哪里出错了
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2015-8-26 15:43:15 | 显示全部楼层
中断发送吗?
回复

使用道具 举报

19

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-4-29
在线时间
38 小时
 楼主| 发表于 2015-8-26 16:04:00 | 显示全部楼层
回复【4楼】止天:
---------------------------------
不是,下面是485发送程序,至于初始化函数肯定没问题,都是用的原子实验教程编写的驱动程序
void RS485_Send_Data(u8 *buf,u8 len)
{
u8 t;
RS485_TX_EN=1; //?è????·???????
   for(t=0;t<len;t++) //???··???????
{
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET); //????·????á?? ?¨??????????
USART_SendData(USART2,buf[t]); //·???????
}  
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET); //????·????á??
RS485_RX_CNT=0;   
RS485_TX_EN=0; //?è????????????
}>
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2015-8-26 16:07:27 | 显示全部楼层
程序没卡到这里就说明发出去了  用逻辑仪看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 07:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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