OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 254|回复: 0

STM32H743 SDMMC控制器使用原子的例程发现CPU时钟不能配置超过400MHZ

[复制链接]

89

主题

171

帖子

0

精华

高级会员

Rank: 4

积分
600
金钱
600
注册时间
2015-9-7
在线时间
140 小时
发表于 2024-10-10 18:18:43 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 wt13568089592 于 2024-10-10 18:19 编辑

STM32H743 SDMMC控制器使用原子的例程发现CPU时钟不能配置超过400MHZ,如果CPU频率超过400MHZ,SD卡写入会有数据错误,这个是为啥啊?
还是其他哪里还需要改吗?
使用正点原子的例程来改的,main程序如下
/**
****************************************************************************************************
* @file        main.c
* @author      正点原子团队(ALIENTEK)
* @version     V1.0
* @date        2022-09-06
* @brief       FATFS 实验
* @license     Copyright (c) 2020-2032, 广州市星翼电子科技有限公司
****************************************************************************************************
* @attention
*
* 实验平台:正点原子 阿波罗 H743开发板
* 在线视频:www.yuanzige.com
* 技术论坛:www.openedv.com
* 公司网址:www.alientek.com
* 购买地址penedv.taobao.com
*
****************************************************************************************************
*/

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/SDRAM/sdram.h"
#include "./USMART/usmart.h"
#include "./BSP/LED/led.h"
#include "./BSP/LCD/lcd.h"
#include "./BSP/MPU/mpu.h"
#include "./BSP/LCD/ltdc.h"
#include "./MALLOC/malloc.h"
#include "./BSP/NAND/ftl.h"
#include "./BSP/NAND/nand.h"
#include "./FATFS/source/ff.h"
#include "./FATFS/exfuns/exfuns.h"
#include "./BSP/NORFLASH/norflash.h"
#include "./BSP/SDMMC/sdmmc_sdcard.h"

FIL bfile;
FRESULT RTT;
uint8_t *pfile;
void test() //读取一个文件来测试写入,然后把写入的文件在电脑上用winhex打开和原文件对比
{
        f_unlink("0:app2.bin");
        f_unlink("0:app3.bin");
        f_unlink("0:app4.bin");
        uint32_t uslen,rbyte,wbyte;
        RTT=f_open(&bfile,"0:appf.bin",FA_READ|FA_OPEN_EXISTING);
        uslen=f_size(&bfile);
        pfile=mymalloc(SRAMEX,1024*1024);
        f_read(&bfile,pfile,uslen,&rbyte);
        RTT=f_open(&bfile,"0:app2.bin",FA_WRITE|FA_OPEN_APPEND);
        RTT=f_write(&bfile,pfile,uslen,&wbyte);
        f_close(&bfile);
        RTT=f_open(&bfile,"0:app3.bin",FA_WRITE|FA_OPEN_APPEND);
        RTT=f_write(&bfile,pfile,uslen,&wbyte);
        f_close(&bfile);
                RTT=f_open(&bfile,"0:app4.bin",FA_WRITE|FA_OPEN_APPEND);
        RTT=f_write(&bfile,pfile,uslen,&wbyte);
        f_close(&bfile);
}

int main(void)
{
    uint32_t total, free;
    uint8_t t = 0;
    uint8_t res = 0;

    sys_cache_enable();                      /* 打开L1-Cache */
    HAL_Init();           
        /* 初始化HAL库 */
    sys_stm32_clock_init(192, 5, 2, 5);      /* 设置时钟, 400Mhz */
    delay_init(480);                         /* 延时初始化 */
    usart_init(115200);                      /* 串口初始化 */
    usmart_init(200);                        /* 初始化USMART */
    mpu_memory_protection();                 /* 保护相关存储区域 */
    led_init();                              /* 初始化LED */
    sdram_init();                            /* 初始化SDRAM */
    lcd_init();                              /* 初始化LCD */

    my_mem_init(SRAMIN);                     /* 初始化内部内存池(AXI) */
    my_mem_init(SRAMEX);                     /* 初始化外部内存池(SDRAM) */
//    my_mem_init(SRAM12);                     /* 初始化SRAM12内存池(SRAM1+SRAM2) */
//    my_mem_init(SRAM4);                      /* 初始化SRAM4内存池(SRAM4) */
//    my_mem_init(SRAMDTCM);                   /* 初始化DTCM内存池(DTCM) */
//    my_mem_init(SRAMITCM);                   /* 初始化ITCM内存池(ITCM) */

    lcd_show_string(30, 50, 200, 16, 16, "STM32", RED);
    lcd_show_string(30, 70, 200, 16, 16, "FATFS TEST", RED);
    lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);
    lcd_show_string(30, 110, 200, 16, 16, "Use USMART for test", RED);

    while (sd_init())                       /* 检测不到SD卡 */
    {
        lcd_show_string(30, 130, 200, 16, 16, "SD Card Error!", RED);
        delay_ms(500);
        lcd_show_string(30, 130, 200, 16, 16, "lease Check! ", RED);
        delay_ms(500);
        LED0_TOGGLE();                      /* 红灯闪烁 */
    }

