OpenEdv-开源电子网

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

SPI+DMA收发数据的问题,数据能够正常发送,用逻辑分析仪抓取有数据返回,Keil仿真调试的时候接收发现接接收的数据全是FF。

[复制链接]

2

主题

4

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2020-3-30
在线时间
20 小时
发表于 2021-8-16 08:45:12 | 显示全部楼层 |阅读模式
24金钱
收发一体函数
void CameraSendBuff(void)
{
        if(Cnt1msfFlag)
        {
                Cnt1msfFlag=0;
                DMA_Cmd(DMA1_Stream3,DISABLE);
                DMA_Cmd(DMA1_Stream4,DISABLE);
                SPI2->DR;
                while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
                DMA_Cmd(DMA1_Stream3,ENABLE);
                DMA_Cmd(DMA1_Stream4,ENABLE);
        }
}
SPI配置
void SPI2_init(void)
{
        GPIO_InitTypeDef GPIO_InitStruct;
        SPI_InitTypeDef SPI_InitStruct;
        NVIC_InitTypeDef NVIC_InitSTruct;
        //????
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
       
        GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
        GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
        //GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
        GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
        GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStruct);
       
        //NSS
        GPIO_InitStruct.GPIO_Pin=GPIO_Pin_12;
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
        GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
        GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
        GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStruct);
        GPIO_SetBits(GPIOB,GPIO_Pin_12);
        //IO???
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_SPI2);
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_SPI2);
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_SPI2);
       
        //SPI??
        SPI_InitStruct.SPI_Mode=SPI_Mode_Master;
        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_FirstBit=SPI_FirstBit_LSB;
        SPI_InitStruct.SPI_DataSize=SPI_DataSize_8b;
        SPI_InitStruct.SPI_NSS=SPI_NSS_Soft;
        SPI_InitStruct.SPI_CRCPolynomial=7;
        SPI_InitStruct.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_4;
        SPI_Init(SPI2,&SPI_InitStruct);
        SPI_Cmd(SPI2, DISABLE);
       
        //DMA发送数据设置
        DMA_DeInit(DMA1_Stream4);
        DMA_Tx_InitStruct.DMA_Channel=DMA_Channel_0;
        DMA_Tx_InitStruct.DMA_DIR=DMA_DIR_MemoryToPeripheral;
        DMA_Tx_InitStruct.DMA_BufferSize=8;
        DMA_Tx_InitStruct.DMA_Memory0BaseAddr=(u32)CmdTx;
        DMA_Tx_InitStruct.DMA_PeripheralBaseAddr=(u32)&SPI2->DR;
        DMA_Tx_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
        DMA_Tx_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;
        DMA_Tx_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;
        DMA_Tx_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
        DMA_Tx_InitStruct.DMA_FIFOMode=DMA_FIFOMode_Disable;
        DMA_Tx_InitStruct.DMA_Priority=DMA_Priority_High;
        DMA_Tx_InitStruct.DMA_Mode=DMA_Mode_Normal;
        DMA_Init(DMA1_Stream4,&DMA_Tx_InitStruct);
       
        NVIC_InitSTruct.NVIC_IRQChannel=DMA1_Stream4_IRQn;
        NVIC_InitSTruct.NVIC_IRQChannelPreemptionPriority=0;
        NVIC_InitSTruct.NVIC_IRQChannelSubPriority=0;
        NVIC_InitSTruct.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitSTruct);
       
        //DMA接收数据设置
        DMA_DeInit(DMA1_Stream3);
        DMA_Rx_InitStruct.DMA_Channel=DMA_Channel_0;
        DMA_Rx_InitStruct.DMA_DIR=DMA_DIR_PeripheralToMemory;
        DMA_Rx_InitStruct.DMA_Mode=DMA_Mode_Normal;
        DMA_Rx_InitStruct.DMA_BufferSize=8;
        DMA_Rx_InitStruct.DMA_Priority=DMA_Priority_High;
        DMA_Rx_InitStruct.DMA_Memory0BaseAddr=(u32)CmdRx;
        DMA_Rx_InitStruct.DMA_PeripheralBaseAddr=(u32)&SPI2->DR;
        DMA_Rx_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
        DMA_Rx_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;
        DMA_Rx_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;
        DMA_Rx_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
        DMA_Rx_InitStruct.DMA_FIFOMode=DMA_FIFOMode_Disable;
        DMA_Init(DMA1_Stream3,&DMA_Rx_InitStruct);
       
        NVIC_InitSTruct.NVIC_IRQChannel=DMA1_Stream3_IRQn;
        NVIC_InitSTruct.NVIC_IRQChannelPreemptionPriority=0;
        NVIC_InitSTruct.NVIC_IRQChannelSubPriority=0;
        NVIC_InitSTruct.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitSTruct);

        SPI_I2S_DMACmd(SPI2,SPI_I2S_DMAReq_Tx,ENABLE);
        SPI_I2S_DMACmd(SPI2,SPI_I2S_DMAReq_Rx,ENABLE);
        DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4|DMA_IT_DMEIF4|DMA_IT_FEIF4|DMA_IT_HTIF4|DMA_IT_TEIF4);
        DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);
        DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3|DMA_IT_DMEIF3|DMA_IT_FEIF3|DMA_IT_HTIF3|DMA_IT_TEIF4);
        DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);
        DMA_Cmd(DMA1_Stream3,DISABLE);
        DMA_Cmd(DMA1_Stream4,DISABLE);
        SPI_Cmd(SPI2, ENABLE);
}

void DMA1_Stream3_IRQHandler(void)
{
        if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3))
        {
                DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);
                DMA_ClearFlag(DMA1_Stream3,DMA_FLAG_TCIF3);
//                SPI2RxEndflag=1;
        }
}
void DMA1_Stream4_IRQHandler(void)
{
        if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4))
        {
                DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);
                DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);
               
        }
}

这是用逻辑分析仪抓取的数据。下面一列是发送的数据,上面是从设备返回的数据。


但是在Keil调试时这里的数据全是0xFF





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

592

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1458
金钱
1458
注册时间
2019-7-28
在线时间
137 小时
发表于 2021-8-16 10:15:36 | 显示全部楼层
逻辑分析仪抓的数据也是FF?
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2020-3-30
在线时间
20 小时
 楼主| 发表于 2021-8-17 08:09:14 | 显示全部楼层
lpwithv 发表于 2021-8-16 10:15
逻辑分析仪抓的数据也是FF?

逻辑分析仪不是的,有我想要的数据
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-12-10
在线时间
3 小时
发表于 2021-9-24 13:58:36 | 显示全部楼层
问题解决了吗
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2020-3-30
在线时间
20 小时
 楼主| 发表于 2021-10-5 16:04:57 | 显示全部楼层

解决了,是硬件问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 19:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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