历史上的今天
返回首页

历史上的今天

今天是:2025年02月05日(星期三)

正在发生

2020年02月05日 | STM32单片机的重映射与地址映射的使用方法及步骤

2020-02-05 来源:elecfans

重映射

STM32中对于一些端口的外设已经被其他引脚所使用,这是就需要用端口重映射来解决了,很方便。


以USART1为例

STM32单片机的重映射与地址映射的使用方法及步骤

重映射的步骤为:

打开重映射时钟和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 存储器映射

STM32单片机的重映射与地址映射的使用方法及步骤

我们的操作就在这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

而对于寄存器中

STM32单片机的重映射与地址映射的使用方法及步骤

地址为: 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

通过结构体非常机智的定义了。

引用一张图来说明:

STM32单片机的重映射与地址映射的使用方法及步骤

这样当我们想进行地址映射时,只需要这样定义:

GPIO_TypeDef*GPIOx;//定义一个GPIO_TypeDef型结构体指针GPIOxGPIOx=GPIOA;//把指针地址设置为宏GPIOA地址GPIOx-》CRL=0xffffffff;//通过指针访问并修改GPIOA_CRL寄存器123


非常方便,巧妙。

推荐阅读

史海拾趣

Corstat Containers公司的发展小趣事

为了进一步拓展国际市场,Corstat Containers公司积极寻求与国际知名电子企业的合作。通过参加国际电子展会、建立海外销售渠道等方式,公司成功打开了多个国家的市场。同时,公司还与国外科研机构展开合作,共同研发更加先进的电子产品包装技术,为公司的长期发展奠定了坚实的基础。

HOPERF公司的发展小趣事

为了进一步提升生产效率和产品质量,HOPERF在无锡太湖科技园建立了3万平方米的现代化生产基地。该基地引进了德国、美国等地区的先进封装测试生产设备和高精密测试测量仪器,并严格按照ISO9001国际质量认证体系进行生产管理。这种高标准的生产管理流程确保了产品质量的可靠性和稳定性,赢得了国内外客户的广泛认可和信赖。

CETC公司的发展小趣事

随着电子行业的快速发展,CETC意识到单打独斗难以应对市场的快速变化。于是,公司积极寻求与其他企业的合作,共同推动产业的发展。在与某知名通信设备制造商的合作中,CETC提供了先进的电子元件和解决方案,双方共同开发出了多款畅销产品,实现了市场的共赢。这种合作模式不仅提升了CETC的市场竞争力,也促进了整个电子行业的健康发展。

Fenghua (HK) Electronics Ltd公司的发展小趣事

在技术创新的基础上,Fenghua (HK) Electronics Ltd积极拓展国内外市场。公司参加了多个国际电子展,与全球各地的客户建立了良好的合作关系。同时,公司注重品牌建设,通过广告宣传、赞助活动等方式,提高了品牌知名度和美誉度。这些努力使得公司的产品在国内外市场上占据了越来越大的份额。

Deltrol Controls公司的发展小趣事

在电子设备的制造过程中,螺线管是不可或缺的元件之一。然而,传统的螺线管生产方式存在效率低下、质量不稳定等问题。Deltrol Controls通过引进先进的生产设备和技术,实现了螺线管的精细化生产。这一举措不仅提高了生产效率,而且保证了螺线管的质量稳定性。凭借这一优势,Deltrol Controls在电子行业中的竞争力得到了显著提升。

创基(CBI)公司的发展小趣事

随着环保意识的不断提高,电子行业对环保的要求也越来越高。CBI公司积极响应国家环保政策,致力于研发环保型电子产品。通过采用环保材料、降低能耗等措施,CBI的产品在环保方面取得了显著成效。这一做法不仅赢得了消费者的青睐,也为公司树立了良好的社会形象。

问答坊 | AI 解惑

LDO低压差线性稳压器

LDO  LDO是low dropout regulator,意为低压差线性稳压器,是相对于传统的线性稳压器来说的。传统的线性稳压器,如78xx系列的芯片都要求输入电压要比输出电压高出2v~3V以上,否则就不能正常工作。但是在一些情况下,这样的条件显然是太苛刻了,如 ...…

查看全部问答>

2410 I2C 在什么情况下产生中断?

最近一段时间,接触了好几个具有 I2C 接口的从设备器件; 也对 I2C 的 WinCE 流驱动也有所了解。 开始用【查询】方式实现了一个 I2C 流驱动; 现在准备用【中断】方式实现 I2C 流驱动; 但是看了好几遍【2410数据手册】,都没有看明白; 2410 ...…

查看全部问答>

大家用wince6.0, 在vs2005里是怎么找函数和变量定义的???

转到声明,转到定义都用不了,怎么回事?是不是非托管代码的原因?…

查看全部问答>

关于USB接口的serial驱动

serial驱动是将USB接口模拟成串口?那是怎样与外部设备进行通信的?难道就和普通的串口一样?…

查看全部问答>

WinCE 4.2下软重启的工具

谁有WinCE 4.2下软重启的工具啊。网上的都是用于Win Mobile版本的。不能用。…

查看全部问答>

PLC与变频器的组合应用

                                      &n ...…

查看全部问答>

安装了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方式来 ...…

查看全部问答>

这个红叉叉

各位大侠,请问电路图中的红叉叉是什么??代表什么意思??偶现在在自学电路哈哈!!!…

查看全部问答>

基于sensorTag的浴室湿度调节器

浴室的排风扇一直开着的话一方面浪费电源,另一方面不利于周围洗浴温度的上升。使用这样一款浴室湿度调节器,就可以及时的调节浴室内的湿度,使其控制在一个可视的,温度舒适的合理范围内。这样既可以节约能源又可以,避免浴室湿度过大视线受阻带来 ...…

查看全部问答>