标题:
stm32读取SD卡信息程序,通过SPI的方式
[打印本页]
作者:
LCIOT
时间:
2017-8-6 19:00
标题:
stm32读取SD卡信息程序,通过SPI的方式
这是一个读取SD卡信息的程序
所有资料51hei提供下载:
SD程序.rar
(2.53 MB, 下载次数: 223)
2017-8-6 18:59 上传
点击文件名下载附件
下载积分: 黑币 -5
stm32单片机源程序如下:
/**
******************************************************************************
* @file USART/Printf/main.c
* @author MCD Application Team
* @version V3.3.0
* @date 04/16/10
* @brief Main program body
******************************************************************************
* @copy
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>© COPYRIGHT 2010 STMicroelectronics</center></h2>
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "delay.h"
#include <stdio.h>
#include <stdlib.h>
#include "sd.h"
#include "usart.h"
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* Private function prototypes -----------------------------------------------*/
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
* @brief Main program
* @param None
* @retval None
*/
u8 SD_Buffer[512];//SD卡数据缓存区
int main(void)
{
u8 tmp;
u16 mm,nn;
u32 nummber,nummber_bak;
//设置优先级分组:抢占优先级和响应优先级各2位
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//设置向量表的位置和偏移:在FLASH中偏移为0
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0);
//USART1初始化
USART1_Init();
//检测当前系统时钟SystemCoreClock
SystemCoreClockUpdate ();
//检测SD卡,失败则2秒后继续检测
while(SD_Init()!=0)
{
printf("\r\n未检测到SD卡!");
delay_ms(SystemCoreClock,1000);
delay_ms(SystemCoreClock,1000);
}
printf("\r\n初始化SD卡成功!\r\n");
//逻辑0扇区的物理扇区号
nummber_bak=SD_GetLogic0();
while(1)
{
RxCounter1=0;
printf("\r\n请发送要读取的逻辑扇区号\r\n");
do
{ //等待接收停止100mS
tmp = RxCounter1;
delay_ms(SystemCoreClock,100);
}while(RxCounter1==0 || tmp!=RxCounter1);
//将接收到的字符串转换成数值
RxBuffer1[RxCounter1]='\0';
nummber=atol((const char *)RxBuffer1);
if(SD_ReadBlock(SD_Buffer,nummber_bak+nummber,512)==0)//读指定扇区
printf("\r\n第%d逻辑扇区数据:",nummber);
for(mm=0;mm<32;mm++)
{
printf("\r\n%03xH ",mm<<4);
for(nn=0;nn<16;nn++)
printf("%02x ",SD_Buffer[(mm<<3)+nn]);
}
printf("\r\n");
}
// while (1)
// {
// delay_ms(SystemCoreClock,1000);
// printf("\r\n串口1测试程序");
// }
}
/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART */
USART_SendData(USART1, (uint8_t) ch); /*发送一个字符函数*/
/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)/*等待发送完成*/
{
}
return ch;
}
#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 can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
/**
* @}
*/
/**
* @}
*/
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
复制代码
作者:
阿瓦塞翻译
时间:
2018-5-28 21:41
不错哦,学习一下
作者:
scypw
时间:
2018-7-3 13:16
不错哦,学习一下
作者:
plj213
时间:
2018-7-24 15:31
不错哦,学习一下
作者:
abcd123.
时间:
2019-3-26 11:14
好东西,学习一下
作者:
godlzm
时间:
2019-7-23 21:51
看下学习下
作者:
牛奶大开发
时间:
2019-9-25 10:50
好东西,学习一下
作者:
52301
时间:
2020-5-11 18:00
不错,有参考价值
作者:
nmgbtzyf
时间:
2020-7-18 05:51
LZ,给个原图嘛,
//使能PA时钟,PC时钟,SPI1时钟和APB2复用功能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO, ENABLE);
//关闭SPI所有相关器件:SD_CS(SD卡),W25_CS(W25X16),T_CS(触摸屏),N_CS(RF24L01无线模块)
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12);
//使能SPI1引脚(SCK和MOMI)推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//使能SPI1引脚(MIMO)上拉输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
虽然有说明,还是不确定-----.C12 是CS,上面的,C9-10-11,是关闭一些外设的,这个必有的嘛
还有,就是,CLK,和MOMI,对应是,A5和7嘛
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1