精华内容
下载资源
问答
  • STM32呼吸灯,采用KEIL编程,STM32F1x,实用。
  • stm32呼吸灯

    2014-10-20 17:41:38
    呼吸灯程序,基于stm32. 野火版本
  • 用keil编写的stm32呼吸灯实验,基于正点原子开发板,如需移植改变相应的端口即可。主函数提供了两种思路,供大家学习和指教。
  • STM32呼吸灯程序

    2020-08-11 08:31:28
    听说呼吸灯是很久以前的事情了,那时候刚刚学习51单片机,没有单片机的基础。后来在网上看到了一个...在接触了STM32后,发现呼吸灯还是比较容易实现的,而且不需要什么硬件知识就可以完成。于是开始尝试做呼吸灯了。
  • STM32呼吸灯设计

    2020-08-12 03:27:15
    听说呼吸灯是很久以前的事情了,那时候刚刚学习51单片机,没有单片机的基础。后来在网上看到了一个...在接触了STM32后,发现呼吸灯还是比较容易实现的,而且不需要什么硬件知识就可以完成。于是开始尝试做呼吸灯了。
  • STM32呼吸灯

    千次阅读 2019-05-26 11:20:05
    #include "stm32f10x.h" //STM32头文件 #include "sys.h" #include "delay.h" #define LEDPORT GPIOB //定义IO接口 #define LED1 GPIO_Pin_0 //定义IO接口 void LED_Init(void) { GPIO_InitTypeDef GPIO_...
    #include "stm32f10x.h" //STM32头文件
    #include "sys.h"
    #include "delay.h"
    #define LEDPORT GPIOB //定义IO接口
    #define LED1 GPIO_Pin_0 //定义IO接口
    
    void LED_Init(void)
    { 
        GPIO_InitTypeDef  GPIO_InitStructure;  
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);       
        GPIO_InitStructure.GPIO_Pin = LED1 ;                        
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
        GPIO_Init(LEDPORT, &GPIO_InitStructure);   
    }
     int main (void)
    {
      u8 MENU;
      u16 i,t;
      RCC_Configuration(); //时钟设置
      LED_Init();//led初始化
      MENU=0;//标志位
      t=1;
      while(1)
      {
         if(MENU==0)//变亮
         {
            for(i=0;i<10;i++)
           {
            GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1));
            delay_us(t);
            GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0));
            delay_us(301-t); 
           }    
            t++;
            if(t==300)
            {
              MENU=1;
            }
    
        }
           if(MENU==1)//变暗
         {
              for(i=0;i<10;i++)
            {
               GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1));
               delay_us(t);
               GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0));
               delay_us(301-t);
          }
              t--;
             if(t==1)
           {
               MENU=0;
           }    
    
         }
       }
    }
    

    以上代码是32呼吸灯的代码,供大家参考。
    在学习32时,建议大家在用各种资料仿写代码时,多看看32的库函数文件,这样可以加深对代码的理解,同样可以加深印象,更利于对32的学习

    展开全文
  • STM32呼吸灯原理

    千次阅读 2020-09-16 21:48:49
    前段时间学习stm32的时候就做过呼吸灯实验,浏览了一些博客后,做下总结 呼吸灯原理其实是利用pwm(脉冲宽度调节)技术,通过改变占空比来实现呼吸灯,占空比是指高电平除以总的周期, 下面直接上代码 int xxx=20000...

    前段时间学习stm32的时候就做过呼吸灯实验,浏览了一些博客后,做下总结
    呼吸灯原理其实是利用pwm(脉冲宽度调节)技术,通过改变占空比来实现呼吸灯,占空比是指高电平除以总的周期,
    下面直接上代码
    int xxx=20000;
    while(1)
    {
    for(i=0;i<xxx;i++)
    {
    GPIO_ResetBits(GPIOF,GPIO_Pin_10);
    delay(xxx-i);
    GPIO_SetBits(GPIOF,GPIO_Pin_10);
    delay(i);
    }
    for(i=0;i<xxx;i++)
    {
    GPIO_ResetBits(GPIOF,GPIO_Pin_10);
    delay(i);
    GPIO_SetBits(GPIOF,GPIO_Pin_10);
    delay(xxx-i);
    }
    delay(100);
    }

    还有一种方法是使用灯引脚用作为定时器复用功能,然后初始化定时器输出功能为pwm,再通过修改CCR1改变占空比。
    下面上程序,
    定时器程序
    GPIO_InitTypeDef aaa;//GPIO初始化结构体
    TIM_TimeBaseInitTypeDef bbb;
    TIM_OCInitTypeDef ccc;

    //0、时钟使能
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//PF9对应的时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);
    
    //1、初始化需要用到的模块
    aaa.GPIO_Pin = GPIO_Pin_9;//PF9
    aaa.GPIO_Mode = GPIO_Mode_AF;//复用功能  因为pF9等会要被用作定时器输出功能
    aaa.GPIO_Speed = GPIO_Fast_Speed;//引脚速度选择
    aaa.GPIO_OType =  GPIO_OType_PP;//推挽输出 GPIO_OType_OD 开漏
    aaa.GPIO_PuPd  = GPIO_PuPd_NOPULL;//选择浮空 无上下拉
    GPIO_Init(GPIOF,&aaa);//LED1初始化
    
    	
    //2、初始化定时器模块---设置PWM周期 计数器+预分频器+设定值
    bbb.TIM_Prescaler = 84-1;//1us/脉冲
    bbb.TIM_Period = 1000-1;
    bbb.TIM_CounterMode = TIM_CounterMode_Up;
    bbb.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInit(TIM14,&bbb);
    
    //3、将指定的引脚用作为某个复用功能
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource9, GPIO_AF_TIM14);//
    
    //4、初始化定时器14的输出功能模块--根据通道 OC1--CH1  OC2--CH2
    ccc.TIM_OCMode = TIM_OCMode_PWM1;//PWM模式1  PWM模式2
    ccc.TIM_OCPolarity = TIM_OCPolarity_High;//TIM_OCPolarity_Low	
    ccc.TIM_Pulse = 500;//一开始是1000的一半----调节占空比的CCR1
    ccc.TIM_OutputState = TIM_OutputState_Enable;//输出使能
    TIM_OC1Init(TIM14,&ccc);
    
    //开启自动重载载寄存器的使能--TIM  开启定时器ARR寄存器缓冲
    TIM_ARRPreloadConfig(TIM14,ENABLE);
    
    
    //6、开启CCRx的缓冲 
    TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);
    
    
    //7、开启定时器13
    TIM_Cmd(TIM14,ENABLE);
    GPIO_ResetBits(GPIOF,GPIO_Pin_9);//复位PF9  点灯
    

    主程序

    while(1)
    {
    //呼吸灯
    for(i=0;i<1000;i++)
    {
    TIM14->CCR1=i;

    		delay(1);
    	}
    	for(;i>=0;i--)
    	{
    		TIM14->CCR1=i;
    		
    		delay(1);	
    	}
    

    }

    以上就是我个人对呼吸灯实验的总结。

    展开全文
  • STM32呼吸灯.zip

    2021-07-23 14:39:43
    STM32呼吸灯程序,0.5s为一周期,LED亮度由灭逐渐变亮,再由亮逐渐变灭。(STM32精英板)
  • "学习51单片机的时候,第一个程序是点亮LED现在开始学习到STM32第一个程序必须也得是点亮LED因为“祖师爷”说过当能够输出"Hello World!"或者点亮LED的时候,就掌握了90%的知识,可以出师了1注:虽然现在趋势...

    点击上方“蓝字”关注我们

    物联网协会终于把公众号密码记起来了???

    7f808cb4c001ddefa9ca4b90b13b5f12.gif

    在学习编程语言的时候,第一个程序

    是"Hello World!"

    学习51单片机的时候,第一个程序

    是点亮LED灯

    现在开始学习到STM32

    第一个程序必须也得是点亮LED灯

    因为“祖师爷”说过

    当能够输出"Hello World!"或者点亮LED灯的时候,就掌握了90%的知识,可以出师了

    3908e5601159b9af831d3ab5a34fb87b.gif

    1

    63e57ad40d62ae86f21e28a1f03840b5.gif

    注:虽然现在趋势是使用STM32CubeMX生成HAL库来编写,但为了让大家理解下STM32的底层操作,本次将使用寄存器操作方式来实现点亮LED灯。小编使用STM32103RCT6芯片的开发板演示。

    新建工程模板

    使用Keil5就像使用51单片机一样创建一个工程项目,只不过将芯片选择为自己所使用的;加上main.c后编写main函数,编译一轮发现报错了

    8e0a155936e50f911fd821745639902c.png

    这主要是因为没有添加启动文件,其实在新建51单片机工程的时候自动添加了STARTUP.A51文件,而在STM32中就要手动添加。

    添加启动文件

    首先要选择适合自己芯片的启动文件,打开STM32F10X的固件库并且通过FLASH容量进行选择。

    27e2acd869085b2246d49efa05c0a3a9.png

    小编的是256k容量,选择的是"startup_stm32f10x_hd.s"

    把启动文件添加放到工程目录下,打开工程添加刚刚的启动文件。并且main.c下添加一个函数 void SystemInit(void){   }

    ca44253ac5a05685be9e262bdae5a568.png

    配置相关寄存器

    不管是使用库函数或者HAL库开发,其实都是对寄存器的操作。通过开发板原理图可以发现LED0的引脚为PA8、LED1的引脚为PD2,输出低电平时点亮LED灯。

    b33b0ea48f87cf24ac01c51733891b7e.png

    通过查看“STM32F10x参考手册”配置寄存器,发现控制IO口输出高电平还是低电平的有3个,但是只需要配置ODR寄存器就可以了。ODR寄存器的偏移地址是0x0C,若是点亮LED1即是将PD2置0。首先找到GPIOD的起始地址再加ODR寄存器的偏移地址就能够对PD2引脚进行清零操作了。

    e42f7326550ab43b2cd44a624d923c4b.png

    0d710c741569ce7270813555a234fbab.png

    GPIOD起始地址:0x4001 1400

    ODR的偏移地址:0x0C

    两个地址相加后:0x4001 140C

    PD2置0:0X4001 140C &= ~(1 << 2);

    把程序下载到开发板发现LED并没有点亮。

    842e42fda7e0a5d4c77fbd3626f5edbf.gif

    b76395a4f84688585e412aa2c37334b6.png

    这是因为STM32和51单片机不同,STM32的IO口为输入模式还是输出模式也是由寄存器控制的。看参考手册得知有“端口配置低寄存器(CRL)”配置0到7位“端口配置高寄存器(CRH)”配置8到15位

    f86266d330f642f778320b372ad8fda3.png

    5861fee4603020b595d8dc13b62f2fb0.png

    GPIOD起始地址:0x4001 1400

    CRL的偏移地址:0x00

    两个地址相加后:0x4001 1400

    PD2写1:0X4001 1400 |= (1 << (2 * 4));

    再次下载开发板后,LED灯果然还是不亮的!!!

    bb8055f32d2a2b5744d47c3413f65044.gif

    b76395a4f84688585e412aa2c37334b6.png

    这是因为STM32为了降低功耗,每个外设都有时钟控制的,默认是全部关闭的,要是使用外设就要打开时钟。时钟是由RCC寄存器控制的,且挂载在APB2总线上。

    所以只要找到RCC寄存器的起始地址然后加上APB2的偏移地址就可以使能GPIO时钟了。

    cd51ee2d7d2b9845954cfc66a6653bb2.png

    f443de9271355a914d419ee542d63167.png

    RCC起始地址:0x4002 1000

    APB2的偏移地址:0x18

    两个地址相加后:0x4002 1018

    使能GPIOD:0x4002 1018 |= (1 << 5 );

    b05de02f694c75d5e1b9bba667fbd659.png   

    完整代码

    53ef7f85ff53ee17bf0470f130be286f.png

    下载到开发板后,LED灯神奇地点亮了!!!

    总结操作步骤

    1. 在main.c下添加一个void SystemInit(void){          } 函数

    int main(void){  while(1)  {      }}void SystemInit(void){}

        2.在确定LED的引脚和输出模式后,首先打开GPIO的时钟。即是RCC寄存器的起始地址加上APB2总线的偏移地址,然后根据IO口位置进行配置。比如使能GPIOA就是 1 << 2 ; 使能GPIOD就是 1 << 5。

    //RCC寄存器的起始地址:0x40021000//APB2总线的偏移地址: 0x18//相加得到:0x40021018//要是想使能GPIOD就只对第5位进行写1操作// 0x40021018 |= (1 <//由于是对地址进行操作,那就需要指针变量了  *(unsigned int*)0x40021018 |= (1 <

        3. 配置CRL寄存器,配置为通用推挽输出模式(前提是引脚在0到7位,若是8到15位如“PA8” 就是去配置CRH高寄存器了 )。要是将PD2配置为通用推挽输出模式(在CNFy[1:0]中选“00”),最大速度为10MHz(在MODEy[1:0]选择"01"代表输出模式,最大速度为10MHz)。由于是PD2即配置CNF2[1:0]MODE2[1:0],即是将第8到第11位配置成“  0001  ” 将第8位写1:1 << 8

    // GPIOD的起始地址:0x40011400// CRL寄存器的偏移地址:0x00// 两者相加:0x40011400//配置为通用推挽输出模式和选择最大速度*(unsigned int*)0x40011400 |= (1 << 8);

        4.配置ODR寄存器,选择是输出高电平还是低电平。然后对相应的引脚进行配置,高电平时是1,低电平时是0

    // GPIOD的起始地址:    0x40011400// ODR寄存器的偏移地址:0x0C// 两者相加:0x4001140C//若是配置PD2为低电平 点亮LED灯,即是对第2位清零操作*(unsigned int*)0x4001140c &= ~(1 << 2);//若是配置PD2为高电平 熄灭LED灯,即是对第2位写1操作*(unsigned int*)0x4001140c |= (1 <2);

    本次分享就到这啦

    欢迎大家和小编共同学习STM32

    回复关键词【0412】可以获取固件库

    展开全文
  • 刚开始接触STM32时,是使用MDK环境,用STD库学习的。后来不想用D版了,就改用EmBitz环境来了,EmBitz在使用时,库文件是自动复制的,不需要手工整理了,比较方便。但这个EmBitz在版本已经很老了,有几年没有更新了。...
  • 基于STM32呼吸灯.7z

    2019-12-30 22:02:03
    时钟呼吸灯 pwm led 定时器(控制呼吸时间) 按键中断(呼吸快慢) 串口打印调试信息(时间+项目说明 + 作者等信息) led PB5 GPIOC 13 步进+(最大15) GPIOE 0 步进- PE5做按键指示 按键按下取反
  • STM32 pwm控制呼吸灯代码,编写呼吸灯闪烁的主程序代码
  • 基于STM32F103的呼吸灯

    2018-04-23 08:49:43
    基于STM32F103的呼吸灯,三色灯有暗到亮,由亮到暗的变化,可以实现多级LED显示
  • 基于 STM32呼吸灯

    2016-11-28 22:25:05
    基于 STM32呼吸灯,使用 Keil 编译
  • STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex®-M0,M0+,M3, M4和M7内核(ST's product portfolio contains a comprehensive range of microcontrollers, from robust, low-cost ...
  • 基于STM32呼吸灯的实现.pdf
  • stm32_呼吸灯

    2018-11-03 18:08:21
    stm32_呼吸灯
  • 和CSDN上的同名博客想配套的程序,基于stm32,使用定时器来实现控制IO口输出PWM波形,从而是LED出现类似呼吸的现象。
  • 基于STM32呼吸灯的实现
  • 基于stm32单片机的用定时器产生PWM控制LED呼吸
  • 使用延时函数实现STM32呼吸灯

    千次阅读 2020-06-25 21:37:52
    标题 使用延时函数实现的呼吸灯(HYQ) 如有错误,或者需要改进的,请不吝指教,共同进步! 假设一次状态时间为t(代码中的t+1001-t),然后i++的话,那么变亮或者变暗的时间T为tt。一个周期是2t*t。 main.c while(1...

    标题 使用延时函数实现的呼吸灯(HYQ)

    如有错误,或者需要改进的,请不吝指教,共同进步!

    假设一次状态时间为t(代码中的t+1001-t),然后i++的话,那么变亮或者变暗的时间T为tt。一个周期是2t*t。

    main.c

    while(1)
    	{
    	if(state==0)    //变亮或者变暗过程,根据自己的实际电路图
    		{
    			for(i=0;i<2;i++)    //单个状态持续时间,也可以不用for,只是亮暗变化的快些
    		{
    		  LED1=1;      //我这点了两个led
    		  LED0=0;
       	      delay_us(t);      //此处注意,t不能为0,最开始一直变化了一次之后就不变了,后面参考了别人的才发现问题
              LED1=0;	
    		  LED0=1;
    		  delay_us(1001-t);   //同理,1001-t不能为0
    		}
    		t++;
    		if(t==1000) menu=1;
    	  }
    	  
    		if(state==1)
    		{
    			for(i=0;i<2;i++)
    			{
    				LED1=1;
    				LED0=0;
    				delay_us(t);
    				LED1=0;
                    LED0=1;				
    		       delay_us(1001-t);
    			}
    			t--;
    			if(t==1) menu=0;
    		}
      }
    
    
    
    
    
    展开全文
  • PWM脉宽调制LED的亮度。
  • stm32f4 通过pwm的位操作 实现 呼吸灯功能
  • STM32F103平台上开发,利用PWM实现呼吸灯效果。
  • LED呼吸灯程序。开发平台:keil5;芯片类型:stm32F103VET6
  • 本工程代码在STM32F407ZET6开发板上测试通过,其中使用TIM14产生一个PWM脉冲信号来控制一个LED灯,使之成为一个呼吸灯。本压缩包中也包含了STM32F4xx的中文用户手册,以及本人使用的开发板的原理图。欢迎大家下载...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,162
精华内容 464
关键字:

stm32呼吸灯