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

2019-08-09 16:51发布

      STM32 可以设置为大端模式吗?我现在的应用是,一个结构体上传到串口需要用大端模式(系统通信协议定死的),如果数据量小的话单独转换倒不是问题,关键是现在我的数据量非常大,有几千个字节,如果都单独转换那得多麻烦啊,请教各位高手有没有好的解决方案?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
史道轩
1楼-- · 2019-08-09 22:03
你想从低位字节开始发送?
试试能不能用指针写个结构体转换的函数来
正点原子
2楼-- · 2019-08-10 03:32
 精彩回答 2  元偷偷看……
elsie_ye
3楼-- · 2019-08-10 07:32
回复【3楼】正点原子:
---------------------------------
谢谢,有什么其他处理方案吗?
elsie_ye
4楼-- · 2019-08-10 11:04
回复【2楼】史道轩:
---------------------------------
STM32是小端模式,是低字节开始发送的,我是想高字节开始发送。我的结构体中有不同类型的很多元素,有INT ,float等,我不知道您说的方法是怎么弄的?
正点原子
5楼-- · 2019-08-10 15:00
回复【5楼】elsie_ye:
---------------------------------
我没有什么好办法,只能一个个转了。。。
elsie_ye
6楼-- · 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); 
      } 

}

一周热门 更多>