串口的功能网上有很多,但是处理串口的数据需要一些小手段,但是str的函数有点才长,不适用长的数据接收,所以给310搞一个接收数据的轻量级API的小玩意。
开发环境
Keil-MDK 5.34
Windows10
固件库-GD32F3x0_Firmware_Library_V2.2.0
新建工程就不赘述,看这个
启动串口
void uart_init(void) { //使能时钟 rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_USART0); //Tx PA9 复用推挽输出 gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_PIN_9); gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9); //Rx PA10 gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_PIN_10); gpio_output_options_set(GPIOA, GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ, GPIO_PIN_10); nvic_irq_enable(USART0_IRQn,0,0); gpio_af_set(GPIOA,GPIO_AF_1,GPIO_PIN_9|GPIO_PIN_10); /*USART 设置*/ usart_deinit(USART0); usart_baudrate_set(USART0,115200); usart_word_length_set(USART0,USART_WL_8BIT); usart_stop_bit_set(USART0,USART_STB_1BIT); usart_parity_config(USART0,USART_PM_NONE); usart_hardware_flow_rts_config(USART0,USART_RTS_DISABLE); usart_hardware_flow_cts_config(USART0,USART_CTS_DISABLE); usart_receive_config(USART0,USART_RECEIVE_ENABLE); usart_transmit_config(USART0,USART_TRANSMIT_ENABLE); usart_enable(USART0); usart_interrupt_enable(USART0,USART_INT_RBNE); usart_interrupt_enable(USART0, USART_INT_IDLE); /* 使能USART0空闲中断 */ } //串口中断配置 uint16_t t=0; void USART0_IRQHandler(void) { if(RESET!=usart_interrupt_flag_get(USART0,USART_INT_FLAG_RBNE)) { gd_led_toggle(); t=usart_data_receive(USART0);//接收数据 usart_data_transmit(USART0,USART_RX[t]); usart_interrupt_disable(USART0,USART_INT_RBNE); usart_data_transmit(USART0,t); }else if(RESET!=usart_interrupt_flag_get(USART0,USART_INT_FLAG_IDLE)) { usart_interrupt_disable(USART0,USART_INT_IDLE); } }
数据处理API
struct _Chang_Num
{
char *Source;
char Sign[8];
float NUM[8];
char flag;
};
char Data_Chang_NUM (struct _Chang_Num *Item)
{
char Data_Array[12] = {0}; //数字的str数
char str[36]; //装source数据到这个缓存区,这个缓存区是要变的
char Data;
char n,m = 0;
char i,flag = 1; //i是当前找的是 第几个 Sign
char Find_Time = strlen(Item->Sign); //要找多少个
char Length = strlen(Item->Source); //源的长度
strcpy(str,Item->Source);
if(Length > 36)
Length = 36;
for (i = 0; i < Find_Time; i++)
{
flag = 0;
for(n = 0;n < Length;n++)
{
Data = str[n];
if(str[n] == Item->Sign[i]) //找到标志
{
str[n] = 0;
flag = 1; //开始识别str
m = 0;
}
if(flag)
{
if((str[n] <= '9' && str[n] >= '0') || str[n] == '.' || str[n] == '-')
{
Data_Array[m] = str[n]; //把数字相关str的装起来
m++; //m是数字在str的长度
}
else
{
if(m > 0) //数字部分结束
{
if(Data_Array[m-1] == '.' || Data_Array[m-1] == '-') //不让最后一位为 '.' and '-'
Data_Array[m-1] = '\0';
else
Data_Array[m] = '\0';
break;
}
}
}
}
Item->NUM[i] = atof(Data_Array);
// Data_Replace ("123",Data_Array,0,sizeof(Data_Array));
}
return Item->flag;
}
配置好你想要的参数在结构体中,然后将串口的缓冲区放入这个函数即可。
将printf函数映射到串口,看这里
struct _Chang_Num Item_n = {
.Source = "a:3.14......,b:3322..,c:-9.0..-",
.Sign = {':',':',':'},
};
int main (void)
{
printf("sign :%s",Item_n.Sign);
Data_Chang_NUM (&Item_n);
for (char i = 0; i < 3; i++)
{
printf("num %d :%.2f \n",i,Item_n.NUM[i]);
}
while(1);
}
API效果

审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
API
+关注
关注
2文章
2147浏览量
66226 -
数据接收
+关注
关注
0文章
12浏览量
7982 -
GD32F3
+关注
关注
0文章
12浏览量
4078
发布评论请先 登录
相关推荐
热点推荐
GD32330C-START开发板试用体验:+ 串口USART收发数据
1.使用串口首先我们得根据GD32F330C8T6芯片的datasheet找到对应的引脚。在GD32330C-START开发板原理图中,查看该引脚有没有引出来。 (1)在
发表于 11-08 11:28
•5842次阅读
GD32F310开发板试用--基于RTT Nano的RTT软件包使用
微控制器。GD32F310系列MCU最高主频可达72MHz并支持DSP指令运算。配备了64KB的内置Flash及48KB的SRAM,内核访问闪存高速零等待。采用LQFP32封装。 在评测期间,我移植
在GD32F310K-START开发板上实现ucois-II的移植的设计
1、ucos-II在GD32F310开发板上的移植介绍μC/OS-II由Micrium公司提供,是一个可移植、可固化的、可裁剪的、占先式多任务实时内核,它适用于多种微处理器,微控制器和数字处理芯片
发表于 08-22 16:26
在GD32F310开发板实现四线OLED显示的设计
1、在GD32F310开发板实现四线OLED显示的设计 本次采用四线OLED与开发板实现通信,使用模拟IIC方式,在自己平时的应用中OLED屏幕还是用的比较多的,本文目标是实现OLED显示功能
发表于 08-31 15:25
GD32F310开发板试用之硬件SPI驱动0.96寸LCD
1、GD32F310开发板试用之硬件SPI驱动0.96寸LCD SPI 简介及特点 具有全双工、半双工和单工模式的主从操作。 16位宽度,独立的发送和接收缓冲区。 8位或16位数据
发表于 09-22 15:31
GD32F310开发板串口的一些特殊功能介绍
串口主要用于通信和调试信息输出,今天仔细观察GDF310的数据手册发现一些特殊功能:1、自动波特率检测;2、数据发送/接受,高位在前/后;3
发表于 09-22 15:40
基于GD32F310开发板完成超频及ADC极限采样率实验
主力的型号,供货情况更加稳定一些,且价格上比较有优势。所以当在公众号中看到有GD32F310开发板试用的时候,就申请了来。趁着周末的时间来试用一下同时评估一下用来替换现在使用的GD32F330的可能性
发表于 09-29 15:35
在GD32F310上对浮点DSP运算及Modbus移植进行测评
低成本平台也需要一款性能强,价格优的芯片,GD32F310即可作为考虑。基于此,测评一方面考虑其运算性能,另一方面考虑其工控通信功能。2、浮点DSP运算测评从数据手册可以看到,该款芯片支持FPU,集成
发表于 09-30 11:09
基于GD32F310开发板的CMSIS-DAP烧录与定时器采集脉宽问题
1、CMSIS-DAP上电只能烧录一次问题解决&定时器脉宽采集 GD32F310拥有TSSOP20、QFN28、QFN32、LQFP32以及LQFP48共5种封装类型,采用Arm
发表于 09-30 12:04
基于GD32F310开发板的AD多通道交流采样计算
1、基于GD32F310开发板的AD多通道交流采样计算 很幸运能够有机会试用兆易公司的GD32F310开发板。本次使用中,我将使用开发板连
发表于 09-30 14:29
基于GD32F310开发板的RT-Thread Shell移植及调试心得
GD32F310系列采用Arm Cortex-M4内核,主频达到72MHz,配备了16KB到64KB的嵌入式闪存及4KB到8KB的SRAM。片上集成了多达5个16位通用定时器、1个16位基本定时器和1
发表于 09-30 14:47
基于GD32F310开发板移植FreeRTOS的步骤详解
1、GD32F310移植FreeRTOS 开发板信息 我们在来看看关于这款开发板: GD32F310K-START 评估板使用
发表于 10-10 18:07
基于GD32F310开发板在rt-thread上添加finsh及其shell功能
1、GD32F310开发板试用+finsh/shell添加与进程STACK优化 上一次只是移植了rt-thread nano的内核,但rt-thread的finsh/shell,是一大很有特点
发表于 11-08 16:05
在GD32F310开发板上移植FreeRTOS的步骤相关资料分享
的FreeRTOS版本为:v202112.00 开发板信息 我们在来看看关于这款开发板: GD32F310K-START 评估板使用 GD32
发表于 11-08 16:58

GD32F310开发板串口的数据接收与数字自动转换
评论