首先看到这个STM32最小开发板上面有两个led灯可以用IO来控制亮灭

LED0在PA8寄存器端口上,LED1在PD2寄存器端口上。可以确定的是LED是低电平点亮的。

然后回到keil5软件,利用标准库来初始化IO寄存器IO口

点开GPIO口标准库.h文件

在里面可以看到各种IO口控制的结构体配置。找到GPIO_Init初始化,可以看到有三种设置。

复制这个结构定义就可以初始化结构,然后用结构体调用这几个控制模式

void led_Init(void)
{GPIO_InitTypeDef led_Init;           //定义初始化结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);led_Init.GPIO_Mode=GPIO_Mode_Out_PP;         //模式,带上拉电阻的推挽输出led_Init.GPIO_Pin=GPIO_Pin_2;                 //引脚led_Init.GPIO_Speed=GPIO_Speed_50MHz;          //速度GPIO_Init(GPIOD,&led_Init);         //把结构体寄存器写入D组     }

像速度一般设置为最高、引脚一般都可以在原理图都可以看到,这里的LED有D组的2脚和B组的13脚,但是模式这里就比较多,一开始点开就有点懵,不知道那个对应那个,后面通过了解,可以这样理解

(1)GPIO_Mode_AIN 模拟输入                  //GPIO无效,引脚直接接入ADC内部
(2)GPIO_Mode_IN_FLOATING 浮空输入     //可以读取引脚电平,若引脚悬空,则电平不确定        
(3)GPIO_Mode_IPD 下拉输入                 //可读取引脚电平,内部连接下拉电阻,,悬空的时候默认低电平
(4)GPIO_Mode_IPU 上拉输入                 //可读取引脚电平,内部连接上拉电阻,悬空的时候,默认高电平
(5)GPIO_Mode_Out_OD 开漏输出          //可输出引脚电平,高电平的时候为高阻态,低电平的时候接VSS
(6)GPIO_Mode_Out_PP 推挽输出           //可输出引脚电平,高电平的时候接VDD,低电平接VSS
(7)GPIO_Mode_AF_OD 复用开漏输出            //由片上外设控制,高电平为高阻态,低电平接VSS
(8)GPIO_Mode_AF_PP 复用推挽输出     //由片上外设控制,高电平接VDD,低电平接VSS

把引脚初始化后,就可以利用设置引脚来控制IO口的0和1

在.h文件的底部就有控制各种IO的功能,使用LED的话就用复位和设置位,

然后通过变量的渐变来控制LED的0和1的亮灭就可以让LED达到假呼吸的效果。看起来像在慢慢呼吸的感觉。

unsigned int i,time=5000;led_Init();        //led的初始化while(1){    for(i=0;i<time;i++){delay(i);GPIO_ResetBits(GPIOD,GPIO_Pin_2); //设置0delay(time-i);GPIO_SetBits(GPIOD,GPIO_Pin_2);   //设置1}for(i=0;i<time;i++){delay(i);GPIO_SetBits(GPIOD,GPIO_Pin_2);      //设置1delay(time-i);GPIO_ResetBits(GPIOD,GPIO_Pin_2);    //设置0}

然后通过同样的方法来初始化按键来控制LED

void key_Init(void)
{GPIO_InitTypeDef key_Init;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);     //同样是C组寄存器的时钟key_Init.GPIO_Mode=GPIO_Mode_IPU;key_Init.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_13;     //这里直接设置两个引脚key_Init.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&key_Init);
}

然后定义个函数返回按键的键值,这里可以看到按键不是设置和复位这个而是GPIO_ReadInputDataBit()读取按键按键所在的IO口的0和1了当按键按下的时候是0松开的为1

unsigned  key_scanf(void)
{unsigned char num=0;if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1) == 0)  //判断按键是否按下{   delay(10);while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1) == 0);//判断按键是否按下delay(10);num=1;}if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == 0){   delay(10);while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == 0);delay(10);num=2;}return num;
}

然后定义一个变量来获取按键的键值,判断是按键1还是按键2开控制灯的亮灭

