OpenEdv-开源电子网

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

STM32 能做到吗?高手请进,STM32 的 TIM 定时请求DMA SPI 传输?

[复制链接]

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
发表于 2017-6-21 09:21:50 | 显示全部楼层 |阅读模式
1金钱
STM32  的 TIM  定时启动  SPI  传输?  哪位仁兄能给点建议吗?通过DMA,该如何配置呢? 我的应用是要  与 外面 高速(1us)AD芯片相连,通过SPI DMA驱动,定时1us启动一次,即1us发生一个SPI DMA请求,而不是SPI的TXE RXNE自动发生DMA请求?  
STM32 TIM 的DMA   不能将目标地址或源地址   绑到SPI的DR寄存器地址?
STM32  能做到吗? 谢谢!

最佳答案

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

可以利用两路DMA实现,我已经用几年了。 一路是: 定时器触发DMA,向 SPI-DR 寄存器写数据,目的是启动该SPI 的接收功能(因为SPI的收发是同时、同步的); 同时定时器输出PWM波形,触发外部芯片的动作,比如启动AD采集新数据。 另一路是: 该 SPI 的 RX 事件触发 DMA,目的是把 SPI 接收到的数据搬移到其他地方。 我也尝试过用一路DMA完成上面两个动作,但没有成功,好像做不到的, 关键是SPI,只能用“向DR送数据” ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11476
金钱
11476
注册时间
2014-4-1
在线时间
1297 小时
发表于 2017-6-21 09:21:51 | 显示全部楼层
本帖最后由 xuande 于 2017-6-26 14:42 编辑

可以利用两路DMA实现,我已经用几年了。

一路是:
定时器触发DMA,向 SPI-DR 寄存器写数据,目的是启动该SPI 的接收功能(因为SPI的收发是同时、同步的);
同时定时器输出PWM波形,触发外部芯片的动作,比如启动AD采集新数据。

另一路是:
该 SPI 的 RX 事件触发 DMA,目的是把 SPI 接收到的数据搬移到其他地方。

我也尝试过用一路DMA完成上面两个动作,但没有成功,好像做不到的,
关键是SPI,只能用“向DR送数据”的方法启动其接收功能,而不能直接启动接收。


回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-21 09:36:13 | 显示全部楼层

STM32 TIM 的DMA   不能将目标地址或源地址   绑到SPI的DR寄存器地址?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2017-6-22 23:33:25 | 显示全部楼层
这种方式可能不支持哦。
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2017-6-23 04:30:14 来自手机 | 显示全部楼层
定时器DMA写USART_DR来启动USART传输这个我知道是可以的,那么SPI应该也是可以的吧。
但接收数据需要同时打开RXNE的DMA请求;而且会有一个问题是SPI的片选/ADC采样起始信号怎么出,以及它和SPI的时序能否配合好。
楼主的数据是几位?
淘汰人的从来是工具而不是年龄
嵌入式的冷知识屋 blog.csdn.net/k_o_carnivist
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 09:23:27 | 显示全部楼层
K.O.Carnivist 发表于 2017-6-23 04:30
定时器DMA写USART_DR来启动USART传输这个我知道是可以的,那么SPI应该也是可以的吧。
但接收数据需要同时 ...

定时器DMA写USART_DR来启动USART传输:这个你确认?但SPI好像不行。我外部芯片是AD7671,工作在SPI_TI主模式,16位,STM32F407工作在SPI_TI  16位从模式,NSS(SYNC),SCK,SDOUT都是外部芯片产生的。现在是我只用SPI_DMA,TIM定时启动转换 是可以的。由此我想到,若把他们主从调换一下,(目的是控制一下SPI传输的起始时刻,和速率),这样就要定时主动启动SPI 发送,即受控SPI_DMA工作,因有时时序和速率需要这样。其实只要SPI_DMA的请求信号有一个定时触发选择即可,但好像没有,定时器输出 有其他级联或启动ADC,DAC等,但没有触发SPI_DMA的,看手册好像不行,有点小遗憾。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 09:30:00 | 显示全部楼层
STM32F4或者有一个TIM的DMA通道能够为通用的外设和存储器之间传输就好了,这样能够扩大很多应用。ST公司应该考虑
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 09:32:42 | 显示全部楼层
但这样ST硬件肯定要复杂很多
回复

