STM32F1 引脚重映射功能
STM32 端口引脚重映射
文章目录
- STM32 端口引脚重映射
- 前言
- 1、查阅芯片数据手册
- 1.1 串口引脚重映射描述
- 2、代码部分
- 2.1 核心代码部分
- 3、实验现象
- 4、总结
前言
在写程序时遇到想要的端口功能,而这个引脚又被其它的功能占用了无法删除掉或直接使用,这种情况就很尴尬了,因为STM32同一个引脚是不能同时使用两个功能的。那么遇到这种情况就需要考虑该端口分时复用或者端口重映射功能了。
硬件平台使用的是STM32F103ZET6芯片。
1、查阅芯片数据手册
打开对应芯片数据手册,找到 pin outs and pin descriptions 章节。
如下图所示:
往下拉就可以看到芯片的相关引脚定义了,如下图这个就是我使用的芯片引脚定义,用的是STM32F103ZET6的芯片。
再往下拉,就可以看到下面这个引脚定义及功能详细表了。
1.pins这栏是芯片型号,看对应芯片封装就可以,STM32F103ZET6芯片是LQFP144的,所以对应看该列即可。
2.pin name 顾名思义就是引脚的名字,可对应前面的引脚标号。
3.default 是芯片该引脚能支持的功能,复位后的引脚功能。
4.remap 是芯片端口重映射的功能,如果表格是空白的,则说明该引脚不支持重映射其它功能。
1.1 串口引脚重映射描述
在正常一般情况下STM32F1默认串口1的发送和接收引脚是PA9和PA10的。如下图所示:
由于实验需要验证这个串口1的重映射功能是否可以正常使用,所以使用PB6和PB7两个引脚来重映射串口1功能。如下图所示:
2、代码部分
由前面数据手册可知PB6和PB7这两个引脚可以用来实现串口1功能,所以程序只需要初始化该两个引脚即可,PA9和PA10就不需要再初始化了。
本实验使用的是标准库的例程,直接使用了正点原子的串口实验进行修改的。只需要使能对应的时钟和把串口引脚对应改下就可以了。
2.1 核心代码部分
1,使能时钟。
2,初始化串口引脚。如下:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOB, ENABLE); //使能USART1,GPIOB时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //使能复用时钟
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE); //使能串口1重映射时钟
示例代码如下:
void uart_init(u32 bound)
{//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOB, ENABLE); //使能USART1,GPIOB时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);//USART1_TX GPIOB.6GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //PB.6GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB.6//USART1_RX GPIOB.7GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//PB.7GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB.7//Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器//USART 初始化设置USART_InitStructure.USART_BaudRate = bound;//串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式USART_Init(USART1, &USART_InitStructure); //初始化串口1USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断USART_Cmd(USART1, ENABLE); //使能串口1
}
需要改的就这个串口初始化函数,其它的代码都不要修改了。
3、实验现象
把开发板TTL电路的TX和RX分别接到PB7和PB6引脚上,或者之间用USB-TTL模块也可以。
打开串口调试助手,选择对应的波特率就可以看到收发的内容了,说明这样设置是正常的。
注意:实验要勾选发送新行才能正常发送内容。
4、总结
要完成这个功能还是比较简单的,只要懂看明白这个表格就可以了。
同理,其它的外设功能也一样,比如定时器、ADC等等,都是按照这个方法原理来就可以了。
相关文章:

STM32F1 引脚重映射功能
STM32 端口引脚重映射 文章目录 STM32 端口引脚重映射前言1、查阅芯片数据手册1.1 串口引脚重映射描述 2、代码部分2.1 核心代码部分 3、实验现象4、总结 前言 在写程序时遇到想要的端口功能,而这个引脚又被其它的功能占用了无法删除掉或直接使用,这种情…...
c语言的各类输出函数(带完善更新)
printf double x; x 218.82631; printf("%-6.2e\n", x);printf(“%-6.2e\n”, x);使用printf函数以指定的格式输出x的值。"%-6.2e"是格式化字符串,其中: %e表示以科学计数法的形式输出浮点数。 6表示输出的总宽度为6个字符&#…...

【linux温故】CFS调度
写在前面 网上关于CFS 调度器的文章多如牛毛,没必要自己写。很多文章写的都非常好。 很多文章里,关键的技术点,都是一样的,只是各个文章说法不一样。 掌握了核心的,关键的,其他的,如果工作中…...

计算机网络之一
目录 1.因特网概述 1.1网络、互连网(互联网)和因特网 1.2.因特网发展的三个阶段 1.3基于ISP的三层架构的因特网 1.4.因特网的组成 2.三种交换方式 2.1电路交换 2.2分组交换 1.因特网概述 1.1网络、互连网(互联网)和因特网…...

从一到无穷大 #23 《流计算系统图解》书评
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言内容总结 引言 春节假期回到家里断然是不会有看纸质书的时间的。造化弄人&#…...

