原子哥,STM32的串口发送函数USART_SendData()怎么发送一个结构体数据?

2019-08-17 01:16发布

原子哥,STM32的串口发送函数USART_SendData()怎么发送一个结构体数据?
USART_SendData函数如下:

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_DATA(Data));

  /* Transmit Data */
  USARTx->DR = (Data & (uint16_t)0x01FF);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
正点原子
1楼-- · 2019-08-17 03:44
刺客_奋斗的菜鸟 发表于 2017-7-12 17:14
我改成这样,但还是打印不出来我想需要的内容:
typedef __packed struct{
    u8  num;

定义u8*p=u8*(temp);
然后发送p指向的值就行了。
XUZJWWSZ
2楼-- · 2019-08-17 07:18
 精彩回答 2  元偷偷看……
刺客_奋斗的菜鸟
3楼-- · 2019-08-17 13:09
本帖最后由 刺客_奋斗的菜鸟 于 2017-7-12 15:13 编辑
XUZJWWSZ 发表于 2017-7-12 12:16
第二个参数才是要发送的数据。楼主可以读一下这个库函数上面的说明。

我是这样写的:
typedef struct{
    u8  num;
    u8 data[2];
}Temp;
Temp tem;
int main(void)
{
     u8  i,len;
     tem.num = 10;
     tem.data[0] = 50;
     tem.data[1] = 30;         
     ...................// 此处串口初始化省略
     len = sizeof(tem);
     while(len--){
         USART_SendData(USART1,(u8)&tem+i);
         while(USART_GetFlagStatus(USART1, USART_FLAG_TC));
    }
    while(1){
    }
}
但是打印出来的内容不是我对结构体成员赋的值。




黄志豪
4楼-- · 2019-08-17 14:28
首先len是不是结构体的长度要确定,因为虽然结构体里是u8但是有些编译器会针对32位机转成u32,那么len就变成4了,具体这个会不会这样编译要先确定。其次,你的i并没有改变。
刺客_奋斗的菜鸟
5楼-- · 2019-08-17 15:17
黄志豪 发表于 2017-7-12 16:40
首先len是不是结构体的长度要确定,因为虽然结构体里是u8但是有些编译器会针对32位机转成u32,那么len就变 ...

我改成这样,但还是打印不出来我想需要的内容:
typedef __packed struct{
    u8  num;
    u8 data[2];
}Temp;

Temp tem;

int main(void)
{
     u8  i,len;
     tem.num = 0x10;
     tem.data[0] = 0x50;
     tem.data[1] = 0x30;  
     delay_init();       
     uart_init(38400);                  
     while(1){
           len = sizeof(tem);
           i = 0;
           while(len--){
                i++;
               USART_SendData(USART1,(u8)&tem+i);
               while(USART_GetFlagStatus(USART1, USART_FLAG_TXE));
            }
                       
        delay_ms(1000);
        delay_ms(1000);                       
    }
}
lsq1
6楼-- · 2019-08-17 19:14
(tem+i)?

一周热门 更多>