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.hqwc.cn/news/62164.html

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

相关文章

构建Docker容器监控系统 (1)(Cadvisor +InfluxDB+Grafana)

目录 Cadvisor InfluxDBGrafana 1. Cadvisor 2.InfluxDB 3.Grafana 开始部署&#xff1a; 下载组件镜像 创建自定义网络 创建influxdb容器 创建数据库和数据库用户 创建Cadvisor 容器 准备测试镜像 创建granafa容器 访问granfana 添加数据源 Add data source 新建 …

存储过程的学习

1&#xff0c;前言 这是实习期间学习的&#xff0c;我可能是在学校没好好听课&#xff0c;&#xff08;或者就是学校比较垃&#xff0c;没教这部分&#xff0c;在公司经理让我下去自己学习&#xff0c;太难了&#xff0c;因为是公司代码很多部分都是很多表的操作&#…

Flutter:文件上传与下载(下载后预览)

Dio dio是一个强大的Dart Http请求库&#xff0c;提供了丰富的功能和易于使用的API&#xff0c;支持文件上传和下载。 这个就不介绍了&#xff0c;网上有很多的封装案例。 background_downloader 简介 适用于iOS&#xff0c;Android&#xff0c;MacOS&#xff0c;Windows和L…

开发者须知,App和小程序须备案,否则面临清退!

备案并不陌生&#xff0c;前端开发的老铁肯定熟悉&#xff0c;若你的网站未备案情况下&#xff0c;在国内的服务器是无法访问的&#xff0c;所谓备案&#xff0c;通常指的就是ICP备案&#xff0c;需要把你经营的信息&#xff0c;给相关部门进行报备&#xff0c;简而言之&#x…

[每周一更]-(第58期):选购佳能变焦镜头 EF-S 18-200mm F/3.5-5.6 IS的心得

参考地址&#xff1a; https://www.canon.com.cn/purchase/onlinesale/index3.html?typejdhttps://www.canon.com.cn/overview/efwidezoom.html 讲在买之前 由于没有买全画幅&#xff0c;买了残幅&#xff0c;好处是能选的镜头有限&#xff0c;不用太费钱了&#xff0c;需要…

element-plus:el-date-picker日期只选择年月不要日

<el-date-picker v-model"value" type"month" format"YYYY-MM" value-format"YYYY-MM" />使用format属性将时间显示格式修改为YYYY–MM 年月格式 使用value-format将绑定值的格式修改为YYYY–MM年月格式

如何快速解决集成环信IM遇到的问题?

1、环信FAQ频道发布了 环信FAQ帮助中心提供了各客户端、RESTful API、环信控制台以及商务相关的集成环信常见问题及解决方法&#xff0c;帮您快速解决集成问题 2、当我有问题时&#xff0c;从哪里进FAQ&#xff1f; 干脆收藏这个网址&#xff1a;https://faq.easemob.com/ 环…

ASL国产CS5212规格书 DP转VGA 替代RTD2166低成本方案 兼容IT6516设计原理图

CS5212可替代兼容瑞昱RTD2166和联阳T6516&#xff0c;ASL集睿致远这款芯片是一种高性能的DP显示端口到VGA转换器芯片。它结合了DisplayPort输入接口和模拟RGB DAC输出接口&#xff0c;嵌入式单片机基于工业标准8051核心。 CS5212适用于多个细分市场和显示器应用程序&#xff1…

Java 包装类(Wrapper)

Wrapper概念 Java是一个面向对象的编程语言&#xff0c;但是Java中的八种基本数据类型却是不面向对象的&#xff0c;为了使用方便和解决这个不足&#xff0c;在设计类时为每个基本数据类型设计了一个对应的类进行代表&#xff0c;这样八种基本数据类型对应的类统称为包装类(Wra…

【Linux】系统内核中System.map中字段含义解释

可以通过命令行过来初始化内容 cat System.map-4.18.0-193.el8.x86_64 | grep pci | grep initcall "T"&#xff1a;表示该符号是一个全局函数&#xff0c;可以被其他模块或文件访问。 "D"&#xff1a;表示该符号是一个全局数据对象&#xff0c;可以被其…

Java学习内容有什么?这篇全是干货

Java 是目前应用非常广泛的一种计算机高级编程语言&#xff0c;它是一种计算机程序设计语言&#xff0c;被广泛应用于各大行业和领域&#xff0c;如金融、汽车、医疗、电子、互联网等等。Java 诞生之后风靡全球&#xff0c;并且一直保持其高人气&#xff0c;因此 Java 的学习也…

解决createRoot is not a function

报错&#xff1a; 出现的原因&#xff1a;在于把react18使用的vite构建&#xff0c;在开发中因react版本太高与其他库不兼容&#xff0c;而在降级的时候&#xff0c;出现以上dom渲染出现报错。 解决&#xff1a;将 src/index.j文件改成如下 import React from react; import…