STM32F4系列学习笔记2:IO相关

2024-04-11 12:38

本文主要是介绍STM32F4系列学习笔记2:IO相关,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、寄存器说明:

STM32F4 GPIO最多有9组,从GPIOA-GPIOI,每组IO有16个Pin,STM32F407有7组,所以一共有7*16=112个引脚,再加上PH0和PH1,一共有114个

对应一组有一套寄存器来进行控制,这一套寄存器里面常用的有8个:MODER、OTYPER、OSPEEDR、PUPDR(四个配置寄存器)ODR、IDR (输入输出电平控制相关的寄存器)BSRR(32 位置位/复位寄存器)、LCKR(32 位锁定寄存器)、AFRH、AFRL(复用功能选择寄存器)

1.MODER 寄存器 :该寄存器是 GPIO 端口模式控制32位寄存器,用于控制 GPIOx 的工作模式
每组IO下有16个IO口,该寄存器共32 位,每2个位控制1个IO
具体的控制方法,无非是赋0赋1,那就有四种可能,所以也能推出一个寄存器,最多能给定一组GPIO的16个Pin分别有4种可能,对应于Moder寄存器

 

所以最后通过MODER 寄存器控制得到的模式有输入/输出/复用/模拟四种, 只是还不太明白,因为还觉着模拟就应该是输入的一种,还是说分成了普通输入和模拟输入呢
2.OTYPER 寄存器 :根据对于MODER寄存器的分析,下面的直接看教材就能得到很好地理解了
当且仅当MODER寄存器在对应为为输出模式时,(即非00时?那模拟模式算什么,模拟难道也有输出么),OTYPER寄存器有效,因为是对输出进行配置,所以只有两种可能,也就是推挽和开漏
3.OSPEEDER 寄存器
两位的,设置3种速度,但是需要注意,设置的仅为输出速度
4.PUPDR 寄存器
用于控制是上拉、下拉还是既不上拉也不下拉,保留一个11,但是有不明白的是 对于输出来说也有上拉和下拉吗,开漏和推挽内本身应该没有这样上拉或是下拉的定义(那什么是上拉推挽,下拉推挽这种输出呢?)
5.ODR寄存器
6.IDR寄存器
7.BSRR寄存器
二、各种工作模式说明:
具体的工作模式就是八种,分别为:
1、输入浮空
2、输入上拉
3、输入下拉
4、模拟输入
5、开漏输出
6、推挽输出
7、推挽式复用功能
8、开漏式复用功能(复用的时候都是给复用成了输出的?)

一共有八种模式,一直都没详细的沉下心看,今天找一些文章好好看

http://www.openedv.com/posts/list/32730.htm

三、和IO相关的操作函数说明

1.配置相关:

step1:无论怎么样,都要先使能一组GPIO的时钟

step2:操作四个配置寄存器配制成想要的八种模式?和选定不同的输出速度

2.使用GPIO相关:

2.1控制/读出输出状态

这里说明了可以用GPIO_Write,确实在大多数情况应该是不用的,在正点原子的点灯的程序中,用的是

#setBits和ResetBits能够控制的只是对应引脚在PF9和PF10位置的高低,对应电路图可以看到,当PF9或PF10为高时,即在SetBits之后,是两边都高,没有压降,是暗的,在ReSetBits之后,一边低,另外一边高,是亮的

在ReadOutputData和ReadOutputDataBit中,能够做到读出对应的IO口的输出状态

2.2读取输入状态

2.3 常用的设置输出状态的方法-->设置BSRR寄存器的固件库设置方法

    """

    不明白为什么有IO端口可以自动提供5V和3.3V的电,是硬件上自动设置的输出,是推挽还是开漏吗,还是什么别的IO的功能呢

    """

参考资料:

1.https://blog.csdn.net/JianZhiZG/article/details/99714785

2.正点原子-《STM32F407最小系统板开发指南-库函数版本_V1.1》      

3.https://blog.csdn.net/weixin_42108484/article/details/80511568

这篇关于STM32F4系列学习笔记2:IO相关的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/894099

相关文章

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

Node Linux相关安装

下载经编译好的文件cd /optwget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gztar -xvf node-v10.15.3-linux-x64.tar.gzln -s /opt/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/ln -s /opt/nod

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen