STM32CubeMX SDIO SD卡 FATFS

2023-05-16

(390条消息) STM32CubeMX系列09——SDIO(SD卡读写、SD卡移植FATFS文件系统)_stm32cubemx sdio_32Haozi的博客-CSDN博客

https://blog.csdn.net/weixin_46253745/article/details/127865071?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-127865071-blog-77679103.235%5Ev27%5Epc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-127865071-blog-77679103.235%5Ev27%5Epc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=14

(389条消息) STM32CubeMX的SDIO模式下对SD卡读写测试(附源码)_sdio 速率测试代码_路伢辉的博客-CSDN博客

https://blog.csdn.net/zxh912516636/article/details/77679103

第25章 串行FLASH文件系统FatFs—零死角玩转STM32-F429系列 - 野火_firege - 博客园

https://www.cnblogs.com/firege/p/5805801.html

(390条消息) STM32CubeMx之SD卡驱动_stm32sd卡驱动_IT_阿水的博客-CSDN博客

https://blog.csdn.net/weixin_44453694/article/details/123680102?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167973942016800222824899%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167973942016800222824899&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-6-123680102-null-null.article_score_rank_blog&utm_term=2023%20%E6%96%B0%E7%89%88HAL%E5%BA%93%20SDIO%20%E9%A9%B1%E5%8A%A8%E5%88%9D%E5%A7%8B%E5%8C%96%E5%A4%B1%E8%B4%A5&spm=1018.2226.3001.4450

SDIO分为两个部分:AHB interface和SDIO adapter。
AHB interface采用的时钟是HCLK/2=36MHz, 是用来访问STM32 SDIO本身的寄存器的。
SDIO adapter采用的时钟是SDIOCLK=HCLK=72MHz,SDIO_CK时钟线(PC12脚,单片机给SD卡提供的时钟)输出的时钟就是从这个上面分频得到的,分频公式为SDIOCLK/(CLKDIV+2)。CLKDIV就是hsd.Init.ClockDiv的值。(就是我们上面设定的值)
当CLKDIV=70时,SDIO_CK输出的频率为72MHz/(70+2)=1MHz。在这个频率下可以不使用DMA收发数据。
当CLKDIV=1时,SDIO_CK输出的频率为72MHz/(1+2)=24MHz。在这个频率下必须使用DMA收发数据。

前面第一章说了 SDIO的时钟频率为0~25Mhz,此处设置分频系数为34,而我们开发板的时钟频率为72Mhz,这里分频系数为34,也就是72/(34+2) = 2Mhz。(其他数也行,反正分频完不要超过25,否则读写都会失败)
不过,实际上经过测试,设置为4,也就是分频完为 72 / 6 = 12,也仍然会写失败,又是踩坑的一天
问题:上面的函数中有一个 hsd.Init.BusWide = SDIO_BUS_WIDE_1B;,但是我们配置的不是四线的吗。

答案:(其实也不太明白为什么,但是先这样吧):
SD卡可以采用1位数据线模式,也可以采用4位数据线模式。但是必须确保STM32单片机的SDIO设置的数据线位宽,和SD卡上设置的数据线位宽是一致的。
如果将 hsd.Init.BusWide 设为 SDIO_BUS_WIDE_4B,然后执行HAL_SD_Init 函数,只能把STM32单片机的SDIO设置为4位位宽,SD卡上还是用的1位位宽。
所以通常的做法是 hsd.Init.BusWide 设为 SDIO_BUS_WIDE_1B,HAL_SD_Init 执行完成后,再调用 HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B),这个函数可以将STM32和SD卡同时设为4位模式。

注意修改:将4B改为1B;同时将时钟分频加大(不然出现错误)

hsd.Init.BusWide = SDIO_BUS_WIDE_1B;

hsd.Init.ClockDiv = 4;//SDIO块测试可以达到最大分频为0

hsd.Init.ClockDiv = 24;//FATFS文件系统测试要降低,否则打不开文件

添加初始化:

if (HAL_SD_Init(&hsd) != HAL_OK)

{

Error_Handler();

}

if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK)

{

Error_Handler();

}

