基于STM32的HAL库的项目电动车报警器及相关模块程序

项目电动车报警器

1.按键点灯(中断法)

实验目的

使用中断的方法,按下 KEY1 翻转 LED1 状态,而 LED2 一直保持 500ms 的频率闪烁

注意: 按键驱动一般使用轮询法。 如果采用中断法,由于软件消抖需要在中断服务函数加入延时函数,这种做法一般是不被允许的。由于还未学到传 感器模块及定时器,本实验暂时在中断服务函数中加入延时函数。

初始化exti函数            

打开时钟

对GPIO的结构体指针变量赋值

初始化GPIO

设置中断优先级

使能中断

中断服务函数

回调函数----(写功能代码)

上拉电阻初始态即可稳定成高电平

对于输入IO, 默认为高电平,当需要改变为低电平时配置为PULLUP


void exti_init(void)
{
    GPIO_InitTypeDef gpio_initstruct;
    __HAL_RCC_GPIOA_CLK_ENABLE();
    
    gpio_initstruct.Pin   = GPIO_PIN_0;
    gpio_initstruct.Mode  = GPIO_MODE_IT_FALLING;//下降沿触发
    gpio_initstruct.Pull  = GPIO_PULLUP;
    HAL_GPIO_Init(GPIOA,&gpio_initstruct);
    HAL_NVIC_SetPriority(EXTI0_IPQn,2,0);
    HAL_NVIC_EnableIRQ(EXTI0_IRQn);
        
}

void EXTI0_IRQHandler(void)
{
    HAL_GPIO_EXTI_IRQHandler(void);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
     delay_ms(20);//延时消抖
    if(GPIO_Pin == GPIO_PIN_0)//检测按下
{
    if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)//再次检测是否按下
{
    led1_toggle();
}
}
}

 主函数

#include "led.h"
#include "exti.h"
#include "delay.h"
//主函数

void main(void)
{
    led_init();
    exti_init();
    while(1){
    delay_ms(500);
    led1_on();
    delay_ms(500);
    led1_off();
    
}
}

2.震动点灯

实验目的

震动点灯 实验目的 使用中断的方法,振动传感器检测到振动时,LED1 点亮 2 秒,之后熄灭。

 SW-18015P 在无震动或者震动强度达不到设定阈值时,DO 口输出高电平,当外界震动强度超过设定阈值时,模块 D0 输出低电平

        初始化EXTI函数

        打开时钟

        对GPIO的结构体指针变量赋值

        初始化GPIO

        设置中断优先级

        使能中断

中断服务函数

        HAL_GPI

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值