使用道具 举报

26

主题

193

帖子

8

精华

金牌会员

Rank: 6Rank: 6

积分
1800
金钱
1800
注册时间
2012-8-23
在线时间
57 小时
发表于 2017-6-23 09:33:23 | 显示全部楼层
jxc2017jxc 发表于 2017-6-23 09:30
STM32F4或者有一个TIM的DMA通道能够为通用的外设和存储器之间传输就好了,这样能够扩大很多应用。ST公司应 ...

DMA设计初衷就是为了不使用CPU而传输大量的数据,这种比较复杂的控制,并不能凸显DMA优势,你每次传输16位,用DMA有点浪费
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2017-6-23 10:25:02 | 显示全部楼层
jxc2017jxc 发表于 2017-6-23 09:23
定时器DMA写USART_DR来启动USART传输:这个你确认?但SPI好像不行。我外部芯片是AD7671,工作在SPI_TI主模 ...

1. USART在F1上确认:
http://www.openedv.com/forum.php?mod=viewthread&tid=81516#pid464572
USART发送的启动方式就是写DR,这个写操作由CPU还是DMA控制器来完成、哪个DMA通道来触发,应该都没有关系。SPI不是这样的么?

2. 我觉得这个ADC做SPI主机挺好的,没有理解为什么需要“控制SPI传输启始时刻”,启始时刻按道理就是和转换完成时刻相关嘛跟单片机没关系,一定要数据接收时间可控的话那用定时器DMA来读SPI就行了。关于“控制速率”,是太快了么,或者单片机来不及从低功耗唤醒恢复时钟?

3. 这个SPI为什么是TI模式,我看着像Normal的呢。
淘汰人的从来是工具而不是年龄
嵌入式的冷知识屋 blog.csdn.net/k_o_carnivist
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 15:23:04 来自手机 | 显示全部楼层
我是1us采集周期,每个1us有16位,连续采2ms,即每次共采2000个数据,4K字节,在这2ms中CPU还有很多别的事要做,故只能用DMA,如果外部AD速度再快的话,stm32f407的spi速度不够了,我现在已达极值SPI40M速率了,外部AD芯片的SPI速度不受控的,SPI有个TI模式,由于速度极快,别的模式很难通信成功。F4的UART是不能用TIM的DMA去写DR的,F1的你确认可以?
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 15:41:31 来自手机 | 显示全部楼层
控制SPI启始时刻,是启动外部AD采集后,才能通过SPI去读AD的上一帧数据,这是时序要求的,不能任何时候去读。
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2017-6-23 18:09:10 | 显示全部楼层
jxc2017jxc 发表于 2017-6-23 15:23
我是1us采集周期,每个1us有16位,连续采2ms,即每次共采2000个数据,4K字节,在这2ms中CPU还有很多别的事要 ...

定时器DMA触发启动SPI我试了一下是可以的。手上没有407,我用446试的,TIM1控制SPI1。

所以现在两种方法我觉得应该都可以:
AD7671做SPI从机,TIM三个通道分别出CNVST、CS和SPI的DMA请求,SPI_RX的DMA把数据读到RAM。
AD7671做SPI主机,TIM两个通道分别出CNVST和NSS,SPI_RX的DMA把数据读到RAM。

