STM32单片机(F03C8T6)-点灯(寄存器点灯和库函数点灯)
作者:Whappy
时间:2024.10.9
日志:本实验是我第一个32位单片机实验程序,如有不足请指点!
#include "stm32f10x.h" // Device headerint main(void)
{//寄存器点灯RCC->APB2ENR = 0x00000010;GPIOC->CRH = 0x00300000;GPIOC->ODR = 0x00002000;//库函数点灯RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitTypeDef GPIO_InitStructrue;GPIO_InitStructrue.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructrue.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructrue.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStructrue);GPIO_SetBits(GPIOC,GPIO_Pin_13);GPIO_ResetBits(GPIOC,GPIO_Pin_13);while(1){}
}
下面是对这段代码的逐行解释。该代码是为STM32F103微控制器编写的,目的是控制GPIO端口点亮或熄灭LED灯。
c
复制代码
#include "stm32f10x.h" // Device header
- 包含STM32F10x系列微控制器的设备头文件,提供与设备相关的寄存器定义和功能。
c
复制代码
int main(void) {
- 定义主函数,程序执行的入口点。
c
复制代码
//寄存器点灯 RCC->APB2ENR = 0x00000010;
- 启用GPIOC端口的时钟。在APB2时钟使能寄存器(RCC->APB2ENR)中设置第4位(对应GPIOC)。这允许对GPIOC的访问。
c
复制代码
GPIOC->CRH = 0x00300000;
- 配置GPIOC的第13引脚为推挽输出(输出模式)。CRH寄存器用于配置高位引脚(8-15),
0x00300000
表示第13引脚的模式为输出,最大速度为50MHz。
c
复制代码
GPIOC->ODR = 0x00002000;
- 设置GPIOC的输出数据寄存器(ODR),使第13引脚输出高电平(点亮LED)。这里的
0x00002000
对应的是第13位为1。
c
复制代码
//库函数点灯 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
- 使用STM32标准库函数启用GPIOC的时钟。这个函数是库函数封装的,提供了更易用的接口。
c
复制代码
GPIO_InitTypeDef GPIO_InitStructrue;
- 定义一个结构体实例,用于初始化GPIO。
GPIO_InitTypeDef
是一个结构体,包含配置GPIO所需的参数。
c
复制代码
GPIO_InitStructrue.GPIO_Mode = GPIO_Mode_Out_PP;
- 设置GPIO模式为推挽输出(GPIO_Mode_Out_PP)。推挽输出可以输出高电平和低电平,适合连接LED等负载。
c
复制代码
GPIO_InitStructrue.GPIO_Pin = GPIO_Pin_13;
- 指定要配置的引脚,这里是第13引脚(对应连接的LED)。
c
复制代码
GPIO_InitStructrue.GPIO_Speed = GPIO_Speed_50MHz;
- 设置GPIO的输出速度为50MHz,定义引脚切换的频率。
c
复制代码
GPIO_Init(GPIOC,&GPIO_InitStructrue);
- 调用库函数
GPIO_Init
,根据定义的结构体GPIO_InitStructrue
初始化GPIOC的第13引脚。
c
复制代码
GPIO_SetBits(GPIOC,GPIO_Pin_13);
- 设置GPIOC的第13引脚为高电平(点亮LED)。
c
复制代码
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
- 将GPIOC的第13引脚设置为低电平(熄灭LED)。这将使LED熄灭。
c
复制代码
while(1) { } }
- 无限循环,保持程序持续运行。此处没有具体实现,可以添加其他逻辑,例如LED闪烁等。
总结:
这段代码通过直接访问寄存器和使用STM32标准库来控制GPIO端口,点亮和熄灭连接到STM32F103的LED。前半部分通过直接操作寄存器实现,后半部分则通过使用库函数实现,展示了两种不同的编程风格。