江科大/江协科技 STM32学习笔记P6

news2024/9/23 7:26:54

文章目录

  • LED闪烁&LE流水&蜂鸣器
    • 一、操作STM32的GPIO步骤
    • 二、RCC库函数
      • 什么是AHB与APB?
    • 三、GPIO库函数
      • GPIO初始化
      • 选择IO接口工作方式
    • 四、四种方法实现LED闪灯


LED闪烁&LE流水&蜂鸣器

一、操作STM32的GPIO步骤

1、使用RCC开启GPIO的时钟
2、使用GPIO_Init函数初始化GPIO
3、使用输出或输入的函数控制GPIO口

二、RCC库函数

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
//RCC_AHB外设时钟控制
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//RCC_APB2外设时钟控制
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
//RCC_APB1外设时钟控制

什么是AHB与APB?

AHB(Advanced High-performance Bus), 高速总线,用来接高速外设的。APB (Advanced Peripheral Bus) 低速总线,用来接低速外设的。
APB2一般是和AHB同频率,都是72MHz,APB1一般是36MHz。APB2连接的一般是外设中稍微重要的部分,比如GPIO端口,还有一些外设的一号,比如USART1、SPI1、TIM1、TIM8,还接ADC、EXTI、AFIO。其他的2、3、4…外设和DAC、PWR、BKP等次要点的外设都放到APB1。
在这里插入图片描述

三、GPIO库函数

void GPIO_DeInit(GPIO_TypeDef* GPIOx);
//指定的GPIO外设会被复位
void GPIO_AFIODeInit(void);
//指定的AFIO外设会被复位
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
//用结构体的参数来初始化GPIO口
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
//把结构体变量赋一个默认值

//四个读取函数
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

//四个写入函数
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//把指定端口设置为高电平
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//把指定端口设置为低电平
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
//根据第三个参数的值设置指定端口,参数是16进制,转换为2进制看设置的高低电平
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
//可以同时对16个端口进行写入

GPIO初始化

GPIO_InitTypeDef GPIO_InitStructure;
//声明结构体,下面引出结构体的所有成员
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
//选择指定引脚的工作方式为推挽输出
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
//选要配置的引脚
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//选输出速度
GPIO_Init(GPIOA,&GPIO_InitStructure);
//执行这一条才算真正写入到GPIO配置寄存器

在初始化GPIO口时,我们声明了一个结构体GPIO_InitStructure,名字与void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);中第二个参数很像,但细看多了“ure”,是咱们自己起的一个名字。

选择IO接口工作方式

GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_AF_PP 复用推挽输出
GPIO_Mode_AF_OD 复用开漏输出

四、四种方法实现LED闪灯

//方法1:
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1
delay_us(50000); //延时1秒
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED1接口输出低电平0
delay_us(50000); //延时1秒

//方法2:
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //取反LED1
delay_ms(500); //延时1秒

//方法3:
GPIO_SetBits(LEDPORT,LED1); //LED灯都为高电平(1)
delay_s(1); //延时1秒
GPIO_ResetBits(LEDPORT,LED1); //LED灯都为低电平(0)
delay_s(1); //延时1秒

//方法4
GPIO_Write(LEDPORT,0x0001); //直接数值操作将变量值写入LED
delay_s(2); //延时1秒
GPIO_Write(LEDPORT,0x0000); //直接数值操作将变量值写入LED
delay_s(2); //延时1秒

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1946625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言报错已解决】Use of Uninitialized Variable

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引言: 在编程中,未初始化的变量是一个常见的问题,它可能导致程序的行为变得不可预测。未初…

CAD图块的对齐方法的使用技巧

对齐功能配合鼠标技巧才能正常使用,不然对齐的图形胡乱翻转。

Cxx Primer-chap7

类的基本思想是数据抽象和封装,前者强调interface和implement分离,后者在此基础上,强调访问控制符(存疑)。同时类的实现者和使用者考虑的角度不同,前者考虑实现效率,后者仅需关注功能即可&#…

PSINS工具箱函数介绍——insplot

insplot是一个绘图命令,用于将avp数据绘制出来 本文所述的代码需要基于PSINS工具箱,工具箱的讲解: PSINS初学指导基于PSINS的相关程序设计(付费专题)使用方法 此函数使用起来也很简单,直接后面加avp即可,如: insplot(avp);其中,avp为: 每行表示一个时间1~3列为姿态…

基于VUE的软件项目开发管理系统/项目管理系统/软件开发过程管理系统的设计与实现

摘 要 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括软件项目开发管理系统的网络应用,在外国软件项目开发管理系统已经是很普遍的方式,不过国内的软件项目开发管理可能还处于起步阶段。软件项目开发…

elasticsearch 解决全模糊匹配最佳实践

事件背景: 某 CRM 系统,定义了如下两个表: 客户表 t_custom 字段名 类型 描述 idlong自增主键phonestring客户手机......... 客户产品关系表 t_custom_product 字段名 类型 描述 idlong自增主键custom_idlong客户idproduct_idlong产品…

第一百七十七节 Java IO教程 - Java路径操作

Java IO教程 - Java路径操作 比较路径 我们可以基于它们的文本表示来比较两个Path对象的相等性。 equals()方法通过比较它们的字符串形式来测试两个Path对象的相等性。 等式测试是否区分大小取决于文件系统。 以下代码显示如何比较Windows路径: import java.nio.file.Pat…

【Unity实战】yield return null还是WaitForEndOfFrame

当在Unity中编写协程(尤其是协程套无限循环)时,常常会用到yield关键字来控制协程的执行流程避免程序假死。以下是常见做法: yield return null 当使用yield return null时,协程会在下一帧继续执行。这意味着协程将暂…

vscode-CodeGeeX AI在vscode运用

1.CodeGeeX 代码自动生成和补全,代码翻译,自动添加注释,智能问答等 2.vscode中使用 3.官方网址 https://codegeex.cn/downloadGuide#vscode 进行登录注册使用,个人免费

机器学习 | 回归算法原理——多项式回归

Hi,大家好,我是半亩花海。接着上次的最速下降法(梯度下降法)继续更新《白话机器学习的数学》这本书的学习笔记,在此分享多项式回归这一回归算法原理。本章的回归算法原理基于《基于广告费预测点击量》项目,…

idea一键为实体类赋值

file -> settings -> plugins -> marketplace 把这个插件装上 找个实体,选中,altenter进入edit界面 我是选择只保留右边这种生成方法,然后选择ok 返回到那个实体,选择,altenter generate生成

前端开发知识(一)-html

1.前端开发需掌握的内容: 2.前端开发的三剑客:html、css、javascript Vue可以简化JavaScpript流程。 Element(饿了么开发的) :前端组件库。 Ngix:前端服务器。 3.前端开发工具:vscode 1)按…

PCL-基于超体聚类的LCCP点云分割

目录 一、LCCP方法二、代码实现三、实验结果四、总结五、相关链接 一、LCCP方法 LCCP指的是Local Convexity-Constrained Patch,即局部凸约束补丁的意思。LCCP方法的基本思想是在图像中找到局部区域内的凸结构,并将这些结构用于分割图像或提取特征。这种…

SVN文件夹没有图标(绿钩子和红感叹号)

3分钟教会你解决SVN文件夹没有绿勾和红色感叹号的问题_svn文件被改动过不显示红色-CSDN博客https://blog.csdn.net/weixin_43382915/article/details/124251563 关于SVN状态图标不显示的解决办法(史上最全) - 简书 (jianshu.com)https://www.jianshu.com/p/92e8e1f345c0

墨烯的C语言技术栈-C语言基础-018

char c; //1byte字节 8bit比特位 int main() { int a 10; //向内存申请四个字节,存储10 &a; //取地址操作符 return 0; } 每个字节都有地址 而a的地址就是它第一个字节的地址 要先开始调试才可以查看监控和查看内存 左边是地址 中间是内存中的数据 最后面的是…

【数据结构面试有那些常见问题?】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

Layui Selcet选择框动态选择问题

前言 时隔多日我也是重新回归写作,高考已经完毕,我将继续我的文章创作,今天我将分享的是我在开发我自己的一个新项目所遇到的问题,这里预告一下我的新项目: VitaApi管理系统 这个系统可以看作是萌新源api管理系统的延续&#xff…

谷粒商城实战笔记-54-商品服务-API-三级分类-拖拽效果

文章目录 一,54-商品服务-API-三级分类-修改-拖拽效果1,el-tree控件加上允许拖拽的属性2,是否允许拖拽3,完整代码 一,54-商品服务-API-三级分类-修改-拖拽效果 本节的主要内容是给三级分类树形结构加上拖拽功能&#…

CentOS怎么关闭自动锁屏?

禁止自动锁屏 有时候几分钟不用Centos,系统就自动锁屏了,这是一种安全措施,防止别人趁你不在时使用你的系统。但对于大部分人而言,这是没有必要的,尤其是Centos虚拟机,里面没啥重要的东西,每次…

基于面向对象重构模型训练器

引言 深度学习领域我们常用jupyter来演练代码,但实际生产环境中不可能像jupyter一样,所有代码逻辑都在面向过程编程,这会导致代码可复用性差,维护难度高。 前面这篇文章 基于pytorch可视化重学线性回归模型 已经封装了数据加载器…