#include "uart.h"
|
#include "gpio.h"
|
#include "gd32e23x_usart.h"
|
|
static Uart_DataPtrType Uart_DataPtr = {0xaa, 0xbb, 0, 0, 0, 0};
|
/******************************************************************
|
|Usart0
|
|PB6-TX:复用推挽输出
|
|PB7-RX:浮空输入
|
******************************************************************/
|
static void GPIO_Uart_Init(void)
|
{
|
rcu_periph_clock_enable(RCU_GPIOB);
|
|
gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_6);
|
gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_7);
|
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
|
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
|
}
|
|
/******************************************************************
|
|Usart0
|
|PB6-TX
|
|PB7-RX
|
******************************************************************/
|
void UartInit(void)
|
{
|
GPIO_Uart_Init();
|
rcu_periph_clock_enable(RCU_USART0);
|
usart_deinit(USART0);
|
usart_baudrate_set(USART0, 9600);
|
usart_parity_config(USART0, USART_PM_NONE);
|
usart_word_length_set(USART0, USART_WL_8BIT);
|
usart_stop_bit_set(USART0, USART_STB_1BIT);
|
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
|
usart_enable(USART0);
|
usart_interrupt_enable(USART0, USART_INT_RBNE);
|
nvic_irq_enable(USART0_IRQn, 0);
|
}
|
|
void USART0_IRQHandler()
|
{
|
unsigned short Rdat;
|
Rdat = usart_data_receive(USART0);
|
usart_data_transmit(USART0, Rdat);
|
switch (Uart_DataPtr.R_Number)
|
{
|
case 0:
|
{
|
if (Rdat == Uart_DataPtr.HeadA)
|
{
|
Uart_DataPtr.R_Number = 1;
|
}
|
break;
|
}
|
case 1:
|
{
|
|
if (Rdat == Uart_DataPtr.HeadB)
|
{
|
Uart_DataPtr.R_Number = 2;
|
}
|
else
|
{
|
Uart_DataPtr.R_Number = 0;
|
}
|
break;
|
}
|
case 2:
|
{
|
Uart_DataPtr.R_SpeedH = Rdat;
|
Uart_DataPtr.R_Number = 3;
|
break;
|
}
|
case 3:
|
{
|
Uart_DataPtr.R_SpeedL = Rdat;
|
Uart_DataPtr.R_Number = 0;
|
break;
|
}
|
default:
|
break;
|
}
|
}
|