购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 用寄存器方式编写闪烁点亮LED的程序

3.3.1 头文件程序的编写

头文件是指扩展名为“.h”的文件,头文件一般包含一些文件需要的共同的常量、结构体、类型定义、函数和变量声明,不要有变量定义、函数定义。

头文件程序的编写如图3-10所示。在Keil软件左边的工程管理窗口中双击“Mystm32f10x.h”头文件,右边的程序编辑器(一个类似记事本程序的文本编辑器)打开该头文件,如图3-10(a)所示。这是一个空文件,在程序编辑器中编写程序,编写完成的程序内容如图3-10(b)所示。也可以使用计算机的记事本直接打开User文件夹中的“Mystm32f10x.h”头文件,在记事本中编写程序,如图3-10(c)所示。编写完成后进行保存,Keil软件中的“Mystm32f10x.h”头文件程序自动更新为记事本编写的内容。

图3-10 头文件程序的编写

3.3.2 头文件的程序代码说明

1.宏定义

在C语言中允许用一个标识符代表一个字符串,称为“宏”,被定义为宏的标识符称为宏名。宏定义是指用一个指定的标识符(名称)来代表一个字符串。

1)无参数的宏定义

无参数的宏定义一般形式为:

用标识符代表字符串。例如,在“#define A8 12345678”后,程序就将A8当作12345678处理。使用“#undef A8”可取消该宏定义,即在“#undef A8”指令之后的A8就不再被当成12345678。“#”表示这是一条预处理(编译前的处理)命令。

无参数的宏定义要点:①宏名一般用大写字母,便于与变量名区分;②宏名的有效范围为从定义开始到文件结束,使用#undef可结束宏名的作用;③宏定义不是C语句,不需要在行末加分号;④对双引号内的字符串不进行宏的替换操作。

2)带参数的宏定义

带参数的宏定义一般形式为:

用标识符代表字符串,并且将标识符中的参数(形参)用实际使用的参数(实参)替换。例如:

带参数的宏定义要点:①标识符与参数表之间不能有空格出现;②字符串内的形参通常要用括号括起来以避免出错,如“#define B(x)(x)*(x)*(x)”;③形参不分配内存单元,故不必做类型定义。

2.程序说明

Mystm32f10x.h文件中的程序说明见表3-1,外设地址分配可参见图2-3。

表3-1 Mystm32f10x.h文件中的程序说明

续表

3.3.3 主程序文件(main.c)的编写

主程序文件是指含有main函数的文件。main函数是程序的入口(程序执行起点),不管一个工程中有多少个文件,程序都会找到main函数并从该函数开始执行,主程序文件一般用main.c命名。

主程序的编写如图3-11所示,在Keil软件左边的工程管理窗口中双击“main.c”文件,在右边的程序编辑器中打开该文件,如图3-11(a)所示。这是一个空文件,在程序编辑器中编写主程序,编写完成的主程序如图3-11(b)所示。

图3-11 主程序的编写

图3-11 主程序的编写(续)

3.3.4 主程序的程序代码说明

main.c文件中的程序说明见表3-2。程序中的RCC_APB2ENR为APB2外设时钟使能寄存器,用于开启GPIOC端口的时钟;GPIOC_CRH为端口配置高8位寄存器,用于设置PC13端口的工作模式;GPIOC_BSRR为端口置位/复位寄存器,用于对PC13端口置1和清0,即让PC13端口输出高电平和低电平,这样PC13端口外接的LED才有亮灭变化,这3个寄存器的各位功能在第2章有详细介绍。

表3-2 main.c文件中的程序说明

续表

3.3.5 启动文件说明

startup_stm32f10x_hd.s为启动文件,在Keil软件左边的工程管理窗口中双击“startup_stm32f10x_hd.s”文件,在右边的程序编辑器中打开该文件,如图3-12所示。

启动文件的程序采用Cortex-M3内核支持汇编指令编写,当STM32单片机上电启动时,首先会执行启动文件程序,从而建立起C语言的运行环境。startup_stm32f10x_hd.s文件由ST官方提供,一般情况下不用修改。该文件可从Keil5安装目录的Pack文件夹或ST库中找到,找到后将其添加到工程即可。不同系列的单片机或不同的编程软件,用到的启动文件程序内容可能不一样,但实现的功能是一样的。

启动文件的主要功能为:①初始化堆栈指针SP;②初始化程序计数器指针PC;③设置堆栈的大小;④设置中断向量表的入口地址;⑤配置外部SRAM作为数据存储器;⑥调用SystemInit()函数配置STM32的系统时钟;⑦设置C库的分支入口“__main”以调用执行main函数。

图3-12 打开的startup_stm32f10x_hd.s启动文件

3.3.6 编译程序

程序编写过程中或编写结束后,为了检查程序语法是否有错误,可对程序进行编译。在编译时,编程软件会检查程序是否有错误,如果有错误则显示错误信息,并停止编译。

在Keil软件中进行程序编译的操作如图3-13所示。单击工具栏上的“ ”工具,或执行菜单命令“Project”(工程)→“Rebuild all target files”(编译所有的目标文件),软件马上对程序进行编译,并在下方的输出窗口中显示有关的编译信息。如果出现“0 Error(s),0 Warning(s)”,如图3-13(a)所示,则表示程序没有错误和警告(至少语法上是正确的)。如果程序有错误,如图3-13(b)所示,SystemInit函数缺少首大括号,编译时会出现“1 Error(s),0 Warning(s)”,并指出错误位置和内容。按提示找到程序中的错误,改正后再进行编译,直到没有错误。若编译时仅出现警告,程序还是可以正常运行的。

图3-13 编译程序

图3-13 编译程序(续) xy4AfMBwilTmmPNJGO8wRMtBqXKt9CfRHpcnu04HAOvbc7opv8LQ3PvvddvBbdao

点击中间区域
呼出菜单
上一章
目录
下一章
×