void MX_SDIO_SD_Init(void)
{

  /* USER CODE BEGIN SDIO_Init 0 */

    char SD_Error = 0;
  /* USER CODE END SDIO_Init 0 */

  /* USER CODE BEGIN SDIO_Init 1 */

  /* USER CODE END SDIO_Init 1 */
  hsd.Instance = SDIO;
  hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
  hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
  hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
  hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
  hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
  hsd.Init.ClockDiv = 24;
  /* USER CODE BEGIN SDIO_Init 2 */
  if (HAL_SD_Init(&hsd) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE END SDIO_Init 2 */

}

下面是DMA操作:


/**
  * @brief BSP Tx Transfer completed callback
  * @retval None
  * @note empty (up to the user to fill it in or to remove it if useless)
  */
__weak void BSP_SD_WriteCpltCallback(void)
{
    __HAL_DMA_DISABLE(hsd.hdmatx);
    sd_tx_complete = 1;
}

/**
  * @brief BSP Rx Transfer completed callback
  * @retval None
  * @note empty (up to the user to fill it in or to remove it if useless)
  */
__weak void BSP_SD_ReadCpltCallback(void)
{
    __HAL_DMA_DISABLE(hsd.hdmarx);
    sd_rx_complete = 1;
}

添加块测试程序

void HAL_SDIO_Block_Test(void)
{
    HAL_StatusTypeDef status;    // 状态
    uint8_t read_buf[512];        // 读数据缓存
    uint8_t write_buf[512];        // 写数据缓存
    printf("\r\n --------------------- 修改频率 -------------------- \r\n");
    /*
        设置SDIO时钟频率 = 72 /(ClockDiv + 2) = 18 Mhz
        1. 修改结构体 hsd 参数
        2. 重新初始化
        3. 判断初始化是否成功
    */
    hsd.Init.ClockDiv = 2;
    status = HAL_SD_Init(&hsd);
    if (status == HAL_OK)
        printf("频率更改为 %d Hz.\r\n", SystemCoreClock / (2 + hsd.Init.ClockDiv));
    else
    {
        printf("更改频率失败! status = %d \r\n", status);
    }
        printf("\r\n --------------------- SD擦除 -------------------- \r\n");
    // 注意查看参数
    status = HAL_SD_Erase(&hsd, 0, 0);
    if (status == HAL_OK)
    {
        printf("擦除1个SD卡块. state = %d \r\n", HAL_SD_GetCardState(&hsd));
        while (HAL_SD_GetCardState(&hsd) == HAL_SD_CARD_PROGRAMMING);
        printf("擦除完成! state = %d \r\n", HAL_SD_GetCardState(&hsd));
    }
    else
    {
        printf("DMA擦除1个SD卡块失败! status = %d \r\n", status);
    }
    
    printf("\r\n --------------------- DMA模式读SD卡 -------------------- \r\n");
    // 从SD卡扇区0开始读, 读1个扇区到 read_buf 中
    // note:注意DMA模式下每次最多只能读127个扇区,也就是最后一个参数最多只能是127
    status = HAL_SD_ReadBlocks_DMA(&hsd, (uint8_t *)read_buf, 0, 1);
    if (status == HAL_OK)
    {
        while (!sd_rx_complete);    // 等待传输完成(传输完成会有回调函数)
        sd_rx_complete = 0;            // 清除标志位
        printf("使用DMA读取SD卡块1 \r\n");
        for(int i = 0; i < 512; i++)
        {
            printf("0x%02x ", read_buf[i]);
            if((i+1)%16 == 0)
            {
                printf("\r\n");
            }
        }
    }
    else
    {
        printf("DMA读取失败! status = %d \r\n", status);
    }
    
    printf("\r\n --------------------- DMA模式写SD卡 -------------------- \r\n");
    for(int i = 0; i < 512; i++)
    {
        write_buf[i] = i;
    }
    status = HAL_SD_WriteBlocks_DMA(&hsd, (uint8_t *)write_buf, 0, 1);
    if (status == HAL_OK)
    {
        while (!sd_tx_complete);
        sd_tx_complete = 0;
        printf("DMA写入1个SD卡块. state = %d \r\n", HAL_SD_GetCardState(&hsd));
        // 注意DMA传输完成,不代表SD卡就写完成了。
        while (HAL_SD_GetCardState(&hsd) == HAL_SD_CARD_PROGRAMMING);
        printf("写入完成! state = %d \r\n", HAL_SD_GetCardState(&hsd));
    }
    else
    {
        printf("DMA写入1个SD卡块失败! status=%d \r\n", status);
    }
    
    printf("\r\n --------------------- 写完之后再读一次 -------------------- \r\n");
    status = HAL_SD_ReadBlocks_DMA(&hsd, (uint8_t *)read_buf, 0, 1);
    if (status == HAL_OK)
    {
        while (!sd_rx_complete);    // 等待传输完成(传输完成会有回调函数)
        sd_rx_complete = 0;            // 清除标志位
        printf("使用DMA读取SD卡块1 \r\n");
        for(int i = 0; i < 512; i++)
        {
            printf("0x%02x ", read_buf[i]);
            if((i+1)%16 == 0)
            {
                printf("\r\n");
            }
        }
    }
    else
    {
        printf("DMA读取失败! status = %d \r\n", status);
    }
    
}

可以选择不填

添加文件系统测试程序

void HAL_SDIO_FATFS_Test(void)
{
  FATFS fs;                       /* FatFs 文件系统对象 */
  FIL file;                       /* 文件对象 */
  FRESULT f_res;                  /* 文件操作结果 */
  UINT fnum;                      /* 文件成功读写数量 */
  BYTE ReadBuffer[1024] = {0};    /* 读缓冲区 */
  BYTE WriteBuffer[] =  "This is STM32 working with FatFs \r\n";/* 写缓冲区 */
  printf("\r\r\n****** 这是一个SD卡 文件系统实验 ******\r\r\n");
     /* 注册一个FatFS设备:SD卡 */
//  if(FATFS_LinkDriver(&SD_Driver, SDPath) == 0)
  {
        printf("f_mount:%s \r\n",SDPath);
    //在SD卡挂载文件系统,文件系统挂载时会对SD卡初始化
    f_res = f_mount(&fs,(TCHAR const*)SDPath,1);
        printf("f_mount:%s \r\n",SDPath);
    printf_fatfs_error(f_res);
    /*----------------------- 格式化测试 ---------------------------*/  
    /* 如果没有文件系统就格式化创建创建文件系统 */
    if(f_res == FR_NO_FILESYSTEM)
    {
      printf("》SD卡还没有文件系统,即将进行格式化...\r\n");
      /* 格式化 */
      f_res=f_mkfs((TCHAR const*)SDPath,0,0);                            
      
      if(f_res == FR_OK)
      {
        printf("》SD卡已成功格式化文件系统。\r\n");
        /* 格式化后,先取消挂载 */
        f_res = f_mount(NULL,(TCHAR const*)SDPath,1);            
        /* 重新挂载    */            
        f_res = f_mount(&fs,(TCHAR const*)SDPath,1);
      }
      else
      {
        printf("《《格式化失败。》》\r\n");
        while(1);
      }
    }
    else if(f_res!=FR_OK)
    {
      printf("!!SD卡挂载文件系统失败。(%d)\r\n",f_res);
      printf_fatfs_error(f_res);
      while(1);
    }
    else
    {
      printf("》文件系统挂载成功,可以进行读写测试\r\n");
    }
    
    /*----------------------- 文件系统测试:写测试 -----------------------------*/
    /* 打开文件,如果文件不存在则创建它 */
    printf("****** 即将进行文件写入测试... ******\r\n");    
    f_res = f_open(&file, "FatFs.txt",FA_CREATE_ALWAYS | FA_WRITE );
    if ( f_res == FR_OK )
    {
      printf("》打开/创建FatFs读写测试文件.txt文件成功,向文件写入数据。\r\n");
      /* 将指定存储区内容写入到文件内 */
      f_res=f_write(&file,WriteBuffer,sizeof(WriteBuffer),&fnum);
      if(f_res==FR_OK)
      {
        printf("》文件写入成功,写入字节数据:%d\r\n",fnum);
        printf("》向文件写入的数据为:\r\n%s\r\n",WriteBuffer);
      }
      else
      {
        printf("!!文件写入失败:(%d)\r\n",f_res);
      }    
      /* 不再读写,关闭文件 */
      f_close(&file);
    }
    else
    {    
      printf("!!打开/创建文件失败。\r\n");
    }
    
    /*------------------- 文件系统测试:读测试 ------------------------------------*/
    printf("****** 即将进行文件读取测试... ******\r\n");
    f_res = f_open(&file, "FatFs.txt", FA_OPEN_EXISTING | FA_READ);      
    if(f_res == FR_OK)
    {
      printf("》打开文件成功。\r\n");
      f_res = f_read(&file, ReadBuffer, sizeof(ReadBuffer), &fnum); 
      if(f_res==FR_OK)
      {
        printf("》文件读取成功,读到字节数据:%d\r\n",fnum);
        printf("》读取得的文件数据为:\r\n%s \r\n", ReadBuffer);    
      }
      else
      {
        printf("!!文件读取失败:(%d)\r\n",f_res);
      }        
    }
    else
    {
      printf("!!打开文件失败。\r\n");
    }
    /* 不再读写,关闭文件 */
    f_close(&file);
    
    /* 不再使用,取消挂载 */
    f_res = f_mount(NULL,(TCHAR const*)SDPath,1);    
  } 
  /* 注销一个FatFS设备:SD卡 */
  FATFS_UnLinkDriver(SDPath);
}

(389条消息) STM32F407移植FATFS文件系统(版本 R0.09b)到SD卡(硬件SPI总线)_哪些单片机支持sdio总线_ba_wang_mao的博客-CSDN博客

https://blog.csdn.net/ba_wang_mao/article/details/109487584

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32CubeMX SDIO SD卡 FATFS 的相关文章

  • 三分钟教你玩转cubeMX+USB+FATFS+FREERTOS

    1 真的只要三分钟吗 xff1f 可能还不要 xff0c cubeMX的强大 xff0c 你想都想不到 话不多说 xff0c 直接开始 2 配置过程 配置时钟源 配置USB 配置FATFS 配置FREERTOS xff0c 与其说是配置 x
  • STM32CubeMX配置生成FreeRTOS项目

    文章目录 1 安装STM32CubeMX软件1 1 下载安装1 2 安装要用到的芯片软件包 2 配置FreeRTOS项目2 1 创建工程2 2 配置SYS2 3 配置RCC2 4 配置系统运行时钟2 5 配置UART1串口作为调试代码2 6
  • 使用STM32CubeMX 配置ADC+DAC(DMA)感受

    STM32CubeMX使用感受 开篇先说一下个人使用STM32CubeMX的感受 xff0c 第一点的感受就是STM32CubeMX加速了开发流程 xff0c ST官方的库写的很好 xff0c 在使用之前 xff0c 开发流程一般是打开如正
  • Stm32CubeMx通过DMA获取多路ADC采集的数据(踩到坑的来看看,我也是一步步踩坑到实现的)

    用stm32CubeMX 可以轻松配置模拟电压数值采集 由于使用直接存储器DMA进行ADC数据采集无需一直占用着CPU线程 所以我们一般在需要多通道采集的情况下才使用DMA 多路ADC采集在工业生产测量方面也很常用到 所以这个内容我们还是得
  • STM32CubeMX驱动4x4键盘模块

    文章目录 1 4x4键盘模块简介2 4x4键盘模块原理2 1 独立按键的原理2 2 矩阵键盘的原理 3 移植源码到工程4 实验 1 4x4键盘模块简介 4x4键盘模块是一种常用的电子组件 xff0c 它由16个按钮或开关以矩阵方式排列而成
  • STM32CubeMX安装

    一 STM32CubeMX下载 官网地址 xff1a STM32CubeMX STM32Cube初始化代码生成器 意法半导体STMicroelectronics 官网下载需要注册账号 网盘链接 xff08 6 8 xff09 xff1a 链
  • STM32CubeMX在FreeRTOS下使用串口进行数据收发(不定长度)

    STM32CubeMX gt FreeRTOS 43 USART接收不定长数据 由于本人做的一个项目功能相对复杂 xff0c 要求使用操作系统 xff0c 且项目工程中有很多需要串口操作的外设 xff0c 所以需要对串口设计不定长的收发功能
  • 【STM32CubeMX】使用STM32F103C8T6输出PWM波形实现呼吸灯

    STM32CubeMX 使用STM32F103C8T6输出PWM波形实现呼吸灯 一 关于PWM二 Cube MX创建工程三 修改代码四 效果展示五 总结六 参考与代码下载 一 关于PWM 1 关于PWM 含义 PWM xff08 Pulse
  • STM32CubeMX串口通讯

    串口的简单介绍 RS 232与TTL 根据通讯使用的电平标准不同 xff0c 串口通讯可分为 TTL 标准及 RS 232 标准 而STM32的串口是TTL电平标准的 如果需要使用到RS 232则需要一个电平转换芯片 单工通信 半双工通信和
  • STM32cubeMx来对单片机串口1进行初始化

    步骤如下 xff1a 打开STM32CubeMX软件并新建一个工程在Pinout amp Configuration选项卡中选择正确的芯片型号 xff0c 然后在Pinout视图中找到串口1相关的引脚 默认情况下 xff0c 串口1使用PA
  • STM32CubeMX串口USART中断发送接收数据

    本文代码使用 HAL 库 文章目录 前言一 中断控制二 USART中断使用1 中断优先级设置 xff1a 2 使能中断3 使能UART的发送 接收中断4 中断收发函数5 中断处理函数6 中断收发回调函数 三 串口中断实验串口中断发送数据点亮
  • STM32CubeIDE使用笔记(02):STM32CubeMX配置与代码生成

    文章目录 目的 用户界面 引脚输出和配置 时钟配置 项目管理 工具 代码生成 更换芯片 总结 目的 STM32CubeIDE中整合了STM32CubeMX用来配置芯片资源生成初始化代码 本篇将介绍STM32CubeMX使用方法 用户界面 界
  • Keil编辑和STM32cubemx配置STM32控制步进电机

    使用Keil ARM V5 IDE编程和STM32CUBEMX代码配置实现STM32F103和步进电机驱动器模块A4988控制步进电机 Keil和Stm32cubemx 安装 安装Keil IDE非常简单 下载包含Keil IDE的MDK
  • SDIO接口(2)——SD卡寄存器

    1 SD卡寄存器 SDIO接口中定义了8个寄存器 OCR CID CSD RCA DSR SCR SSR 仅sdio卡支持 CSR 仅sdio卡支持 这些寄存器只能通过对应的命令访问 其中OCR CID CSD SCR寄存器保存了卡 内容的
  • 【SDIO】SD2.0协议分析总结(一)-- SD卡基本概率介绍

    相关文章 SDIO SDIO SD卡 FatFs文件系统相关文章索引 1 前言 由于目前使用的硬件平台STM32只支持SD2 0 所以后面的介绍主要是参考 Part1 Physical Layer Simplified Specificat
  • STM32CubeMX学习一 之GPIO配置

    文章目录 前言 一 本地环境 二 开始 1 工程创建 2 GPIO配置 2 时钟配置 3 代码生成 3 编译工程 前言 记录一下STM32CubeMX的学习笔记 同时分享给初学的小白 希望一起进步 一 本地环境 编译环境 KEIL 代码生成
  • STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式

    机器人开发过程中 对于直流电机来说 编码器至关重要 它不仅可以使我们对电极进行精确的速度闭环 位置闭环 还可以通过时间积分 根据运动学关系 获得速度 位置等信息 STM32的定时器有编码器模式 大大的方便我们的开发 使用STM32cubeM
  • STM32CubeMX时钟源的选择

    使用STM32CubeMX进行时钟源RCC配置的时候 可以选择使用内部时钟或外部时钟 当程序对时钟精度要求较高时 通常使用外部时钟 下拉选框如下图 Disable 禁用外部时钟 BYPASS Clock Resource 外部有源晶振 旁路
  • STM32CubeMX学习六 之ADC配置

    文章目录 前言 一 本地环境 二 开始 1 定时器配置 2 引脚配置 在这里插入图片描述 https img blog csdnimg cn e5b6f155a1b8468cb15046a0a9d031cd png 3 内部时钟配置 4 A
  • STM3利用FATFS向SD卡文件追加数据的三种方法

    1 f sync SDFile 该方法简单粗暴 适合一直连续向sd卡中写入数据 while之前就f open 循坏内重复 向缓存填充数据 gt 写入数据 gt 刷新写入 整个过程并没有f colse retSD f open SDFile

随机推荐

  • 力扣刷题

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 H指数 题目介绍一 实现思路方法一 xff1a 排序分析复杂度分析 方法二 xff1a 计数分析算法 复杂度分析 二 使用算法1 pyth
  • [markdown语法]公式篇--整理总结了常用的公式语法全

    一 公式部分 前言 行内公式 xff1a 公式 行间公式 xff1a 公式 1 1 常用符号标注 1 1 1 上下标 数学符号实际效果语法向量 a vec a
  • ubuntu mate18.04+树莓派4B+ROS安装详细教程

    前记 最近项目需要 xff0c 需要给树莓派4B 安装Ubuntu mate xff0c 本来是一件很简单的事情 xff0c 因为Ubuntu mate官网已经开始支持树莓派4B了 xff0c 但是实际操作后 xff0c 才发现烧录官方的桌
  • QGC参数表

    QGC parameters 1 Battery Callbration ParametersDetail含义BAT A PER VBattery current per volt A V 每伏电池电流BAT CAPACITYBattery
  • GAZEBO构建室外环境地图之创建高度图

    GAZEBO构建室外环境地图之创建高度图 前言下载真实地形数据处理下载好的高度图 前言 最近在搭建gazebo的室外仿真环境用于室外机器人的室外建图算法研究 xff0c 发现网上说这方面的文章非常少 xff0c 走dem来创建地形的路 xf
  • [无人机学习]无人机学习概论

    一 无人机简介 1 1 无人机与航空模型分类 机型优点缺点固定翼飞机续航时间长 xff0c 速度快需要跑道 xff0c 不能垂直起降单旋翼飞机可以垂直起降 xff0c 空中悬停续航时间段 xff0c 机械结构复杂 xff0c 操控难度大多旋
  • YOLO使用

    第一步 下载预训练模型 span class token builtin class name cd span darknet span class token function wget span https pjreddie com m
  • CMakeLists.txt文件编写

    重点 1 cmake版本要求 cmake minimum required VERSION 3 15 2 工程名 project algorithm 3 支持C 43 43 11标准 set CMAKE CXX STANDARD 11 4
  • [Eigen]

    Eigen 库学习笔记 参考原文为 xff1a https www cnblogs com rainbow70626 p 8819119 html 为了方便查看 xff0c 以防找不到 xff0c 所以写了这篇博客 目录 Eigen 矩阵定
  • 【1】嵌入式学习

    嵌入式学习 GitHub xff1a https github com Screw888 LearningNote git
  • ubuntu swap分区扩容

    span class token comment 将现有的swap内存移动到主内存 span span class token function sudo span swapoff a span class token comment 创建
  • 强推!!!解决UnicodeEncodeError: ‘gbk‘ codec can‘t encode character.....: illegal multibyte

    解决pycharm编码报错问题 困扰了好几天的编码问题终于得到了解决 xff0c 其实问题很简单 xff0c 当你用pycharm打开一个txt json csv文件时 xff0c 像下面这种 xff1a 明明已经指定了编码方式为utf 8
  • EC20模块AT指令MQTT连接阿里云IoT,HTTP接口来实现一型一密动态注册的流程。

    EC20模块AT指令MQTT连接阿里云过程 推荐 xff1a 使用移远BC28 模组对接阿里云 MQTT 嵌入式 lx121451的博客 CSDN博客 https blog csdn net lx121451 article details
  • FastStone Capture 9.3 汉化绿色便携版 - 极品屏幕截图工具

    FastStone Capture http blog sina com cn flyonzone 是一款极好用的图像浏览 编辑和截屏工具 xff0c 支持 BMP JPG JPEG GIF PNG TIFF WMF ICO 和 TGA 在
  • Keil5打开工程提示not found device解决方法

    keil5打开别人工程时 xff0c 提示 not found device xff0c 无法在程序内定位函数 当打开别人的工程时 xff0c 弹窗提示not found device xff0c 并且无法定位函数位置 xff0c 打开Op
  • Record: My CMakeLists

    1 设置需要的最小版本的cmake cmake minimum required VERSION 3 10 2 定义生成的项目名 project perceive tracking 3 1 设置cmake参数 set CMAKE CXX F
  • W5500网口模块例程及网络测试工具

    W5500网口模块例程及说明 https blog csdn net qq 21903491 article details 79645544 utm medium 61 distribute pc relevant none task b
  • 推荐使用的热电阻Pt100测温电路

    铂电阻温度传感器是利用其电阻和温度成一定函数关系而制成的温度传感器 由于其测量准确度高 测量范围大 复现性和稳定性好等 被广泛用于中温 200 xff5e 650 范围的温度测量中 PT100是一种广泛应用的测温元件 xff0c 在 50
  • stm32内存架构及堆栈管理

    https blog csdn net su fei ma su article details 104229453 utm medium 61 distribute pc relevant none task blog 2 default
  • STM32CubeMX SDIO SD卡 FATFS

    390条消息 STM32CubeMX系列09 SDIO xff08 SD卡读写 SD卡移植FATFS文件系统 xff09 stm32cubemx sdio 32Haozi的博客 CSDN博客 https blog csdn net weix