簡介
? ? ? ? rs485是一種硬件通信接口,USART引腳的TTL電平通過SP485芯片轉換為差分信號,+2V~+6V表示"0",- 6V~- 2V表示"1"。RS485有兩線制和四線制兩種接線,四線制是全雙工通訊方式,本文采用兩線制半雙工通訊方式。文章來源地址http://www.zghlxwxcb.cn/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讀區(qū)非空中斷 */
usart_interrupt_enable(USART2, USART_INT_IDLE); /* 使能USART2空閑中斷 */
2 rs485發(fā)送數據
//發(fā)送數據
int rs485_send_data(uint8_t *buf, uint32_t len)
{
gpio_bit_set(GPIOC, GPIO_PIN_3);; // 設置為發(fā)送模式
while(len--)
{
while(RESET == usart_flag_get(USART2, USART_FLAG_TBE)); // 等待發(fā)送區(qū)為空
usart_data_transmit(USART2, *(buf++)); // 發(fā)送數據
}
while(RESET == usart_flag_get(USART2, USART_FLAG_TC)); // 發(fā)送完成中斷
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; //事件通知接收完成
}
}
文章來源:http://www.zghlxwxcb.cn/news/detail-539500.html
到了這里,關于GD32f303之rs485配置的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!