Usart 串口发送数据包 两种方式(结构体,指针数组)
1.结构体指针
1.1 结构体和联合体
/* 叙述:这种直观性比较,利用联合体和结构体的形式组成数据包,通过结构体指针发送 */ typedef union{ struct { unsigned char id; unsigned char addr; unsigned char head; unsigned char left_time; unsigned char left_hour; unsigned char right_time; unsigned char right_hour; unsigned char key_high; unsigned char key_low; unsigned char sofa_left; unsigned char sofa_right; unsigned char funtion_dis; unsigned char checksum; unsigned char stop; }led_sta; unsigned char tx_buf[BUF_SIZE]; } DATA_FORMAT_TX; void send_buf(DATA_FORMAT_TX *buf) { unsigned char i; for(i = 0 ; i <14;i++ ){ printf("%c", buf->tx_buf[i]); } } void send_buf_packet(void){ DATA_FORMAT_TX buf; buf.led_sta.id =0x05; buf.led_sta.addr =0x03 ; buf.led_sta.head =0xE1 ; buf.led_sta.left_time = 0 ; buf.led_sta.left_hour = 1 ; buf.led_sta.right_time = 2 ; buf.led_sta.right_hour = 3 ; buf.led_sta.key_high = 4 ; buf.led_sta.key_low = 5 ; buf.led_sta.sofa_left = 6 ; buf.led_sta.sofa_right = 7 ; buf.led_sta.funtion_dis = 8 ; buf.led_sta.checksum = 0XAA; buf.led_sta.stop = 0XFB; send_buf(&buf); }1.2 纯结构发送的形式
/* 叙述:这种跟前面一种较为相似, 直接操作结构体 */ void send_buf_packet(void) { DATA_FORMAT_TX send_dat,*p = &send_dat ; // 定义一个结构,把地址传给指针 unsigned char *pstu,i,len; p->id = 0x05; p->addr = 0x03 ; p->head = 0xE1 ; p->left_time = 0 ; p->left_hour = 1 ; p->right_time = 2 ; p->right_hour = 3 ; p->key_high = 4 ; p->key_low = 5 ; p->sofa_left = 6 ; p->sofa_right = 7 ; p->funtion_dis = 8 ; p->checksum = 0XAA; p->stop = 0XFB; pstu = (unsigned char *)&send_dat; // 强制转换地址,前提结构一种类型(unsigned char) len = sizeof(send_dat); // 计算结构体的长度 for(i = 0 ; i <len;i++ ){ printf("%c",*pstu++); // 输出遍历结构元素 } }2.指针数组形式
/* 这种比较简单暴力直观明了,利用指针数组的形式传递数据 */ void send_buf_packet(void) { unsigned char *p, arr[10] = {0,1,2,3,4,5,6,7,8,9}; for(p = &arr[0]; p < &arr[10];){ //把地址的位置值取出来 printf("%c",*p); //打印数据 *p++; //指向地址 } }