2024.3.20 ARM

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));
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值