【奇葩瑞萨-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()方法用于在字符串中查…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门  {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
