1.硬件
- STM32单片机最小系统
- 433M无线收发模块
- LED灯模块
2.软件
- 驱动文件添加
- GPIO常用函数
- 中断配置流程
- main.c程序
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "exti.h"int main(void)
{HAL_Init(); stm32_clock_init(RCC_PLL_MUL9); led_init(); exti_init(); while(1){ if(buttonA_flag_get() == TRUE) led1_toggle(); if(buttonB_flag_get() == TRUE) led2_toggle(); }
}
#include "exti.h"
#include "sys.h"
#include "delay.h"
#include "led.h"uint8_t buttonA_flag = FALSE;
uint8_t buttonB_flag = FALSE; void exti_init(void)
{GPIO_InitTypeDef gpio_initstruct;__HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); gpio_initstruct.Pin = GPIO_PIN_12; gpio_initstruct.Mode = GPIO_MODE_IT_RISING; gpio_initstruct.Pull = GPIO_PULLDOWN; HAL_GPIO_Init(GPIOA, &gpio_initstruct);HAL_NVIC_SetPriority(EXTI15_10_IRQn, 2, 0); HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); gpio_initstruct.Pin = GPIO_PIN_5; gpio_initstruct.Mode = GPIO_MODE_IT_RISING; gpio_initstruct.Pull = GPIO_PULLDOWN; HAL_GPIO_Init(GPIOB, &gpio_initstruct);HAL_NVIC_SetPriority(EXTI9_5_IRQn, 2, 0); HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
}void EXTI15_10_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
}void EXTI9_5_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5);
}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if (GPIO_Pin == GPIO_PIN_12) {if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_12) == GPIO_PIN_SET) buttonB_flag = TRUE;}else if (GPIO_Pin == GPIO_PIN_5) {if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5) == GPIO_PIN_SET) buttonA_flag = TRUE;}
}uint8_t buttonA_flag_get(void)
{uint8_t temp = buttonA_flag;buttonA_flag = FALSE; return temp;
}void buttonA_flag_set(uint8_t value)
{buttonA_flag = value;
}uint8_t buttonB_flag_get(void)
{uint8_t temp = buttonB_flag;buttonB_flag = FALSE;return temp;
}void buttonB_flag_set(uint8_t value)
{buttonB_flag = value;
}
#ifndef __EXTI_H__
#define __EXTI_H__#include "stdint.h"#define TRUE 1
#define FALSE 0void exti_init(void);
uint8_t buttonA_flag_get(void);
void buttonA_flag_set(uint8_t value);
uint8_t buttonB_flag_get(void);
void buttonB_flag_set(uint8_t value);#endif
#include "led.h"
#include "sys.h"
void led_init(void)
{GPIO_InitTypeDef gpio_initstruct;__HAL_RCC_GPIOB_CLK_ENABLE(); gpio_initstruct.Pin = GPIO_PIN_8 | GPIO_PIN_9; 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);led1_off();led2_off();
}
void led1_on(void)
{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
}
void led1_off(void)
{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
}
void led1_toggle(void)
{HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8);
}
void led2_on(void)
{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);
}
void led2_off(void)
{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);
}
void led2_toggle(void)
{HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
}
#ifndef __LED_H__
#define __LED_H__void led_init(void);
void led1_on(void);
void led1_off(void);
void led1_toggle(void);
void led2_on(void);
void led2_off(void);
void led2_toggle(void);#endif
3.实物效果
- 硬件模块接线
433M—>STM32
D0—>PB5
D1—>PA12
5V—>5V
GND—>GND
ST-Link下载方式 - 实验现象
按下遥控器A键,LED1亮/灭;按下遥控器B键,LED2亮/灭。