首先从点灯开始
完整函数如下:
#include "led.h"
#include "sys.h"//包含了stm32f1xx.h(包含各种寄存器定义、中断向量定义、常量定义等)
//初始化GPIO口
void led_init(void)
{
GPIO_InitTypeDef gpio_initstruct;
//打开时钟
__HAL_RCC_GPIOB_CLK_ENABLE();
//调用GPIO初始化函数
gpio_initstruct.Pin=GPIO_PIN_8;//引脚
gpio_initstruct.Mode=GPIO_MODE_OUTPUT_PP;//推挽输出
gpio_initstruct.Pull=GPIO_PULLUP;//上拉输入(无所谓)
gpio_initstruct.Speed=GPIO_SPEED_FREQ_HIGH;//高速
HAL_GPIO_Init(GPIOB,&gpio_initstruct);
//熄灭LED灯
led1_off();
}
//点亮LED灯
void led1_on(void)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
}
//熄灭LED灯
void led1_off(void)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
}
//切换LED灯的状态
void led1_toggle(void)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
}
主函数如下:
#include "sys.h"
#include "delay.h"
#include "led.h"
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
led_init();
led1_on();
while(1)
{
}
}
在文件夹中创建一个我们需要的驱动文件
把驱动文件放在我们的项目当中
加上头文件保护宏,避免头文件被重复包含
首先明确我们的LED函数所包含的所有功能
第一步初始化GPIO口
打开时钟
在时钟库函数找到GPIO的时钟打开定义的函数,在这里我们的LED灯接在GPIOB_8上面
调用GPIO初始化函数
引脚与模式
速度
(可以关闭LED灯)
点亮LED灯
这边我们的LED的一段接的是高电平,如若要是LED亮,需要使另外一段为高电平,LED 灯导通,使其点亮
写入GPIO的函数
高低电平设置,RESET是低电平(为0),SET为高电平
下面熄灭和切换也相同
最后,我们可以加上切换函数来实现LED闪烁
当然我们需要在其中加上一个延迟函数才能实现
这样就实现了
我们也可以用另外一个操作实现LED灯的闪烁
亮------延迟------灭------延迟
同样的流水灯(这里我们用两颗LED灯进行演示)
引脚增加这里可用 | (或)符号
LED2灯初始化直接在下面进行进行相同的操作即可
这样实现了流水灯效果
同样的,对于其他简单的元器件,比如蜂鸣器,传感器等,只需拉高或拉低就能实现相应的功能时,我们都可以进行这样类似的操作来使功能实现。