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



KEIL配置与程序修改


#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
#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
#include "apm32e10x.h" // Device header
#include "Delay.h"
#include "led.h"
int main (void)
{
LED_init();
while(1)
{
LED1_turn();
Delay_ms(1000);
}
}
蜂鸣器工程创建
#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);
}
}
作者:m0_65148866