说实话我觉得普通模式的时序要求和TI模式没什么区别,407时钟开到最大的话都满足AD7671的需求,只要NSS置0到第一个clk之间给够了就行。
淘汰人的从来是工具而不是年龄
嵌入式的冷知识屋 blog.csdn.net/k_o_carnivist
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 22:13:51 来自手机 | 显示全部楼层
F407的SPI最高理论速度是42M,TIM通道输出能够产生SPI的DMA请求,我怎么没看到,怎么配置呢?请告诉我资料上大概位置,谢谢!可能的话,请把446控制SPI的DMA配置代码发我一份,非常感谢!jxcdh@sina.com
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 22:17:45 来自手机 | 显示全部楼层
要TIM直接输出控制SPI的DMA请求的,不是TIM中断中去启动SPI或打开DMA。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 22:21:08 来自手机 | 显示全部楼层
如果外部采集速度为5M,200ns转换一个点,要求SPI速度100M,stm32f4是达不到了,f7好象也不行。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 22:28:07 来自手机 | 显示全部楼层
在快,stm32f的中断响应速度都不够用,所以只能是DMA,我没找到TIM  DMA控制SPI的相关描述,可能我哪儿漏掉了,请提醒。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 22:40:54 来自手机 | 显示全部楼层
AD7671做主机我已成功,很稳定。我现在是要AD7671做从机,CNVST由TIM产生肯定的,但TIM或他的DMA怎么产生SPI的DMA请求,SPI的DMA我看资料只受DMAEN和TXE,RXNE控制。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 22:42:50 来自手机 | 显示全部楼层
或TIM的DMA的外设地址能设成SPI的DR寄存器地址也可,能吗?
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 22:46:39 来自手机 | 显示全部楼层
只要NSS置0到第一个clk之间给够了就行。这个是硬件自动产生的,软件产生是不行的,速度不够,否则其它什么活都能干了。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 22:47:08 来自手机 | 显示全部楼层
不能干了
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 22:52:16 来自手机 | 显示全部楼层
SPI普通模式在高速大数据通信下,很难保持稳定,我试了,没有TI模式好。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 23:00:08 来自手机 | 显示全部楼层
我问题核心是:TIM怎么触发SPI  DMA或TIM  DMA怎样能连接SPI的DR,若能,真是太好了。非常感谢!
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2017-6-23 23:06:23 | 显示全部楼层
为什么你以前觉得定时器DMA的外设地址不能设成SPI寄存器呢……DMA控制器这种东西反正文档上没说能操作哪些地址,那么就是所有经过总线矩阵有连接的地址范围都可以吧……

STM32F4_Bus_MTX.png

[mw_shl_code=c,true]#include "stm32f4xx_ll_bus.h"
#include "stm32f4xx_ll_rcc.h"
#include "stm32f4xx_ll_system.h"
#include "stm32f4xx_ll_utils.h"
#include "stm32f4xx_ll_gpio.h"
#include "stm32f4xx_ll_tim.h"
#include "stm32f4xx_ll_dma.h"
#include "stm32f4xx_ll_spi.h"

static uint32_t spiValue = 0xAA;

void SystemClock_Config(void);

int main(void)
{
  SystemClock_Config();

  /* Configure SPI1 */
  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB);

  LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_3, LL_GPIO_MODE_ALTERNATE);
  LL_GPIO_SetAFPin_0_7(GPIOB, LL_GPIO_PIN_3, LL_GPIO_AF_5);
  LL_GPIO_SetPinSpeed(GPIOB, LL_GPIO_PIN_3, LL_GPIO_SPEED_FREQ_HIGH);
  LL_GPIO_SetPinPull(GPIOB, LL_GPIO_PIN_3, LL_GPIO_PULL_DOWN);

  LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_4, LL_GPIO_MODE_ALTERNATE);
  LL_GPIO_SetAFPin_0_7(GPIOB, LL_GPIO_PIN_4, LL_GPIO_AF_5);
  LL_GPIO_SetPinSpeed(GPIOB, LL_GPIO_PIN_4, LL_GPIO_SPEED_FREQ_HIGH);
  LL_GPIO_SetPinPull(GPIOB, LL_GPIO_PIN_4, LL_GPIO_PULL_DOWN);

  LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_5, LL_GPIO_MODE_ALTERNATE);
  LL_GPIO_SetAFPin_0_7(GPIOB, LL_GPIO_PIN_5, LL_GPIO_AF_5);
  LL_GPIO_SetPinSpeed(GPIOB, LL_GPIO_PIN_5, LL_GPIO_SPEED_FREQ_HIGH);
  LL_GPIO_SetPinPull(GPIOB, LL_GPIO_PIN_5, LL_GPIO_PULL_DOWN);

  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1);

  LL_SPI_SetBaudRatePrescaler(SPI1, LL_SPI_BAUDRATEPRESCALER_DIV32);
  LL_SPI_SetTransferDirection(SPI1,LL_SPI_FULL_DUPLEX);
  LL_SPI_SetClockPhase(SPI1, LL_SPI_PHASE_2EDGE);
  LL_SPI_SetClockPolarity(SPI1, LL_SPI_POLARITY_HIGH);
  LL_SPI_SetDataWidth(SPI1, LL_SPI_DATAWIDTH_8BIT);
  LL_SPI_SetNSSMode(SPI1, LL_SPI_NSS_SOFT);
  LL_SPI_SetMode(SPI1, LL_SPI_MODE_MASTER);

  LL_SPI_Enable(SPI1);

  /* Configure DMA transfer */  
  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA2);

  LL_DMA_ConfigTransfer(DMA2, LL_DMA_STREAM_5, LL_DMA_DIRECTION_MEMORY_TO_PERIPH |
                                               LL_DMA_PRIORITY_HIGH              |
                                               LL_DMA_MODE_CIRCULAR              |
                                               LL_DMA_PERIPH_NOINCREMENT         |
                                               LL_DMA_MEMORY_INCREMENT           |
                                               LL_DMA_PDATAALIGN_BYTE            |
                                               LL_DMA_MDATAALIGN_BYTE);
  LL_DMA_SetChannelSelection(DMA2, LL_DMA_STREAM_5, LL_DMA_CHANNEL_6);
  LL_DMA_ConfigAddresses(DMA2, LL_DMA_STREAM_5, (uint32_t)&spiValue, LL_SPI_DMA_GetRegAddr(SPI1), LL_DMA_GetDataTransferDirection(DMA2, LL_DMA_STREAM_5));
  LL_DMA_SetDataLength(DMA2, LL_DMA_STREAM_5, 1);
  
  LL_DMA_EnableStream(DMA2, LL_DMA_STREAM_5);
  
  /* Configure TIM1 */
  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM1);
  
  LL_TIM_SetCounterMode(TIM1, LL_TIM_COUNTERMODE_UP);
  LL_TIM_SetPrescaler(TIM1, __LL_TIM_CALC_PSC(SystemCoreClock, 10000000));
  LL_TIM_SetAutoReload(TIM1, __LL_TIM_CALC_ARR(SystemCoreClock, LL_TIM_GetPrescaler(TIM1), 10000*2));
  LL_TIM_EnableDMAReq_UPDATE(TIM1);

  LL_TIM_EnableCounter(TIM1);

  /* Infinite loop */
  while (1) {}
}
[/mw_shl_code]
淘汰人的从来是工具而不是年龄
嵌入式的冷知识屋 blog.csdn.net/k_o_carnivist
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2017-6-23 23:07:38 | 显示全部楼层
NSS建立时间的意思是STM32的SPI从机要求NSS置零到第一个时钟沿之间至少是4个PCLK,AD7671的SYNC不满足,需要用定时器PWM单做一个NSS。当然这个不重要既然你已经用TI模式了。

5M往上如果没有高速IO电平的话,那还是考虑并行输出的ADC吧。
一个馊主意是试试DCMI。
淘汰人的从来是工具而不是年龄
嵌入式的冷知识屋 blog.csdn.net/k_o_carnivist
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 23:34:41 来自手机 | 显示全部楼层
没看出TIM控制SPI
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 23:39:12 来自手机 | 显示全部楼层
LL_DMA_SetChannelSelection(DMA2, LL_DMA_STREAM_5, LL_DMA_CHANNEL_6);是这个吗?我现在手边没有资料,用手机上网的。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 23:42:15 来自手机 | 显示全部楼层
二都怎么联系的,还是UPDATA?
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 23:42:48 来自手机 | 显示全部楼层
二者怎么联系的。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 23:44:18 来自手机 | 显示全部楼层
好像TIM  DMA外设地址不能任意设。我再看看资料。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 23:50:56 来自手机 | 显示全部楼层
我现在主要问题就是想搞清,TIM能不能有节拍地自动控制SPI或UART传输数据,不用中断,用DMA,不用CPU介入。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-23 23:57:46 来自手机 | 显示全部楼层
DMA每个流,通道只有几种选择的可能,而不能任意地址,难道我理解错了,还得好好看看资料。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-24 00:47:37 来自手机 | 显示全部楼层
太可怕了,我好象理解错了。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-24 00:48:35 来自手机 | 显示全部楼层
谢谢!
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-24 02:06:55 来自手机 | 显示全部楼层
非常感谢!纠正了我一个长期的错误认识,我认为你是正确的,有时间我试一下,再次说声谢谢。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-24 02:14:08 来自手机 | 显示全部楼层
怎样结题呢。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2017-6-26 00:36:16 | 显示全部楼层

