当前位置: 首页 > news >正文

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

相关文章:

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

作者:Whappy 时间:2024.10.9 日志:本实验是我第一个32位单片机实验程序,如有不足请指点! #include "stm32f10x.h" // Device headerint main(void) {//寄存器点灯RCC->APB2ENR 0x000…...

PCL 3D-SIFT关键点检测(曲率不变特征约束

PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新) 一、概述 3D-SIFT(Scale-Invariant Feature Transform)关键点检测是用于点云分析的一种有效方法,具有尺度不变性和旋转不变性。在处理复杂场景和物体识别时,通过对点云…...

Android上的AES加密

基础算法说明 https://www.youtube.com/watch?vlnKPoWZnNNM 虽然这个视频讲的非常详细,但是涉及到具体底层算法,大致流程 1. 将数据转成HEX或者byte array 2.将数据分层一块块等大小的数据 3.将数据和key 进行一次混合,加密之后的输出&…...

安全测试的漏洞类型

目录 一、安全测试的定义 二、安全测试的分类 1、静态扫描 2、内存扫描 3、动态安全测试 三、安全测试主要关注哪些方面的漏洞 漏洞一:SQL注入 漏洞二:XSS 漏洞三:暴力破解 漏洞四:文件包含文件上传漏洞 漏洞五&#…...

51 | 适配器模式:代理、适配器、桥接、装饰,这四个模式有何区别?

前面几篇文章我们学习了代理模式、桥接模式、装饰器模式,今天,我们再来学习一个比较常用的结构型模式:适配器模式。这个模式相对来说还是比较简单、好理解的,应用场景也很具体,总体上来讲比较好掌握。 关于适配器模式…...

ORM框架简介

什么是ORM? ORM(Object-Relational Mapping,对象关系映射)是一种编程技术,用于在关系数据库和对象程序语言之间转换数据。ORM框架允许开发者以面向对象的方式来操作数据库,而不需要编写复杂的SQL语句。简单…...

Windows系统上根据端口号查找对应进程

“开始”-“运行”,输入cmd,打开命令行窗口,输入netstat和findstr的组合,找出占用了4118的端口的进程 根据上述PID,使用tasklist和findstr的组合,找出对应进程是dsa.exe 要想kill此进程,可以打开…...

一文通透OpenAI o1:从CoT、Quiet-STaR、Self-Correct、Self-play RL、MCST等技术细节到工程复现

前言 注意,本文自10.12日起,正在每天更新的过程中,包括已写的部分也在不断修改(以增加更多技术细节、更加通俗易懂) 预计10.20完成第一版,10月底修订到第二版——具体修订记录详见本文文末.. 可能是去年写或讲的关于ChatGPT原理的…...

如何解决与kernel32.dll相关的常见错误:详细指南解析kernel32.dll文件缺失、损坏或错误加载问题

当你的电脑中出现错误kernel32.dll丢失的问题,会导致电脑不能出现正常运行,希望能够有效的帮助你有效的将丢失的kernel32.dll文件进行修复同时也给大家介绍一些关于kernel32.dll文件的相关介绍,希望能够有效的帮助你快速修复错误。 kernel32.…...

Caffeine Cache解析(一):接口设计与TinyLFU

Caffeine is a high performance Java caching library providing a near optimal hit rate. 自动加载value, 支持异步加载基于size的eviction:frequency and recency基于时间的过期策略:last access or last write异步更新valuekey支持weak referenceva…...

深入探索LINUX中AWK命令:强大的文本处理工具

深入探索LINUX中AWK命令:强大的文本处理工具 AWK 是一种编程语言,专为文本和数据处理设计,它以其强大的文本处理能力和简洁的语法在 Unix/Linux 系统中占据了重要地位。AWK 程序由一系列的模式(pattern)和动作(action)组成,对于输…...

数字化转型:解决项目管理困境的新路径

在当今这个飞速发展的数字化时代,企业如同在汹涌波涛中航行的船只,承受着前所未有的变革压力。而作为企业运作核心环节之一的项目管理,同样面临着巨大的挑战。 传统项目管理模式中的种种问题,犹如顽固的礁石,阻碍着项目…...

Arthas常用的命令(三)--monitor、jad 、stack

