【复旦微FM33 MCU 外设开发指南】外设篇1——GPIO

news2024/9/23 16:33:02

前言

本系列基于复旦微FM33系列单片机的DataSheet编写,旨在提供一些开发指南。
本文章及本系列其他文章将持续更新,本系列其它文章请跳转【复旦微FM33 MCU 外设开发指南】总集篇

本文章最后更新日期:2024/08/25

文章目录

  • 前言
  • GPIO工作时钟
  • GPIO工作模式
    • 1. GPIO输入
    • 2. GPIO输出
    • 3. 数字功能
    • 4. 模拟功能
  • 上拉和开漏
  • GPIO外部中断
    • 1. 选择中断触发引脚
    • 2. 选择中断触发边沿
    • 3. 使能外部中断数字滤波
    • 4. 外部中断服务函数
  • 时钟输出引脚FOUT
  • 寄存器

GPIO工作时钟

对GPIO的寄存器操作前,必须通过 RCC->PCLKCR1 寄存器的配置使能时钟,否则无法写入寄存器。
在这里插入图片描述

GPIO工作模式

GPIO的工作模式通过GPIOx->FCR寄存器配置。
GPIOx->FCR 寄存器每2Bit对应一个GPIO的工作模式,即每个GPIO可以从4种工作模式中选择。

1. GPIO输入

要将GPIO配置为“GPIO输入”功能,需要把对应引脚的 GPIOx->FCR 寄存器相应位配置为00,并且要将 GPIOx->INEN 的对应位配置为1。
GPIOx->FCR 寄存器中,每个GPIO对应位的默认值为00,但上电后引脚默认为输入功能是不合适的,因此需要有一个额外的寄存器来控制输入功能的开启)

在该工作模式下,引脚的电平状态由外部决定,可以通过GPIOx->DIN寄存器读取当前引脚的电平状态。
这里指的电平状态是有施密特特性的,即有两个电压比较阈值,引脚高于较高的比较阈值则认为是高电平,低于较低的阈值则认为是低电平,在两个比较阈值之间,则保持原来的状态。

2. GPIO输出

要将GPIO配置为“GPIO输出”功能,需要把对应引脚的 GPIOx->FCR 寄存器相应位配置为01。
在该工作模式下,引脚的电平由MCU决定,有三个相关的寄存器可以改变引脚电平状态:
(1) GPIOx->DSET 当相应位为1时,该引脚输出高电平
(2) GPIOx->DRST 当相应位为1时,该引脚输出低电平
(3) GPIOx->DO 当相应位为1时,该引脚输出高电平;当相应位为0时,该引脚输出低电平

为什么要设置三组寄存器,DataSheet上给出了解释:
在这里插入图片描述

3. 数字功能

要将GPIO配置为“GPIO输出”功能,需要把对应引脚的 GPIOx->FCR 寄存器相应位配置为10。

在使用数字功能时,要注意有的引脚需要配置 GPIOx->DFS 寄存器。这是因为:
(1)一些引脚的复用功能可以通过GPIO功能来区分:例如PD2引脚同时作为ADC和UART的引脚,其中ADC为模拟外设,UART为数字外设,当使用ADC的时候将引脚配置为模拟功能,当使用UART的时候将引脚配置为数字功能。
(2)一些引脚的复用功能无法通过GPIO功能来区分:例如PB3引脚同时作为ATIM(高级定时器)和UART的引脚,ATIM和UART都为数字外设,在作为ATIM和UART使用时,都需要将引脚配置为数字功能;当使用ATIM时,要将DFS寄存器的对应位配置为1,但使用UART时,要将DFS寄存器的对应位配置为0。
在这里插入图片描述

4. 模拟功能

要将GPIO配置为“模拟功能”功能,需要把对应引脚的 GPIOx->FCR 寄存器相应位配置为11。
比如要使用ADC或者运算放大器(OPA),就需要将GPIO配置为模拟功能。

上拉和开漏

GPIO的上拉使能通过 GPIOx->PUEN 来控制、GPIO的开漏使能通过 GPIOx->ODEN 来控制。
芯片内部的上拉驱动能力很弱,用于将引脚在悬空状态下钳位在高电平。

