历史上的今天
今天是:2025年02月05日(星期三)
2020年02月05日 | STM32单片机的重映射与地址映射的使用方法及步骤
2020-02-05 来源:elecfans
重映射
STM32中对于一些端口的外设已经被其他引脚所使用,这是就需要用端口重映射来解决了,很方便。
以USART1为例

重映射的步骤为:
打开重映射时钟和USART重映射后的I/O口引脚时钟,
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
I/O口重映射开启。
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
配制重映射引脚, 这里只需配置重映射后的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);12345678
这样就可以了,很简单。
地址映射
对于地址映射是在查重映射时发现的,感觉ST的库很机智,就记录下来。
首先看一下M3 存储器映射

我们的操作就在这512MB的地址进行。
在LED灯的程序中,存在宏定义:
#defineGPIOC_BASE(APB2PERIPH_BASE+0x1000)#defineAPB2PERIPH_BASE(PERIPH_BASE+0x10000)#definePERIPH_BASE((uint32_t)0x40000000)123
分析:
PERIPH_BASE 外设基地址:因为STM32是32位的,宏展开为0x40000000并转化为 uint32_t
APB2PERIPH_BASE 总线基地址:宏展开为PERIPH_BASE加上偏移地址 0x10000
当然存在下面的宏定义:
#defineAPB1PERIPH_BASEPERIPH_BASE#defineGPIOA_BASE(APB2PERIPH_BASE+0x0800)#defineGPIOB_BASE(APB2PERIPH_BASE+0x0C00)#defineGPIOC_BASE(APB2PERIPH_BASE+0x1000)#defineGPIOD_BASE(APB2PERIPH_BASE+0x1400)12345
而对于寄存器中

地址为: GPIOC_BASE +0x04
我想可能会存在
#define GPIOC_CRH (GPIOC_BASE + 0x04)
但ST库采用了更加巧妙的方法:
stm32f10x.h中:
#defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)#defineGPIOB((GPIO_TypeDef*)GPIOB_BASE)#defineGPIOC((GPIO_TypeDef*)GPIOC_BASE)123
而GPIO_TypeDef 的定义:
typedefstruct{__IOuint32_tCRL;__IOuint32_tCRH;__IOuint32_TIDR;__IOuint32_tODR;__IOuint32_tBSRR;__IOuint32_tBRR;__IOuint32_tLCKR;}GPIO_TypeDef;12345678910
通过结构体非常机智的定义了。
引用一张图来说明:

这样当我们想进行地址映射时,只需要这样定义:
GPIO_TypeDef*GPIOx;//定义一个GPIO_TypeDef型结构体指针GPIOxGPIOx=GPIOA;//把指针地址设置为宏GPIOA地址GPIOx-》CRL=0xffffffff;//通过指针访问并修改GPIOA_CRL寄存器123
非常方便,巧妙。
史海拾趣
|
LDO LDO是low dropout regulator,意为低压差线性稳压器,是相对于传统的线性稳压器来说的。传统的线性稳压器,如78xx系列的芯片都要求输入电压要比输出电压高出2v~3V以上,否则就不能正常工作。但是在一些情况下,这样的条件显然是太苛刻了,如 ...… 查看全部问答> |
|
最近一段时间,接触了好几个具有 I2C 接口的从设备器件; 也对 I2C 的 WinCE 流驱动也有所了解。 开始用【查询】方式实现了一个 I2C 流驱动; 现在准备用【中断】方式实现 I2C 流驱动; 但是看了好几遍【2410数据手册】,都没有看明白; 2410 ...… 查看全部问答> |
|
安装了IAR5.2,破解失败,怎么回事啊,用5.2的朋友进来看看 Fatal Error[Cp001]: Copy protection check, No valid license found for this product对程序进行编译就会有这个错误,用软件破解了啊,也在网上查了,但是还是没有解决我卸载好几遍了希望高手帮助啊… 查看全部问答> |
|
在线MSP430编辑编译无需本地电脑安装CCS或IAR之类开发环境 在线MSP430编辑编译无需本地电脑安装CCS或IAR之类开发环境看了一下,支持代码彩色显示编写完了以后还可以在其网站服务器上进行编译,然后可以下载编译后的可烧写文件。使用google帐户登陆,无需注册。对于帐户安全,一般可以放心,使用OpenId方式来 ...… 查看全部问答> |
|
浴室的排风扇一直开着的话一方面浪费电源,另一方面不利于周围洗浴温度的上升。使用这样一款浴室湿度调节器,就可以及时的调节浴室内的湿度,使其控制在一个可视的,温度舒适的合理范围内。这样既可以节约能源又可以,避免浴室湿度过大视线受阻带来 ...… 查看全部问答> |




