简介
rs485是一种硬件通信接口,USART引脚的TTL电平通过SP485芯片转换为差分信号,+2V~+6V表示"0",- 6V~- 2V表示"1"。RS485有两线制和四线制两种接线,四线制是全双工通讯方式,本文采用两线制半双工通讯方式。文章来源地址https://www.toymoban.com/news/detail-539500.html
1 rs485初始化
//1、USART配置
/* enable GPIO clock */
rcu_periph_clock_enable(RCU_GPIOB);
/* enable USART clock */
rcu_periph_clock_enable(RCU_USART2);
/* connect port to USARTx_Tx */
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10 );
/* connect port to USARTx_Rx */
gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_11);
/* USART configure */
usart_deinit(USART2);
usart_baudrate_set(USART2, 9600U);
usart_receive_config(USART2, USART_RECEIVE_ENABLE); //默认接收使能
usart_transmit_config(USART2, USART_TRANSMIT_ENABLE);
usart_enable(com);
//2、 rs485使能
/* enable the RS485_OE clock */
rcu_periph_clock_enable(RCU_GPIOC);
/* configure led GPIO port */
gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_3);
GPIO_BC(GPIOC) = GPIO_PIN_3; //默认接收使能
//3、rs485中断初始化
nvic_irq_enable(USART2_IRQn,0, 1U);
usart_interrupt_enable(USART2, USART_INT_RBNE); /* 使能USART2读区非空中断 */
usart_interrupt_enable(USART2, USART_INT_IDLE); /* 使能USART2空闲中断 */
2 rs485发送数据
//发送数据
int rs485_send_data(uint8_t *buf, uint32_t len)
{
gpio_bit_set(GPIOC, GPIO_PIN_3);; // 设置为发送模式
while(len--)
{
while(RESET == usart_flag_get(USART2, USART_FLAG_TBE)); // 等待发送区为空
usart_data_transmit(USART2, *(buf++)); // 发送数据
}
while(RESET == usart_flag_get(USART2, USART_FLAG_TC)); // 发送完成中断
rxcount = 0;
gpio_bit_reset(GPIOC, GPIO_PIN_3); // 设置为接收模式
return 0;
}
3 中断接收数据
void USART2_IRQHandler(void)
{
if((RESET != usart_interrupt_flag_get(USART2, USART_INT_FLAG_RBNE)) &&
(RESET != usart_flag_get(USART2, USART_FLAG_RBNE)))// 接收到数据
{
rxbuffer[rxcount++] = usart_data_receive(USART2);
usart_interrupt_flag_clear(USART2, USART_INT_FLAG_RBNE); //清中断标志
} else if (RESET != usart_interrupt_flag_get(USART2, USART_INT_FLAG_IDLE)) {
usart_interrupt_flag_clear(USART2, USART_INT_FLAG_IDLE);
usart_data_receive(USART2); /* 清除接收完成标志位 */
g_rs485_receive_end = 1; //事件通知接收完成
}
}
文章来源:https://www.toymoban.com/news/detail-539500.html
到了这里,关于GD32f303之rs485配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!