-
2021-12-20 17:01:12
一. 绘制STM32原理图
上一篇文章已经写过: Altium Designer绘制stm32最小系统原理图(详细完整版)_diyu-CSDN博客
原理图如下:
二. 绘制SD卡原理图
此次绘制的SD卡为 micro SD卡模块 SPI接口
Mirco SD 卡模块的接口如下图所示:
控制接口:共 6 个引脚(GND、VCC、MISO、MOSI、SCK、CS),GND 为地,VCC 为供 电电源,MISO、MOSI、SCK 为 SPI 总线,CS 为片选信号脚;
3.3V 稳压电路:LDO 稳压输出的 3.3V 为电平转换芯片、Micro SD 卡供电;
电平转换电路:往 Micro SD 卡方向的信号转换成 3.3V,MicroSD 卡往控制接口方向的 MISO 信号也转换成了 3.3V,一般 AVR 单片机系统都能读取该信号;
Micro SD 卡座:是自弹式卡座,方便卡的插拔。
定位孔: 4 个 M2 螺丝定位孔,孔径为 2.2mm,使模块便于安装定位,实现模块间组合
具体怎么绘制已经在绘制stm32原理图中已经说过了。
所以,此次就不再详细说明了。
排针:
元件库: Miscellaneous Connectors.IntLib 搜索: MHDR1X9 以及 MHDR1X6
电阻:
元件库: Miscellaneous Devices LC.IntLib 搜索: 0805 10k
电容:
元件库: Miscellaneous Devices LC.IntLib 搜索: 0805 10uf 以及 100nf
AMS1117:
元件库:stm32f103c8t6 最小系统.SchLib (这个不用搜索,因为这个元件库就几个元件)
stm32f103c8t6与此SD卡的接线
stm32f103c8t6 SD卡 PA4 SDCS PA5 SCK PA7 MOSI PA6 MISO VCC VCC GND GND 参考链接:
更多相关内容 -
SD卡原理图/封装
2019-09-13 12:37:55封装版本allegro15.7 卡为图片所示那种,兼容mmc卡。 原创,下载请帮顶,呵呵。 图片 , 下载 SD.rar -
Micro SD 存储卡模块(原理图、stm32程序、SD卡读写规范)-电路方案
2021-04-21 22:07:34另一些被SDA采立的记忆卡包括miniSD和SD卡。 Micro SD 存储卡模块特性: 支持Micro SD Card 支持SDIO及SPI接口 接口规格为PIN间距2.54mm排针 Micro SD 存储卡实物展示: 相关参考资料: Micro SD 卡(TF卡) spi 模式... -
史上最全SD卡开发资料包括程序和原理图SPI和SD模式及文档资料.zip
2021-05-26 17:01:06史上最全SD卡开发资料包括程序和原理图SPI和SD模式及文档资料: 51与SD卡的接口电路程序 论坛论文.doc 51单片机读写SD卡(命令解释).doc 51单片机读写SD卡程序.pdf 51单片机读写SD卡程序实例完整版(学习).doc C8051F... -
SD卡电路原理图
2012-06-19 20:04:29SD卡电路原理图 -
使用Altium Designer18绘制一个stm32最小系统+SD卡原理图
2021-12-21 20:02:05Designer绘制一个stm32最小系统的电路原理图,并在此基础上完成STM32+SD卡 的系统原理图设计。 二、Altium Designer18的安装 三、绘制 stm32 最小系统的电路原理图 1)绘制前准备 Ⅰ、新建工程 点击文件——>一、实验内容
掌握电路原理图绘制。安装Altium Designer 18,学习使用Altium
Designer绘制一个stm32最小系统的电路原理图,并在此基础上完成STM32+SD卡 的系统原理图设计。二、Altium Designer18的安装
三、绘制 stm32 最小系统的电路原理图
1)绘制前准备
Ⅰ、新建工程
点击文件——>新的…(N)———>项目(J)———>PCB工程
;
右击“PCB Project…
”选择“添加新的…到工程
”,然后再选择“Schematic
”即可创建一个原理图;
加载出来后如下图所示:
Ⅱ、添加元件库
这里使用的是别人已经添加好的元件库,我们只需要将其压缩包下载下来解压缩即可;链接
如下:接下来在Altium Designer中添加刚刚下载的元件库。具体途径如下:
以上完成后,点击“close
”即可;
现在就可以看到已经有我们添加好的元件库了;
2)开始绘制
这里我是新建了一个文件来绘制我们的原理图,因为不知道为什么之前的老是添加不了器件;下面开始绘制:
Ⅰ、放置器件
点击“库”,选择“”,左击放到原理图上的合适位置,然后右击释放;如下:
Ⅱ、延长管脚
点击上方“Wire”,分别点击想要连线的起点和终点,之后再点击右键释放;依次如下,将所有管脚延长;(注
:可以复制已经连接好的线,然后粘贴的时候按空格旋转方向放置,这样比一根一根延长会快很多)
Ⅲ、设置网络编号
接下来为每个管脚设置编号,首先右击选择网络标签
,此时可以不着急放置,点击“Tab
”键,修改命名,再回车
放置合适位置即可;(也可以先将编号放置到每一个管脚上,之后一一双击修改);
添加完成后如下图所示:
Ⅳ、文字备注
这里我们在芯片旁边备注“stm32最小系统”;
选择“文本字符串
”后先不放置,点击“Tab
”键,对内容进行修改,之后点击回车即可;
Ⅴ、放置端子将芯片上的3.3V和GND与对应管脚连接;
右击以下图标,分别选择“放置GND端口”和“放置VCC电源端口 ”即可添加,如下所示:
Ⅵ、其他器件
选择另外一个器件库Miscellaneous Devices LC.IntLib
,在里面选择所需要的元器件 ,如10kΩ的电阻,只需要在搜索框下输入0805 10k
就可以找到我们需要的电阻,只需要像之前添加stm32芯片一样,加到原理图上就行;
添加其他器件也是如此;3)最终原理图
Ⅰ、stm32芯片
Ⅱ、发光二极管
依然在元件库Miscellaneous Devices LC.IntLib
下,搜索0805
选择对应元件,最终结果图如下:
Ⅲ、晶振电路
晶振:在元件库Miscellaneous Devices.IntLib
中搜索XTAL
;
电容:在元件库Miscellaneous Devices LC.IntLib
中搜索0805 22pf
;
绘制完成后如下:
Ⅳ、stm32 去耦电路
电容:在元件库Miscellaneous Devices LC.IntLib
中搜索0805 100nf
;
最终如下:
Ⅴ、复位电路
按键:在元件库Miscellaneous Devices.IntLib
中搜索SW-PB
;
电容:在元件库Miscellaneous Devices LC.IntLib
中搜索0805 1uf
;
最终如下:
Ⅵ、解压电路
AMS1117芯片:在stm32f103c8t6 最小系统.SchLib
元件库中;
电容:在Miscellaneous Devices LC.IntLib
元件库中搜索0805 10uf
和0805 100uf
;
具体如下:
Ⅶ、下载方式选择及程序烧录接口
在元件库Miscellaneous Connectors.IntLib
中搜索MHDR
;
具体如下:
Ⅷ、输入、输出电源在
Miscellaneous Connectors.IntLib
元件库中搜索USB micro
,具体如下:
Ⅸ、排针
在元件库Miscellaneous Connectors.IntLib
中搜索MHDR1X16
;
具体如下:
以上所有器件连接完毕以后,就可以根据自己的习惯排版保存啦!!
下面是整个原理图预览
:
四、SD卡原理图
SD卡为
micro SD卡模块 SPI接口
;
原理图中用到的元件如下:AMS1117: 在元件库
stm32f103c8t6 最小系统.SchLib
中搜索AMS1117
;
MHDR1X6:在元件库Miscellaneous Connectors.IntLib
中搜索MHDR1X6
;
MHDR1X9:在元件库Miscellaneous Connectors.IntLib
中搜索MHDR1X9
;
电容:在Miscellaneous Devices LC.IntLib
元件库中搜索0805 10uf
和0805 100uf
;
电阻:在器件库Miscellaneous Devices LC.IntLib
中搜索0805 10k
;最终
原理图如下:
micro SD卡模块与stm32c8t6芯片的连接方式如下:
stm32f103c8t6 SD卡 PA4 CS PA5 SCK PA7 MOSI PA6 MISO VCC VCC GND GND 五、总结
通过此次实验对于AD软件的使用,我对于学习绘制原理图有了更多的了解,这对于今后的学习也有很大的帮助。
六、参考内容
-
SD卡读卡器原理图
2012-12-10 14:26:26SD卡读卡器原理图---AU6331方案单合 -
外置SD卡接口板电路原理图分享-电路方案
2021-04-22 14:36:39本设计是外置存储SD卡接口板原理图。可以使用SD或SDHC,存储空间可高达32GB。通过Arduino标准SD接口,还可以做FAT16和FAT32卡的格式化。接口板上使用了一个3.3V稳压器,减少MCU板的电源负担,接口板上设置了LED灯,... -
GD32450i-EVAL开发板原理图
2020-10-19 17:35:51GD32450i芯片官方开发板原理图,包含、电源、SPI,串口,全速和高速USB、I2C、CAN、以太网、AD等接口参考原理图 -
SD卡原理图及器件datasheet
2009-02-17 00:58:45包括sk6621主控芯片的datasheet及flash的datasheet还有整个卡的datasheet对diy爱好者有很好的帮助。 -
Altium原理图和pcb,包含主控STM32,网卡,sd卡,音频wm8978,cs4344,pam8302,收音模块,时钟sd2405
2018-10-17 17:24:06AD原理图和pcb,包含主控STM32F103VCT6,网卡enc28j60,sd卡,音频wm8978,cs4344,pam8302,收音模块,时钟sd2405,存储m25p64,24c02,电源1482,打过样,建议参考应用,原理不一定合用 -
SD卡工作原理
2021-10-25 10:12:22SD卡工作原理1. 前言2. SD卡简介3. SD卡的工作原理3.1 SD卡内部结构3.2 SD卡硬件接口3.3 工作原理 1. 前言 2021.10 本月快要结束了,似乎写作任务并未开始。回想这个月,好像干了什么,又好像什么都没干。 这个月看...1. 前言
2021.10.25
本月快要结束了,似乎写作任务并未开始。回想这个月,好像干了什么,又好像什么都没干。
这个月看起了易中天讲的诸子百家,很有意思,有种想要去看原文的冲动,上下班间隙,看起了诗经,也很有意思,虽然古文看起来很生涩,但是感受到了时代思想的共通性,越来越觉得没有解决不了的事,因为你经历的前人都有经历过,多读点书,总是好的。
本文主要是介绍SD卡是什么,虽然不能深入,至少得有个概念。2. SD卡简介
SD卡:secure digital memory card是一种安全存储器件。属性是快闪存储器(flash eeprom),功能用来存储数据。
SD卡的特点:- 高存储容量,可达到2TB
- 内置加密技术
- 高速数据传输,最大100MB/s
- 体积小(SD卡加接口可组成U盘)
3. SD卡的工作原理
3.1 SD卡内部结构
SD卡虽然是薄薄的一片,但是它并不是一个整体,而是由大量的集成电路组成。
SD卡的内部结构如下:主要由信号端子,接口控制器和存储区组成。
3.2 SD卡硬件接口
SD卡主要有两种模式,SD模式和SPI模式。不同模式下,接口定义不同。下面是SD卡的引脚。
两种模式的接口定义如下
SD模式中,主要由VCC(电源),VSS(GND),CLK(时钟,由主控提供),CMD(命令),DAT0-3(数据输入输出),由6线制组成进行通信。
此种模式硬件连接图如下:
SPI模式,主要采用4线制通信,除了电源地外,由MISO,MOSI,CLK,CS组成。
此种模式硬件连接图如下:
3.3 工作原理
SD卡采用6个字节的命令进行通信,采用应答机制。在CS拉低后,在CMD向SD卡写入命令,等待SD卡数据线上的回应,主机接到回应后,可以向SD卡输送数据,这就是SD卡简单的工作过程。
工作时序图如下:
-
STM32+SD卡的原理图绘制以及用32完成对SD卡的数据读取(fat文件模式)
2021-12-21 11:05:35二、绘制STM32最小系统原理图 2.1元件库 2.2新建工程 2.3绘制原理图 三、SD卡协议原理 3.1SD卡简介 3.2SD卡接口 3.3协议 四、STM32对SD卡的数据读取 4.1准备工作 4.2代码 4.3烧录效果 五、总结 参考...目录
一、下载安装AD
下面是两种安装方法,可以任意选择一种自己喜欢的
1.1安装方法一
可以在微信上搜索“软件安装站”公众号然后关注,再点进去软件目录去找到Altium Designer选择喜欢的版本去下载。
里面有网盘的链接,和详细下载步骤,安装中如果有问题可以直接问客服
可以通过这种方式下载,这个“软件安装站”有详细教程而且如果安装过程中出现问题可以直接询问人工客服或者要求客服远程协助安装,可以说这个真的很方便了,不是打广告只是这个公众号实在是太好用了。但是里面的有的版本可能没有更新。
1.2安装方法二
可以直接参考以下博客,步骤很详细!但是还是建议选择安装方法一,因为可能会出问题,可以随时找客服问。
(74条消息) Altium Designer(AD)安装教程_Joshua Lee的博客-CSDN博客_ad安装教程
二、绘制STM32最小系统原理图
2.1元件库
用AD以来到各个地方下载的元件库,几乎常用的是没什么缺的了。都在下面的网盘里了,可能有点大:
链接:https://pan.baidu.com/s/1hTUUYVnjF_AfY-j3w2TMyQ
提取码:j7w42.2新建工程
安装好之后就是新建一个PCB工程
点击文件——>新的——>项目
然后
这样就创建好工程了,然后在工程里创建元件库和原理图等
创建原理图:(创建完后就直接按ctrl+S保存在刚才的工程目录下面,名字最好和工程名一样,但是自带的后缀名不能改)
创建元件库:(创建完后就直接按ctrl+S保存在刚才的工程目录下面,名字最好和工程名一样,但是自带的后缀名不能改)
元件库里面的元件可以选择自己画或者是从其他的地方复制过来,粘贴的时候注意是点击空白处进行粘贴
2.3绘制原理图
在 建好工程,导入好元件之后就可以进行原理图的绘制了
在元件库上点击“放置”就可以将元件从元件库放置到原理图上了(左键点击一下就放下了,然后右键点击一下释放掉挂着的元件)
放置好元件后,可以双击元件或者点击元件然后再按tab键进入设置窗口,编辑编号名称等东西:
元件放置完成后连线时点击上面的双波浪图案,右击可以选择多种连接方式,一般用的只有线、网络标签:
电源这些的选择在就是连线图案的旁边:(右击可以选择不同的电源,有接地等)
通过以上的学习,应该差不多已经掌握了AD的用法啦!
注意!如果还是感觉比较迷糊,那么祭出B站大佬的AD教学视频(这个视频及其详细,手把手教AD用法,但是相对时长较长,如果只画原理图建议只看前半部分就好)
Altium Designer 20 19(入门到精通全38集)四层板智能车PCB设计视频教程AD19 AD20 凡亿_哔哩哔哩_bilibili
下面就是绘制原理图了:
stm32最小系统电路原理图:
指示灯:
排针:
电源:
程序烧录/调试接口:
下载方式选择:
降压电路:
去耦电路:
晶振电路:
SD卡原理图:
总原理图:
SD卡连接STM32连接图:
三、SD卡协议原理
3.1SD卡简介
SD卡(
secure digital card
)是SD卡协会开发的低成本,非易失性存储卡格式(相比较于RAM,SD卡掉电数据不丢失);随着本世纪电子技术的高速发展,对于这种中等型号,节能、节省空间的存储器设备的需求一直在快速增长;
SD卡具有SDHC的速度等级,范围;2级(以2 MB / s的速度运行);4级(以4MB / s的速度运行);6级(以最高6 MB / s的速度运行);10级(以最高的速度运行) 10 MB /秒;
SDXC卡以超高速运行,并以最高30 Mb/s的速度运行;还有视频速度等级,数据传输速率高达90MB/s。
3.2SD卡接口
SD卡可以在SD总线模式或SPI总线模式下运行,通常可以使用SDIO总线或者SPI对SD进行驱动;下面主要以micro SD为例,就SDIO模式和SPI模式做简单做一下介绍;
microSD引脚输出,SD模式
引脚 引脚名称 信号功能 1 DAT2 数据位2 2 CD / DAT3 卡检测/数据位3 3 CMD 命令行 4 Vdd 电源电压2.7v / 3.6v 5 Clk 时钟 6 VS 地 7 DAT0 数据位0 8 DAT1 数据位1 microSD引脚输出,SPI模式
引脚 引脚名称 信号功能 1 NC 没有连接 2 /CS 片选 3 DI 主输出/从属(MOSI) 4 Vdd 电源电压2.7v / 3.6v 5 Clk 时钟 6 Vss 地 7 DO 主进/从出(MISO) 8 RSV 已预留 3.3协议
SD协议中,由于命令数据线和数据线是分开的,因此我们需要关注,命令的传输格式,以及数据的传输格式;
命令传输
命令以48位数据包的形式通过双向CMD引脚进行传输。
这些命令包包括命令索引,变量和CRC位。该命令始终通过主机发送,最终由SD卡接收。
回传的响应数据包也为48位。
整体命令如下图所示;
48位的命令格式
每个命令的恒定长度为6个字节。第一个字节是命令编号和数字64的 加法。例如:对于CMD0:命令编号0 + 64 = 64 = 0x40(十六进制)。
对于CMD1:十六进制命令号1 + 64 = 65 = 0x41。
随后是一组四个字节,称为参数。
四、STM32对SD卡的数据读取
4.1准备工作
准备SD卡模块和SD卡
内部结构:
STM32与SD卡模块的连线:
stm32 SD卡模块 PA4 SDCS PA5 SCK PA7 MOSI PA6 MISO VCC VCC GND GND 连好了如图所示:
因为STM要连接SD卡模块,所以之后进行的就是HAL库配置:
然后把工程地址这些改改就可以导出了
4.2代码
main.c
/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * <h2><center>© Copyright (c) 2019 STMicroelectronics. * All rights reserved.</center></h2> * * This software component is licensed by ST under Ultimate Liberty license * SLA0044, the "License"; You may not use this file except in compliance with * the License. You may obtain a copy of the License at: * www.st.com/SLA0044 * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "fatfs.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "SDdriver.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ SPI_HandleTypeDef hspi1; UART_HandleTypeDef huart1; /* USER CODE BEGIN PV */ /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_SPI1_Init(void); static void MX_USART1_UART_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ int fputc(int ch, FILE *f) { HAL_UART_Transmit(&huart1, (unsigned char *)&ch, 1, 0xFFFF); return ch; } uint16_t uart_value[3]; uint8_t aRxBuffer1; //uart rx buff void WritetoSD(BYTE write_buff[],uint8_t bufSize); char SD_FileName[] = "hello.txt"; uint8_t WriteBuffer[] = "01 write buff to sd \r\n"; //uint8_t test_sd =0; //ÓÃÓÚ²âÊÔ¸ñʽ»¯ uint8_t write_cnt =0; //д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); //取消挂载 } 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); } } /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ 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(" main \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] +10; WriteBuffer[1] = WriteBuffer[1] +10; 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 */ } /** * @brief System Clock Configuration * @retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV2; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } /** * @brief SPI1 Initialization Function * @param None * @retval None */ static void MX_SPI1_Init(void) { /* USER CODE BEGIN SPI1_Init 0 */ /* USER CODE END SPI1_Init 0 */ /* USER CODE BEGIN SPI1_Init 1 */ /* USER CODE END SPI1_Init 1 */ /* SPI1 parameter configuration*/ hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Direction = SPI_DIRECTION_2LINES; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; hspi1.Init.NSS = SPI_NSS_SOFT; hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi1.Init.TIMode = SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi1.Init.CRCPolynomial = 10; if (HAL_SPI_Init(&hspi1) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN SPI1_Init 2 */ /* USER CODE END SPI1_Init 2 */ } /** * @brief USART1 Initialization Function * @param None * @retval None */ static void MX_USART1_UART_Init(void) { /* USER CODE BEGIN USART1_Init 0 */ /* USER CODE END USART1_Init 0 */ /* USER CODE BEGIN USART1_Init 1 */ /* USER CODE END USART1_Init 1 */ huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN USART1_Init 2 */ /* USER CODE END USART1_Init 2 */ } /** * @brief GPIO Initialization Function * @param None * @retval None */ static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOA_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(SD_CS_GPIO_Port, SD_CS_Pin, GPIO_PIN_RESET); /*Configure GPIO pin : SD_CS_Pin */ GPIO_InitStruct.Pin = SD_CS_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(SD_CS_GPIO_Port, &GPIO_InitStruct); } /* USER CODE BEGIN 4 */ /* USER CODE END 4 */ /** * @brief This function is executed in case of error occurrence. * @retval None */ void Error_Handler(void) { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ /* USER CODE END Error_Handler_Debug */ } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t *file, uint32_t line) { /* USER CODE BEGIN 6 */ /* User can add his own implementation to report the file name and line number, tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
4.3烧录效果
现将编译好的hex文件烧进芯片里
然后改变跳线帽,打开串口调试助手,第一次烧录只显示了一个Main.
第n次:而且只有每次接上电的一瞬间才回接收到
然后把所有线全部用力插一次。。。。再换一个野火调试串口
五、总结
这个实验把我心态都整崩了啊,这个串口到底怎么怎么回事,实验本身步骤不是很难,就是画原理图的时候可能会有一点点麻烦,但是之后都挺顺利的,但是!等烧完看串口的时候就是另一个故事了,可能就是一根线或者是电压不对所以就是没显示,或者是显示其他的东西。
参考文献:
(74条消息) 各种SD卡参数及接口_tiandiren111的专栏-CSDN博客
(74条消息) 【嵌入式20】STM32F103完成对SD卡的数据读取详细操作_噗噗的罐子博客-CSDN博客
(74条消息) 使用Altium Designer18绘制stm32最小系统的电路原理图,并在此基础上完成STM32+SD卡 的系统原理图设计_CCChenn mi的博客-CSDN博客
-
SD卡原理及内部结构
2016-09-19 11:07:13SD卡原理及内部结构 -
单片机实现的SD卡读写模块的完整工程,含原理图,代码,说明文档等
2018-11-17 19:47:40单片机实现的SD卡读写模块的完整工程,含原理图,代码,说明文档等 -
sd卡原理图flash
2009-10-23 18:40:56sd卡原理图,sk6612,sd接口,flash控制芯片 -
Micro SD卡(TF卡)封装和原理图总结
2020-08-12 13:47:05Micro SD卡(TF卡)封装和原理图总结 最近在研究基于SD卡的FatFs文件系统的使用方法,无奈在前期配置SD卡的过程中初始化屡屡失败,在踩了很多坑后终于找到了问题所在——封装和原理图没有对应正确。现将经验总结如下... -
使用Altium Designer绘制STM32最小系统板及SD卡原理图
2021-12-21 10:26:17目录一、前言二、AD工程的创建1、创建一个属于我们自己的工程2、元器件的封装三、原理图绘制1、模块的绘制2、排版与分区3、SD模块的绘制效果展示总结参考资料 一、前言 在学习了这么久的嵌入式,我们似乎还没有仔细... -
STM32+SD卡 的系统原理图设计
2021-12-25 15:37:54STM32+SD卡 的系统原理图设计 安装AD 将AD压缩包解压 点击exe文件进行安装后,按如下操作对AD进行破解,即可安装破解成功。 绘制stm32最小版 点击file->new->project->PCB project,建立工程 右键点击pcb... -
各种SD卡封装库(3D封装文件+原理图文件)
2019-06-19 11:24:51本压缩包含 ①SD卡封装库.PcbLib ②SD卡原理图.SchLib 封装是3D封装,为本人长期整理积累,希望对大家有帮助! -
基于GL827L SD卡TF卡读卡器ALTIUM设计原理图PCB+AD集成库+BOM文件.zip
2021-03-17 22:02:19基于GL827L SD卡TF卡读卡器ALTIUM设计原理图PCB文+AD集成库+BOM文件,采用2层板设计,板子大小为43x32mm,双面布局布线, Altium Designer 设计的工程文件,包括原理图+PCB文件,可以用Altium(AD)软件打开或修改,可... -
sd卡模块原理图
2008-04-15 16:21:12sd卡模块原理图,sd卡模块原理图 -
Altium Designer 18绘制一个STM32+SD卡 的系统原理图设计
2021-12-23 16:54:06Altium Designer 18绘制一个STM32+SD卡 的系统原理图设计 -
STM32 F0系列单片机原理图封装库(AD库)_ad15原理图如何添加封装
2020-12-13 16:41:17STM32 F0系列单片机原理图封装库(AD库),共22个封装,基本包含了所有STM32 F0系列原理图封装,是Altium Designer的SCH封装库,.SchLib格式的,非常实用,文件304K -
Altium Designer绘制stm32+SD卡原理图绘制
2021-12-25 15:14:44四、SD卡模块原理图绘制 五、总结 六、参考资料 一、安装 Altium Designer 1.安装包下载 https://pan.baidu.com/share/init?surl=ghWFVpSHIVXVfiQko9htCQ 提取码:luha 2.安装 解压缩 Altium_Designer -
SK6621 SD卡原理图
2011-06-13 09:57:36压缩文件,包括SK6211 PCB正面图纸和SK6621 SD卡原理图 -
stc12c5612+DS1302+SD卡单片机开发板AD设计硬件原理图+PCB文件.zip
2022-02-22 21:27:12stc12c5612+DS1302+SD卡单片机开发板AD设计硬件原理图+PCB文件,硬件采用2层板设计,大小为100*65mm,包括完整的原理图和PCB文件,可以做为你的学习设计参考。 主要器件如下: LM2596 PWR2.5 Low Voltage Power ... -
【开源】Intel Edison 迷你型SD卡转接板(原理图、PCB源文件)-电路方案
2021-04-22 06:45:32在microSD座配备的爱迪生与海量存储能力,所以你可以使用它的数据记录或其他相关项目。此板可扣到你的爱迪生,以便快速访问到microSD存储能够满足您的卡上的任何数据。 如果您正在寻找多一点的稳定性添加到您的... -
Altium Designer绘制STM32F103C8T6及SD卡模块原理图
2021-12-25 21:31:523、连接SD卡原理图完毕后效果如下: 四、个人总结 绘制STM32的最小系统的电路图主要是要对Altium Designer软件的熟悉,这个实践是对动手能力很好的锻炼,绘制不是很难,参考前人的经验是可以避免很多雷区的。... -
STM32F407ZGT6开发板原理图.pdf
2019-12-18 17:09:00该pdf是一个基于stm32f407的开发板原理图的设计,设计的电路图包含了许多的功能满足一般学习的需求。