STM32-M3系统启动
(2008-12-10 22:44:52) 标签: 杂谈 |
(1)BOOT PIN的配置
BOOT1=x
BOOT1=0
BOOT1=1
在STM32中,从0到0x08000000之间是一个映像区,具体内容决定于其启动瞬间时,BOOT0、BOOT1针脚状态,从而映射到0x08000000开头的FLASHROM段,还是从0x1ffff000开始的系统储存器段,还是从0x20000000开始的RAM段。由于启动时处理器是从0地址开始执行指令的,因此就可以控制开机时执行的是哪一段的指令了。个人觉得,从RAM区启动似乎只有调试的意义,因为实际使用中根本没办法在开机之前就往RAM写入数据。
(2)感觉ST提供的函数库太复杂太多了,下面我列出一个ST程序必须的几个文件:
stm32f10x_lib.h
首先,该文件定义了一些片内外设的寄存器的相关结构体,其中GPIO的结构体是:
typedef struct
{
} GPIO_TypeDef;
可以看到这个结构体包含了对GPIOx进行控制的所有寄存器。接下来看下面的宏定义:
#define PERIPH_BASE
#define APB2PERIPH_BASE
#define GPIOA_BASE
#define GPIOB_BASE
#define GPIOC_BASE
#define GPIOD_BASE
#define GPIOE_BASE
#define GPIOF_BASE
#define GPIOG_BASE
然后再定义:
#ifdef _GPIOA
#endif
这样GPIOA就对应GPIOA所在寄存器的初始地址了,又因为上面结构体中寄存器是按次序存放的,地址是严格对应的。这样一来在应用程序中GPIOA->ODR(注意GPIOA是指针所以用符号->)就表示寄存器GPIOA_ODR了