APM32E103系列单片机之LED与蜂鸣器(仿江科大工程)

工程的创建

  • 复制我们的工程模板,改名为 APM32 点亮LED ,再在此文件夹下创建 system 和 hardware 文件夹,用来存放系统的延时函数和外设的初始化函数,如图所示:
  • 我们将江科大的延时函数复制到 system 文件夹下,将LED文件复制到 hardware 文件夹下,到此工程创建结束,如图所示:

KEIL配置与程序修改

  • 添加如图所示两个文件夹,将刚才的延时和LED文件添加进来:

  • 由于此芯片支持120M的主频,我们修改主频为120M,此时需要修改延时函数的参数,如图所示:
  • 修改后的延时函数如下所示:
#include "apm32e10x.h"                  // Device header


/**
  * @brief  微秒级延时
  * @param  xus 延时时长,范围:0~233015
  * @retval 无
  */
void Delay_us(uint32_t xus)
{
	SysTick->LOAD = 120 * xus;				//设置定时器重装值
	SysTick->VAL = 0x00;					//清空当前计数值
	SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器
	while(!(SysTick->CTRL & 0x00010000));	//等待计数到0
	SysTick->CTRL = 0x00000004;				//关闭定时器
}

/**
  * @brief  毫秒级延时
  * @param  xms 延时时长,范围:0~4294967295
  * @retval 无
  */
void Delay_ms(uint32_t xms)
{
	while(xms--)
	{
		Delay_us(1000);
	}
}
 
/**
  * @brief  秒级延时
  * @param  xs 延时时长,范围:0~4294967295
  * @retval 无
  */
void Delay_s(uint32_t xs)
{
	while(xs--)
	{
		Delay_ms(1000);
	}
} 
#ifndef __DELAY_H
#define __DELAY_H

void Delay_us(uint32_t us);
void Delay_ms(uint32_t ms);
void Delay_s(uint32_t s);

#endif

  • 修改LED的初始化程序,打开时钟函数用 RCM_EnableAPB2PeriphClock() ,GPIO初始化用 GPIO_Config() , 头文件需添加 apm32e10x_gpio.h 和 apm32e10x_rcm.h 具体如下所示:
#include "led.h"  


void LED_init(void)
{
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOB);
    
	GPIO_Config_T  configStruct;
    configStruct.pin = GPIO_PIN_8;
    configStruct.mode = GPIO_MODE_OUT_PP;
    configStruct.speed = GPIO_SPEED_50MHz;

    GPIO_Config(GPIOB, &configStruct);

	GPIO_SetBit(GPIOB,GPIO_PIN_8);
}

void LED1_on(void)
{
	GPIO_ResetBit(GPIOB,GPIO_PIN_8);  //liang
}

void LED1_off(void)
{
	GPIO_SetBit(GPIOB,GPIO_PIN_8);  //灭
}

void LED1_turn(void)
{
	if(GPIO_ReadOutputBit(GPIOB,GPIO_PIN_8)==0)  //电平反转
	{
		GPIO_SetBit(GPIOB,GPIO_PIN_8);  //灭+
	}
	else
	{
		GPIO_ResetBit(GPIOB,GPIO_PIN_8);
	}
}


#ifndef __LED_H__
#define __LED_H__

#include "apm32e10x.h"
#include "apm32e10x_gpio.h"
#include "apm32e10x_rcm.h"

void LED_init(void);

void LED1_on(void);
void LED1_off(void);
void LED2_on(void);
void LED2_off(void);
void LED1_turn(void);
void LED2_turn(void);
		
#endif
  • main函数修改后,如下所示:
#include "apm32e10x.h"                  // Device header
#include "Delay.h" 
#include "led.h" 

int main (void)
{
	LED_init();
	
	while(1)
	{
		LED1_turn();
		Delay_ms(1000);
	}
}

蜂鸣器工程创建

  • 像LED一样,添加 buzzer 文件:

  • 添加工程文件

  • 修改蜂鸣器的程序,如下所示:
    #include "buzzer.h"
    
    void buzzer_init(void)
    {
        RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOB);
        
    	GPIO_Config_T  configStruct;
        configStruct.pin = GPIO_PIN_9;
        configStruct.mode = GPIO_MODE_OUT_PP;
        configStruct.speed = GPIO_SPEED_50MHz;
        GPIO_Config(GPIOB, &configStruct);
    
    	GPIO_SetBit(GPIOB,GPIO_PIN_9);
    }
    
    void buzzer_on(void)
    {
    	GPIO_ResetBit(GPIOB,GPIO_PIN_9);
    }
    
    void buzzer_off(void)
    {
    	GPIO_SetBit(GPIOB,GPIO_PIN_9);
    }
    
    void buzzer_turn(void)
    {
    	if(GPIO_ReadOutputBit(GPIOB,GPIO_PIN_9)==0)  //电平反转
    	{
    		GPIO_SetBit(GPIOB,GPIO_PIN_9);  
    	}
    	else
    	{
    		GPIO_ResetBit(GPIOB,GPIO_PIN_9);
    	}
    }
    
    #ifndef __BUZZER_H__
    #define __BUZZER_H__
    
    #include "apm32e10x.h"
    #include "apm32e10x_gpio.h"
    #include "apm32e10x_rcm.h"
    
    void buzzer_init(void);
    void buzzer_on(void);
    void buzzer_off(void);
    void buzzer_turn(void);
    
    #endif
    
    #include "apm32e10x.h"                  // Device header
    #include "Delay.h" 
    #include "led.h" 
    #include "buzzer.h" 
    
    int main (void)
    {
    	buzzer_init();
    	
    	while(1)
    	{
    		buzzer_turn();
    		Delay_ms(1000);
    	}
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值