打印
[STM32F1]

STM32F103 SPI +DMA

[复制链接]
2107|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuhuis|  楼主 | 2018-8-30 08:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SPI为主机,发送数据,使用DMA来接收数据。可是DMA一直接收到的都是零,是不是SPI+DMA只能对八位数据操作?
沙发
wyjie| | 2018-8-30 08:42 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
zhuhuis|  楼主 | 2018-8-30 08:45 | 只看该作者

RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);/
        
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  
        GPIO_InitStructure.GPIO_Pin = SPI_NsPin;
        GPIO_Init(SPI_NsPort,&GPIO_InitStructure);
        GPIO_SetBits(SPI_NsPort,SPI_NsPin);         
        // SCK MOSI
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  
  GPIO_InitStructure.GPIO_Pin = SPI_MosiPin;
        GPIO_Init(SPI_MosiPort,&GPIO_InitStructure);
  
        GPIO_InitStructure.GPIO_Pin = SPI_SckPin;
        GPIO_Init(SPI_SckPort,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_InitStructure.GPIO_Pin = SPI_MisoPin;  
        GPIO_Init(SPI_MisoPort,&GPIO_InitStructure);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  DMA_DeInit(DMA1_Channel1);
  DMA_InitStructure.DMA_PeripheralBaseAddr = 0x4000380C;           
  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Buffer_1;      
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;            
  DMA_InitStructure.DMA_BufferSize = 1;                           
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_PeripheralInc_Disable;   
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;                  
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;         
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;                  
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);

SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
        SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
        SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;                        
        SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;                        
        SPI_InitStruct.SPI_CRCPolynomial = 0;                        
        SPI_InitStruct.SPI_DataSize = SPI_DataSize_16b;               
        SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;                 
        SPI_InitStruct.SPI_Mode = SPI_Mode_Master;                     
        SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;                        
        SPI_Init(SPI_Number,&SPI_InitStruct);                           
        SPI_I2S_ClearFlag(SPI_Number,SPI_I2S_FLAG_TXE);
        SPI_I2S_ClearFlag(SPI_Number,SPI_I2S_FLAG_RXNE);
  SPI_I2S_DMACmd(SPI_Number, SPI_I2S_DMAReq_Rx, ENABLE);  、
SPI_Cmd(SPI_Number,ENABLE);

上面是初始化  

DMA_Cmd(DMA1_Channel1, ENABLE);
                        MA730_SetCS(ENABLE);   片选脚
                  while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
                  SPI_I2S_SendData(SPI2, 0x0000);
                  while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
                  SPI_I2S_SendData(SPI2, 0x0000);
                  730_SetCS(DISABLE); 片选脚
                  while(DMA_GetFlagStatus(DMA1_FLAG_TC1));                                 
                  DMA_Cmd(DMA1_Channel1, DISABLE);

使用特权

评论回复
地板
songqian17| | 2018-8-30 08:48 | 只看该作者
神马DMA通道?

使用特权

评论回复
5
lizye| | 2018-8-30 08:50 | 只看该作者
用HAL库,直接就配置好了。。。以前库的例程,SPI+DMA网上一大把。

使用特权

评论回复
6
zhuhuis|  楼主 | 2018-8-30 08:52 | 只看该作者
那片选脚怎么处理?

使用特权

评论回复
7
zhuhuis|  楼主 | 2018-8-30 08:53 | 只看该作者
问题是找到了,可是现在我想用DMA来发送接收

使用特权

评论回复
8
chenho| | 2018-8-30 08:55 | 只看该作者
片选脚用软件使能。

使用特权

评论回复
9
zhuhuis|  楼主 | 2018-8-30 08:57 | 只看该作者

结贴了,多谢大家讨论这么多哈,呵呵

使用特权

评论回复
10
Erichk| | 2018-8-30 11:42 | 只看该作者
也就是说DMA没有接受到数据了
首先检查spi发送过来没有

使用特权

评论回复
11
heimaojingzhang| | 2018-9-3 11:15 | 只看该作者
用示波器看看总线上有没有波形

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

728

主题

8464

帖子

6

粉丝