unsigned char number;led_Init();key_Init();while(1){   number=key_scanf();  //获取键值if(number == 1)GPIO_ResetBits(GPIOD,GPIO_Pin_2);  //亮if(number == 2)GPIO_SetBits(GPIOD,GPIO_Pin_2);   //灭

写好之后就可通过下载器接STM的PA14引脚的SWCLK和PA13引脚的SWDIO端口和电源以及接地就可以下载到芯片里面实现了。

笔记:STM32103RCT6——呼吸灯相关推荐

  1. 【STM32学习笔记-LED呼吸灯】

    STM32学习笔记-点亮LED灯 文章目录 STM32学习笔记-点亮LED灯 一.呼吸灯原理 二.呼吸灯代码 1.main.c 2.led.c 3.led.h 三.代码分析 一.呼吸灯原理 占空比:占 ...

  2. Arduino笔记-调节呼吸灯频率实验

    这个实验介绍下:对呼吸灯频率进行修改,修改每次亮度改变延迟. 实验截图如下: 再来一张 后台打印如下: 连接线和结构图如下: 源码如下: int ledPin = 9; int pot = A0;vo ...

  3. android8 通知呼吸灯_android学习笔记----解决兼容8.0以上和8.0之前版本通知栏显示、振动、LED呼吸灯闪烁问题(真机验证)...

    Android 8.0系统的通知栏适配文章讲解(郭霖大神的): 然后开始试验了: 模拟器: 真机(华为荣耀V9,8.0系统),下拉横幅需要手动打开,除非是厂家白名单,比如QQ.微信 我在oppo手机6 ...

  4. 《ESP32 学习笔记》 之Arduino环境下 使用DAC模拟输出(是真的DAC哦!)完成两路呼吸灯

    在 Arduino 环境下经常使用的 analogWrite(PIN, arg) 语法并不是真正的DAC模拟输出,也只是1kHZ的PWM 波模拟而成! 支持DAC功能的引脚请查看:引脚定义 本次ESP ...

  5. 启明智显分享| ESP32学习笔记参考--PWM(脉冲宽度调制) 篇,配PWM控制 LED呼吸灯代码示例参考

    提示:启明智显专为智能产品提供一站式彩屏显示+连接+云端服务+APP软件开发.维护等解决方案,帮厂商快速实现硬件的智能化.作为启明云端旗下方案公司,我们用心整理了开发小伙伴在开发过程中可能会遇到的问题 ...

  6. 【CC2530授课笔记】⑧ PWM实现呼吸灯,RGB三色灯,蜂鸣器播放音乐

    摘要 这篇文章通过定时器产生PWM波,控制LED实现呼吸灯的效果,并且通过三路PWM分别控制RGB三色灯,实现了颜色渐变.最后通过调制PWM频率,使用蜂鸣器实现了音乐播放. PWM简介 Pulse W ...

  7. 【FPGA笔记系列13】呼吸灯电路设计

    功能模块设计 常规的 LED 灯只有亮(高电平) 及暗(低电平) 两种状态. 如果产生一个周期性的脉冲信号用于驱动 LED 灯, 则 LED 灯会出现闪烁状态. 如果脉冲信号的频率足够高(大于人眼的分 ...

  8. 【C51单片机学习笔记----DS18B20温度传感器LCD1602液晶屏直流电机调速与呼吸灯AD模数转换红外外部中断】

    文章目录 一.DS18B20温度传感器 1.DS18B20温度传感器连接原理图 2.DS18B20温度传感器单总线通信时序 3.DS18B20温度传感器代码模块 二.LCD1602液晶屏 1.LCD1 ...

  9. ESP32 开发笔记(三)源码示例 3_LEDC_PWM 使用LEDC实现LED呼吸灯

    开发板购买链接 https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=62636 ...

最新文章

  1. MYSQL转换编码的解决方法
  2. cogs 610. 数对的个数
  3. java8 函数式编程_使用Javaslang进行Java 8中的函数式编程
  4. Canvas之进度条的制作(矩形,圆环)
  5. linux touch 源码,一天一个shell命令 linux文本操作系列-touch命令用法
  6. 网络访问保护(NAP)技术之详解
  7. 函数 getaddrinfo 学习
  8. 基于virtualbox的centos7安装jdk1.8
  9. 定制简单的404和403页面
  10. linux java 文件上传到服务器_java代码实现文件上传到linux服务器及问题汇总及解决...
  11. 王者荣耀语音文件下载
  12. 如何导出魔兽3模型到3Dmax里
  13. 模块化存储区域网络(SAN)解决方案的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. 《暗时间(第2版)——思维改变生活》全书网址链接汇总
  15. react函数式组件传值之子传父
  16. 联通手机卡网速的修改
  17. LaTeX模板 - FORMCM
  18. 格拉姆矩阵(Gram matrix)详细解读
  19. PPT动画制作飘落的树叶免费ppt模板
  20. 二手家具回收app功能

热门文章

  1. pandas 行转列的两种方式
  2. 压缩解压工具A-Zippr for Mac
  3. 西安自考计算机大专学校,西安成人自考大专学校有哪些
  4. GAMES101-现代计算机图形学入门09(光线追踪)
  5. Hippo4j 官宣!Hippo4j 1.4.x 新版本正式发布,探索更多玩法
  6. 校园图书管理系统开发-中小学智能图书管理系统开发
  7. 日常 VI 编辑总结
  8. docker 错误:invalid argument “xxx“ for xxx: Error parsing reference: xxx is not a valid repository/tag
  9. java计算机毕业设计生产管理系统源代码+数据库+系统+lw文档
  10. 声信号处理工程研究(1)---时域图(波形图)