蓝桥杯嵌入式学习STM32之端口复用及重映射

本文介绍了STM32的端口复用和重映射概念,阐述了如何通过配置实现GPIO的多功能利用。复用允许将普通管脚转换为如UART1的外设功能,而重映射则允许外设引脚重新定义到新的I/O口,分为部分和完全两种方式。配置过程中涉及使能I/O口、外设、AFIO时钟等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

复用

这个其实很简单。
GPIO全称是啥?
General-Purpose Input /Output Ports
通用输入/输出端口
平常就相当于普通兵,你可以根据“战场情况”(甲方需求)让他变成其他兵种
比如说PA9 PA10是两个正常的管脚
在这里插入图片描述
我们可以通过配置让他变成UART1的发送/接收引脚,这样的配置使得有限得I/O口得到丰富的外设功能。

配置方法

  1. 先使能I/O口的时钟。
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
  1. 再使能外设的时钟。
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Peri
### 关于端口复用重映射在ULN2003芯片上的应用配置 对于ULN2003芯片而言,这是一款达林顿晶体管阵列集成电路,并不涉及STM32微控制器中的那种复杂的端口复用重映射概念。然而,在涉及到使用像STM32这样的微控制器来控制ULN2003时,则确实会遇到如何设置GPIO引脚作为不同外设的功能问题。 当利用STM32控制ULN2003驱动负载(比如继电器、电机等),如果需要改变默认的GPIO功能到其他用途上,就需要进行端口复用操作。例如,要通过SPI接口连接至另一个设备并同时保留部分IO用于直接控制ULN2003输入端的情况下[^1]。 为了实现上述目的: - 对于STM32来说,可以通过修改寄存器或使用HAL库函数完成端口复用配置。 ```c // 假设PA5被用来做SPI SCK, 同时PB0-PB7连接到了ULN2003输入端 __HAL_RCC_GPIOA_CLK_ENABLE(); // 开启GPIOA时钟 __HAL_RCC_GPIOB_CLK_ENABLE(); // 开启GPIOB时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; // 设置PA5为AF模式(Alternate Function),即SPI_SCK功能 GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 将PB0~PB7初始化成推挽输出模式以控制ULN2003 for(int i=0;i<8;i++){ GPIO_InitStruct.Pin = (uint16_t)(1 << i); GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } ``` 需要注意的是,这里的例子假设读者已经熟悉了基本的嵌入式编程环境搭建以及相关工具链的安装配置过程。此外,具体的引脚分配可能会依据所使用的具体型号有所不同,请参照对应的数据手册确认实际可用资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值