stm32 做rs485通信,MCU可以接收数据,但不能发数据?stm32 做rs485通信,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;
}
程序及电路图截图如下:
stm32 rs485 嵌入式 通信 串口
[解决办法]
搞不懂你是串口1还是串口3啊,数据发到串口3上,你查串口1的状态干嘛呢
另外,这个也很好测吧,首先看程序,不行找个3用表或示波器从CPU往外倒