200、stm32定义缓冲区用在DMA上时,需要谨记4字节地址对齐规则

stm32定义缓冲区用在DMA上时,需要谨记4字节地址对齐规则,尤其是在结构体内定义缓冲区


修改方法:

或者直接把buffer放在结构体最前面

c 复制代码
/****************************************
@function:读取扇区数据
@param:buffer:数据存放缓冲区
  StartSector:起始扇区
  number:扇区个数
@return:false=失败,true=成功
@note:
****************************************/
static bool SD_Read(uint8_t *buffer,uint32_t StartSector,uint32_t number)
{
  if((buffer == NULL) || ((StartSector+number) > SampleParameter.SdCard.BlockNbr) || (number == 0))return false;
  //uint32_t time;
  //float speed;
  //printf("开始DMA读取 %d 个扇区...\r\n", number);
  //TICK_START();
  if(HAL_SD_ReadBlocks_DMA(&hsd1, buffer, StartSector, number) != HAL_OK)return false;
  SD_Wait_DMA();
  //time = TICK_END();
  //speed = calc_speed(SampleParameter.SdCard.BlockSize*number, time);
  //printf("读取完成!耗时:%lu ms,速度:%.2f MB/s\r\n", time, speed);
  return true;
}
static void printfData(uint8_t *name,uint8_t *pbuf,uint32_t len)
{
    printf("%s:",name);
    for(uint32_t i = 0;i < len;i++)printf("%d ",pbuf[i]);
    printf("\n");
}
相关推荐
茉莉玫瑰花茶10 小时前
Windows 平台下的 UDP 客户端
stm32·单片机·嵌入式硬件
磨十三12 小时前
U-Boot
arm开发·嵌入式硬件
笔夏12 小时前
【移芯平台CAT1模组】烧写固件
stm32·单片机·学习
十月的皮皮12 小时前
STM32从零到量产开发:四路继电器工业控制模块开发— 继电器模块bsp_di.h与 bsp_di.c文件
c语言·stm32·stm32cubemx·hal库
无垠的广袤12 小时前
【RA-Eco-RA4M2开发板】步进电机的串口控制和 LabVIEW 数据采集
单片机·嵌入式硬件·labview
茯苓gao14 小时前
嵌入式开发笔记:QSerialPort 完整使用指南——从基础 API 到工程实战
笔记·嵌入式硬件·qt·学习
wuyk55514 小时前
67.嵌入式C语言进阶:结构体指针实战指南——STM32外设、传感器数据访问的高效技巧
c语言·开发语言·stm32·单片机
Mr+范14 小时前
单片机 ADC 电压与电流检测及电阻选型指南
单片机·嵌入式硬件
西城微科方案开发15 小时前
LCD智能婴儿秤方案
单片机·嵌入式硬件
三佛科技-1341638421216 小时前
灭蚊灯MCU方案开发,FT60E112-RB作为灭蚊灯主控芯片优势
单片机·嵌入式硬件·物联网·智能家居·pcb工艺