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

【奇葩瑞萨-004】RX系列单片机的GPIO初始化

RX系列单片机的GPIO初始化

  • 与IO口相关的寄存器
    • 端口(PORT)寄存器
    • 端口功能控制(MPC)寄存器
      • MPC.PmnFPS的设置过程
      • MPC寄存器设置注意事项
  • 端口Pmn的初始化
    • 不同端口模式下,PORT、MCP寄存器的配置顺序
  • 感想:与STM32 GPIO配置的对比

以RX66T单片机和RX130单片机为例。

与IO口相关的寄存器

端口的配置,就是写入端口配置相关寄存器的过程。
就瑞萨RX系列单片机而言,包括PORT寄存器和MPC寄存器。

端口(PORT)寄存器

  1. PDR:GPIO方向寄存器,读/写型
    1:输出
    0:输入(默认值)
    PORTm.PDR.BITn对应Pmn。

有些端口只内建了输入逻辑门电路,即便将其PDR位设置为1,也是无效的。
不存在的端口只可配置PDR(目的:省电),至于①哪些端口不存在、②PDR该配置成0还是1,就要参考目标单片机的数据手册“Initialization of the Port Direction Register (PDR)”章节。

  1. PODR:GPIO输出电平寄存器,读/写型
    1:输出H
    0:输出L(默认值)
    PORTm.PODR.BITn对应Pmn。
    有些端口只内建了输入逻辑门电路,即便将其PODR位设置为1,也不能输出。

  2. PIDR:端口输入电平寄存器,只读型
    1:输入了H
    0:输入了L
    PORTm.PIDR.BITn对应Pmn。
    不论Pmn的PDR位和PMR位如何设置,只要其MPC寄存器没有被配置为模拟模式(0x80),Pmn的瞬时输入电平就总能通过PIDR读出。

  3. PMR:端口模式寄存器,读/写型
    1:外设模式
    0:GPIO模式(默认值)
    PORTm.PMR.BITn对应Pmn。

  4. ODRy(y = 0, 1):端口开漏寄存器,读/写型
    1:CMOS输出
    0:NMOS开漏输出(默认值)
    PORTm.ODR0/1.BITx与Pmn的对应关系是

PORTm.ODR0BIT6BIT4BIT2BIT0
PmnPm3Pm2Pm1Pm0
PORTm.ODR1BIT6BIT4BIT2BIT0
PmnPm7Pm6Pm5Pm4
  1. PCR:端口输入上拉寄存器,读/写型
    1:有内部上拉
    0:无内部上拉(默认值)
    PORTm.PCR.BITn对应Pmn。
    如果端口设置为外部总线端口(WAIT端口除外)、通用输出口,外设输出口,那么PCR的设置是无效的。
    不存在端口不可配置PCR位,必须保留默认值0。

  2. 暂时不表:DSCR,DSCR2:端口驱动能力寄存器

端口功能控制(MPC)寄存器

  1. PWPR:MPC写保护寄存器,读/写型
    BIT7:PFSWE写保护位 0:可写入 1:不可写入
    BIT6:FPS写保护位 0:可写入 1:不可写入
    其它:保留位,必须保留默认值0。

  2. FPS:端口功能寄存器,读/写型
    BIT7:ASEL,模拟功能选择位
    BIT6:ISEL,EXTI功能选择位
    BIT5~0:PSEL,外设功能选择位
    MPC.PmnFPS对应Pmn。
    不同Pmn的上述BIT支持情况不同,应参考目标单片机的数据手册“Multi-Function Pin Controller (MPC)–Register Descriptions”章节。不支持的BIT位不可设定,必须保留默认值0。

  3. 暂时不表:PFCSE

  4. 暂时不表:PFCSS0

  5. 暂时不表:PFAOE0、PFAOE1

  6. 暂时不表:PFBCR0、PFBCR1、PFBCR2、PFBCR4

MPC.PmnFPS的设置过程

  1. 复位PMR位
  2. 设定外设端口的输入/输出方向
  3. 关闭FPS写保护
  4. 整体写入PmnFPS
  5. 打开FPS写保护
  6. 根据需要,置位PMR位

MPC寄存器设置注意事项

  1. 设置PmnFPS前,必须确保Pmn的PMR为0;否则,会有不可预料的信号在Pmn输入或输出。
  2. PmnFPS的设定值必须参照芯片手册。如果写入值超出手册的范围,则不能保证写入操作的正确性。
  3. 不能把同一个外设功能分配给多个引脚。比如一个UART只能有1个TX通道,不能有多个TX通道。
  4. 凡是模拟模式端口,要先设置为普通输入(先令PORTm.PMR.BITn=0,后令PORTm.PDR.BITn=0),再令PmnFPS的ASEL位为1(MPC.PmnFPS=0x80),以避免精度下降。
  5. PMR、PDR、PmnFPS的组合是有限的,如下:
