01:STM32点灯大师和蜂鸣器

目录

一:点亮1个LED

1:连接图

2:函数介绍

3:点灯代码

二:LED闪烁

1:函数介绍

2:闪烁代码

三:LED流水灯

1:连接图

2:函数介绍

3:流水灯代码

四:蜂鸣器

1:连接图

 2:蜂鸣器代码


一:点亮1个LED

1:连接图

 因为IO口与LED负极相连所以IO口输出低电频,点亮LED (采用的是低电频点亮)

STM32的GPIO(通用输入输出口)总共需要3个步骤

A:第一步,使用RCC开启GPIO的时钟

B:第二步,使用GPIO_Init函数初始化GPIO

C:第三步,使用输出或者输入的函数控制GPIO口

2:函数介绍

stm32f10x_rcc.h文件中经常使用的函数只有3个 (RCC开启GPIO的时钟):

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);

RCC_AHBPeriphClockCmd: 第一个参数就是选择哪个外设 ,第二个参数ENABLE(启动) or DISABLE(无效))

RCC_APB2PeriphClockCmd和RCC_APB1PeriphClockCmd参数意思一致:  第一个参数选择外设,第二个参数使能ENABLE或失能DISABLE

stm32f10x_gpio.h文件中经常使用的函数很多(PIO_Init函数初始化GPIO) :

void GPIO_DeInit(GPIO_TypeDef* GPIOx);
void GPIO_AFIODeInit(void);
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
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);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

 GPIO_Init: 这个函数的作用是,用结构体的参数来初始化GPIO口, 我们首先需要先定义一个结构体变量,然后再给结构体赋值,最后调用这个函数. 这个函数内部就会自动读取结构体内部的值,然后自动把外设的各个参数配置好. 

        第一个参数就是选择哪个外设, 第二个参数就是结构体,我们先把结构体类型复制下来

使用输出或者输入的函数控制GPIO口

GPIO_ResetBits:   第一个参数就是选择哪个外设(GPIOx  x=A~G), 第二个参数就是 GPIO_Pin_x (x=0~15)把指定的端口设置为低电频,

3:点灯代码

#include "stm32f10x.h"                  // Device header
int main(void){//第一步,使用RCC开启GPIO的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//第二步,使用GPIO Init函数初始化GPIOGPIO_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_ResetBits(GPIOA,GPIO_Pin_0);while(1){}
}

推挽输出 GPIO_Mode_Out_PP高低电频都有驱动能力

二:LED闪烁

连接图同(一:点亮1个LED)

1:函数介绍

stm32f10x_gpio.h文件中经常使用的函数很多(PIO_Init函数初始化GPIO) :

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);

GPIO_SetBits和GPIO_ResetBits函数的参数相同: 第一个参数就是选择哪个外设(GPIOx  x=A~G) , 第二个参数就是 GPIO_Pin_x (x=0~15),

GPIO_SetBits第二给参数可以把指定的参数设置为高电频

GPIO_ResetBits第二给参数可以把指定的参数设置为低电频

