在使用GD32串口接收数据的过程中,遇到了数据无法接收的问题,在导师的帮助下,需要调用usart_flag_get函数来使RBNE置1,RBNE:读数据时缓冲区非空,当数据缓存区接收到来自移位寄存器的数据时,该位置1. 0:读数据缓存区为空, 1:读数据缓存区不为空。主要代码如下:
while(1) {
delay_1ms(400);
gd_eval_led_on(LED3);
delay_1ms(400);
gd_eval_led_off(LED3);
for ( i =0;i<16;i++) {
vref_value[i]=adc_value[i]*3.3/4096;
}
if(usart_flag_get(USART0,USART_FLAG_RBNE)==1) {
if(usart_data_receive(USART0)=='0') {
delay_1ms(400);
gd_eval_led_on(LED2);
printf("通道0的值为%5.3f\r\n",vref_value[0]);
}
使用GD32串口接收ADC通道的值代码如下:
/*GD32通过串口接收ADC通道的值,并打印出 */
/*
\file main.c
\brief USART printf demo
*/
/*
Copyright (C) 2017 GigaDevice
2017-06-23, V1.0.0, demo for GD32F30x
*/
#include "gd32f30x.h"
#include "gd32f303c_eval.h"
#include "systick.h"
#include <stdio.h>
#include "gd32f30x_it.h"
uint16_t i;
float adc_value[16];
float vref_value[16];
uint16_t j;
void led_init(void);
void led_flash(int times);
void rcu_config(void);
void gpio_config(void);
void adc_config();
uint16_t adc_channel_sample(uint8_t channel);
/*!
\brief main function
\param[in] none
\param[out] none
\retval none
*/
int main(void)
{
/* initialize the LEDs */
led_init();
/* configure systick */
systick_config(); //系统滴答定时器配置
/* flash the LEDs for 1 time */
led_flash(1);
/* configure EVAL_COM1 */
gd_eval_com_init(EVAL_COM1);
rcu_config();
gpio_config();
adc_config();
/* configure WAKEUP key */
gd_eval_key_init(KEY_WAKEUP, KEY_MODE_GPIO);
/* output a message on hyperterminal using printf function */
printf("