SPIM DMA
SPIM DMA示例实现了SPI采用主模式用DMA方式传输数据。
SPIM DMA示例的源代码和工程文件位于SDK_Folder\projects\peripheral\spi\spi_master_dma,其中工程文件在文件夹Keil_5下。
代码理解
示例工程流程图如图 28所示:
- 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。
- SPI DMA发送接口。代码如下:
hal_spi_transmit_dma(&g_spim_handle, tx_buffer, sizeof(tx_buffer)); - SPI DMA接收接口。代码如下:
hal_spi_receive_dma(&g_spim_handle, rx_buffer, sizeof(rx_buffer)); - SPI DMA发送接收接口。代码如下:
hal_spi_transmit_receive_dma(&g_spim_handle, tx_buffer, rx_buffer, sizeof(rx_buffer));
测试验证
- 用GProgrammer下载spim_dma.bin至开发板。
- 将开发板串口连接至PC端,打开并配置GRUart。
- 在GRUart的Receive Data窗口中将会显示SPI的数据传输结果。