STM32F030控制蜂鸣器
生活随笔
收集整理的這篇文章主要介紹了
STM32F030控制蜂鸣器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(1)main()函數中:
int BeeTime=0; int soundSta=0;void main() {TIM2_Init();soundBee(1);//長響一聲soundBee(0);//短響一聲}void TIM2_Init() {TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);TIM_TimeBaseStructure.TIM_Period = (TIM_CLK / 200000) - 1;TIM_TimeBaseStructure.TIM_Prescaler = 1999;TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_SetAutoreload(TIM2, ((TIM_CLK / 200000) - 1));TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); // 打開捕獲比較中斷 TIM_IT_UpdateTIM_Cmd(TIM2, ENABLE); //開啟時鐘 }/***********************功能:蜂鳴器啟動sta:1為成功,0為失敗 ***********************/ void soundBee(int sta) {DOOR_PWR1(1);if(sta==1){soundSta=0;BeeTime = 80;}else{soundSta=1;BeeTime = 20;} }(2)hardware_conf.h函數中:
#define DOOR_PWR1(tmp) GPIOA->ODR=tmp?(GPIOA->ODR|1<<1):(GPIOA->ODR&(~(1<<1))) //蜂鳴器(3)stm32f10x_it.c函數中:
extern int BeeTime;void TIM2_IRQHandler(void) { if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){TIM_ClearITPendingBit(TIM2, TIM_IT_Update);if(BeeTime<0){BeeTime++;if(BeeTime==0){DOOR_PWR1(1);BeeTime=20;}}if(BeeTime>0||soundSta==2){if(BeeTime>0) BeeTime--;if(BeeTime==0){if(soundSta==0){DOOR_PWR1(0); }else if(soundSta==1){DOOR_PWR1(0);BeeTime=-10;soundSta=2;}else{DOOR_PWR1(0);soundSta=0;}}}}else if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET){TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); } }?
總結
以上是生活随笔為你收集整理的STM32F030控制蜂鸣器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UART, SPI, IIC的详解及三者
- 下一篇: STM32F030控制LED