串口的功能網(wǎng)上有很多,但是處理串口的數(shù)據(jù)需要一些小手段,但是str的函數(shù)有點(diǎn)才長(zhǎng),不適用長(zhǎng)的數(shù)據(jù)接收,所以給310搞一個(gè)接收數(shù)據(jù)的輕量級(jí)API的小玩意。
開發(fā)環(huán)境
Keil-MDK 5.34
Windows10
固件庫-GD32F3x0_Firmware_Library_V2.2.0
新建工程就不贅述,看這個(gè)
啟動(dòng)串口
void uart_init(void) { //使能時(shí)鐘 rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_USART0); //Tx PA9 復(fù)用推挽輸出 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 設(shè)置*/ 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);//接收數(shù)據(jù) 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); } }
數(shù)據(jù)處理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}; //數(shù)字的str數(shù)
char str[36]; //裝source數(shù)據(jù)到這個(gè)緩存區(qū),這個(gè)緩存區(qū)是要變的
char Data;
char n,m = 0;
char i,flag = 1; //i是當(dāng)前找的是 第幾個(gè) Sign
char Find_Time = strlen(Item->Sign); //要找多少個(gè)
char Length = strlen(Item->Source); //源的長(zhǎng)度
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]) //找到標(biāo)志
{
str[n] = 0;
flag = 1; //開始識(shí)別str
m = 0;
}
if(flag)
{
if((str[n] <= '9' && str[n] >= '0') || str[n] == '.' || str[n] == '-')
{
Data_Array[m] = str[n]; //把數(shù)字相關(guān)str的裝起來
m++; //m是數(shù)字在str的長(zhǎng)度
}
else
{
if(m > 0) //數(shù)字部分結(jié)束
{
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;
}
配置好你想要的參數(shù)在結(jié)構(gòu)體中,然后將串口的緩沖區(qū)放入這個(gè)函數(shù)即可。
將printf函數(shù)映射到串口,看這里
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效果

審核編輯:劉清
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
API
+關(guān)注
關(guān)注
2文章
2410瀏覽量
66884 -
數(shù)據(jù)接收
+關(guān)注
關(guān)注
0文章
13瀏覽量
8009 -
GD32F3
+關(guān)注
關(guān)注
0文章
12瀏覽量
4130
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
GD32330C-START開發(fā)板試用體驗(yàn):+ 串口USART收發(fā)數(shù)據(jù)
1.使用串口首先我們得根據(jù)GD32F330C8T6芯片的datasheet找到對(duì)應(yīng)的引腳。在GD32330C-START開發(fā)板原理圖中,查看該引腳有沒有引出來。 (1)在
發(fā)表于 11-08 11:28
?5978次閱讀
GD32F310開發(fā)板試用--基于RTT Nano的RTT軟件包使用
微控制器。GD32F310系列MCU最高主頻可達(dá)72MHz并支持DSP指令運(yùn)算。配備了64KB的內(nèi)置Flash及48KB的SRAM,內(nèi)核訪問閃存高速零等待。采用LQFP32封裝。 在評(píng)測(cè)期間,我移植
在GD32F310K-START開發(fā)板上實(shí)現(xiàn)ucois-II的移植的設(shè)計(jì)
1、ucos-II在GD32F310開發(fā)板上的移植介紹μC/OS-II由Micrium公司提供,是一個(gè)可移植、可固化的、可裁剪的、占先式多任務(wù)實(shí)時(shí)內(nèi)核,它適用于多種微處理器,微控制器和數(shù)字處理芯片
發(fā)表于 08-22 16:26
在GD32F310開發(fā)板實(shí)現(xiàn)四線OLED顯示的設(shè)計(jì)
1、在GD32F310開發(fā)板實(shí)現(xiàn)四線OLED顯示的設(shè)計(jì) 本次采用四線OLED與開發(fā)板實(shí)現(xiàn)通信,使用模擬IIC方式,在自己平時(shí)的應(yīng)用中OLED屏幕還是用的比較多的,本文目標(biāo)是實(shí)現(xiàn)OLED顯示功能
發(fā)表于 08-31 15:25
GD32F310開發(fā)板試用之硬件SPI驅(qū)動(dòng)0.96寸LCD
1、GD32F310開發(fā)板試用之硬件SPI驅(qū)動(dòng)0.96寸LCD SPI 簡(jiǎn)介及特點(diǎn) 具有全雙工、半雙工和單工模式的主從操作。 16位寬度,獨(dú)立的發(fā)送和接收緩沖區(qū)。 8位或16位數(shù)據(jù)
發(fā)表于 09-22 15:31
GD32F310開發(fā)板串口的一些特殊功能介紹
串口主要用于通信和調(diào)試信息輸出,今天仔細(xì)觀察GDF310的數(shù)據(jù)手冊(cè)發(fā)現(xiàn)一些特殊功能:1、自動(dòng)波特率檢測(cè);2、數(shù)據(jù)發(fā)送/接受,高位在前/后;3
發(fā)表于 09-22 15:40
基于GD32F310開發(fā)板完成超頻及ADC極限采樣率實(shí)驗(yàn)
主力的型號(hào),供貨情況更加穩(wěn)定一些,且價(jià)格上比較有優(yōu)勢(shì)。所以當(dāng)在公眾號(hào)中看到有GD32F310開發(fā)板試用的時(shí)候,就申請(qǐng)了來。趁著周末的時(shí)間來試用一下同時(shí)評(píng)估一下用來替換現(xiàn)在使用的GD32F330的可能性
發(fā)表于 09-29 15:35
在GD32F310上對(duì)浮點(diǎn)DSP運(yùn)算及Modbus移植進(jìn)行測(cè)評(píng)
低成本平臺(tái)也需要一款性能強(qiáng),價(jià)格優(yōu)的芯片,GD32F310即可作為考慮?;诖?,測(cè)評(píng)一方面考慮其運(yùn)算性能,另一方面考慮其工控通信功能。2、浮點(diǎn)DSP運(yùn)算測(cè)評(píng)從數(shù)據(jù)手冊(cè)可以看到,該款芯片支持FPU,集成
發(fā)表于 09-30 11:09
基于GD32F310開發(fā)板的CMSIS-DAP燒錄與定時(shí)器采集脈寬問題
1、CMSIS-DAP上電只能燒錄一次問題解決&定時(shí)器脈寬采集 GD32F310擁有TSSOP20、QFN28、QFN32、LQFP32以及LQFP48共5種封裝類型,采用Arm
發(fā)表于 09-30 12:04
基于GD32F310開發(fā)板的AD多通道交流采樣計(jì)算
1、基于GD32F310開發(fā)板的AD多通道交流采樣計(jì)算 很幸運(yùn)能夠有機(jī)會(huì)試用兆易公司的GD32F310開發(fā)板。本次使用中,我將使用開發(fā)板連
發(fā)表于 09-30 14:29
基于GD32F310開發(fā)板的RT-Thread Shell移植及調(diào)試心得
GD32F310系列采用Arm Cortex-M4內(nèi)核,主頻達(dá)到72MHz,配備了16KB到64KB的嵌入式閃存及4KB到8KB的SRAM。片上集成了多達(dá)5個(gè)16位通用定時(shí)器、1個(gè)16位基本定時(shí)器和1
發(fā)表于 09-30 14:47
基于GD32F310開發(fā)板移植FreeRTOS的步驟詳解
1、GD32F310移植FreeRTOS 開發(fā)板信息 我們?cè)趤砜纯搓P(guān)于這款開發(fā)板: GD32F310K-START 評(píng)估板使用
發(fā)表于 10-10 18:07
基于GD32F310開發(fā)板在rt-thread上添加finsh及其shell功能
1、GD32F310開發(fā)板試用+finsh/shell添加與進(jìn)程STACK優(yōu)化 上一次只是移植了rt-thread nano的內(nèi)核,但rt-thread的finsh/shell,是一大很有特點(diǎn)
發(fā)表于 11-08 16:05
在GD32F310開發(fā)板上移植FreeRTOS的步驟相關(guān)資料分享
的FreeRTOS版本為:v202112.00 開發(fā)板信息 我們?cè)趤砜纯搓P(guān)于這款開發(fā)板: GD32F310K-START 評(píng)估板使用 GD32
發(fā)表于 11-08 16:58
如何利用GD32F310讀取HDC1080環(huán)境溫濕度
本次試用目的是利用GD32F310的I2C0實(shí)現(xiàn)對(duì)HDC1080的初始化及讀取環(huán)境溫濕度,并利用UART口在電腦上顯示出來。
GD32F310開發(fā)板串口的數(shù)據(jù)接收與數(shù)字自動(dòng)轉(zhuǎn)換
評(píng)論