【奇葩瑞萨-004】RX系列单片机的GPIO初始化
RX系列单片机的GPIO初始化
- 与IO口相关的寄存器
- 端口(PORT)寄存器
- 端口功能控制(MPC)寄存器
- MPC.PmnFPS的设置过程
- MPC寄存器设置注意事项
- 端口Pmn的初始化
- 不同端口模式下,PORT、MCP寄存器的配置顺序
- 感想:与STM32 GPIO配置的对比
以RX66T单片机和RX130单片机为例。
与IO口相关的寄存器
端口的配置,就是写入端口配置相关寄存器的过程。
就瑞萨RX系列单片机而言,包括PORT寄存器和MPC寄存器。
端口(PORT)寄存器
- PDR:GPIO方向寄存器,读/写型
1:输出
0:输入(默认值)
PORTm.PDR.BITn对应Pmn。
有些端口只内建了输入逻辑门电路,即便将其PDR位设置为1,也是无效的。
不存在的端口只可配置PDR(目的:省电),至于①哪些端口不存在、②PDR该配置成0还是1,就要参考目标单片机的数据手册“Initialization of the Port Direction Register (PDR)”章节。
-
PODR:GPIO输出电平寄存器,读/写型
1:输出H
0:输出L(默认值)
PORTm.PODR.BITn对应Pmn。
有些端口只内建了输入逻辑门电路,即便将其PODR位设置为1,也不能输出。 -
PIDR:端口输入电平寄存器,只读型
1:输入了H
0:输入了L
PORTm.PIDR.BITn对应Pmn。
不论Pmn的PDR位和PMR位如何设置,只要其MPC寄存器没有被配置为模拟模式(0x80),Pmn的瞬时输入电平就总能通过PIDR读出。 -
PMR:端口模式寄存器,读/写型
1:外设模式
0:GPIO模式(默认值)
PORTm.PMR.BITn对应Pmn。 -
ODRy(y = 0, 1):端口开漏寄存器,读/写型
1:CMOS输出
0:NMOS开漏输出(默认值)
PORTm.ODR0/1.BITx与Pmn的对应关系是
| PORTm.ODR0 | BIT6 | BIT4 | BIT2 | BIT0 |
|---|---|---|---|---|
| Pmn | Pm3 | Pm2 | Pm1 | Pm0 |
| PORTm.ODR1 | BIT6 | BIT4 | BIT2 | BIT0 |
| Pmn | Pm7 | Pm6 | Pm5 | Pm4 |
-
PCR:端口输入上拉寄存器,读/写型
1:有内部上拉
0:无内部上拉(默认值)
PORTm.PCR.BITn对应Pmn。
如果端口设置为外部总线端口(WAIT端口除外)、通用输出口,外设输出口,那么PCR的设置是无效的。
不存在端口不可配置PCR位,必须保留默认值0。 -
暂时不表:DSCR,DSCR2:端口驱动能力寄存器
端口功能控制(MPC)寄存器
-
PWPR:MPC写保护寄存器,读/写型
BIT7:PFSWE写保护位 0:可写入 1:不可写入
BIT6:FPS写保护位 0:可写入 1:不可写入
其它:保留位,必须保留默认值0。 -
FPS:端口功能寄存器,读/写型
BIT7:ASEL,模拟功能选择位
BIT6:ISEL,EXTI功能选择位
BIT5~0:PSEL,外设功能选择位
MPC.PmnFPS对应Pmn。
不同Pmn的上述BIT支持情况不同,应参考目标单片机的数据手册“Multi-Function Pin Controller (MPC)–Register Descriptions”章节。不支持的BIT位不可设定,必须保留默认值0。 -
暂时不表:PFCSE
-
暂时不表:PFCSS0
-
暂时不表:PFAOE0、PFAOE1
-
暂时不表:PFBCR0、PFBCR1、PFBCR2、PFBCR4
MPC.PmnFPS的设置过程
- 复位PMR位
- 设定外设端口的输入/输出方向
- 关闭FPS写保护
- 整体写入PmnFPS
- 打开FPS写保护
- 根据需要,置位PMR位
MPC寄存器设置注意事项
- 设置PmnFPS前,必须确保Pmn的PMR为0;否则,会有不可预料的信号在Pmn输入或输出。
- PmnFPS的设定值必须参照芯片手册。如果写入值超出手册的范围,则不能保证写入操作的正确性。
- 不能把同一个外设功能分配给多个引脚。比如一个UART只能有1个TX通道,不能有多个TX通道。
- 凡是模拟模式端口,要先设置为普通输入(先令PORTm.PMR.BITn=0,后令PORTm.PDR.BITn=0),再令PmnFPS的ASEL位为1(MPC.PmnFPS=0x80),以避免精度下降。
- PMR、PDR、PmnFPS的组合是有限的,如下:
| 状态 | PMR | PDR | FPS.ASEL | FPS.ISEL | FPS.PSEL | 注意 |
|---|---|---|---|---|---|---|
| 复位后 | 0 | 0 | 0 | 0 | 000000b | 复位后端口是普通输入口 |
| 普通输入 | 0 | 0 | 0 | 0/1 | x | |
| 普通输出 | 0 | 1 | 0 | 0 | x | |
| 外设功能 | 1 | x | 0 | 0/1 | 外设功能 | |
| 中断输入 | 1 | 0 | 0 | 1 | x | |
| 不可屏蔽中断 | x | x | x | x | x | |
| 模拟模式 | 0 | 0 | 1 | x | x | |
| 触摸 | 1 | 0 | 0 | 0 | 11001b | 可当作一种外设功能 |
| EXTAL/XTAL | 0 | 0 | x | x | x |
注:x表示不需要设定,推荐保留0。
端口Pmn的初始化
参考意法半导体STM8S单片机的标准库函数来设计,端口初始化函数提供3个参数
分别是目标端口编号,端口模式,端口MPC设置
void GPIO_Init(gpio_pin_t pin, gpio_mode_t mode, uint8_t mpc_config);
//pin: 想要设定的端口序号Pmn
//mode: 要设定的端口模式
//mpc_config:要设定的PmnFPS
注意:PmnFPS需要在MPC解锁时才可写入
不同端口模式下,PORT、MCP寄存器的配置顺序
- 设置为复位后的状态
| 寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
|---|---|---|---|---|---|---|
| 设定值 | 0 | 0 | 0 | 0 | 0x00 | - |
- 设置为浮空输入&无中断
| 寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
|---|---|---|---|---|---|---|
| 设定值 | 0 | 0 | 0 | 0 | 0x00 | - |
- 设置为上拉输入&无中断
| 寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
|---|---|---|---|---|---|---|
| 设定值 | 0 | 0 | 0 | 1 | 0x00 | - |
- 设置为普通输出H
| 寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
|---|---|---|---|---|---|---|
| 设定值 | 0 | 1 | 1 | 0 | 0x00 | - |
- 设置为普通输出L
| 寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
|---|---|---|---|---|---|---|
| 设定值 | 0 | 0 | 1 | 0 | 0x00 | - |
- 设置为外设功能
| 寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
|---|---|---|---|---|---|---|
| 设定值 | 0 | 0 | 0 | 0 | 查表 | 1 |
- 设置为模拟模式
| 寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
|---|---|---|---|---|---|---|
| 设定值 | 0 | 0 | 0 | 0 | 0x80 | - |
※1:"-"表示跳过
※2:应按照表格中从左到右的顺序设置寄存器
感想:与STM32 GPIO配置的对比
- 比照STM32,RX的PMR设置,相当于32上设置AFIO。
- RX比STM32的端口设置多了MPC,即“IO挂靠在哪个外设上”的设置。
- 在RX上,当某端口作为UART-TX功能时,在发送空闲时,似乎要设置它为普通输出H,才能保证空闲时TX线路维持高电平(很离谱?)
相关文章:
【奇葩瑞萨-004】RX系列单片机的GPIO初始化
RX系列单片机的GPIO初始化 与IO口相关的寄存器端口(PORT)寄存器端口功能控制(MPC)寄存器MPC.PmnFPS的设置过程MPC寄存器设置注意事项 端口Pmn的初始化不同端口模式下,PORT、MCP寄存器的配置顺序 感想:与STM…...
【Git】Git切换地址
如何切换git代码地址? 1、查看当前远程 url git remote -v执行命令后,可以看见当前有2个URL。 远程 URL 在一般情况下有两个,分别是 fetch 和 push。 fetch URL 是用于从远程仓库获取最新版本的数据。当您运行 git fetch 命令时…...
elementUI点击当前行更改当前行状态(数据更新DOM不更新问题解决)
<template slot-scope"{row,$index}" slot"menu"><el-button v-if"row.editable" type"text" size"small" click"changeStatus(row,$index)">编辑</el-button><el-button v-else type"…...
python爬取阿里巴巴商品页面数据api
以下是使用Python爬取商品页面的示例代码: import requests from bs4 import BeautifulSoup# 定义要爬取的商品链接 url https://www.alibaba.com/product-detail/High-Quality-Custom-Logo-Printing-Black_60802527914.html# 发送请求 response requests.get(ur…...
angular-mat-select 多选 实现按选择顺序排序
mat-select 正常情况下,多选后,已选项是按列表顺序进行排序,如果我想实现按照点击项目的顺序进行排序,我该如何做呢? [参考网址](Angular order of selected option in multiple mat-select - Stack Overflow) sortComparator是Angular Material中mat-select组件的一个属…...
爬虫010_列表高级_添加_append_extend_修改_查询_in_not int_删除_del_pop_remove---python工作笔记029
然后再来看列表操作 首先添加append方法 然后插入,坐标是要插入的下标,右边是插入的内容 看结果 1,2,3,4,5,6 然后这个extend,是逐个插入,放到后边 然后是修改,直接对下标赋值 看结果</...
微服务服务拆分和远程调用
一、服务架构比较 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目&#x…...
MySQL8.1源码安装与部署
官方文档 https://downloads.mysql.com/archives/community/https://dev.mysql.com/doc/refman/8.1/en/binary-installation.html官方文档源码安装步骤 # Preconfiguration setup $> groupadd mysql $> useradd -r -g mysql -s /bin/false mysql # Beginning of source-b…...
algebraic reconstruction technique(ART)
数值线性代数的Kaczmarz方法被Gordon,Bender,Herman引入至CT重建中,称为ART方法。 A x b Axb Axb A A A为 m n m\times n mn的稀疏矩阵。 A A A的元素 a i j a_{ij} aij表示像素 j j j对射线 i i i投影的贡献。 A A A的行向量 a i T a…...
oracle11g安装
oracle11g安装 安装环境 虚拟机版本:centos7.9 虚拟机ip:192.168.5.144 oracle版本:11g oracle安装包:p13390677_112040_Linux-x86-64_1of7.zip,p13390677_112040_Linux-x86-64_2of7.zip,p13390677_11204…...
网络防御(9)
.一、SSL工作过程是什么? SSL位于应用层和传输层之间,它能够为基于TCP等可靠连接的应用层协议提供安全性保证。SSL协议本身分为两层: 上层为SSL握手协议(SSL handshake protocol)、SSLpassword变化协议(S…...
Spring核心与设计思想
文章目录 Spring是什么?认识Spring IoC容器传统的开发图书管理系统设计可能导致的问题 使用IoC容器 Spring是什么? Spring是一个用于构建企业级应用程序的开源框架,它为Java开发者提供了一种简化和加速应用程序开发的方式。Spring框架提供了…...
【stream的使用】使用stream.filter过滤List对象
Stream初相识 概括讲,可以将Stream流操作分为3种类型: 创建Stream Stream中间处理 终止Steam 每个Stream管道操作类型都包含若干API方法,先列举下各个API方法的功能介绍。 开始管道 主要负责新建一个Stream流,或者基于现有的数组…...
Flink多流处理之connect拼接流
Flink中的拼接流connect的使用其实非常简单,就是leftStream.connect(rightStream)的方式,但是有一点我们需要清楚,使用connect后并不是将两个流给串联起来了,而是将左流和右流建立一个联系,作为一个大的流,并且这个大的流可以使用相同的逻辑处理leftStream和rightStream,也可以…...
对任意类型数都可以排序的函数:qsort函数
之前我们学习过冒泡排序: int main() {int arr[] { 9,7,8,6,5,4,3,2,1,0 };int sz sizeof(arr)/sizeof(arr[0]);int i 0;for (i 0; i < sz-1; i) {int j 0;for (j 0; j < sz-1-i; j) {if (arr[j] > arr[j 1]){int temp 0;temp arr[j];arr[j] ar…...
vue数据更新table内容不更新解决方法
场景: table组件绑定的数据变化时,页面没有重新渲染,常见于子组件中使用table组件 原理: 创建实例时 数组在vue中没有被监听到,属于非响应式数据,数组的下标变化无法监听到 解决方式: <e…...
合宙Air724UG LuatOS-Air script lib API--record
record Table of Contents record record.start(seconds, cbFnc, type, quality, rcdType, format, streamRptLen) record.stop(cbFnc) record.getFilePath() record.getData(offset, len) record.getSize() record.delete() record.exists() record.isBusy() record 模块功能&…...
基于Vgg16和Vgg19深度学习网络的步态识别系统matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ................................................................ % 设置训练选项options …...
Java分布式微服务3——Docker
文章目录 Docker介绍安装DockerDocker基础操作Docker服务的启动镜像命令容器命令1. 从docker hub去查看Nginx容器的运行命令2. 查看所有容器状态3. 查看容器日志4. 进入Nginx容器执行命令,修改Html内容,添加“Hello World”5. 停止与开始容器6. 删除容器…...
js字符串替换
在JavaScript中,字符串替换 有多种方法,下面介绍其中一些比较常用的方法。 使用replace()方法、 replace()方法用于在字符串中查…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
