CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!

SPIM DMA

SPIM DMA示例实现了SPI采用主模式用DMA方式传输数据。

SPIM DMA示例的源代码和工程文件位于SDK_Folder\projects\peripheral\spi\spi_master_dma,其中工程文件在文件夹Keil_5下。

代码理解

示例工程流程图如图 28所示:

图 28 SPIM DMA示例流程图
  1. SPIM DMA的初始化。
    g_spim_handle.init.data_size    = SPI_DATASIZE_8BIT;
    g_spim_handle.init.clock_polarity   = SPI_POLARITY_LOW;
    g_spim_handle.init.clock_phase   = SPI_PHASE_1EDGE;
    g_spim_handle.init.baudrate_prescaler = SystemCoreClock / 2000000;
    g_spim_handle.init.ti_mode   = SPI_TIMODE_DISABLE;
    g_spim_handle.init.slave_select   = SPI_SLAVE_SELECT_0;
    hal_spi_init(&g_spim_handle);
    
    • data_size:SPI数据发送宽度,可选择SPI_DATASIZE_4BIT ~ SPI_DATASIZE_32BIT。
    • clock_polarity:空闲状态时的时钟信号,可选择SPI_POLARITY_LOW、SPI_POLARITY_HIGH。
    • clock_phase:时钟切换的时间,可选择SPI_PHASE_1EDGE、SPI_PHASE_2EDGE。
    • baudrate_prescaler:SPI的时钟,此处为SystemCoreClock / 2000000即20 MHz。
    • ti_mode:TI模式使能/禁能,可选择SPI_TIMODE_DISABLE、SPI_TIMODE_ENABLE。
    • slave_select:从设备的选择,可选择SPI_SLAVE_SELECT_0、SPI_SLAVE_SELECT_1、SPI_SLAVE_SELECT_ALL。
  2. SPI DMA发送接口。代码如下:
    hal_spi_transmit_dma(&g_spim_handle, tx_buffer, sizeof(tx_buffer));
  3. SPI DMA接收接口。代码如下:
    hal_spi_receive_dma(&g_spim_handle, rx_buffer, sizeof(rx_buffer));
  4. SPI DMA发送接收接口。代码如下:
    hal_spi_transmit_receive_dma(&g_spim_handle, tx_buffer, rx_buffer, sizeof(rx_buffer));

测试验证

  1. 用GProgrammer下载spim_dma.bin至开发板。
  2. 将开发板串口连接至PC端,打开并配置GRUart。
  3. 在GRUart的Receive Data窗口中将会显示SPI的数据传输结果。

扫描关注

打开微信,使用“扫一扫”即可关注。