找到答案了?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-26 13:16:05 | 显示全部楼层
LL_DMA_SetChannelSelection(DMA2, LL_DMA_STREAM_5, LL_DMA_CHANNEL_6);
  LL_DMA_ConfigAddresses(DMA2, LL_DMA_STREAM_5, (uint32_t)&spiValue, LL_SPI_DMA_GetRegAddr(SPI1), LL_DMA_GetDataTransferDirection(DMA2, LL_DMA_STREAM_5));

选择DMA2流5的第6道请求源,而DMA2流5的外设地址写SPI1->DR,可能是可以的,我现在还没有试,太忙,有时间试试用USART1定时输出看看波形和数据,用CUBEMX产生不了该种代码,要修改部分库函数。

我认为这样才符合DMA的普通要义。

回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-26 13:16:58 | 显示全部楼层
DMA2流5的第6道请求源  是 TIM1的UPDATA
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-26 16:47:45 | 显示全部楼层
好,谢谢!有你这样用过的,我就放心使用了。是的,我也认为需要2路DMA。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-26 16:51:23 | 显示全部楼层
同时,我也要感谢K.O.Carnivist!当然AD速率超过1M,或更快,我会用并行AD输出的。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-21
在线时间
11 小时
 楼主| 发表于 2017-6-30 08:24:55 | 显示全部楼层
经测试,TIM DMA 是可以的,谢谢各位大侠。
回复

使用道具 举报

17

主题

142

帖子

0

精华

高级会员

Rank: 4

积分
897
金钱
897
注册时间
2016-2-16
在线时间
162 小时
发表于 2017-9-12 11:58:47 | 显示全部楼层
楼主,定时器定时1us准嘛,是否带uc/os 3操作系统,我设置定时器1定时1us,示波器测得结果有时不太准,有操作系统影响导致,不知楼主如何实现,共享下你的工程呗,谢谢
回复

使用道具 举报

17

主题

142

帖子

0

精华

高级会员

Rank: 4

积分
897
金钱
897
注册时间
2016-2-16
在线时间
162 小时
发表于 2017-9-20 07:23:58 来自手机 | 显示全部楼层
楼主,用定时器1请求DMA2的spi1的数据发送,定时1.25us,spi1时钟16mHz,数据发送时,片选不能自动拉低拉高,不知楼主怎么实现的?
回复

使用道具 举报

17

主题

142

帖子

0

精华

高级会员

Rank: 4

积分
897
金钱
897
注册时间
2016-2-16
在线时间
162 小时
发表于 2017-10-3 13:33:27 | 显示全部楼层
K.O.Carnivist 发表于 2017-6-23 23:07
NSS建立时间的意思是STM32的SPI从机要求NSS置零到第一个时钟沿之间至少是4个PCLK,AD7671的SYNC不满足,需 ...

楼主,使用407控制2个spi接口的AD,使用spi2、spi3进行16位的全双工收发数据,由定时器定时1us触发DMA方式分别启动spi2、spi3的收发数据,如何设定定时器、DMA?请指教。
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-1-26
在线时间
12 小时
发表于 2021-6-15 15:24:56 | 显示全部楼层
楼主 可以共享一下你的工程吗,1183705318@qq.com,多谢
回复

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2019-10-29
在线时间
31 小时
发表于 2021-7-22 22:21:23 | 显示全部楼层
楼主 可以共享一下你的工程吗,56101855@qq.com,多谢
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-12-1
在线时间
13 小时
发表于 2022-1-16 14:19:15 | 显示全部楼层
楼主求工程,写了好几天快写哭了,2495338391@qq.com
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-12-1
在线时间
13 小时
发表于 2022-1-16 15:12:23 | 显示全部楼层
能参考一下你外置spi接口AD+DAM的代码么?可以有偿,我试了好几天都没成,快哭了,2495338391@qq.com
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-6-22
在线时间
21 小时
发表于 2022-3-29 19:06:32 | 显示全部楼层
同问,重酬!2746133162@qq.com
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 17:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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