当前位置: 首页 > news >正文

网站建设合同需要交印花税怎么给网站命名

网站建设合同需要交印花税,怎么给网站命名,wordpress评论投票设置,门户型网站怎么建设本篇#xff0c;将使用CubeMXKeil#xff0c;创建一个SD卡的 FatFSSDIODMA 文件系统读写工程。 目录 一、简述 二、CubeMX 配置 FatFSSDIO DMA 三、Keil 编辑代码 四、实验效果 实现效果#xff0c;如下图#xff1a; 一、简述 上两篇#xff0c;已循序渐进讲解了SD、… 本篇将使用CubeMXKeil创建一个SD卡的 FatFSSDIODMA 文件系统读写工程。 目录 一、简述 二、CubeMX 配置 FatFSSDIO DMA 三、Keil 编辑代码 四、实验效果 实现效果如下图 一、简述 上两篇已循序渐进讲解了SD、SDIO、基础读写、DMA读写。 这里不再啰嗦有兴趣的可翻看之前的篇章: 1、CubeMX_STM32_SD卡_基础读写 2、CubeMX_STM32_SD卡_DMA读写 本篇再向前一步展示CubeMX添加 FatFs 文件系统对SD卡进行文件方式的读写。 对于FatFs这里只示范操作、使用不详述背后细节原理。 SD卡的接线原画图使用通用的接线 二、CubeMX 配置 SDIO DMA FatFS 新建工程部分略过。 参考1【STM32CubeMX】 新建一个工程(STM32F407)_stm32f407 cubemx-CSDN博客参考2【STM32CubeMX】USART1 DMA收发、printf参考3  STM32串口通信 -- bsp_UART.c 文件的移植和函数使用-CSDN博客 1、使能SDIO、DMA Mode :  选择 SD 4 bits Wide bus ;其它参数 F4系列不用修改配置默认即可。F103系列需把时钟分频系数修改为 6即SDIOCLK Clock divide factor这一项默认0修改为6, 不然会通信失败。DMA Settings :  添加SDIO_RX、SDIO_TX这两项;  本页其它参数默认; 2、开启SDIO全局中断修改中断优先级 3、FatFs 使能、参数配置 Mode:  打勾 SD Card参数 CODE_PAGE简体中文参数 USE_LFN长文件名称缓存放在STACK因此STACK得设置大一些如0x1000)参数 FS_EXFATENABLE  (挂载、格式化时会自动选择合适的FAT16、FAT32、exFAT) 4、FatFS 使用DMA 5、FatFS 是否使用检测引脚 让我们先回看一下原理图 SD卡座的第9脚用于检测是否已插入SD卡如果已插入SD卡CD脚会输出低电平。 不建议使用这个功能因为SD卡与U盘不同没有完善的保护电路不应该进行热插拔而且做SD卡项目调试时默认状态应该是一直插着SD卡的。如果项目有需要也可以自己写几行引脚电平检测当引脚电平为低时再对SD卡进行操作这样更灵活。 回到FatFs配置界面 下方配置里可以设置是否使用检测引脚 如果你的SD卡已连接检测引脚想使用CubeMX生成管理可以在这里指定引脚。如果不需要这个检测功能就让它默认空着即可。不管是否已连接此引脚都可空着。 CubeMX生成时注意         当不指定检测引脚在最后生成工程时会有弹窗警告不用管它到时点击Yes即可将会正常生成工程代码上不会有任何影响。         如果不想有弹窗可以随便指定一个空闲的引脚这样在生成时就不会弹警告了但是需要在生成的工程代码里注释掉引脚检测功能这里不详述可自行搜索方法。操作有点烦人不建议此方法。 6、时钟设置 进入时钟树配置页面。 如果之前没配置过SDIO、USB这时就会弹窗是否自动配置所需时钟 选择NO 手动修改即可。 不推荐 Yes因为它将针对已使能的SDIO、USB进行必须值的配置而已设置好的系统时钟将会被修改成其它值。 F4系列如果板子用25M晶振使用下图配置即可如果是8M晶振修改晶振、分频两处为8即可。 重点箭头所指的Q值它用于控制USB 、SDIO和随机数生成器的时钟这个时钟配置成 48M !  因此箭头的Q值设置为 7;  好了SD卡文件系统通信所需的 SDIO FatFS DMA 已完成配置。 重新生成工程这时会有弹窗提示因为我们没有指定SD卡的检测引脚。 点击 Yes 确认继续生成即可 三、Keil 编辑代码 1、打开keil 工程先重新编译一次。 正常情况编译是0 Error的。如果有Error,  应该是新建工程时路径、名称有中文了重新开建工程改为英文即可。 2、重要修改SD卡的初始化使用 1-bit 模式 CubeMX生成的SDIO初始化代码有一个bug需要手动修改操作如下  右击 main.c 文件中函数 MX_SDIO_SD_Init(), 在弹出菜单中Go To Ddfinition Of ...;  将跳转到SD卡初始化函数内部; 跳转到 sdio.c文件的 MX_SDIO_SD_Init() 初始化函数内部后 把下图位置中的 4B改为 1B  因为初始化时需要低速率1线通信即可。如果不修改初始化过程会导致程序卡死。 重要CubeMX每次重新生成后都要手动修改一次。 3、常用函数 我们上两篇介绍SD卡的读写时共用过6个函数如下表。 这6个函数在本工程中还是可用的。但本篇暂时用不上这里就进行不示范了。 1、获取SD卡信息 HAL_SD_CardInfoTypeDef pCardInfo {0};          // SD卡信息结构体 HAL_SD_GetCardInfo(hsd, pCardInfo);            // 获取 SD 卡的信息2、读数据 HAL_SD_ReadBlocks(hsd, aOldData, 7, 2, 3000); // SD卡的句柄、数据、块地址、块数量、超时ms3、写数据 HAL_SD_WriteBlocks(hsd, aTestData, 7, 2, 3000) // SD卡的句柄、数据、块地址、块数量、超时ms4、读数据_DMA HAL_SD_ReadBlocks_DMA(hsd, aOldData, 7, 2); // 读取SD卡指定块的数据; 参数SD句柄、数据地址、块起始地址、需要读取的块数量;5、写数据_DMA HAL_SD_WriteBlocks_DMA(hsd, aTestData, 7, 2); // 向指定块写入数据; 参数SD句柄、数据地址、块起始地址、需要写入的块数量;6、擦除数据 HAL_SD_Erase(hsd, 7, 8) // SD卡的句柄、块起始地址、块结束地址而FatFS常用的几个操作函数如下表 函数参数的具体作用可以通过 Kimi 进行查询。 FRESULT f_res;1、挂载文件系统 f_res f_mount(myFatFs, 0:, 1); // 在SD卡上挂载文件系统; 参数文件系统对象、驱动器路径、读写模式(0只读、1读写)2、格式化 static uint8_t aMountBuffer[4096]; // 格式化时所需的临时缓存; 块大小512的倍数; 值越大格式化越快, 如果内存不够可改为512或者1024; 当需要在函数内定义这种大缓存时要用static修饰令缓存存放在全局数据区内不然可能会导致stack溢出。 f_res f_mkfs(0:, 0, 0, aMountBuffer, sizeof(aMountBuffer)); // 格式化SD卡; 参数驱动器路径、文件系统(0自动\1FAT12\2FAT16\)、簇大小(0为自动选择)、格式化临时缓冲区、缓冲区大小3、打开文件 f_res f_open(myFile, 0:Test.txt, FA_CREATE_ALWAYS | FA_WRITE); // 打开文件; 参数要操作的文件对象、路径和文件名称、打开模式;4、关闭文件 f_close(myFile); // 不再读写关闭文件5、文件写入数据 f_res f_write(myFile, aWriteBuf, sizeof(aWriteBuf), num); // 向文件内写入数据; 参数文件对象、数据缓存、申请写入的字节数、实际写入的字节数6、文件读取数据 f_res f_read(myFile, aReadData, sizeof(aReadData), num); // 从文件中读取数据; 参数文件对象、数据缓冲区、请求读取的最大字节数、实际读取的字节数 4、具体操作示例代码 第一步编写FatFs的示范函数 在main()的上方/* USER CODE BEGIN 0 */ 下面编写以下代码建议直接复制): 这个函数的作用是判断是否需要格式化、挂载文件系统、创建文件、写入数据、读出数据。 // SD卡的FatFS文件系统挂载、格式化、读写测试 void FatFsTest(void) {static FATFS myFatFs; // FatFs 文件系统对象; 这个结构体占用598字节有点大需用static修饰(存放在全局数据区), 避免stack溢出static FIL myFile; // 文件对象; 这个结构体占用570字节有点大需用static修饰(存放在全局数据区), 避免stack溢出static FRESULT f_res; // 文件操作结果static uint32_t num; // 文件实际成功读写的字节数static uint8_t aReadData[1024] {0}; // 读取缓冲区; 这个数组占用1024字节需用static修饰(存放在全局数据区), 避免stack溢出static uint8_t aWriteBuf[] 测试; This is FatFs Test ! \r\n; // 要写入的数据// 重要的延时避免烧录期间的复位导致文件读写、格式化等错误HAL_Delay(1000); // 重要稍作延时再开始读写测试; 避免有些仿真器烧录期间的多次复位短暂运行了程序导致下列读写数据不完整。// 1、挂载测试在SD卡挂载文件系统printf(\r\n\r\n);printf(1、挂载 FatFs 测试 ****** \r\n);f_res f_mount(myFatFs, 0:, 1); // 在SD卡上挂载文件系统; 参数文件系统对象、驱动器路径、读写模式(0只读、1读写)if (f_res FR_NO_FILESYSTEM) // 检查是否已有文件系统如果没有就格式化创建创建文件系统{printf(SD卡没有文件系统开始格式化…...\r\n);static uint8_t aMountBuffer[4096]; // 格式化时所需的临时缓存; 块大小512的倍数; 值越大格式化越快, 如果内存不够可改为512或者1024; 当需要在函数内定义这种大缓存时要用static修饰令缓存存放在全局数据区内不然可能会导致stack溢出。f_res f_mkfs(0:, 0, 0, aMountBuffer, sizeof(aMountBuffer)); // 格式化SD卡; 参数驱动器、文件系统(0-自动\1-FAT12\2-FAT16\3-FAT32\4-exFat)、簇大小(0为自动选择)、格式化临时缓冲区、缓冲区大小; 格式化前必须先f_mount(x,x,1)挂载即必须用读写方式挂载; 如果SD卡已格式化f_mkfs()的第2个参数不能用0自动必须指定某个文件系统。if (f_res FR_OK) // 格式化 成功{printf(SD卡格式化成功 \r\n);f_res f_mount(NULL, 0:, 1); // 格式化后先取消挂载f_res f_mount(myFatFs, 0:, 1); // 重新挂载if (f_res FR_OK)printf(FatFs 挂载成功 \r\n); // 挂载成功elsereturn; // 挂载失败退出函数}else{printf(SD卡格式化失败 \r\n); // 格式化 失败return;}}else if (f_res ! FR_OK) // 挂载异常{printf(FatFs 挂载异常: %d; 检查MX_SDIO_SD_Init()是否已修改1B\r, f_res);return;}else // 挂载成功{if (myFatFs.fs_type 0x03) // FAT32; 1-FAT12、2-FAT16、3-FAT32、4-exFatprintf(SD卡已有文件系统FAT32\n);if (myFatFs.fs_type 0x04) // exFAT; 1-FAT12、2-FAT16、3-FAT32、4-exFatprintf(SD卡已有文件系统exFAT\n); printf(FatFs 挂载成功 \r\n); // 挂载成功}// 2、写入测试打开或创建文件并写入数据printf(\r\n);printf(2、写入测试打开或创建文件并写入数据 ****** \r\n);f_res f_open(myFile, 0:text.txt, FA_CREATE_ALWAYS | FA_WRITE); // 打开文件; 参数要操作的文件对象、路径和文件名称、打开模式;if (f_res FR_OK){printf(打开文件 成功 \r\n);printf(写入测试);f_res f_write(myFile, aWriteBuf, sizeof(aWriteBuf), num); // 向文件内写入数据; 参数文件对象、数据缓存、申请写入的字节数、实际写入的字节数if (f_res FR_OK){printf(写入成功 \r\n);printf(已写入字节数%d \r\n, num); // printf 写入的字节数printf(已写入的数据%s \r\n, aWriteBuf); // printf 写入的数据; 注意这里以字符串方式显示如果数据是非ASCII可显示范围则无法显示}else{printf(写入失败 \r\n); // 写入失败printf(错误编号 %d\r\n, f_res); // printf 错误编号}f_close(myFile); // 不再读写关闭文件}else{printf(打开文件 失败: %d\r\n, f_res);}// 3、读取测试打开已有文件读取其数据printf(3、读取测试打开刚才的文件读取其数据 ****** \r\n);f_res f_open(myFile, 0:text.txt, FA_OPEN_EXISTING | FA_READ); // 打开文件; 参数文件对象、路径和名称、操作模式; FA_OPEN_EXISTING只打开已存在的文件; FA_READ: 以只读的方式打开文件if (f_res FR_OK){printf(打开文件 成功 \r\n);f_res f_read(myFile, aReadData, sizeof(aReadData), num); // 从文件中读取数据; 参数文件对象、数据缓冲区、请求读取的最大字节数、实际读取的字节数if (f_res FR_OK){printf(读取数据 成功 \r\n);printf(已读取字节数%d \r\n, num); // printf 实际读取的字节数printf(读取到的数据%s\r\n, aReadData); // printf 实际数据; 注意这里以字符串方式显示如果数据是非ASCII可显示范围则无法显示}else{printf(读取 失败 \r\n); // printf 读取失败printf(错误编号%d \r\n, f_res); // printf 错误编号}}else{printf(打开文件 失败 \r\n); // printf 打开文件 失败printf(错误编号%d\r\n, f_res); // printf 错误编号}f_close(myFile); // 不再读写关闭文件f_mount(NULL, 0:, 1); // 不再使用文件系统取消挂载文件系统 } 编写完成后位置如下图 第二步编写SD卡信息获取函数 在刚才函数的下方再编写一个SD卡信息获取函数建议直接复制。 这个函数的作用是获取SD卡的基础信息、块数量 、块大小、卡容量。 // 获取SD卡信息 // 注意: 本函数需要在f_mount()执行后再调用因为CubeMX生成的FatFs代码, 会在f_mount()函数内对SD卡进行初始化 void SDCardInfo(void) {HAL_SD_CardInfoTypeDef pCardInfo {0}; // SD卡信息结构体uint8_t status HAL_SD_GetCardState(hsd); // SD卡状态标志值if (status HAL_SD_CARD_TRANSFER){HAL_SD_GetCardInfo(hsd, pCardInfo); // 获取 SD 卡的信息printf(\r\n);printf(*** 获取SD卡信息 *** \r\n);printf(卡类型%d \r\n, pCardInfo.CardType); // 类型返回0-SDSC、1-SDHC/SDXC、3-SECUREDprintf(卡版本%d \r\n, pCardInfo.CardVersion); // 版本返回0-CARD_V1、1-CARD_V2printf(块数量%d \r\n, pCardInfo.BlockNbr); // 可用的块数量printf(块大小%d \r\n, pCardInfo.BlockSize); // 每个块的大小; 单位字节printf(卡容量%lluG \r\n, ((uint64_t)pCardInfo.BlockSize * pCardInfo.BlockNbr) / 1024 / 1024 / 1024); // 计算卡的容量; 单位GB} } 第三步在 main()函数内调用刚才那两个函数 调用位置如下图 至此代码编写完成可以编译、烧录了。 四、实验效果 程序运行后串口助手输出如下 如有错漏 望指正~~~
http://www.hkea.cn/news/14469298/