华为问界M9:领跑未来智能交通的自动驾驶黑科技
华为问界M9是一款高端电动汽车,其自动驾驶技术是该车型的重要卖点之一。华为在问界M9上采用了多种传感器和高级算法,实现了在不同场景下的自动驾驶功能,包括自动泊车、自适应巡航、车道保持、自动变道等。 华为问界M9的自动驾驶技术惊艳之处…...

Java图形化界面编程——弹球游戏 笔记
Java也可用于开发一些动画。所谓动画,就是间隔一定的时间(通常小于0 . 1秒 )重新绘制新的图像,两次绘制的图像之间差异较小,肉眼看起来就成了所谓的动画 。 为了实现间隔一定的时间就重新调用组件的 repaint()方法,可以借助于…...

浅谈人工智能之深度学习~
目录 前言:深度学习的进展 一:深度学习的基本原理和算法 二:深度学习的应用实例 三:深度学习的挑战和未来发展方向 四:深度学习与机器学习的关系 五:深度学习与人类的智能交互 悟已往之不谏࿰…...

【复现】大华 DSS SQL 注入漏洞_46
目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 大华DSS是大华的大型监控管理应用平台,支持几乎所有涉及监控等方面的操作,支持多级跨平台联网等操作。 可…...
Python 中的断点类型详解
前言 在 Python 中,断点是一种在代码中设置的标记,用于在程序执行过程中停止或中断程序的执行,以便调试和查看程序的内部状态。断点是调试工具的关键组成部分,能够帮助开发者定位和解决代码中的错误。本文将详细介绍 Python 中的…...

一步步建立一个C#项目(连续读取S7-1200PLC数据)
这篇博客作为C#的基础系列,和大家分享如何一步步建立一个C#项目完成对S7-1200PLC数据的连续读取。首先创建一个窗体应用。 1、窗体应用 2、配置存储位置 3、选择框架 拖拽一个Button,可以选择视图菜单---工具箱 4、工具箱 拖拽Lable控件和TextBook控件 5、拖拽控件 接下来…...
Hive窗口函数详解
一、 窗口函数知识点 1.1 窗户函数的定义 窗口函数可以拆分为【窗口函数】。窗口函数官网指路: LanguageManual WindowingAndAnalytics - Apache Hive - Apache Software Foundationhttps://cwiki.apache.org/confluence/display/Hive/LanguageManual%20Windowing…...

车载电子电器架构 —— 电子电气系统功能开发
车载电子电器架构 —— 电子电气系统功能开发 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎,出门靠自己,四海皆…...
LeetCode--代码详解 7.整数反转
7.整数反转 题目 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 …...

《统计学简易速速上手小册》第6章:多变量数据分析(2024 最新版)
文章目录 6.1 主成分分析(PCA)6.1.1 基础知识6.1.2 主要案例:客户细分6.1.3 拓展案例 1:面部识别6.1.4 拓展案例 2:基因数据分析 6.2 聚类分析6.2.1 基础知识6.2.2 主要案例:市场细分6.2.3 拓展案例 1&…...

创新S3存储桶检索:Langchain社区S3加载器搭载OpenAI API
在瞬息万变的数据存储和处理领域,将高效的云存储解决方案与先进的 AI 功能相结合,为处理大量数据提供了一种变革性的方法。本文演示了使用 MinIO、Langchain 和 OpenAI 的 GPT-3.5 模型的实际实现,重点总结了存储在 MinIO 存储桶中的文档。 …...

【Linux技术宝典】Linux入门:揭开Linux的神秘面纱
文章目录 官网Linux 环境的搭建方式一、什么是Linux?二、Linux的起源与发展三、Linux的核心组件四、Linux企业应用现状五、Linux的发行版本六、为什么选择Linux?七、总结 Linux,一个在全球范围内广泛应用的开源操作系统,近年来越来…...
C语言---------对操作符的进一步认识
操作符中有⼀些操作符和⼆进制有关系,我们先学习了⼀下⼆进制的和进制转换的知识。 1.原码、反码和补码。 有符号整数的三种表⽰⽅法均有符号位和数值位两部分, 2进制序列中,最⾼位的1位是被当做符号位,剩余的都是数值位。 符号…...

HarmonyOS 鸿蒙 ArkTS ArkUI 页面之间切换转换动画设置
第一步:导入 import promptAction from ohos.promptAction 第二步:在build下方写入 pageTransition(){PageTransitionEnter({ duration: 1200 }).slide(SlideEffect.Right)PageTransitionExit({ delay: 100 }).translate({ x: 100.0, y: 100.0 }).opac…...

《CSS 简易速速上手小册》第8章:CSS 性能优化和可访问性(2024 最新版)
文章目录 8.1 CSS 文件的组织和管理8.1.1 基础知识8.1.2 重点案例:项目样式表结构8.1.3 拓展案例 1:使用BEM命名规范8.1.4 拓展案例 2:利用 Sass 混入创建响应式工具类 8.2 提高网页加载速度的技巧8.2.1 基础知识8.2.2 重点案例:图…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...