打印

GD32F470 SPI DMA接收

[复制链接]
9211|58
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
spi2配置没问题,可以正常使用,但是加上dma,发现dma没有开启,有没有大佬告诉我一下,我下面的代码配置哪里有问题,找了好久找不出来,谢谢谢谢!!!

uint8_t spi2_tx_buf[6] = {0};
uint8_t spi2_rx_buf[6] = {0};

void DMA0_CH0_Config()//spi——RX
{
        dma_single_data_parameter_struct dma_init_spi2_rx;
        rcu_periph_clock_enable(RCU_DMA0);

        dma_deinit(DMA0, DMA_CH0);
        dma_init_spi2_rx.direction = DMA_PERIPH_TO_MEMORY;
        dma_init_spi2_rx.memory0_addr = (uint32_t)(spi2_rx_buf); // 存储器地址
        dma_init_spi2_rx.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
        dma_init_spi2_rx.periph_addr = (uint32_t)&SPI_DATA(SPI2);
        dma_init_spi2_rx.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
        dma_init_spi2_rx.periph_memory_width = DMA_PERIPH_WIDTH_8BIT;
        dma_init_spi2_rx.number = sizeof(spi2_rx_buf);
        dma_init_spi2_rx.priority = DMA_PRIORITY_ULTRA_HIGH;
        dma_init_spi2_rx.circular_mode = DMA_CIRCULAR_MODE_DISABLE;
        dma_single_data_mode_init(DMA0, DMA_CH0, &dma_init_spi2_rx);
        dma_channel_subperipheral_select(DMA0, DMA_CH0, DMA_SUBPERI4);
       
        dma_memory_address_config(DMA0, DMA_CH0, DMA_MEMORY_0, (uint32_t)(spi2_rx_buf)); // 存储器地址
        dma_transfer_number_config(DMA0, DMA_CH0, sizeof(spi2_rx_buf));
        dma_channel_enable(DMA0, DMA_CH0);

        spi_dma_enable(SPI2,SPI_DMA_RECEIVE);
}


使用特权

评论回复
沙发
ccook11| | 2023-11-5 14:59 | 只看该作者
在使用SPI DMA接收时,需要先对SPI和DMA的相关参数进行配置,如SPI的工作模式、DMA通道号等。

使用特权

评论回复
板凳
sdlls| | 2023-11-5 15:32 | 只看该作者
需要注意配置SPI和DMA的相关参数、确保DMA传输正常、处理中断、处理数据完整性问题

使用特权

评论回复
地板
wilhelmina2| | 2023-11-5 16:11 | 只看该作者
正确配置DMA通道,包括传输方向(接收或发送)、传输大小、传输完成的中断等。同时,还需要将SPI接口的接收寄存器与DMA通道的源地址寄存器相连,以便DMA通道能够从SPI接口读取数据。

使用特权

评论回复
5
biechedan| | 2023-11-5 16:47 | 只看该作者
在使用SPI DMA接收时,可以采用一些优化策略,如减少中断次数、优化DMA传输等,以提高SPI DMA接收的效率。

使用特权

评论回复
6
alvpeg| | 2023-11-5 17:38 | 只看该作者
如果遇到SPI传输错误等问题,可能与SPI的速率等因素有关,需要适当调整。

使用特权

评论回复
7
cemaj| | 2023-11-5 18:20 | 只看该作者
如果需要数据的完整性校验,可以在DMA接收时启用校验和校验功能,以确保数据的完整性。

使用特权

评论回复
8
kkzz| | 2023-11-5 19:59 | 只看该作者
为了提高数据接收的效率,可以考虑使用多字节DMA传输,即在同一个DMA通道中连续传输多个数据字节。

使用特权

评论回复
9
mattlincoln| | 2023-11-5 20:32 | 只看该作者
需要对SPI DMA接收功能进行充分的测试和调试

使用特权

评论回复
10
juliestephen| | 2023-11-5 21:03 | 只看该作者
在使用SPI DMA接收时,需要注意数据的完整性。如果接收到的数据不完整,可能会导致系统出现错误。

使用特权

评论回复
11
houjiakai| | 2023-11-5 21:16 | 只看该作者
在DMA初始化结构体中设置好相关参数,包括指定数据传输方向

使用特权

评论回复
12
geraldbetty| | 2023-11-5 22:08 | 只看该作者
配置DMA通道、内存地址、数据宽度等参数,使其与SPI接口和外部设备相匹配。同时,根据实际需求,设置DMA缓冲区大小和接收的数据块数量。

使用特权

评论回复
13
xiaoyaodz| | 2023-11-5 22:30 | 只看该作者
GD32F470单片机的SPI接口与外部SPI设备正确连接。同时,根据外部SPI设备的数据线宽和时钟频率等参数,配置单片机的SPI工作模式。

使用特权

评论回复
14
zeshoufx| | 2023-11-6 08:43 | 只看该作者
存储器地址配置错误了,应该是给存储器写入或读取的地址,而不是你要发送的数据数组的地址,结构体部分配置没问题

使用特权

评论回复
15
chenci2013| | 2023-11-6 16:57 | 只看该作者
需要设置中断处理函数,以处理各种异常情况,例如溢出、空闲中断等。

使用特权

评论回复
16
youtome| | 2023-11-6 19:44 | 只看该作者
选择合适的DMA通道,并设置好相关参数,如源地址、目标地址、长度等。

使用特权

评论回复
17
bestwell| | 2023-11-6 20:14 | 只看该作者
SPI DMA传输支持字节和半字传输模式,可以根据实际情况选择合适的数据宽度。

使用特权

评论回复
18
adolphcocker| | 2023-11-7 16:14 | 只看该作者
在DMA接收完成后,需要及时清零SPI的接收寄存器,以确保下一次接收的正确性。

使用特权

评论回复
19
febgxu| | 2023-11-7 17:42 | 只看该作者
需要正确地配置SPI总线的相关参数,包括波特率、极性、相位等。

使用特权

评论回复
20
plsbackup| | 2023-11-7 17:57 | 只看该作者
在运行过程中,可能会出现各种错误

使用特权

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

本版积分规则

4

主题

5

帖子

0

粉丝