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

STM32_LED相关

STM32_LED相关

image-20260203173256203

image-20260203173726461

image-20260203173846663

image-20260203174034787

image-20260203174302932

image-20260203180653324

image-20260203180718633

image-20260203180744836

image-20260203180821265

image-20260203180839676

image-20260203180906695

1、测试程序——点亮LED灯

#include "stm32f10x.h"                  // Device headerint main()
{// 开启GPIOC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);// 设置GPIOC Pin_13端口结构体GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 通用输出推挽模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;// 初始化GPIOC Pin_13GPIO_Init(GPIOC, &GPIO_InitStructure);//GPIO_SetBits(GPIOC, GPIO_Pin_13);     	  // 设置高电平 —> LED熄灭 GPIO_ResetBits(GPIOC, GPIO_Pin_13);  				// 设置低电平 —> LED点亮while(1){}	
}
Out_PP 推挽输出,强驱动 LED、继电器
Out_OD 开漏输出,需上拉 I2C、多设备总线
IN_FLOATING 浮空输入 按键、开关
IN_PULL 上拉/下拉输入 确定默认电平

image-20260210224544029

image-20260210225652587

2、GPIO程序——LED灯闪烁

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main()
{// 开启GPIOC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);// 设置GPIOC Pin_13端口结构体GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 通用输出推挽模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;// 初始化GPIOC Pin_13GPIO_Init(GPIOC, &GPIO_InitStructure);while(1){GPIO_ResetBits(GPIOC, GPIO_Pin_13);  				// 设置低电平 —> LED点亮Delay_ms(500);GPIO_SetBits(GPIOC, GPIO_Pin_13);     	    // 设置高电平 —> LED熄灭 Delay_ms(500);}	
}

延时函数部分

Delay.c

#include "stm32f10x.h"/*** @brief  微秒级延时* @param  xus 延时时长,范围:0~233015* @retval 无*/
void Delay_us(uint32_t xus)
{SysTick->LOAD = 72 * xus;				//设置定时器重装值SysTick->VAL = 0x00;					//清空当前计数值SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器while(!(SysTick->CTRL & 0x00010000));	//等待计数到0SysTick->CTRL = 0x00000004;				//关闭定时器
}/*** @brief  毫秒级延时* @param  xms 延时时长,范围:0~4294967295* @retval 无*/
void Delay_ms(uint32_t xms)
{while(xms--){Delay_us(1000);}
}/*** @brief  秒级延时* @param  xs 延时时长,范围:0~4294967295* @retval 无*/
void Delay_s(uint32_t xs)
{while(xs--){Delay_ms(1000);}
} 

Delay.h

#ifndef __DELAY_H
#define __DELAY_Hvoid Delay_us(uint32_t us);
void Delay_ms(uint32_t ms);
void Delay_s(uint32_t s);#endif

3、GPIO程序——LED流水灯

image-20260210231131936

根据原理图,也可以设置为开漏模式点亮LED灯。

STM32F103C8T6引脚定义

PCB板是我自己画的,根据STM32F103C8T6引脚定义,PC14、PC15连接的是STM32低速晶振,当时设计时没有考虑周全,但在实际测试中这两个端口可以正常使用。

1)[较繁琐]第一种方式:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main()
{// 开启GPIOC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);// 设置GPIOC Pin_13端口结构体GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  // 通用输出开漏模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;// 初始化GPIOC Pin_13GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_SetBits(GPIOC, GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);     	    // GPIO配置完成后,默认低电平点亮所有LED,这里将其熄灭while(1){GPIO_ResetBits(GPIOC, GPIO_Pin_13);  				// 设置低电平 ->开漏模式VSS —> LED点亮Delay_ms(500);GPIO_SetBits(GPIOC, GPIO_Pin_13);     	    // 设置高电平 ->开漏模式高阻抗 —> LED熄灭 GPIO_ResetBits(GPIOC, GPIO_Pin_14);  				// 设置低电平 ->开漏模式VSS —> LED点亮Delay_ms(500);GPIO_SetBits(GPIOC, GPIO_Pin_14);     	    // 设置高电平 ->开漏模式高阻抗 —> LED熄灭 GPIO_ResetBits(GPIOC, GPIO_Pin_15);  				// 设置低电平 ->开漏模式VSS —> LED点亮Delay_ms(500);GPIO_SetBits(GPIOC, GPIO_Pin_15);     	    // 设置高电平 ->开漏模式高阻抗 —> LED熄灭 }	
}

