L9110驱动代码,按下一次按键1启动风扇,再次按下按键1关闭风扇,STM32F103ZET6,标准库
时间: 2023-06-18 11:07:58 浏览: 106
以下是使用标准库驱动L9110的代码,按下按键1启动风扇,再次按下按键1关闭风扇:
```
#include "stm32f10x.h"
#define KEY_GPIO_PORT GPIOA
#define KEY_GPIO_PIN GPIO_Pin_0
#define FAN_GPIO_PORT GPIOB
#define FAN_GPIO_PIN GPIO_Pin_0
void GPIO_Configuration(void);
void delay(__IO uint32_t nCount);
int main(void)
{
GPIO_Configuration();
while(1)
{
if(GPIO_ReadInputDataBit(KEY_GPIO_PORT, KEY_GPIO_PIN) == RESET)
{
// 按下按键1
GPIO_WriteBit(FAN_GPIO_PORT, FAN_GPIO_PIN, (BitAction)(1 - GPIO_ReadOutputDataBit(FAN_GPIO_PORT, FAN_GPIO_PIN)));
// 反转风扇GPIO的输出状态
delay(500); // 延时去抖动
}
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
// 配置按键1所在的GPIO口
GPIO_InitStructure.GPIO_Pin = KEY_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStructure);
// 配置风扇所在的GPIO口
GPIO_InitStructure.GPIO_Pin = FAN_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(FAN_GPIO_PORT, &GPIO_InitStructure);
GPIO_WriteBit(FAN_GPIO_PORT, FAN_GPIO_PIN, Bit_RESET); // 初始时关闭风扇
}
void delay(__IO uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
```
这里使用了上拉输入和推挽输出,需要在GPIO口的初始化中进行配置。按下按键1时,会检测到GPIO口的输入状态为低电平,此时会反转风扇GPIO的输出状态,从而实现启动或关闭风扇。在按键检测时加入了500ms的延时,以去抖动。
阅读全文