stm32 mmc卡写文件然后读出来 串口输出

发布者:快乐的成长最新更新时间:2024-10-17 来源: cnblogs关键字:stm32  mmc卡  串口输出 手机看文章 扫描二维码
随时随地手机看文章

硬件环境:神州一号板
软件环境:MDK

1、sd卡硬件初始化
PA5---------CLK
PA6---------MISO
PA7---------MOSI
PB7---------CS
void TurnToSD(void)
{
    SPI_InitTypeDef  SPI_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;


        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA  | RCC_APB2Periph_GPIOB |
            RCC_APB2Periph_GPIOC |
            RCC_APB2Periph_AFIO |
            RCC_APB2Periph_SPI1,
            ENABLE);


    /*A5=CLK,A6=MISO,A7=MOSI*/
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    /*A5=CLK,A6=MISO,A7=MOSI*/
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    /* Configure PB.7 as CS*/
    //置高
    GPIO_SetBits(GPIOB, GPIO_Pin_7);//置为高
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);


    /* SPI1 configuration */
    SPI_Cmd(SPI1, DISABLE); //必须要有才能改变MODE
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //两线全双工
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //主
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //8位
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //CPOL=1 时钟悬空高
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //CPHA=1 数据捕获第二个
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //软件NSS
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128; //256分频
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //高位在前
    SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC7
    
    SPI_Init(SPI1, &SPI_InitStructure);
    //SPI_SSOutputCmd(SPI1, ENABLE); //使能NSS脚可用
    /* Enable SPI1  */
     SPI_Cmd(SPI1, ENABLE); 
    SPI_Release(); //复位一下总线,这个比较重要
}

关于片选的宏定义:
#define MMC_SELECT()      GPIO_ResetBits(GPIOB, GPIO_Pin_7)       /* MMC CS = L */ 
#define MMC_DESELECT()   GPIO_SetBits(GPIOB, GPIO_Pin_7)         /* MMC CS = H */

