OpenEdv-开源电子网

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

【求助】SPI从机重新启动DMA发送的配置问题

[复制链接]

5

主题

13

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2015-10-11
在线时间
13 小时
发表于 2018-11-13 14:43:41 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 zhtbit 于 2018-11-13 14:44 编辑

      使用STM32F405做SPI的从机发送,使用RTE_Device,假定和主机之间每次传输70个字节,正常条件下通信正常,但是如果主机某一次发送的字节数不为70(比如69或者71),从机判断出来帧数不等于70,想重新启动一下DMA接收和发送,保证下一帧主机发送的字节为正常的70时,通信能恢复正常;
     现在的现象是,只要主机某一次发送的字计数不为70,后续从机给主机发送的数据全部都错位,即使重启了SPI也不行:
     SPI_COMM_PORT.PowerControl(ARM_POWER_OFF);\
      SPI_COMM_PORT.Uninitialize();


    我试着重启了DMA,也不行:
                       DMA1_Stream7->CR &= ~((uint32_t)DMA_SxCR_EN);
                        DMA1_Stream0->CR &= ~((uint32_t)DMA_SxCR_EN);
                        
                        DMA1_Stream7->CR  = 0;
                        DMA1_Stream0->CR  = 0;
                        
                        DMA1_Stream7->PAR  = 0;
                        DMA1_Stream0->PAR  = 0;
                        
                        DMA1_Stream7->NDTR = 0;
                        DMA1_Stream0->NDTR = 0;
                        
                        DMA1_Stream7->M0AR = 0;
                        DMA1_Stream0->M0AR = 0;
                        
                        DMA1_Stream7->M1AR = 0;
                        DMA1_Stream0->M1AR = 0;
                        
                        DMA1_Stream7->FCR = (uint32_t)0x00000021;
                        DMA1_Stream0->FCR = (uint32_t)0x00000021;
                        
                        DMA1->LIFCR = (uint32_t)(DMA_LISR_FEIF0 | DMA_LISR_DMEIF0 | \
                                           DMA_LISR_TEIF0 | DMA_LISR_HTIF0 | \
                                           DMA_LISR_TCIF0);
                                                                                                                                                                        
                       DMA1->HIFCR = (uint32_t)(DMA_LISR_FEIF0 | DMA_LISR_DMEIF0 | \
                                           DMA_LISR_TEIF0 | DMA_LISR_HTIF0 | \
                                           DMA_LISR_TCIF0)<<22;
                        DMA1->HIFCR = DMA1->HIFCR| ((uint32_t)0x20000000);


跪求各位高手指点,是哪里配置不对么

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-11-14 01:20:38 | 显示全部楼层
回复

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2019-1-16
在线时间
31 小时
发表于 2020-2-4 20:09:03 | 显示全部楼层
我也遇到了这样的问题,正在想解决办法
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 17:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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