一、LED模块电路
二、STM32启动文件
启动文件主要功能如下:
- 初始化堆栈指针 SP;
- 初始化程序计数器指针 PC;
- 设置堆、栈的大小;
- 设置中断向量表的入口地址;
- 配置外部 SRAM 作为数据存储器(这个由用户配置,一般的开发板可没有外部SRAM);
- 调用 SystemInit() 函数配置 STM32 的系统时钟;
- 设置 C 库的分支入口“ __main”(最终用来调用 main 函数) 。
三、编写点亮一个LED程序
#define PERIPH_BASE ((unsigned int)0x40000000) // block2基地址
#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000) // APB2基地址
#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000) // GPIOC基地址
#define GPIOC_CRL *(unsigned int*)(GPIOC_BASE+0x00)
#define GPIOC_CRH *(unsigned int*)(GPIOC_BASE+0x04)
#define GPIOC_IDR *(unsigned int*)(GPIOC_BASE+0x08)
#define GPIOC_ODR *(unsigned int*)(GPIOC_BASE+0x0C)
#define GPIOC_BSRR *(unsigned int*)(GPIOC_BASE+0x10)
#define GPIOC_BRR *(unsigned int*)(GPIOC_BASE+0x14)
#define GPIOC_LCKR *(unsigned int*)(GPIOC_BASE+0x18)
#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)
#define RCC_BASE (AHBPERIPH_BASE + 0x1000)
#define RCC_APB2ENR *(unsigned int*)(RCC_BASE+0x18) //外设时钟基地址
typedef unsigned int u32;
void SystemInit()
{
}
void delay(u32 i)
{
while(i--);
}
int main()
{
RCC_APB2ENR|=1<<4; // 开启GPIOC端口时钟
GPIOC_CRL&=~(0x0F<<(4*0));
GPIOC_CRL|=(0x03<<(4*0));
GPIOC_BSRR=(1<<(16+0)); // 点亮LED
while(1)
{
GPIOC_BSRR=(1<<(16+0)); // 点亮LED
delay(0xFFFFF);
GPIOC_BSRR=(1<<0); // 熄灭LED
delay(0xFFFFF);
}
}