STM32学习笔记—点亮led灯
STM32的I/O口有很多的功能,所以称为GPIO(GENERAL PURPOSE)
其中GPIO又分为A,B,C,D,E,F,G不同的组,每个组端口又分为0~15,共16个不同的引脚,不同的芯片引脚数量也不同,所用的学习板为STM32F103RBT6;
I/O口的八种模式:
输入浮空; 模拟输入;
输入上拉; 输入下拉;
开漏输出; 推挽输出;
推挽式复用功能; 开漏复用功能;
每个I/O口可以自由编程,单I/O口寄存器必须按32位字节被访问。并且很多I/O口都是5V兼容的,手册当中标记FT的就是5V电平兼容的。
I/O的七个寄存器(register):(X=A,B,C,D….G)
32位端口配置低寄存器GPIOX_CRL; 选择作为输入还是输出
32位端口配置高寄存器GPIOX_CRH; 选择作为输入还是输出
32位端口输入数据寄存器GPIOX_IDR; 保存了输入电平还是输出电平
32位端口输出数据寄存器GPIOX_ODR; 保存了输入电平还是输出电平
32位端口位设置/清除寄存器GPIOX_BSRR; 设置控制的数据为0/1
32位端口位清除寄存器GPIOX_BRR; 设置控制的数据为0/1
32位端口配置锁定寄存器GPIOX_LCKR;设置锁定引脚后,不能修改其配置
32位端口配置低寄存器GPIOX_CRL(低8位):
一个I/O口有16个引脚,低八位配置pin0~pin7引脚;CRL寄存器中每四位控制一个引脚,分别为CNF[1:0]端口配置位和MODE[1:0]端口模式位
当MODEy[1:0]=00即输入模式(复位后的状态);
CNFy[1:0]=00---模拟输入模式
01---浮空输入模式(复位后的状态)
10---上拉/下拉输入模式
11---保留
当MODEy[1:0]>00即输出模式
CNFy[1:0]=00---通用推挽输出模式 MODEy[1:0]=00---输入模式(复位后)
01---通用开漏输出模式 01---输出模式,10MHz
10---复用功能推挽输出模式 10---输出模式,2MHz
11---复用功能开漏输出模式 11---输出模式,50MHz
例子:配置GPIOC的pin4管脚,其最大输出速度为10MHz的通用推挽输出模式,则:需配置GPIOC_CRL寄存器16到19位的CNFP[1:0]和MODE[1:0]的参数;MODE[1:0]=01,即16、17位写入01;CNF[1:0]=00;
32位端口位设置/清除寄存器GPIOX_BSRR;
其中BRy(y=0~31)位用于写入1时实现清零,使引脚输出低电平;BSy(y=0~32)位用于写入1时实现置1;写零是无效的。
STM32库的介绍:
- startup_stm32f10x_md.s是系统的启动文件,小苗板的芯片为STM32F103RBT6,FLASH为64k-128k之间,属于中等密度产品
- stm32f10x.h是把STM32的所有寄存器进行地址的映射,作用如头文件一样;
- 源文件core.c和头文件core.h是Cortex-M3核设计商提供的进入M3的内核接口
- system_stm32f10x.c是设置系统时钟和总线时钟
- stm32f10x_gpio.c是配置I/O口的库
- stm32f10x_rcc.c是每个外设都需要的头文件,用于配置系统时钟的外设时钟,包含了相应外设的C语言函数实现的声明,只有把头文件一起包含到工程中才能使用这些外设库
- stm32f10x_conf.h是专门用来管理所有库的头文件
来源:https://www.cnblogs.com/vilsen-stm32/p/4375452.html