关于stm32的复用和重映射问题

目录

    • 需求
    • IO口的复用和重映射
    • 使用
      • 复用
      • 复用加重映射
    • 总结
      • 参考资料

需求

一开始使用stm32c8t6,想实现pwm输出,但是原电路固定在芯片的引脚PB10和PB11上,查看了下引脚的功能,需要使用到复用功能。让改引脚作为定时器PWM的输出IO口。

IO口的复用和重映射

IO口使用可分为两种情况:
1.正常功能。正常使用,开启GPIO时钟使用。
2.复用功能。使用复用功能,将改IO引脚作为另外的ADC、PWM定时器等引脚使用。

复用功能有可以分为三种情况:没有重映射、部分重映射、完全重映射

复用功能的使用的目的是为了在有限的引脚的情况下可以充分的使用各种外设,定时器、串口等等。
总之就是在复用的情况下,原来的引脚可以作为另一种功能的引脚使用。
重映射就是在复用情况下, 可以把一些复用功能重新映射到其他一些引脚上,也就是充当另一个外设功能引脚使用。当然,重映射也不是随便映射的,是芯片设计好的时候就已经固定了,stm32的重映射可以查看《《STM32 中文参考手册》的P116页,8.3通用和复用功能。

而复用重映射的目的都是为了能充分利用有限的引脚资源去实现更多的外设功能。

通过初步查看数据手册,发现PB10和PB11两个引脚如下图所示,可以发现,默认复用的时候可以作为IIC或者usart3使用,而在重定义功能(完全重映射,说法不同)的情况下, 可以作为定时器2的通道3和通道4使用。

复用

使用

复用

首先介绍复用功能的使用,复用功能使用比较简单,开启复用时钟即可。

在这里插入图片描述

查看手册可以看到复用开启,没有开启重映像的时候,就是串口3.

//开启io口时钟和定时器时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
//USART1_TX PB10 复用推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure);
//USART1_RX PB11 浮空输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PB11
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOB, &GPIO_InitStructure);

这样PB10和PB11就可以当串口3进行正常使用了。

复用加重映射

由于我需要使用定时器2通道3实现PWM输出。所以需要用到重映射。
在这里插入图片描述

由上图可以看到,定时器2通道3的部分重映射和完全重映射都是同一个引脚也就是实现的效果是一样的。
对于定时器2通道2部分重映射和完全重映射就是不同的引脚了。
所谓部分重映射就是部分管脚和默认的是一样的,而部分管脚是重新映射到其他管脚。而完全重
映射就是所有管脚都重新映射到其他管脚。

首先复用肯定需要使能IO口和复用时钟。

//开启io口时钟和定时器2时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
//开启复用时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
//开启重映射
//void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE);
//对PB10进行初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

在这里插入图片描述

其中核心就是重映射函数GPIO_PinRemapConfig,第一个参数为重映射引脚选择,另一个为使能参数。
可以在文件“ stm32f10x_gpio.h”中看到定义的宏定义中关于定时器2的三个重映射定义,分别和芯片手册中提到的三种重映射相对应,对于定时器2通道2,分别是部分重映射1–GPIO_PartialRemap1_TIM2,也就是重映射到PB3,部分重映射2–GPIO_PartialRemap2_TIM2,重映射到PA1,完全重映射–GPIO_FullRemap_TIM2,重映射到PB3。
而对于通道3,部分重映射2和完全重映射都是相同的,也就是这两个效果会相同(当然在不考虑其他引脚的影响下)。这样我们就将定时器2通道3引脚映射到PB10下,但是在实际使用的时候,发现失败了,没有达到想要的效果,目前来看的原因是我用的C8T6是36脚的封装,而手册重映射下面提到,重映像不适用于 36 脚的封装

所以在使用的过程中一定要参考芯片手册,同时也要注意看注意事项,小容量小芯片可能大多数重映射功能都没法使用。

总结

复用和重映射的使用其实在库函数开发中就是两个函数的调用,但是需要注意的是需要去查看手册,复用的引脚是对应是哪个IO口,重映射对应的引脚是哪个,查阅好手册,确保芯片有重映射功能,就可以使用了。以上就是全部内容了,欢迎大家在评论区留言。

参考资料

stm32F103芯片手册和参考手册如下:

链接:https://pan.baidu.com/s/1v0S3ntMrII0HZsdbladByg?pwd=z6o1
提取码:z6o1

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

tinyrenderer-切线空间法线贴图

法线贴图 法线贴图分两种,一种是模型空间中的,一种是切线空间中的 模型空间中的法线贴图的rgb代表着每个渲染像素法线的xyz,与顶点坐标处于一个空间,图片是五颜六色的。 切线空间中的法线贴图的rgb同样对应xyz,是切线…

排序算法(C++)

参考C算法,这里面有些写法也值得商榷。 1. 冒泡排序算法 冒泡排序算法代码和思路比较简单,大家如果在面试时被要求实现排序时,可以用这种方法来实现。 该算法里,会统一地遍历待排序的数据,每次比较两个相邻的数据&a…

零基础也能学!在RK平台下的OpenHarmony分区镜像烧录

开源鸿蒙硬件方案领跑者 触觉智能 本文适用于在Purple Pi OH开发板进行分区镜像烧录。触觉智能的Purple Pi OH鸿蒙开源主板,是华为Laval官方社区主荐的一款鸿蒙开发主板。 该主板主要针对学生党,极客,工程师,极大降低了开源鸿蒙开…

【Java】设计一个支持敏感数据存储和传输安全的加解密平台