2、每次都新建一个haha5.txt文档,并写入数据
如果文档存在,则覆盖之。
f_mount在for外
写步骤:打开文件---写文件---关闭文件
读步骤:打开文件---读文件---关闭文件
void TestSD1(void)
{
FATFS fs;
FIL fil;
FRESULT res; //文件系统返回信息
char rbyte[300];
char wbyte[]='男儿当自强!!!';
 u32 rlen,wlen;

f_mount(0,&fs);//注册一个文件系统
 for(;;) 
{
    //写
    res = f_open(&fil, 'haha5.txt', FA_CREATE_ALWAYS | FA_WRITE); 
    res = f_write(&fil, wbyte, sizeof(wbyte), &wlen);


    if(res || wlen     {
        USART1_Puts('write failed!!!rn');
        //break;
    }
    USART1_Puts('write suc!rn');
    f_close(&fil);
  
   delay_ms(5000000);
  

  //读
   res = f_open(&fil, 'haha5.txt',  FA_READ); 
   res = f_read(&fil, rbyte, sizeof(rbyte)-1, &rlen);


    if (res || rlen == 0) 
           // break;   // error or eof
      ;


    rbyte[rlen]='';
    USART1_Puts(rbyte);

  if( res==FR_OK )
    USART1_Puts('f_read file suc!rn');
    else 
    USART1_Puts('f_read file erro!rn'); 
    f_close(&fil);
    delay_ms(5000000);

    } 

   f_mount(0, NULL);
   
}

效果图如下:

关键字:stm32  mmc卡  串口输出 引用地址:stm32 mmc卡写文件然后读出来 串口输出

上一篇:stm32 mmc卡扫描指定文件夹下的所有文件 串口输出(文件名长度有限制)
下一篇:STM32 驱动例程

推荐阅读最新更新时间:2026-03-21 10:55

STM32中IO口模拟串口输出的乱码现象
因为芯片串口不够用,只好用IO口模拟串口,在网上下载了个模拟串口的程序,可运行,但发现串口输出隔几个字符就会出现乱码,主要部分代码如下: [cpp] view plain copy#define OI_TXD PAout(12) #define OI_RXD PAin(11) #define BuadRate_9600 100 u8 len = 0; //接收计数 u8 USART_buf[11]; //接收缓冲区 u8 recvStat = COM_STOP_BIT; u8 recvData = 0; void IO_TXD(u8 Data) { u8 i = 0; OI_TXD = 0; delay_us(BuadRate
[单片机]
<font color='red'>STM32</font>中IO口模拟<font color='red'>串口</font><font color='red'>输出</font>的乱码现象
PIC单片机 读/写 MMC/SD 的简单小程序
这里介绍一个简单的PIC单片机 读/写 MMC/SD 卡的小程序 // MMC module connections sbit Mmc_Chip_Select at LATC0_bit; // for writing to output pin always use latch (PIC18 family) sbit Mmc_Chip_Select_Direction at TRISC0_bit; // eof MMC module connections const LINE_LEN = 43; char err_txt = FAT16 not found ; char file_contents = X
[单片机]
PIC单片机 读/写 <font color='red'>MMC</font>/SD <font color='red'>卡</font>的简单小程序
PIC单片机USB MSC的应用:用 MMC/SD 作为储存设备进行读写
单片机的USB接口,通常用法, 1)HID 是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。 2)CDC 虚拟串口,可与PC机直接联机通讯,如同RS232。 3)USB MSC (Mass Storage class) MSC是一种计算机和移动设备之间的传输协议,它允许一个通用串行总线(USB)设备来访问主机的计算设备,使两者之间进行文件传输。设备包括:移动硬盘,移动光驱,U盘,SD、TF等储存卡读卡器,数码相机,手机等等。 .......... 注意: 每
[单片机]
PIC单片机USB MSC的应用:用 <font color='red'>MMC</font>/SD <font color='red'>卡</font>作为储存设备进行读写
MMC读写C代码
#include iom16v.h // MMC commands #define MMC_GO_IDLE_STATE 0 #define MMC_SEND_OP_COND 1 #define MMC_SEND_CSD 9 #define MMC_SEND_CID 10 #define MMC_SEND_STATUS 13 #define MMC_SET_BLOCKLEN 16 #define MMC_READ_SINGLE_BLOCK 17 #define MMC_WRITE_BLOCK 24 #define MMC_PROGRAM_CSD 27 #define MMC_SET_WRITE_PROT 28 #define MMC
[单片机]
嵌入式Linux系统中MMC驱动管理技术研究
引 言 MMC(Multitmedia Card)是一种体积小巧、容量大、使用方便的存储器,目前在手机等嵌入式系统中有着广泛的应用。MMC通过卡内的一个集成片内控制器对MMC卡进行控制和管理,当主机正确地驱动MMC卡后,就可以像磁盘一样方便地存取数据。本文所研究与实现的Linux驱动程序,以Intel XScale的PXA250为硬件平台,在遵循MMC卡通信协议规范的基础上,实现了卡的底层读写。然后对传统的块设备驱动程序中的单块读写进行了改进,实现了集群读写技术,提高了卡的读写速度;同时增加了电源管理功能,满足了嵌入式系统低功耗的需求;增加了即插即用功能,方便了用户的使用。 1 MMC卡驱动程序的体系结构 MMC 卡仅通过
[单片机]
嵌入式Linux系统中<font color='red'>MMC</font><font color='red'>卡</font>驱动管理技术研究
带SD/MMC存储接口的MP3和弦芯片ft1780
随着MP3手机的兴起,用户不仅对手机音乐的音量、音质要求越来越高,而且对手机的存储容量的要求也越来越大,总希望能多存些歌,可以省去频繁换歌的烦恼。但目前一般手机自带的内存远远不能满足这些要求,而且很多手机平台也无法支持外接存储卡,为了解决这一问题,就需要有配套的存储管理芯片。 方泰电子的ft1780可以帮手机设计工程师很好的解决这个难题。它不仅可以提供专业的MP3音乐,而且集成了SD/MMC存储卡接口,由于内置文件管理系统,可以方便地升级原有的手机产品,使之具有可更换外接SD/MMC存储卡的功能。本文介绍了ft1780音频处理芯片的功能特点,并详细叙述了其在手机上的应用实例。 ft1780芯片内部结构和特点 图1是
[手机便携]
STM32开发笔记86:使用printf向串口输出数据
单片机型号:STM32L053R8T6 本文介绍使用printf向串口输出数据的方法,具体如下: 1、根据原理图确认使用哪路串口进行printf输出,并在config.h文件予以声明,程序如下: /** 配置调试信息 */ #define DEBUG_UART 2 //指定调试端口号 2、建立该串口类,从CMiniUART继承,初始化该串口,程序如下: #ifndef UART_COMMUNICATION_H_ #define UART_COMMUNICATION_H_ #include mini_uart.h #ifdef __cplusplus extern C { class CUart
[单片机]
<font color='red'>STM32</font>开发笔记86:使用printf向<font color='red'>串口</font><font color='red'>输出</font>数据
STM32实战 2.矩阵键盘通过串口3输出
#include KEY44.h #include sys.h #include delay.h #include usart.h u8 key_num = 0; int main(void) { uart_init(115200); delay_init(); KEY44_Init(); while(1) { key_num = key44_Scan(); if(key_num != 0) { printf( KEY is %drn ,key_num); } } } #include KEY44.h #include sys.h #include delay.h vo
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved