绘制STM32最小系统电路原理图、STM32F103读取SD卡的数据

文章目录

  • 绘制STM32最小系统电路原理图、STM32F103读取SD卡的数据
  • 1 AltiumDesigner 软件配置
  • 2 AltiumDesigner 绘制STM32最小系统原理图
    • 2.1 建立工程文件
    • 2.2 基本绘制方法
    • 2.3 绘制其余模块
  • 3 AltiumDesigner 绘制STM32+SD卡原理图
  • 4 SD卡概述
    • 4.1 SD 卡简介
    • 4.2 SD 卡模块结构
    • 4.3 SD 卡的寄存器
    • 4.4 SD 卡操作
  • 5 SD卡数据读取实作
    • 5.1 源代码
    • 5.2 硬件连线
    • 5.3 结果及分析
  • 6 总结
  • 7 参考文献

1 AltiumDesigner 软件配置

  1. 安装连接:百度网盘
    提取码:fnr9
  2. 解压——安装包——双击打开AltiumDesigner18Setup.exe——

利用AD软件,完成以下任务
用Altium Designer绘制一个stm32最小系统的电路原理图,并在此基础上完成STM32+SD卡 的系统原理图设计。

2 AltiumDesigner 绘制STM32最小系统原理图

2.1 建立工程文件

  1. File——New——Project——PCB Project
    (记得将工程保存在文件夹下。)
  2. File——New——Project——PCB Project——Schematic
  3. 导入元件库:右上角“库”——Libraries——可用库——右下角“添加库”——选指定的元件库——打开。

2.2 基本绘制方法

  1. 选择芯片,将其拖入界面(STM32C8T6)。要放置其余原件也是类似方式。
  2. 延长引脚线,设置标签。


  3. 点击原件,按空格键可以旋转 90°。

2.3 绘制其余模块

系统供电稳压
调试JTAG、SW模块

复位模块

I/O接口

扩展供电接口

STM32USB

数据存储E2

OLED

STM32

3 AltiumDesigner 绘制STM32+SD卡原理图

如图示STM32F103CT6 和 SD 卡的原理图。

4 SD卡概述

4.1 SD 卡简介

SD存储卡是一种基于半导体快闪记忆器的新一代记忆设备,由于它体积小、数据传输速度快、可热插拔等优良的特性,被广泛地于便携式装置上使用,例如数码相机、平板电脑和多媒体播放器等。

4.2 SD 卡模块结构

各个部分的功能:

一共有6个接口,分别是GND,VCC,CS,SCK,MOSI,MISO。VCC是供电,GND是接地。其他4根是SPI通讯时用的,CS是片选,SCK是时钟信号,MOSI为主输出从输入,MISO为主输入从输出。

4.3 SD 卡的寄存器

名称 宽度 描述
CID 128 卡标识寄存器
RCA 16 相对卡地址寄存器:本地系统中卡的地址,动态变化,在卡的初始化时确定。(SPI模式中没有)
CSD 128 卡描述数据寄存器:卡操作条件相关的信息数据
SCR 64 SD配置寄存器:SD卡特定信息数据
OCR 32 操作条件寄存器

4.4 SD 卡操作

  • SD卡初始化过程(知道 SD 卡的类型V1、 V2、 V2HC 或者 MMC):

    初始化与 SD 卡连接的硬件条件(MCU 的 SPI 配置, IO 口配置);
    上电延时(>74 个 CLK)(因为 SD 卡内部有个供电电压上升时间,大概为 64 个 CLK,剩下的 10 个 CLK 用于 SD 卡同步,之后才能开始 CMD0 的操作);
    复位卡(CMD0),进入 IDLE 状态;
    发送 CMD8,检查是否支持 2.0 协议;
    根据不同协议检查 SD 卡(命令包括: CMD55、 CMD41、 CMD58 和 CMD1 等);
    取消片选,发多 8 个 CLK(提供 SD 卡额外的时钟,完成某些操作),结束初始化;
    
  • SD卡读取数据(CMD17):

    发送 CMD17;
    接收卡响应 R1;
    接收数据起始令牌 0XFE;
    接收数据;
    接收 2 个字节的 CRC,如果不使用 CRC,这两个字节在读取后可以丢掉。
    禁止片选之后,发多 8 个 CLK;
    
  • SD卡写数据(CMD24):

     发送 CMD24;接收卡响应 R1;发送写数据起始令牌 0XFE;发送数据;发送 2 字节的伪 CRC;禁止片选之后,发多 8 个 CLK;
    

5 SD卡数据读取实作

用STM32F103完成对SD卡的数据读取(fat文件模式)。

5.1 源代码

工程文件连接:
百度网盘
提取码:e63q

  1. main函数中修改文件名以及输出内容

    int main(void)
    {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_SPI1_Init();MX_FATFS_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */HAL_UART_Receive_IT(&huart1,&aRxBuffer1,1);  //enable uart   printf(" mian \r\n");Get_SDCard_Capacity();   //得到使用内存并选择格式化/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){WritetoSD(WriteBuffer,sizeof(WriteBuffer));      HAL_Delay(500);WriteBuffer[0] = WriteBuffer[0] +0;WriteBuffer[1] = WriteBuffer[1] +1;write_cnt ++;while(write_cnt > 10){   printf(" while \r\n");HAL_Delay(500);}        /* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
    }
    
  2. 其余函数:

    // SD卡初始化函数  void Get_SDCard_Capacity(void)  // SD卡写入函数void WritetoSD(BYTE write_buff[],uint8_t bufSize)
    
    //SD 卡初始化函数
    void Get_SDCard_Capacity(void)
    {FRESULT result;FATFS FS;FATFS *fs;DWORD fre_clust,AvailableSize,UsedSize;  uint16_t TotalSpace;uint8_t res;res = SD_init();       //SD卡初始化if(res == 1){printf("SD卡初始化失败! \r\n");      }else{printf("SD卡初始化成功! \r\n");        }/* 挂载 */res=f_mount(&FS,"0:",1);        //挂载if (res != FR_OK){printf("FileSystem Mounted Failed (%d)\r\n", result);}res = f_getfree("0:", &fre_clust, &fs);  /* 根目录 */if ( res == FR_OK ) {TotalSpace=(uint16_t)(((fs->n_fatent - 2) * fs->csize ) / 2 /1024);AvailableSize=(uint16_t)((fre_clust * fs->csize) / 2 /1024);UsedSize=TotalSpace-AvailableSize;              /* Print free space in unit of MB (assuming 512 bytes/sector) */printf("\r\n%d MB total drive space.\r\n""%d MB available.\r\n""%d MB  used.\r\n",TotalSpace, AvailableSize,UsedSize);}else {printf("Get SDCard Capacity Failed (%d)\r\n", result);}
    }
    
    //SD卡写入函数
    void WritetoSD(BYTE write_buff[],uint8_t bufSize)
    {FATFS fs;FIL file;uint8_t res=0;UINT Bw;  res = SD_init();       //SD卡初始化if(res == 1){printf("SD卡初始化失败! \r\n");      }else{printf("SD卡初始化成功! \r\n");        }res=f_mount(&fs,"0:",1);        //挂载//  if(test_sd == 0)      //用于测试格式化if(res == FR_NO_FILESYSTEM)      //没有文件系统,格式化{//      test_sd =1;                //用于测试格式化printf("没有文件系统! \r\n");      res = f_mkfs("", 0, 0);      //格式化sd卡if(res == FR_OK){printf("格式化成功! \r\n");     res = f_mount(NULL,"0:",1);      //格式化后先取消挂载res = f_mount(&fs,"0:",1);            //重新挂载  if(res == FR_OK){printf("SD卡已经成功挂载,可以进进行文件写入测试!\r\n");}  }else{printf("格式化失败! \r\n");      }}else if(res == FR_OK){printf("挂载成功! \r\n");       }else{printf("挂载失败! \r\n");}  res = f_open(&file,SD_FileName,FA_OPEN_ALWAYS |FA_WRITE);if((res & FR_DENIED) == FR_DENIED){printf("卡存储已满,写入失败!\r\n");      }f_lseek(&file, f_size(&file));//确保写词写入不会覆盖之前的数据if(res == FR_OK){printf("打开成功/创建文件成功! \r\n");        res = f_write(&file,write_buff,bufSize,&Bw);       //写数据到SD卡if(res == FR_OK){printf("文件写入成功! \r\n");            }else{printf("文件写入失败! \r\n");}     }else{printf("打开文件失败!\r\n");} f_close(&file);                     //关闭文件      f_mount(NULL,"0:",1);      //取消挂载}
    
  3. 编译构建

    没有错误。

5.2 硬件连线

USB和STM32芯片的连线和之前一样,这里主要是SD卡和STM32芯片的连线。【这里要选择 5V 要是电压不够大,后面的内容无法进行】

SD卡 STM32F103C8T6
SDCS PA4
SCK PA5
MOSI PA7
MISO PA6
VCC 5V
GND GND

连线如下图:

5.3 结果及分析

烧录代码, 打开串口调试助手

发现每按一次复位键,串口只发送“main”,说明SD卡并没有起到作用。

将 SD 卡插到电脑上,可以看到弹出格式化 SD 卡的窗口:文件系统选择FAT(按下图设置)。

格式化成功。

再次烧录并打开串口,注意考虑是否线路连接正常(接触不良等问题。)初始化和发送数据的过程要等一会儿才能完成,大约几分钟。

初始化成功,显示了“总内存和可用内存,挂载成功,文件写入成功”等信息。

再等待一会儿,就会发送“ while ”。表示成功。
把SD卡插到电脑上,可以看到里面有一个 “HELLO.TXT ” 文件。

打开该文件,发现前面几个字符出现了乱码。

这是代码中的问题,修改代码:将 main 函数中的如下函数进行修改(数字部分)。


再次编译、烧录、运行,最后打开 .TXT 文件。

可以看到问题解决了。(但是第二个字母发生了变化,按字母的顺序变化的,这里是代码中设置的“+1”,相当于ASCII码变化了,对应的内容也发生了变化。)

6 总结

  • 原理图部分:原理图主要是连线仔细与否的问题。学习一个和专业相关的新软件,并明白要运用到的芯片的原理结构,能够帮助我们更直观地理解硬件与软件的交接。
  • SD卡读取部分:主要是供电电压不足的问题。在前人的基础上完成一件事情是容易的,但也没有任何成就感。我想我们更需要的是去做一个先行者。

7 参考文献

Altium Designer2018下载安装及基本使用
STM32使用SPI方式读写SD 卡
STM32——SD卡和FATFS文件系统

绘制STM32最小系统电路原理图、STM32F103读取SD卡的数据相关推荐

  1. AD软件绘制stm32最小系统电路原理图与PCB图

    文章目录 AD软件绘制stm32最小系统电路原理图与PCB图 一.在Altium Designer下建立工程 1. 新建工程 2. 新建图纸以及相关的库 二.绘制最小原件库 三.绘制原理图 1. 首先 ...

  2. STM32F103读取SD卡的数据(fat文件模式)

    实验目的 掌握SD卡协议原理,用STM32F103完成对SD卡的数据读取(fat文件模式). 实验原理 SD卡寄存器 SD卡总共有8个寄存器,用于设定或表示SD卡信息. 这些寄存器只能通过对应的命令访 ...

  3. 用Altium Designer绘制stm32最小系统的电路原理图并完成STM32+SD卡 的系统原理图设计

    目录 一.安装Altium Designe18 二.用AD18绘制stm32最小系统的电路原理图 1.新建工程 2.添加原理图 3.下载并添加元件库 4.绘制芯片模块原理图 4.1 常见的工具栏介绍 ...

  4. 【小陈睡不醒SD卡数据读取以及Altium Designer绘制stm32最小系统原理图及stm32+SD卡绘制】

    一SD卡介绍 1.SD卡 SD存储卡(Secure Digital Memory Card)是一种基于半导体快闪存储器的新一代高速存储设备.SD存储卡的技术是从MMC卡(MultiMedia Card ...

  5. 使用Altium Designer 18绘制stm32最小系统的电路原理图

    文章目录 前期准备 一.查找stm32最小系统原理图 二.创建stm32最小系统元件库 1.建立一个元件库工程 2.系统自带的PCB封装的生成 PCB的封装 与PCB封装对应的SCH封装 3.自定义的 ...

  6. Altium Designer绘制stm32最小系统PCB

    Altium Designer绘制stm32最小系统PCB 一.检查原理图封装,并导入到PCB工程 二.布局 三.布线 四.覆铜 五.丝印整理 六.电气规则检查 七.添加logo 八.生成BOM和网络 ...

  7. 绘制stm32最小系统PCB图

    绘制stm32最小系统PCB图 一.根据最小原理图进行封装 检验封装 二.绘制PCB 1)添加PCB文件 2)布线 1.手动布线 2.自动布线 3)覆铜 三.LOGO 四.生成gerber文件 五.生 ...

  8. 使用AD绘制stm32最小系统版

    文章目录 一.AD软件获取与安装 二.相关配置 三.绘制stm32最小系统电路图 四.总结 一.AD软件获取与安装 1.可以在网上找,当然时间不怕慢的话也有网盘链接 AD软件链接: 链接:https: ...

  9. STM32最小系统|CSDN创作打卡

    文章目录 STM32最小系统的构成 晶振电路 复位电路 电源电路 下载电路 STM32最小系统的构成 晶振电路 晶振在起振的一瞬间会产生电感,为了消除这些电感干扰,会在晶振的两端接入无极性电容(10- ...

最新文章

  1. Androidstudio高效管理第三方API的KEY及Gradle版本管理
  2. 面向对象第七章,内存的管理,面向对象三大特征封装、继承、多态
  3. Android编译笔记三
  4. 高并发下秒杀商品,必须知道的9个细节
  5. Unity Android记录
  6. 【最新消息】阿里宣布无限期延迟复工,字节跳动、腾讯......等企业也再次延迟!...
  7. 生产者消费者实现用c语言用物品1,物品2等来代替,用C语言编写程序:生产者和消费者之间实现同步与互斥问题...
  8. 【C++ 程序】 解线性方程组(Cramer法则)
  9. 第一期:GIS基本原理与arcgis软件
  10. PHP内容管理系统详细制作步骤
  11. 扒一扒那些叫欧拉的定理们(一)——基本介绍和简单多面体欧拉定理
  12. Unity--Configurable Joint——实战带你了解可配置关节
  13. 分享三大外汇日内交易策略
  14. 起薪8000年终40万 游戏行业人才缺口达60万
  15. ev1百家云视频解密工具、ev1视频提取工具,支持Windows、MacOS、Linux
  16. 华为设置android系统提醒功能,华为手机短信不提醒怎么办?华为手机短信提醒设置方法...
  17. 在线考试系统_管理员端
  18. 同花顺_代码解析_技术指标_P、Q
  19. maven 3.8.1 安装及配置文件setting.xml
  20. How OS technology is being deployed in science?

热门文章

  1. qq空间、微信好友、邮件、短信分享
  2. 2013年8月28日、PS初步入门|and|Maven了解
  3. 人大金仓受邀参加《航天七〇六“我与航天电脑有约”全国合作伙伴大会》
  4. uniApp正则表达式校验手机、邮箱
  5. CCF 模拟题 有趣的数 (数位DP)
  6. 海上日出(Sunrise)
  7. 计算机编码英语,字母编码
  8. Adobe Photoshop 2022 最牛图像编辑软件PS2022
  9. 桌面ie图标不见了【解决办法】
  10. pandas--数据预处理