STM32F4存储器映射分析

2023-07-26

STM32的地址映射是如何设置的?

STM32的地址映射是通过MMIO(Memory Mapped I/O)实现的。MMIO是一种处理器与外设通信的方式,它将外设寄存器映射到处理器的地址空间中,通过读写这些地址就可以访问外设的寄存器。

在STM32中,地址映射是通过寄存器映射表(Register Map)实现的。寄存器映射表是一个包含所有外设寄存器地址的表格,每个外庆没设有一个对应的寄存器映射表。在STM32中,寄存器映射表通常是在芯片手册或数据誉旦纳手册中提供的。

在使用STM32时,我们需要首先了解每个外设的寄存器映射表,然后根据需要对这些寄存器进行读写操作。在进行寄存器操作时,我们需要使用指针来访问这些寄存器,指针的地址即为寄存器映射表中对应寄存器的地址。

例如,如果我们需要访问GPIOA的IDR(Input Data Register)寄存器,可以使用以下代码:

//定义指向GPIOA寄存器映射表的指针 volatile uint32_t * const GPIOA_IDR = (uint32_t*)0x40020010;

//读取IDR寄存器的迟行值 uint32_t input_data = *GPIOA_IDR;

在上面的代码中,我们首先定义了一个指向GPIOA寄存器映射表的指针GPIOA_IDR,该指针的地址为0x40020010,即GPIOA的IDR寄存器地址。然后我们通过指针访问IDR寄存器,并将其值读取到input_data变量中。需要注意的是,由于外设寄存器通常是硬件控制的,因此在进行寄存器操作时需要非常小心,避免对寄存器的读写操作产生副作用。同时,由于寄存器操作涉及到底层硬件的控制,因此需要使用适当的编译器指令和优化选项来保证代码的正确性和性能。

求教,st

你的设置不对,参考如下设置例程。
void GPIO_Co360问答nfiguration军肉为毛常略校条并更续(void)
{
GPIO_InitTypeDef GPIO_Init派鱼秋负晶在持春好额Structure; //声明一个结构体变量

GPIO_***载送待教代绿派井块做己.gpio_Pin = GPIO_Pin_10; //选择PC.10(TXD) 和 PC.11
GPIO_***.gpio_Speed = GPIO_Speed_50MHz; //管脚频率为50MHZ
GPIO_***.gpio_Mode = GPIO_M杆落影秋离件参八裂跳呼ode_AF_PP; //输出模式为复用推挽输出
GPIO_Init(GPIOC,&GPIO_InitStructure); //初始化GPIOC寄存器

GPI义界浓愿罗加O_***.gpio_Pin = GPIO_Pin_11; //选择PC.10(T操住丰务算括待XD) 和 PC.11(RXD)
GPIO_***加合地客布题.gpio_Speed = GPIO_Speed_50MHz; //管脚频率为50MHZ
GPIO_***.gpio_Mo诗氢志厂仅迅矿石测de = GPIO_M林经然氢ode_IN_FLOATING; //输出模式为浮空输入
GPIO_In导妒歌更it(GPIOC,&GPIO_InitStructure); //初始化GPIOC寄存器

又不吸//将USART3的TXD和RXD重映射到PC10和pc11
GPIO_PinRemapC研供各企构拉皮伤onfig(GPIO_PartialRemap_USART3,ENABLE);
}

stm32端口复用与重映射

GPIO mode-> GPIO_Mode_AF
调用GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_XXX); (->例:设置GPIOA_1)

文章推荐

相关推荐