STM32单片机(F03C8T6)-点灯(寄存器点灯和库函数点灯)

作者:Whappy

时间:2024.10.9

日志:本实验是我第一个32位单片机实验程序,如有不足请指点!

复制代码
#include "stm32f10x.h"                  // Device header

int 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。前半部分通过直接操作寄存器实现,后半部分则通过使用库函数实现,展示了两种不同的编程风格。

相关推荐
Zeku6 小时前
Linux内核中SPI 子系统的整体架构
stm32·freertos·linux驱动开发·linux应用开发
czhaii10 小时前
MP3音乐播放器【FatFs+SD/TF卡+I2S-DAC】@STC32G144K246,实时解码MP3
单片机·硬件工程
炸膛坦客11 小时前
FreeRTOS 学习:(二十五)任务时间统计相关 API 函数
stm32·操作系统·freertos
时光の尘12 小时前
【STM32】两万字详解SD卡移植最新版本FatFs文件系统(ff16)
stm32·mcu·dma·sd·fatfs·sdio·ff16
bai54593614 小时前
STM32 CubeIDE 使用串口中断模式
stm32·单片机·嵌入式硬件
qq_4017004114 小时前
基于TMI6263BH芯片USB2.0 3.0电源控制与限流保护原理图
单片机·嵌入式硬件
fanged15 小时前
STM32(4)--时钟树
stm32·单片机·嵌入式硬件
List<String> error_P15 小时前
STM32启动流程及相关概念
单片机·嵌入式硬件
__万波__15 小时前
STM32L475蜂鸣器实验
stm32·单片机·嵌入式硬件
qq_4017004115 小时前
经典78M05 LDO经典应用电路
单片机·嵌入式硬件