OpenEdv-开源电子网

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

STM32F103 SPI1 SLAVE DMA收发和USART1 同步方式并发时bug

[复制链接]

0

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-10-21
在线时间
7 小时
发表于 2019-12-20 14:42:56 | 显示全部楼层 |阅读模式
1金钱
各位大神,
     小弟遇到一个奇怪的问题。
    1.SPI1 配置为slave模式,并采用dma方式(通道2、3)收发,单独收发十分稳定正常。
    2.USART1 配置为同步模式,只做发送USART_TX, USART_CK,单独工作,中断方式 或者 DMA发送工作稳定正常。
    3.SPI1 和 USART1都运行,只要在SPI1收发过程中没有USART1发送,SPI1都正常。  而当SPI1正在收发过程中(一长串数据),同时USART1发送一串数据,就会导致SPI1数据错误,包括DMA收到的字节数都不一致。
       感觉时DMA接收  和 发送丢数据了。
       降低USART1的发送波特率也会,不管采用dma还是软件发送。

     怀疑时两个模块并发工作时,内部总线有bug, 各位大神有遇到过类似的吗?

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-12-21 02:32:06 | 显示全部楼层
同时都用同一个dma,会有总线竞争,必须分开2个DMA,或者分时用
回复

使用道具 举报

1

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2019-12-5
在线时间
20 小时
发表于 2019-12-21 08:18:43 | 显示全部楼层
正点原子 发表于 2019-12-21 02:32
同时都用同一个dma,会有总线竞争,必须分开2个DMA,或者分时用

学习了
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-10-21
在线时间
7 小时
 楼主| 发表于 2019-12-21 20:38:53 | 显示全部楼层
正点原子 发表于 2019-12-21 02:32
同时都用同一个dma,会有总线竞争,必须分开2个DMA,或者分时用

usart1 不用dma发送,用软件查询状态发送也会这样。。。有测试过分别用如下
                //HAL_USART_Transmit(&husart1, (uint8_t *)USART1_Tx_Buffer, USART1_SPI_BUFFER_LEN,200);                       
               

                HAL_USART_Transmit_DMA(&husart1, (uint8_t *)USART1_Tx_Buffer, USART1_SPI_BUFFER_LEN);       




SPI1固定采用HAL_SPI_TransmitReceive_DMA(&hspi1, (uint8_t *)SPI1_Tx_Buffer, (uint8_t *)SPI1_Rx_Buffer, B2L_Data_Len/2);
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-10-21
在线时间
7 小时
 楼主| 发表于 2019-12-21 20:48:46 | 显示全部楼层
正点原子 发表于 2019-12-21 02:32
同时都用同一个dma,会有总线竞争,必须分开2个DMA,或者分时用

即使总线竞争也有仲裁,不至于错乱了。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-12-21 23:59:13 | 显示全部楼层
leoleo 发表于 2019-12-21 20:48
即使总线竞争也有仲裁,不至于错乱了。。。

同时发生,就有可能丢数据
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-10-21
在线时间
7 小时
 楼主| 发表于 2019-12-22 00:40:45 | 显示全部楼层
正点原子 发表于 2019-12-21 23:59
同时发生,就有可能丢数据

usart1 不用dma发送,用软件查询状态发送也会这样。。。有测试过分别用如下
                //HAL_USART_Transmit(&husart1, (uint8_t *)USART1_Tx_Buffer, USART1_SPI_BUFFER_LEN,200);                       
               

                HAL_USART_Transmit_DMA(&husart1, (uint8_t *)USART1_Tx_Buffer, USART1_SPI_BUFFER_LEN);      




SPI1固定采用HAL_SPI_TransmitReceive_DMA(&hspi1, (uint8_t *)SPI1_Tx_Buffer, (uint8_t *)SPI1_Rx_Buffer, B2L_Data_Len/2);
回复

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-12-22 12:35:52 | 显示全部楼层
帮顶                                                              
成功没有捷径
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-10-21
在线时间
7 小时
 楼主| 发表于 2020-1-1 10:12:29 | 显示全部楼层
没人能回复了?
回复

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2019-10-21
在线时间
34 小时
发表于 2020-7-2 15:16:21 | 显示全部楼层
出现过类似问题,郁闷好几天。我是用SPI1轮询周期读写,uart1用DMA单次发送。故障形式和你类似,就是DMA每次发送完成后,都会造成SPI1的时序出错。但如果DMA uart1与spi1分开用,都正常。后来换成spi1与dma uart2,就不再出现这个现象。单步调试中发现,每次出现问题的时刻,都是dma uart1完成,开始置位标志位的时候,包括半、全完成标志位置位时刻,都会造成SPI1时序错误。后来分析认为,应该是由于spi1和uart1都挂在apb2上,可能因为这个原因造成时序错误。
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-10-21
在线时间
7 小时
 楼主| 发表于 2020-7-28 02:07:33 | 显示全部楼层
wjlhnepri 发表于 2020-7-2 15:16
出现过类似问题,郁闷好几天。我是用SPI1轮询周期读写,uart1用DMA单次发送。故障形式和你类似,就是DMA每 ...

哎,难道是芯片bug?
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-10-21
在线时间
7 小时
 楼主| 发表于 2020-7-28 02:21:13 | 显示全部楼层
wjlhnepri 发表于 2020-7-2 15:16
出现过类似问题,郁闷好几天。我是用SPI1轮询周期读写,uart1用DMA单次发送。故障形式和你类似,就是DMA每 ...

我用的STM32T8,只有一个dma... 用usart2 没dma2.。。
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2020-1-3
在线时间
17 小时
发表于 2023-6-7 20:19:36 | 显示全部楼层
0000000
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 08:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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