JSON在物联网中使用得很多,很多时候需要从串口接收JSON字符串然后根据JSON字符串来进行相应操作,这里使用了cJSON库来进行操作,首先需要将这个JSON库包括进工程中,以下是代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
#include "key.h" #include "sys.h" #include "usart.h" #include "cJSON.h" const char * my_json_string = "{\"device\":\"16\",\"class\":\"master\",\"call\":\"start\",\"ar1\":\"10\"}"; int main(void) { char * device; char * cls; char * call; char * arg1; u16 k; u16 len; u16 times=0; cJSON * root = cJSON_Parse(my_json_string); cJSON * dev = cJSON_GetObjectItem(root, "device"); cJSON * cla = cJSON_GetObjectItem(root, "class"); cJSON * cl = cJSON_GetObjectItem(root, "call"); cJSON * ar1 = cJSON_GetObjectItem(root, "ar1"); device = dev->valuestring; cls = cla->valuestring; call = cl->valuestring; arg1 = ar1->valuestring; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(115200); //串口初始化为115200 LED_Init(); //LED端口初始化 KEY_Init(); //初始化与按键连接的硬件接口 while(1) { if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度 printf("\r\n您发送的消息为:\r\n\r\n"); for(k=0;k<len;k++) { USART_SendData(USART1, USART_RX_BUF[k]);//向串口1发送数据 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束 } printf("\r\n\r\n");//插入换行 // 开始解析JSON printf("\r\nJSON消息为:\r\n\r\n"); printf("%s\r\n", device); printf("%s\r\n", cls); printf("%s\r\n", call); printf("%s\r\n", arg1); USART_RX_STA=0; }else { times++; if(times%5000==0) { printf("\r\n精英STM32开发板 串口实验\r\n"); printf("正点原子@ALIENTEK\r\n\r\n"); } if(times%200==0)printf("\r\n请输入数据,以回车键结束\n"); if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行. delay_ms(10); } } } |