自学《STM32库开发实战指南》的笔记
STM32库开发
基础知识
- STM32库是对STM32提供的函数接口,API。通过调用函数接口来配置STM32寄存器。
- 为解决不同芯片厂商生产的Cortex微控制器软件的兼容性,建立了CMSIS标准。CMSIS层提供的是硬件抽象层,对软件移植有好处。
- 用户层是要进行删减(条件编译)和改动的文件,CMSIS层的文件直接包含进工程。
C语言复习
1.位操作
清零:& 设值: |
移位操作:GPIOA->ODR|=1<<5; //PA.5 输出高,不改变其他位
这样我们一目了然,5 告诉我们是第 5 位也就是第 6 个端口,1 告诉我们是设置为 1 了。
~取反操作:SR 寄存器的每一位都代表一个状态,某个时刻我们希望去设置某一位的值为 0,同时其他位都保留为 1,
TIMx->SR = (uint16_t)~TIM_FLAG;#defineTIM_FLAG ((uint16_t)0x0001))
2.define 宏定义
3.ifdef 条件编译
#ifdef 标识符
程序段 1
#else
程序段 2
#endif
4.extern 变量声明
5.typedef 类型别名
struct _GPIO
{
__IO uint32_t CRL;
__IO uint32_t CRH;
…
};
struct _GPIO GPIOA;//定义结构体变量 GPIOA
使用类型别名的代码如下:
typedef struct
{
_IO unit32_t CRL;
_IO unit32_t CRH;
....
}GPIO_TypeDef;
GPIO_TypeDef GPIOA;//定义结构体变量 GPIOA
6.结构体
声明结构体类型:
struct 结构体名{
成员列表;
}变量名列表;
引用:结构体变量名字.成员名 若是结构体指针 Usart->BaudRate;
STM32系统架构
STM32时钟系统
端口复用
STM32的内置外设的外部引脚是与GPIO复用的。复用端口初始化有几个步骤:
1) GPIO 端口时钟使能。要使用到端口复用,当然要使能端口的时钟了。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
2) 复用的外设时钟使能。比如你要将端口 PA9,PA10 复用为串口,所以要使能串口时钟。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
3) 端口模式配置。 在 IO 复用位内置外设功能引脚的时候,必须设置 GPIO 端口的模式。
端口重映射
一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的端口。具体对应关系查看《STM32 中文参考手册 V10》的 P116 页“8.3 复用功能和调试配置”。
所以重映射我们同样要使能复用功能的时候讲解的 2 个时钟外,还要使能 AFIO 功能时钟,然后要调用重映射函数。详细步骤为:
1)使能 GPIOB 时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
2)使能串口 1 时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
3)使能 AFIO 时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
4)开启重映射:
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);