DIO

本文详细介绍了DIO接口的两种访问方式:ISA访问方式和IO访问方式,并重点讲解了IO访问方式下的寄存器配置方法及GPIO8的具体应用实例。

这篇博文是接着前面的LPC,SIO继续说的,DIO,直接IO口,其作用就是通过和继电器的配合使用以实现控制。

DIO有两种访问方式,一种是ISA的访问方式,一种为IO的访问方式。
ISA的访问方式在前面SIO中已经说明了,接下来需要介绍的是IO的访问方式
先介绍几个相关的寄存器:




我之前所做的dio访问的主板,是利用gpio 8来配置DIO的,不同的主板会有所不同,应该根据电路图以分别。



从寄存器当中可以读出,GPIO8的DIO访问方式地址为基地址加上偏移量0x02。

他的基地址可以通过ru读出来,如图,其基地址为0x02A0。


当然也可以通过对sio进行访问该寄存器,一样可以读出来。


下面说一下关于DIO的三个重要寄存器:








写0x02A2相当于ISA访问方式的0x89写操作
读0x02A2相当于ISA访问方式的0x8A读操作
0x02A2是基地址0x2A0加上GPIO8的偏移量2。
DIO访问方式的部分code如下


在不同类型的主板上,用作DIO的GPIO可能不同,有些GPIO需要对全局寄存器行设置

0x27 bit 5



0x27寄存器为全局寄存器,对其进行配置可以实现device的不同功能,如,需要将gpio8
x作为gpio实现,其寄存器配置应为:


我的程序里面没有配,因为在bios里面已经配置过了,但个人强烈建议,在使用时加上,这样可以避免错误。



Thanks for your reading.

04-01
### 关于 Dio 库的使用说明 Dio 是 Flutter 中非常流行的 HTTP 客户端库,支持拦截器、全局配置、超时设置等功能。以下是关于 Dio 的一些核心概念及其使用方法。 #### 1. 异常处理方式的变化 在新版本中,Dio 的异常处理机制发生了改变,主要通过 `DioException` 类来捕获和处理错误,而不是之前的 `DioError`[^1]。这意味着开发者需要更新他们的代码逻辑以适配这种变化。 #### 2. 发起 POST 请求示例 以下是一个发起 POST 请求的具体实现案例: ```dart import 'package:dio/dio.dart'; void main() async { try { Dio dio = Dio(); Response response; // 设置请求参数 Map<String, dynamic> params = { "id": 1, "name": "dio1", "method": "post" }; // 发送 POST 请求 response = await dio.post( "http://test", queryParameters: params ); print(response.data); } on DioException catch (e) { // 捕捉并处理异常 print(e.message); } } ``` 上述代码展示了如何利用 Dio 进行一次标准的 POST 请求,并包含了基本的异常捕捉流程[^2]。 #### 3. 封装网络请求的意义 通常情况下,在实际项目开发过程中会将网络请求功能进行封装后再调用。这样做的好处在于能够提升代码复用率以及便于后期维护或更换底层框架[^3]。例如可以通过创建一个统一的服务类来进行 GET/POST 等多种类型的请求操作。 #### 4. 在 Flutter 中封装 Dio 工具类 下面提供了一种简单实用的方法用于构建自己的 Dart 文件作为辅助工具: ```dart class HttpService { static final Dio _dio = Dio(); static Future<dynamic> post(String url, {Map<String, dynamic>? data}) async { try { var result = await _dio.post(url, data: data); return result.data; } on DioException catch (e){ rethrow; } } static Future<dynamic> get(String url,{Map<String,dynamic>? queryParams} )async{ try{ var respose=await _dio.get(url ,queryParameters :queryParams); return respose.data ; }on DioException catch(ex){ rethrow ; } } } // 调用样例 HttpService.post('/api/example',data:{'key':'value'}); HttpService.get('/api/sample',{}); ``` 此段脚本定义了一个名为 `HttpService` 的静态类别,其中包含两个公共函数分别代表发送同步型别的 GET 和 POST 方法给服务器通讯[^4]。 #### 5. 使用场景举例——Post 请求的应用实例 当涉及到表单提交或者上传文件之类的任务时,则需要用到 POST 动作。比如在一个电商应用程序里新增商品信息就是典型的例子之一[^5]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值