stm32 RS485 SP3485
RS485 是半双工通信(2 线制)
SP3485芯片的DE与RE短接在一起连接在STM32F1芯片的PG3上,通过PG3管脚就可以控制 SP3485的收发,当PG3=0时,为接收模式,当PG3=1时,为发送模式
相关文章:
http://blog.csdn.net/zhangxuechao_/article/details/77095985
举例
void USART2_IRQHandler()
{
u8 r;
if(USART_GetITStatus(USART2, USART_IT_RXNE) == SET)
{
r = USART_ReceiveData(USART2);
rs485 = 1; //使能发送
delay_ms(1);
USART_SendData(USART2, r);
led1 = ~led1;
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) != SET);
rs485 = 0;
}
USART_ClearFlag(USART2, USART_FLAG_TC);
}
void RS485_init()
{
GPIO_InitTypeDef gpiog3 =
{
GPIO_Pin_3,
GPIO_Speed_50MHz,
GPIO_Mode_Out_PP //推挽输出
};
GPIO_InitTypeDef gpioa2 =
{
GPIO_Pin_2,
GPIO_Speed_50MHz,
GPIO_Mode_AF_PP //复用推挽输出
};
GPIO_InitTypeDef gpioa3 =
{
GPIO_Pin_3,
GPIO_Speed_50MHz,
GPIO_Mode_IN_FLOATING //模拟输入
};
NVIC_InitTypeDef nvic =
{
USART2_IRQn,
2,
2,
ENABLE
};
USART_InitTypeDef usart =
{
9600,
USART_WordLength_8b,
USART_StopBits_1,
USART_Parity_No,
USART_Mode_Rx | USART_Mode_Tx,
USART_HardwareFlowControl_None, //硬件流控制
};
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOG, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
GPIO_Init(GPIOG, &gpiog3);
GPIO_Init(GPIOA, &gpioa2);
GPIO_Init(GPIOA, &gpioa3);
USART_Init(USART2, &usart);
USART_Cmd(USART2, ENABLE);
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
NVIC_Init(&nvic);
rs485 = 0; //默认接收
}