STM32 SDIO接口传输中的错误处理和中断优化技巧

在 STM32 的 SDIO 接口传输中,错误处理和中断优化是确保传输稳定和可靠性的重要方面。下面将介绍一些常用的错误处理和中断优化技巧,并给出相应的代码示例。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

1. 错误处理:
   在进行 SDIO 传输时,可能会出现各种错误情况,如数据传输超时、数据校验错误等。以下是一些常见的错误处理技巧:

- 超时错误处理:
  如果数据传输超时,可以设置一个定时器,当传输时间超过设定的阈值时,中止传输并进行相应的错误处理。

```c
// 定时器设置
uint32_t timeout = 0;
uint32_t timeoutThreshold = 1000;  // 设定阈值为 1000ms

// 数据传输超时检测
while (!(SDIO->STA & SDMMC_STA_DATAEND)) {
  if (timeout > timeoutThreshold) {
    // 传输超时处理...
    
    // 中止传输
    SDIO->DCTRL |= SDMMC_DCTRL_DTEN;
    break;
  }
  timeout++;
}
```

- 数据校验错误处理:
  如果在数据传输过程中出现数据校验错误,可以通过检查 SDIO 控制器状态寄存器(STA 寄存器)的相应标志位来判断,并进行相应的错误处理。

```c
if (SDIO->STA & SDMMC_STA_DCRCFAIL) {
  // 数据校验失败处理...
  
  // 清除标志位
  SDIO->ICR = SDMMC_ICR_DCRCFAILC;
}
```

2. 中断优化:
   在 SDIO 传输过程中,使用中断机制可以提高传输效率和相应时间。以下是一些常见的中断优化技巧:

- DMA 传输完成中断:
  当 DMA 传输完成后,可以通过 DMA 的 TC(传输完成)标志位进行中断处理,减少 CPU 的轮询时间和资源占用。

```c
void DMA2_Stream3_IRQHandler() {
  if (DMA2->LISR & DMA_LISR_TCIF3) {
    // DMA 传输完成处理...
    
    // 清除标志位
    DMA2->LIFCR = DMA_LIFCR_CTCIF3;
  }
}
```

- 数据接收中断:
  在数据接收完成后,可以通过 SDIO 控制器的 RXDR(接收数据寄存器非空)标志位进行中断处理,实时处理接收到的数据。

```c
void SDIO_IRQHandler() {
  if (SDIO->STA & SDMMC_STA_RXDR) {
    // 数据接收中断处理...
    
    // 读取数据
    uint32_t data = SDIO->FIFO;  // 从 FIFO 中读取数据
    
    // 清除标志位
    SDIO->ICR = SDMMC_ICR_RXDRC;
  }
}
```

- 数据发送中断:
  在数据发送完成后,可以通过 SDIO 控制器的 TXDR(发送数据寄存器非空)标志位进行中断处理,实时发送需要传输的数据。

```c
void SDIO_IRQHandler() {
  if (SDIO->STA & SDMMC_STA_TXDR) {
    // 数据发送中断处理...
    
    // 发送数据
    SDIO->FIFO = data;  // 将数据写入 FIFO
    
    // 清除标志位
    SDIO->ICR = SDMMC_ICR_TXDRC;
  }
}
```

通过以上技巧,可以优化 SDIO 传输过程中的错误处理和中断处理,提高传输的稳定性和效率。根据具体需求,可以结合实际应用场景进行灵活调整和扩展。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/354708.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis 持久化详解:RDB 与 AOF 的配置、触发机制和实际测试

什么是持久化? 就是 Redis 将内存数据持久化到硬盘,避免从数据库恢复数据。之所以避免从数据库恢复数据是因为后端数据通常有性能瓶颈,大量数据从数据库恢复可能会给数据库造成巨大压力。 Redis 持久化通常有 RDB 和 AOF 两种方式&#xff…

VMware虚拟机部署Linux Ubuntu系统

本文介绍基于VMware Workstation Pro虚拟机软件,配置Linux Ubuntu操作系统环境的方法。 首先,我们需要进行VMware Workstation Pro虚拟机软件的下载与安装。需要注意的是,VMware Workstation Pro软件是一个收费软件,而互联网中有很…

一道CTFsql注入的问题

打开页面一个登录框,我甚至都没先弱口令登录,直接开始sql测试,结果测到最后发现没有,直接admin/admin就就去了,下次遇到登录框请先测试弱口令,ok? 登录成功后: 这句话提示中提到了…

linux(进程概念)

目录 前言: 正文 冯诺依曼体系结构 操作系统 (Operator System) 概念 目的 定位 如何理解“管理” 进程组织 基本概念 内核数据结构 代码和数据 查看进程 ps指令 top指令 父子进程 fork创建进程 小结: 前…

【Web】云服务器的购买与使用