GPIO外部中断

FM33LC0最多可以产生16个外部中断,每个外部中断都对应着引脚号,如下图所示:
在这里插入图片描述
以EXTI[0]为例,只能从PA0-PA3之间选择一个引脚作为EXTI[0]的中断触发源。

1. 选择中断触发引脚

中断触发源对应的引脚选择要通过 GPIO->EXTISEL 寄存器配置
在这里插入图片描述

2. 选择中断触发边沿

外部中断触发边沿要通过 GPIO->EXTIEDS 寄存器配置,可以选择上升沿触发/下降沿触发/双沿触发。
外部中断默认是关闭的,即相应的边缘触发选择为disable。
在这里插入图片描述

3. 使能外部中断数字滤波

外部中断数字滤波的使能要通过 GPIO->EXTIDF 寄存器配置。

外部中断是直接根据引脚的电平状态变化来触发的,因此当外部存在干扰时,很有可能导致外部中断的错误触发。
这种情况下,可以使能外部中断的数字滤波功能,可以降低该情况出现的概率。
(但也很容易受干扰,因此要谨慎使用外部中断;更建议定时读取引脚电平的方式来判断电平的变化,这样软件可以加滤波)

使能数字滤波后,当连续三个时钟周期(可以选择APBCLK或LSCLK)都采集到相同的电平时,才认为是合法的电平输入。在这里插入图片描述

4. 外部中断服务函数

当产生外部中断事件时,如果全局中断、外部中断未被关闭,则会进入对应的中断服务函数中。
在这里插入图片描述
进入中断服务函数后,必须要读取 GPIO->EXTIISR 寄存器,判断是哪个外部中断导致的GPIO中断。

时钟输出引脚FOUT

FM33LC0的PB12PD11是时钟输出引脚(FOUT)。时钟输出引脚可以帮我们检查时钟频率、排查MCU问题等。
要使用FOUT输出,需要配置 GPIO->FOUTSEL 寄存器。如图所示,可以输出16种时钟。
在这里插入图片描述

寄存器

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PowerShell 一键配置IP

前言 实现一键更改Windows 网卡IP,子网,网关,dns,重命名网卡,获取的接口索引名称,获取接口名称,刷新组策略,刷新系统,脚本可重复配置,,以下环境我是两个网卡配置IP 前提条件 开启wmi,配置网卡,参考 创建更改网卡脚本 实验环境,两个网卡,清除默认,重命名(配置)…

程序员的双重挑战:高效编码与持续学习

在快速变化的编程世界中,程序员们面临着双重挑战:一方面要高效完成日常编码任务,另一方面需要不断学习新技术和深化专业知识,以适应日益复杂的项目需求。如何在这两者之间找到平衡,是许多程序员都感到困惑的问题。本文…

韩国云主机玩游戏性能怎么样

韩国云主机玩游戏性能怎么样?韩国云主机作为高性能的计算服务,为全球游戏玩家提供了一种新的游戏体验方式。用户所关注的韩国云主机在游戏性能方面的表现,可以从多个维度进行详细评估。下面将具体分析韩国云主机用于玩游戏的性能特点&#xf…

卸载通过pip安装的所有Python包的详细指南

卸载所有通过pip安装的Python包的方法总结(Windows系统) 方法 1: 使用 pip freeze 和 requirements.txt 步骤: 导出依赖到requirements.txt文件: pip freeze > requirements.txt这个命令会将当前环境中所有已安装的Python包及其版本号输出到requirem…

DeepKE-LLM框架介绍及简单使用

简介 DeepKE 作为一个全面的知识提取工具包,不仅在构建知识图谱方面展现出卓越性能,还针对多种场景(如cnSchema、低资源环境、文档级处理和多模态分析)提供了强大支持。它能高效提取实体、关系和属性,并为初学者提供了…

论文降重,Kimi如何助你一臂之力?

在学术研究的浪潮中,原创性和学术诚信是每位研究者必须坚守的灯塔。然而,随着研究领域的不断扩展和深化,论文写作过程中难免会遇到内容重复的问题,这不仅影响论文的独创性,也对学术声誉构成挑战。本文将介绍Kimi的核心…

