STM32端口复用与重映射

发布者:innovator8最新更新时间:2017-11-02 来源: eefocus关键字:STM32  端口复用  重映射 手机看文章 扫描二维码
随时随地手机看文章

    STM32上有很多I/O口,也有很多的内置外设,像I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)实现引脚的重新映射。这时,复用功能不再映射到它们的原始分配上。使用方法:

    简单的说 STM32的 io 有3个功能一个是默认的,一个是复用,一个是重映射功能(这个其实也属于复用)。如果配置成复用,则将使用第2个功能;同时,相应的重映射配置了,则将使用第3个功能。开复用 + 使能设备+ 是否重映射就可以决定这个io口到底使用哪个功能。以串口为例进行说明,重映射步骤为:

STM32端口复用与重映射

1、打开重映射时钟和USART重映射后的I/O口引脚时钟, 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);

2、I/O口重映射开启.

GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);

3、配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOB,&GPIO_InitStructure);

    只需要这三步,串口就可以正常使用了。

对于定时器也是类似步骤。

STM32端口复用与重映射

 GPIO_InitTypeDef GPIO_InitStructure;
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    //上拉输入
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
 GPIO_Init(GPIOE, &GPIO_InitStructure);
   
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 
 GPIO_PinRemapConfig(GPIO_FullRemap_TIM1,ENABLE);   //完全重映射

//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE); //部分重映射


关键字:STM32  端口复用  重映射 引用地址:STM32端口复用与重映射

上一篇:STM32 TIM1 输出脉冲范例
下一篇:STM32定时器通道独立启停控制

推荐阅读最新更新时间:2024-03-16 15:42

野火STM32 Flash&sd卡模拟U盘
在USB库文件mass_mal.c中添加对flash和sd读写的函数,USB库调用这些函数从而实现模拟U盘的功能 1 //mass_mal.c 2 /* Includes ------------------------------------------------------------------*/ 3 #include ..Usersdcardbsp_sdio_sdcard.h 4 #include ..Userspi_flashfatfs_flash_spi.h 5 #include mass_mal.h 6 #include stdio.h 7 /* Private typedef ---------
[单片机]
stm32中“拔掉jlink”程序无法正确运行
Q:在调试stm32程序时,从电脑USB口拔掉jlink后开发板上程序为什么无法正确运行?断点复位后也不行。 A:首先,要拔了jlink与开发板的连接(而不仅仅是其与PC的连接),因为jlink本省内部也有电路,对开发板上的程序运行有所影响; 其次,检查stm32的boot 的配置,将BOOT0配置为0才能从复位后Flash启动。BOOT的具体配置如下: BOOT1 BOOT0 启动模式 说明 X 0 Flash 复位后选择主闪存启动 0 1
[单片机]
STM32单片机中使用SPI通信的方法
  在本教程中,我们将使用 STM32F103C8 的 Blue Pill 板替换一个 Arduino 板,并将使用 SPI 总线与 Arduino 板进行通信。在这个STM32 SPI 示例中,我们将使用Arduino UNO作为 Slave,STM32F103C8 作为 Master,两个16X2 LCD 显示器分别连接在一起。两个电位器还与STM32(PA0)和Arduino(A0)相连,通过改变电位器来确定主机到从机和从机到主机的发送值(0到255)。   STM32F103C8中的SPI   比较 Arduino 和 STM32F103C8 Blue Pill 板中的 SPI 总线,STM32 有2 条 SPI 总线
[单片机]
在<font color='red'>STM32</font>单片机中使用SPI通信的方法
循环冗余校验技术,以及在STM32中的一些具体使用体会
在嵌入式产品应用中,常常需要应对系统数据在存储或者传输过程中的完整性问题。 所谓完整性是指数据在其生命周期中的准确性和一致性。这些数据可能存储在EEPROM/FLASH里,或者基于通信协议进行传输,它们有可能因为外界干扰或者程序错误,甚至系统入侵而导致被破坏。如果这些数据在使用前不做校验,产品功能可能失效。在一些特定领域,严重时可能会危及用户财产甚至生命安全。 本文就来聊聊使用较为广泛的循环冗余校验技术,以及在STM32中的一些具体使用体会。 所谓循环冗余校验(CRC:Cyclic Redundancy Check)是一种错误检测算法,通常在通信协议中或存储设备中用于检测原始数据的意外变动。可以简单理解成对有用数据按照一定的算法进
[单片机]
循环冗余校验技术,以及在<font color='red'>STM32</font>中的一些具体使用体会
stm32 定时器中断时间计算
分频值是是指你将系统时钟的频率减小,假设时钟频率是72Mhz,然后分频值是7199,现在你的定时器值就是10kHz,表示每计一个数,然后过了1/(10^4)秒,然后你的重装值就是你的时间了,如果值是9999,就表示定时时间为1s。 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); TIM_ClearITPendingBit(TIM3, TIM_IT_Update); TIM_T
[单片机]
STM32中断优先级理解及先占优先级和从优先级
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响应优先级别1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响 如上,NVIC_IRQChannelPreemptionPriority 和 NVIC_IRQChannelSubPriority
[单片机]
<font color='red'>STM32</font>中断优先级理解及先占优先级和从优先级
基于stm32做的遥控器源程序(按键和摇杆均有)
按键的话非常简单,定义一个函数,然后可以直接在主函数里实现,要确认好自己的蓝牙就可以,波特率也要一致才行。 int main(void) { delay_init(); LED_Init(); Key_Init(); uart_init(9600); while(1) { keys(); } } 摇杆的话,需要用到ADC算法,下面会分享一个ADC搜集数据的程序然后将搜集的数据加以利用就好了。 如下: void chuli(void ) { u16 x; u16 y; x = Get_Adc_Average(ADC_Channel_1 , 10);
[单片机]
ST宣布STM32 F4系列为迄今性能最高ARM® Cortex™-M微控制器
   横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)宣布,采用Green Hills软件公司最新软件工具独立进行的处理器性能评测证实,STM32 F4系列是迄今全球性能最高的ARM® Cortex™-M微控制器。 在行业基准CoreMark™评测 中,Green Hills软件公司的2012版编译器让STM32 F4系列多释放出29%的性能。CoreMark测试成绩用单一数字表示,以便设计人员比较不同品牌的处理器。这个创新高的CoreMark得分让工程师对STM32 F4系列微控制器更有信心,为他们选择业界性能最高的Cortex-M微控制器,
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved