打印

stm32 做rs485通信,MCU可以接收数据,但不能发数据?

[复制链接]
6843|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stm32 做rs485通信,MCU可以接收数据,但不能发数据?我是通过查询的方式来发送数据,以中断的方式来接收数据,现在的问题是MCU可以接收数据,但不能发送数据……求指点!!!
我写的程序如下:

   #include "stm32f10x_lib.h"
   #include"delay.h"

   /*
       RS485_TX----PC10-----USART3_TX
    RS485_RX---- PC11-----USART3_RX
    RS485_DIR----PC12
   */
#define RS485_DIR_TX   GPIO_SetBits(GPIOC, GPIO_Pin_12)
#define RS485_DIR_RX   GPIO_ResetBits(GPIOC, GPIO_Pin_12)


void  USART3_Configuration(void)
{
     USART_InitTypeDef USART_InitStruct;
     GPIO_InitTypeDef GPIO_InitStructure;

     GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);
     //RS485_DIR--PC12
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出;
     GPIO_Init(GPIOC, &GPIO_InitStructure);

     //RS485_TX--PC10
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
     GPIO_Init(GPIOC, &GPIO_InitStructure);

     //RS485_RX--PC11
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
     GPIO_Init(GPIOC, &GPIO_InitStructure);


     USART_StructInit(&USART_InitStruct);//将结构体设置为缺省状态
     USART_InitStruct.USART_BaudRate=9600;//波特率设置为9600
     USART_InitStruct.USART_WordLength=USART_WordLength_8b;//一帧数据的宽度设置为8bits
     USART_InitStruct.USART_StopBits=USART_StopBits_1;//在帧结尾传输1个停止位
     USART_InitStruct.USART_Parity=USART_Parity_No;//奇偶失能模式,无奇偶校验
     USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流控制失能
     USART_InitStruct.USART_Mode=USART_Mode_Tx |USART_Mode_Rx;    //使能发送/接收使能
     USART_Init(USART3, &USART_InitStruct);
     USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//打开串口3接受中断
     //USART_ITConfig(USART3, USART_IT_TXE, ENABLE);//打开串口1的中断响应函数
     USART_Cmd(USART3, ENABLE);//打开USART1
     
     USART_ClearFlag(USART1,USART_FLAG_TC);//清除发送完成标志位
     
     RS485_DIR_RX;
}

void USART485_SendChar(u8 data)
{
  RS485_DIR_TX;
  delay_ms(1);
  USART_SendData(USART3,data);
  while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);
  delay_ms(1);
  RS485_DIR_RX;
}







沙发
cqmiao| | 2013-5-18 14:12 | 只看该作者
发送的时候是不是该关闭中断

使用特权

评论回复
板凳
huangxz| | 2013-5-18 14:36 | 只看该作者
cqmiao 发表于 2013-5-18 14:12
发送的时候是不是该关闭中断

不用关闭中断就可以发送

使用特权

评论回复
地板
airwill| | 2013-5-18 16:28 | 只看该作者
恐怕是发送控制脚的问题

使用特权

评论回复
5
jiaxinhui| | 2013-5-18 17:03 | 只看该作者
嗯,看看发送控制端的IO设置是否正确

使用特权

评论回复
6
hawksabre| | 2013-5-19 17:35 | 只看该作者
看一看单片机输出管脚的设置是否正确   同时降低波特率试一试   这个问题没有太多的把握

使用特权

评论回复
7
A我心飞扬A|  楼主 | 2013-5-20 11:12 | 只看该作者
谢谢大家的回帖,现在问题已经解决了,MCU可以向PC发数据了,正在调试其它部分。再次谢谢大家的回帖·····

使用特权

评论回复
8
outstanding| | 2013-5-20 17:23 | 只看该作者

使用特权

评论回复
9
sflower| | 2013-5-21 13:49 | 只看该作者
呵呵,我用485没有问题呀

使用特权

评论回复
10
HC0821| | 2013-8-22 17:28 | 只看该作者
A我心飞扬A 发表于 2013-5-20 11:12
谢谢大家的回帖,现在问题已经解决了,MCU可以向PC发数据了,正在调试其它部分。再次谢谢大家的回帖··· ...

额,敢问楼主是如何解决的啊,我把你上面的那段程序抄上去了,用串口调试助手调试,收不到数据!

使用特权

评论回复
11
trumpxp| | 2013-8-22 20:00 | 只看该作者
帮楼主顶一个   楼主  希望你共享一下自己的解决方法   这样对别人很有帮助

使用特权

评论回复
12
Jason_Ding| | 2013-10-16 15:43 | 只看该作者
顶楼主,希望分享一下解决办法,谢谢!

使用特权

评论回复
13
cheng8708| | 2014-8-29 15:01 | 只看该作者
sflower 发表于 2013-5-21 13:49
呵呵,我用485没有问题呀

你好,那问一下,为什么不能发送呢?

使用特权

评论回复
14
cheng8708| | 2014-8-29 15:01 | 只看该作者
A我心飞扬A 发表于 2013-5-20 11:12
谢谢大家的回帖,现在问题已经解决了,MCU可以向PC发数据了,正在调试其它部分。再次谢谢大家的回帖··· ...

楼主,怎么解决的啊,我遇到一摸一样,求指导,谢谢

使用特权

评论回复
15
hudi008| | 2014-8-29 23:52 | 只看该作者
485使能了?

使用特权

评论回复
16
hudi008| | 2014-8-29 23:53 | 只看该作者
需要高电平使能吧

使用特权

评论回复
17
hudi008| | 2014-8-29 23:53 | 只看该作者
引脚要配置真确的

使用特权

评论回复
18
hudi008| | 2014-8-29 23:55 | 只看该作者

使用特权

评论回复
19
crystal1987| | 2014-12-4 15:22 | 只看该作者
遇到同样的问题,希望楼主公布一下,解决方案?

使用特权

评论回复
20
penghuiyanbiyun| | 2014-12-25 10:57 | 只看该作者
HC0821 发表于 2013-8-22 17:28
额,敢问楼主是如何解决的啊,我把你上面的那段程序抄上去了,用串口调试助手调试,收不到数据! ...

他这里只公布了部分的程序 只有发送部分的。接收数据的中断处理函数void USART1_IRQHandler(void)和主函数都没有写出来  你直接复制他的程序肯定是没有结果的啦。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

1

粉丝