目录 一、云服务器的选择 二、配置 一、云服务器的选择 腾讯云、阿里云都可以 有首次试用、学生打折啥的。 租借时间、配置都可以自行选择 二、配置 先进行重置密码、拍摄快照

HCS 华为云Stack产品组件

HCS 华为云Stack产品组件 Cloud Provisioning Service(CPS) 负责laas的云平台层的部署和升级是laas层中真正面向硬件设备,并将其池化软件化的部件。 Service OM 资源池(计算/存储/网络)以及基础云服务(ECS/EVS/PC)的管理工具。 ManageOne ManageOne包括服务中心…

【服务器Midjourney】创建部署Midjourney网站

目录 🌺【前言】 🌺【准备】 🌺【宝塔搭建MJ】 🌼1. 给服务器添加端口 🌼2. 使用Xshell连接服务器 🌼3. 安装docker 🌼4. 安装Midjourney程序 🌼5. 绑定域名+申请SSL证书 🌼6. 更新网站

python tkinter 界面开发基本结构

python tkinter 界面开发基本结构 # -*- coding:utf-8 -*- import tkinter as tkroot_window tk.Tk() # 设置窗口title root_window.title(tkinter 界面开发) # 设置窗口大小:宽x高,注,此处不能为 "*",必须使用 "x" root_window.geometry(600x500) # 更改…

C++: 内联函数

目录 概念: 与宏的对比: 函数膨胀: 内联函数的特性: 概念: 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调 用建立栈帧的开销,内联函数…

Git分布式版本控制工具

1、目标 了解Git基本概念 能够概述git工作流程 能够使用Git常用命令 熟悉Git代码托管服务 能够使用idea操作git 2、概述 2.1、开发中的实际场景 场景一:备份 小明负责的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏&…

算法基础课-数据结构

单链表 题目链接:826. 单链表 - AcWing题库 思路:AcWing 826. 单链表---图解 - AcWing 需要注意的点在于理解ne[idx] head,idx表示当前的点,意思是将当前的点链到头结点的后面,再将头结点链在当前idx的前面。 #inc…

2024-01-24-redis4

秒杀活动 需求:库存中有10件商品 商品的信息自定义 同时有100个人去抢购(这里100个人的抢购由jmeter来模拟) jmeter的使用 在idea中将后台代码实现 package org.aaa.controller;import org.apache.commons.lang3.StringUtils; import org.sp…

goland课程管理(6)

项目目录结构如下图所示: core包下面: class.go package coreimport "github.com/gin-gonic/gin"func Class1(ctx *gin.Context) {}course.go package coreimport (. "cookie/database". "cookie/model""fmt"…

服务端开发小记02——Maven

这里写目录标题 Maven简介Maven在Linux下的安装Maven常用命令 Maven简介 Apache Maven Project是一个apache的开源项目,是用于构建和管理Java项目的工具包。 用Maven可以方便地创建项目,基于archetype可以创建多种类型的java项目;Maven仓库…

华为三层交换机与防火墙对接配置上网示例

三层交换机与防火墙对接上网配置示例 组网图形 图1 三层交换机与防火墙对接上网组网图 三层交换机简介配置注意事项组网需求配置思路操作步骤配置文件 三层交换机简介 三层交换机是具有路由功能的交换机,由于路由属于OSI模型中第三层网络层的功能,所以…

VMware 虚拟机环境下的ubuntu 上安装mysql,并能远程访问数据库

需求:为了实现在linux上模拟服务器跑代码,并存储在mysql上,通过远程可视化mysql数据库软件查看linux上mysql数据库数据的实时动态。 1. 虚拟机和ubuntu的安装 这里我选择的是VMware workstation-v14, ubuntu-18.04.1。至于体流程网上很多&a…

基于Java的高校运动会管理系统的设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言 详细视频演示 具体实现截图 技术栈 后端框架SpringBoot 前端框架Vue 持久层框架MyBaitsPlus 系统测试 系统测试目的 系统功能测试 系统测试结论 代码参考 数据库参考 源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、…

Django ORM 框架中的表关系,你真的弄懂了吗?

Django ORM 框架中的表关系 前言 Django ORM 框架中的表关系 为了说清楚问题,我们设计一个 crm 系统,包含五张表: 1.tb_student 学生表 2.tb_student_detail 学生详情表 3.tb_salesman 课程顾问表 4.tb_course 课程表 5.tb_entry 报名表…

Vue2.0+Element实现日历组件

(壹)博主介绍 🌠个人博客: 尔滨三皮⌛程序寄语:木秀于林,风必摧之;行高于人,众必非之。 (贰)文章内容 1、安装依赖 npm install moment2.29.4 --savenpm install lunar0.0.3 --savenpm install lunar-java…

C语言数据结构——链表

(图像由AI生成) 0.前言 在计算机科学中,数据结构是存储和组织数据的一种方式,它不仅影响数据的存储,也影响数据的检索和更新效率。C语言,作为一种经典的编程语言,提供了灵活的方式来处理数据…