GPIO_WriteBit: 第一个参数就是选择哪个外设(GPIOx  x=A~G) , 第二个参数就是 GPIO_Pin_x (x=0~15),第三个参数Bit_RESET(把第二个参数设置为低电频) or Bit_SET(把第二个参数设置为高电频;    Bit_RESET=(BitAction)0  把0强制转化为BitAction枚举类型同理 Bit_SET一样

2:闪烁代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
int main(void){//第一步,使用RCC开启GPIO的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//第二步,使用GPIO Init函数初始化GPIOGPIO_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_ResetBits(GPIOA,GPIO_Pin_0);低//GPIO_SetBits(GPIOA,GPIO_Pin_0); //GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);   //Bit_SET高   Bit_RESET低while(1){//Bit_RESET=(BitAction)0  把0强制转化为BitAction枚举类型GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0);Delay_ms(500);GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)1);Delay_ms(500);}
}

三:LED流水灯

1:连接图

2:函数介绍

stm32f10x_gpio.h文件中经常使用的函数很多(PIO_Init函数初始化GPIO) : 

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

 GPIO_Write: 第一个参数就是选择哪个外设(GPIOx  x=A~G) , 第二个参数就是直接写到GPIO的ODR寄存器里的; 这里写的是。指定写到输出数据寄存器的值

3:流水灯代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
int main(void){//第一步,使用RCC开启GPIO的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//第二步,使用GPIO Init函数初始化GPIOGPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All; //打开GPIOA的16个IO口GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//第三步,使用输出或者输入的函数控制GPIO口//GPIO_ResetBits(GPIOA,GPIO_Pin_0);低//GPIO_SetBits(GPIOA,GPIO_Pin_0); //GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);   //Bit_SET高   Bit_RESET低while(1){int data=0x0001;    //0x0001=0000 0000 0000 0001for(int i=0;i<8;i++){  GPIO_Write(GPIOA,~data);   Delay_ms(500);data=data<<1;}}
}

四:蜂鸣器

我们使用的是有源蜂鸣器:低电频触发

有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定

1:连接图

 2:蜂鸣器代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
int main(void){//第一步,使用RCC开启GPIO的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//第二步,使用GPIO Init函数初始化GPIOGPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12; //打开GPIOA的16个IO口GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);//第三步,使用输出或者输入的函数控制GPIO口//GPIO_ResetBits(GPIOA,GPIO_Pin_0);低//GPIO_SetBits(GPIOA,GPIO_Pin_0); 高//GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);   //Bit_SET高   Bit_RESET低while(1){GPIO_WriteBit(GPIOB,GPIO_Pin_12,(BitAction)0);Delay_ms(100);GPIO_SetBits(GPIOB,GPIO_Pin_0);Delay_ms(100);GPIO_ResetBits(GPIOB,GPIO_Pin_0);Delay_ms(100);GPIO_WriteBit(GPIOB,GPIO_Pin_12,(BitAction)1);Delay_ms(700);}}

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

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

相关文章

【LeetCode】122. 买卖股票的最佳时机 II - 贪婪算法

目录 2023-8-10 10:29:32 122. 买卖股票的最佳时机 II 2023-8-10 10:29:32 没错&#xff0c;还是用双指针思想来套出来的。 感觉步骤很复杂&#xff0c;还调试了半天。 class Solution {public int maxProfit(int[] prices) {int pre 0;int last 1;int maxProfit 0;int c…

vCenter Server Appliance(VCSA )7.0 部署指南

vCenter Server Appliance&#xff08;VCSA &#xff09;7.0 部署指南 vmware 服务器 网络 vCenter Server Appliance&#xff08;VCSA &#xff09;7.0 部署指南 部署准备 1、下载VMware-VCSA-all-7.0.0-xxxx.iso文件&#xff0c;用虚拟光驱挂载或者解压运行&#xff0c;本…

Ansible的安装和配置

安装和配置 Ansible 安装所需的软件包 创建名为 /home/greg/ansible/inventory 的静态清单文件&#xff0c;以满足以下要求&#xff1a; 172.25.250.9 是 dev 主机组的成员 172.25.250.10 是 test 主机组的成员 172.25.250.11 和 172.25.250.12 是 prod 主机组的成员 172.2…

Linux系统编程之信号(上)

一、信号概念 信号就是软件中断。每当程序收到一个信号&#xff0c;都需要按指定的方法去处理。以下是UNIX系统的信号表。 其中core表示产生一个复制了该进程内存映像的core文件&#xff0c;它保存了程序现场&#xff0c;可以使用gdb来调试。 二、signal() signal()函数用于改…

nginx负载均衡的几种配置方式介绍

一.负载均衡含义简介 二.nginx负载均衡配置方式 准备三台设备&#xff1a; 2.190均衡服务器&#xff0c;2.191web服务器1&#xff0c;2.160web服务器2&#xff0c;三台设备均安装nginx&#xff0c;两台web服务器均有网页内容 1.一般轮询负载均衡 &#xff08;1&#xff09…

9.1网络通信基础

一.基础概念: 1)IP地址:描述网络上的一个设备所在的位置. 2)端口号(port):区分一个主机上不同的进程,和pid一样的作用,但两者不同. 3)协议:网络通信传输数据的含义,协议表示一种约定,这种约定可以是任意的.协议分层之后,上层不需要知道下层协议的细节,可以灵活地调整,替换某…

Docker容器监控(Cadvisor +Prometheus+Grafana)

环境部署&#xff0c;接着上一篇文章Docker容器部署&#xff08;Cadvisor InfluxDBGrafana&#xff09;开始 目录 1、先清理一下容器 2、部署Cadvisor 3、访问Cadvisor页面 4、部署Prometheus 5、准备配置 6、运行prometheus容器 7、访问prometheus页面 8、部署Grafan…

gin和gorm框架安装

理论上只要这两句命令 go get -u gorm.io/gorm go get -u github.com/gin-gonic/gin然而却出现了问题 貌似是代理问题&#xff0c;加上一条命令 go env -w GOPROXYhttps://goproxy.cn,direct 可以成功安装 安装gorm的数据库驱动程序 go get -u gorm.io/driver/mysql

