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++; //指向地址
}
}