看了视频,也试着用操作寄存器的方法点亮下LED。
应用keil5编译软件。
1.首先创建新工程。 如何创建工程就不介绍了
2.添加启动文件
启动文件是由官方给出的。关于103的就有很多种。
大部分都是容量的不同.我们这里用的是startup_stm32f10x_hd.s,因为我们的芯片是STM32F103ZET6,这里是大容量的
这里可以查看ST公司官方给出的选项参考
在其他的文章中我们会详细解释这个启动文件,这里就先不介绍了。启动文件就是汇编编写的文件,用于调入__main,进入C编程。
3.添加好了启动文件,之后加入我们的main.c(应为也是学习着编程,就实现功能就行,没太注重格式)
在main.c中开始用C语言编程。
int main(void)
{
while(1);
}
4.点亮LED还是要会看原理图的。在开发板中,查看原理图
我们可以看出,LED是共阳极的,也就是接了3.3V电源。要想点亮LED,我们只需要在管脚上输出低电平即可。
那如何让管脚输出低电平呢?
根据STM32手册查看外设定义:
//端口配置低寄存器(GPIOx_CRL)(端口x配置位(y = 0…7)) (x=A..E)--GPIOB_CRL =0x00300000;
//23:22-CNFy[1:0]:00:模拟输入模式;
//21:20-MODEy[1:0]:11:输出模式,最大速度50MHz;
GPIOB_CRL =0x00300000;
//端口输出数据寄存器(GPIOx_ODR) (x=A..E)
GPIOB_ODR =0x00000000;
在点亮LED的操作中,其实GPIO也只用这2个寄存器就是可以了。一些其他复杂的操作,我们会在以后的文章中记录说明。
关于时钟话题:
任何操作都是需要开启时钟,我们这里只是打开了GPIO上的时钟,GPIO是挂接在APB2中,AHB系统总线。
我们只开启就好,暂不考虑配置时钟,找到APB2的寄存器,开启GPIOB的时钟就可以了。
//RCC_APB2ENR = 0x00000008;这个只是打开了IOPB的开关.
//使能了GPIOB的时钟
RCC_APB2ENR = 0x00000008;
//这里的时钟使用的是内部时钟HSI,
这样我们就可以下载至开发板中,去点亮LED了。
注意,在Debug中选好配置。