串口的功能網上有很多,但是處理串口的數據需要一些小手段,但是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文章
1501瀏覽量
62025 -
數據接收
+關注
關注
0文章
12瀏覽量
7813 -
GD32F3
+關注
關注
0文章
11瀏覽量
3854
發布評論請先 登錄
相關推薦
GD32330C-START開發板試用體驗:+ 串口USART收發數據
1.使用串口首先我們得根據GD32F330C8T6芯片的datasheet找到對應的引腳。在GD32330C-START開發板原理圖中,查看該引腳有沒有引出來。 (1)在
發表于 11-08 11:28
?5435次閱讀
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
評論