monitor:监控方法的执行情况 监控指定类中方法的执行情况 用来监视一个时间段中指定方法的执行次数,成功次数,失败次数,耗时等这些信息 参数说明 方法拥有一个命名参数 [c:],意思是统计周期(cycle of ou…...

Power BI之常用DAX函数使用介绍——提供数据源练习

前述: 本次使用数据是包含产品表、客户表、区域表、销售订单表的一份销售订单数据,数据源链接如下: 链接:https://pan.baidu.com/s/1micl_09hFrgz2aUBERkeZg 提取码:y17e 一、CALCULATE 1.语法结构 语法结构CALCUL…...

SQL-触发器(trigger)的详解以及代码演示

一、触发器的概念 触发器是一种特殊的存储过程,但是触发器不存在输入和输出参数,所以不能被显式的去调用,而是与特定的表相关联,当表中的数据发生变化时,触发器被激活并执行其定义的SQL代码。触发器可以是行级触发器&…...

【devops】x-ui 实现一键安装 x-ray 打造高速国际冲浪 | xray管理平台

一、部署X-UI篇 1、Github 地址&说明 github地址如下: https://github.com/FranzKafkaYu/x-ui?tabreadme-ov-file 2、一键部署 2.1、更新并安装curl #Ubuntu、Deibian系统 apt update && apt upgrade -y apt install curl -y #CentOS7 系统 yum…...

Linux系统编程——进程标识、进程创建

一、进程标识(pid) 每个进程都有一个非负整数形式的唯一编号,即 PID。PID 在任何时刻都是唯一的,但是可以重用,当进程终止并被回收以后,其 PID 就可以为其它进程所用。进程的 PID 由系统内核根据延迟重用算…...

【超级福利】openMind开源实习来袭,奖励高达万元,解锁你的AI实践新篇章!

亲爱的小伙伴们,是不是梦想着能在真实的项目中大展拳脚,却又苦于找不到合适的舞台?别担心,OpenI启智社区携手openMind Library工具链,为你量身打造了一场开源实习盛宴,保证让你的学习不再无聊,技…...

React JSX 使用条件语句渲染UI的两种写法

只针对函数组件 1. 第一种写法&#xff1a; function App({ id }) {return id1? <h1>hello</h1> : <h1>world</h1>; } 或者&#xff1a; function App({ id }) {return (<h1>{id1 && "hello" || id2 && "wo…...

谷歌-BERT-第四步:模型部署

1 需求 需求1&#xff1a;基于gradio实现大模型的WEB UI交互界面 2 接口 3 示例 import gradio as gr from transformers import *classifier pipeline("text-classification", model"./model", tokenizer"./model")gr.Interface.from_pipel…...

百考通智能任务书:贴合你的选题,拒绝空话假大空

毕业设计任务书是高校教学管理中的关键环节&#xff0c;它不仅标志着研究工作的正式启动&#xff0c;更是后续开题、实施、论文撰写和答辩全过程的行动依据。然而&#xff0c;许多学生在撰写时常常因不熟悉本专业写作规范、技术表达能力有限&#xff0c;或缺乏权威模板参考而陷…...

Claude本地化部署终极方案(企业级容器化全栈手册):支持Anthropic API兼容、流式响应、模型热切换与RBAC权限隔离

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Claude本地化部署的架构全景与企业级价值定位 Claude本地化部署并非简单地将模型权重下载后运行&#xff0c;而是一套融合推理引擎优化、安全沙箱隔离、API网关治理与可观测性集成的端到端架构体系。其核心目…...

钱钟书《围城》第1-5章阅读笔记:一场关于人生困境的提前预演

前言 钱钟书先生的《围城》被誉为"新儒林外史"&#xff0c;是中国现代文学史上风格独特的讽刺经典。这部创作于20世纪40年代的长篇小说&#xff0c;以抗战初期为背景&#xff0c;通过主人公方鸿渐的人生轨迹&#xff0c;深刻揭示了知识分子群体的精神困境与人性弱点。…...

别再死记硬背了!用5个生活化比喻彻底搞懂Linux进程的fork、exec和wait

别再死记硬背了&#xff01;用5个生活化比喻彻底搞懂Linux进程的fork、exec和wait想象你正在厨房准备一顿大餐。菜谱上写着"切菜"、"炒菜"、"装盘"等步骤&#xff0c;但突然发现需要同时处理多道菜品——这时候&#xff0c;你会本能地让家人分工…...

告别杂乱!用FileMenu Tools 8.4.2一键清理Windows 11右键菜单(附隐藏技巧)

Windows 11右键菜单精简指南&#xff1a;用FileMenu Tools打造高效工作流每次在文件上点击右键时&#xff0c;那个缓慢弹出的冗长菜单是否让你感到烦躁&#xff1f;随着安装的软件越来越多&#xff0c;Windows的右键菜单往往会变得臃肿不堪&#xff0c;严重影响工作效率。今天&…...

别再只比参数了!从插件生态到中文优化,聊聊ChatGPT和文心一言的“隐形”差异

超越参数之争&#xff1a;ChatGPT与文心一言的生态与本土化实战解析 当技术评测文章还在反复比较模型参数量与发布时间时&#xff0c;真正影响日常工作效率的往往是那些未被量化的"软实力"。本文将从插件生态构建与中文场景优化两个维度&#xff0c;带您重新认识这两…...

【Veo 2提示词SOP白皮书】:从模糊意图到像素级输出的8步标准化工作流(附NASA级测试用例库)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Veo 2提示词工程的本质与范式跃迁 Veo 2并非单纯升级的视频生成模型&#xff0c;而是一次提示词工程范式的根本性重构——它将传统“指令式提示”&#xff08;prompt-as-command&#xff09;转向“意图…...

League Akari:如何通过LCU API实现英雄联盟游戏流程的智能化管理?

League Akari&#xff1a;如何通过LCU API实现英雄联盟游戏流程的智能化管理&#xff1f; 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit Leag…...

基于Arduino与433MHz射频的智能灯光定时系统设计与实现

1. 项目概述&#xff1a;告别机械定时器&#xff0c;打造智能灯光管家家里前后院的照明&#xff0c;还有出门度假时屋内的几盏灯&#xff0c;过去一直靠四个老旧的机械定时器来管理。说实话&#xff0c;这玩意儿用起来真是费劲。它的核心问题在于“死板”——你设定好晚上7点开…...

基于PIC32单片机实现Android USB音频转SPDIF输出的DIY方案

1. 项目概述&#xff1a;为Android设备打造一个高保真SPDIF音频接口作为一名长期折腾嵌入式音频和家庭影院的玩家&#xff0c;我经常遇到一个痛点&#xff1a;手头那些性能不错的Android手机或平板&#xff0c;其内置的3.5mm耳机孔或者USB-C口的音频输出质量&#xff0c;在连接…...