幂等方案分析

幂等性介绍 幂等是一个数学上的概念 f(n) 1^ n 无论n为多少 f(n)的值永远为1 在我们的编程中定义为: 无论对某一个资源操作了多少次,其影响都应是相同的。 以SQL为例: select * from table where id1。此SQL无论执行多少次,虽然结果有可…

prometheus入门(简单使用)

架构与组成 先上一张官网的架构图: Prometheus的构成: The Prometheus ecosystem consists of multiple components, many of which are optional: the main Prometheus server which scrapes and stores time series data(Prometheus serv…

基本数据类型及命令

String String 是Redis最基本的类型,Redis所有的数据结构都是以唯一的key字符串作为名称,然后通过这个唯一的key值获取相应的value数据。不同的类型的数据结构差异就在于value的结构不同。 String类型是二进制安全的。意思是string可以包含任何数据&…

三大低速总线之SPI

三大低速总线之SPI 文章目录 三大低速总线之SPI前言一、基本概念1.1 物理层1.2 协议1.3 传输过程 二、实战FLASH芯片2.1 SPI-Flash 全擦除实验2.1.1 程序设计 2.2 SPI-Flash 扇区擦除实验2.2.1 整体设计 2.3 SPI-Flash 页写实验2.3.1 操作时序 2.4 SPI_Flash 读数据实验2.4.1 时…

rasterization

在cityfm中有说道 Raster is a rasterization function that maps a closed polygon, represented as an ordered list of nodes, to a binary image 要在Python中实现一个将多边形映射到二值图像的光栅化函数,你可以按照以下步骤进行: 创建一个函数&…

网络安全 day3 --- WAFCDNOSS反向代理正向代理负载均衡

WAF(网页防火墙) 原理:Web应用防火墙,旨在提供保护 影响:常规Web安全测试手段会受到拦截 实验:Windows2022 IIS D盾 作用是防范网络安全入侵。 如下图,我们在网站目录下放一个简单的一句话木马…

JavaScript初级——文档的加载

1、浏览器在加载一个页面时,是按照自上向下的顺序加载的,读取到一行就运行一行,如果将 script 标签写到页面的上边,在代码运行时,页面还没有加载,页面没有加载DOM对象也没有加载,会导致无法获取…

一个计算勒让德多项式的HTML页面

效果如下 HTML代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>勒让德多项式</ti…

ZooKeeper体系架构、安装、HA

一、主从架构的单点故障问题 主从架构 Hadoop采用了主从架构&#xff0c;其中包含一个主节点和多个从节点。主节点负责管理整个集群的元数据、任务分配等关键任务&#xff0c;而从节点则负责执行具体的数据存储、计算等操作。 单点故障 在Hadoop主从架构中&#xff0c;主节点作…

Linux并发与竞争

一.概念 Linux 是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。 Linux 系统并发产生的原因很复杂,总结一下有下面几个主要原…

wegege

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

使用 setResponseStatus 函数设置响应状态码

title: 使用 setResponseStatus 函数设置响应状态码 date: 2024/8/25 updated: 2024/8/25 author: cmdragon excerpt: 通过 setResponseStatus 函数,你可以轻松地在 Nuxt.js 中设置响应的状态码。这不仅能帮助用户更好地理解发生了什么,还能在需要时显示自定义的错误页面。…

深入探讨与优化:常见排序算法的原理、实现与应用场景分析

目录 引言 排序算法的重要性 排序的基本概念 常见排序算法 插入排序 交换排序 选择排序 归并排序 分配排序 排序算法的实现与优化 总结与应用 引言 排序算法在计算机科学中占据了重要位置&#xff0c;它不仅仅是数据处理的基础&#xff0c;也是优化许多复杂算法的关…

初识redis:Zset有序集合

Set作为集合&#xff0c;有两个特点&#xff1a;唯一且无序。 Zset是有序集合&#xff0c;在保证唯一的情况下&#xff0c;是根据什么来排序的呢&#xff1f;排序的规则是什么&#xff1f; Zset中的member引入了一个属性&#xff0c;分数&#xff08;score&#xff09;&#…