STM32-M3系统启动

STM32-M3系统启动

  (2008-12-10 22:44:52)
标签: 

杂谈

 

(1)BOOT PIN的配置

BOOT1=x   BOOT0=0  用FLASH  MEMORY   如果悬空是不是默认该模式呢?一般选这种方式

BOOT1=0   BOOT0=1  用System MEMORY   这种方式下 可以用UART1 下载程序

BOOT1=1   BOOT0=1  用片内SRAM  

在STM32中,从0到0x08000000之间是一个映像区,具体内容决定于其启动瞬间时,BOOT0、BOOT1针脚状态,从而映射到0x08000000开头的FLASHROM段,还是从0x1ffff000开始的系统储存器段,还是从0x20000000开始的RAM段。由于启动时处理器是从0地址开始执行指令的,因此就可以控制开机时执行的是哪一段的指令了。个人觉得,从RAM区启动似乎只有调试的意义,因为实际使用中根本没办法在开机之前就往RAM写入数据。
    0x08000000开始到0x0801ffff之间是FLASH ROM区,当然就是指向IC内置的闪存的。最基本的储存指令用的储存器,其内容似乎只能通过软件对其读写。只要软件没有BUG,恐怕这个方法是安全最安全了,因为硬件没办法对其读出。

(2)感觉ST提供的函数库太复杂太多了,下面我列出一个ST程序必须的几个文件:

    一个是启动代码:STM32F10X_LIB.H ;另一个是:stm32f10x_lib.h 

stm32f10x_lib.h 中包含文件stm32f10x_map.h是对寄存器的定义和封装,先举例分析这个文件:

首先,该文件定义了一些片内外设的寄存器的相关结构体,其中GPIO的结构体是:

typedef struct
{
  vu32 CRL;
  vu32 CRH;
  vu32 IDR;
  vu32 ODR;
  vu32 BSRR;
  vu32 BRR;
  vu32 LCKR;
} GPIO_TypeDef;

可以看到这个结构体包含了对GPIOx进行控制的所有寄存器。接下来看下面的宏定义:

#define PERIPH_BASE           ((u32)0x40000000)

#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)

#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
#define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
#define GPIOC_BASE            (APB2PERIPH_BASE + 0x1000)
#define GPIOD_BASE            (APB2PERIPH_BASE + 0x1400)
#define GPIOE_BASE            (APB2PERIPH_BASE + 0x1800)
#define GPIOF_BASE            (APB2PERIPH_BASE + 0x1C00)
#define GPIOG_BASE            (APB2PERIPH_BASE + 0x2000)

然后再定义:

#ifdef _GPIOA
  #define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)
#endif

这样GPIOA就对应GPIOA所在寄存器的初始地址了,又因为上面结构体中寄存器是按次序存放的,地址是严格对应的。这样一来在应用程序中GPIOA->ODR(注意GPIOA是指针所以用符号->)就表示寄存器GPIOA_ODR了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值