物联网应用技术2班 李俊运 20210320018
目的:
实现呼吸灯。逐渐亮,逐渐灭。
准备工作
1.首先我们需要准备32的最小系统板或者开发板。
2.准备一个LED灯(如果使用板子上的灯来实现则不需要,下面我是使用最小系统板上的LED灯来实现)。
3.若干杜邦线。
4.软件方面的准备,我是直接使用开源PWM源码进行修改。
外设工作靠电流,因此要改变电流大小,所以要动电阻或电压。
电阻:阻值固定,不可更改。
电压:怎么改变电压大小呢?
方法1:在单位时间(4s),通过GPIO口,给高电平的时间逐渐变长,给低电平时间逐渐变短,来实现灯逐渐变亮。反之,灯逐渐变暗。
方法2:通过PWM实现,跟定时器有关。
二:代码实现
1.设置亮暗的循环周期
解释:在四秒的单位时间中,时间是逐渐增加的。那我可不可以把高电平的时间逐渐增加Delay(i)呢?把低电平的时间逐渐减少Delay(4000 - i)呢?
2.这样单位时间的平均电流就变小了!!!
如下:
1s:低低低高
2s:低低高高
3s: 低高高高
4s: 高高高高
逐渐亮的逻辑:
逐渐暗一样,只需要把高电平时间逐渐减少,低电平时间逐渐增加
3.最后的main函数
4.用到led, 所以要包含led初始化函数, 这个很简单就不说了
5.全部函数
void Delay(unsigned long nCount);
int main(void)
{
int i;
Led_Configuration();
while(1)
for(i = 0; i < 4000; i++)
{
GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4);
Delay(i);
GPIO_ResetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4);
Delay(4000 - i);
}
for(i = 0; i < 4000; i++)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4);
Delay(i);
GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4);
Delay(4000 - i);
}
}
}
void Led_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//³õʼ»¯LED(1~4)µÄGPIO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ʹÄÜAPB2ÍâÉèʱÖÓ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void Delay(unsigned long nCount)
{
while(nCount-- )
{
}
}
6.效果展示,检查是否文章来源:https://www.toymoban.com/news/detail-719311.html
7.大功告成文章来源地址https://www.toymoban.com/news/detail-719311.html
到了这里,关于STM32简单呼吸灯的制作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!