STM32野火库学习笔记

时间:2024-04-08 14:50:27

长期习惯于在一些大的店家的成熟库源上进行开发,每当调用函数无法使用时都要回过头来重新阅读库的内容,与其这样支离破碎的学习,不如系统性的把库研究一遍。反正STM32的普适性是很高的,并且库这个东西各家都很相似,学一家基本就可以了。本来是大二下学期的规划居然拖到大四做,也是惭愧。

内核结构:
STM32野火库学习笔记
存储单元:
Flash:代码+常量(const)
SRAM:变量,堆栈
FSMC:连接外部sram flash

**存储器映射:**给存储器分配地址(重新再分配一次就叫重映射),大约4GB的空间

APB1挂载低速外设,APB2 和 AHB 挂载高速外设

推挽输出模式一般应用在输出电平为 0 和 3.3 伏而且需要高速切换开关状态的场合。在
STM32 的应用中,除了必须用开漏模式的场合,我们都习惯使用推挽输出模式。

名为“startup_stm32f10x_hd.s”的文件,它里边使用汇编语言写好了基本程序,当
STM32 芯片上电启动的时候,首先会执行这里的汇编程序,从而建立起 C 语言的运行环境,
所以我们把这个文件称为启动文件。

自己构造头文件以及库函数(C语言):
头文件防止重定义的语句:
( 英文大写+前后_+ . 换成 _ )
#ifndef HEAD_H
#define HEAD_H
#endif

结构体及其指针:
自己实验:

Riqi_Typedef riqi111;//正常结构体
Riqi_Typedef struczhizhen;//指针
struczhizhen = (Riqi_Typedef
)0x42001c; //将二进制数强制转化为结构体指针 再让指针指向它
struczhizhen->year = 2;//对结构体内的变量进行赋值
实例:
在头文件中定义一个指针RCC
指向RCC_BASE((AHBPERIPH_BASE + 0x1000)一个二进制数值)经过强制类型转化后的地址:
#define RCC_BASE(数值) (AHBPERIPH_BASE + 0x1000)
#define RCC_APB2ENR (unsigned int)(RCC_BASE + 0x18)
#define GPIOB_CRL(变量) (unsigned int)(GPIOB_BASE + 0x00)
RCC_APB2ENR |= ( (1) << 3 );
GPIOB_CRL &= ~( (0x0f) << (4*0) );
包装成函数封装为gpio.c:
#define LED_G_GPIO_CLK_ENABLE (RCC->APB2ENR |= ( (1) << 3 ))
void GPIO_SetBits(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin)
{
GPIOx->BSRR |= GPIO_Pin;
}

enum
使用枚举类型可以对结构体成员起到限定输入的作用,只能输入相应已定义的枚举值:
typedef enum
{
GPIO_Speed_10MHz = 1, // 10MHZ (01)b 1
GPIO_Speed_2MHz, // 2MHZ (10)b 2
GPIO_Speed_50MHz // 50MHZ (11)b 3
}GPIOSpeed_TypeDef;
对于不能顺序安排的只能一个一个赋:
typedef enum
{ GPIO_Mode_AIN = 0x0, // 模拟输入 (0000 0000)b
GPIO_Mode_IN_FLOATING = 0x04, // 浮空输入 (0000 0100)b
GPIO_Mode_IPD = 0x28, // 下拉输入 (0010 1000)b
GPIO_Mode_IPU = 0x48, // 上拉输入 (0100 1000)b

GPIO_Mode_Out_OD = 0x14, // 开漏输出 (0001 0100)b
GPIO_Mode_Out_PP = 0x10, // 推挽输出 (0001 0000)b
GPIO_Mode_AF_OD = 0x1C, // 复用开漏输出 (0001 1100)b
GPIO_Mode_AF_PP = 0x18 // 复用推挽输出 (0001 1000)b
}GPIOMode_TypeDef;

typedef struct
{
uint16_t GPIO_Pin;
uint16_t GPIO_Speed;
uint16_t GPIO_Mode;
}GPIO_InitTypeDef;
STM32野火库学习笔记
STM32野火库学习笔记

**Stm32f10x_conf.h STM32野火库学习笔记

断言:**
STM32野火库学习笔记

STM32野火库学习笔记

STM32野火库学习笔记