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

相关推荐
sramdram7 小时前
MCU微控制器OA打印机方案
单片机·嵌入式硬件·mcu·mcu微控制器
天天爱吃肉82188 小时前
【电源拆解:跟着问答逐一认识开关适配器PCB元器件】
大数据·人工智能·python·功能测试·嵌入式硬件·汽车
科芯创展11 小时前
3.5A,60VIN,异步降压芯片,XZ1815
单片机·嵌入式硬件
茯苓gao12 小时前
嵌入式开发笔记:Qt信号槽机制深度解析——从原理到实战的全方位指南
开发语言·笔记·嵌入式硬件·qt·学习
浅止菌13 小时前
海思回归第二弹:瑞芯微的隐忧与对手的反击
嵌入式硬件
Kuakewei88813 小时前
PW2609A在2.6A负载下压差0.14V,温升较3A工况低11°C
单片机·嵌入式硬件
Zyed13 小时前
[FreeRTOS]Day7项目介绍
stm32·单片机·嵌入式硬件
xuxie9914 小时前
start7 电机闭环控制
单片机·嵌入式硬件
嵌入式-老费15 小时前
esp32开发与应用(播放wav音频文件)
嵌入式硬件
LCG元15 小时前
嵌入式开发踩坑排查实战:从 STM32 外设初始化到 Linux SPI 驱动的 15 类硬件疑难故障深度复盘
linux·stm32·单片机