STM32学习笔记(入门篇)
一、寄存器编程
1、GPIO点亮LED
(1) 打开GPIO端口的时钟
GPIO挂载在RCC时钟总线上,默认为关闭,需要在程序中配置RCC寄存器的值打开时钟
(2) 配置IO口为推挽输出模式
GPIO有输入输出模式可以选择
(3) 控制ODR寄存器
LED灯挂载在PB0引脚处
因此要把GPIOB_ODR电平拉低
2、C语言中的置位与清零操作
(1) 置位:|=
e.g.
//把第3位置1,其它位不变
*(unsigned int *)0x40021018 |= ((1)<<3);
(2) 清零:&=~
e.g.
//把第0位清零,其它位不变
*(unsigned int *)0x40021018 &=~ ((1)<<0);
二、寄存器映射
1、GPIO简介
GPIO——general purpose intput output通用输入输出端口
STM32的最小系统:电源、晶振 IO、下载 IO、BOOT IO、复位 IO。
其它的IO口统称GPIO,某些GPIO有默认功能,专用器件接到专用总线中。
2、使用寄存器映射点亮LED灯
(1) 首先宏定义总线基地址
#define APB2PERIPH_BASE ((unsigned int) 0x40000000)
(2) 再宏定义外设地址(用基地址+偏移地址的形式)
#define GPIOB_BASE (APBEPERIPH_BASE + 0x0C00)
(3) 对于需要操作的外设,直接强制转换成指针类型,为了便于操作直接在前面加上取值符。
#define GPIO_CRL *(unsigned int*)(GPIOB_BASE + 0x00)
#define GPIO_CRH *(unsigned int*)(GPIOB_BASE + 0x04)
#define GPIO_ODR *(unsigned int*)(GPIOB_BASE + 0x0C)
三、STM32固件库
1、启动文件
startup_stm32f10x_hd.s
汇编语言编写
功能:设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、调用C库函数_main进入C的世界。
2、时钟配置文件
system_stm32f10x.c
功能:把外部时钟HSE-8M经过PLL倍频成为72M。
3、外设相关文件
stm32f10x.h
功能:实现内核之外的外设的寄存器映射
stm32f10x_xx.c
(xxx:GPIO、USART、I2C、SPI、FSMC等)
功能:外设的驱动函数库文件
stm32f10x_xx.h
(xxx:GPIO、USART、I2C、SPI、FSMC等)
功能:存放外设的初始化结构体、外设初始化结构体成员的参数列表、外设固件库函数的声明。
4、内核相关文件
CMSIS——Cortex微控制器软件接口标准
core_cm3.h
功能:实现了内核里面外设的寄存器映射
core_cm3.c
功能:实现符合标准的通用库函数
NVIC(嵌套向量中断控制器)、SysTick(系统滴答定时器)
misc.h:ST公司自己的特殊寄存器映射
misc.c:ST公司自己的特殊库函数
5、头文件的配置文件
stm32f10x_conf.h
功能:头文件的头文件
内容:
//stm32f10x_usart.h
//stm32f10x_i2c.h
//stm32f10x_spi.h
//stm32f10x_adc.h
…
6、中断函数文件
stm32f10x_it.c
stm32f10x_it.h
功能:
专门存放中断服务函数的C文件
中断服务函数可以随意存放在其他地方,不需要专门写在stm32f10x_it.c中。
四、新建固件库函数工程
1、工程文件夹清单
名称 | 作用 | 创建者 |
---|---|---|
Doc | 存放说明文件 | 用户 |
Libraries | 存放库文件 | 用户 |
Listing | 存放编译时的C/汇编/链接的清单列表 | 自动生成 |
Output | 存放编译时产生的调试信息、hex文件、预览信息、封装库等 | 自动生成 |
Project | 存放工程 | 用户 |
User | 用户编写的驱动文件 | 用户 |