用stm32f401的ll库写一个用功能键控制灯亮或者灭的代码
时间: 2024-04-14 14:27:52 浏览: 247
下面是一个使用STM32F401芯片的LL库(Low-Level库)编写的示例代码,通过功能键控制灯的亮灭:
```c
#include "stm32f4xx_ll_bus.h"
#include "stm32f4xx_ll_gpio.h"
#include "stm32f4xx_ll_exti.h"
#include "stm32f4xx_ll_system.h"
#include "stm32f4xx_ll_utils.h"
#define GPIO_PIN_D0 LL_GPIO_PIN_0
#define GPIO_PIN_K0 LL_GPIO_PIN_6
void GPIO_Init(void);
void EXTI_Init(void);
int main(void) {
GPIO_Init();
EXTI_Init();
while (1) {
// 无需执行任何操作
}
}
void GPIO_Init(void) {
// 使能GPIOA时钟
LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
// 配置D0引脚为输出模式
LL_GPIO_SetPinMode(GPIOA, GPIO_PIN_D0, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinOutputType(GPIOA, GPIO_PIN_D0, LL_GPIO_OUTPUT_PUSHPULL);
// 配置K0引脚为输入模式
LL_GPIO_SetPinMode(GPIOC, GPIO_PIN_K0, LL_GPIO_MODE_INPUT);
LL_GPIO_SetPinPull(GPIOC, GPIO_PIN_K0, LL_GPIO_PULL_UP);
}
void EXTI_Init(void) {
// 使能SYSCFG时钟
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
// 配置K0引脚为中断源
LL_SYSCFG_SetEXTISource(LL_SYSCFG_EXTI_PORTC, LL_SYSCFG_EXTI_LINE6);
// 配置K0引脚为上升沿触发
LL_EXTI_EnableRisingTrig_0_31(LL_EXTI_LINE_6);
// 使能K0引脚的中断
LL_EXTI_EnableIT_0_31(LL_EXTI_LINE_6);
// 设置中断优先级
NVIC_SetPriority(EXTI9_5_IRQn, 0);
// 使能中断
NVIC_EnableIRQ(EXTI9_5_IRQn);
}
void EXTI9_5_IRQHandler(void) {
if (LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_6)) {
// K0按键触发
if (LL_GPIO_IsOutputPinSet(GPIOA, GPIO_PIN_D0)) {
LL_GPIO_ResetOutputPin(GPIOA, GPIO_PIN_D0); // 熄灭D0引脚
} else {
LL_GPIO_SetOutputPin(GPIOA, GPIO_PIN_D0); // 点亮D0引脚
}
LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_6); // 清除中断标志位
}
}
```
注意,以上代码使用了STM32F4的LL库,相应的库文件需要添加到工程中。在实际应用中,您需要根据您的硬件电路和需求进行适当的配置和修改。还请确保正确设置时钟和中断优先级,并在主循环中等待按键中断触发。
阅读全文