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

devtools/2024/10/10 11:22:44/

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


http://www.ppmy.cn/devtools/123671.html

相关文章

团标大数据(2024年09月)

一、总体数据 截至2024年09月30日,共有8240家社会团体在全国团体标准信息平台注册,其中民政部登记注册的有973家,地方民政部门登记注册的有7267家。社会团体在平台共计公布89857项团体标准,其中民政部登记注册的社会团体公布3603…

使用C语言获取iostat中的await值的方法和方案

使用C语言获取iostat中的await值的方法和方案 1. 准备工作2. 调用iostat命令并获取输出3. 解析iostat输出4. 完整实现和错误处理5. 注意事项在Linux系统中,iostat命令是sysstat软件包的一部分,用于监控系统的CPU、网卡、tty设备、磁盘、CD-ROM等设备的活动情况和负载信息。其…

Word 首行缩进 2 字符怎么设置?具体步骤演示

在日常的文档编辑和排版中,首行缩进是一个非常常见且重要的排版需求。尤其是在中文文档中,首行缩进能够提高文章的美观度和可读性,使文章结构更加清晰。那 Word 首行缩进 2 字符怎么设置呢?下面就给大家展示具体的操作步骤。 设置…

深入理解C#中的TimeSpan结构体:创建、访问、计算与格式化

TimeSpan 结构体在 C# 中用于表示两个时间点之间的时间间隔。它可以表示天、小时、分钟、秒以及毫秒的时间长度。TimeSpan 结构体非常适合于处理时间差,比如计算两个 DateTime 对象之间的差异,或者在需要表示一段时间长度时使用。 以下是一些使用 TimeS…

Git---Git打标签

打标签 像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点( v1.0 、 v2.0 等等)。 在本节中,你将会学习如…

PHP基本语法总结

目录 输出语句 注释 数据类型(变量) 局部和全局作用域 类型比较(松散比较与严格比较) 常量 运算符 并置运算符 不等于 逻辑运算符 条件语句 数组 关联数组 数组排序 一般数组 关联数组 循环 函数 变量函数 魔…

光路科技以技术创新为驱动,打造创新型企业新标杆

近日,深圳市光路在线科技有限公司(光路科技)凭借其出色的创新能力和市场表现,荣获深圳市中小企业服务局颁发的“创新型中小企业”称号。这一荣誉标志着光路科技在推动行业发展和技术进步方面取得了显著成就。 光路科技自2008年成立…

ASP.NET MVC-懒加载-逐步加载数据库信息

环境: win10, .NET 6.0 目录 问题描述解决方案基础版数据库查询部分(Entity Framework)控制器前端页面 加载到表格版 问题描述 假设我数据库中有N个表,当我打开某页面时,每个表都先加载一部分(比如20条&am…