|
用HAL_SPI_Receive_DMA(&hspi1, pBuffer, NumByteToRead); HAL_UART_Receive_DMA(&hspi1, pBuffer, NumByteToRead); 带DMA的接的,不能在此函数下面紧接着使用 这pBuffer中的数据,因为这些函数设置好传输参数,传输刚开始,pBuffer中还没有接收完数据。在这个时候如果是和芯片传数据,更不能关闭,芯片的使能。 1,可以在此类函数下面设置延时等待,然后操作pBuffer. 2,可以在DMA中断回调函数中操作数据。使用DMA传输,STM32Cube默认使能DMA传输完成中断,最终会调用HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi); 3,可先判断while(hspi1.State!=HAL_SPI_STATE_READY);STM32Cube生成的代码中,时时指示着各模的状态,传输时状态为忙。 State在 SPI_HandleTypeDef结构中定义; 用DMA传输的函数调用顺序: 1,HAL_SPI_Receive_DMA(&hspi1, pBuffer, NumByteToRead); 功能:调用HAL_SPI_TransmitReceive_DMA(hspi, pData, pData, Size);因为在主机模时要利用发数据的时钟来接收,然后就是开启DMA各中断,链接回调函数 hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt;,确保开启SPI,设置DMA触发位。 2,中断流程: void DMA1_Channel2_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_spi1_rx);} HAL_DMA_IRQHandler(&hdma_spi1_rx);中 hdma->XferCpltCallback(hdma); 因为 hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt; 等于调用了SPI_DMAReceiveCplt(DMA_HandleTypeDef *hdma);其中又调 用了HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi);该函数是用编写应用代码人地方。 |
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版