GD32F103 USART配置

本文详细描述了如何配置USART(通用异步收发器)接口,包括GPIO端口的选择、驱动器模式设置、AlternateFunction(AF)的应用,以及RTS控制函数。还涉及了USART的初始化过程,如波特率设置、中断配置等。
摘要由CSDN通过智能技术生成

USART配置

	uint32_t GPIOx;
	uint16_t GPIO_PIN_Tx;
	uint16_t GPIO_PIN_Rx;
	uint16_t UART_GPIO_AF;
  
	if(USARTx == USART0){
		GPIOx = GPIOA;
		GPIO_PIN_Tx = GPIO_PIN_9;
		GPIO_PIN_Rx = GPIO_PIN_10;
		UART_GPIO_AF = GPIO_AF_1;
	}		
	else if(USARTx == USART1){
		GPIOx = GPIOA;
		GPIO_PIN_Tx = UART2_GPIO_TX;
		GPIO_PIN_Rx = UART2_GPIO_RX;
		UART_GPIO_AF = UART2_GPIO_AF;
	}
    else{        
        return;
    }

	usart_deinit(USARTx);

	rcu_periph_clock_enable(RCU_GPIOA);
	gpio_af_set(GPIOx, UART_GPIO_AF, GPIO_PIN_Tx);
	/* connect port to USARTx_Tx */
    /* configure USART Tx as alternate function push-pull */
    gpio_mode_set(GPIOx, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_Tx);
    gpio_output_options_set(GPIOx, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_Tx);

    /* connect port to USARTx_Rx */
    gpio_af_set(GPIOx, UART_GPIO_AF, GPIO_PIN_Rx);
    /* configure USART Rx as alternate function push-pull */
    gpio_mode_set(GPIOx, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_Rx);
    gpio_output_options_set(GPIOx, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_Rx);

RTS初始化

void RTS_GPIOInit(usart_def* p)
{
	if(p->USARTx == USART0){
		p->RTX_GPIO = GPIOA;
		p->RTX_GPIO_PINx = 0;
	}
		
	else if(p->USARTx == USART1){		
		p->RTX_GPIO = GPIOA;
		p->RTX_GPIO_PINx = USART2_RTS_PIN;
	}

	/* Enable the GPIO Clock */
	rcu_periph_clock_enable(RCU_GPIOA);
	
	gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, p->RTX_GPIO_PINx);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, p->RTX_GPIO_PINx);
}
void RTSControl(usart_def* p, uint8_t OutSt)
{
	if(OutSt == ENABLE_RX){
		gpio_bit_reset(p->RTX_GPIO, p->RTX_GPIO_PINx);
	}
	else if(OutSt == DISABLE_RX){
		gpio_bit_set(p->RTX_GPIO, p->RTX_GPIO_PINx);
	}
}
void Usart_Init(usart_def* p, uint32_t USARTx, uint32_t BaudRate, uint32_t stblen)
{
	uint8_t irq_channel;

	
	USARTGPIOInit(USARTx);
	if(USARTx == USART0)
	{		
		irq_channel = USART0_IRQn;
		rcu_periph_clock_enable(RCU_USART0);
	}		
	else if(USARTx == USART1)
	{				
		irq_channel = USART1_IRQn;
		rcu_periph_clock_enable(RCU_USART1);
	}
    else{        
        return;
    }	

	usart_deinit(USARTx);

	usart_baudrate_set(USARTx, BaudRate);
    usart_word_length_set(USARTx, USART_WL_8BIT);
	usart_stop_bit_set(USARTx, stblen);    
    usart_parity_config(USARTx, USART_PM_NONE);
    usart_hardware_flow_cts_config(USARTx, USART_CTS_DISABLE);
    usart_receive_config(USARTx, USART_RECEIVE_ENABLE);
    usart_transmit_config(USARTx, USART_TRANSMIT_ENABLE);
    usart_enable(USARTx);

	usart_interrupt_enable(USARTx, USART_INT_RBNE);		//开启接收中断
	usart_interrupt_enable(USARTx, USART_INT_IDLE);		//开启空闲中断

	nvic_irq_enable(irq_channel, 0);   
	
	p->USARTx = USARTx;
    p->baudrate = BaudRate;
	if(USARTx == USART1)
	{
		RTS_GPIOInit(p);
		RTSControl(p, ENABLE_RX);
	}
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值