tao_z
2021-07-10 9051da0184cf839037f1370c729b27bf065b9c95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#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;
    }
}