状态PMRPDRFPS.ASELFPS.ISELFPS.PSEL注意
复位后0000000000b复位后端口是普通输入口
普通输入0000/1x
普通输出0100x
外设功能1x00/1外设功能
中断输入1001x
不可屏蔽中断xxxxx
模拟模式001xx
触摸100011001b可当作一种外设功能
EXTAL/XTAL00xxx

注: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寄存器的配置顺序

  1. 设置为复位后的状态
寄存器PMRPODRPDRPCRPmnPFSPMR
设定值00000x00-
  1. 设置为浮空输入&无中断
寄存器PMRPODRPDRPCRPmnPFSPMR
设定值00000x00-
  1. 设置为上拉输入&无中断
寄存器PMRPODRPDRPCRPmnPFSPMR
设定值00010x00-
  1. 设置为普通输出H
寄存器PMRPODRPDRPCRPmnPFSPMR
设定值01100x00-
  1. 设置为普通输出L
寄存器PMRPODRPDRPCRPmnPFSPMR
设定值00100x00-
  1. 设置为外设功能
寄存器PMRPODRPDRPCRPmnPFSPMR
设定值0000查表1
  1. 设置为模拟模式
寄存器PMRPODRPDRPCRPmnPFSPMR
设定值00000x80-

※1:"-"表示跳过
※2:应按照表格中从左到右的顺序设置寄存器

感想:与STM32 GPIO配置的对比

  1. 比照STM32,RX的PMR设置,相当于32上设置AFIO。
  2. RX比STM32的端口设置多了MPC,即“IO挂靠在哪个外设上”的设置。
  3. 在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 命令时&#xf…...

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爬取商品页面的示例代码&#xff1a; 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,是逐个插入,放到后边 然后是修改,直接对下标赋值 看结果</...

微服务服务拆分和远程调用

一、服务架构比较 单体架构&#xff1a;简单方便&#xff0c;高度耦合&#xff0c;扩展性差&#xff0c;适合小型项目。例如&#xff1a;学生管理系统 分布式架构&#xff1a;松耦合&#xff0c;扩展性好&#xff0c;但架构复杂&#xff0c;难度大。适合大型互联网项目&#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&#xff0c;Bender&#xff0c;Herman引入至CT重建中&#xff0c;称为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安装 安装环境 虚拟机版本&#xff1a;centos7.9 虚拟机ip&#xff1a;192.168.5.144 oracle版本&#xff1a;11g oracle安装包&#xff1a;p13390677_112040_Linux-x86-64_1of7.zip&#xff0c;p13390677_112040_Linux-x86-64_2of7.zip&#xff0c;p13390677_11204…...

网络防御(9)

.一、SSL工作过程是什么&#xff1f; SSL位于应用层和传输层之间&#xff0c;它能够为基于TCP等可靠连接的应用层协议提供安全性保证。SSL协议本身分为两层&#xff1a; 上层为SSL握手协议&#xff08;SSL handshake protocol&#xff09;、SSLpassword变化协议&#xff08;S…...

Spring核心与设计思想

文章目录 Spring是什么&#xff1f;认识Spring IoC容器传统的开发图书管理系统设计可能导致的问题 使用IoC容器 Spring是什么&#xff1f; Spring是一个用于构建企业级应用程序的开源框架&#xff0c;它为Java开发者提供了一种简化和加速应用程序开发的方式。Spring框架提供了…...

【stream的使用】使用stream.filter过滤List对象

Stream初相识 概括讲&#xff0c;可以将Stream流操作分为3种类型&#xff1a; 创建Stream Stream中间处理 终止Steam 每个Stream管道操作类型都包含若干API方法&#xff0c;先列举下各个API方法的功能介绍。 开始管道 主要负责新建一个Stream流&#xff0c;或者基于现有的数组…...

Flink多流处理之connect拼接流

Flink中的拼接流connect的使用其实非常简单,就是leftStream.connect(rightStream)的方式,但是有一点我们需要清楚,使用connect后并不是将两个流给串联起来了,而是将左流和右流建立一个联系,作为一个大的流,并且这个大的流可以使用相同的逻辑处理leftStream和rightStream,也可以…...

对任意类型数都可以排序的函数:qsort函数

之前我们学习过冒泡排序&#xff1a; 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内容不更新解决方法

场景&#xff1a; table组件绑定的数据变化时&#xff0c;页面没有重新渲染&#xff0c;常见于子组件中使用table组件 原理&#xff1a; 创建实例时 数组在vue中没有被监听到&#xff0c;属于非响应式数据&#xff0c;数组的下标变化无法监听到 解决方式&#xff1a; <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容器执行命令&#xff0c;修改Html内容&#xff0c;添加“Hello World”5. 停止与开始容器6. 删除容器…...

js字符串替换

在JavaScript中&#xff0c;字符串替换 有多种方法&#xff0c;下面介绍其中一些比较常用的方法。 使用replace()方法、 replace()方法用于在字符串中查…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...