你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

SPI2从模式下DMA发送配置不成功。

[复制链接]
any012 提问时间:2016-5-19 16:40 /
悬赏3ST金币已解决
再次请教大家问题。
STM32做从设备通过SPI2相应主机,想通过DMA来控制自动将发送数组里的数发送出去。结果测量MISO管脚没有波形。
照着例程设置了SPI2的DMA配置函数。请教,除此之外,还有哪里还需要设置呢?

#define SPI2_DR_Base 0x4000380c

  1. void SPI2_DMAConif(void)
  2. {
  3.         DMA_InitTypeDef DMA_InitStructure;
  4.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);        
  5.         DMA_InitStructure.DMA_PeripheralBaseAddr = SPI2_DR_Base;
  6.         DMA_InitStructure.DMA_MemoryBaseAddr = (u32)spi2Send;  
  7.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;     
  8.         DMA_InitStructure.DMA_BufferSize = 5;
  9.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  10.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  11.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  12.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;  
  13.         DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;  
  14.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
  15.         DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  16.         DMA_Init(DMA1_Channel5, &DMA_InitStructure);        
  17.         DMA_Cmd(DMA1_Channel5, ENABLE);
  18.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE);
  19. }
复制代码
  1. void SPI2_Init(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         SPI_InitTypeDef SPI_InitStructure;
  5.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
  6.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
  7.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_14;
  8.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  9.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  10.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;  
  12.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  13.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  14.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  15.         SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
  16.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
  17.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
  18.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  19.         SPI_InitStructure.SPI_NSS =SPI_NSS_Soft;
  20.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
  21.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  22.         SPI_InitStructure.SPI_CRCPolynomial = 7;
  23.         SPI_Init(SPI2, &SPI_InitStructure);
  24.         SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_RXNE, ENABLE);
  25.         SPI_Cmd(SPI2, ENABLE);
  26. }
复制代码




最佳答案

查看完整内容

呵呵 主要STM32系列太多了。 你可以先检测下CLK脚、MOSI有无信号,毕竟现在STM32是从机。 再就是两边的相位和极性参数配置是否一致。
收藏 评论4 发布时间:2016-5-19 16:40

举报

4个回答
xmshao 回答时间:2016-5-19 16:40:55
呵呵 主要STM32系列太多了。

你可以先检测下CLK脚、MOSI有无信号,毕竟现在STM32是从机。

再就是两边的相位和极性参数配置是否一致。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

xmshao 回答时间:2016-5-20 08:10:03
首先把stm32型号说清楚。
any012 回答时间:2016-5-20 09:04:00
xmshao 发表于 2016-5-20 08:10
首先把stm32型号说清楚。

感谢回复。
用的是STM32F103VBT6,应该只有一个DMA1。
hellobbx 回答时间:2018-3-22 20:27:35
解决了吗?我也设置SPI/DMA不成功,楼主分享下呗

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版