STM32呼吸灯的制作 | 您所在的位置:网站首页 › opporeno8有呼吸灯吗 › STM32呼吸灯的制作 |
目的: 实现呼吸灯。逐渐亮,逐渐灭。 准备工作 1.首先我们需要准备32的最小系统板或者开发板。 2.准备一个LED灯(如果使用板子上的灯来实现则不需要,下面我是使用最小系统板上的LED灯来实现)。 3.若干杜邦线。 4.软件方面的准备,我是直接使用开源PWM源码进行修改。 外设工作靠电流,因此要改变电流大小,所以要动电阻或电压。 电阻:阻值固定,不可更改。 电压:怎么改变电压大小呢? 方法1:在单位时间(4s),通过GPIO口,给高电平的时间逐渐变长,给低电平时间逐渐变短,来实现灯逐渐变亮。反之,灯逐渐变暗。 方法2:通过PWM实现,跟定时器有关。 二:代码实现 1.设置亮暗的循环周期 解释:在四秒的单位时间中,时间是逐渐增加的。那我可不可以把高电平的时间逐渐增加Delay(i)呢?把低电平的时间逐渐减少Delay(4000 - i)呢? 2.这样单位时间的平均电流就变小了!!! 如下: 1s:低低低高 2s:低低高高 3s: 低高高高 4s: 高高高高 代码如下: 1.LED初始化函数 #include "stm32f10x.h" static __IO uint32_t TimingDelay; void RCC_Configuration(void); void Delay(__IO uint32_t nTime); void LED_Config(void){ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } 1.2主函数 int main(void) { RCC_Configuration(); LED_Config(); if (SysTick_Config(72000)) { /* Capture error */ while (1); } while (1) { if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0) { while(1) { GPIO_SetBits(GPIOB, GPIO_Pin_5); //LED1 ÁÁ Delay(1000); GPIO_ResetBits(GPIOB, GPIO_Pin_5); //LED1 Ãð Delay(1000); } } } } 1.3定时延时函数 void Delay(__IO uint32_t nTime) { TimingDelay = nTime; while(TimingDelay != 0); } |
CopyRight 2018-2019 实验室设备网 版权所有 |