gpio控制风扇、蜂鸣器、马达
main.c
#include "stm32mp1xx_gpio.h"
#include "led.h"
#include "buzzer.h"
#include "fun.h"
#include "motor.h"
//延时
void delay(int ms)
{
int i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<2000;j++);
}
}
int main()
{
//led初始化
all_led_init();
//buzzer初始化
buzzer_init();
//fun初始化
fun_init();
//motor初始化
motor_init();
while(1)
{
BUZZER_ON();
FUN_ON();
MOTOR_ON();
LED1_ON();
LED2_OFF();
LED3_OFF();
delay(500);
LED2_ON();
LED1_OFF();
LED3_OFF();
delay(500);
LED3_ON();
LED2_OFF();
LED1_OFF();
BUZZER_OFF();
FUN_OFF();
MOTOR_OFF();
delay(500);
}
return 0;
}
led.c
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
void all_led_init()
{
//设置GPIOE GPIOF使能
RCC->MP_AHB4ENSETR |= (0x3<<4);
//设置输出模式
GPIOE->MODER &= (~(0x3<<20));
GPIOE->MODER |= (0x1<<20);
GPIOF->MODER &= (~(0x3<<20));
GPIOF->MODER |= (0x1<<20);
GPIOE->MODER &= (~(0x3<<16)); //PE8
GPIOE->MODER |= (0x1<<16);
//设置推挽模式
GPIOE->OTYPER &= (~(0x1<<10));
GPIOF->OTYPER &= (~(0x1<<10));
GPIOE->OTYPER &= (~(0x1<<8)); //PE8
//设置低速
GPIOE->OSPEEDR &= (~(0x3<<20));
GPIOF->OSPEEDR &= (~(0x3<<20));
GPIOE->OSPEEDR &= (~(0x3<<16)); //PE8
//设置无上拉下拉
GPIOE->PUPDR &= (~(0x3<<20));
GPIOF->PUPDR &= (~(0x3<<20));
GPIOE->PUPDR &= (~(0x3<<16));
//设置低电平输出
GPIOE->ODR &= (~(0x1<<10));
GPIOF->ODR &= (~(0x1<<10));
GPIOE->ODR &= (~(0x1<<8));
}
//led1亮
void LED1_ON()
{
GPIOE->ODR |= (0X1<<10);
}
//led2亮
void LED2_ON()
{
GPIOF->ODR |= (0X1<<10);
}
//led1亮
void LED3_ON()
{
GPIOE->ODR |= (0X1<<8);
}
//LED1灭
void LED1_OFF()
{
GPIOE->ODR &= (~(0X1<<10));
}
//LED2灭
void LED2_OFF()
{
GPIOF->ODR &= (~(0X1<<10));
}
//LED3灭
void LED3_OFF()
{
GPIOE->ODR &= (~(0X1<<8));
}
buzzer.c
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
void buzzer_init()
{
//设置GPIOB
RCC->MP_AHB4ENSETR |= (0x3<<4);
//设置输出模式
GPIOB->MODER &= (~(0x3<<12));
GPIOB->MODER |= (0x1<<12);
//设置推挽模式
GPIOB->OTYPER &= (~(0x1<<6));
//设置低速
GPIOB->OSPEEDR &= (~(0x3<<12));
//设置低电平输出
GPIOB->ODR &= (~(0x1<<6));
}
//风扇开始
void BUZZER_ON()
{
GPIOB->ODR |= (0X1<<6);
}
//风扇关闭
void BUZZER_OFF()
{
GPIOB->ODR &= (~(0X1<<6));
}
motor.c
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
void motor_init()
{
RCC->MP_AHB4ENSETR |= (0x3<<4);
GPIOF->MODER &= (~(0x3<<12));
GPIOF->MODER |= (0x1<<12);
GPIOF->OTYPER &= (~(0x1<<6));
GPIOF->OSPEEDR &= (~(0x3<<12));
GPIOF->ODR &= (~(0x3<<6));
}
void MOTOR_ON()
{
GPIOF->ODR |= (0x1<<6);
}
void MOTOR_OFF()
{
GPIOF->ODR &= (~(0x1<<6));
}