3.stm32 LED闪烁LED流水灯蜂鸣器

ops/2024/10/19 20:51:47/

1.LED闪烁

推挽输出(GPIO_Mode_Out_PP)高低电平均有驱动能力

开漏输出(GPIO_Mode_Out_OD)高电平相当于高阻态,没有驱动能力,低电平有驱动能力

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{    /*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;                    //定义结构体变量/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    //开启GPIOA的时钟//使用各个外设前必须开启时钟,否则对外设的操作无效GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO模式,赋值为推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                //GPIO引脚,赋值为第0号引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //GPIO速度,赋值为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);                 //将赋值后的构体变量传递给GPIO_Init函数//函数内部会自动根据结构体的参数配置相应寄存器//实现GPIOA的初始化/*主循环,循环体内的代码会一直循环执行*/while (1){/*设置PA0引脚的高低电平,实现LED闪烁,下面展示3种方法*//*方法1:GPIO_ResetBits设置低电平,GPIO_SetBits设置高电平*/GPIO_ResetBits(GPIOA, GPIO_Pin_0);                    //将PA0引脚设置为低电平Delay_ms(500);                                        //延时500msGPIO_SetBits(GPIOA, GPIO_Pin_0);                    //将PA0引脚设置为高电平Delay_ms(500);                                        //延时500ms/*方法2:GPIO_WriteBit设置低/高电平,由Bit_RESET/Bit_SET指定*/GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);        //将PA0引脚设置为低电平Delay_ms(500);                                        //延时500msGPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);            //将PA0引脚设置为高电平Delay_ms(500);                                        //延时500ms/*方法3:GPIO_WriteBit设置低/高电平,由数据0/1指定,数据需要强转为BitAction类型*/GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);        //将PA0引脚设置为低电平Delay_ms(500);                                        //延时500msGPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);        //将PA0引脚设置为高电平Delay_ms(500);                                        //延时500ms}
}

2.LED流水灯

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{    /*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;					//定义结构体变量/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//开启GPIOA的时钟//使用各个外设前必须开启时钟,否则对外设的操作无效GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,赋值为推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;				//GPIO引脚,赋值为所有引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,赋值为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);					//将赋值后的构体变量传递给GPIO_Init函数//函数内部会自动根据结构体的参数配置相应寄存器//实现GPIOA的初始化/*主循环,循环体内的代码会一直循环执行*/while (1){/*使用GPIO_Write,同时设置GPIOA所有引脚的高低电平,实现LED流水灯*/GPIO_Write(GPIOA, ~0x0001);	//0000 0000 0000 0001,PA0引脚为低电平,其他引脚均为高电平,注意数据有按位取反Delay_ms(100);				//延时100msGPIO_Write(GPIOA, ~0x0002);	//0000 0000 0000 0010,PA1引脚为低电平,其他引脚均为高电平Delay_ms(100);				//延时100msGPIO_Write(GPIOA, ~0x0004);	//0000 0000 0000 0100,PA2引脚为低电平,其他引脚均为高电平Delay_ms(100);				//延时100msGPIO_Write(GPIOA, ~0x0008);	//0000 0000 0000 1000,PA3引脚为低电平,其他引脚均为高电平Delay_ms(100);				//延时100msGPIO_Write(GPIOA, ~0x0010);	//0000 0000 0001 0000,PA4引脚为低电平,其他引脚均为高电平Delay_ms(100);				//延时100msGPIO_Write(GPIOA, ~0x0020);	//0000 0000 0010 0000,PA5引脚为低电平,其他引脚均为高电平Delay_ms(100);				//延时100msGPIO_Write(GPIOA, ~0x0040);	//0000 0000 0100 0000,PA6引脚为低电平,其他引脚均为高电平Delay_ms(100);				//延时100msGPIO_Write(GPIOA, ~0x0080);	//0000 0000 1000 0000,PA7引脚为低电平,其他引脚均为高电平Delay_ms(100);				//延时100ms}
}

3.蜂鸣器

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{	/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;					//定义结构体变量/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	//开启GPIOB的时钟//使用各个外设前必须开启时钟,否则对外设的操作无效GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,赋值为推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;				//GPIO引脚,赋值为第12号引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,赋值为50MHzGPIO_Init(GPIOB, &GPIO_InitStructure);					//将赋值后的构体变量传递给GPIO_Init函数//函数内部会自动根据结构体的参数配置相应寄存器//实现GPIOB的初始化/*主循环,循环体内的代码会一直循环执行*/while (1){GPIO_ResetBits(GPIOB, GPIO_Pin_12);		//将PB12引脚设置为低电平,蜂鸣器鸣叫Delay_ms(100);							//延时100msGPIO_SetBits(GPIOB, GPIO_Pin_12);		//将PB12引脚设置为高电平,蜂鸣器停止Delay_ms(100);							//延时100msGPIO_ResetBits(GPIOB, GPIO_Pin_12);		//将PB12引脚设置为低电平,蜂鸣器鸣叫Delay_ms(100);							//延时100msGPIO_SetBits(GPIOB, GPIO_Pin_12);		//将PB12引脚设置为高电平,蜂鸣器停止Delay_ms(700);							//延时700ms}
}

介绍几种使用库函数的方法


1.先打开h文件的最后,看一下都有哪些函数,然后再右键转到定义,查看一下函数和参数的用法

2.打开资料文件里的这个库函数用户手册(STM32F103xx固件函数库用户手册.pdf)


http://www.ppmy.cn/ops/126796.html

相关文章

uniapp 获取签名证书 SHA1 自有证书签名打包

1.登录你的Dcloud 账户 2.找到我的应用菜单 3.点开某个应用 4.查看证书详情,里面有SHA1 和别名,密码,下载证书用于云打包,可以选择自有证书,输入别名,密码打包

JS模块化及import、export

一、模块化的背景和目的 模块化的背景 代码重复:功能类似的代码在多个地方出现,导致维护成本增加。耦合度高:代码之间依赖性强,修改一个地方可能会导致其他部分出现问题。难以扩展:想要新增功能时,现有代码…

【Mysql】-锁机制-GAP锁

在 MySQL 的 InnoDB 存储引擎中,Gap 锁(间隙锁)是一种用于防止幻读的锁机制。幻读是指在一个事务中,多次执行相同的查询,结果集却不同,通常是由于其他事务插入了新的行。为了防止这种情况,InnoD…

电脑视频剪辑大比拼,谁更胜一筹?

随着短视频的火爆,越来越多的人开始尝试自己动手制作视频,无论是记录生活点滴还是创作个性短片,一款好用的视频剪辑软件是必不可少的。今天,我们就从短视频运营的角度,来聊聊几款热门的电脑视频剪辑软件,看…

git log

git log 查看日志的完整信息; git log --oneline 只查看日志id和日志信息--一行显示。 git log --graph

【微信小程序_14_页面导航】

摘要:本文主要介绍了微信小程序的页面导航相关知识,包括定义、实现方式、导航传参等内容。具体如下: (1)导航方式 声明式导航:通过在页面上声明<navigator>导航组件,可实现页面间跳转,包括跳转到 tabBar 页面、非 tabBar 页面和后退导航。 编程式导航:调用小程序的…

全面解析EFK日志管理系统部署流程

EFK架构介绍 EFK三个开源软件组成&#xff0c;分别是Elasticsearch、FileBeat和Kibana。这三个软件各自在日志管理和数据分析领域发挥着重要作用&#xff0c;它们之间互相配合使用&#xff0c;完美衔接&#xff0c;高效地满足了多种场合的应用需求&#xff0c;是目前主流的一种…

Java JDK的面试题

关于Java JDK的面试题&#xff0c;这里有一些常见的问题和答案&#xff0c;可以帮助你准备面试&#xff1a; JDK、JRE和JVM的区别&#xff1a; JDK&#xff08;Java Development Kit&#xff09;是Java开发工具包&#xff0c;包含了JRE和开发工具&#xff08;如javac编译器和ja…