OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 278|回复: 11

有关STM32通过硬件SPI实现16为数据传输的问题

[复制链接]

  离线 

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2017-10-15
在线时间
7 小时
发表于 6 天前 | 显示全部楼层 |阅读模式
1金钱
请教大家一个问题,如何实现SPI的16位数据输出,我看封装的函数中他们的移位寄存器是8位的,而16位的如何传输,求解答
回复

使用道具 举报

  离线 

20

主题

1654

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3217
金钱
3217
注册时间
2014-8-26
在线时间
762 小时
发表于 6 天前 | 显示全部楼层
16位哦
1111111.JPG
回复

使用道具 举报

  离线 

0

主题

3

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2018-5-17
在线时间
2 小时
发表于 6 天前 | 显示全部楼层
是 16bit
回复

使用道具 举报

  离线 

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2017-10-15
在线时间
7 小时
 楼主| 发表于 6 天前 | 显示全部楼层

HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);为什么发送和接收都是u8?
回复

使用道具 举报

  离线 

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2017-10-15
在线时间
7 小时
 楼主| 发表于 6 天前 | 显示全部楼层
正点原子公众号

HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)为什么发送和接收都是u8,不是8位吗?
回复

使用道具 举报

  离线 

16

主题

341

帖子

0

精华

高级会员

Rank: 4

积分
736
金钱
736
注册时间
2017-5-21
在线时间
327 小时
发表于 6 天前 来自手机 | 显示全部楼层
*pTxData是一个指针,这个指针是8位的而不是说数据是8位的
回复

使用道具 举报

  离线 

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2017-10-15
在线时间
7 小时
 楼主| 发表于 6 天前 | 显示全部楼层
l6931639 发表于 2018-5-17 17:32
*pTxData是一个指针,这个指针是8位的而不是说数据是8位的

u8 SPI2_WriteByte(u8 TxData)
{
        u8 Rxdata;
        HAL_SPI_TransmitReceive(&SPI2_Handler,&TxData,&Rxdata,8, 1000);      
        return Rxdata;                                    
}
但是入口的变量是8位的呀,怎么实现16位的?
回复

使用道具 举报

  离线 

2

主题

6

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-4-4
在线时间
4 小时
发表于 5 天前 | 显示全部楼层
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)指针为8位,你定义uint16_t的数据仍然是可以用的,举个例子
我定义16位的数据:
                uint16_t        DeTxBuffer[1] ;
                uint16_t        DeRxBuffer[1] ;
收发时使用数据转换即可:
HAL_SPI_TransmitReceive(&hspi1,(uint8_t *)DeTxBuffer,(uint8_t *)DeRxBuffer,1,1000);
回复

使用道具 举报

  离线 

1

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2018-1-31
在线时间
10 小时
发表于 5 天前 | 显示全部楼层
l6931639 发表于 2018-5-17 17:32
*pTxData是一个指针,这个指针是8位的而不是说数据是8位的

指针是8位的?还是说指针指向的数据是8位的?
回复

使用道具 举报

  离线 

1

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2018-1-31
在线时间
10 小时
发表于 5 天前 | 显示全部楼层
xiaoff 发表于 2018-5-18 10:10
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxDat ...

函数内部转换了吗?不转换的话16位数据是不是只有低8位发送出去?或者是说u16是分两次发送出去?
回复

使用道具 举报

  离线 

1

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2018-1-31
在线时间
10 小时
发表于 5 天前 | 显示全部楼层
楼主,2楼说的对,SPI设置可以选择8位或者16位。
那为什么封装的函数都是8位的?因为大部分情况都是8位的。16位的很少用吧?
如果你有特殊需求,那就自己改一个函数,发16位的。
要不就把16位拆成两个8bit的,分两次发送。
回复

使用道具 举报

  离线 

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2017-10-15
在线时间
7 小时
 楼主| 发表于 5 天前 | 显示全部楼层
屋脊雀 发表于 2018-5-18 10:21
楼主,2楼说的对,SPI设置可以选择8位或者16位。
那为什么封装的函数都是8位的?因为大部分情况都是8位的 ...

谢谢你的解答,分两次发送中间会不会有间断啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-5-23 15:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */