完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
环境:HAL库 + USB + W25Q64 + Fatfs 硬件:STM32f103c8t6 + MX25L64 我使用普通模式,完成在W25Q64中写入文件,通过USB可以再PC中读取出来。 因为我下一步想做一个监测系统,想提高flash读写效率,使用DMA模式 MCU一直在监测,不断往数组中写入数据,一旦满了,数据通过DMA模式往FLASH传,MCU继续监测。读也一样。 1、为了试验,我先把读的部分置换为DMA操作 HAL_SPI_Receive_DMA( hspi1,buffer,4096); 在回调函数中 再Flash_cs端设置为高电平 但程序不能正常运行,请问需要增加什么代码? 2、写入,因为FLASH一个扇区4096bytes,但每次只能写入1Page(256bytes) 请问是否可以通过DMA循环传输功能实现不需要MCU介入一次写入扇区内容?
|
|
相关推荐
1个回答
|
|
1、在使用DMA模式读取FLASH的时候,需要增加一些代码来处理DMA传输完成的中断。你可以在回调函数中添加以下代码:
```c void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) { // 处理DMA传输完成的中断 HAL_GPIO_WritePin(FLASH_CS_GPIO_Port, FLASH_CS_Pin, GPIO_PIN_SET); // 设置FLASH片选为高电平 } ``` 在上述代码中,`HAL_SPI_RxCpltCallback`是HAL库提供的SPI接收完成回调函数,在每次DMA传输完成后会自动调用该函数。 2、在使用DMA模式写入FLASH的时候,你可以将写入数据缓冲区大小设置为一个扇区的大小(4096 bytes),然后在DMA传输完成的中断回调函数中更新写入地址。 下面是一个示例代码: ```c // 定义写入数据的缓冲区 uint8_t writeBuffer[4096]; // 定义写入地址 uint32_t writeAddr = 0x00000000; // 启动DMA模式写入FLASH HAL_SPI_Transmit_DMA(&hspi1, writeBuffer, sizeof(writeBuffer)); // DMA传输完成的中断回调函数 void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) { writeAddr += sizeof(writeBuffer); // 更新写入地址 if (writeAddr < FLASH_SIZE) // 如果还有数据未写入完毕 { // 设置数据指针和数据长度 hspi->pTxBuffPtr = &writeBuffer; hspi->TxXferSize = sizeof(writeBuffer); // 启动下一次DMA传输 HAL_SPI_Transmit_DMA(hspi, writeBuffer, sizeof(writeBuffer)); } else { // 数据写入完毕 HAL_GPIO_WritePin(FLASH_CS_GPIO_Port, FLASH_CS_Pin, GPIO_PIN_SET); // 设置FLASH片选为高电平 } } ``` 在上述代码中,每次DMA传输完成后,会更新写入地址。通过循环写入的方式,可以依次将数据写入FLASH的不同扇区,直到所有数据都被写入完毕。 请注意,上述示例代码仅供参考,具体实现方式可能需要根据你使用的硬件和软件库进行调整。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1752 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1611 浏览 1 评论
1052 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1666 浏览 2 评论
1926浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
711浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
560浏览 3评论
583浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
544浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 13:34 , Processed in 0.749418 second(s), Total 46, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号