//    ftl_init();
    exfuns_init();                          /* 为fatfs相关变量申请内存 */
    f_mount(fs[0], "0:", 1);                /* 挂载SD卡 */
   test();
//    res = f_mount(fs[1], "1:", 1);          /* 挂载FLASH. */
//    if (res == 0X0D)                        /* FLASH磁盘,FAT文件系统错误,重新格式化FLASH */
//    {
//        lcd_show_string(30, 150, 200, 16, 16, "Flash Disk Formatting...", RED);     /* 格式化FLASH */
//        res = f_mkfs("1:", 0, 0, FF_MAX_SS);                                        /* 格式化FLASH,1:,盘符;0,使用默认格式化参数 */

//        if (res == 0)
//        {
//            f_setlabel((const TCHAR *)"1:ALIENTEK");                                /* 设置Flash磁盘的名字为:ALIENTEK */
//            lcd_show_string(30, 150, 200, 16, 16, "Flash Disk Format Finish", RED); /* 格式化完成 */
//        }
//        else
//        {
//            lcd_show_string(30, 150, 200, 16, 16, "Flash Disk Format Error ", RED); /* 格式化失败 */
//        }

//        delay_ms(1000);
//    }

//    res = f_mount(fs[2], "2:", 1);                                                  /* 挂载NAND FLASH. */
//    if (res == 0X0D)                                                                /* NAND FLASH磁盘,FAT文件系统错误,重新格式化NAND FLASH */
//    {
//        lcd_show_string(30, 150, 200, 16, 16, "NAND Disk Formatting...", RED);      /* 格式化NAND FLASH */
//        res = f_mkfs("2:", 0, 0, FF_MAX_SS);                                        /* 格式化NAND FLASH,2:,盘符;0,使用默认格式化参数 */

//        if (res == 0)
//        {
//            f_setlabel((const TCHAR *)"2:NANDDISK");                                /* 设置Flash磁盘的名字为:NANDDISK */
//            lcd_show_string(30, 150, 200, 16, 16, "NAND Disk Format Finish", RED);  /* 格式化完成 */
//        }
//        else
//        {
//            lcd_show_string(30, 150, 200, 16, 16, "NAND Disk Format Error ", RED);  /* 格式化失败 */
//        }

//        delay_ms(1000);
//    }

//    lcd_fill(30, 150, 240, 150 + 16, WHITE);                                        /* 清除显示 */

    while (exfuns_get_free((uint8_t *)"0:", &total, &free))                         /* 得到SD卡的总容量和剩余容量 */
    {
        lcd_show_string(30, 150, 200, 16, 16, "SD Card Fatfs Error!", RED);
        delay_ms(200);
        lcd_fill(30, 150, 240, 150 + 16, WHITE);                                    /* 清除显示 */
        delay_ms(200);
        LED0_TOGGLE();                                                              /* 红灯闪烁 */
    }

    lcd_show_string(30, 150, 200, 16, 16, "FATFS OK!", BLUE);     
    lcd_show_string(30, 170, 200, 16, 16, "SD Total Size:     MB", BLUE);
    lcd_show_string(30, 190, 200, 16, 16, "SD  Free Size:     MB", BLUE);
    lcd_show_num(30 + 8 * 14, 170, total >> 10, 5, 16, BLUE);                       /* 显示SD卡总容量 MB */
    lcd_show_num(30 + 8 * 14, 190, free >> 10, 5, 16, BLUE);                        /* 显示SD卡剩余容量 MB */

    while(1)
    {
        t++;
        delay_ms(200);
        LED0_TOGGLE();         /* 红灯闪烁 */
    }
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 09:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表