绘制STM32最小系统电路原理图、STM32F103读取SD卡的数据
绘制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 软件配置
- 安装连接:百度网盘
提取码:fnr9 - 解压——安装包——双击打开AltiumDesigner18Setup.exe——
利用AD软件,完成以下任务
用Altium Designer绘制一个stm32最小系统的电路原理图,并在此基础上完成STM32+SD卡 的系统原理图设计。
2 AltiumDesigner 绘制STM32最小系统原理图
2.1 建立工程文件
- File——New——Project——PCB Project
(记得将工程保存在文件夹下。)
- File——New——Project——PCB Project——Schematic
- 导入元件库:右上角“库”——Libraries——可用库——右下角“添加库”——选指定的元件库——打开。
2.2 基本绘制方法
- 选择芯片,将其拖入界面(STM32C8T6)。要放置其余原件也是类似方式。
- 延长引脚线,设置标签。
- 点击原件,按空格键可以旋转 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
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 */ }
其余函数:
// 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); //取消挂载}
编译构建
没有错误。
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卡的数据相关推荐
- AD软件绘制stm32最小系统电路原理图与PCB图
文章目录 AD软件绘制stm32最小系统电路原理图与PCB图 一.在Altium Designer下建立工程 1. 新建工程 2. 新建图纸以及相关的库 二.绘制最小原件库 三.绘制原理图 1. 首先 ...
- STM32F103读取SD卡的数据(fat文件模式)
实验目的 掌握SD卡协议原理,用STM32F103完成对SD卡的数据读取(fat文件模式). 实验原理 SD卡寄存器 SD卡总共有8个寄存器,用于设定或表示SD卡信息. 这些寄存器只能通过对应的命令访 ...
- 用Altium Designer绘制stm32最小系统的电路原理图并完成STM32+SD卡 的系统原理图设计
目录 一.安装Altium Designe18 二.用AD18绘制stm32最小系统的电路原理图 1.新建工程 2.添加原理图 3.下载并添加元件库 4.绘制芯片模块原理图 4.1 常见的工具栏介绍 ...
- 【小陈睡不醒SD卡数据读取以及Altium Designer绘制stm32最小系统原理图及stm32+SD卡绘制】
一SD卡介绍 1.SD卡 SD存储卡(Secure Digital Memory Card)是一种基于半导体快闪存储器的新一代高速存储设备.SD存储卡的技术是从MMC卡(MultiMedia Card ...
- 使用Altium Designer 18绘制stm32最小系统的电路原理图
文章目录 前期准备 一.查找stm32最小系统原理图 二.创建stm32最小系统元件库 1.建立一个元件库工程 2.系统自带的PCB封装的生成 PCB的封装 与PCB封装对应的SCH封装 3.自定义的 ...
- Altium Designer绘制stm32最小系统PCB
Altium Designer绘制stm32最小系统PCB 一.检查原理图封装,并导入到PCB工程 二.布局 三.布线 四.覆铜 五.丝印整理 六.电气规则检查 七.添加logo 八.生成BOM和网络 ...
- 绘制stm32最小系统PCB图
绘制stm32最小系统PCB图 一.根据最小原理图进行封装 检验封装 二.绘制PCB 1)添加PCB文件 2)布线 1.手动布线 2.自动布线 3)覆铜 三.LOGO 四.生成gerber文件 五.生 ...
- 使用AD绘制stm32最小系统版
文章目录 一.AD软件获取与安装 二.相关配置 三.绘制stm32最小系统电路图 四.总结 一.AD软件获取与安装 1.可以在网上找,当然时间不怕慢的话也有网盘链接 AD软件链接: 链接:https: ...
- STM32最小系统|CSDN创作打卡
文章目录 STM32最小系统的构成 晶振电路 复位电路 电源电路 下载电路 STM32最小系统的构成 晶振电路 晶振在起振的一瞬间会产生电感,为了消除这些电感干扰,会在晶振的两端接入无极性电容(10- ...
最新文章
- Androidstudio高效管理第三方API的KEY及Gradle版本管理
- 面向对象第七章,内存的管理,面向对象三大特征封装、继承、多态
- Android编译笔记三
- 高并发下秒杀商品,必须知道的9个细节
- Unity Android记录
- 【最新消息】阿里宣布无限期延迟复工,字节跳动、腾讯......等企业也再次延迟!...
- 生产者消费者实现用c语言用物品1,物品2等来代替,用C语言编写程序:生产者和消费者之间实现同步与互斥问题...
- 【C++ 程序】 解线性方程组(Cramer法则)
- 第一期:GIS基本原理与arcgis软件
- PHP内容管理系统详细制作步骤
- 扒一扒那些叫欧拉的定理们(一)——基本介绍和简单多面体欧拉定理
- Unity--Configurable Joint——实战带你了解可配置关节
- 分享三大外汇日内交易策略
- 起薪8000年终40万 游戏行业人才缺口达60万
- ev1百家云视频解密工具、ev1视频提取工具,支持Windows、MacOS、Linux
- 华为设置android系统提醒功能,华为手机短信不提醒怎么办?华为手机短信提醒设置方法...
- 在线考试系统_管理员端
- 同花顺_代码解析_技术指标_P、Q
- maven 3.8.1 安装及配置文件setting.xml
- How OS technology is being deployed in science?