STM32 可以设置为大端模式吗?

2019-08-09 16:51发布

      STM32 可以设置为大端模式吗?我现在的应用是,一个结构体上传到串口需要用大端模式(系统通信协议定死的),如果数据量小的话单独转换倒不是问题,关键是现在我的数据量非常大,有几千个字节,如果都单独转换那得多麻烦啊,请教各位高手有没有好的解决方案?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
elsie_ye
2019-08-10 16:33
回复【6楼】正点原子:
---------------------------------
问题已解决,如函数:
int DataConver_short(int a)
{
      union 
      {
             int i;
             char c[2];
      } u, r;
       
      u.i = a;
      r.c[0] = u.c[1];
      r.c[1] = u.c[0];

      return r.i;   
}
long int DataConver_long(long int a)
{
      union 
      {
             int i;
             char c[4];
      } u, r;
       
      u.i = a;
      r.c[0] = u.c[3];
      r.c[1] = u.c[2];
      r.c[2] = u.c[1];
      r.c[3] = u.c[0];

      return r.i;   
}
float DataConver_float(float a)
{
union 
{
float i;
char c[4];
} u, r;
       
u.i = a;
r.c[0] = u.c[3];
r.c[1] = u.c[2];
r.c[2] = u.c[1];
r.c[3] = u.c[0];

return r.i;   
}


typedef struct strt
{
unsigned short    Config;                       
short             AlarmTh[16][6];
float             Contr[16];
} STR;

STR str;
STR str_mcu;

void DataConvert(void) 

      unsigned char i,j; 

      str.Config = DataConver_short(str_mcu.Config); 
      for(i = 0;i < 16; i++) 
      { 
             for(j = 0;j < 6;j++) 
             { 
                str.AlarmTh[j] = DataConver_short(str_mcu.AlarmTh[j]); 
             } 
             str.Contr = DataConver_float(str_mcu.Contr); 
      } 

}

一周热门 更多>