玩转STM32

总线:

I总线是指令总线
S总线是系统总线
D总线是数据总线

地址:

地址空间:2的32次方(寻址4GB空间),分成8个Block(0-7),每个512MB

存储器:

Block0  SRAM(Flash)    STM32429IGT6  flash可用1MB  0x0000 0000-0x1FFF FFFF(512MB)
Block1  SRAM         存储数据,变量(256KB)(分成三部分)SRAM1 (112KB)、
                     SRAM2(16KB)、SRAM3(64KB)
Block2  片上外设      GPIO、USART(串口)、I2C、SPI .......(512M)(AHB1(高速)、AHB2、
                      APB1(低速)、APB2)
Block3  FMC的bank1-bank2(512MB)   一个占128MB
Block4  FMC的bank3-bank4(512MB)   一个占128MB
Block5  FMC    没用到
Block6  FMC    没用到
Block7  Cortex-M4内部外设(如:SCB、NVIC)  (ARM公司设计)(512MB)

寄存器:

F429有GPIOxy(x:A-I)9个端口,每个端口有16个引脚(y:0-15)
(unsigned int*) 将变量强转成地址指针  
*(unsigned int*) 将变量强转成地址指针,并进行指针操作
#define 别名 *(unsigned int*)寄存器地址

总线基地址:

APB1      0x4000 0000    0x0
APB2      0x4001 0000    0x0001 0000
AHB1      0x4002 0000    0x0002 0000
AHB2      0x5000 0000    0x1000 0000
AHB3      0x6000 0000    不在片上外设范围内

GPIO基地址:(每一节偏移0x0000 0400)

GPIOA                0x4002 0000      0x0   (AHB1基地址)
GPIOB                0x4002 0400      0x0000 0400
GPIOC                0x4002 0800      0x0000 0800
GPIOD               0x4002 0C00      0x0000 0C00
GPIOE                0x4002 1000      0x0000 1000
GPIOF               0x4002 1400      0x0000 1400
GPIOG               0x4002 1800      0x0000 1800
GPIOH               0x4002 1C00      0x0000 1C00
GPIOI                 0x4002 2000      0x0000 2000

GPIOx(x=A-I)端口寄存器列表:(相对GPIOx(x=A-I)的基地址偏移:0x04)

GPIOx_MODER
GPIOx _OTYPER
GPIOx_OSPEEDR
GPIOx_PUPDR
GPIOx_IDR
GPIOx_ODR
GPIOx_BSRR
GPIOx_LCKR
GPIOx_AFRL
GPIOx_AFRH
(以0x04单位递增)
(每个GPIOx(x=A-I)有16个引脚,每个引脚有一套寄存器引脚列表)

使用寄存器点亮LED:

【注意】
1.外设GPIOx(x=A-I)时钟默认关闭状态
2.GPIOx_MODER默认处于输入状态(00)
3.操作GPIOx_ODR处于输出低(高)电平
【代码实现】
#define GPIOH_MODER *(unsigned int*)0x40021C00
#define GPIOH_ODR *(unsigned int*)(0x40021C00+0x14)
#define RCC_AHB1ENB *(unsigned int*)(0x40023800+0x30)
 int main(void)
{
    //打开GPIOH端口时钟
         RCC_AHB1ENB |=1<<7;
         //让PH10处于输出状态
         GPIOH_MODER |=(1<<(2*10));
         //让PH10输出低电平
    GPIOH_ODR &=~(1<<10);
         while(1);
}
void SystemInit()
{}

我的私人博客:blog.icreidea.com,欢迎交流

此为原创作品,转载须经本人同意

转载于:https://my.oschina.net/InnoPointer/blog/1796660

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答:要零死角玩转STM32,首先需要了解STM32芯片的内部FLASH保护功能。在实际发布的产品中,如果不作任何保护措施,可以使用下载器直接将内部FLASH的内容读取回来,从而得到代码的拷贝。为了防止这种情况发生,STM32芯片提供了多种方式保护内部FLASH的程序不被非法读取。默认情况下,该保护功能是不开启的,需要改写内部FLASH选项字节中的配置来开启该功能。\[2\] 要恢复STM32芯片的选项字节相关的位到默认值,可以直接操作寄存器。通过使用类似"(*(__IO uint32_t *)(OPTCR_BYTE0_ADDRESS))=0x0FFFAAE9;"和"(*(__IO uint16_t *)(OPTCR1_BYTE2_ADDRESS))=0x0FFF;"这样的语句,可以将OPTCR和OPTCR1寄存器与选项字节相关的位恢复到默认值。\[3\] 除了了解内部FLASH保护功能和恢复选项字节的方法,还需要深入学习STM32芯片的技术规格和参考手册,以及掌握相应的开发工具和库函数。这样才能全面了解STM32芯片的功能和使用方法,从而实现零死角的玩转STM32。 #### 引用[.reference_title] - *1* *2* *3* [设置FLASH的读写保护及解除—零死角玩转STM32-F429系列](https://blog.csdn.net/oshan2012/article/details/90316700)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值