你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32中引脚复用说明

[复制链接]
STMCU小助手 发布时间:2022-2-2 20:00
端口复用的定义
STM32有许多的内置外设(如串口、ADC、DCA等等),这些外设的外部引脚都是和GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫复用。详细的可以参考《STM32F103ZET6数据手册》p30的内容,表格的倒数第二栏就表示端口复用功能。
比如说,STM32的串口1的引脚对应的I/O位PA9、PA10。而PA9、PA10默认的功能都是GPIO,所以说当PA9、PA10引脚作为串口1使用的时候就是端口复用。
在配置GPIO引脚功能时需要打开对应端口(port)所在的总线时钟,例如:
  1. #define RCC_AHB1Periph_GPIOA               ((uint32_t)0x00000001)0 y& L( |/ q* ?+ U
  2. #define RCC_AHB1Periph_GPIOB               ((uint32_t)0x00000002)
    1 y0 ?, R0 }+ D/ Q
  3. #define RCC_AHB1Periph_GPIOC               ((uint32_t)0x00000004)
    3 R* l% r1 F" T+ ]% D4 Y
  4. #define RCC_AHB1Periph_GPIOD               ((uint32_t)0x00000008)
    7 o9 p' F3 N% W3 d
  5. #define RCC_AHB1Periph_GPIOE               ((uint32_t)0x00000010)% O. r4 H. \4 N
  6. #define RCC_AHB1Periph_GPIOF               ((uint32_t)0x00000020): _) F9 O9 h6 A! r% `
  7. #define RCC_AHB1Periph_GPIOG              ((uint32_t)0x00000040)- G& ?4 L' f; C8 A) ^; a
  8. #define RCC_AHB1Periph_GPIOH               ((uint32_t)0x00000080)
    : ]8 f' j! ~+ A! _
  9. #define RCC_AHB1Periph_GPIOI                ((uint32_t)0x00000100)
    7 x# P0 L  ?4 i% C$ [
  10. #define RCC_AHB1Periph_GPIOJ               ((uint32_t)0x00000200)
    6 V. P+ H, W; c
  11. #define RCC_AHB1Periph_GPIOK              ((uint32_t)0x00000400)
    1 P  d, t2 |1 \; f& `: R
  12. #define RCC_AHB1Periph_CRC                 ((uint32_t)0x00001000)! \  ?- |0 b. L0 i( K2 I
  13. #define RCC_AHB1Periph_FLITF               ((uint32_t)0x00008000)' M* T, j. G3 _5 S
  14. #define RCC_AHB1Periph_SRAM1             ((uint32_t)0x00010000)
    - i5 p8 U' D7 i+ r. x( [
  15. #define RCC_AHB1Periph_SRAM2             ((uint32_t)0x00020000)
    ) ~: c" k2 b  E! R4 e) z
  16. #define RCC_AHB1Periph_BKPSRAM        ((uint32_t)0x00040000), b0 q3 ]# \% P
  17. #define RCC_AHB1Periph_SRAM3            ((uint32_t)0x00080000)
    6 N0 ^$ G4 w% u: N) v
  18. #define RCC_AHB1Periph_CCMDATARAMEN      ((uint32_t)0x00100000)( Y2 L0 I8 ]& q, h& h
  19. #define RCC_AHB1Periph_DMA1              ((uint32_t)0x00200000)
    % O1 |6 v. `7 g: p% t! l
  20. #define RCC_AHB1Periph_DMA2              ((uint32_t)0x00400000), S) l/ o9 }1 ?8 n0 t8 R
  21. #define RCC_AHB1Periph_DMA2D             ((uint32_t)0x00800000)/ h; }* N/ P  y3 e; ~' v9 ?
  22. #define RCC_AHB1Periph_ETH_MAC           ((uint32_t)0x02000000), {* }4 X. T: g
  23. #define RCC_AHB1Periph_ETH_MAC_Tx        ((uint32_t)0x04000000)! D2 ?, `' x  @
  24. #define RCC_AHB1Periph_ETH_MAC_Rx        ((uint32_t)0x08000000)
    & g' T9 x  X4 F3 B) K
  25. #define RCC_AHB1Periph_ETH_MAC_PTP       ((uint32_t)0x10000000)
    2 P: X- Q& J# u- f
  26. #define RCC_AHB1Periph_OTG_HS            ((uint32_t)0x20000000)
    9 v  V* ?% ]% \9 Q6 o8 Z$ e" w
  27. #define RCC_AHB1Periph_OTG_HS_ULPI       ((uint32_t)0x40000000)
复制代码
6 Z' ]4 R6 n1 I/ G: l3 ?2 a. a
端口复用初始化过程
接下来看一下端口复用初始化过程的步骤,拿串口1为例:
1、GPIO端口时钟使能。要使用到端口复用,首先是要使能端口的时钟了;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
2、复用的外设时钟使能。比如要将PA9、PA10引脚复用成串口,必须也要使能串口时钟;
; l$ G* q% D1 p4 O
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
3、端口模式配置。在I/O复用位内置外设功能引脚的时候,必须设置GPIO端口的模式。至于在复用功能下,GPIO的模式怎么设置,可以查看手册《STM32中文参考手册》p110的内容。这里拿USART1为例,进行配置,要配置全双工的串口1,TX引脚需要推挽复用输出,RX引脚需要浮空输入或者上拉输入;
3 W3 ~& v6 r2 U$ n) h
  1. <div align="left">GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9//复用推挽输出</div><div align="left">GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;</div><div align="left">GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出</div><div align="left">GPIO_Init(GPIOA, &GPIO_InitStructure);</div>7 z5 R# G' K# a; y6 ^
  2. <div align="left">GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10 PA.10 浮空输入</div><div align="left">GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入</div><div align="left">GPIO_Init(GPIOA, &GPIO_InitStructure);</div>
复制代码
" [/ q% [6 p2 U' i3 O5 V/ r5 s
总而言之,使用复用功能的时候至少要使能2时钟:GPIO时钟使能、复用的外设时钟使能。同时还要初始化GPIO以及复用外设功能(端口模式配置)。

0 `* `9 b  J7 [# ?( R0 R9 ~4 M1 ^
收藏 评论0 发布时间:2022-2-2 20:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版