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

news2024/11/9 2:24:50

目录

    • 需求
    • 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

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

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

相关文章

SpringBoot的事务注解

SpringBoot的事务注解 在Spring Boot应用中,事务管理是一个关键的部分,尤其是当涉及到数据库操作时。Spring Boot提供了强大的事务管理支持,使得开发人员可以通过简单的注解来控制事务的边界和行为。本文将介绍如何在Spring Boot中使用事务注…

每日一题——Python实现PAT乙级1099 性感素数(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 专业点评 时间复杂度分析 空间复杂度分析 综合点评 我要更强 优化点 …

docker部署redis实践

1.拉取redis镜像 # 拉取镜像 sudo docker pull redis2.创建映射持久化目录 # 创建目录 sudo mkdir -p $PWD/redis/{conf,data}3. 运行redis 容器,查看当前redis 版本号 # 运行 sudo docker run --name redis -d -p 6379:6379 redis # 查看版本号 sudo docker ex…

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Redis 概述 1.1 Redis 下载与安装 2.0 Redis 数据类型 3.0 Redis 常见五种类型的命令 3.1 字符串操作命令 3.2 哈希操作命令 3.3 列表操作命令 3.4 集合操作命令 …

DNS协议 | NAT技术 | 代理服务器

目录 一、DNS协议 1、DNS背景 2、DNS协议 域名 域名解析 二、NAT技术 1、NAT技术 2、NAPT技术 3、NAT技术的缺陷 三、代理服务器 1、正向代理服务器 2、反向代理服务器 一、DNS协议 域名系统(Domain Name System,缩写:DNS&#…

数据库索引压力测试

本实验测试数据库在有索引和五索引内容上的查询时间随着数据量级增长的变化 测试的表结构 使用一个菜单的数据库表,包括菜品的ID,菜品名和价格 CREATE TABLE Menu (dish_id int(6) unsigned zerofill NOT NULL AUTO_INCREMENT,dish_name varchar(255)…

上位机图像处理和嵌入式模块部署(f407 mcu vs h750)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在目前工业控制上面,f103和f407是用的最多的两种stm32 mcu。前者频率低一点,功能少一点,一般用在低端的嵌入式设…

N32G45XVL-STB之移植LVGL(lvgl-8.2.0)

目录 概述 1 软硬件介绍 1.1 软件版本信息 1.2 ST7796-LCD 1.3 MCU IO与LCD PIN对应关系 2 认识LVGL 2.1 LVGL官网 2.2 LVGL库文件下载 3 移植LVGL 3.1 准备移植文件 3.2 添加lvgl库文件到项目 3.2.1 src下的文件 3.2.2 examples下的文件 3.2.3 配置文件路径 3.2…

探索国内大模型AIGC产品

​ 人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗…

单片机(STM32)与上位机传输浮点数

目录 单片机(STM32)与上位机传输数据的方法1. 传输整形数据2. 传输浮点数据3. 如何打包与解包 单片机(STM32)与上位机传输数据的方法 在进行单片机程序的开发时,常常需要与其他设备进行通信。一种情况是与其他电路板通信,比如STM32主机与STM32从机通信&…

Windows开始ssh服务+密钥登录+默认启用powershell

文章内所有的命令都在power shell内执行,使用右键单击Windows徽标,选择终端管理员即可打开 Windows下OpenSSH的安装 打开Windows power shell,检查SSH服务的安装状态。会返回SSH客户端和服务器的安装状态,一下是两个都安装成功的…

基于pytoch卷积神经网络水质图像分类实战

具体怎么学习pytorch,看b站刘二大人的视频。 完整代码: import numpy as np import os from PIL import Image import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data…

springboot高校运动会信息管理系统设计与实现-计算机毕业设计源码92968

摘 要 本论文介绍了一个高校运动会信息管理系统的设计和实现过程。首先是高校运动会的需求分析和可行性分析,通过比较运动会的各个工作流程,确定了系统的数据流程和数据库结构,然后介绍了高校运动会信息管理系统开发所使用的软件开发工具&…

脖子以下是人机交互,脖子以上是人机融合智能

“脖子以下是人机交互,脖子以上是人机融合智能”这句话是当前人与人工智能配合技术发展的一种形象描述,一个是生理物理,一个是人脑电脑: 1、人机交互的重要性 脖子以下的人机交互在当前的人工智能系统中扮演着重要的角色。人机交互…

SpringBoot整合RabbitMQ (持续更新中)

RabbitMQ 官网地址:RabbitMQ: One broker to queue them all | RabbitMQ RabbitMQ 与 Erlang 版本兼容关系​ 3.13.0 26.0 26.2.x The 3.13 release series is compatible with Erlang 26. OpenSSL 3 support in Erlang is considered to be mature and ready for…

大数据湖一体化运营管理建设方案(49页PPT)

方案介绍: 本大数据湖一体化运营管理建设方案通过构建统一存储、高效处理、智能分析和安全管控的大数据湖平台,实现了企业数据的集中管理、快速处理和智能分析。该方案具有可扩展性、高性能、智能化、安全性和易用性等特点,能够为企业数字化…

基于51单片机俄罗斯方块小游戏

基于51单片机俄罗斯方块游戏 (仿真+程序) 功能介绍 具体功能: 1.用LCD12864显示游戏界面; 2.用四个按键控制游戏(左、右移、下移、翻转); 3.游戏规则和平时玩的俄罗斯方块一样&a…

Qt窗口与对话框

目录 Qt窗口 1.菜单栏 2.工具栏 3.状态栏 4.滑动窗口 QT对话框 1.基础对话框QDiaog 创建新的ui文件 模态对话框与非模态对话框 2.消息对话框 QMessageBox 3.QColorDialog 4.QFileDialog文件对话框 5.QFontDialog 6.QInputDialog Qt窗口 前言:之前以上…

天才程序员周弈帆 | Stable Diffusion 解读(二):论文精读

本文来源公众号“天才程序员周弈帆”,仅用于学术分享,侵权删,干货满满。 原文链接:Stable Diffusion 解读(二):论文精读 【小小题外话】端午安康! 在上一篇文章天才程序员周弈帆 …

初阶 《函数》 4. 函数的调用

4. 函数的调用 4.1 传值调用 函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参 4.2 传址调用 传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式 这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是…