实验目的:
让蜂鸣器每隔一秒响一次;
实验步骤:
实验程序:
/************************led.c***********************/
#include "stm32f4xx.h" //在SYSTEM目录下可以找到
#include "sys.h"
void LED_Init(void){
RCC->AHB1ENR |= 1<<5; //使能GPIO端口的F时钟
GPIO_Set(GPIOF,PIN9|PIN10,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_25M,GPIO_PUPD_PU);
PFout(9) = 1;
PFout(10) = 1;
}
/************************led.h***********************/
#ifndef _LED_H
#define _LED_H
void LED_Init(void);
#endif
/************************beep.c***********************/
#include "sys.h"
#include "beep.h"
void Beep_Init(void){
RCC->AHB1ENR |= 1<<5; //使能PORTE时钟
GPIO_Set(GPIOF,PIN8,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PD); //PF8设置,下拉
PFout(8) =0; //关闭蜂鸣器
}
/************************beep.h***********************/
#include "sys.h"
#ifndef _BEEP_H
#define _BEEP_H
void Beep_Init(void);
#endif
/************************timer.c***********************/
#include "sys.h"
#include "stm32f4xx.h"
/*
本示例的作用就是,
让蜂鸣器每隔一秒响一次;
*/
/*
关于定时器的操作可参考寄存器版的步骤
*/
/*
中断初始化函数:
主要是关于寄存器的相关配置
*/
void TIM3_Init(void){
/*************************
定时器中断的设置:
*************************/
//使能TIM3时钟;
RCC->APB1ENR |= 1 << 1;
/*预分频器*/
TIM3->PSC = 8400 - 1;
/*ARR为自动重载寄存器*/
TIM3->ARR = 10000 -1 ;
//使能更新中断
TIM3->DIER |= 1;
//使能计数器
TIM3->CR1 |= 1;
/*TIM中断分组设置*/
//SCB和NVIC,可参考STM32F3与STM32F4系列Cortex M4内核编程手册.pdf
SCB->AIRCR |= 0x5 << 8; //设置分组
NVIC->IP[29] |= 0; //设置优先级,具体可分析MY_NVIC_Init()函数;
//若不使能,则中断不会发生
NVIC->ISER[0] |= 1 << 29; //使能中断;
}
/*每1000ms产生一次中断*/
void TIM3_IRQHandler(void){
/*
中断处理函数:
*/
if(TIM3->S