入门学习STM32开发,首先要选择一种开发方式。STM32的开发方式主要有标准库开发、寄存器开发和HAL库开发(这个我没使用过,不太了解)。比较多的人选择的开发方式是库开发,使用这两种方式比较方便,但因经过函数封装,对底层的理解不足。由于我入门也是由标准库开发入门的,所以这里想专门写一下寄存器开发,边写边学习,欢迎一起探讨。
1、一般写法
注:采用的STM32F103ZET6芯片
ST官方提供了stm32f10x.h的头文件,里面有各个寄存器的地址定义,因此可以直接操作寄存器来对IO口进行配置,下面就以案件控制LED灯为例。
在stm32f10x.h头文件里有以下的IO口的宏定义及结构体
①假设LED灯接在GPIOB5引脚,根据手册我们要先开启GPIOB的时钟
RCC->APB2ENR |= 1<<3;
从手册中我们可以知道GPIOB位于APB2寄存器的第四位,且为了不改变其他位的值,进行了或运算,将第四位置1,其他位不变。
②接下来要配置端口,STM32有两个端口端口配置寄存器 CRL和CRH,CRL配置低八位,CRH配置高八位。我们要配置的是GPIOB的第6位-GPIOB5,配置为推挽输出,最大速度为50MHZ。
GPIOB->CRL &= 0XFF0FFFFF; //将GPIOB5