OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3124|回复: 4

SPI接口用法和UART的区别,SPI有没有必要用DMA?

[复制链接]

17

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2020-1-15
在线时间
39 小时
发表于 2020-5-30 20:33:56 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 叶孤城999 于 2020-5-30 20:46 编辑

UART的DMA我一般是用普通发送,DMA接收。
利用IDLE中断,DMA在后台默默接收,IDLE中断后进去收一波数据到内存,然后重置DMA继续。

这样的的话,做出来的UART驱动对上层就比较友好,发的时候是完整的一帧,收的时候也是完整的一帧。
至少不用一个BYTE就进一次中断,我个人比较讨厌这样。


但是SPI没有UART那样的IDLE中断寄存器啊。

SPI要用DMA的话,则是在读取FLASH这类芯片时,能够预知对面回复的数据长度。
比如我发送了读取N个数据,那我DMA的读取长度就设置为N。


如果对面的回复长度不能预知,又没有IDLE中断,只能利用DMA完成中断来判断,这样就不准确。


所以为认为

1、能预知对面回复长度的SPI通信场景,比如读取FLASH,AD之类的,可以用DMA,就不用循环读取数据。
2、如果对面的回复不可预计,比如两台MCU用SPI通信,数据包的长度是不定的,这时候用DMA就没有意义。


请问下各位大神,我的理解对吗?



HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size,uint32_t Timeout);


HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData,uint16_t Size);


HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData,






SPI中断.PNG
UART中断.PNG

最佳答案

查看完整内容[请看2#楼]

spi的速度很快了,没有必要
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

62

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2020-5-3
在线时间
0 小时
发表于 2020-5-30 20:33:56 | 显示全部楼层
回复

使用道具 举报

22

主题

2254

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4486
金钱
4486
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-5-30 20:33:57 | 显示全部楼层
spi的速度很快了,没有必要
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2020-5-30 22:47:15 | 显示全部楼层
感觉上系统时挺有好处的
一分耕耘一分收获。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2020-5-31 01:11:37 | 显示全部楼层
你可以固定长度通信
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-29 00:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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