/* for GD32F3x0 */ #include "gd32f30x.h" #include #include "systick.h" #include "uart.h" #include "./mcu_sdk/mcu_api.h" uint8_t usart0_tx_len=0,usart1_tx_len=0; uint8_t usart0_tx_cnt=0,usart1_tx_cnt=0; uint8_t usart0_tx[64] = {1,2,3,4,5,6,7,8,9,10}; uint8_t usart0_rx[128]; uint8_t usart1_rx[128]; uint8_t usart1_tx[64] = {1,2,3,4,5,6,7,8,9,10}; uint8_t rx_length; uint8_t receivesize = 0; volatile uint16_t rxcount = 0; // void gpio_uart_config(void) { rcu_periph_clock_enable(RCU_GPIOA); // 使能GPIOA时钟 rcu_periph_clock_enable(RCU_USART0); // 使能USART1时钟 gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9); // 初始化PA9,复用为USART1_TX gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10); // 初始化PA10,复用为USART1_RX /* usart_deinit(USART0); // 复位USART1 // 配置USART1的参数 usart_baudrate_set(USART0, 115200U); // 波特率设置为115200 usart_word_length_set(USART0, USART_WL_8BIT); // 数据位长度设置为8位 usart_stop_bit_set(USART0, USART_STB_1BIT); // 停止位设置为1位 usart_parity_config(USART0, USART_PM_NONE); // 无校验位 usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE); // 禁用RTS usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE); // 禁用CTS usart_receive_config(USART0, USART_RECEIVE_ENABLE); // 使能接收 usart_transmit_config(USART0, USART_TRANSMIT_ENABLE); // 使能发送 usart_enable(USART0); // 使能USART1*/ } /*! \brief configure the USART0 \param[in] none \param[out] none \retval none */ void usart_config(void) { /* enable USART0 clock */ nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); nvic_irq_enable(USART0_IRQn, 2, 0); rcu_periph_clock_enable(RCU_USART0); /* USART0 configure */ usart_deinit(USART0); usart_baudrate_set(USART0, 115200U); usart_word_length_set(USART0, USART_WL_8BIT); // 帧数据字长 usart_stop_bit_set(USART0, USART_STB_1BIT); // 停止位1位 usart_parity_config(USART0, USART_PM_NONE); // 无奇偶校验位 usart_receive_config(USART0, USART_RECEIVE_ENABLE); usart_transmit_config(USART0, USART_TRANSMIT_ENABLE); usart_enable(USART0); usart_interrupt_enable(USART0, USART_INT_RBNE); } uint8_t mUart0Send1ByteEnd = 0; void start_usart0_tx(uint8_t tx_buffer[], uint8_t length) { int a=0,b=0; usart0_tx_len = length; usart0_tx_cnt = 1; // usart0_tx_ptr = tx_buffer; usart_data_transmit(USART0, (uint8_t) tx_buffer[0]); mUart0Send1ByteEnd = 0; //printf("2222mUart0Send1ByteEnd %x\r\n",mUart0Send1ByteEnd); usart_interrupt_enable(USART0, USART_INT_TBE); // while(mUart0Send1ByteEnd == 0)printf("221313131mUart0Send1ByteEnd %x\r\n",mUart0Send1ByteEnd);; //printf("224122mUart0Send1ByteEnd %x\r\n",mUart0Send1ByteEnd); while(1) { b++; a++; if(a!=b) break; if(mUart0Send1ByteEnd == 1) break; } } extern void uart_receive_input(unsigned char value); void USART0_IRQHandler(void) { /*if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) { usart0_rx[0] = usart_data_receive(USART0); // receive data usart0_rx[rxcount++] = usart_data_receive(USART0); if(rxcount == receivesize) { printf("\r\n "); usart_interrupt_disable(USART0, USART_INT_RBNE); } }*/ if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) { usart0_rx[0] = usart_data_receive(USART0); uart_receive_input(usart0_rx[0]);//zigbee 串口接收处理函数 /* receive data usart0_rx[rxcount++] = usart_data_receive(USART0); if(rxcount == receivesize) { usart_interrupt_disable(EVAL_COM, USART_INT_RBNE); }*/ } if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_TBE)) { /* transmit data */ mUart0Send1ByteEnd = 1; // printf("21212mUart0Send1ByteEnd %x\r\n",mUart0Send1ByteEnd); if(usart0_tx_cnt