码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • STM32——端口复用与重映射概述与配置(HAL库)


    文章目录

      • 前言
      • 一、什么是端口复用?什么是重映射?有什么区别?
      • 二、端口复用配置

    前言

    本篇文章介绍了在单片机开发过程中使用的端口复用与重映射。做自我学习的简单总结,不做权威使用,参考资料为正点原子STM32F1系列精英板HAL库开发手册。我也做了相关对比,其实HAL库与标准库差别不大,HAL库封装更多更好移植,原理上是通用的。

    一、什么是端口复用?什么是重映射?有什么区别?

    STM32F1 有很多的内置外设,这些外设的外部引脚都是与 GPIO 复用的。也就是说,一个 GPIO如果可以复用为内置外设的功能引脚,那么当这个 GPIO 作为内置外设使用的时候,就叫做复用。

    根据正点资料和自己搜索的资料,大概总结,端口复用就是一个端口有多个功能,我们查看原理图的时候有以下标志,表示是个复用端口,既可以作为PD2IO,还可以作为TIM定时器和UART串口和SDIO接口。
    在这里插入图片描述
    映射就是寄存器配置,某一位改变其IO口的功能,比如使能第三位原来是串口的TX,由于不满足配置要求,比如电压、频率等,换成了使能第四位为TX,那么重映射后,引脚的物理位置发生变化。

    二、端口复用配置

    参考正点资料,例子为配置 GPOPA.9,GPIOA.10 口为串口 1 复用功能的一般步骤。
    1.首先,我们要使用 IO 复用功能,必须先打开对应的 IO 时钟和复用功能外设时钟,这里我们使用了 GPIOA 以及 USART1,所以我们需要使能 GPIOA 和 USART1 时钟。方法如下:

    __HAL_RCC_GPIOA_CLK_ENABLE(); //使能 GPIOA 时钟 
    __HAL_RCC_USART1_CLK_ENABLE(); //使能 USART1 时钟
    __HAL_RCC_AFIO_CLK_ENABLE(); //使能辅助功能 IO 时钟 
    
    • 1
    • 2
    • 3

    2. 然后,我们在 GIPOx_MODER 寄存器中将所需 IO(对于串口 1 是 PA9,PA10)配置为复用功能。
    3. 最后,我们还需要对 IO 口的其他参数,例如上拉/下拉以及输出速度等进行配置。
    上面三步,在我们 HAL 库中是通过 HAL_GPIO_Init 函数来实现的,参考代码如下:

    GPIO_InitTypeDef GPIO_Initure; 
    GPIO_Initure.Pin=GPIO_PIN_9;//PA9 
    GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出 
    GPIO_Initure.Pull=GPIO_PULLUP;//上拉 
    GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速 
    HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化 PA9 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    通过上面的配置,PA9 复用为串口 1 的发送引脚。这个时候,PA9 将不再作为普通的 IO 口
    使用。对于 PA10,配置方法一样,修改 Pin 成员变量值为 PIN_10 即可。

  • 相关阅读:
    B_QuRT_User_Guide(26)
    windows、ubuntu双系统安装教程
    第08章 索引的创建与设计原则【2.索引及调优篇】【MySQL高级】
    【ROS1学习-01】使用ROS系统进行相关代码开发,使用docker解决环境问题,遇到一些奇怪问题,总结汇总下,开始学习研究
    《清单革命》内容梳理&随笔
    视频亮度太低了,如何调高
    Python和Java二选一该学啥?
    【Designing ML Systems】第 10 章 :MLOps 的基础设施和工具
    【uniapp】Dcloud的uni手机号一键登录,具体实现及踩过的坑,调用uniCloud.getPhoneNumber(),uni.login()等
    java日期格式化为json字符串,看这个就够了
  • 原文地址:https://blog.csdn.net/whhcsdn233/article/details/134336728
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号