91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 6KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-05-13
  • 語言: 其他
  • 標簽: stm32??

資源簡介

類型:接口文檔及源碼 文件: music.c music,h sys.h sys.c delay,c delay,h 接口使用說明: stm32蜂鳴器播放音頻(純音樂) 原理:定時器PWM輸出到蜂鳴器,通過改變定時器重裝值,改變頻率,從而改變音頻,我采用stm32F407zet6,蜂鳴器接在PA8,如果你的不是在TIM_Beep_Control_Init()改io 使用實例: int main(void) { TIM_Beep_Control_Init(); Play_Music(music);//music表示音樂表數組 }

資源截圖

代碼片段和文件信息

#include?“delay.h“
#include?“sys.h“
//////////////////////////////////////////////////////////////////////////////////? ?
//如果使用OS則包括下面的頭文件(以ucos為例)即可.
#if?SYSTEM_SUPPORT_OS
#include?“includes.h“ //支持OS時,使用 ??
#endif


static?u8??fac_us=0; //us延時倍乘數 ???
static?u16?fac_ms=0; //ms延時倍乘數在os下代表每個節拍的ms數

#if?SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS定義了說明要支持OS了(不限于UCOS).
//當delay_us/delay_ms需要支持OS的時候需要三個與OS相關的宏定義和函數來支持
//首先是3個宏定義:
//????delay_osrunning:用于表示OS當前是否正在運行以決定是否可以使用相關函數
//delay_ostickspersec:用于表示OS設定的時鐘節拍delay_init將根據這個參數來初始哈systick
//?delay_osintnesting:用于表示OS中斷嵌套級別因為中斷里面不可以調度delay_ms使用該參數來決定如何運行
//然后是3個函數:
//??delay_osschedlock:用于鎖定OS任務調度禁止調度
//delay_osschedunlock:用于解鎖OS任務調度重新開啟調度
//????delay_ostimedly:用于OS延時可以引起任務調度.

//本例程僅作UCOSII和UCOSIII的支持其他OS請自行參考著移植
//支持UCOSII
#ifdef? OS_CRITICAL_METHOD //OS_CRITICAL_METHOD定義了說明要支持UCOSII
#define?delay_osrunning OSRunning //OS是否運行標記0不運行;1在運行
#define?delay_ostickspersec OS_TICKS_PER_SEC //OS時鐘節拍即每秒調度次數
#define?delay_osintnesting? OSIntNesting //中斷嵌套級別即中斷嵌套次數
#endif

//支持UCOSIII
#ifdef? CPU_CFG_CRITICAL_METHOD //CPU_CFG_CRITICAL_METHOD定義了說明要支持UCOSIII
#define?delay_osrunning OSRunning //OS是否運行標記0不運行;1在運行
#define?delay_ostickspersec OSCfg_TickRate_Hz //OS時鐘節拍即每秒調度次數
#define?delay_osintnesting? OSIntNestingCtr //中斷嵌套級別即中斷嵌套次數
#endif


//us級延時時關閉任務調度(防止打斷us級延遲)
void?delay_osschedlock(void)
{
#ifdef?CPU_CFG_CRITICAL_METHOD??? //使用UCOSIII
OS_ERR?err;?
OSSchedLock(&err); //UCOSIII的方式禁止調度,防止打斷us延時
#else //否則UCOSII
OSSchedLock(); //UCOSII的方式禁止調度,防止打斷us延時
#endif
}

//us級延時時恢復任務調度
void?delay_osschedunlock(void)
{
#ifdef?CPU_CFG_CRITICAL_METHOD??? //使用UCOSIII
OS_ERR?err;?
OSSchedUnlock(&err); //UCOSIII的方式恢復調度
#else //否則UCOSII
OSSchedUnlock(); //UCOSII的方式恢復調度
#endif
}

//調用OS自帶的延時函數延時
//ticks:延時的節拍數
void?delay_ostimedly(u32?ticks)
{
#ifdef?CPU_CFG_CRITICAL_METHOD
OS_ERR?err;?
OSTimeDly(ticksOS_OPT_TIME_PERIODIC&err);//UCOSIII延時采用周期模式
#else
OSTimeDly(ticks); //UCOSII延時
#endif?
}
?
//systick中斷服務函數使用OS時用到
void?SysTick_Handler(void)
{
if(delay_osrunning==1) //OS開始跑了才執行正常的調度處理
{
OSIntEnter(); //進入中斷
OSTimeTick();??????? //調用ucos的時鐘服務程序???????????????
OSIntExit();??????? ? //觸發任務切換軟中斷
}
}
#endif
???
//初始化延遲函數
//當使用OS的時候此函數會初始化OS的時鐘節拍
//SYSTICK的時鐘固定為AHB時鐘的1/8
//SYSCLK:系統時鐘頻率
void?delay_init(u8?SYSCLK)
{
#if?SYSTEM_SUPPORT_OS? //如果需要支持OS.
u32?reload;
#endif
? SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);?
fac_us=SYSCLK/8; //不論是否使用OSfac_us都需要使用
#if?SYSTEM_SUPPORT_OS? //如果需要支持OS.
reload=SYSCLK/8; //每秒鐘的計數次數?單位為M ???
reload*=1000000/delay_ostickspersec; //根據delay_ostickspersec設定溢出時間
//reload為24位寄存器最大值:16777216在168M下約合0.7989s左右
fac_ms=1000/delay_ostickspersec; //代表OS可以延時的最少單位 ???
SysTick->CTRL|=SysTick_CTRL_TICKINT_Ms

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????7046??2019-02-05?18:54??MUSIC\delay.c

?????文件????????267??2019-02-05?17:47??MUSIC\delay.h

?????文件???????2829??2019-02-11?18:17??MUSIC\music.c

?????文件???????2672??2019-02-11?18:18??MUSIC\music.h

?????文件????????468??2019-02-05?17:47??MUSIC\sys.c

?????文件???????2882??2019-02-05?17:47??MUSIC\sys.h

?????目錄??????????0??2019-02-11?18:18??MUSIC

-----------?---------??----------?-----??----

????????????????16164????????????????????7


評論

共有 條評論