完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
您好,我在使用STM32G0B1RE的SPI1作为从设备,数据收发采用DMA方式,通过STM32CubeIDE配置工程,SPI与DMA均配置为Byte字节传输模式。
与主SPI的交互方式如下: 1、SPI-Master--->发送第一条命令---->SPI-Slave 2、SPI-Master判断SPI-Slave返回的第二、第三个字节,如果符合要求,则读取命令的应答(执行步骤3) 3、SPI-Master<---读取第一条命令应答<----SPI-Slave 在配置好工程后,数据能够正常收发,但步骤3返回给SPI-Master的数据的前3个字节总是上次的数据的结尾3个字节。我的实现逻辑是SPI-Slave端通过CS引脚判断数据传输开始与结束,数据传输的长度不定: /** * @brief SPI启动,CS变低时产生EXti中断,在中断中开启SPI+DMA传输 */ __inline void bsp_spi_start(void) { uint32_t length; // length = nss_low(); // SPI DMA 通讯使能 HAL_SPI_TransmitReceive_DMA( hspi2, txbuffer, rxbuffer, TTU_RECV_BUFF_SIZE); // 软件设置SSI hspi2.Instance->CR1 = 0xFEFF; } /** * @brief SPI停止,在CS拉高时产生EXTI中断,停止SPI+DMA的数据传输 */ __inline void bsp_spi_stop(void) { // 软件设置SSI hspi2.Instance->CR1 |= 0x0100; // 停止SPI DMA通讯 HAL_SPI_DMAStop( hspi2); // 获取SPI未传输数据长度,并处理为已传输长度 nss_high(hspi2.hdmarx->Instance->CNDTR); } 问题现象: 上图为逻辑分析仪监控的数据,通道4的高电平为上面的bsp_spi_start()函数的执行时间。通过MISO引脚可以看到前3个字节为0xF1,这3个字节实际上为上一个SPI通讯的末尾3字节,后面的"0x01 0x03"为这一次的数据的开始,通过监控txbuffer,数据是正确的。 求教,如何解决该问题? 思考:怀疑是不是手册中,34.5.9 数据发送与接收过程,图366 主器件全双工通讯 后面说明的如果使用DMA,由DMA处理的TX、RX帧的数量设置为3的原因?未看到相关清空数据等操作 |
|
相关推荐
1个回答
|
|
楼主您好。查询方式在SPI传输数据后,需要执行一次读取数据。正常SPI通讯的过程是只要发送数据,SPI就会有数据的响应。所以前两个字节是你前面操作的写SPI的两个命令产生的。
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1641 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1562 浏览 1 评论
988 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
691 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1608 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
655浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
525浏览 3评论
541浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
514浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 08:53 , Processed in 0.804885 second(s), Total 82, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号