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

相关推荐
jasonslaex1 小时前
stm32传感器通用驱动代码
驱动开发·stm32·嵌入式硬件
嵌入式仿真实验教学平台6 小时前
深入探索IIC-OLED显示技术:嵌入式仿真平台如何重塑高校教学范式——深圳航天科技创新研究院技术赋能新一代工程教育
科技·单片机·gd32·嵌入式仿真·iic-oled显示技术
十碗阳春面7 小时前
TI 毫米波雷达走读系列—— 3DFFT及测角
单片机·嵌入式硬件·毫米波雷达·mmwave radar·awr/iwr系列
CPETW7 小时前
同旺科技 USB TO SPI / I2C适配器(专业版)--EEPROM读写——C
c语言·开发语言·科技·stm32·单片机·嵌入式硬件·电子
keke108 小时前
PLC入门【6】计时器、计数器、存储器
嵌入式硬件
小智学长 | 嵌入式11 小时前
Arduino入门教程:4-1、代码基础-进阶
嵌入式硬件·物联网·arduino
国科安芯12 小时前
【AS32系列MCU调试教程】调试工具:Eclipse调试工具栏与窗口的深入分析
单片机·嵌入式硬件·eclipse
nuannuan2311a12 小时前
9N65-ASEMI照明系统应用专用9N65
单片机·嵌入式硬件
woshihonghonga12 小时前
高级定时器TIM1、TIM8
stm32·单片机·嵌入式硬件
腾飞的信仰12 小时前
举例说明单片机,主循环和中断资源访问冲突的案例
单片机·嵌入式硬件·mongodb