一、问题解析 在一个应用系统运行过程中,需要记录、传输很多数据,这些数据有的是非常敏感的,比如用户姓名、手机号码、密码、甚至信用卡号等等。这些数据如果直接存储在数据库,记录在日志中,或者在公网上传输的话&…

极海APM32F072用Keil5烧录失败Error: Flash Download failed -“Cortex-MO+“

在用Keil5烧录时,出现错误弹窗,大概长这样: 检查了一圈设置,都搞不好。 先用J-Flash,显示读写保护(未截图),会跳出界面让选择是否解除读写保护: 1.点击允许读操作YES&am…

循环购模式!增加用户复购的不二之选!

大家好,我是吴军,来自一家专注于软件开发与商业模式设计的公司。我们主要业务是构建商城系统,并为各类企业提供全面的商业模式解决方案。目前,我们已经成功开发了超过200种独特的商业模式,帮助许多企业实现了他们的商业…

C++_deque:deque的数据结构特点

文章目录 🚀1. deque介绍🚀2. deque数据结构🚀3. deque的缺陷🚀4.为什么选择deque作为stack和queue的底层默认容器🚀5.deque头插逻辑(了解) 大家好!本文会简单讲讲deque的使用与数据…

实现流程化办公,可以相信拖拽表单设计器!

当前,竞争压力越来越大,利用什么样优良的办公软件实现流程化办公?可以一起来了解低代码技术平台、拖拽表单设计器的优势特点,看看它们是如何助力企业降本、增效、提质的。低代码技术平台的优势特点多,可以助力企业用拖…

第99天:权限提升-数据库提权口令获取MYSQLMSSQLOracleMSF

案例一:提权条件-数据库帐号密码获取方式 提权条件 - 数据库帐号密码获取方式 0 、网站存在高权限 SQL 注入点 1 、数据库的存储文件或备份文件 2 、网站应用源码中的数据库配置文件 3 、采用工具或脚本爆破 ( 需解决外联问题 ) sql注入点 xhcms后台管理系统…

刷新页面控制台莫名奇妙报错显示/files/test_files/file_txt.txt

今天突然发现每次刷新页面都有几个报错,不刷新页面就没有。 这个报错应该不是我们系统的问题,是因为装了浏览器插件的原因。比如我安装了 大家有没有遇到类似的问题。

MyBatis快速入门教程

文章目录 一、介绍什么是持久层为什么要学MyBatis? 二、如何获得MyBatis?三、第一个Mybatis程序数据库导入maven依赖bean 实体类dao持久层resources编写对应的映射文件 mybatis主配置文件测试类运行遇到报错Could not find resource com/qibu/dao/IUserD…

Park Here:城市停车新神器,让停车不再难

在现代城市的快节奏生活中,停车问题往往成为驾驶者的一大困扰。无论是寻找停车位时的焦虑,还是对停车规则的不了解,都让停车变得不那么简单。然而,随着科技的发展,一款名为“Park Here”的移动应用程序正逐渐改变这一现…

论文精读--Swin Transformer

想让ViT像CNN一样分成几个block,做层级式的特征提取,从而使提取出的特征有多尺度的概念 Abstract This paper presents a new vision Transformer, called Swin Transformer, that capably serves as a general-purpose backbone for computer vision. …

做了几年的广告设计,发现一些东西

我换了多个行业,发现了一些广告设计的一些行业规律,先从面试说起。 他们面试比较倾向是本行业的,找到他们去当前公司来当设计,但是重点;还是不喜欢我这种经常被试用期不合格的情况。 还有甲方公司,经常需要…

【机器学习】【遗传算法】【项目实战】药品分拣的优化策略【附Python源码】

仅供学习、参考使用 一、遗传算法简介 遗传算法(Genetic Algorithm, GA)是机器学习领域中常见的一类算法,其基本思想可以用下述流程图简要表示: (图参考论文:Optimization of Worker Scheduling at Logi…

EMQX Enterprise 5.7 发布:新增会话持久化、消息 Schema 验证、规则引擎调试与追踪功能

EMQX Enterprise 5.7.0 版本现已正式发布! 在这个版本中,我们引入了一系列新的功能和改进,包括会话持久化、消息 Schema 验证、规则引擎调试与追踪测试等功能。此外,新版本还进行了多项改进以及 BUG 修复,进一步提升了…

QT 编译Lua 动态库,使用Lua脚本混合编程

一,编译Lua动态库 1,下载lua源码 地址:Lua: downloadhttps://www.lua.org/download.html 2,配置 解压lua源码压缩包,里面有个src文件夹,里面的代码就是lua的源码

TMS320F280049 ECAP模块--capture模式(1)

功能框图 event预分频 如下图所示,可以对输入信号进行预分频。 一次性触发和连续触发 如下图所示,可以进行一次性触发,也可以进行连续触发。 中间计数器的clk是事件1-4,stop是由一次性触发逻辑控制,rst是由ctrfiltre…

【数据结构与算法 经典例题】(C语言)反转链表图文详解

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法 经典例题》C语言 期待您的关注 ​ 目录 一、问题描述 二、解题思路分析 三、代码实现 一、问题描述 二、解题…

华为机考入门python3--(33)牛客33-整数与IP地址间的转换

分类:进制转换 知识点: 十进制转8位二进制 format(num, 08b) 二进制转十进制 int(binary_str, 2) 列表中元素类型转换 new_list map(int, old_list) 题目来自【牛客】 # 将IP地址转换为十进制形式的整数 def ip_to_int(ip):# map返回的是迭…