鸿蒙边缘计算网关正式开售

IDO-IPC3528鸿蒙边缘计算网关基于RK3568研发设计&#xff0c;采用22nm先进工艺制程&#xff0c;四核A55 CPU&#xff0c;主频高达2.0GHz&#xff0c;支持高达8GB高速LPDDR4&#xff0c;1T算力NPU&#xff0c;4K H.265/H264硬解码&#xff1b;视频输出接口HDMI2.0&#xff0c;双…

大专非科班转码成功自白

大专非科班转码成功自白 文章目录 大专非科班转码成功自白初步学习进阶学习提供阶段面试阶段总结 2023年是博主从业18年以来找工作最难的一年。但程序员这个行业还是被很多毕业生青睐。就业相对比较好&#xff0c;收入相对比较高&#xff0c;虽然面临996&#xff0c;依然给很多…

腾讯云服务器购买流程_三种方法图文指南

腾讯云服务器购买流程直接在活动上成本更低&#xff0c;在云服务器CVM或轻量应用服务器页面自定义选择比较gui&#xff0c;但是自定义云服务器CPU内存带宽配置选择范围广&#xff0c;活动上只能选择固定的活动机&#xff0c;选择范围窄&#xff0c;但是云服务器成本低。腾讯云服…

高效处理矢量大数据的高可用解决方案

高效处理矢量大数据的高可用解决方案 解决方案目标 存储海量矢量数据实时分析海量矢量数据实现海量矢量数据的可视化提供高可用、高性能和高可拓展性解决方案概述 海量数据查询与可视化 系统技术流程 方案一 数据存储: PostgreSQL+PostGIS(矢量数据存储和空间分析)数据服务…

PAT 1036 Boys vs Girls

个人学习记录&#xff0c;代码难免不尽人意。 Sample Input 1: 3 Joe M Math990112 89 Mike M CS991301 100 Mary F EE990830 95 Sample Output 1: Mary EE990830 Joe Math990112 6 Sample Input 2: 1 Jean M AA980920 60 Sample Output 2: Absent Jean AA980920 NA #include&…

MFC计算分贝

分贝的一种定义是&#xff0c;表示功率量之比的一种单位&#xff0c;等于功率强度之比的常用对数的10倍&#xff1b; 主要用于度量声音强度&#xff0c;常用dB表示&#xff1b; 其计算&#xff0c;摘录网上一段资料&#xff1b; 声音的分贝值可以通过以下公式计算&#xff1…

NLP 时事和见解【2023】

一、说明 AI的新闻当然不是即时的&#xff0c;但作为趋势和苗头&#xff0c;我们不得不做出自己的决定。比如&#xff0c;一些软件的支持是否持续&#xff0c;哪些现成的软件将不再使用&#xff0c;等等。 图片来自中途 以下是NLPlanet为您选择的有关NLP和AI的每周文章&#x…

Linux命令200例:tree用于以树状结构显示文件和目录

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

Live800:客服常用的6大提问技巧,帮助客服服务更高效

作为企业最前线的客服&#xff0c;提升服务质量是必须要做到的&#xff0c;而如何提升服务质量呢&#xff1f;其中一项关键点就是提问技巧。在客户沟通中&#xff0c;提问的方式和技巧直接影响着客户对企业服务的满意度。下面&#xff0c;本文将介绍客服常用的6大提问技巧&…

lancet: 【推荐】--源码学习

一个全面、高效、可复用的go语言工具函数库&#xff1b; 可以学习源码的好的地方&#xff0c;这个是个工具库&#xff0c;建议最好的办法是 在项目中导入后&#xff0c;然后查看他的各个源代码进行学习使用 golangd中&#xff0c;查看导入包以及他的源代码&#xff1b; 中文…

C# Winform DataGridView 数据刷新问题

目录 一、问题 二、创建项目 三、绑定空的数据源 四、绑定有数据的数据源 五、修改绑定的数据源 六、解决数据源刷新问题 七、解决刷新数据界面闪烁 一、问题 DataGridView 是比较常用的表格控件&#xff0c;在 DataGridView 中显示数据&#xff0c; 一般使用 dataGrid…

DP(区间DP)

目录 石子合并 合并果子&#xff08;贪心 Huffman树&#xff09; 环形石子合并 石子合并 设有 N 堆石子排成一排&#xff0c;其编号为 1,2,3,…,N。 每堆石子有一定的质量&#xff0c;可以用一个整数来描述&#xff0c;现在要将这 N 堆石子合并成为一堆。 每次只能合并相邻…