2)[较重要]第二种方式:

#include "stm32f10x.h" // Device header
#include "Delay.h"int main(void)
{// 开启GPIOC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);// 初始化PC13, PC14, PC15为推挽输出GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 关键修改:推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // 低频应用,速度够用,噪声小GPIO_Init(GPIOC, &GPIO_InitStructure);// 初始状态:全部设置为高电平,所有LED熄灭GPIO_SetBits(GPIOC, GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);while (1){uint16_t leds[] = {GPIO_Pin_13, GPIO_Pin_14, GPIO_Pin_15};for (int i = 0; i < 3; i++) {GPIO_ResetBits(GPIOC, leds[i]); // 点亮当前LEDDelay_ms(500);GPIO_SetBits(GPIOC, leds[i]);   // 熄灭当前LED}}
}

4、GPIO程序——控制蜂鸣器

通过A0端口控制有源蜂鸣器,我的是低电平生效。

#include "stm32f10x.h" // Device header
#include "Delay.h"int main(void)
{// 开启GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 初始化PA0为推挽输出GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);// 设置为高电平,防止蜂鸣器上电鸣响GPIO_SetBits(GPIOA, GPIO_Pin_0);while (1){// 设置为低电平,蜂鸣器鸣响GPIO_ResetBits(GPIOA, GPIO_Pin_0);// 设置为高电平,蜂鸣器静音//GPIO_SetBits(GPIOA, GPIO_Pin_0);}
}

PS:蜂鸣器上面的白色贴纸非必要别撕,因为蜂鸣器太吵了~

http://www.jsqmd.com/news/367828/

相关文章:

  • 计算机Java毕设实战--基于微信小程序的网络教学资源学习系统基于springboot的网络课程学习系统小程序【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • Doris在用户行为分析中的应用:大数据场景实践
  • 为什么有些域名不能正常访问?
  • python+django基于大数据的房价数据分析vue_爬虫可视化
  • vue 甘特图 vxe-gantt 设置每个进度条分为计划和实际两条,实现上下分布任务条
  • 计算机Java毕设实战-基于springboot的慢性病健康知识科普管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 计算机Java毕设实战-基于springboot的中医五行音乐失眠治疗小程序【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 手机连接树莓派pico rp2040示波器 scoppy-pico
  • 域名卖不出去,要不要考虑委托或经纪出售?
  • 瑞幸咖啡 x 阿里云合作共创:AI 推荐让瑞幸咖啡“更懂你
  • 深圳众擎机器人开启全球首个双足机器人格斗联赛URKL:140万美元金腰带背后,双足格斗如何改写机器人行业未来?
  • DOS叙事环与意义行为原生论:一个智能时代意义哲学的重构、对话与导航
  • flask国内python招聘职位可视化数据分析vue_ka8v0爬虫可视化
  • 前端工程化 - gitlab - MT
  • Python SQLite3 查询结果返回字典的完整解决方案
  • 【每日一题】 LeetCode 3719. 最长平衡子数组 I
  • Flink时间语义全解析:Event Time、Processing Time和Ingestion Time
  • python+django图片相册推荐系统可视化大屏vue_sdtwv 爬虫可视化
  • 能源管理AI优化:从POC到规模化应用的完整路径
  • 大数据领域数据服务:优化业务决策的有效途径
  • Cesium进阶教程(1)在cesium后处理中使用shadertoy的代码
  • U-Net登上Nature封面!谷歌这波颠覆性改进太值得学习了
  • Cesium进阶教程(2)线性高度雾
  • JVM的内存结构
  • 《effective python》- python默认参数
  • 基于SpringBoot的海洋航运管理系统开题报告
  • 降AIGC率8款AI工具,赶due党速码!
  • 8款AI降AIGC率神器,赶due急救指南!
  • LeetCode 3719.最长平衡子数组 I:I先(几乎)暴力了
  • 农业遥感平台如何通过wangEditor实现GeoTIFF图像转存?