相关文章:

  • php网站链接支付宝青之峰做网站
  • xcode 网站开发哪有学电脑培训班
  • 企业组织网站建设方案wordpress single_post_title
  • 微商手机网站模板企业域名是什么
  • 足球比方类网站开发重庆餐饮网站设计
  • wordpress装修套餐网站源码中山网站建设文化如何
  • 枣庄机关建设网站wordpress求助
  • 专业的河南网站建设公司网站的二次开发
  • 质感设计网站企业官方网站的建设
  • metro网站模板好网站建设公司地址
  • 建设银行网站首页是多少深圳的网站建设公司价格
  • 做网站如何与腾讯合作前端页面设计
  • 如何在一个空间做2个网站怎么做记步数的程序到网站
  • 哪家做网站的公司五金配件网站建设报价
  • 可以做公众号背景图的网站互联网公司排名2024
  • 金品诚企网站建设辽宁建设工程网
  • 网站备案个人备案公司网站答题网站开发教程
  • x网站免费模板免费下载wordpress判断ios或安卓
  • 如果在各大网站做免费的网络推广郑州直播app开发
  • 国外做婚纱摄影店设计的网站wordpress如何添加二级菜单
  • 石家庄教育平台网站建设青海建设工程信息网站
  • 建站哪家公司比较好而且不贵只要做好关键词优化
  • 建立网站的市场价格网络营销企业网站优化
  • 网站模板怎么制作aso优化什么意思是
  • wordpress建站seowordpress 评论模板
  • 嘉兴企业网站模板填写电话的广告
  • 做酒店需要怎么上网站潍坊专业网站建设最新报价
  • 长春网易网站建设如何撰写网站建设方案书
  • 项目网站开发建设网官网首页
  • 举报网站建设情况汇报网站建设兼职劳务协议书